SLO-Aware Compute Resource Allocation for Prefill-Decode Disaggregated LLM Inference

本文提出了一种结合理论建模与实证基准测试的混合方法,通过利用排队论推导预填充阶段的吞吐量并实测解码阶段的吞吐量,在满足服务等级目标(SLO)和请求特征约束下,实现了预填充 - 解码解耦架构中大型语言模型推理计算资源的最优分配。

Luchang Li, Dongfang Li, Bozhao Gong, Yu Zhang

发布于 2026-03-06
📖 1 分钟阅读🧠 深度阅读

Each language version is independently generated for its own context, not a direct translation.

这篇论文主要解决了一个大模型(LLM)服务中的**“怎么配人手”**的问题。

想象一下,你开了一家超级繁忙的**“智能餐厅”**(这就是大模型推理服务)。顾客(用户请求)进来点菜,餐厅需要完成两个主要步骤:

  1. 读菜单(Prefill/预填充):厨师快速阅读顾客点的菜,理解需求,准备好食材。这步很快,但需要脑力(计算能力)
  2. 炒菜上菜(Decode/解码):厨师根据需求,一道一道地把菜炒出来端给顾客。这步比较慢,因为要等锅热、等菜熟,主要受限于传菜速度(显存带宽)

1. 以前的问题:混在一起干

传统的做法是,让同一批厨师既负责“读菜单”又负责“炒菜”。

  • 坏处:当厨师在专心读菜单时,炒菜就停了;当他在炒菜时,读菜单就停了。这就好比让一个服务员既当收银员又当厨师,忙起来容易乱套,导致顾客等菜的时间(TTFT)和上菜的速度(TPOT)很难同时优化。

2. 现在的方案:分工合作(P/D 分离)

为了解决这个问题,大家开始搞**“分工”**:

  • A 组厨师(Prefill 节点):专门负责读菜单、理解需求。他们只负责“想”,不负责“炒”。
  • B 组厨师(Decode 节点):专门负责炒菜、上菜。他们只负责“做”。
  • 传送带:A 组把理解好的“菜单草稿”(KV Cache)通过传送带传给 B 组,B 组接着炒。

分工虽然好,但带来了新问题:到底该招多少 A 组厨师,招多少 B 组厨师?

  • 如果 A 组人太少,顾客点菜后没人读菜单,大家排队等,体验差。
  • 如果 B 组人太少,菜炒得太慢,顾客等得发火。
  • 如果招多了,人闲着没事干,老板亏钱。

以前,老板(运维人员)只能靠**“拍脑袋”或者“试错”**来定人数,要么人不够,要么人太多。

3. 这篇论文做了什么?(核心魔法)

这篇论文提出了一套**“科学配餐法”,不用拍脑袋,而是用“数学公式 + 实地测试”**来算出最完美的人数比例。

第一步:算总账(理论模型)

作者先列了一个公式,就像算菜量一样:

  • 如果老板要求每分钟要出 500 道菜(总吞吐量)。
  • 顾客平均点 10 个菜(输入长度)和 2 个菜(输出长度)。
  • 那么,理论上需要多少“读菜单”的人和“炒菜”的人,是有数学关系的。
  • 核心公式A 组人数 / B 组人数 = (读菜单速度 × 炒菜速度) 的某种比例
    • 简单说:如果顾客点的菜很长(输入长),就需要更多 A 组;如果顾客要的菜很多(输出长),就需要更多 B 组。

第二步:给“读菜单”组算速度(排队论)

这里有个难点:A 组厨师读菜单的速度,不是固定的。

  • 如果顾客来得太急(排队人多),厨师就得慢下来,保证每个顾客都能很快拿到第一道菜(TTFT,首字延迟)。
  • 作者用了**“排队论”(M/M/1 模型)**来模拟这个场景。
    • 比喻:就像银行柜台。如果要求客户等待时间不能超过 2 分钟,那么柜台就不能开得太快(否则后面排队太长),也不能太慢。
    • 通过数学推导,作者算出了在满足"2 秒内出第一道菜”的要求下,A 组厨师实际能处理多少订单,而不是他们理论上最快能处理多少。

第三步:给“炒菜”组算速度(实测)

对于 B 组厨师,作者发现:

  • 一次炒一盘菜(小批量)和一次炒十盘菜(大批量),速度不一样。
  • 炒得越多,效率越高,但每盘菜出来的时间(TPOT)会变慢。
  • 方法:作者去厨房实地测试(Benchmark),画出曲线图。
    • 比如:老板要求每道菜必须在 20 毫秒内端上来。
    • 通过测试发现,只有当一次只炒 5 盘菜时,才能满足这个速度。
    • 于是算出:在满足速度要求下,B 组厨师实际能端出多少菜。

4. 最终结果:精准配人

把上面算出来的“实际读菜单速度”和“实际炒菜速度”代入第一步的公式,就能精准算出:

  • 需要 3 个 A 组厨师(Prefill 节点)
  • 需要 4 个 B 组厨师(Decode 节点)

实验证明
按照这个"3 对 4"的比例去配置服务器,结果非常完美:

  • 既满足了老板要求的每分钟 500 道菜的产量。
  • 又保证了顾客等菜时间不超过 2 秒,上菜速度不超过 20 毫秒。
  • 而且没有浪费人力(不像以前可能配了 3 对 3,导致炒菜太慢;或者 3 对 5,导致读菜单的人闲着)。

总结

这篇论文就像给大模型餐厅的老板提供了一本**《科学排班手册》**。
它不再让你猜“该买多少显卡”,而是告诉你:

  1. 先看看你的顾客喜欢点什么(输入输出长度)。
  2. 看看你的老板要求多快(SLO 指标)。
  3. 用这套公式算一算,“读菜单”和“炒菜”的显卡比例应该是多少

这样既能省钱(不浪费显卡),又能讨好顾客(速度快、体验好)。