AMD GPU 上的 CuPy 导致 ImportError

Posted

技术标签:

【中文标题】AMD GPU 上的 CuPy 导致 ImportError【英文标题】:CuPy on AMD GPU causing an ImportError 【发布时间】:2020-10-30 18:02:28 【问题描述】:

我正在尝试使用/测试对 CuPy (8.1.0) 的(实验性)AMD GPU 支持。简而言之:我有一个ImportError

我按照说明在 Ubuntu 焦点机器上安装 ROCm(使用 gfx906/Radeon VII (Vega 20) 卡)。 从doc 我设置了提到的变量(调整了HCC_AMDGPU_TARGET),ROCM_HOMEexport PATH=$PATH:/opt/rocm/bin:/opt/rocm/profiler/bin:/opt/rocm/opencl/binpip3 install -v --no-cache-dir cupy 成功,没有任何抱怨。由于-v 选项,只有一些编译器注释和警告 现在,当我尝试导入 cupy 时,它会抛出 ImportError
In [1]: import cupy                                                                                                                                                                                                                         
---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
/usr/local/lib/python3.8/dist-packages/cupy/__init__.py in <module>
     19             message='can\'t resolve package from __spec__')
---> 20         from cupy import core  # NOQA
     21 except ImportError as e:

/usr/local/lib/python3.8/dist-packages/cupy/core/__init__.py in <module>
----> 1 from cupy.core import core  # NOQA
      2 from cupy.core import internal  # NOQA
      3 

cupy/core/core.pyx in init cupy.core.core()
cupy/core/_routines_manipulation.pyx in init cupy.core._routines_manipulation()
cupy/core/_routines_indexing.pyx in init cupy.core._routines_indexing()
cupy/core/_routines_math.pyx in init cupy.core._routines_math()
cupy/core/_reduction.pyx in init cupy.core._reduction()
cupy/core/_cub_reduction.pyx in init cupy.core._cub_reduction()

ModuleNotFoundError: No module named 'cupy.cuda.cub'

The above exception was the direct cause of the following exception:

ImportError                               Traceback (most recent call last)
<ipython-input-1-329ec5cf1bc8> in <module>
----> 1 import cupy

/usr/local/lib/python3.8/dist-packages/cupy/__init__.py in <module>
     39 original error: '''.format(_exc_info[1]))  # NOQA
     40 
---> 41     raise ImportError(_msg) from e
     42 
     43 

ImportError: CuPy is not correctly installed.
If you are using wheel distribution (cupy-cudaXX), make sure that the version of CuPy you installed matches with the version of CUDA on your host.
Also, confirm that only one CuPy package is installed:
  $ pip freeze

If you are building CuPy from source, please check your environment, uninstall CuPy and reinstall it with:
  $ pip install cupy --no-cache-dir -vvvv

Check the Installation Guide for details:
  https://docs.cupy.dev/en/latest/install.html

original error: No module named 'cupy.cuda.cub'

接下来我该怎么做?在编译过程中我应该寻找什么?提前致谢

编辑在这里请求安装过程的完整标准输出和标准错误以及控制台的一些 io:https://seafile.cloud.uni-hannover.de/d/68862cd1057e47d180aa/

【问题讨论】:

在构建 CuPy 之前是否安装了 hipcubrocprim?它们是必需的依赖项。 是的。我apt-get installed 来自文档的完整行。后来exported 变量并执行pip3 行。全部作为“用户”root(我有我的理由为什么(这里)我不使用 sudo) 如果您能找到一种方法在此处发布完整的安装日志(pip3 install -v ... 的输出),那就太好了。要尝试的另一件事是克隆 v8 分支,然后从源代码git clone -b v8.1.0 https://github.com/cupy/cupy.git; cd cupy; pip3 install -v . 构建,只是看看它是否是 PyPI 上的 sdist 的问题。 (顺便说一句,这些天我是支持 CuPy 的 ROCm 的主要驱动力) @LeoFang 我将请求的日志上传到我们的 seafile 文件夹。我稍后会尝试你的 git 方法 【参考方案1】:

总结目前在cmets中的讨论:

对于 CuPy v8.x(最新的稳定版本):在 v8.1 之前,有问题的 cupy.cuda.cub 模块未在 ROCm/HIP 环境中构建,希望在 v8.2 中得到修复(请参阅 ticket) . 对于 CuPy v9.x(主分支):只要正确安装了 rocPRIM 和 hipCUB,它就应该可以工作。很可能是 OP 的本地环境设置不正确,导致 cupy.cuda.cub 模块未构建,从而导致 ImportError

【讨论】:

更新:这应该在 CuPy v8.2 中修复,它是几天前刚刚发布的。

以上是关于AMD GPU 上的 CuPy 导致 ImportError的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Cupy 中使用多个 GPU?

如何指示 CuPy 在 GPU 中同时运行多个相同的作业?

为啥同时使用 numba.cuda 和 CuPy 从 GPU 传输数据这么慢?

使用 Cupy 的 GPU FFT 卷积

用完 GPU Ram 的大型 cupy 阵列

在没有 GPU 支持的 MacOS 上安装 cupy