我想让几个GPU可以使用
os.environ"CUDA_VISIBLE_DEVICES“=
以下内容对我不起作用,可能是因为GPU被分割成MIG分区。
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)
我已经尝试过的其他方法:
import os
os.environ["CUDA_VISIBLE_DEVICES"] = 'MIG-e4a69dad-640c-5006-b7f6-00000000000c'
工作,但只适用于一个GPU Id。
import os
os.environ["CUDA_VISIBLE_DEVICES"] = 'MIG-e4a69dad-640c-5006-b7f6-00000000000c', 'MIG-df1904ce-d118-5cc6-8f05-000000000007'
TypeError:预期的,而不是元组
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列表也不起作用:
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:预期的,而不是列表
任何帮助都会很高兴的!
发布于 2022-07-30 18:27:45
MIG分区的本质是只有一个MIG“实例”对CUDA运行时的任何实例化都是可见的,这类似于每个进程。
因此,使2个(或更多) MIG实例可用/可见仍然不允许您从CUDA中的单个进程中使用它们。你只能用一个。
因此,您的语句“工作,但只对一个GPU Id”是指示正确的用法,和MIG的实际限制。
请参阅这里
“使用CUDA 11,只支持单个MIG实例的枚举。”
顺便说一句,显然您没有使用多处理。但是,如果您使用的是multiprocessing
,那么很可能使用“多个MIG”,但您仍然只希望启用/公开每个进程一个,而且实际上,每个进程仍仅限于一个进程。但是,每个过程都需要一个单独的声明,就像您已经展示过的那样:
os.environ["CUDA_VISIBLE_DEVICES"] = 'MIG-e4a69dad-640c-5006-b7f6-00000000000c'
这超出了我回答的范围,给出了一个完整的配方。
https://stackoverflow.com/questions/73175008
复制相似问题