CUDA设备订单

时间:2018-10-15 11:26:03

标签: tensorflow cuda pytorch

我看到了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"

特斯拉的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 顺序是什么?

1 个答案:

答案 0 :(得分:5)

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

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

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

 `test('Test ==> Check size details are listed for article ', async t 
=> {

const form = main.searchForm
const list = main.sunglassesList
const firstRow = list.getRowByIndex(0)
const articlesList = main.articlesList
const frameSizeText = articlesList.frameSize.innerText

    await t
    .wait(1000)
    .typeText(form.searchField, '44444')
    .click(form.submitButton)
    .expect(main.sunglassesList.list.innerText)
    .contains('SKODA Bar')
    .click(firstRow.element)
    .expect(frameSizeText, 'Text matches ' +frameSizeText)
    .contains('44/22-144', 'checking framesize text')

   console.log("[DEBUG], Framesize is detailed as:" 
    +frameSizeText.toString())

   })`



 ✓ Test ==> Check frame color is detailed for article 
 [DEBUG], Framesize is detailed as:[object Object]
 ✓ Test ==> Check size details are listed for article 

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

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

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