我看到了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 顺序是什么?
答案 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最低的卡。