首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么PyTorch找不到我的NVDIA驱动程序来支持数据自动化系统?

为什么PyTorch找不到我的NVDIA驱动程序来支持数据自动化系统?
EN

Stack Overflow用户
提问于 2019-01-19 05:30:13
回答 3查看 21.9K关注 0票数 13

我在机器中添加了一个GeForce GTX1080Ti(运行Ubuntu18.04和使用Python3.7运行Anaconda ),以便在使用PyTorch时使用GPU。这两张卡片的识别都是正确的:

代码语言:javascript
复制
$ 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驱动程序,这些驱动程序目前都在存储库中,而且似乎还不错:

代码语言:javascript
复制
$ 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工具包,其中包括:

代码语言:javascript
复制
$ sudo apt-get-installed nvidia-cuda-toolkit

再说一次,这似乎没问题:

代码语言:javascript
复制
$ 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

代码语言:javascript
复制
$ 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

代码语言:javascript
复制
conda install pytorch torchvision -c pytorch

据我所知,也有错误:

代码语言:javascript
复制
$ conda list
...
pytorch                   1.0.0           py3.7_cuda9.0.176_cudnn7.4.1_1    pytorch
...

然而,PyTorch似乎没有找到数据自动化系统:

代码语言:javascript
复制
$ python -c 'import torch; print(torch.cuda.is_available())'
False

更详细地说,如果强制PyTorch用x.cuda()将张量x转换为CUDA,则会得到以下错误:

代码语言:javascript
复制
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的更多输出:

代码语言:javascript
复制
print(torch.cuda.device_count())   # --> 0
print(torch.cuda.is_available())   # --> False
print(torch.version.cuda)          # --> 9.0.176
EN

回答 3

Stack Overflow用户

发布于 2020-09-18 13:59:33

因为您有两个图形卡,所以选择一个卡片ID CUDA_VISIBLE_DEVICES=GPU_ID应该可以按照这个解释来解决这个问题。

票数 0
EN

Stack Overflow用户

发布于 2020-10-28 00:20:40

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

然而,我正在使用码头和码头组成运行我的培训。因此,我从nvidia中找到了这个随所有必要设置而来的py手电筒图像。请在提取图像之前,确保检查此页面以确定哪个图像标记与您的nvidia驱动程序版本兼容(如果您拉错了一个,它将无法工作)。

然后,在您的docker-组合文件中,可以指定要使用哪些GPU,如下所示:

代码语言:javascript
复制
version: '3.5'

services:
  training:
    build:
      context: ""
      dockerfile: Dockerfile
    container_name: training
    environment:
      - CUDA_VISIBLE_DEVICES=0,2
    ipc: "host"

确保将ipc设置为" host ",这将允许您的停靠器容器使用主机共享内存,而不是分配给停靠器的内存(不足)。

票数 0
EN

Stack Overflow用户

发布于 2022-05-06 22:29:34

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

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54264338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档