AI服务器GPU MIG配置:把一块显卡拆给多个任务用
MIG(Multi-Instance GPU)是NVIDIA在部分数据中心卡上提供的硬件级切分能力,能把一块物理GPU拆成多个独立实例,每个实例有自己独占的显存和计算单元。
如果你想让多个小模型推理或开发调试任务共享一张卡,又不想互相抢显存,MIG比时间切片更接近“各用各的”。
先确认你的卡和驱动支不支持
不是所有GPU都支持MIG。
A100、H100、A30等数据中心卡支持,消费级GeForce卡通常不支持。
在服务器上执行:
nvidia-smi
看输出顶部是否有MIG相关字样,或者直接查能力:
nvidia-smi --query-gpu=name,mig.mode.current --format=csv
如果返回N/A或命令报错,说明当前卡或驱动不满足条件。
驱动版本建议用较新的生产分支,太旧的驱动可能没有完整的MIG管理命令。
另外确认没有进程正在使用GPU:
nvidia-smi --query-compute-apps=pid,process_name,used_memory --format=csv
有进程就先停掉,否则切换模式会失败。
开启MIG模式并重启GPU
MIG默认是关闭的。
开启命令:
sudo nvidia-smi -mig 1
执行后通常需要重启服务器或至少重置GPU驱动才能生效。
重启后复查:
nvidia-smi --query-gpu=mig.mode.current --format=csv
返回Enabled就说明模式已打开。
创建GI和CI实例
MIG的切分分两层:GI(GPU Instance)是显存和计算单元的粗分,CI(Compute Instance)是GI内部再分出的计算切片。
对大多数共享推理场景,直接创建GI就够了。
查看当前卡支持的切分配置:
nvidia-smi mig -lgip
输出会列出可用的profile,比如1g.10gb、2g.20gb、3g.40gb等。
数字越小,切出来的实例越多,单实例资源越少。
以A100 40GB为例,创建两个2g.20gb实例:
sudo nvidia-smi mig -cgi 2g.20gb,2g.20gb -C
-C表示同时创建对应的CI。
创建完成后查看实例列表:
nvidia-smi mig -lgi
nvidia-smi -L
nvidia-smi -L会显示类似MIG 2g.20gb Device 0: (UUID: MIG-...)的条目,每个UUID就是一个独立实例。
把任务绑到指定实例上
创建好实例后,进程默认仍然看到整卡。
要使用某个MIG实例,通过环境变量指定UUID:
CUDA_VISIBLE_DEVICES=MIG-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx python infer.py
在容器里运行时,需要把对应的MIG设备节点挂进去,并同样设置CUDA_VISIBLE_DEVICES。
用nvidia-smi -L拿到的UUID填进去即可。
验证隔离效果:在两个不同实例上分别跑显存占用任务,然后执行:
nvidia-smi
输出中每个MIG实例会单独显示显存使用量,互不影响,说明绑定生效。
常见报错和回滚方式
切换MIG模式时报错“In use by another process”:先停掉所有CUDA进程,再执行sudo nvidia-smi -mig 1。
创建实例失败,提示profile不可用:用nvidia-smi mig -lgip确认当前卡实际支持的profile,不要照搬其他型号的参数。
想恢复整卡使用:先销毁所有实例:
sudo nvidia-smi mig -dci
sudo nvidia-smi mig -dgi
再关闭MIG模式:
sudo nvidia-smi -mig 0
重启后nvidia-smi应恢复显示完整GPU。
需要提醒的是,MIG实例之间的隔离是硬件级的,但同一实例内多进程仍然会互相影响;
切分后单实例算力有限,不适合跑需要整卡显存的大模型训练。
配置前先想清楚每个任务需要多少显存和算力,再选profile,比先切再调更省事。
如果后续要结合容器做资源配额,可以继续查看站内关于容器与MIG分配限制的实战文章。