一、前言
这个系列从一台 RTX 3090 和一个 Qwen2.5-7B 模型开始,用五篇文章逐一实验了主流的 LLM 推理优化技术。有成功的、有失败的,每一篇都在回答同一个问题:这项优化在当前硬件条件下值不值得用?
本文是系列收官,不做新实验,而是把五篇文章的数据、结论和方法论串在一起,给出三个交付物:
- RTX 3090 + 7B 的最优部署配置
- 每项优化技术的适用条件速查表
- 做 AI Infra 优化的通用方法论
二、全系列实验回顾
2.1 五篇文章的脉络
第一篇建立了 BF16 基线,发现 TPOT 已逼近显存带宽极限(MBU ≈ 76%),纯软件调参到顶,必须走量化路线。
第二篇做了 AWQ INT4 量化,权重从 14GB 压到 4GB,TPOT 降 65%,吞吐翻倍,精度仅损失 1~2%,是全系列性价比最高的优化。
第三篇深入分析 KV Cache,发现 AWQ 吞吐翻倍的另一半原因藏在这里——权重压缩后省出的 10GB 显存全部给了 KV Cache,容量扩大 3 倍(5306 → 15839 blocks),能同时服务 3 倍的请求。
第四篇验证了 Prefix Caching,共享前缀越长 TTFT 降幅越大,从 67% 到 93%,零代价,vLLM 默认开启。
第五篇尝试投机采样,理论推导了加速条件公式,实测验证在单卡 7B 上三个因素(
γ
=
0.20
\\gamma = 0.20
γ=0.20、
c
=
1.73
c = 1.73
c=1.73、
α
=
3.08
\\alpha = 3.08
α=3.08)共同导致加速失败。精度零损失得到验证,但硬件条件不匹配。
2.2 完整实验对照表
| 模型权重 | ~14 GB | ~4 GB | -71% |
| KV Cache 容量 | 5306 blocks (4.6GB) | 15839 blocks (13.9GB) | +199% |
| KV Cache 临界并发 | ~88 | ~265(推算) | +201% |
| HellaSwag | 80.5% | 79.6% | -0.9% |
| ARC-Easy | 81.0% | 78.8% | -2.2% |
| ARC-Challenge | 55.5% | 54.5% | -1.0% |
| GSM8K | 71.3% | 69.2% | -2.1% |
| TPOT P50 (conc=1) | 19.7 ms | 6.84 ms | -65% |
| Out_TPS (conc=32) | 978 tok/s | 2126 tok/s | +117% |
| 严格 SLO Goodput | 826 tok/s | 4547 tok/s | +450% |
| 生产甜点区 | conc=8~16 | conc=16~32 | — |
| Prefix Caching ~1500t 前缀 | TTFT -18.5%,命中率 99.2% |
| Prefix Caching ~4000t 前缀 | TTFT -92.6%,斜率下降 96.7% |
| 投机采样 Draft 0.5B conc=1 | TPOT 19.55ms vs 19.7ms(无提升) |
| 投机采样 Draft 0.5B conc=16 | TPOT +7.4%,TTFT P99 暴涨 25 倍(恶化) |
| 投机采样理论加速比 | S = 1.13x,实测 ~1.0x |
| FP8 KV Cache | RTX 3090 不支持(需要 Ada/Hopper) |
| INT8 KV Cache | 精度崩塌(HellaSwag 80.5% → 65.5%) |
三、优化效果总览
3.1 优化技术分类
| AWQ INT4 量化 | TPOT -65%,吞吐 +117% | -1~2% | 低(下载现成模型) | ✅ 强烈推荐 |
| Prefix Caching | TTFT -67%~93% | 零 | 零(默认开启) | ✅ 免费午餐 |
| Chunked Prefill | 已默认开启 | 零 | 零 | ✅ 已生效 |
| FlashInfer | 已默认开启 | 零 | 零 | ✅ 已生效 |
| torch.compile | 已默认开启 | 零 | 零 | ✅ 已生效 |
| CUDA Graph | 已默认开启 | 零 | 零 | ✅ 已生效 |
| 投机采样 | 无提升 | 零 | 中 | ❌ 单卡 7B 不适用 |
| FP8 KV Cache | 不可用 | — | — | ❌ 需要 Ada/Hopper |
| INT8 KV Cache | 精度崩塌 | -15% | 低 | ❌ 不可接受 |
结论很清晰:在 RTX 3090 + 7B 这个组合下,需要手动操作的有效优化只有两项——AWQ 量化和 Prefix Caching。其余要么已经默认开启,要么硬件不支持,要么场景不匹配。
3.2 优化的叠加关系
这些优化不是互斥的,而是作用于推理流程的不同阶段,可以叠加:
| Prefill | 长 prompt 的首 token 延迟 | Prefix Caching + Chunked Prefill | TTFT 大幅降低 |
| Decode | 显存带宽瓶颈 | AWQ 量化 | TPOT -65% |
| KV Cache | 显存容量限制并发 | AWQ 释放显存 → KV Cache 扩容 | 并发能力 +3x |
| 系统调度 | kernel 启动开销 | CUDA Graph + torch.compile | 已默认优化 |
AWQ 量化 + Prefix Caching 的叠加效果就是当前硬件条件下的最优解:AWQ 压缩 Decode 阶段的带宽需求并释放 KV Cache 空间,Prefix Caching 消除 Prefill 阶段的重复计算。两者互不干扰,收益叠加。
四、RTX 3090 + 7B 最优部署配置
4.1 推荐配置
综合全系列实验结果,给出两种场景下的最优配置:
场景一:实时对话(低延迟优先)
vllm serve /root/autodl-tmp/models/qwen2.5-7b-instruct-awq \\
–served-model-name qwen2.5-7b \\
–gpu-memory-utilization 0.90 \\
–max-model-len 4096 \\
–max-num-seqs 16
| TPOT P50 | ~7 ms(AWQ 收益) |
| TTFT P50 | ~80 ms(Prefix Caching 自动生效) |
| Out_TPS | ~2100 tok/s |
| 最大并发 | 16(SLO 友好区间) |
场景二:批量离线处理(吞吐优先)
vllm serve /root/autodl-tmp/models/qwen2.5-7b-instruct-awq \\
–served-model-name qwen2.5-7b \\
–gpu-memory-utilization 0.95 \\
–max-model-len 4096 \\
–max-num-seqs 64
| TPOT P50 | ~15 ms(并发高,每请求分到的资源少) |
| Out_TPS | ~3000+ tok/s |
| 延迟 | 较高,但离线场景不敏感 |
两种配置都不需要额外参数——Prefix Caching、Chunked Prefill、FlashInfer、torch.compile、CUDA Graph 在 vLLM 0.22 中全部默认开启。
4.2 不推荐的配置
| BF16 不量化 | TPOT 19.7ms,KV Cache 容量小,浪费 65% 的性能空间 |
| 加投机采样 | 单卡 7B 无加速,高并发下反而恶化 |
| FP8/INT8 KV Cache | 硬件不支持 / 精度崩塌 |
| gpu-memory-utilization < 0.80 | KV Cache 池太小,浪费并发能力 |
五、每项优化的适用条件
本系列最重要的工程认知是:每项优化技术都有前提条件,不存在普适的银弹。
5.1 AWQ INT4 量化
| 核心原理 | 压缩权重精度,减少每次 decode 的带宽需求 |
| 适用条件 | 几乎所有 memory-bound 的推理场景 |
| 不适用 | 对精度极度敏感的任务(如医疗诊断、法律分析) |
| 实施成本 | 极低,ModelScope/HuggingFace 有现成量化模型 |
| 本系列收益 | TPOT -65%,吞吐 +117%,精度 -1~2% |
5.2 Prefix Caching
| 核心原理 | 缓存共享前缀的 KV,跳过重复 Prefill |
| 适用条件 | 请求间有共享前缀(system prompt、RAG 文档) |
| 不适用 | 随机独立请求,无共享前缀 |
| 实施成本 | 零,vLLM 默认开启 |
| 本系列收益 | TTFT -67%~93%,斜率下降 96.7% |
5.3 投机采样
| 核心原理 | 小模型猜 + 大模型验,一次搬运产出多个 token |
| 适用条件 | 大模型(70B+)+ 多卡 + 低并发 + 高接受率任务 |
| 不适用 | 单卡 + 小模型(TPOT 已经很快) + 高并发 |
| 加速公式 |
S = α k γ + c S = \\frac{\\alpha}{k\\gamma + c} S=kγ+cα,需要 γ → 0 \\gamma \\to 0 γ→0, c → 1 c \\to 1 c→1 |
| 本系列收益 | 无加速(
S = 1.13 × S = 1.13\\times S=1.13×,被系统开销抵消) |
5.4 KV Cache 量化
| 核心原理 | 降低 KV Cache 精度,节省显存以支持更高并发 |
| FP8 适用条件 | Ada Lovelace(RTX 4090)或 Hopper(H100)架构 |
| INT8 现状 | 精度损失过大(-15%),当前不可用 |
| RTX 3090 结论 | Ampere 架构不支持原生 FP8,INT8 精度崩塌 |
六、方法论总结
6.1 做 AI Infra 优化的标准流程
五篇文章反复验证了同一套流程:
建立基线(精度 + 性能)
↓
提出优化方案
↓
实施优化
↓
双线评测(精度不能崩,性能要提升)
↓
用数据决策:收益 > 代价 → 采纳,否则回退
↓
记录结果(包括失败的),继续下一个
核心原则:没有免费的午餐。 每一个性能优化几乎都有代价——精度损失、显存占用、实施复杂度、硬件要求。必须用数据说话,不能凭感觉。
6.2 从失败实验中学到的
失败的实验和成功的一样有价值,甚至更有价值——它们划定了优化的边界。
| FP8 KV Cache | 优化技术有硬件代际门槛,Ampere 之前不要碰 FP8 |
| INT8 KV Cache | 不是所有量化都安全,KV Cache 对精度更敏感 |
| 投机采样 | 加速效果取决于模型大小和硬件配置,可以用公式预判 |
关键认知:在决定做一项优化之前,先检查前提条件是否满足。 投机采样的公式
S
=
α
k
γ
+
c
S = \\frac{\\alpha}{k\\gamma + c}
S=kγ+cα 可以在跑实验前就预判结果——如果算出来
S
<
1.3
S < 1.3
S<1.3,大概率不值得尝试。
6.3 RTX 3090 的能力边界
经过全系列实验,RTX 3090 + 7B 的能力边界已经非常清晰:
| 单请求最快 TPOT | ~7 ms(AWQ) | 显存带宽 936 GB/s |
| 最大输出吞吐 | ~2100 tok/s | KV Cache 容量 + TPOT |
| KV Cache 容量 | 15839 blocks(AWQ) | 模型权重占用后的剩余显存 |
| Prefill 加速上限 | TTFT -93%(Prefix Caching) | 共享前缀长度 |
想要突破这些边界,需要:更大的显存带宽(A100/H100),更多的 GPU(tensor parallelism),或更大的模型(让投机采样等技术发挥作用)。
七、写在最后
这个系列的初衷是:在最便宜的硬件上,把每一项推理优化都亲手试一遍,用数据说话。
五篇文章下来,最大的感受不是某个优化有多厉害,而是理解了每项技术的边界在哪里。AWQ 量化在几乎所有场景下都值得用,Prefix Caching 是真正的免费午餐,而投机采样、FP8 KV Cache 这些看起来很美的技术,在错误的硬件条件下只会浪费时间。
知道什么时候不该做,和知道该做什么一样重要。
本系列完整文章索引:
参考资料:
- Efficient Memory Management for Large Language Model Serving with PagedAttention(SOSP 2023)
- AWQ: Activation-aware Weight Quantization(MLSys 2024 Best Paper)
- Automatic Prefix Caching — vLLM 官方文档
- Fast Inference from Transformers via Speculative Decoding(ICML 2023)
- Spec-Bench: A Comprehensive Benchmark for Speculative Decoding(ACL 2024)
- vLLM 官方文档
- lm-evaluation-harness


