首页 > 解决方案 > anaconda 如何挑选 cudatoolkit

问题描述

我有多个安装了不同 cuda 工具包的 anaconda 环境。

env1 有 cudatoolkit 10.0.130

env2 有 cudatoolkit 10.1.168

env3 有 cudatoolkit 10.2.89

我通过conda list在每个环境上运行找到了这些。

当我这样做nvidia-smi时,无论我在哪个环境中,我都会得到以下输出

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 435.21       Driver Version: 435.21       CUDA Version: 10.1     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce RTX 208...  Off  | 00000000:01:00.0  On |                  N/A |
|  0%   42C    P8     7W / 260W |    640MiB / 11016MiB |      2%      Default |
+-------------------------------+----------------------+----------------------+

上面显示的 cuda 版本是否与 cuda 工具包版本相同?如果是这样,为什么在所有环境中都是一样的?

在 env3 中cudatoolkit version 10.2.89,我尝试使用命令安装cupypip install cupy-cuda102。尝试执行此操作时出现以下错误。

ERROR: Could not find a version that satisfies the requirement cupy-cuda102 (from versions: none)
ERROR: No matching distribution found for cupy-cuda102

我能够安装使用pip install cupy-cuda101which is for cuda 10.1。为什么找不到 cudatoolkit 10.2?

我问这个问题的原因是,我cupy.cuda.cublas.CUBLASError: CUBLAS_STATUS_NOT_INITIALIZED在运行深度学习模型时遇到错误。我只是想知道 cudatoolkit 版本是否与此错误有关。即使此错误与 cudatoolkit 版本无关,我也想知道 anaconda 如何使用 cudatoolkit。

标签: cudaanacondacupy

解决方案


这并不是真正回答原始问题,而是后续问题:

tensorflow 和 pytorch 可以直接通过 anaconda 安装,无需从 nvidia 显式下载 cudatoolkit。它只需要安装 gpu 驱动程序。在这种情况下,未安装 nvcc 仍然可以正常工作。在这种情况下它是如何工作的?

通常,Anaconda/Conda-Forge 上的 GPU 包是使用 Anaconda 的新 CUDA 编译器工具链构建的。它的制作方式是nvcc和朋友从 CUDA Toolkit 中的其余运行时库(cuFFT、cuSPARSE 等)中分离出来。后者被打包在cudatoolkit包中,作为run-dependency(在 conda 的术语中),并在您安装 GPU 包(如 PyTorch)时安装。

然后,GPU 包被编译、链接到cudatoolkit并打包,这就是您只需要安装 CUDA 驱动程序而无需其他任何东西的原因。默认情况下,系统的 CUDA 工具包(如果有)会因为这种链接而被忽略,除非包(例如 Numba)有自己的方式在运行时查找 CUDA 库。

值得一提的是,安装的cudatoolkit并不总是与您的驱动程序匹配。在这种情况下,您可以明确限制其版本(例如 10.0):

conda install some_gpu_package cudatoolkit=10.0

安装tensorflow的环境激活后会发生什么?conda 是否仅在激活环境时创建用于访问 cuda 库的环境变量?

激活环境时,Conda 总是设置一些环境变量。我不完全确定 tensorflow,但很可能在构建时,它链接到 CUDA 运行时库(cudatoolkit换句话说)。因此,当启动 tensorflow 或其他 GPU 应用程序时,它们将使用cudatoolkit安装在同一个 conda env 中的程序。


推荐阅读