动态批处理#

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

Dynamic batch is controlled by the value of the --SLO_limits_for_dynamic_batch. Notably, only Atlas A2 inference products are supported with decode token number scales below 2048 so far. Especially, the improvements are quite obvious on Qwen, Llama models. We are working on further improvements and this feature will support more XPUs in the future.

快速开始#

先决条件#

  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