更新时间:2025-08-27 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)时延。在短输入、短输出且高并发的场景优势明显。

约束限制

  • 该特性不能和Prefix Cache(APC)、KV Cache量化特性同时使用。
  • Qwen系列模型支持此特性。
  • v1 默认开启;开启 vllm_ascend 能力时候,应当额外配置,否则将被默认关闭,配置方式见下表(注:第1,3点情况下,chunked_prefill特性将被开启,第2点情况下,chunked_prefill特性将被关闭)。

Chunked Prefill参数配置

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

表1 依赖参数说明

配置项

取值类型

取值范围

配置说明

enable-chunked-prefill

bool

  • true
  • false

1. chunked_prefill 特性在开源 vllm v1 scheduler 在 GPU/NPU 上默认开启生效。

2. 使用 vllm_ascend 能力时,需要将 ascend_scheduler_config 配置成 enabled = true ,此时 chunked_prefill 特性则会被默认关闭。
--additional-config="ascend_scheduler_config": {
"enabled": true
}

3. 使用 vllm_ascend 能力时,如果想要开启 chunked_prefill 特性,则必须在ascend_scheduler_config 下再进行额外配置,否则将保持默认关闭的状态(即第2点中的情况)。

使用 vllm_ascend 能力时,开启 chunked_prefill 配置方式如下:
--additional-config="ascend_scheduler_config": {
"enabled": true,
"chunked_prefill_enabled": true, #如果不配置本参数为true,则chunked_prefill特性此时是处于默认关闭的状态。
}

max-num-batched-tokens

int

>=256且是256的倍数

在Chunked Prefill模式下,该参数限制最大切分长度,必须大于或等于--max-model-len。推荐使用4096、8192甚至更大。

执行推理参考

  1. Ascend vllm使用Chunked Prefill特性需参考表1,其它参数请参考启动推理服务(大语言模型)
  2. 启动推理服务请参考启动推理服务(大语言模型)

相关文档