AI服务器GPU共享配置:用MIG把一块物理卡切给多任务使用
多个人或多个任务抢一块GPU时,直接让进程混跑很容易互相挤显存、抢算力。
如果显卡支持MIG(Multi-Instance GPU),可以把一块物理GPU切成几个相互隔离的实例,每个实例有独立显存和计算单元,这是AI服务器GPU共享配置里最接近“分卡”的做法。
需要先说明适用条件:MIG主要面向A100、H100及部分专业卡,消费级GeForce卡通常不支持;
启用MIG后原整卡模式会变化,正在跑的任务要先停掉。
下面按从检查到验证的顺序操作。
先确认显卡和驱动是否具备共享条件
登录服务器后先看显卡型号、驱动版本和MIG能力:
nvidia-smi
nvidia-smi -L
如果输出里出现MIG字样或MIG devices列表,说明驱动已识别MIG能力。
再用下面命令查看当前MIG模式:
nvidia-smi mig -lgip
该命令会列出可用的GPU实例配置(GI profile)。
如果提示不支持,通常说明显卡型号不在MIG支持范围,或驱动版本过旧,需要先升级到与显卡匹配的驱动。
启用MIG模式并规划实例切分
默认整卡模式不能直接创建实例,需要先切到MIG模式:
sudo nvidia-smi -mig 1
执行后可能需要重启相关服务或重启服务器,使模式生效。
再次运行nvidia-smi,应能看到MIG模式已启用。
接着根据任务显存需求选择切分档位。
以A100 40GB为例,常见有1g.5gb、2g.10gb、3g.20gb等档位。
创建GPU实例:
sudo nvidia-smi mig -cgi 1g.5gb,1g.5gb,1g.5gb,1g.5gb
这里一次创建四个1g.5gb实例。
创建完成后用nvidia-smi -L查看实例UUID,每个实例会显示类似MIG-xxxx的标识。
如果还要在实例内划分计算实例,可继续用nvidia-smi mig -cci,但多数共享场景直接使用GPU实例即可。
让容器或进程只使用指定实例
创建好实例后,运行任务时不能再用整卡编号,而要绑定具体MIG实例。
以Docker为例,先确认已安装NVIDIA Container Toolkit,然后通过环境变量指定可见设备:
docker run --rm --gpus all \
-e NVIDIA_VISIBLE_DEVICES=MIG-xxxxxxxx \
nvcr.io/nvidia/pytorch:latest nvidia-smi
其中MIG-xxxxxxxx替换为nvidia-smi -L里看到的实际UUID。
容器内应只看到一个MIG设备,且显存容量与所选档位一致。
不用容器时,也可以在进程启动前设置CUDA_VISIBLE_DEVICES,但MIG场景下更推荐用UUID方式绑定,避免编号变化导致任务跑错实例。
容易踩坑的地方
- 切分后原任务会中断:启用MIG属于设备模式变更,先确认没有正在训练的任务,必要时做检查点。
- 显存档位不是随便选:切出来的实例显存固定,模型加载超过档位会直接OOM,规划时要留余量。
- 实例UUID会变:重建实例后UUID不同,脚本里不要写死旧UUID,建议每次从
nvidia-smi -L动态获取。 - 不是所有框架都自动识别MIG:部分旧版CUDA或推理框架需要较新驱动和运行时,升级前先查框架对MIG的支持说明。
验证共享是否真正隔离
在分配好的两个实例里分别跑一个显存占用测试,例如用PyTorch分配固定大小张量。
预期结果是两个进程各自只看到所属实例的显存上限,一个实例占满不会导致另一个实例OOM。
同时用nvidia-smi观察各MIG实例的利用率和显存占用是否独立统计。
如果仍显示整卡汇总,说明任务没有绑定到MIG实例,需要回头检查容器环境变量或进程的可见设备设置。
最后提醒:MIG适合需要硬隔离的多租户或稳定推理场景;
如果只是想让多个小任务排队共用整卡,用CUDA流或推理框架的批处理可能更简单。
配置前先确认业务对隔离和显存的要求,再决定是否切分。