LLM 推理服务设计
本篇聚焦把 LLM 部署成一个高吞吐、低延迟、可弹性伸缩的在线服务。底层优化原理(KV Cache、连续批处理、量化等)见 LLM推理优化、AI应用架构设计。
设计目标
在线推理服务的核心矛盾:贵(显存/算力)+ 慢(自回归逐 token)+ 波动大(请求长短不一)。系统设计要在吞吐、延迟、成本三者间权衡。
服务总体架构
flowchart LR Client[客户端] --> GW[推理网关<br/>鉴权/限流/路由] GW --> Router[模型路由<br/>按任务选模型/实例] Router --> PF[Prefill 实例池<br/>计算密集] Router --> Dec[Decode 实例池<br/>访存密集] PF --> KV[(KV Cache 池<br/>显存/CPU 分级)] Dec --> KV KV --> Sched[调度器<br/>Continuous Batching] Sched --> Resp[流式响应返回]
模块一:推理网关
- 鉴权与配额:API Key、按租户限流、费用上限。
- 请求路由:简单问题路由到小模型,复杂问题到大模型;长上下文请求单独队列,避免拖累短请求。
- 超时与降级:超时返回部分结果或降级模型。
模块二:模型放置(Placement)
- 同构放置:同型号 GPU 放一起,便于张量/流水线并行。
- 异构分层:热门模型常驻显存,长尾模型按需加载(或卸载到 CPU)。
- 多副本 + 负载均衡:应对并发,副本间无状态(状态在 KV Cache/外部存储)。
模块三:Prefill / Decode 分离
Prefill(处理整段输入,计算密集)与 Decode(逐 token,访存密集)瓶颈不同。分离部署可各自优化:
- Prefill 池用高算力 GPU,批大、重计算。
- Decode 池用高带宽 GPU,专注低延迟生成。
- 二者通过 KV Cache 传输/共享衔接(如把 Prefill 产出的 KV 直接传给 Decode 实例),这是高并发推理的关键架构(如 DistServe、Splitwise 思路)。
模块四:KV Cache 管理
- 显存分级:热 KV 留 GPU 显存,冷 KV 换到 CPU/SSD(分页式管理,见 vLLM PagedAttention)。
- 复用:多轮对话的 system prompt、Few-shot 示例等前缀 KV 可复用,避免重复 Prefill。
- 量化:KV Cache 量化(INT8/INT4)显著降低显存,见 LLM推理优化。
关键权衡
| 问题 | 设计回答要点 |
|---|---|
| 为什么 Prefill/Decode 要分离? | 二者瓶颈不同(计算密集 vs 访存密集),混部会互相拖累;分离后各自扩缩容,整体吞吐与尾延迟更优 |
| 如何提升 GPU 利用率? | Continuous Batching(动态拼批)+ PagedAttention(消除 KV 碎片)+ 前缀 KV 复用 |
| 长上下文很贵怎么办? | KV Cache 量化/驱逐 + 分级存储 + 仅在必要时放大上下文(见 RAG系统设计 的”渐进式披露”) |
| 如何保证 SLA? | 网关限流 + 超时降级 + 长短请求分级队列 + 副本冗余 |
速记卡(面试闪卡)
Q1:一句话讲清「LLM 推理服务设计」到底是什么? A:LLM 推理服务设计:把模型部署成高吞吐、低延迟、可弹性伸缩的在线服务。
Q2:一、设计目标 —— 怎么理解? A:在线推理像开高峰期餐厅:贵(显存)、慢(逐 token)、客流忽大忽小——要在翻台率、上菜速度、成本间权衡(Throughput/Latency/Cost)。
Q3:二、推理网关与模型放置 —— 怎么理解? A:网关像餐厅迎宾:鉴权、按难易派单(简单问题给小模型)、长请求单列队;热门模型常驻显存、长尾按需加载(Gateway & Placement)。
Q4:三、Prefill/Decode 分离 —— 怎么理解? A:备菜(算整段输入)和炒菜(逐 token)瓶颈不同,分开用不同 GPU 各自优化,靠 KV Cache 衔接(Decoupled Prefill/Decode)。
Q5:四、KV Cache 管理 —— 怎么理解? A:KV Cache 像冰箱:热料留 GPU 显存、冷料换 CPU/SSD;多轮对话前缀可复用,量化省显存(KV Cache Tiering)。
Q6:核心速记主线有哪些?
- 矛盾:贵(显存)+ 慢(自回归)+ 波动大(请求长短不一)
- 网关:鉴权限流、按难易路由、长短请求分级队列
- 分离:Prefill/Decode 拆开各自扩缩容
- 提效:Continuous Batching + PagedAttention + 前缀复用
口诀 A:推理服务三大难,贵慢波动要权衡; 网关路由分得清,简单任务小模型; Prefill Decode 分开跑,各用 GPU 各显能; KV Cache 分冷热,前缀复用显存轻。
相关链接
快速问答
| 问题 | 参考答案 |
|---|---|
| 推理服务为什么延迟高? | 自回归 Decode 每 token 都要读整段 KV Cache,访存密集;加上排队、Prefill 耗时。靠批处理、KV 复用、分离部署优化。 |
| Prefill/Decode 分离的核心收益? | 把计算密集与访存密集拆开,各自最优配置与扩缩容,避免长短请求互相拖累,提升吞吐、压低尾延迟。 |
| KV Cache 为什么要分级管理? | 全留显存太贵、全放 CPU 太慢;按冷热分级(GPU→CPU→SSD)在成本与延迟间取平衡,配合分页避免碎片。 |
| 在线推理如何控本? | 小模型路由简单请求、量化、批处理提利用率、长尾模型按需加载、KV 前缀复用。 |