【发布时间】: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' 时,顺序才会反转
标签: tensorflow cuda pytorch