更新时间:2025-03-03 GMT+08:00
分享

Chunked Prefill

什么是Chunked Prefill

Chunked Prefill(Splitfuse)特性的目的是将长prompt request分解成更小的块,并在多个forward step中进行调度,只有最后一块的forward完成后才开始这个prompt request的生成。将短prompt request组合以精确填充step的空隙,每个step的计算量基本相等,达到所有请求平均延迟更稳定的目的。

关键行为:

  1. 长prompts被分解成更小的块,并在多个迭代中进行调度,只有最后一遍迭代执行输出生成token。
  2. 构建batch时,一个prefill块和其余槽位用decode填充,降低仅decode组batch的成本。

其优势主要包括:

  • 提升效率:通过合理组合长短prompt,保持模型高吞吐量运行。
  • 增强一致性:统一前向传递大小,降低延迟波动,使生成频率更稳定。
  • 降低时延:通过平衡prefill和decode的计算利用率,降低请求P90_ttft(time to first token)、P90_tpot(time per output token)时延。在短输入、短输出且高并发的场景优势明显。

约束限制

  • 该特性不能和PD分离、Prefix Cache、KV Cache量化特性、multi-lora特性同时使用。
  • LLama系列、Qwen系列模型支持此特性。

Chunked Prefill参数配置

Chunked Prefill的依赖参数如下表所示。

表1 依赖参数说明

配置项

取值类型

取值范围

配置说明

enable-chunked-prefill

bool

  • true
  • false
  • true:开启Chunked Prefill特性。
  • false:不开启Chunked Prefill特性。

max-num-batched-tokens

int

>=256且是256的倍数

在Chunked Prefill模式下,该参数限制最大切分长度,允许比max-model-len小。推荐使用4096、8192甚至更大。

执行推理参考

  1. Ascend vllm使用Chunked Prefill特性需参考表1,其它参数请参考启动推理服务
  2. 启动推理服务请参考启动推理服务

相关文档