anaconda如何pick cudatoolkit

How does anaconda pick cudatoolkit

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

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 toolkit版本一样吗? 如果是这样,为什么它在所有环境中都一样?

在具有 cudatoolkit version 10.2.89 的 env3 中,我尝试使用命令 pip install cupy-cuda102 安装 cupy 库。 当我尝试这样做时出现以下错误。

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

我能够使用适用于 cuda 10.1 的 pip install cupy-cuda101 安装。 为什么找不到 cudatoolkit 10.2?

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

Is the cuda version shown above is same as cuda toolkit version?

与CUDA工具包版本无关

If so why is it same in all the enviroments [sic]?

因为是属性的驱动程序。它是您系统中的活动驱动程序支持的最高 CUDA 版本。当您尝试使用 CUDA 10.2 时,这就是为什么什么都不起作用的原因。您的驱动程序需要更新以支持 CUDA 10.2。

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

tensorflow and pytorch can be installed directly through anaconda without explicitly downloading the cudatoolkit from nvidia. It only needs gpu driver installed. In this case nvcc is not installed still it works fine. how does it work in this case?

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

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

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

conda install some_gpu_package cudatoolkit=10.0

what happens when the environment in which tensorflow is installed is activated? Does conda create environment variables for accessing cuda libraries just when the environment is activated?

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