
# 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 Caching、KV Cache量化特性同时使用。
- Qwen系列模型支持此特性。
- vllm v1 scheduler 默认开启；配置 ascend_scheduler_config 后，chunked prefill 特性将被默认关闭，需进行额外配置，配置方式见下表（注：第1，3点情况下，chunked_prefill 特性将被开启，第2点情况下，chunked_prefill 特性将被关闭）。
- 配置 ascend_scheduler_config 后，将使用 ascend-vllm scheduler 调度器，否则便默认使用开源 vllm 的 v1 scheduler 调度器。
 
#### Chunked Prefill参数配置
Chunked Prefill的依赖参数如下表所示。
 表1依赖参数说明 
| 配置项                    | 取值类型 | 取值范围                                                                                                                                                                                                                                                                | 配置说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
|:---|:---|:---|:---|
| enable-chunked-prefill | bool | - true  - false   | **1. chunked_prefill 特性在开源 vllm v1 scheduler 在 GPU/NPU 上默认开启生效。** 2. 使用 ascend-vllm scheduler 时，需要将 ascend_scheduler_config 配置成 enabled = true ，此时 chunked_prefill 特性则会被默认关闭。 ``` --additional-config='{"ascend_turbo_graph_config": {"enabled": true}}' ``` 3. 使用 ascend-vllm scheduler 时，如果想要开启 chunked_prefill 特性，则必须在ascend_scheduler_config 下再进行额外配置，否则将保持默认关闭的状态（即第2点中的情况）。开启 chunked_prefill 配置方式如下： ``` --additional-config='{"ascend_turbo_graph_config": {"enabled": true,"chunked_prefill_enabled": true}}' #如果不配置本参数为true，则chunked_prefill特性此时是处于默认关闭的状态。 ``` |
| max-num-batched-tokens | int  | \>=256且是256的倍数                                                                                                                                                                                                                                                      | 在Chunked Prefill模式下，该参数限制最大切分长度，必须大于或等于--max-model-len。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   
#### 执行推理参考
1. Ascend vllm使用Chunked Prefill特性需参考[表1]，其它参数请参考[启动推理服务（大语言模型）](https://support.huaweicloud.com/bestpractice-modelarts/modelarts_llm_infer_5908007.html)。
2. 启动推理服务请参考[启动推理服务（大语言模型）](https://support.huaweicloud.com/bestpractice-modelarts/modelarts_llm_infer_5908007.html)。
 
