动态批处理#

动态批处理是一种技术,它根据资源和SLO目标,在分块预填充策略的每次推理迭代中动态调整块大小,从而提高有效吞吐量并降低TBT。

动态批处理由 --SLO_limits_for_dynamic_batch 参数的值控制。值得注意的是,目前仅支持910 B3,且解码token数量规模需低于2048。特别是在Qwen、Llama模型上,改进效果相当明显。我们正在进行进一步的改进,该功能未来将支持更多XPU。

快速开始#

先决条件#

  1. 动态批处理目前依赖于一个保存在查找表中的离线成本模型来优化token预算。该查找表保存在一个'.csv'文件中,需要先从A2-B3-BLK128.csv下载,重命名后保存到路径 vllm_ascend/core/profile_table.csv

  2. 需要 Pandas 来加载查找表,以防未安装pandas。

    pip install pandas 
    

调优参数#

--SLO_limits_for_dynamic_batch 是动态批处理功能的调优参数(整数类型),较大的值会放宽延迟限制,从而带来更高的有效吞吐量。可以根据具体模型或服务需求选择该参数。

--SLO_limits_for_dynamic_batch = -1  # Default value; dynamic batching is disabled.
--SLO_limits_for_dynamic_batch = 0  # Baseline value for dynamic batching; dynamic batching is disabled. FCFS and decode-first chunked prefilling strategy is used.
--SLO_limits_for_dynamic_batch > 0  # User-defined positive value; dynamic batching is enabled. FCFS and decode-first chunked prefilling strategy is used.

支持的模型#

目前,动态批处理在几个密集模型上表现更好,包括Qwen和Llama(从8B到32B),且 tensor_parallel_size=8。对于不同的模型,需要一个合适的 SLO_limits_for_dynamic_batch 参数。该参数的经验值通常是 35、50或75。因此,需要进行一些额外的测试来选择最佳参数。

使用方法#

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

SLO_LIMIT=50
vllm serve Qwen/Qwen2.5-14B-Instruct\
    --additional_config '{"SLO_limits_for_dynamic_batch":'${SLO_LIMIT}'}' \
    --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