问题标签 [cupy]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cupy - 将数组的列作为向量执行“for循环”时,Cupy 比 numpy 慢
我正在尝试使用 cupy 并行化以下操作:我有一个数组。对于该数组的每一列,我生成 2 个随机向量。我取那个数组列,添加一个向量,减去另一个,然后使这个新向量成为数组的下一列。我继续,直到我完成阵列。
我已经问过以下问题 - Cupy 在遍历数组时比 numpy 慢。但这是不同的,因为我相信我遵循了并行化操作的建议,并使用一个“for循环”而不是两个,并且只遍历数组列而不是行和列。
当我在 cupy 中运行它时,时间大约为 0.62 秒。
当我切换到 numpy 时,我 1) 取消注释 #import numpy as cp 和 #x = cp.zeros((200,200)) 和 2) 改为注释 import cupy as cp 和 x = (cp.zeros((200,200), ' F')):
时间大约为 0.11 秒。
我想也许如果我增加数组大小,例如从 (200,200) 到 (2000,2000),那么我会看到 Cupy 的速度更快,但它仍然更慢。
从某种意义上说,我知道这可以正常工作,因为如果我将 cp.random.poisson 中的系数从 0.01 更改为 0.5,我只能在 cupy 中这样做,因为 lambda 对于 numpy 来说太大了。
但是,我如何使用 cupy 让它变得更快?
python - 仅为选定的 GPU 架构编译 cupy
查看 git 存储库 ( https://github.com/cupy/cupy ) 和文档 ( https://docs-cupy.chainer.org/en/stable/install.html ) 我没有找到任何生成仅与当前硬件(GPU)相关的可执行文件。
举个例子,在opencv
(为了大大减少旧环境下可能超过8h的编译时间),你可以指定GPU的架构。opencv
(这里是从仅与硬件相关的源代码编译的示例)
> 导出 JAVA_HOME=/opt/DEVOPS/SDK/jvm/jdk-11.0.4/ ;cmake3 .. -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D WITH_CUDA=ON -D WITH_GTK=ON -D WITH_OPENGL=ON -D ENABLE_CXX11=ON -D BUILD_EXAMPLES=ON -D OPENCV_EXTRA_MODULES_PATH=/opt/SP/packages/opencv_contrib /modules -D BUILD_opencv_java=ON -D BUILD_opencv_python2=ON -D BUILD_opencv_python3=ON -D CUDA_FAST_MATH=ON -D CUDA_GENERATION="Maxwell" -D WITH_OPENMP=ON -D BUILD_TESTS=OFF -D OPENCV_ENABLE_NONFREE=ON -D BUILD_TIFF=ON -D WITH_OPENCL=ON -D WITH_IPP=ON -D WITH_TBB=ON -D WITH_EIGEN=ON -D WITH_V4L=ON -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=$(python3 -c "import sys; print(sys.prefix)") -D PYTHON3_EXECUTABLE=$(which python3) -D PYTHON3_INCLUDE_DIR=$(python3 -c"从 distutils.sysconfig 导入 get_python_inc; print(get_python_inc())") -D PYTHON3_PACKAGES_PATH=$(python3 -c "从 distutils.sysconfig 导入 get_python_lib; print(get_python_lib())") -D PYTHON3_LIBRARY=/opt/DEVOPS/SDK /anaconda3/lib -D OPENCV_PYTHON3_INSTALL_PATH=/opt/DEVOPS/SDK/anaconda3/lib/python3.7/site-packages -D PYTHON3_DEFAULT_EXECUTABLE=/opt/DEVOPS/SDK/anaconda3/bin/python -D OPENCV_ENABLE_NONFREE=ON
通过这种方式,将只为给定的架构生成代码。
我发现了这个有用的提交。(https://github.com/cupy/cupy/commit/4d3b05c4f010d62f9daf92a049fa2e8a789f6cc2)
是否有人尝试仅针对给定架构强制将“--generate-code”参数编译为“ --generate-code=arch=compute_XX ,code=compute_XX ”而不是默认使用所有可能的拱门来编译Cupy ?
python - 安装带有 cupy 的 pip 包作为要求将安装置于永无止境的循环中
我正在尝试制作一个以 cupy 作为要求之一的 pip 包,但我在要求中包含了 cupy,pip install 最终进入了一个永无止境的循环。我正在尝试在已经安装 Cupy 的 Google Colab 上安装该软件包,因此它应该只检查 Cupy 是否已安装,而不是再次尝试安装它。
我在 github 中制作了一个最小的 pip 包,其中 cupy 是唯一的要求。
https://github.com/Santosh-Gupta/TroubleShootCupyInstall
我尝试将其安装在 Google Colab 中
输出很多,因为它是冗长的,但这些是当它到达循环时打印的行。
为方便起见,我制作了一个运行这条线的 Google Colab 笔记本,并具有完整的输出。
https://colab.research.google.com/drive/1DFR78cJ07KaHkJfpjh8370SxNw0HXI50
python - Cupy OutOfMemoryError 尝试在内存映射模式下 cupy.load 较大尺寸的 .npy 文件,但 np.load 工作正常
我正在尝试使用内存映射模式在 cupy 中加载一些较大的 .npy 文件,但我一直在运行OutOfMemoryError
.
我认为由于它是在内存映射模式下打开的,因此此操作不应该占用太多内存,因为内存映射实际上并未将整个数组加载到内存中。
我可以用 np.load 加载这些文件就好了,这似乎只发生在 cupy.load 上。我的环境是带有 Tesla K80 GPU 的 Google Colab。它有大约 12 gigs CPU ram、12 gigs GPU ram 和 350 gb 磁盘空间。
这是重现错误的最小示例:
输出:
我还想知道这是否可能与 Google Colab 及其环境/GPU 有关。
为方便起见,这里是这个最小代码的 Google Colab 笔记本
https://colab.research.google.com/drive/12uPL-ZnKhGTJifZGVdTN7e8qBRRus4tA
numpy - 如何为内存映射文件使用 CUDA 固定的“零拷贝”内存?
目标/问题
在 Python 中,我正在寻找一种从内存映射文件读取/写入数据到 GPU 的快速方法。
在之前的 SO 溢出帖子中 [ Cupy OutOfMemoryError when trying to cupy.load large dimension .npy files in memory map mode, but np.load works fine ]
提到这可以使用 CUDA 固定的“零拷贝”内存。此外,这种方法似乎是由这个人 [ cuda - 零拷贝内存,内存映射文件] 开发的,尽管那个人正在使用 C++ 工作。
我之前的尝试是使用 Cupy,但我对任何 cuda 方法都持开放态度。
到目前为止我尝试过的
我提到了我如何尝试使用 Cupy,它允许您以内存映射模式打开 numpy 文件。
我尝试过的结果
我的尝试导致OutOfMemoryError:
有人提到
似乎 cupy.load 将要求整个文件首先适合主机内存,然后是设备内存。
还有人提到
CuPy 无法处理 mmap 内存。因此,CuPy 默认直接使用 GPU 内存。 https://docs-cupy.chainer.org/en/stable/reference/generated/cupy.cuda.MemoryPool.html#cupy.cuda.MemoryPool.malloc 如果要使用统一内存,可以更改默认内存分配器。
我尝试使用
cupy.cuda.set_allocator(cupy.cuda.MemoryPool(cupy.cuda.memory.malloc_managed).malloc)
但这似乎并没有什么不同。发生错误时,我的 CPU Ram 大约为 16 gig,但我的 GPU ram 为 0.32 gig。我正在使用 Google colab,我的 CPU Ram 是 25 gigs,GPU ram 是 12 gigs。所以看起来在整个文件托管在主机内存中之后,它检查它是否适合设备内存,当它看到它只有所需的 16 个演出中的 12 个时,它抛出了一个错误(我最好的猜测)。
所以,现在我试图找出一种方法来使用固定的“零拷贝”内存来处理内存映射文件,该文件会将数据提供给 GPU。
如果重要的话,我尝试传输的数据类型是浮点数组。通常,对于只读数据,二进制文件会加载到 GPU 内存中,但我正在处理数据,我在每一步都尝试读取和写入。
python - 在上传到 pypi 的包中,不检查是否已经安装了包要求,尽管从 github 安装了相同的代码
这是对这个问题的跟进
安装带有 cupy 的 pip 包作为要求将安装置于永无止境的循环中
不知何故,一个 pip 包无法检测到已经安装了 cupy,并试图重新安装它。
给出的解决方案是使用
当我尝试通过 github 安装时,这很有效
!pip 安装https://github.com/Santosh-Gupta/SpeedTorch/archive/master.zip
但是,当我通过代码上传到 pip 并尝试运行它时,它又重新安装了 cupy
!pip 安装 SpeedTorch
我正在使用已经安装了 cupy 的 Goolgle colab。为方便起见,这是我正在使用的笔记本的链接
https://colab.research.google.com/drive/17KrdcHh29cpFMel_oYnOTkA1dNElolZ1
这是我的 setup.py 文件
https://github.com/Santosh-Gupta/SpeedTorch/blob/master/setup.py
这个问题可能是 cupy 独有的,因为我在其他 python 包中没有这个问题。
cupy - Cupy给出了意想不到的结果
我正在尝试使用 cupy 加速一些 numpy 代码,但我得到了一些意想不到的结果。
我正在使用 NVIDIA GeForce GTX 1080 Ti 的 Mac Pro 2013 年末 OSX 10.13.6 上运行它。我已经能够在如下所示的 ipython 中重现错误。在确定范数时,共轭与自身的乘积应该给出一个实数。在 numpy 中这是符合预期的,但是使用 cupy 我最终得到了一个虚构的部分。
我已经意识到在 cupy 和 numpy 中运行代码之间的其他精度不一致。
我究竟做错了什么?
numpy - AttributeError:“numpy.float32”对象没有属性“to_cpu”
再会,
我正在开发一个用于无线信号检测的深度学习模型。下面是计算模型精度和误码率 (BER) 的函数片段:
运行代码时,尽管已导入所有必需的链接器模块,但仍出现以下错误。在这个问题上我真的需要你的帮助,因为我被困了近两个月,在我的项目中没有取得任何进展。
以下是提供模型定义代码的附加信息:
嗨,德井圣哉。谢谢你的好意。以下是基于上述代码的模型定义:
或者
嗨@BloodyD。感谢您的出色贡献。该模型开始训练,但后来返回以下错误:
错误发生在下面这段代码的最后一行:
gpu - 如何在 Cupy 中使用多个 GPU?
我正在尝试在 CUPY 中使用多个 GPU 并行化多个矩阵乘法。
Cupy 加速矩阵乘法(例如$A\times B$)。我想知道我是否有四个方阵 A、B、C、D。我想在两个不同的本地 GPU 上计算 AB 和 CD。我怎样才能在 CUPY 中做到这一点?
例如,在张量流中,
CUPY中是否有类似的方法。关于 Cupy 的问题在于它会立即执行代码,因此它不能运行下一行(例如 $C\times D$),直到当前行完成(例如 $A\times B$)。
感谢托斯的帮助。现在的新问题是,假设我有十个这样的矩阵对存储在两个 3d numpy 数组中(比如?*?*10)。如何编写一个循环来存储乘法的结果?
如何将这 3 个 ab 组合在不同的设备中?我可以在不同的 GPU 中拥有同名的数组吗?