ACDC:按任务组织离线 LLM 推理(SOSP 2026)
原题:Batched in Back: Characterizing and Optimizing Offline LLM Inference in Production with ACDC
一句话总结:对 150 万离线任务、230 亿请求的测量表明,任务输入可预知、同任务前缀复用高,且用户更关心整批完成成本。ACDC 据此联合选择并行度、前缀顺序和推测解码策略,线上运行输出 token/GPU 的成本效率最高提升 3.9 倍;在线预填充空隙复用进一步提高离线吞吐(摘要、§3–§5)。
问题与动机
在线服务通常围绕单请求 TTFT/TPOT 设计调度;离线任务在提交时就已给出大量请求,整批完成时间和价格更重要。作者所在平台将最高约 30% GPU 用于离线推理,但若沿用在线默认策略,既浪费同任务已知的输入信息,也可能把低延迟优化变成吞吐损失(§1–§3)。
论文测量覆盖文本及多模态模型。不同任务之间几乎没有共同前缀,同一任务内部的前缀命中率中位数却超过 80%(§3.4、图 6);同一任务的输入输出长度也聚集在相近区间(§3.3、图 4–5)。因此“任务”比“到达的单个请求”更适合作为配置和缓存生命周期单位。
“不用在线 TTFT/TPOT 限制”本身就能释放吞吐,但这只是动机实验,不是 ACDC 的全部收益:在 H20 上用 Qwen3-32B 测 1000 输入/500 输出 token,去掉在线延迟约束后吞吐潜力增加 45.1%(§3.1、图 2)。这个结果说明在线 SLO 会压低吞吐;它并不证明任何离线任务都能自动得到同样收益。
关键观察 / 隐含假设
- 未来请求集合在提交时可见:可以提前排序并为整个任务选择并行布局(§3.1、§4.1–§4.2)。这个假设不适用于流式追加、交互式修改的批任务。
- 前缀复用主要发生在任务内部:同任务缓存应被有意保留和重用,跨任务长期驻留价值有限(§3.4、图 6)。图像输入也有重复使用,但不同模型分布不同(图 7)。
- 低延迟技巧未必提高离线吞吐:推测解码的草稿与验证有额外计算;是否启用取决于接受率和任务形态(§4.3、图 13、16)。
- 在线预填充留下可利用空隙:论文报告相关实例最高 38.3% 的容量空隙(§5.1、图 19),但混部必须保住在线 SLO;网络、GPU 布局和服务架构会改变空隙大小。
- 最优并行度随序列形态移动:短输入适合更多 DP、少 TP 以降低通信;长输入计算比重升高,长输出又通过更高 TP 腾出 KV cache 容量。但 TP 超过 GQA KV head 数会复制 KV 而失去容量收益(§4.1、图 11)。
- 预填充空隙可用长度有分布:310B 模型的 54 个预填充实例一天发生超过 330 万次空隙,中位数 345 ms(§5.1、图 19)。离线请求若不能切成足够短的块,空隙虽多仍可能不可利用。
核心方法
ACDC 将离线任务分成资源编排、缓存管理与执行流三个相互配合的决策(图 10)。系统依据任务 token 长度和模型特性选择 TP/DP/EP 组合,而不是对所有任务固定并行度。Qwen3-30B-A3B 的控制实验把预填充任务输入长度从 100 增到 100,000 token、解码任务输出长度从 100 增到 100,000 token,最优配置从短输入的 T1-D8-E8 移向长输入的 T8-D1-E8;长输出侧 TP=8 超过模型四个 KV head 后,不再增加 KV 容量,吞吐反而比 TP=4 低超过 33%(§4.1、图 11)。这说明并行度决策必须看 KV 布局,不是“越多 GPU 分片越好”。
实现先维护按 GPU 型号、模型和长度范围索引的历史配置表。新任务抽样 5% 请求估计输出长度,再在执行过程中每完成 5% 请求检查分布漂移;策略切换时用集群里的轮转空闲主机启动新配置,旧实例排空后成为下一次轮转主机,避免主流推理引擎改变 TP 时需停服重启数分钟(§4.1)。因此 22.5% 吞吐收益需要预留切换容量,并非完全零成本。
缓存层在任务提交时根据全部已知 token 序列建立前缀树,深度优先遍历,让共享父前缀的请求相邻执行。驱逐时优先释放没有未处理后代的子树,而不是单纯 LRU;整个树仅在该任务生命周期存在(§4.2、图 12)。对于重复图片,系统记录同任务中图片首次与最后一次访问,只在这段区间缓存编码表示;论文举出一个 5 万请求的多模态任务,重复图片比例超过 21%,每图重编码可涉及约 1200–3000 个视觉 token。这比泛泛说“前缀排序”多了一项关键的多模态生命周期策略。
执行层根据实际推测接受率、batch size 和输入长度决定是否使用推测解码。Qwen3-32B+EAGLE-3 实验中,短输入任务即使固定接受率也随着 speculative token 数增加而变慢,因为大 batch 的 decode 已转向计算瓶颈;1000-token 输入在 token 数 2–3 左右最好,超过 5 后可低于无推测基线;更长输入在 4 左右达到约 18% 的峰值收益(§4.3、图 13)。ACDC 同样先抽样 5% 请求,随后按批大小与接受率周期性调整参数,而非把推测解码永久打开。
最后,混合服务机制估计在线预填充阶段剩余的资源空隙,再把离线任务切成可在空隙里完成的预填充块(§5.1–§5.2、图 20)。论文用 M/D/1 模型解释在线预填充为何必须保留空闲容量:在 310B 模型、54 个预填充实例的观测中,平均预填充 756 ms、平均 TTFT 1.41 s,模型推得利用率 63.4%,实测 61.7%,即 38.3% 空闲(§5.1、图 19)。真实到达不一定服从泊松、服务时间也并非严格常数,所以公式主要给出机制解释,空隙大小仍以实测为准。切块与前缀排序协同:更短的块易塞入短空隙,共享前缀又降低块的计算量。该机制依赖预填充/解码分离架构,不能直接照搬到所有同机连续批处理引擎。
设计取舍
- 按任务排序换取前缀命中:整批吞吐改善,但早提交的单条请求未必先完成;适用于按任务结算的 SLA。
- 任务定向画像换取配置开销:并行布局与推测策略需要采样、建模和切换;短任务可能无法摊销画像成本。
- 填充在线空隙换取隔离难度:离线吞吐收益以在线 SLO 不受损为前提,需要准确估计预填充时长和同步边界。
- 深度优先前缀顺序换单请求公平性:一个大前缀子树可能连续占住实例,同任务中其他请求等待更久;论文的任务级吞吐目标允许这种排序,但不保证逐请求完成时间。
- 轮转主机换不停机重配置:至少一部分主机预留为新策略的承接点;集群满载时切换方案需要额外容量。
实验与结果
- 测量样本为约 150 万任务、230 亿请求,来自三个月、七个匿名化文本/多模态模型;表 1 给出各模型的任务量与请求量,不能假设不同家族有相同前缀特征。同任务文本前缀命中率中位数超过 80%,跨任务复用很低(§3、图 4–7)。
- 任务定向并行度使吞吐提升 22.5%;按前缀排序使整体 KV cache 命中率最高提升 35.5%;自适应推测解码提升解码吞吐 13.1%(§4.1–§4.3、图 11、13、16)。这些是不同实验中的组件数字,不能相加。
- 与先前生产部署相比,ACDC 运行三个月后输出 token/GPU 成本效率最高达到 3.9 倍;论文也报告对现有最佳方案至少 14.2% 的吞吐优势(§4.4、图 17)。
- 混合服务在四在线实例、四离线实例的对照下,相对未混合基线最高提升 90.0%,相对 BatchLLM+C 最高提升 35.7%,相对 HyGen 最高 5.6 倍;任务集 1 主要是长输入/短输出,因此从预填充空隙收益最大(§5.3、图 24)。单实例前缀排序令块缓存命中率提高 73.6%、空隙填充率提高 65.2%、在空隙完成的离线块数提高 77.4%(图 22);多实例结果分别最高提高 49.6% 与 63.1%(图 23)。不同指标不能相互替代。
论断—证据表
| 论断 | 证据 | 评测边界 | 置信度 |
|---|---|---|---|
| 离线任务是有效的调度单位 | 150 万任务中同任务前缀命中率中位数 >80%(§3.4、图 6) | 阿里平台与所测模型 | 强(该轨迹) |
| 三类任务定向机制有独立收益 | 并行度 +22.5%、KV 命中最高 +35.5%、解码吞吐 +13.1%(§4) | 各自控制实验,指标不同 | 中到强 |
| 线上部署改善单位 GPU 产出 | 输出 token/GPU 最高 3.9 倍(§4.4) | 与上一代生产配置相比,非统一理论上界 | 中 |
| 在线空隙可承载离线任务 | 相对最佳混部法最高 +35.7% 吞吐(§5.3、图 24) | 预填充/解码分离部署 | 中到强 |
| 块切分与前缀顺序相互配合 | 单实例缓存命中 +73.6%、空隙填充 +65.2%(§5.3、图 22) | Qwen3-32B,4×H20,所选在线/离线轨迹 | 中到强 |
批判性分析
论证链条
测量先确定任务内已知输入和高前缀复用,随后选择任务粒度的并行度、缓存与执行策略,机制和观察对应清楚。图 11 的 TP 超过 KV head 后反而变慢,以及图 13 的短输入推测解码负收益,是两个能解释策略选择的负结果。混部是第二条论证:先测预填充空隙,再用 chunked prefill 和前缀排序提高可填充比例。不能把“38.3% 空隙”直接等同于最终可回收 GPU 容量。
假设压力测试
大量短任务会降低 5% 抽样、前缀树和轮转主机投入的回报;若多任务共享同一模板,严格按任务清理缓存也可能错失跨任务复用。若在线流量突增、预填充波动大,离线块可能占用原本留给在线请求的时间。M/D/1 模型把服务时间简化为常数,长上下文与多模态输入显然会造成服务时间方差,因此必须用真实轨迹校正空隙预测。这些是设计边界,论文结果只覆盖其所测环境。
实验可信度
生产数据规模和三个月部署说明工作负载确实存在。任务定向并行度、缓存和推测解码分别有控制实验,混部还有 BatchLLM+C 与 HyGen 对照;但主要效果数字分属不同模型、指标和任务集,不应被读成“所有任务均 3.9 倍”。平台自身的上一代部署也可能包含多项配置差异,端到端数字不能孤立归功于一个组件。混部实验用 30,000 离线请求、75 类任务和 60,000 多在线请求,仍小于总体测量样本(§5.3)。
系统性缺陷
任务排序使服务承诺从单请求转向整任务;论文没有充分给出不同租户间的公平性与任务尾部完成时间。TP/DP/EP 策略切换要有空闲轮转主机和旧实例排空,任务包含在途请求时的状态迁移也会影响成本。混部机制对引擎的阶段可观察性、离线块的可抢占性和资源隔离能力有较强依赖。
局限与后续工作
- 以任务完成时间分位数、租户公平性和缓存占用峰值重新评价前缀排序。
- 在短任务、多租户共享模板、动态追加请求下测量任务级缓存管理的退化点。
- 对在线流量突然翻倍、预填充时长预测失准时注入故障,记录在线 SLO 违约与离线抢占成本。
- 在相同任务集上同时报告混部带来的在线 P99 TTFT、离线任务 P99 完成时间和额外预留主机比例。
相关
- 同会议:SOSP-2026;相邻问题:Janus-SOSP26 处理在线多模型弹性,LLM-42-SOSP26 处理动态批处理下的确定性。
- 全文:作者公开 PDF。