推理优化与部署
训练完大模型只是第一步——如何高效地将模型部署到生产环境,以合理的成本提供快速、稳定的推理服务,是同样重要的工程挑战。本章全面覆盖从量化到端侧部署的完整推理优化技术栈。
训练完大模型只是第一步——如何高效地将模型部署到生产环境,以合理的成本提供快速、稳定的推理服务,是同样重要的工程挑战。本章全面覆盖从量化到端侧部署的完整推理优化技术栈。
建议先阅读第 01 章
推理的基本流程、量化(Quantization)、推理引擎
技术地基 · 大模型核心原理
文章导航
- 引言
- 1. 推理的基本流程
- 1.1 Prefill 与 Decode 两个阶段
- 1.2 关键性能指标
- 2. 量化(Quantization)
- 2.1 核心思想
- 2.2 主要量化方法
- 2.3 量化的质量影响
- 3. 推理引擎
- 3.1 主流推理引擎对比
- 3.2 PagedAttention(vLLM 的核心技术)
- 3.3 连续批处理(Continuous Batching)
- 4. 投机解码(Speculative Decoding)
- 4.1 核心思想
- 4.2 效果
- 5. 模型蒸馏与剪枝
- 5.1 知识蒸馏
- 5.2 剪枝
- 6. 端侧部署
- 6.1 端侧推理的挑战
- 6.2 端侧可用的模型
- 6.3 端侧推理框架
- 6.4 Ollama:最易用的本地部署方案
- 7. 服务端部署架构
- 7.1 典型的服务端部署架构
- 7.2 多 GPU 推理
- 7.3 成本估算
- 8. 本章小结
- 相关章节
- 延伸阅读
点击图中节点可定位到对应正文。
引言
训练完大模型只是第一步——如何高效地将模型部署到生产环境,以合理的成本提供快速、稳定的推理服务,是同样重要的工程挑战。本章全面覆盖从量化到端侧部署的完整推理优化技术栈。
1. 推理的基本流程
1.1 Prefill 与 Decode 两个阶段
大模型推理分为两个截然不同的阶段:
根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
Prefill 阶段(处理输入):
用户输入 "解释什么是AI" → 一次性并行处理所有 token
→ 生成第一层到最后一层的所有隐藏状态
→ 填充 KV Cache
→ 计算密集,GPU 利用率高根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
Decode 阶段(生成输出):
逐 token 生成:"人工" → "智能" → "是" → "..."
每一步只处理一个新 token
→ 从 KV Cache 读取之前的 K 和 V
→ 内存带宽密集,GPU 利用率低| 维度 | Prefill | Decode |
|---|---|---|
| 处理方式 | 并行处理所有输入 token | 逐个 token 串行生成 |
| 瓶颈 | 计算能力(compute-bound) | 内存带宽(memory-bound) |
| GPU 利用率 | 高 | 低(通常 < 30%) |
| 延迟特征 | 首 token 延迟(TTFT) | 每 token 延迟(TPOT) |
1.2 关键性能指标
| 指标 | 全称 | 含义 |
|---|---|---|
| TTFT | Time To First Token | 用户发出请求到收到第一个 token 的时间 |
| TPOT | Time Per Output Token | 每个输出 token 的生成时间 |
| Throughput | 吞吐量 | 每秒处理的 token 数 |
| Latency | 延迟 | 端到端的响应时间 |
2. 量化(Quantization)
2.1 核心思想
将模型参数从高精度(FP16/BF16)转换为低精度(INT8/INT4),减少内存占用和计算量:
根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
FP16: 16 bit → 70B 模型需要 140 GB 显存
INT8: 8 bit → 70B 模型需要 70 GB 显存(质量损失 < 1%)
INT4: 4 bit → 70B 模型需要 35 GB 显存(质量损失 1-5%)
INT3: 3 bit → 70B 模型需要 26 GB 显存(质量损失 5-15%)2.2 主要量化方法
训练后量化(PTQ, Post-Training Quantization)
不需要重新训练,直接对已有模型进行量化:
| 方法 | 位数 | 特点 |
|---|---|---|
| GPTQ | INT4/INT3 | 基于近似二阶信息,逐层量化 |
| AWQ (Activation-aware) | INT4 | 保护重要权重通道,效果更好 |
| GGUF (llama.cpp) | 2-8 bit | CPU 友好,支持混合量化 |
| bitsandbytes | INT8/INT4 | HuggingFace 生态集成好 |
量化感知训练(QAT, Quantization-Aware Training)
在训练过程中模拟量化误差,让模型学会适应低精度:
- 效果优于 PTQ,但需要额外的训练成本
- 通常在 PTQ 效果不满足要求时使用
2.3 量化的质量影响
根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
FP16 → INT8:几乎无损,大多数应用场景可接受
FP16 → INT4:轻微损失,复杂推理任务可能受影响
FP16 → INT3:明显损失,需要仔细评估
FP16 → INT2:严重损失,仅适用于特定场景3. 推理引擎
3.1 主流推理引擎对比
| 引擎 | 开发者 | 特点 | 适用场景 |
|---|---|---|---|
| vLLM | UC Berkeley | PagedAttention,高吞吐 | 服务端高并发推理 |
| TGI | HuggingFace | 生态集成好 | HuggingFace 生态 |
| TensorRT-LLM | NVIDIA | 极致 GPU 优化 | NVIDIA GPU 专用部署 |
| llama.cpp | 社区 | CPU/Apple Silicon 友好 | 本地部署、端侧推理 |
| Ollama | 社区 | 易用性极佳 | 个人本地使用 |
| LMDeploy | 上海 AI Lab | 支持多种模型 | 国产模型部署 |
| SGLang | Stanford | 结构化生成优化 | 需要结构化输出的场景 |
3.2 PagedAttention(vLLM 的核心技术)
问题: 传统 KV Cache需要预分配连续内存,导致大量内存浪费(平均浪费 60-80%)。
解决方案: 借鉴操作系统的虚拟内存分页思想:
根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
传统 KV Cache:
预分配一大块连续内存 → 大量内部碎片和外部碎片根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
PagedAttention:
将 KV Cache 分成固定大小的"页"(block)
按需分配页,不需要连续
→ 内存利用率接近 100%
→ 支持批处理(batching)时共享 KV Cache 页
→ 吞吐量提升 2-4 倍3.3 连续批处理(Continuous Batching)
根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
静态批处理:
等一个批次中所有请求都完成后,才开始下一个批次
→ 短请求等待长请求,GPU 空闲浪费根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
连续批处理:
一个请求完成后立即插入新请求
→ GPU 始终保持忙碌状态
→ 吞吐量大幅提升4. 投机解码(Speculative Decoding)
4.1 核心思想
用一个小模型(draft model)快速生成多个候选 token,然后用大模型一次性验证:
根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
步骤 1: 小模型快速生成 5 个 token: "今天 天气 真 好 啊"
步骤 2: 大模型并行验证这 5 个 token
- "今天" ✓ (概率高)
- "天气" ✓ (概率高)
- "真" ✓ (概率高)
- "好" ✗ (大模型认为应该是 "不错") → 从这里开始重新生成
步骤 3: 接受前 3 个 token,从第 4 个开始重新投机4.2 效果
- 不改变生成质量(数学上证明输出分布与原模型完全一致)
- 速度提升 2-3 倍(取决于小模型的预测准确率)
- 特别适合有明确模式的任务(代码生成、翻译)
5. 模型蒸馏与剪枝
5.1 知识蒸馏
用大模型(教师)的输出来训练小模型(学生):
根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
教师模型(如 GPT-4)→ 生成大量高质量数据
学生模型(如 7B 模型)→ 用这些数据训练5.2 剪枝
移除模型中不重要的参数:
根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
非结构化剪枝:将个别权重设为 0
→ 高稀疏度但难以利用(需要特殊硬件支持)根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
结构化剪枝:移除整个注意力头或 FFN 层
→ 可以直接减小模型尺寸
→ 如 LLM-Pruner 方法6. 端侧部署
6.1 端侧推理的挑战
| 挑战 | 说明 |
|---|---|
| 内存限制 | 手机通常 8-16GB,PC 16-64GB |
| 计算能力 | 移动 GPU 远弱于数据中心 GPU |
| 能耗 | 推理过程消耗大量电池 |
| 延迟 | 用户对实时响应的期望 |
6.2 端侧可用的模型
| 模型 | 参数量 | 量化后大小 | 适用设备 |
|---|---|---|---|
| Phi-3 Mini | 3.8B | ~2GB (INT4) | 手机、PC |
| Qwen 2.5 3B | 3B | ~1.5GB (INT4) | 手机 |
| Gemma 2 2B | 2B | ~1GB (INT4) | 手机 |
| LLaMA 3.2 1B | 1B | ~0.5GB (INT4) | 嵌入式 |
| SmolLM 1.7B | 1.7B | ~1GB (INT4) | 手机、浏览器 |
6.3 端侧推理框架
| 框架 | 平台 | 特点 |
|---|---|---|
| llama.cpp | 全平台 | C/C++ 实现,CPU/GPU 混合推理 |
| MLX | Apple Silicon | Apple 专用,充分利用统一内存 |
| ONNX Runtime | 全平台 | Microsoft 生态 |
| MediaPipe | Android/iOS | Google 移动端优化 |
| WebLLM | 浏览器 | 在浏览器中通过 WebGPU 运行 |
6.4 Ollama:最易用的本地部署方案
# 安装后一行命令即可运行
ollama run llama3.2 # 运行 LLaMA 3.2
ollama run qwen2.5:7b # 运行 Qwen 2.5 7B
ollama run deepseek-r1:7b # 运行 DeepSeek R1 7B
# Ollama 自动处理:
# - 模型下载和管理
# - 量化(默认 GGUF 4-bit)
# - 内存和 GPU 分配
# - 提供兼容 OpenAI 的 API 接口7. 服务端部署架构
7.1 典型的服务端部署架构
根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
用户请求
↓
[负载均衡器] → 路由到最空闲的推理实例
↓
[API 网关] → 认证、限流、计费
↓
[推理服务] (vLLM / TGI)
├── 模型加载(GPU 显存)
├── KV Cache 管理(PagedAttention)
├── 连续批处理
└── 流式输出(SSE)
↓
[监控系统] → GPU 利用率、延迟、吞吐量7.2 多 GPU 推理
根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
张量并行推理(单请求跨多 GPU):
70B 模型 → 2 张 A100 (80GB) 或 4 张 A100 (40GB)
每张 GPU 持有模型的一部分
通信开销:GPU 间需要同步中间结果根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
数据并行推理(多请求并行):
每张 GPU 持有完整模型副本
不同 GPU 处理不同请求
→ 提高吞吐量但不降低单请求延迟7.3 成本估算
根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
优化方案:
- INT4 量化:只需 1 张 A100 → 成本减半
- 自动扩缩容:低负载时减少实例 → 成本再降 30-50%
- Spot 实例:使用竞价实例 → 成本再降 50-70%8. 本章小结
| 技术 | 解决的问题 | 效果 |
|---|---|---|
| 量化 | 减少内存和计算需求 | INT4 下性能损失 < 5% |
| PagedAttention | KV Cache 内存浪费 | 吞吐量提升 2-4x |
| 连续批处理 | GPU 空闲浪费 | 吞吐量大幅提升 |
| 投机解码 | Decode 阶段速度慢 | 速度提升 2-3x |
| 蒸馏 | 模型太大 | 小模型接近大模型效果 |
| 端侧部署 | 隐私/离线/低延迟需求 | INT4 + 3B 模型可在手机运行 |
相关章节
- Transformer 架构深度剖析 — KV Cache 等推理优化的底层原理
- 模型 API 与部署方案 — 推理服务的部署落地
- 上下文窗口与长文本 — 长上下文带来的推理成本
延伸阅读
- Kwon, W. et al. (2023). "Efficient Memory Management for Large Language Model Serving with PagedAttention". SOSP
- Frantar, E. et al. (2022). "GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers". ICLR
- Lin, J. et al. (2023). "AWQ: Activation-aware Weight Quantization for LLM Compression and Acceleration". ICLR
- Leviathan, Y. et al. (2023). "Fast Inference from Transformers via Speculative Decoding". ICML