具有 CUDA 本地安装的 Pytorch 失败

Pytorch with CUDA local installation fails

我正在尝试使用 CUDA 安装 PyTorch。 我按照中提到的说明(使用 conda 安装)进行了操作 https://pytorch.org/get-started/locally/

conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch

conda 安装命令运行时未出现任何错误:

conda list 显示以下内容:

# Name                    Version                   Build  Channel

cudatoolkit               11.3.1               h2bc3f7f_2
pytorch                   1.11.0          py3.9_cuda11.3_cudnn8.2.0_0    pytorch
pytorch-mutex             1.0                        cuda    pytorch
torch                     1.10.2                   pypi_0    pypi
torchaudio                0.11.0               py39_cu113    pytorch
torchvision               0.11.3                   pypi_0    pypi

但是当我检查 PyTorch 是否启用和访问 GPU 驱动程序和 CUDA 时

torch.cuda.is_available()

returns 错误。

在安装 Pytorch 之前,我检查并确认了

中提到的先决条件

https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#system-requirements https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#pre-installation-actions

这是我的 ubuntu 服务器详细信息:

环境:

Ubuntu 18.04.6 LTS (GNU/Linux 4.15.0-154-generic x86_64)

table 下的脚注:Table 1. CUDA 11.6 中的原生 Linux 分发支持 提及

For Ubuntu LTS on x86-64, the Server LTS kernel (e.g. 4.15.x for 18.04) is supported in CUDA 11.6.

gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0

ldd (Ubuntu GLIBC 2.27-3ubuntu1.5) 2.27

GPU

GeForce GTX 1080 Ti

内核头文件和开发包

$ uname -r
4.15.0-176-generic

据我了解,conda pytorch with CUDA 安装也会安装 CUDA 驱动程序。

我不确定我哪里做错了。 提前致谢。

编辑:

$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2017 NVIDIA Corporation
Built on Fri_Nov__3_21:07:56_CDT_2017
Cuda compilation tools, release 9.1, V9.1.85

nvcc 显示 CUDA 版本 9.1

$ nvidia-smi
Wed May 11 06:44:31 2022
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 410.104      Driver Version: 410.104      CUDA Version: 10.0     |
|-------------------------------+----------------------+----------------------+
| 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 GTX 108...  Off  | 00000000:05:00.0 Off |                  N/A |
| 25%   40C    P8    11W / 250W |     18MiB / 11177MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   1  GeForce GTX 108...  Off  | 00000000:06:00.0 Off |                  N/A |
| 25%   40C    P8    11W / 250W |      2MiB / 11178MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   2  GeForce GTX 108...  Off  | 00000000:09:00.0 Off |                  N/A |
| 25%   35C    P8    11W / 250W |      2MiB / 11178MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      4119      G   /usr/lib/xorg/Xorg                             9MiB |
|    0      4238      G   /usr/bin/gnome-shell                           6MiB |
+-----------------------------------------------------------------------------+

nvidia-smi 显示 CUDA 版本 10.0

https://varhowto.com/check-cuda-version/ 本文提到 nvcc 指的是 CUDA 工具包,而 nvidia-smi 指的是 NVIDIA 驱动程序。

Q1:它是否表明在系统范围内安装了两个不同的 CUDA?

我在我的 conda 环境中安装的 CUDA 工具包(版本 11.3.1)不同于作为系统级安装的工具包(由 nvccnvidia-smi 的输出显示)。

Q2:根据上面的Whosebug线程回答,它们可以分开。还是我本地安装cuda失败的原因?

Nvidia 驱动是否安装正确?输入nvida-smi验证,这个问题可能是驱动版本和cudatoolkit版本不匹配导致的。

我已经解决了这个问题。

免责声明:我是CUDA的新手。 以下答案基于 a) 我在其他主题中阅读的内容 b) 我基于这些讨论的经验。

核心逻辑: CUDA driver 的版本 >= CUDA 运行时版本

参考:Different CUDA versions shown by nvcc and NVIDIA-smi

In most cases, if nvidia-smi reports a CUDA version that is numerically equal to or higher than the one reported by nvcc -V, this is not a cause for concern. That is a defined compatibility path in CUDA (newer drivers/driver API support "older" CUDA toolkits/runtime API).

因为我正在使用 conda 的 cudatoolkit:

  • Driver API: nvidia-smi
  • 运行时API:conda的cudatoolkit

对于 cudatoolkit 11.3.1,我使用的是 nvidia-smi CUDA 版本:10.0

解决方法: 升级 NVIDIA drivers.

按照 https://linuxconfig.org/how-to-install-the-nvidia-drivers-on-ubuntu-18-04-bionic-beaver-linux

中的说明升级了 NVIDIA drivers

Post 升级,这里是 nvidia-smi:

的输出
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.103.01   Driver Version: 470.103.01   CUDA Version: 11.4     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA GeForce ...  Off  | 00000000:05:00.0 Off |                  N/A |
| 27%   46C    P8    12W / 250W |     19MiB / 11177MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
|   1  NVIDIA GeForce ...  Off  | 00000000:06:00.0 Off |                  N/A |
| 25%   44C    P8    11W / 250W |      2MiB / 11178MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
|   2  NVIDIA GeForce ...  Off  | 00000000:09:00.0 Off |                  N/A |
| 25%   39C    P8    11W / 250W |      2MiB / 11178MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A      3636      G   /usr/lib/xorg/Xorg                  9MiB |
|    0   N/A  N/A      4263      G   /usr/bin/gnome-shell                6MiB |
+-----------------------------------------------------------------------------+

现在 driver 版本(11.4) >= 运行时版本 (11.3.1)

PyTorch 现在可以将 CUDA 与 GPU 结合使用:

In [1]: import torch

In [2]: torch.cuda.is_available()
Out[2]: True