vLLM Ascend 图模式优化
vLLM Ascend 是基于 vLLM 框架为昇腾(Ascend)硬件平台提供高性能大语言模型推理的服务。为充分发挥昇腾 NPU 的计算潜力,vLLM Ascend 引入了图模式(Graph Mode)进行计算图优化,并通过 additional_config 机制提供灵活的底层行为控制。
1. 图模式加速
图模式(Graph Mode)通过提前捕获、编译和优化模型的前向计算图,消除运行时开销,并进行深度融合优化,从而显著提升推理吞吐量与延迟表现。
1.1 注意事项与兼容性
- 实验性功能:图模式目前处于实验性阶段,未来版本配置方式、模型覆盖范围与性能可能持续改进。
- 引擎要求:图模式仅适用于 V1 Engine。
- 默认启用:自
v0.9.1rc1起,vLLM Ascend 默认启用图模式,以与 vLLM 保持一致行为。当前 Qwen 与 DeepSeek 系列模型已得到较充分测试。
1.2 两种图模式类型
| 图模式名称 | 核心技术 | 适用模型 | 启用方式 |
|---|---|---|---|
| ACLGraph | 基于 ACL(Ascend Computing Language)的图编译 | Qwen、DeepSeek 系列 | 默认启用(V1 Engine) |
| TorchAirGraph | 基于 GE 图模式(Graph Engine) | DeepSeek 系列、PanguProMoE | 需通过 additional_config 显式启用 |
1.3 ACLGraph 使用
ACLGraph 是默认图模式。对于支持的模型(如 Qwen 系列),只需确保使用 V1 引擎即可自动启用。
离线推理:
python
from vllm import LLM
model = LLM(model="path/to/Qwen2-7B-Instruct")
outputs = model.generate("Hello, how are you?")在线服务:
bash
vllm serve Qwen/Qwen2-7B-Instruct1.4 TorchAirGraph 使用
TorchAirGraph 适用于 DeepSeek 等模型,但当前版本不兼容 Chunked-Prefill。
离线推理:
python
from vllm import LLM
model = LLM(
model="path/to/DeepSeek-R1-0528",
additional_config={
"torchair_graph_config": {"enabled": True},
"ascend_scheduler_config": {"enabled": True},
},
)
outputs = model.generate("Hello, how are you?")在线服务(建议将配置写入 JSON 文件以避免命令行转义问题):
bash
# 将配置保存到 config.json
cat > torchair_config.json << 'EOF'
{
"torchair_graph_config": {"enabled": true},
"ascend_scheduler_config": {"enabled": true}
}
EOF
vllm serve path/to/DeepSeek-R1-0528 \
--additional-config torchair_config.json1.5 回退到 Eager 模式
若图模式运行失败或遇到兼容性问题,可设置 enforce_eager=True 强制使用 Eager 模式。
离线推理:
python
from vllm import LLM
model = LLM(model="some_model", enforce_eager=True)
outputs = model.generate("Hello, how are you?")在线服务:
bash
vllm serve some_model --enforce-eager2. 附加配置(Additional Configuration)
additional_config 是 vLLM 提供的机制,允许插件(如 vLLM Ascend)灵活控制内部行为。它可通过字典或 JSON 文件传入。
2.1 使用方法
离线模式:
python
from vllm import LLM
llm = LLM(
model="Qwen/Qwen3-8B",
additional_config={"config_key": "config_value"},
)在线模式:
bash
vllm serve Qwen/Qwen3-8B --additional-config config.json2.2 顶级配置选项
| 名称 | 类型 | 默认值 | 描述 |
|---|---|---|---|
torchair_graph_config | dict | {} | TorchAir 图模式配置 |
ascend_scheduler_config | dict | {} | Ascend 调度器配置 |
weight_prefetch_config | dict | {} | 权重预取配置 |
refresh | bool | False | 是否刷新全局昇腾配置 |
kv_cache_dtype | str | None | KV Cache 量化数据类型,当前仅支持 int8 |
enable_shared_expert_dp | bool | False | MoE 共享专家在 DP 中共享时启用 |
expert_map_path | str | None | 专家负载均衡(EPLB)映射文件路径 |
dynamic_eplb | bool | False | 是否启用动态 EPLB |
num_iterations_eplb_update | int | 400 | EPLB 开始更新的迭代次数 |
multistream_overlap_shared_expert | bool | False | 是否启用多流共享专家 |
2.3 TorchAir 图配置
| 名称 | 类型 | 默认值 | 描述 |
|---|---|---|---|
enabled | bool | False | 是否启用 TorchAir 图模式 |
mode | str | None | Reduce-Overhead 模式设置 |
enable_view_optimize | bool | True | 是否启用视图优化 |
enable_frozen_parameter | bool | True | 推理时固定权重内存地址 |
use_cached_graph | bool | False | 是否使用缓存的计算图 |
graph_batch_sizes | list[int] | [] | 图缓存的批处理大小列表 |
graph_batch_sizes_init | bool | False | 是否动态初始化批处理大小 |
enable_kv_nz | bool | False | 是否启用 KV Cache NZ 布局(MLA 模型) |
enable_super_kernel | bool | False | 是否启用 Super Kernel(动态 W8A8 MoE) |
2.4 Ascend 调度器配置
| 名称 | 类型 | 默认值 | 描述 |
|---|---|---|---|
enabled | bool | False | 是否启用 Ascend 调度器 |
enable_pd_transfer | bool | False | 是否启用 Prefill-Decode 传输(仅离线) |
decode_max_num_seqs | int | 0 | P-D 传输时 Decode 阶段最大序列数 |
max_long_partial_prefills | int / float | inf | 可并发 Partial Prefill 的长提示最大数量 |
long_prefill_token_threshold | int / float | inf | 长提示词的最小 Token 阈值 |
ascend_scheduler_config还支持继承 vLLM 调度器配置项,如enable_chunked_prefill: True。
2.5 权重预取配置
| 名称 | 类型 | 默认值 | 描述 |
|---|---|---|---|
enabled | bool | False | 是否启用权重预取 |
prefetch_ratio | dict | {"attn": {"qkv": 1.0, "o": 1.0}, "moe": {"gate_up": 0.8}} | 各权重的预取比例 |
2.6 综合配置示例
json
{
"torchair_graph_config": {
"enabled": true,
"use_cached_graph": true,
"graph_batch_sizes": [1, 2, 4, 8],
"graph_batch_sizes_init": false,
"enable_kv_nz": false
},
"ascend_scheduler_config": {
"enabled": true,
"enable_chunked_prefill": true,
"max_long_partial_prefills": 1,
"long_prefill_token_threshold": 4096
},
"weight_prefetch_config": {
"enabled": true,
"prefetch_ratio": {
"attn": {"qkv": 1.0, "o": 1.0},
"moe": {"gate_up": 0.8}
}
},
"multistream_overlap_shared_expert": true,
"refresh": false
}