标签: cupy

cupy.asnumpy() 和 get() 之间的区别

给定一个 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)

python numpy cupy

5
推荐指数
1
解决办法
1249
查看次数

可以在谷歌colab上安装cupy吗?

我想在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 /

cuda chainer google-colaboratory cupy

4
推荐指数
1
解决办法
2583
查看次数

迭代次数增加时,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 cupy

4
推荐指数
1
解决办法
162
查看次数

如何将CUDA固定的“零复制”内存用于内存映射文件?

目标/问题

在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)

memory-management cuda numpy chainer cupy

4
推荐指数
1
解决办法
370
查看次数

为什么numpy的执行时间比cupy快?

我正在研究 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)

numpy cupy

3
推荐指数
1
解决办法
794
查看次数

在不支持 GPU 的 MacOS 上安装 cupy

我一直在论坛上闲逛,尝试不同的方法在没有 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)

python cupy

3
推荐指数
1
解决办法
3880
查看次数

如何充分释放函数中使用的GPU内存

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)

python cupy

2
推荐指数
1
解决办法
2772
查看次数

如何为 Windows 版 pyculib 添加正确的分发渠道?

我尝试通过 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 软件包的正确分发渠道是什么?

python conda miniconda cupy

2
推荐指数
1
解决办法
1923
查看次数

CuPy 不适用于 Ubuntu 18.04 和 CUDA 9.0

状况:

  • CuPy 版本 7.0.0
  • 操作系统/平台 Ubuntu 18.04
  • CUDA 9.0 版
  • cuDNN/NCCL 7.6.5 版(适用于 cuda 9.0)
  • GPU 英伟达 GTX580
  • 驱动程序版本 390.116

代码 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)

python cuda cupy

2
推荐指数
1
解决办法
610
查看次数

为什么我的 GPU 在矩阵运算中比 CPU 慢?

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)

python gpgpu machine-learning deep-learning cupy

2
推荐指数
1
解决办法
333
查看次数