第8章:推理优化选型与端到端实战
掌握推理优化选型决策树、技术叠加注意事项,完成从需求分析到上线监控的端到端部署实战
本章是推理优化模块的收官,也是整个 AI Infra 课程的总结。把前面 28 章的理论编织成一张实战网络:针对症状选技术、把多个优化叠加时避开陷阱、走完一次”从需求到上线”的完整部署。最后回顾四大模块的核心知识图,送给所有走完这条路的同学一份学习地图。
📑 目录
- 1. 优化技术全景速查表
- 2. 症状驱动的选型决策树
- 3. 技术组合的陷阱与冲突
- 4. 优化顺序:先解什么、后解什么
- 5. 端到端部署实战
- 6. 上线后:监控与容量规划
- 7. 四大模块知识图回顾
- 8. 持续学习建议
- 自我检验清单
- 参考资料
1. 优化技术全景速查表
| 技术 | 解决什么 | 代价 | 章节 |
|---|---|---|---|
| FlashAttention | 长上下文 Attention 慢 / OOM | 实现复杂度 | 模块二 6 |
| PagedAttention | KV 碎片化、并发低 | 间接寻址 | 模块四 2 |
| Continuous Batching | GPU 利用率低 | 调度复杂度 | 模块四 2 |
| Prefix Cache | 共享前缀重复 Prefill | 显存占用 | 模块四 2 |
| Chunked Prefill | 长 Prefill 拖慢 Decode | 多次调度 | 模块四 2 |
| INT4 量化(AWQ + Marlin) | 模型显存大 | 精度小损 | 模块四 4 |
| W8A8 (SmoothQuant) | 模型显存 + 算力 | 精度小损 | 模块四 4 |
| KV Cache 量化 | 长上下文 KV 大 | 精度小损 | 模块四 4 |
| FP8(H100+) | 算力 + 显存 + 通信 | 需要 H100 | 模块四 4 |
| Speculative Decoding | Decode 串行慢 | Draft 开销 | 模块四 5 |
| PD 解耦 | 尾延迟失控 | KV 跨节点 | 模块四 6 |
| Tensor Parallel | 单卡装不下大模型 | 通信 | 模块三 4 |
torch.compile | 通用算子开销 | 编译时间 | 模块二 7 |
2. 症状驱动的选型决策树
2.1 第一步:跑 baseline,看哪个指标最差
genai-perf profile -m my_model --concurrency 64 --num-prompts 500 ...
得到 TTFT / TPOT / Throughput / 显存 / GPU 利用率 五个数。找最差的那个,从下面对应分支入手。
2.2 [A] TTFT 过高
TTFT 过高(用户等首 token 太久)
│
├─ Prompt 很长(几千~几万 token)?
│ ├─ Chunked Prefill 切块
│ └─ 升级到 H100 / 用 FP8 加速 GEMM
│
├─ 共享 prompt 多?
│ └─ Prefix Cache(vLLM) / RadixAttention(SGLang)
│
└─ Tokenizer / 调度成为瓶颈?
├─ Nsight Systems 抓 trace 看 GPU 是否 idle
└─ 排查 CPU 端开销
2.3 [B] TPOT 过高
TPOT 过高(token 蹦得慢)
│
├─ KV Cache 搬运成瓶颈(memory bound)?
│ ├─ FlashAttention / FlashInfer
│ └─ KV Cache 量化(INT8 / FP8 / KIVI)
│
├─ Decode 串行的本质限制?
│ └─ Speculative Decoding(Medusa / EAGLE-2)
│
└─ GPU 算力没喂饱(并发太低)?
└─ Continuous Batching + 提高并发上限
2.4 [C] 显存不够 / OOM
OOM
│
├─ KV Cache 占大头(长上下文 / 高并发)?
│ ├─ PagedAttention
│ └─ KV 量化 / KIVI 2-bit
│
└─ 模型权重本身就装不下?
├─ INT4 weight-only(AWQ + Marlin)
├─ Tensor Parallel 切到多卡
└─ FP8(H100)
2.5 [D] 尾延迟失控(P95/P99)
P95/P99 飙升
│
├─ Prefill 和 Decode 互扰?
│ ├─ Chunked Prefill(轻方案)
│ └─ PD 解耦(DistServe / Splitwise,大集群)
│
└─ SLO 严苛、需要全局调度?
└─ TaiChi / SLO-aware scheduler
3. 技术组合的陷阱与冲突
优化技术不能简单叠加,常见冲突:
3.1 Speculative + 量化
Draft 模型量化后接受率可能大幅下降——量化对小模型更敏感。建议:Target 量化、Draft 保持 FP16/BF16。
3.2 Speculative + Continuous Batching
不同请求的 spec K 不一样,增加调度复杂度。高并发时 spec 收益消失(GPU 已 compute bound)——动态判断,小 batch 才开 spec。
3.3 INT4 + 小 batch
INT4 dequant 开销大,没 Marlin kernel 时小 batch 反而比 FP16 慢。必须用 Marlin 才有真正加速。
3.4 PagedAttention + Speculative
Spec 验证时要并行多个候选,KV Cache 的页管理要支持 fork/copy——并非所有引擎都成熟。
3.5 多 LoRA + Prefix Cache
不同 LoRA 的 KV 不能共享(权重不同导致 K/V 计算不同),Prefix Cache 命中率会下降。需要”per-LoRA Prefix Cache”。
4. 优化顺序:先解什么、后解什么
1. 先解决 OOM(否则服务起不来)
↓
方案:量化 + PagedAttention + TP
2. 再优化 TTFT(直接影响用户感知)
↓
方案:Prefix Cache + Chunked Prefill + GEMM 优化
3. 然后提升 TPOT 和吞吐
↓
方案:FlashAttention + Continuous Batching + Speculative
4. 最后处理尾延迟(投入最大)
↓
方案:PD 解耦 + SLO 感知调度
每一步都要重新跑 benchmark,确认当前瓶颈是什么再走下一步——不要”把所有技术都堆上”,一次优化一项,验证收益。
5. 端到端部署实战
5.1 需求分析
收集这些信息:
| 项 | 示例 |
|---|---|
| 模型 | LLaMA-3-70B |
| 业务场景 | 客服 chat |
| QPS | 50 req/s |
| 平均输入 | 800 token |
| 平均输出 | 150 token |
| TTFT SLO | < 500 ms (P95) |
| TPOT SLO | < 50 ms (P95) |
| 硬件预算 | 8 张 H100 80GB |
| 容错要求 | 99.9% 可用性 |
5.2 方案设计
模型 70B BF16 = 140 GB
8 张 H100 = 640 GB,够用
并行:TP=8(单机 NVLink)
量化:权重 FP8(算力 +2×,显存 ÷ 2)
KV:FP8(同上)
Prefix Cache:开
Chunked Prefill:开
Speculative:不开(高并发场景收益小)
预估单卡显存:
- 权重 FP8 = 70 GB / 8 = 8.75 GB
- 临时 buffer ≈ 5 GB
- 留给 KV ≈ 65 GB / 卡 → 8 卡共 520 GB
- 单请求 KV(GQA, 4K, FP8)≈ 2.5 GB
- 最大并发 ≈ 200 个请求
5.3 部署流程
# 1. 下载量化模型
huggingface-cli download neuralmagic/Meta-Llama-3-70B-Instruct-FP8
# 2. 启动 vLLM
python -m vllm.entrypoints.openai.api_server \
--model neuralmagic/Meta-Llama-3-70B-Instruct-FP8 \
--tensor-parallel-size 8 \
--kv-cache-dtype fp8 \
--enable-prefix-caching \
--enable-chunked-prefill \
--max-num-batched-tokens 8192 \
--max-num-seqs 200 \
--gpu-memory-utilization 0.9 \
--port 8000
# 3. 压测验证
genai-perf profile -m neuralmagic/Meta-Llama-3-70B-Instruct-FP8 \
--service-kind openai --url http://localhost:8000 \
--num-prompts 1000 --concurrency 100 \
--synthetic-input-tokens-mean 800 --output-tokens-mean 150
# 验证 SLO:TTFT P95 应 < 500ms,TPOT P95 < 50ms
# 4. 接入业务,灰度 5% → 50% → 100%
6. 上线后:监控与容量规划
6.1 监控指标
基础设施层:
- GPU 利用率(per GPU)
- GPU 显存使用率
- GPU 温度
- 网络带宽(IB)
服务层:
- QPS / 实例
- TTFT / TPOT 分位线(P50, P95, P99)
- 请求队列长度
- KV Cache 利用率
业务层:
- 业务成功率
- 用户停留时长(流式输出场景)
- 内容质量(人工抽样)
Prometheus + Grafana 是事实标准。vLLM 有原生 /metrics 端点。
6.2 告警
| 告警 | 阈值 | 严重程度 |
|---|---|---|
| TTFT P95 持续 5min > SLO | warning | |
| TPOT P95 > SLO | warning | |
| 任意请求 latency > 30s | critical | |
| GPU 显存 > 95% | critical | |
| 实例 OOM | critical |
6.3 容量规划
当前 1 实例(8 H100)= 50 QPS
目标:200 QPS
需要:4 实例
Surge 容量:再多 1 实例处理峰值
故障容忍:N+1 部署
总:6 实例 = 48 张 H100
7. 四大模块知识图回顾
AI Infra 知识树
│
┌──────────┬──────────┼──────────┬──────────┐
│ │ │ │ │
模块一 模块二 模块三 模块四 性能分析
前置知识 CUDA算子 分布式训练 推理优化 (横切)
Transformer FlashAttn ZeRO PagedAttn Nsight
PyTorch GEMM Megatron vLLM torch.profiler
GPU 硬件 Triton FSDP 量化 GenAI-Perf
集合通信 AI 编译器 3D 并行 PD 解耦
7.1 核心思维:Trade-off 表
| 优化 | 牺牲 | 换取 |
|---|---|---|
| ZeRO | 通信 | 显存 |
| Activation Checkpointing | 计算 | 显存 |
| 量化 | 精度 | 显存 + 带宽 + 算力 |
| Speculative | Prefill 开销 | Decode 速度 |
| PD 解耦 | 系统复杂度 + KV 迁移 | 尾延迟 + goodput |
| FlashAttention | 实现复杂度 | 显存 + 速度 |
| Tensor Parallel | 通信(NVLink) | 装下大层 |
| Pipeline Parallel | Bubble | 跨机扩展 |
🌟 这就是 AI Infra 的本质:在”计算 / 通信 / 显存 / 精度”四象之间做最优权衡。
8. 持续学习建议
8.1 跟踪前沿
| 渠道 | 推荐 |
|---|---|
| arXiv | cs.DC、cs.AI 类目,关注 OSDI / SOSP / MLSys / ASPLOS / ISCA |
| GitHub | vLLM、SGLang、FlashAttention、CUTLASS、Megatron 的 release notes |
| 微信公众号 / 知乎 | 猛猿、方佳瑞、DefTruth、OneFlow |
| Twitter / X | Tri Dao(FlashAttention 作者)、Lianmin Zheng(SGLang)、vLLM team |
| 视频 | NVIDIA GTC 历年 talks、LLM Devday |
8.2 参与开源
最好的学习是参与:
- vLLM:从修文档、加单测开始,逐渐做 issue / feature
- PyTorch:贡献 op、profiler 改进
- FlashAttention / FlashInfer:Kernel 优化
- Megatron:模型实现 / 通信优化
8.3 工程实战
不要只看论文,真正在 GPU 上把模型训起来 / 推起来:
- 拿一个 7B 模型,在自己机器上跑通 vLLM 推理
- 用 4 张 GPU 训一个 1B 模型,把 DDP / FSDP / TP 都试一遍
- 写一个简单的 CUDA / Triton kernel,与 PyTorch 对比性能
- 复现一篇你感兴趣的优化论文
8.4 心态
AI Infra 是一个所有学过的东西很快会过时,但底层思维不会过时的领域:
- 工具会变(从 DeepSpeed → FSDP → 下一代),思想不变(冗余切分 + 通信换显存)
- 硬件会变(A100 → H100 → B200),约束不变(算力增长快于带宽,memory wall 永恒)
- 模型会变(GPT → LLaMA → MoE),计算 pattern 不变(GEMM + Attention + FFN 几个核心)
理解了核心思想,新工具新硬件来了你能快速上手。
✅ 自我检验清单
- 症状决策:给 4 种症状(TTFT 高 / TPOT 高 / OOM / P95 飙),能立刻给出对症方案
- 冲突识别:能列出 5 种技术叠加的常见冲突
- 优化顺序:能说出”OOM → TTFT → TPOT → 尾延迟”的优化优先级及依据
- 完整方案:给一个具体业务需求,能输出完整的部署方案(框架 / 量化 / 并行 / 配置 / 容量)
- 监控指标:能列出基础设施 / 服务 / 业务三层各 5 个核心监控指标
- trade-off 表:能默写至少 6 种优化的”牺牲什么、换取什么”
- 学习路径:能为自己设计未来 6 个月的 AI Infra 学习计划
📚 参考资料
综合
- Towards Efficient Generative LLM Serving: A Survey:https://arxiv.org/abs/2312.15234
- LLM Inference Optimization 综述:HuggingFace 博客系列
- NVIDIA Inference Performance Blog
实战
- vLLM Production Stack:https://github.com/vllm-project/production-stack
- HuggingFace Text Generation Inference (TGI) 部署指南
- NVIDIA Triton Inference Server Tutorials
持续跟踪
- OSDI / SOSP / MLSys / ASPLOS 历年 LLM 推理论文
- NVIDIA GTC 历年 talks(免费在线)
- vLLM Office Hours 月度公开会议
系统级综述
- AI Systems Performance Engineering(Chris Fregly, O’Reilly 2025):learning.oreilly.com —— Ch10 案例研究、Ch12 175+ 项性能优化检查清单,可作为本章端到端实战完成后的”全栈复盘 cheat sheet”
🎉 恭喜完成 AI Infra 课程!
这套四大模块覆盖了从硬件、算子、训练到推理的完整链路。但真正的功力在落地——把这些知识用到一个真实的项目中,才能内化成自己的能力。
愿你在 AI Infra 的路上一直保持对底层细节的好奇心,也保持对系统全局的把控力。The bottom is where the magic happens.