Ale*_*lex 1 cuda tensorflow pytorch
我看到了这个解决方案,但是并不能完全回答我的问题。它也很老,所以我不确定它的相关性。
我不断收到有关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
Run Code Online (Sandbox Code Playgroud)
另一方面,nvidia-smi产生不同的顺序:
0 NVS 315
1 Tesla K40m
Run Code Online (Sandbox Code Playgroud)
我觉得很困惑。我为Tensorflow(以及Pytorch的类似解决方案)找到的解决方案是使用
import os
os.environ["CUDA_DEVICE_ORDER"]="PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"]="0"
Run Code Online (Sandbox Code Playgroud)
Tesla的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)
Run Code Online (Sandbox Code Playgroud)
要得到 Tesla K40m
当我改为
os.environ['CUDA_VISIBLE_DEVICES']='1'
device = torch.cuda.device(1)
print torch.cuda.get_device_name(0)
Run Code Online (Sandbox Code Playgroud)
要得到
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
Run Code Online (Sandbox Code Playgroud)
所以我很困惑: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)
Run Code Online (Sandbox Code Playgroud)
默认顺序为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)
Run Code Online (Sandbox Code Playgroud)
PCI-E通道顺序,因此GPU:0是您的NVS总线ID最低的卡。
| 归档时间: |
|
| 查看次数: |
1182 次 |
| 最近记录: |