我已在我的计算机中添加了 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
我在尝试使用 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 的共享内存(不足)。
您可以将数据和模型加载到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)
如前所述,您需要设置 CUDA_VISIBLE_DEVICES。
如果您想使用 1 个 GPU,则为:
CUDA_VISIBLE_DEVICES=1
如果您想进行更复杂的设置,可以在以下链接中找到更多详细信息:如何选择在哪个 GPU 上运行作业?
我在下面遇到了同样的错误:
运行时错误:在您的系统上找不到 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')