在Python中使用CUDA的GPU控件
我想在Python中使用Tensorflow gpu。 我的电脑有两个GPU。(GPU-A和GPU-B) 我想指定要使用的GPU 因此,当我运行程序时,我使用了以下命令:在Python中使用CUDA的GPU控件,python,tensorflow,cuda,gpu,nvidia,Python,Tensorflow,Cuda,Gpu,Nvidia,我想在Python中使用Tensorflow gpu。 我的电脑有两个GPU。(GPU-A和GPU-B) 我想指定要使用的GPU 因此,当我运行程序时,我使用了以下命令: CUDA_VISIBLE_DEVICES = 1 可以根据该值指定要使用的GPU。 具体而言,分配如下 CUDA_VISIBLE_DEVICES = 0 我能够使用GPU-B 另一方面 CUDA_VISIBLE_DEVICES = 1 当时,我能够使用GPU-A 但是,我无法预先知道GPU-A或GPU-B是否对应于值0或
CUDA_VISIBLE_DEVICES = 1
可以根据该值指定要使用的GPU。
具体而言,分配如下
CUDA_VISIBLE_DEVICES = 0
我能够使用GPU-B
另一方面
CUDA_VISIBLE_DEVICES = 1
当时,我能够使用GPU-A
但是,我无法预先知道GPU-A或GPU-B是否对应于值0或1。
我发现了一句话,“这个索引是按计算能力的降序排列的”。
但是,GPU-A的计算速度比GPU-B快。
我认为“索引是按照修订号(计算能力)的顺序分配的,而不是计算速度”。
事实上,GPU-B比GPU-A具有更高的计算能力
如果假设是正确的,我还有一个问题。
如果使用具有相同计算能力的多个GPU,将如何分配它们?您可以尝试在终端中运行
nvidia smi
。您得到的输出显示您的GPU顺序。例如:
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 410.104 Driver Version: 410.104 CUDA Version: 10.0 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce GTX 108... Off | 00000000:01:00.0 Off | N/A |
| 0% 52C P8 21W / 250W | 2MiB / 11176MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 1 GeForce GT 1030 Off | 00000000:02:00.0 On | N/A |
| 41% 54C P0 N/A / 30W | 1055MiB / 2001MiB | 6% Default |
+-------------------------------+----------------------+----------------------+
在这里,我有2个GPU:
然后,您可以在
TensorFlow
中进一步使用索引,我运行了“nvidia smi”并检查了输出。结果表明,GPU-A是GPU-0,GPU-B是GPU-1。但是,当我使用以下命令CUDA_VISIBLE_DEVICES=0时,使用的GPU是GPU-B。我认为nvidia smi和Python执行之间的索引分配是不同的。索引分配(默认情况下)可能在nvidia smi
和CUDA之间有所不同。这在cuda
SO标签上的各种问题中都有介绍。根据官方答案您还可以使用cuda\u VISIBLE\u DEVICES环境变量以及nvml/(驱动程序)命令以编程方式打包GPU。
@您能告诉我们您是如何使用CUDA\u可视设备的吗?
?很抱歉回复太晚。谢谢你的回答。我了解索引如何根据使用的CUDA进行不同的分配。如果您想使用编程准确地指定特定的GPU,则需要设计诸如获取设备信息之类的方法。再次感谢你。