为啥 PyTorch 找不到我的 NVIDIA 驱动程序以支持 CUDA?
Posted
技术标签:
【中文标题】为啥 PyTorch 找不到我的 NVIDIA 驱动程序以支持 CUDA?【英文标题】:Why does PyTorch not find my NVDIA drivers for CUDA support?为什么 PyTorch 找不到我的 NVIDIA 驱动程序以支持 CUDA? 【发布时间】:2019-06-13 07:55:32 【问题描述】:我已将 GeForce GTX 1080 Ti 添加到我的机器中(运行 Ubuntu 18.04 和带有 Python 3.7 的 Anaconda),以便在使用 PyTorch 时利用 GPU。两张卡都被正确识别:
$ lspci | grep VGA
03:00.0 VGA compatible controller: NVIDIA Corporation GF119 [NVS 310] (reva1)
04:00.0 VGA compatible controller: NVIDIA Corporation GP102 [GeForce GTX 1080 Ti] (rev a1)
NVS 310 处理我的 2 显示器设置,我只想将 1080 用于 PyTorch。我还安装了当前在存储库中的最新 NVIDIA 驱动程序,这似乎没问题:
$ nvidia-smi
Sat Jan 19 12:42:18 2019
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.87 Driver Version: 390.87 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 NVS 310 Off | 00000000:03:00.0 N/A | N/A |
| 30% 60C P0 N/A / N/A | 461MiB / 963MiB | N/A Default |
+-------------------------------+----------------------+----------------------+
| 1 GeForce GTX 108... Off | 00000000:04:00.0 Off | N/A |
| 0% 41C P8 10W / 250W | 2MiB / 11178MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 Not Supported |
+-----------------------------------------------------------------------------+
驱动程序版本 390.xx 允许根据 NVIDIA docs 运行 CUDA 9.1 (9.1.85)。由于这也是 Ubuntu 存储库中的版本,我简单地安装了 CUDA 工具包:
$ sudo apt-get-installed nvidia-cuda-toolkit
再一次,这似乎没问题:
$ 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
和
$ apt-cache policy nvidia-cuda-toolkit
nvidia-cuda-toolkit:
Installed: 9.1.85-3ubuntu1
Candidate: 9.1.85-3ubuntu1
Version table:
*** 9.1.85-3ubuntu1 500
500 http://sg.archive.ubuntu.com/ubuntu bionic/multiverse amd64 Packages
100 /var/lib/dpkg/status
最后,我使用 conda 从头安装了 PyTorch
conda install pytorch torchvision -c pytorch
据我所知也是错误:
$ conda list
...
pytorch 1.0.0 py3.7_cuda9.0.176_cudnn7.4.1_1 pytorch
...
但是,PyTorch 似乎没有找到 CUDA:
$ python -c 'import torch; print(torch.cuda.is_available())'
False
更详细地说,如果我强制 PyTorch 使用 x.cuda()
将张量 x
转换为 CUDA,我会收到错误消息:
Found no NVIDIA driver on your system. Please check that you have an NVIDIA GPU and installed a driver from 82 http://...
我在这里缺少什么?我对此很陌生,但我想我已经在网上查了很多信息,以找到任何警告,例如 NVIDIA 驱动程序和 CUDA 工具包版本?
编辑: PyTorch 的更多输出:
print(torch.cuda.device_count()) # --> 0
print(torch.cuda.is_available()) # --> False
print(torch.version.cuda) # --> 9.0.176
【问题讨论】:
我会摆脱 NVS 310。我会使用 NVIDIA 提供的 linux 安装指南中的说明验证 CUDA 安装。构建并运行类似vectorAdd
或bandwidthTest
的示例代码。如果它们不能正常工作,那么您的 CUDA 安装已损坏。
我实际上刚刚阅读了 PyTorch 二进制文件与所需的 CUDA 和 cuDNN 内容捆绑在一起。所以现在删除了 CUDA 工具包。实际上,我从一台机器上拿了 1080,它的设置与 NVS 310 相同。我认为这将有助于一些负载平衡。
@RobertCrovella 我只用 1080 对其进行了测试,并且可以使用它。仅使用此卡时,我还可以使用更新的驱动程序(415 而不是 390)。我还只尝试了带有 390 驱动程序的 NVS 310。我知道这个卡的计算能力太低,但我记得错误是相应的,而不是说没有找到驱动程序。然而,这一次,它甚至找不到/看到驱动程序。所以,是的,我现在就把 1080 留在那儿。谢谢!
您的 PyTorch 构建适用于 CUDA 9.0.176,而您安装了 CUDA 9.1.85。但是,删除 CUDA 安装并让 anaconda 为您安装它。
【参考方案1】:
由于您有两个图形卡,因此选择卡 ID CUDA_VISIBLE_DEVICES=GPU_ID
应该可以按照此 explanation 解决问题。
【讨论】:
【参考方案2】:我在尝试使用 PyTorch 在我们的服务器(有 4 个 GPU)中训练时遇到了同样的问题,所以我没有选择只移除 GPU。
但是,我使用 docker 和 docker-compose 来运行我的训练。因此,我从nvidia 中找到了这张 pytorch 图像,其中包含所有必要的设置。请在拉镜像之前,请务必检查此page,以确定哪个镜像标签与您的nvidia驱动版本兼容(如果拉错了,它将无法工作)。
然后,在您的 docker-compose 文件中,您可以指定要使用的 GPU,如下所示:
version: '3.5'
services:
training:
build:
context: ""
dockerfile: Dockerfile
container_name: training
environment:
- CUDA_VISIBLE_DEVICES=0,2
ipc: "host"
确保将 ipc 设置为“host”,这将允许您的 docker 容器使用主机共享内存,而不是分配给 docker 的共享内存(不足)。
【讨论】:
以上是关于为啥 PyTorch 找不到我的 NVIDIA 驱动程序以支持 CUDA?的主要内容,如果未能解决你的问题,请参考以下文章