LLM 推理优化实践:vLLM、量化与批处理详解
大模型从"能跑"到"跑得快、跑得省",中间隔着一条清晰的推理优化链路。LLM 推理的瓶颈通常不在算力,而在显存与访存:生成每个 token 都要读取全部权重,加上不断增长的 KV Cache,显存常常最先打满。本文基于 vLLM 与 TensorRT-LLM 官方文档,拆解主流优化手段。
一、连续批处理:把吞吐拉起来的核心
传统批处理要等整个批次生成完才换下一批,GPU 会在请求长短不一时大量空闲。连续批处理(Continuous Batching / In-flight Batching)允许新请求随时插入,已完成请求立即退出并释放资源,让 GPU 始终处于饱和状态。vLLM 官方数据显示,配合连续批处理,吞吐可提升数倍到 20 多倍,同时延迟明显下降。这是所有生产级推理引擎的标配能力。
二、PagedAttention 与 KV Cache 管理
KV Cache(键值缓存)保存了已生成 token 的注意力中间结果,随上下文增长占用大量显存。传统实现按"最大可能长度"预留,浪费严重。vLLM 的 PagedAttention 借鉴操作系统虚拟内存分页思想,把 KV Cache 切成小块按需分配,内存利用率大幅提升,从而支持更大的批处理与更长的上下文。
TensorRT-LLM 同样提供精细的 KV Cache 管理,支持跨请求的 KV Cache 复用、KV Cache 量化,以及面向长上下文的稀疏注意力等特性。
三、批处理策略:Prefill 与 Decode 分离
推理分为 Prefill(并行处理整段输入)与 Decode(逐 token 生成)两个阶段,两者资源特征不同。进阶引擎支持:
- Chunked Prefill / 上下文分块:把长输入的 Prefill 切成小块,与 Decode 交错执行,减少首 token 延迟。
- 前缀缓存(Prefix Caching):系统提示或常见前缀直接复用已计算的 KV Cache,多轮对话与多用户场景收益明显。
- Disaggregated Serving(预填充/解码分离):把 Prefill 与 Decode 放到不同实例,各自独立扩缩容,应对高并发长上下文场景。
四、量化:用精度换显存与速度
量化把权重从高精度(FP16/BF16)降到 INT8/INT4 或 FP8,显著减少显存占用并加速计算。vLLM 支持 GPTQ、AWQ、FP8、INT4 以及 GGUF 等多种量化格式,对开源模型生态覆盖很全;TensorRT-LLM 的量化在 NVIDIA GPU 上做了深度硬件优化。
- FP16/BF16:默认基准,精度最好。
- INT8 / FP8:精度损失很小,显存与速度收益明显,适合生产默认。
- INT4(GPTQ/AWQ):显存最省,小显存显卡也能跑更大的模型,精度下降需实测评估。
- 选择建议:先用高精度跑通正确性,再用量化压显存,最后用基准测试(如 trtllm-bench)验证吞吐与延迟是否达标。
五、投机解码:加速 Decode
Decode 阶段逐个生成 token,是延迟的主要来源。投机解码(Speculative Decoding)用小模型或草稿模块快速生成多个候选 token,再由大模型并行验证,正确则整段接受,显著减少大模型串行步数。vLLM 与 TensorRT-LLM 都支持 EAGLE 等多种投机解码方案,对输出较长的推理(如代码、长文)提升明显。
六、模型并行:一张卡放不下怎么办
模型过大时需要并行:张量并行把单层拆到多卡,流水线并行按层切分,专家并行针对 MoE 模型把专家分布到多卡。vLLM 支持张量/流水线/数据/专家并行,TensorRT-LLM 在 Blackwell 等新一代 GPU 上针对 MoE 与长上下文做了专门优化。选并行方案时要权衡通信开销,通常先在单卡容量内优化,放不下再上并行。
七、从选型到实测的建议
- 先量化 + 连续批处理:这两项性价比最高,绝大多数场景优先做。
- 用基准测试说话:用 vLLM 的 Benchmark 或 TensorRT-LLM 的 trtllm-bench 记录吞吐(tokens/s)、TTFT(首 token 延迟)与 TPOT(每 token 延迟),改一次测一次。
- 结合硬件选型:显存容量决定能塞多大模型,GPU 型号决定单卡吞吐上限。选卡建议参考 GPU 云服务器对比 与 AI 本地部署硬件指南。
- 本地先验证:小规模场景用 Ollama 本地部署 即可,规模上来再上 vLLM/TensorRT-LLM。
一个可以复现的优化顺序
用一个 7B 模型的在线服务为例,说明优化的先后顺序和预期收益。假设一台 24GB 显存的 GPU 承载这个模型,未优化时单机吞吐大约在 300-500 tokens/s,而且显存紧张,并发一高就频繁 OOM。
按下面的顺序改,每一步都能看到明确的数字变化:
- 先开连续批处理:吞吐立刻从 300 提到 1200+ tokens/s,因为 GPU 不再空转;
- 再做 FP8/INT8 量化:显存占用下降 40-50%,同样一张卡可以开更大的 max batch,吞吐再翻一倍;
- 启用前缀缓存:对带长系统提示的对话场景,重复前缀的算力不再重复计算,TTFT 可下降 30-50%;
- 最后评估投机解码:输出较长(代码、长文)时收益明显,短输出收益有限,需要实测对比。
每步改动后都跑一遍基准:记录 tokens/s、TTFT、TPOT 和显存占用,把数字贴在部署文档里。这样下次调优或扩容时,团队能直接参考历史数据,而不是重新摸索。
16IDC 观察
推理优化的本质是"用同样的 GPU 做更多请求、每个请求更快"。对 AI 相关 产品,推理成本往往是最大的运营支出,优化收益会直接反映在毛利率上。建议团队把推理引擎的选型与 AI 模型部署方案 一起规划:先确定模型规模与并发预估,再选 vLLM 或 TensorRT-LLM,配合量化与批处理压出吞吐,最后用基准数据驱动扩容决策。
参考:vLLM 性能与基准 https://docs.vllm.ai/en/latest/performance/benchmarks/;TensorRT-LLM 性能文档 https://nvidia.github.io/TensorRT-LLM/performance/perf-overview.html
原文来源:https://docs.vllm.ai/en/latest/ 与 https://nvidia.github.io/TensorRT-LLM/