给定一个 CuPy 数组a
,有两种方法可以从中获取 numpy 数组:a.get()
和cupy.asnumpy(a)
。它们之间有什么实际区别吗?
import cupy as cp
a = cp.random.randint(10, size=(4,5,6,7))
b = a.get()
c = cp.asnumpy(a)
assert type(b) == type(c) and (b == c).all()
Run Code Online (Sandbox Code Playgroud) 我想在google colab上用GPU运行chainer.这需要安装,但我无法正确安装,因为它无法在我的colab vm中找到cuda环境.
错误信息如下......
收集cupy下载cupy-2.4.0.tar.gz(1.7MB)100%|███████████████████████████████ █| 1.7MB 740kB/s来自命令python setup.py的完整输出egg_info:cc1plus:警告:命令行选项'-Wstrict-prototypes'对C/ObjC有效但对C++无效/tmp/tmpds3ikncy/a.cpp:1:10 :致命错误:cublas_v2.h:没有这样的文件或目录#include ^ ~~~~~~~~~~~~编译终止.选项:{'profile':False,'linetrace':False,'annotate':False,'no_cuda':False}************************************************** *警告:nvcc不在路径中.*警告:请设置nvcc的路径.**************************************************包含目录:[]库目录:[]命令'x86_64-linux-gnu-gcc'失败,退出状态为1************************************************** *警告:包含未找到的文件:['cublas_v2.h','cuda.h','cuda_profiler_api.h ','cuda_runtime.h','curand.h','cusparse.h','nvrtc.h','nvToolsExt.h']*警告:跳过安装cuda支持***警告:检查CFLAGS环境变量**************************************************追溯(最近一次调用最后一次):文件"",第1行,文件"/tmp/pip-build-qu5red9h/cupy/setup.py",第32行,在ext_modules = cupy_setup_build.get_ext_modules()文件"/ tmp/pip -build-qu5red9h/cupy/cupy_setup_build.py",第385行,在get_ext_modules extensions = make_extensions(arg_options,compiler,use_cython)文件"/tmp/pip-build-qu5red9h/cupy/cupy_setup_build.py",第275行,在make_extensions中引发异常('您的CUDA环境无效.'例外:您的CUDA环境无效 .请检查上面的错误日志.
----------------------------------------
Run Code Online (Sandbox Code Playgroud)
命令"python setup.py egg_info"失败,错误代码1在/ tmp/pip-build-qu5red9h/cupy /
我正在学习使用cupy.但我发现一个问题确实令人困惑.看起来杯子起初在节目中表现很好.当它运行一段时间后,Cupy似乎要慢得多.这是代码:
import cupy as np
from line_profiler import LineProfiler
def test(ary):
for i in range(1000):
ary**6
def main():
rand=np.random.rand(1024,1024)
test(rand)
test(rand)
test(rand)
test(rand)
test(rand)
test(rand)
test(rand)
lp = LineProfiler()
lp_wrapper = lp(main)
lp_wrapper()
lp.print_stats()
Run Code Online (Sandbox Code Playgroud)
这是时间表现:
Timer unit: 2.85103e-07 s
Total time: 16.3308 s
File: E:\Desktop\test.py
Function: main at line 8
Line # Hits Time Per Hit % Time Line Contents
==============================================================
8 def main():
9 1 1528817.0 1528817.0 2.7 rand=np.random.rand(1024,1024)
10 1 111014.0 111014.0 0.2 test(rand)
11 1 …
Run Code Online (Sandbox Code Playgroud) 在Python中,我正在寻找一种从内存映射文件到GPU读取/写入数据的快速方法。
在先前的SO溢出文章中[ 当在内存映射模式下尝试cupy.load较大尺寸的.npy文件时,cupy OutOfMemoryError,但np.load可以正常工作 ]
在提到的地方,可以使用CUDA固定的“零复制”存储器。此外,尽管该人员正在使用C ++ 进行开发,但该方法似乎是由该人员开发的[ cuda-零拷贝内存,内存映射文件 ]。
我以前的尝试是在Cupy中进行的,但是我可以接受任何cuda方法。
我提到了我如何使用Cupy的方法,它允许您以内存映射模式打开numpy文件。
import os
import numpy as np
import cupy
#Create .npy files.
for i in range(4):
numpyMemmap = np.memmap( 'reg.memmap'+str(i), dtype='float32', mode='w+', shape=( 2200000 , 512))
np.save( 'reg.memmap'+str(i) , numpyMemmap )
del numpyMemmap
os.remove( 'reg.memmap'+str(i) )
# Check if they load correctly with np.load.
NPYmemmap = []
for i in range(4):
NPYmemmap.append( np.load( 'reg.memmap'+str(i)+'.npy' , mmap_mode = 'r+' ) )
del NPYmemmap
# Eventually results in memory …
Run Code Online (Sandbox Code Playgroud) 我正在研究 numpy 和 cupy 之间的差异,并注意到在我创建的这两个类似程序中,尽管在 GPU 上运行,cupy 版本的速度要慢得多。
这是 numpy 版本:
import time
import numpy as np
size = 5000
upperBound = 20
dataSet = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
dataLength = np.random.randint(0, high=upperBound, size=size, dtype='l')
randomNumber = np.random.randint(0, high=62, size=size * upperBound, dtype='l')
count = 0
dataCount = 0
start_time = time.time()
for i in range(size):
lineData = ""
for j in range(dataLength[i]):
lineData = lineData + dataSet[randomNumber[count]]
count = count + 1
print(lineData)
dataCount = dataCount + 1
time = str(time.time() - …
Run Code Online (Sandbox Code Playgroud) 我一直在论坛上闲逛,尝试不同的方法在没有 Nvidia GPU 的设备上运行的 MacOS 上安装 cupy。到目前为止,没有任何效果。我尝试了 Python 3.7 的 Homebrew 安装和 Python 3.7 的 conda 安装,并尝试了以下各项:
conda install -c conda-forge cupy
conda install cupy
pip install cupy
git clone https://github.com/cupy/cupy.git
cd cupy
git submodule update --init
pip install -e .
Run Code Online (Sandbox Code Playgroud)
错误总是以同样的方式...对于 conda,MacOS 存储库没有它,对于 pip,安装抱怨我的系统上没有安装 CUDA。根据我在网上阅读的内容,cupy 应该能够安装为仅用于开发目的的 CPU,我希望有人能够阐明我可以做什么来获得有效的安装。
这是一个错误日志示例,供参考pip install cupy
:
ERROR: Command errored out with exit status 1:
command: /Users/nold/miniconda3/envs/SPANet/bin/python -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/j4/nzmp4kf17z3d1z22wzwjy3m00000gn/T/pip-install-uyg_c8fb/cupy_3e5357e9d2ae4f96a8575fd2e4cc5b5e/setup.py'"'"'; __file__='"'"'/private/var/folders/j4/nzmp4kf17z3d1z22wzwjy3m00000gn/T/pip-install-uyg_c8fb/cupy_3e5357e9d2ae4f96a8575fd2e4cc5b5e/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) …
Run Code Online (Sandbox Code Playgroud) 我cupy
在一个接收numpy
数组的函数中使用,将它推到 GPU 上,对其执行一些操作并返回它的cp.asnumpy
副本。
问题:函数执行后内存未释放(如 中所示ndidia-smi
)。
我知道cupy
. 但是,这似乎仅适用于每个用户。当多个用户在同一个 GPU 服务器上进行计算时,他们会受到其他用户缓存内存的限制。
最后我还尝试cp._default_memory_pool.free_all_blocks()
在函数内部调用。这似乎没有效果。导入cupy
主代码并free_all_blocks
“手动”调用有效,但我想将 GPU 内容封装在函数中,对用户不可见。
您能否完全释放函数内部使用的 GPU 内存,以便其他用户可以使用它?
最小的例子:
主要模块:
# dont import cupy here, only numpy
import numpy as np
# module in which cupy is imported and used
from memory_test_module import test_function
# host array
arr = np.arange(1000000)
# out is also on host, gpu stuff happens in test_function
out = test_function(arr)
# GPU …
Run Code Online (Sandbox Code Playgroud) 我尝试通过 conda 包分发安装 Nvidia 的 GPU python 包,但遇到以下错误:
PackagesNotFoundError: The following packages are not available from
current channels:
- pyculib
Current channels:
- https://repo.anaconda.com/pkgs/main/win-64
- https://repo.anaconda.com/pkgs/main/noarch
- https://repo.anaconda.com/pkgs/r/win-64
- https://repo.anaconda.com/pkgs/r/noarch
- https://repo.anaconda.com/pkgs/msys2/win-64
- https://repo.anaconda.com/pkgs/msys2/noarch
Run Code Online (Sandbox Code Playgroud)
CuPy 和 pyculib 软件包的正确分发渠道是什么?
状况:
代码 1:
import cupy as cp
x = cp.arange(6).reshape(2, 3).astype('f')
Run Code Online (Sandbox Code Playgroud)
错误信息 1:
NVRTC compilation error: nvrtc: error: invalid value for --gpu-architecture (-arch)
-----
Name:
Options: -I/home/liu/.local/lib/python2.7/site-packages/cupy/core/include -I /usr/local/cuda-9.0/include -ftz=true -arch=compute_20
CUDA source:
1
-----
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/liu/.local/lib/python2.7/site-packages/cupy/creation/ranges.py", line 57, in arange
_arange_ufunc(typ(start), typ(step), ret, dtype=dtype)
File "cupy/core/_kernel.pyx", line 864, in …
Run Code Online (Sandbox Code Playgroud) CPU:i7-9750 @2.6GHz(16G DDR4 内存);GPU:英伟达 Geforce GTX 1600 TI (6G);操作系统:Windows 10-64 位
我试图看看与 CPU 相比,GPU 在执行基本矩阵运算方面的速度有多快,我基本上遵循了这个https://towardsdatascience.com/heres-how-to-use-cupy-to-make-numpy-700x-faster -4b920dda1f56。以下是我的超级简单代码
import numpy as np
import cupy as cp
import time
### Numpy and CPU
s = time.time()
A = np.random.random([10000,10000]); B = np.random.random([10000,10000])
CPU = np.matmul(A,B); CPU *= 5
e = time.time()
print(f'CPU time: {e - s: .2f}')
### CuPy and GPU
s = time.time()
C= cp.random.random([10000,10000]); D = cp.random.random([10000,10000])
GPU = cp.matmul(C,D); GPU *= 5
cp.cuda.Stream.null.synchronize()
# to let the code …
Run Code Online (Sandbox Code Playgroud)