Chunked Prefill
了解分块预填充(chunked prefill)如何通过将长提示拆分为词元块来提高大模型(LLM)推理延迟和吞吐量,从而在并发工作负载下实现更流畅的服务。
分块预填充是一种推理调度技术,它将长输入提示词划分为较小的tokens组,而不是在一次不间断的操作中处理整个提示词。推理引擎可以将这些块与处理其他请求的token生成交织在一起,从而防止单个长提示词独占GPU。其结果通常是在并发工作负载下实现更平稳的延迟、更好的硬件利用率,以及为交互式大型语言模型应用提供更具可预测性的服务。
分块预填充的工作原理#
自回归Transformer推理包含两个主要阶段:
- **预填充(Prefill):**模型处理所有输入token,计算它们的注意力状态,并填充KV cache。预填充会并行评估许多token,通常受计算能力限制(compute-bound)。
- **解码(Decode):**模型在读取先前缓存的状态的同时,一次生成一个输出token。解码通常受内存带宽而非原始计算能力的限制。
如果不进行分块,一个包含20,000个token的请求可能会占用推理步骤的时间远超短请求。这样一来,活跃的生成过程可能会经历暂停,从而增加token间延迟,即使它们自己的提示词很短。
通过分块预填充,调度器为每次迭代分配一个token预算。它首先调度活跃的解码操作,然后将剩余的预算用于一个或多个提示词块。如果某个提示词放不下,其剩余的token将等待后续迭代。当前的vLLM优化指南将这种方法描述为将计算密集型的预填充工作与内存密集型的解码工作结合起来的一种方式。
分块改变的是提示词token的处理时机,而不是它们的顺序或含义。每一个完成的块都会扩展请求缓存的注意力状态,直到完整的提示词准备就绪并且可以开始解码。
为什么分块预填充很重要#
分块预填充解决了生产环境中模型服务相互冲突的性能目标:
- **token间延迟:**优先处理现有的解码请求有助于流式响应继续进行而不会出现长时间暂停。
- **首字延迟(Time to first token):**较大的块可以更快地完成新提示词,而非常小的块可能会延迟其生成的第一个token。
- **吞吐量:**将预填充和解码工作结合起来,可以更有效地利用GPU计算和内存带宽。
- **公平性:**长提示词不太可能阻塞大量简短的交互式请求。
因此,块或token预算的设置是一种权衡。vLLM调度器配置提供了对批量token限制、部分预填充以及长提示词阈值的控制。较小的预算通常有利于响应迅速的解码,而较大的预算则有利于更快地摄取提示词。
分块并不能消除每一个瓶颈。长上下文仍然会消耗缓存内存,过于激进的准入可能会导致缓存压力、请求抢占或重复工作。操作员应在真实提示词分布下衡量中位数和尾部推理延迟、首字延迟、token间延迟、吞吐量以及GPU内存使用情况。
相关的推理概念#
分块预填充与多项优化密切相关,但具有独特的作用:
- **连续批处理:**在生成过程中动态添加和删除请求。分块预填充通过使长提示词处理能够在token边界处进行调度来对其实施补充。
- **提示词缓存:**为重复的提示词前缀重复使用先前计算的状态。分块预填充调度新的计算;它不会跳过该计算。
- **分页KV缓存管理:**将缓存的注意力状态组织到内存块中。NVIDIA的TensorRT-LLM概述包含了分页缓存和飞行中批处理(in-flight batching)以及提示词处理优化。
- **动态批处理:**将单独的请求组合成批次,正如NVIDIA Triton动态批处理指南中所解释的那样。它不一定将单个长提示词划分为部分预填充。
- **分离式预填充和解码:**在单独的工作进程上运行这些阶段。NVIDIA的预填充和解码部署指南展示了如何独立扩展各个阶段。
尽管Ultralytics YOLO26 Triton部署工作流支持可扩展的计算机视觉推理和自动批处理,但标准的YOLO目标检测并没有自回归文本预填充阶段。分块预填充主要适用于生成式语言和多模态模型。
实际应用#
-
**文档助手:**检索增强助手可能会收到一份长报告,同时为提出简短问题的用户提供服务。对报告的预填充进行分块可以让正在进行的聊天继续解码,而不会冻结,直到处理完整个上下文。
-
多模态视频分析:视觉语言模型可能会接收图像特征、目标描述和长文本指令。视觉管道可以首先使用Ultralytics YOLO预测产生检测结果,然后将结构化的视觉上下文发送给生成模型。分块预填充有助于将生成的视觉和文本token与其它请求一起调度。NVIDIA的多模态编码-预填充-解码工作流说明了为什么独立管理这些阶段可以提高可扩展性。
实际部署指导#
仅通过官方支持目标架构的服务引擎启用分块预填充。例如,TensorRT-LLM后端配置记录了支持的部署的分块上下文控制。
使用真实的并发性、输入长度和输出长度进行基准测试,而不是依赖单个请求。从运行时的推荐token budget开始,然后在观察首字延迟和token间延迟的同时对其进行调整。最后,测试包含极长和极短提示词的混合工作负载;分块预填充正是在这里提供其最清晰的运营价值。






