为什么 PyTorch 找不到支持 CUDA 的 NVDIA 驱动程序?

问题描述 投票:0回答:5

我已在我的计算机中添加了 GeForce GTX 1080 Ti(运行 Ubuntu 18.04 和 Anaconda 以及 Python 3.7),以便在使用 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 文档 运行 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
将张量
x.cuda()
转换为 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
python anaconda pytorch
5个回答
1
投票

我在尝试使用 PyTorch 在我们的服务器(有 4 个 GPU)中进行训练时遇到了同样的问题,所以我没有选择仅删除 GPU。

但是,我正在使用 docker 和 docker-compose 来运行我的训练。因此,我从 nvidia 找到了这个 pytorch 图像,它附带了所有必要的设置。请在拉取镜像之前,务必检查此页面以确定哪个镜像标签与您的 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 的共享内存(不足)。


0
投票

由于您有两张显卡,选择一个卡 ID

CUDA_VISIBLE_DEVICES=GPU_ID
应该可以按照此 解释解决问题。


0
投票

您可以将数据和模型加载到GPU。您可以创建数据加载器并将其加载到本地系统(如果有 GPU 支持),或者您也可以在 kaggle 或 colab 服务器上在线使用它。如果在本地运行,您可以根据您的系统更改batch_size、num_workers等。

from torch.utils.data import DataLoader

def get_default_device():
"""Pick GPU if available, else CPU"""
if torch.cuda.is_available():
    return torch.device('cuda')
else:
    return torch.device('cpu')

def to_device(data, device):
"""Move tensor(s) to chosen device"""
if isinstance(data, (list,tuple)):
    return [to_device(x, device) for x in data]
return data.to(device, non_blocking=True)

class DeviceDataLoader():
"""Wrap a dataloader to move data to a device"""
def __init__(self, dl, device):
    self.dl = dl
    self.device = device
    
def __iter__(self):
    """Yield a batch of data after moving it to device"""
    for b in self.dl: 
        yield to_device(b, self.device)

def __len__(self):
    """Number of batches"""
    return len(self.dl)

0
投票

如前所述,您需要设置 CUDA_VISIBLE_DEVICES。

如果您想使用 1 个 GPU,则为:

CUDA_VISIBLE_DEVICES=1

如果您想进行更复杂的设置,可以在以下链接中找到更多详细信息:如何选择在哪个 GPU 上运行作业?


0
投票

我在下面遇到了同样的错误:

运行时错误:在您的系统上找不到 NVIDIA 驱动程序。请检查您是否拥有 NVIDIA GPU 并从 http://www.nvidia.com/Download/index.aspx

安装了驱动程序

当我尝试在

Google Colab
上的 CPU 上使用 device="cuda" 创建张量时,如下所示:

import torch

torch.tensor([3, 8, 4], device="cuda") # Error

所以,我将Edit->Notebook settings->

Hardware accelerator
Runtime
->
Change runtime taype
->
Hardware accelerator
处的
CPU
更改为
GPU
,然后我可以创建如下所示的张量:

import torch

torch.tensor([3, 8, 4], device="cuda") # tensor([3, 8, 4], device='cuda:0')
© www.soinside.com 2019 - 2024. All rights reserved.