Tensorflow CUDA设备订单

Tensorflow CUDA设备订单,tensorflow,cuda,pytorch,Tensorflow,Cuda,Pytorch,我看到了解决方案,但它并没有完全回答我的问题;它也很老了,所以我不确定它有多重要 对于GPU单元的顺序,我不断得到冲突的输出。其中有两种:特斯拉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 / Bu

我看到了解决方案,但它并没有完全回答我的问题;它也很老了,所以我不确定它有多重要

对于GPU单元的顺序,我不断得到冲突的输出。其中有两种:特斯拉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"
特斯拉的PCI总线ID为4,NVS的PCI总线ID为3,所以应该将其设置为3(NVS),对吗

我点燃了火把

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设备的真正顺序是什么

默认情况下,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根据计算能力对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最低的卡。

如果要使用pytorch或tensorflow,您需要的顺序是
nvidia smi
显示。因为英伟达的驱动程序将帮助你在GPU上运行“深度神经网络”,所以你需要这个命令。我编辑了这个问题,第二个案例应该是OS。Envion [ CuaaaVistiByPosits ] =“1”。因此,这是默认顺序:特斯拉=0,NVS=1。只有当我将os.environ['CUDA_DEVICE_ORDER']='PCI_BUS_ID'设置为反向时,如果要使用pytorch或tensorflow,则需要的顺序是
nvidia smi
显示。因为英伟达的驱动程序将帮助你在GPU上运行“深度神经网络”,所以你需要这个命令。我编辑了这个问题,第二个案例应该是OS。Envion [ CuaaaVistiByPosits ] =“1”。因此,这是默认顺序:特斯拉=0,NVS=1。只有当我设置os.environ['CUDA_DEVICE_ORDER']='PCI_BUS_ID'时,顺序才会反转