模型部署优化
大语言模型部署面临内存、速度、成本等挑战。本文介绍常见优化技术。
量化(Quantization)
什么是量化?
将模型权重从高精度(如 FP32)转换为低精度(如 INT8, INT4),减少内存占用和计算量。
量化方法
| 方法 | 精度 | 性能损失 | 工具 |
|---|---|---|---|
| INT8 | 8位 | 较小 (~1-2%) | ONNX Runtime, TensorRT |
| INT4 | 4位 | 中等 (~2-3%) | GPTQ, AWQ |
| NF4 | 4位浮点 | 低 (<1%) | bitsandbytes (QLoRA) |
使用 bitsandbytes 量化
python
import transformers
from transformers import BitsAndBytesConfig
# 4-bit 量化配置
quant_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.float16,
bnb_4bit_use_double_quant=True
)
# 加载量化模型
model = AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-2-7b",
quantization_config=quant_config,
device_map="auto"
)硬件优化
ONNX(Open Neural Network Exchange)
将模型转换为 ONNX 格式,可在不同平台高效运行:
bash
# 转换为 ONNX
python -m transformers.onnx --model=bert-base-uncased onnx/python
# 使用 ONNX Runtime
import onnxruntime as ort
session = ort.InferenceSession("model.onnx")
outputs = session.run(None, input_feed)TensorRT(NVIDIA GPU 优化)
NVIDIA 的高性能推理优化库:
python
import tensorrt as trt
# 构建 TensorRT engine
# 可加速 2-5 倍,适合生产环境vLLM(PagedAttention)
针对 LLM 推理优化的开源框架:
- PagedAttention:高效管理 KV Cache
- 连续批处理:动态 batch 调度
- 性能:吞吐量提升 14-24 倍
bash
# 启动 vLLM 服务器
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-2-7b-chat-hf内存优化技术
KV Cache 优化
- 量化 KV Cache:INT8 存储
- 分页管理:vLLM 的 PagedAttention
- 滑动窗口:限制上下文长度
模型并行
- 张量并行:跨 GPU 分割层
- 流水线并行:不同层在不同 GPU
- 序列并行:序列维度分割
推理优化
批处理(Batching)
- 动态批处理:合并多个请求
- 连续批处理:vLLM 的调度算法
- 批次大小:根据 GPU 内存调整
采样优化
- 采样策略:Greedy, Beam Search, Top-k, Top-p
- 停止条件:最大长度、停止词
- 缓存:KV Cache 重用
部署架构
单体架构
适合小规模部署:
Client → Model Server (单实例)分布式架构
大规模生产部署:
Client → Load Balancer → Model Workers (多实例)
→ Redis (缓存) → Monitoring监控与运维
关键指标
- 延迟(Latency):P50, P95, P99
- 吞吐量(Throughput):tokens/sec
- 内存使用:GPU/CPU 利用率
- 错误率:失败请求占比
日志与追踪
- 结构化日志:JSON 格式
- 分布式追踪:OpenTelemetry
- 告警:Prometheus + Grafana
云服务选项
- AWS SageMaker:全托管推理端点
- Azure ML Endpoints:自动扩缩容
- Google Vertex AI:GPU 集群管理
- 腾讯云 TI-ONE:国内加速
成本估算
以 Llama-2-7B 为例(A100 80GB):
| 优化方案 | 内存占用 | 吞吐量 (tokens/s) | 成本/月 |
|---|---|---|---|
| FP16 原始 | 14 GB | 50 | $300+ |
| INT8 量化 | 7 GB | 80 | $150 |
| vLLM + 批处理 | 7 GB | 1000+ | $100 |
选择合适的优化技术,平衡性能、成本和精度!
