首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用os.environ["CUDA_VISIBLE_DEVICES"]使用GPU_IDs使多个GPU可见

如何使用os.environ["CUDA_VISIBLE_DEVICES"]使用GPU_IDs使多个GPU可见
EN

Stack Overflow用户
提问于 2022-07-30 10:56:47
回答 1查看 504关注 0票数 2

我想让几个GPU可以使用

os.environ"CUDA_VISIBLE_DEVICES“=

以下内容对我不起作用,可能是因为GPU被分割成MIG分区。

代码语言:javascript
运行
复制
import os
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"] = "0,1"

示例GPU ID(Nvidia):

GPU 1: NVIDIA A100-PCIE-40 GPU (UUID: GPU-b654bde8-a9d1-d27a-91eb-000000000a)

MIG 3g.20 MIG设备0:(UUID: MIG-e4a69dad-640 c-5006-b7f6-00000000000c)

米格1g.5gb设备1:(UUID: MIG-df1904ce-d118-5cc6-8f05-000000000007)

MIG 1g.5gb设备2:(UUID: MiG-1b6f718c-a2db-59d5-a83d-000000000a)

MIG 1g.5gb设备3:(UUID: MIG-9882d1bb-3062-5d15-b0d6-000000000009)

米格1g.5gb装置4:(UUID: MIG-198d257f-725f-529c-ac47-000000000004)

我已经尝试过的其他方法:

代码语言:javascript
运行
复制
import os
os.environ["CUDA_VISIBLE_DEVICES"] = 'MIG-e4a69dad-640c-5006-b7f6-00000000000c'

工作,但只适用于一个GPU Id。

代码语言:javascript
运行
复制
import os
os.environ["CUDA_VISIBLE_DEVICES"] = 'MIG-e4a69dad-640c-5006-b7f6-00000000000c', 'MIG-df1904ce-d118-5cc6-8f05-000000000007'

TypeError:预期的,而不是元组

代码语言:javascript
运行
复制
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "MIG-1b6f718c-a2db-59d5-a83d-00000000000a, MIG-9882d1bb-3062-5d15-b0d6-000000000009, MIG-198d257f-725f-529c-ac47-000000000004"

from torch.cuda import device_count
print('Number of Devices: ', device_count())

设备数量:1

这不会导致错误,但显然只给了我一个GPU。

GPU_IDs列表也不起作用:

代码语言:javascript
运行
复制
import os
os.environ["CUDA_VISIBLE_DEVICES"] = ["MIG-1b6f718c-a2db-59d5-a83d-00000000000a", "MIG-9882d1bb-3062-5d15-b0d6-000000000009", "MIG-198d257f-725f-529c-ac47-000000000004"]

TypeError:预期的,而不是列表

任何帮助都会很高兴的!

EN

回答 1

Stack Overflow用户

发布于 2022-07-30 18:27:45

MIG分区的本质是只有一个MIG“实例”对CUDA运行时的任何实例化都是可见的,这类似于每个进程。

因此,使2个(或更多) MIG实例可用/可见仍然不允许您从CUDA中的单个进程中使用它们。你只能用一个。

因此,您的语句“工作,但只对一个GPU Id”是指示正确的用法,和MIG的实际限制。

请参阅这里

“使用CUDA 11,只支持单个MIG实例的枚举。”

顺便说一句,显然您没有使用多处理。但是,如果您使用的是multiprocessing,那么很可能使用“多个MIG”,但您仍然只希望启用/公开每个进程一个,而且实际上,每个进程仍仅限于一个进程。但是,每个过程都需要一个单独的声明,就像您已经展示过的那样:

代码语言:javascript
运行
复制
os.environ["CUDA_VISIBLE_DEVICES"] = 'MIG-e4a69dad-640c-5006-b7f6-00000000000c'

这超出了我回答的范围,给出了一个完整的配方。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73175008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档