Chunked Prefill
什么是Chunked Prefill
Chunked Prefill(Splitfuse)特性的目的是将长prompt request分解成更小的块,并在多个forward step中进行调度,只有最后一块的forward完成后才开始这个prompt request的生成。将短prompt request组合以精确填充step的空隙,每个step的计算量基本相等,达到所有请求平均延迟更稳定的目的。
关键行为:
- 长prompts被分解成更小的块,并在多个迭代中进行调度,只有最后一遍迭代执行输出生成token。
- 构建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的依赖参数如下表所示。
配置项 |
取值类型 |
取值范围 |
配置说明 |
---|---|---|---|
enable-chunked-prefill |
bool |
|
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甚至更大。 |
执行推理参考
- Ascend vllm使用Chunked Prefill特性需参考表1,其它参数请参考启动推理服务(大语言模型)。
- 启动推理服务请参考启动推理服务(大语言模型)。