大模型在线推理优化方法学习
在线推理(Online Serving)和离线推理不同,核心关注 TTFT(首 Token 延迟)、TPOT(每 Token 延迟)、吞吐、并发数、显存占用、SLO 达成率。
优化手段一般有下面几个层面
1. 模型层优化:让模型本身更“轻”
1.1 量化
-
权重量化:FP16 → INT8 / FP8 / INT4 / NF4 等,降低显存占用和内存带宽压力,提升计算速度。
-
激活量化:如 SmoothQuant、FP8 推理,减少激活值显存和计算量。
-
KV Cache 量化:把 KV Cache 存成 INT8 / FP8 / INT4,显著降低长序列显存占用。
-
常见方案:GPTQ、AWQ、SmoothQuant、FP8、bitsandbytes、TensorRT-LLM 量化等。
1.2 稀疏化 / 剪枝
-
结构化稀疏,比如 2:4 sparsity,在支持稀疏计算的 Tensor Core 上加速。
-
去掉冗余 Attention Head、FFN 神经元,降低计算量。
1.3 蒸馏 / 小模型
-
在特定任务上用蒸馏后的学生模型替代大模型,降低延迟和成本。
-
或者用 MoE 架构,只激活部分专家,提高参数效率。
1.4 模型结构优化
-
GQA / MQA:减少 KV Head 数量,直接降低 KV Cache 大小。
-
使用更高效的 Norm、激活函数等,但收益相对较小。
2. 推理引擎与算子优化:让计算更高效
2.1 高效 Attention
-
FlashAttention / FlashAttention-2 / FlashDecoding:减少 HBM 读写,降低显存带宽瓶颈,加速长序列推理。
-
PagedAttention:分页管理 KV Cache,减少显存碎片,提高显存利用率。
2.2 算子融合
-
QKV 线性层融合、MLP 融合、LayerNorm 融合、残差融合等。
-
减少 kernel launch 次数和中间张量读写。
2.3 高性能 Kernel 与编译优化
-
使用 TensorRT-LLM、FasterTransformer、vLLM、SGLang、FlashInfer 等推理框架。
-
自定义 Triton/CUDA kernel,针对特定 GPU 架构调优。
-
CUDA Graph:将多个 kernel 固化成图,降低 CPU launch overhead,特别适合 decode 阶段小 batch 场景。
-
torch.compile、ONNX Runtime、TensorRT、XLA 等自动编译优化。
3. KV Cache 与显存优化:提高存储效率
3.1 分页 KV Cache
-
PagedAttention / vLLM 的思想:把 KV Cache 切成固定大小的 block,按需分配,避免连续显存碎片。
-
能大幅提高并发数,减少显存浪费。
3.2 KV Cache 量化
-
对 K、V 做 INT8 / FP8 / INT4 量化。
-
长序列场景收益尤其明显,能省 50% 甚至更多 KV 显存。
3.3 前缀缓存 / RadixAttention
-
对相同前缀的请求复用 KV Cache,避免重复计算和存储。
-
SGLang 的 RadixAttention、vLLM 的 prefix caching 都属此类。
-
常见于多轮对话、RAG、Agent 等前缀高度重复场景。
3.4 KV Cache 卸载
-
将部分 KV Cache 卸载到 CPU 内存或 SSD。
-
支持超长上下文,但会增加延迟,需要权衡。
3.5 激活重计算
-
推理中一般不常用,但显存不足时可以用重计算换显存。
-
在线推理更多依赖 KV Cache 管理,而不是激活重计算。
4. 批处理与调度优化:提高 GPU 利用率
4.1 Continuous Batching / In-flight Batching
-
动态插入新请求、逐 token 调度,不像传统静态 batch 要等整个 batch 完成。
-
GPU 利用率显著提升,是目前在线推理框架的标配。
4.2 Chunked Prefill
-
把长 prompt 的 prefill 分块执行,避免长 prefill 阻塞 decode。
-
降低首 Token 延迟,同时让 prefill 和 decode 更平衡。
4.3 动态批大小 / 长度分组
-
根据负载自动调整 batch size。
-
将相似长度的请求分组,减少 padding 浪费。
4.4 优先级调度 / SLO 感知
-
区分高优/低优请求,支持抢占。
-
按截止时间、队列深度、延迟目标进行调度。
4.5 投机采样 / Speculative Decoding
-
用小模型或草稿模型快速生成多个候选 token,大模型并行验证。
-
减少大模型串行 decode 次数,降低延迟,提高吞吐。
4.6 Prefill / Decode 分离
-
PD Disaggregation:prefill 和 decode 部署在不同实例上。
-
prefill 是计算密集,decode 是显存带宽密集,分开后可以独立扩缩容,减少相互干扰,提升资源利用率。
5. 分布式与集群优化:提升整体服务能力
5.1 模型并行
-
Tensor Parallelism:多卡切分权重矩阵,降低单卡显存占用。
-
Pipeline Parallelism:按层切分,适合超大模型。
-
Sequence Parallelism:长序列场景减少激活显存。
5.2 MoE 专家并行
-
对 MoE 模型使用 Expert Parallelism,减少 All-to-All 通信,提高吞吐。
5.3 多副本与自动扩缩容
-
根据 GPU 利用率、请求队列深度、SLO 自动扩缩副本。
-
使用 HPA、KEDA 等结合业务指标进行弹性伸缩。
5.4 请求路由与负载均衡
-
按模型、租户、序列长度路由到不同实例。
-
前缀缓存亲和路由:让相似请求打到同一实例,提高缓存命中率。
5.5 语义缓存 / 结果缓存
-
对重复或语义相近的问题直接返回缓存结果,减少大模型调用量。
-
适用于 FAQ、RAG、Agent 等场景。
6. 硬件与工程实践
6.1 混合精度与 Tensor Core
-
BF16 / FP16 / FP8 推理,充分利用 Tensor Core。
-
FP8 在 H100 等新硬件上有明显加速。
6.2 通信优化
-
多卡推理使用 NVLink / NVSwitch / InfiniBand,减少通信瓶颈。
-
优化 NCCL 通信,重叠通信与计算。
6.3 Profile 与监控
-
用 Nsight Systems、torch profiler 定位瓶颈。
-
监控 TTFT、TPOT、吞吐、显存、队列深度、P99 延迟等指标,持续调优。
总结
一句话概括:
在线推理优化主要围绕“降低延迟、提高吞吐、降低显存占用、提高资源利用率”展开,常用手段包括:量化、FlashAttention、PagedAttention、Continuous Batching、KV Cache 优化、前缀缓存、投机采样、PD 分离、模型并行和自动扩缩容。实际落地时通常组合使用,比如 vLLM / SGLang / TensorRT-LLM + FP8 量化 + FlashAttention + PagedAttention + Continuous Batching + Prefix Caching + Speculative Decoding,再根据业务场景做取舍。
浙公网安备 33010602011771号