【问题标题】:GPU control using CUDA in Python在 Python 中使用 CUDA 进行 GPU 控制
【发布时间】:2020-01-02 08:34:18
【问题描述】:

我想在 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,它们将如何分配?

【问题讨论】:

    标签: python tensorflow cuda gpu nvidia


    【解决方案1】:

    您可以尝试在终端中运行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:

    1. GPU 0:GTX 1080Ti
    2. 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 标签上的各种问题中都有介绍。
    • 符合this官方回答You can also use the CUDA_VISIBLE_DEVICES environment variable along with the nvml/(driver) ordering to parcel out GPUs programmatically.。 @Tine 你能告诉我们你是如何使用CUDA_VISIBLE_DEVICES 的吗?
    • 抱歉回复晚了。谢谢回答。我了解如何根据使用的 CUDA 以不同方式分配索引。如果要通过编程准确指定特定的 GPU,则需要设计获取设备信息等方法。再次感谢您。
    猜你喜欢
    • 1970-01-01
    • 2021-04-08
    • 2022-10-23
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    • 2016-05-17
    • 2012-08-20
    • 2017-02-02
    相关资源
    最近更新 更多