动态批处理#

动态批处理是一种在分块预填充策略中,根据资源状况和服务等级目标,动态调整每次推理迭代块大小的技术,旨在提高有效吞吐量并降低令牌间延迟。

动态批处理由 --SLO_limits_for_dynamic_batch 参数的值控制。值得注意的是,目前仅支持昇腾 910 B3,且解码令牌数量需低于 2048。特别是在 Qwen 和 Llama 模型上,性能提升非常明显。我们正在进行进一步的改进,未来该功能将支持更多型号的 XPU。

快速入门#

前提条件#

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

  2. 加载查找表需要 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.

支持的模型#

目前,动态批处理在 tensor_parallel_size=8 的多个稠密模型上表现更好,包括 Qwen 和 Llama(从 8B 到 32B)。对于不同的模型,需要设置合适的 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