大模型微调与部署优化经验总结:从 TensorRT-LLM 到生产环境
大模型的能力很强,但部署成本也很强。如何在有限的 GPU 资源下实现高效推理?这篇总结来自一线工程师的实战踩坑。
核心要点
1. 量化是部署优化的第一步,也是收益最大的一步
TensorRT-LLM 提供了多种量化方案: - INT8 量化:显存占用减半,精度损失 < 1% - INT4 量化(GPTQ/AWQ):显存占用减至 1/4,精度损失 2-3% - FP8 量化:A100/H100 专用,兼顾精度和速度
实测数据: | 模型 | 原始显存 | INT8 量化 | INT4 量化 | |------|----------|-----------|-----------| | Llama-3-8B | 16GB | 8GB | 4GB | | Qwen-72B | 144GB | 72GB | 36GB |
2. vLLM 是高并发场景的最佳选择
vLLM 的 PagedAttention 技术解决了 KV Cache 碎片化问题: - 支持动态批处理(Continuous Batching) - 吞吐量比 HuggingFace Transformers 高 5-10 倍 - 内存利用率提升 2-4 倍
3. LoRA 微调让定制化成本降低 90%
全量微调一个 70B 模型需要 8×A100,但 LoRA 只需要 1-2 张: - 训练参数量减少 99% - 推理时可热切换多个 LoRA 适配器 - 适合多租户场景(不同客户用不同 LoRA)
技术分析
TensorRT-LLM 部署流程
原始模型 → 量化(INT8/INT4)→ TensorRT 编译 → 优化引擎 → 部署服务
关键优化点: - 算子融合:将多个小算子合并为一个大算子,减少 GPU 调度开销 - KV Cache 优化:预分配连续内存,避免碎片化 - 批处理调度:动态调整 batch size,最大化 GPU 利用率
vLLM vs TensorRT-LLM 选型
| 维度 | vLLM | TensorRT-LLM |
|---|---|---|
| 部署难度 | 简单(pip install) | 复杂(需要编译) |
| 推理速度 | 快 | 更快(10-20%) |
| 并发能力 | 优秀 | 优秀 |
| 模型支持 | 广泛 | NVIDIA 优化模型 |
| 适用场景 | 通用部署 | 极致性能需求 |
实践建议
部署 Checklist
- 硬件选择
- 7B 模型:1×RTX 4090 或 1×A10
- 13B 模型:1×A100 40GB
-
70B 模型:4×A100 80GB(INT4 量化)
-
量化策略
- 精度敏感场景:FP8 或 INT8
- 成本敏感场景:INT4(AWQ)
-
边缘设备:GGUF(llama.cpp)
-
监控指标
- TTFT(首 token 延迟):< 500ms
- TPS(每秒 token 数):> 30
- GPU 利用率:> 70%
常见踩坑
- ❌ 直接用 HuggingFace Transformers 跑推理(太慢)
- ❌ 忽略 KV Cache 管理(内存溢出)
- ❌ 不做压力测试就上线(高并发崩溃)
- ✅ 用 vLLM/TensorRT-LLM 做推理引擎
- ✅ 配置合理的批处理参数
- ✅ 监控 GPU 显存和利用率
延伸阅读
本文深度改写自公众号「DataFunTalk」