GPU参数优化
一、精度量化(实操命令 + 参数)
1. FP16 / BF16(通用,训练 + 推理)
vLLM 启动(默认开启,显式指定)
bash
运行
# BF16(NVIDIA GPU 推荐)
vllm-serve \
--model /path/model \
--dtype bfloat16 \
--max-model-len 8192 \
--port 8000
# FP16
vllm-serve \
--model /path/model \
--dtype float16
TensorRT-LLM 编译阶段指定精度
bash
运行
trtllm-build \
--checkpoint_dir /path/model \
--output_dir ./trt_engine \
--dtype fp16 \
--max_seq_len 8192
2. INT8 量化
vLLM 运行时量化
bash
运行
vllm-serve \
--model /path/model \
--quantization int8 \
--dtype float16
TRT-LLM 编译时开启 INT8
bash
运行
trtllm-build \
--checkpoint_dir /path/model \
--output_dir ./trt_engine \
--quantization int8
3. INT4-AWQ(线上推理主流,显存最优)
提前使用 autoawq 离线把模型转成 AWQ 量化权重(推荐离线量化,不在线实时转)
bash
运行
# 1. 离线量化模型(一次生成,反复使用)
python -m awq.entry --model_path /hf_model \
--quant_path /awq_4b_model \
--w_bit 4 --q_group_size 128
# 2. vLLM 加载 AWQ 4bit 模型
vllm-serve \
--model /awq_4b_model \
--quantization awq \
--dtype float16
TRT-LLM + INT4-AWQ
bash
运行
trtllm-build \
--checkpoint_dir /awq_4b_model \
--output_dir ./trt_4b_engine \
--quantization int4_awq
4. FP8(H100/H200 专属)
仅新卡支持,框架 + 驱动 + CUDA 版本达标后启用
bash
运行
vllm-serve \
--model /path/model \
--dtype fp8
二、KV Cache 专项优化(推理核心,vLLM 为主)
1. 限制最大上下文(防长对话爆显存,必配)
bash
运行
vllm-serve \
--model /path/model \
--max-model-len 4096 # 根据业务设置,越小越省显存
2. 显存使用率阈值(预留空间给 KV Cache,生产标准配置)
取值 0.7 ~ 0.85,不要拉满 1.0
bash
运行
vllm-serve \
--model /path/model \
--gpu-memory-utilization 0.8
3. KV Cache 分片(多卡 TP 并行场景)
多卡自动分片,只需指定张量并行数,KV 会分散到各卡:
bash
运行
# 4卡 TP,KV Cache 自动分片到4张卡
vllm-serve \
--model /path/model \
--tensor-parallel-size 4 \
--max-model-len 4096
说明:vLLM 默认开启 PagedAttention,无需额外参数,开箱即用分页显存。
三、模型并行(TP / PP 拆分,超大模型 34B/70B)
1. 张量并行 TP(推理首选)
单卡放不下,横向拆分权重
bash
运行
# 4卡运行70B模型
vllm-serve \
--model /70b_awq_4b \
--tensor-parallel-size 4 \
--quantization awq \
--max-model-len 4096
2. 流水线并行 PP(超长序列 / 超深模型)
TP + PP 组合使用
bash
运行
# 4TP + 2PP,总共占用 8 张卡
vllm-serve \
--model /path/model \
--tensor-parallel-size 4 \
--pipeline-parallel-size 2
3. TRT-LLM 并行配置(编译阶段指定)
bash
运行
trtllm-build \
--checkpoint_dir /path/model \
--output_dir ./trt_engine \
--tp_size 4 \
--pp_size 2
四、批处理 & 并发控制
1. 动态 Batch(vLLM 原生支持,无额外参数)
vLLM 默认启用动态批,无需配置;如需硬限制最大 batch(压测 / 防雪崩):
bash
运行
vllm-serve \
--model /path/model \
--max-batch-size 64
2. 梯度累积(仅 训练场景,PyTorch/DeepSpeed)
训练代码 / 配置文件设置,小 batch 模拟大 batch,降显存
python
运行
# 伪代码示意
batch_size = 8
gradient_accumulation_steps = 4 # 等效 batch = 8*4=32
DeepSpeed 配置 ds_config.json:
json
{
"train_batch_size": 32,
"train_micro_batch_size_per_gpu": 8,
"gradient_accumulation_steps": 4
}
3. 外部限流(防止突发流量 OOM)
结合 Nginx / 接口网关做 QPS 限流;K8s 侧可配合 HPA + 自定义指标,根据显存使用率自动扩缩容。
五、显存碎片 & 显存泄漏 现场处理
1. 查看 GPU 占用、定位僵尸进程
bash
运行
# 全局查看GPU
nvidia-smi
# 实时监控
nvidia-smi dmon
# 查看占用GPU的进程 + PID
fuser -v /dev/nvidia*
# 杀掉异常GPU进程(谨慎操作)
kill -9 进程ID
2. 服务重启(解决显存碎片最直接手段)
bash
运行
# 容器化环境 K8s 重启 Pod
kubectl delete pod <pod-name> -n <namespace>
# 裸机直接停启进程
pkill -f vllm-serve
# 再重新启动服务
3. K8s 调高共享内存 shm(多卡必备,间接解决显存类报错)
Pod yaml 配置:
yaml
spec:
containers:
- name: llm-server
image: xxx
resources:
limits:
nvidia.com/gpu: 4
volumeMounts:
- name: dshm
mountPath: /dev/shm
volumes:
- name: dshm
emptyDir:
medium: Memory
sizeLimit: 4Gi # 调高共享内存
六、MIG 切卡实操(推理节点多租户显存隔离)
1. 宿主机开启 / 管理 MIG(A100/H100)
bash
运行
# 查看当前GPU及MIG状态
nvidia-smi -L
# 全局开启MIG模式
nvidia-smi -mig 1
# 创建指定规格MIG实例(示例:切分成7个实例)
nvidia-smi mig -cci
# 关闭MIG,恢复整卡模式
nvidia-smi -mig 0
2. K8s 识别 MIG 实例
重启 nvidia-device-plugin,集群自动识别细分 GPU 资源,调度时直接使用即可,yaml 无需特殊改动。
七、底层开关优化(CUDA Graph / 显存复用)
1. vLLM 开启 CUDA Graph(加速 + 降显存波动)
bash
运行
vllm-serve \
--model /path/model \
--enable-cuda-graph
2. 环境变量全局显存 / 通信优化(写入启动脚本 / K8s env)
bash
运行
# 写入环境变量,全局生效
export NCCL_P2P_DISABLE=0
export NCCL_SHM_DISABLE=0
export CUDA_LAUNCH_BLOCKING=0
K8s Pod 中配置环境变量:
yaml
spec:
containers:
- name: llm
env:
- name: NCCL_P2P_DISABLE
value: "0"
- name: NCCL_SHM_DISABLE
value: "0"
八、模型加载优化(解决启动瞬间 OOM)
1. 模型预加载 + 常驻
做成系统服务 / 容器,节点启动自动加载模型,不动态反复加载。
2. 离线预处理权重
所有量化、分片、转换离线完成,不要在线服务中做转换。
3. 高速存储挂载
使用 NAS/IB-NVMe 挂载模型目录,降低加载时延与瞬时峰值。
九、场景化组合命令(直接拿去生产用)
场景 1:7B/13B 单卡推理(线上标准)
bash
运行
vllm-serve \
--model /awq_4b_13b \
--quantization awq \
--dtype float16 \
--max-model-len 4096 \
--gpu-memory-utilization 0.8 \
--enable-cuda-graph \
--port 8000
场景 2:70B 4 卡 TP 推理(大模型标配)
bash
运行
vllm-serve \
--model /awq_4b_70b \
--quantization awq \
--tensor-parallel-size 4 \
--max-model-len 4096 \
--gpu-memory-utilization 0.75
场景 3:训练场景(BF16 + 梯度累积)
仅改训练脚本 & DeepSpeed 配置,不使用 INT4。
十、面试口述总结(实操版答题话术)
问:这些显存调优方法你平时怎么落地操作?
答:
- 量化:优先离线把模型转成 INT4-AWQ 权重,vLLM/TRT-LLM 启动时指定量化参数,直接降低基础显存占用;H100/H200 会开启 FP8。
- KV Cache:严格配置
max-model-len限制上下文,设置gpu-memory-utilization在 0.7~0.85 预留空间,多卡场景用张量并行自动分片 KV。- 超大模型:34B/70B 采用 TP/PP 多卡并行拆分权重,突破单卡显存上限。
- 泄漏与碎片:日常用
nvidia-smi、fuser定位僵尸进程并清理,出现显存碎片就重启服务;K8s 环境调高 Pod 的 /dev/shm 大小。- 多租户推理:对 H100/A100 节点开启 MIG 切卡,做显存隔离,提升整卡利用率。
- 同时统一配置 NCCL、CUDA 相关环境变量,开启 CUDA Graph,从底层进一步优化显存与运行效率。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)