CUDA 设备的顺序 [重复]

Posted

技术标签:

【中文标题】CUDA 设备的顺序 [重复]【英文标题】:Order of CUDA devices [duplicate] 【发布时间】:2019-03-19 19:41:59 【问题描述】:

我看到了this 解决方案,但它并不能完全回答我的问题;它也很旧,所以我不确定它有多相关。

我不断收到 GPU 单元顺序的冲突输出。其中有两个:Tesla K40 和 NVS315(从未使用过的旧设备)。当我运行deviceQuery 时,我得到了

Device 0: "Tesla K40m"
...
Device PCI Domain ID / Bus ID / location ID:   0 / 4 / 0

Device 1: "NVS 315"
...
Device PCI Domain ID / Bus ID / location ID:   0 / 3 / 0

另一方面,nvidia-smi 产生不同的顺序:

 0  NVS 315 

 1  Tesla K40m

我觉得这很令人困惑。我为 Tensorflow(和 Pytorch 的类似解决方案)找到的解决方案是使用

import os
os.environ["CUDA_DEVICE_ORDER"]="PCI_BUS_ID"  
os.environ["CUDA_VISIBLE_DEVICES"]="0"

Tesla 的 PCI 总线 ID 为 4,NVS 的 PCI 总线 ID 为 3,所以应该将其设置为 3 (NVS),对吗?

在pytorch中我设置了

os.environ['CUDA_VISIBLE_DEVICES']='0'
...
device = torch.cuda.device(0)
print torch.cuda.get_device_name(0)

获取Tesla K40m

当我改为设置时

os.environ['CUDA_VISIBLE_DEVICES']='1'
device = torch.cuda.device(1)
print torch.cuda.get_device_name(0)

得到

UserWarning: 
    Found GPU0 NVS 315 which is of cuda capability 2.1.
    PyTorch no longer supports this GPU because it is too old.

  warnings.warn(old_gpu_warn % (d, name, major, capability[1]))
NVS 315

所以我很困惑:tf 和 pytorch 使用的 GPU 设备的 true 顺序是什么?

【问题讨论】:

如果你打算使用pytorch或者tensorflow,你需要的顺序是nvidia-smi显示的。因为 nvidia 驱动程序将帮助您在 GPU 上“运行”深度神经网络,所以您需要这个顺序。 我编辑了问题,第二种情况应该是os.environ['CUDA_VISIBLE_DEVICES']='1'。所以这是默认的顺序:Tesla=0,NVS=1。只有当我设置 os.environ['CUDA_DEVICE_ORDER'] = 'PCI_BUS_ID' 时,顺序才会反转 【参考方案1】:

默认情况下,CUDA 按计算能力对 GPU 排序。 GPU:0 将是您主机上最快的 GPU,在您的情况下是 K40m。

如果您设置 CUDA_DEVICE_ORDER='PCI_BUS_ID' 则 CUDA 根据您设置机器的方式订购您的 GPU,这意味着 GPU:0 将是您第一个 PCI-E 通道上的 GPU。

Tensorflow 和 PyTorch 都使用 CUDA GPU 顺序。这与您展示的内容一致:

os.environ['CUDA_VISIBLE_DEVICES']='0'
...
device = torch.cuda.device(0)
print torch.cuda.get_device_name(0)

默认顺序,因此 GPU:0 是 K40m,因为它是您主机上最强大的显卡。

os.environ["CUDA_DEVICE_ORDER"]="PCI_BUS_ID"  
os.environ['CUDA_VISIBLE_DEVICES']='0'
...
device = torch.cuda.device(0)
print torch.cuda.get_device_name(0)

PCI-E 通道顺序,因此 GPU:0 是 NVS 中总线 ID 最低的卡。

【讨论】:

以上是关于CUDA 设备的顺序 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Bootstrap 4列顺序在移动设备上不起作用[重复]

os.environ

CUDA中有多少个网格

CUDA 常量内存分配是如何工作的?

已安装 Tensorflow-gpu、CUDA 和 cudnn,但发现 GPU 设备但未使用 [重复]

cuda编程CUDA的运行方式以及gridblock结构关系