GPU服务器算力资源规划决定了训练与推理任务的成本上限。一台8卡A100服务器的采购成本在百万元级,实际利用率低于40%的情况却相当普遍。算力资源规划的核心是让显存、SM算力、NVLink带宽三者匹配业务负载,避免单任务独占整卡造成的浪费。本文给出从资源评估、显存切分到多卡调度的完整方案。
GPU算力资源规划的核心指标:显存、算力与带宽
规划前先明确负载类型。推理任务对显存和带宽敏感,批量大小受显存约束;训练任务对算力和卡间带宽敏感,通信占比随模型规模上升。评估命令组合:
nvidia-smi --query-gpu=index,name,memory.total,memory.used,utilization.gpu --format=csv
nvidia-smi dmon -s pucm -d 5 # 每5秒采样算力/显存/编解码利用率
nvidia-smi topo -m # 查看卡间拓扑,NVLink还是PCIe
显存需求的粗略估算:模型权重每B参数按2字节(FP16)计,7B模型约14G;推理再加1.2倍权重的KV Cache开销;训练时Adam优化器状态占4倍参数量,加上梯度和激活值,7B全量训练至少需要140G显存。利用率和功耗数据连续采集一周,再决定扩容或切分策略。
显存切分方案:MIG与MPS的适用场景对比
A100、H100支持MIG(Multi-Instance GPU)硬件级切分,一张卡最多分7个实例,实例间显存隔离、故障隔离,适合多个推理服务共用一卡:
# A100-80G切分为两个40G实例
sudo nvidia-smi mig -i 0 -cgi 9,9 -C
# cgi=9 对应40G 5g.40gb规格,两个9表示两个实例
nvidia-smi mig -l # 列出所有可切分规格
MPS(Multi-Process Service)是软件级共享,多进程共享同一GPU的调度资源,上下文切换开销小于默认的时间片轮转,适合计算密集型多租户场景。两者选择原则:需要硬隔离(不同客户、不同优先级)用MIG;同租户任务、追求吞吐最大化用MPS。MIG实例内无法使用NVLink,跨卡通信需求高的训练任务不要切分。
多卡调度部署:时间分片与任务队列实践
小团队没有Kubernetes环境时,用任务队列做粗粒度调度即可满足需求。基于文件锁的排队脚本:
#!/usr/bin/env python
# 按显存余量领取GPU卡
import subprocess, sys
def get_free_gpu(need_mem_gb=20):
out = subprocess.check_output(
["nvidia-smi", "--query-gpu=index,memory.free",
"--format=csv,noheader,nounits"]).decode()
for line in out.strip().split("\n"):
idx, free = line.split(",")
if int(free.strip()) >= need_mem_gb * 1024:
return idx
return None
gpu = get_free_gpu()
if gpu:
print(f"CUDA_VISIBLE_DEVICES={gpu}")
sys.exit(0)
sys.exit(1) # 由上游crontab每分钟重试
训练框架层面,DeepSpeed和PyTorch DDP都支持按卡分任务:不同任务指定不同CUDA_VISIBLE_DEVICES即可并行。推理服务用vLLM的–tensor-parallel-size控制单卡占用,配合显存利用率参数gpu-memory-utilization=0.9避免预留浪费。
GPU资源利用率监控与容量评估
长期监控推荐dcgm-exporter加Prometheus方案,导出的DCGM_FI_DEV_GPU_UTIL、DCGM_FI_DEV_FB_USED指标可直接进Grafana。容量评估的两个经验阈值:单卡平均利用率低于30%时应引入切分或批处理;显存水位长期高于85%说明容量到顶,优先考虑量化(GPTQ、AWQ可将7B模型压到5G以内)而不是加卡。规划新增服务器时,对照现有负载峰值确定卡数,预留20%余量应对业务波动,8卡机型优先选择NVSwitch全互联拓扑,跨节点训练场景可减少30%以上的通信等待。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/gpu-fu-wu-qi-suan-li-zi-yuan-gui-hua-shi-zhan-xian-cun-qie/