大模型在线推理优化方法学习

在线推理(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,再根据业务场景做取舍。

 

 

 

 

 

posted on 2026-08-26 15:15  zhangkele  阅读(23)  评论(0)    收藏  举报

导航