Post

LLM 推理服务:预填充、解码与请求调度

从请求生命周期理解动态批处理、长短请求、公平性和预填充解耦。

LLM 推理服务:预填充、解码与请求调度

推理服务需要处理不断到来的请求,而不只是运行一次模型。本文根据推理框架阅读记录整理,把性能指标、请求阶段和调度选择放在一起理解。

请求的两个阶段

预填充处理输入提示并建立缓存;解码利用已有上下文继续生成。两阶段的计算形态和资源需求不同,具体瓶颈取决于模型、输入长度、批次和硬件。

指标含义
首 token 延迟请求进入到首个输出 token 的等待
后续 token 间隔流式生成时相邻输出的等待
吞吐量单位时间完成的工作量,需明确按请求还是 token 计
端到端延迟从请求进入到完整输出的时间

一个方案可能提高吞吐量,却增加单个用户等待。平均值也可能掩盖尾部请求,需要同时检查延迟分布。

动态批处理

请求输出长度不同,如果批次必须等所有请求结束,已经完成的请求会留下空位。持续或迭代级批处理在调度边界移除完成请求、加入新请求,提高资源利用率。

它需要与 KV cache 管理配合:新请求是否装得下、旧请求如何释放缓存,以及活动序列是否会超过资源预算。

长短请求与公平性

优先处理短请求可能改善某些平均延迟指标,但输出长度通常未知,预测也有误差。若总是选择短请求,长请求可能持续被延后。

因此需要明确目标:降低平均完成时间、满足每个请求的期限,还是保障不同用户的公平份额。长度预测和优先级只能作为目标下的手段。

预填充分块与解耦

长提示的一次预填充可能影响已有请求的流式输出。分块预填充让调度器更细粒度地安排工作,但块大小过小也会增加开销。

将预填充与解码部署在不同资源上,可以分别调度两个阶段,却引入缓存传输和资源配比问题。多一层架构并不必然带来更低延迟。

从单机扩展到集群

集群还要处理异构设备、请求分发、模型副本和跨节点带宽。即使总显存足够,也不代表每个节点都能按计划完成任务。

相关方向可沿 Taming the Titans 综述继续阅读。本文仅保留系统层的问题框架,不复述原笔记中尚未验证的设备框架列表或研究设想。

评估前先固定负载:到达率、输入长度、输出长度和延迟要求,再观察调度、缓存与计算如何相互影响。

This post is licensed under CC BY 4.0 by the author.