内容提要
静态批处理等待批次满后才运行,延迟高;动态批处理通过超时窗口改善等待,但批次内仍受最慢请求影响;连续批处理以解码步骤为单位调度,序列完成即释放槽位,吞吐量高,适合生产级LLM服务。
延伸解读
为什么静态批处理不适合在线服务
静态批处理要求凑满固定数量的请求才执行,导致先到的请求必须等待后续请求,延迟不可控。同时,批次内所有请求必须等最慢的完成,短请求会被长请求拖累。因此,它只适合离线批量任务,如处理大型数据集,而不适合对延迟敏感的在线服务。
动态批处理的权衡
动态批处理通过设置超时窗口,在批次未满时也能启动,从而改善了静态批处理的等待问题。但超时窗口的设定需要权衡:窗口过短会降低批处理效率,过长则增加延迟。此外,批次内仍受最慢请求影响,因此它更适合输出长度相对固定的模型,如图像生成,而非LLM。
连续批处理为何成为LLM服务的主流
连续批处理以解码步骤为单位调度,序列完成即释放槽位,新请求可立即插入,避免了批次内相互等待。这显著提高了吞吐量,尤其适合请求长度差异大的LLM场景。因此,vLLM、TensorRT-LLM等主流推理框架默认采用连续批处理,而动态批处理在轻负载下可能更快返回首个token。
Q&A
静态批处理、动态批处理和连续批处理在LLM推理中有什么区别?
静态批处理等待批次满后才运行,延迟高;动态批处理通过超时窗口改善等待,但批次内仍受最慢请求影响;连续批处理以解码步骤为单位调度,序列完成即释放槽位,吞吐量高,适合生产级LLM服务。
为什么静态批处理不适合实时LLM服务?
静态批处理需要等待批次满才开始,导致首个请求延迟高;且批次内所有请求必须等待最慢的请求完成,无法满足实时性要求。
动态批处理如何改善静态批处理的延迟问题?
动态批处理引入超时窗口,当批次未满但超时时间到,就运行当前已积累的请求,从而限制等待时间,改善延迟。
连续批处理为什么能提高LLM推理的吞吐量?
连续批处理以解码步骤为单位调度,序列完成即释放槽位,新请求可立即插入,无需等待整个批次完成,从而减少GPU空闲,提高吞吐量。
在LLM推理中,动态批处理和连续批处理哪个更适合生产环境?
连续批处理更适合生产环境,因为它能提供更高的吞吐量,且被vLLM、TensorRT-LLM等主流框架默认采用。动态批处理在轻负载下可能提供更快的首令牌时间,但整体吞吐量较低。
什么是分块预填充(chunked prefill)?它解决了什么问题?
分块预填充是将长提示词拆分成小块,分多次处理,避免长提示词的预填充计算阻塞其他序列的解码步骤,从而减少延迟。
静态批处理适合哪些场景?
静态批处理适合离线批量处理任务,如对大型存储数据集进行推理,这些任务对延迟不敏感,但需要高吞吐量。