在Python中使用CUDA的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或

我想在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或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:

  • GPU 0:GTX 1080Ti
  • GPU 1:GT 1030

  • 然后,您可以在
    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,则需要设计诸如获取设备信息之类的方法。再次感谢你。