推理优化
独立专题¶
- FlashAttention
- PagedAttention
- Continuous Batching
- Prefix Caching
- Chunked Prefill
- Speculative Decoding
- CUDA Graph
推理优化分别处理 Attention Kernel、KV Cache 管理、请求批处理、重复前缀和解码串行性。
快速开始¶
先用真实请求分布测量 TTFT、TPOT、吞吐和显存,再定位瓶颈。长 Prompt 优先关注 FlashAttention 与 Chunked Prefill;高并发关注 PagedAttention 和 Continuous Batching;重复系统提示关注 Prefix Caching;Decode 受限时评估 Speculative Decoding。
核心方法¶
| 方法 | 解决的问题 | 代价或约束 |
|---|---|---|
| FlashAttention | 减少 Attention 中间数据的显存读写 | 依赖适配的 Kernel 与形状 |
| PagedAttention | 降低 KV Cache 碎片和预留浪费 | 引入分页元数据管理 |
| Continuous Batching | 请求结束后立即补入新请求 | 调度更复杂 |
| Prefix Caching | 复用相同前缀的 KV Cache | 需要命中相同 Token 序列 |
| Chunked Prefill | 将超长 Prefill 切片调度 | 可能增加单请求完成时间 |
| Speculative Decoding | 一次验证多个候选 Token | 需要草稿模型或并行候选机制 |
| CUDA Graph | 减少重复 Kernel Launch 开销 | 图形状和内存地址需相对稳定 |
调度案例¶
一个长 Prompt 的 Prefill 若独占 GPU,会阻塞其他请求的 Decode,导致 TPOT 抖动。Chunked Prefill 把它切成多个片段,与已有请求的 Decode 交错执行,从而改善尾延迟,但该长请求自身需要更多调度轮次。
优化顺序¶
- 固定模型、精度、输入输出长度和并发分布;
- 确认算子与硬件利用率;
- 优化缓存分配和批处理;
- 再评估前缀复用、投机解码等依赖工作负载的方法;
- 用准确率回归与压力测试验证结果。
优化不能只报告峰值吞吐,还应报告 P50、P95、P99 延迟、失败率和资源利用率。