动态批处理#

动态 Batch 是一种根据资源情况和 SLO(服务等级目标)目标,在分块预填充(chunked prefilling)策略中动态调整每次推理迭代块大小(chunksize)的技术。通过该技术可以提高有效吞吐量并降低 TBT(Token 间延迟)。

动态 Batch 由 --SLO_limits_for_dynamic_batch 参数值控制。特别需要注意的是,目前该功能仅支持 910 B3,且 Decode Token 数量规模需在 2048 以下。在 Qwen 和 Llama 模型上性能提升尤为明显。我们正在进行进一步改进,未来该功能将支持更多型号的 XPU。

快速入门#

前提条件#

  1. 动态 Batch 目前依赖于存储在查找表中的离线开销模型(cost model)来精细化 Token 预算。查找表以 '.csv' 文件形式存储,应先从 此处 下载,重命名后保存至路径 vllm_ascend/core/profile_table.csv

  2. 加载查找表需要安装 Pandas,请确保环境中已安装该库。

   pip install pandas 
   ```

### Tuning Parameter
`--SLO_limits_for_dynamic_batch` is the tuning parameters (integer type) for the dynamic batch feature, greater values impose more constraints on the latency limitation, leading to higher effective throughput. The parameter can be selected according to the specific models or service requirements.

```python
--SLO_limits_for_dynamic_batch =-1 # default value, dynamic batch disabled.
--SLO_limits_for_dynamic_batch = 0  # baseline value for dynamic batch, dynamic batch disabled, FCFS and decode-first chunked prefilling strategy is used.
--SLO_limits_for_dynamic_batch > 0 # user-defined value for dynamic batch, dynamic batch enabled with FCFS and decode-first chunked prefilling strategy.

支持的模型#

目前,动态 Batch 在 tensor_parallel_size=8 的多个全量(dense)模型上表现较好,包括 Qwen 和 Llama(从 8B 到 32B)。对于不同的模型,需要设置合适的 SLO_limits_for_dynamic_batch 参数。该参数的经验值通常为 35, 50 75。因此,需要进行一些额外测试以选择最佳参数。

用法#

动态 Batch 用于在线推理。一个完整的可执行示例如下:

SLO_LITMIT=50
vllm serve Qwen/Qwen2.5-14B-Instruct\
    --additional_config '{"SLO_limits_for_dynamic_batch":'${SLO_LITMIT}'}' \
    --max-num-seqs 256 \
    --block-size 128 \
    --tensor_parallel_size 8 \
    --load_format dummy \
    --max_num_batched_tokens 1024 \
    --max_model_len 9000 \
    --host localhost \
    --port 12091 \
    --gpu-memory-utilization 0.9 \
    --trust-remote-code