动态 Batch#
动态 Batch 是一种技术,它在分块预填充策略的每次推理迭代中,根据资源和 SLO 目标动态调整 chunksize,从而提高有效吞吐量并降低 TBT。
动态 Batch 由 --SLO_limits_for_dynamic_batch 的值控制。值得注意的是,到目前为止,仅支持 910 B3 在解码 token 数低于 2048 的情况下。特别是,在 Qwen 和 Llama 模型上,改进效果非常明显。我们正在努力进一步改进,该功能未来将支持更多 XPUs。
入门#
先决条件#
动态 Batch 现在依赖于保存在查找表中的离线成本模型来优化 token 预算。查找表保存在 ‘.csv’ 文件中,该文件应首先从 这里 下载,重命名后保存到路径
vllm_ascend/core/profile_table.csv。加载查找表需要
Pandas,如果未安装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 在包括 Qwen 和 Llama(从 8B 到 32B)在内的多个密集模型上表现更好,且 tensor_parallel_size=8。对于不同的模型,需要一个合适的 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