vLLM-Ascend 参数汇总(以DeepSeek-V4为例)
·
作者:昇腾实战派
知识地图:https://blog.csdn.net/Lumos_Lovegood/article/details/161601003
背景概述
在 vLLM-Ascend 推理框架中,正确配置启动参数与环境变量是充分发挥昇腾算力、保障推理稳定性的关键。本文以 DeepSeek-V4 系列模型为例,汇总单机混部、多机混部、PD 分离等常见部署形态下的关键参数与配置含义,为外部开发者在昇腾上部署 vLLM 服务提供参考。
单机混部(DeepSeekV4-Flash)
export OMP_PROC_BIND=false
export OMP_NUM_THREADS=10
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
export LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libjemalloc.so.2:$LD_PRELOAD
export VLLM_USE_V1=1
export VLLM_VERSION=0.18.0
export USE_MULTI_BLOCK_POOL=1
export USE_MULTI_GROUPS_KV_CACHE=1
export HCCL_BUFFSIZE=1024
export VLLM_ASCEND_ENABLE_FUSED_MC2=1
export VLLM_ASCEND_ENABLE_FLASHCOMM1=1
export DYNAMIC_EPLB="true"
export VLLM_ENGINE_READY_TIMEOUT_S=1200
vllm serve /mnt/share/weights/v4_w8a8 \
--port 8008 \
--host 0.0.0.0 \
--max_model_len 10240 \
--max-num-batched-tokens 10240 \
--served-model-name dsv4 \
--gpu-memory-utilization 0.9 \
--max-num-seqs 64 \
--data-parallel-size 2 \
--tensor-parallel-size 8 \
--enable-expert-parallel \
--tokenizer-mode deepseek_v4 \
--tool-call-parser deepseek_v4 \
--enable-auto-tool-choice \
--reasoning-parser deepseek_v4 \
--safetensors-load-strategy 'prefetch' \
--quantization ascend \
--speculative-config '{"num_speculative_tokens": 1,"method": "deepseek_mtp"}' \
--block-size 128 \
--compilation-config '{"cudagraph_mode": "FULL_DECODE_ONLY"}'\
--async-scheduling \
--additional-config '
{"ascend_compilation_config":{
"enable_npugraph_ex":true,
"enable_static_kernel":false
},
"enable_cpu_binding": "true",
"multistream_overlap_shared_expert":false,
"multistream_dsa_preprocess":false}' \
2>&1 | tee single.log
--host表示主机名/IP 地址。--port表示 vllm 服务对外暴露的端口号。--max-model-len定义单个请求的最大处理长度(输入 prompt + 生成内容的 token 总数),确保不超过硬件显存容量。--max-num-batched-tokens表示模型单步能处理的最大 token 数量。目前,vLLM v1 调度默认启用了 ChunkPrefill/SplitFuse,这意味着:- (1)如果请求的输入长度大于
--max-num-batched-tokens,将按照--max-num-batched-tokens拆分为多轮计算; - (2)解码请求优先调度,仅在有剩余容量时才调度预填充请求。
- 通常,
--max-num-batched-tokens设置得越大,整体延迟越低,但对 GPU 内存(激活值占用)的压力越大。
- (1)如果请求的输入长度大于
--max-num-seqs表示每个 DP 组允许处理的最大请求数。如果发送到服务的请求数超过此限制,超出部分将处于等待状态而不会被调度。请注意,等待状态所花费的时间也会计入 TTFT 和 TPOT 等指标中。因此,在测试性能时,通常建议--max-num-seqs*--data-parallel-size>= 实际总并发数。--gpu-memory-utilization表示 vLLM 将用于实际推理的 HBM 占比。其核心作用是计算可用的 kv_cache 大小。在预热阶段(vLLM 中称为 profile run),vLLM 会记录输入大小为--max-num-batched-tokens的推理过程中的峰值 GPU 内存使用量。然后按如下方式计算可用 kv_cache 大小:--gpu-memory-utilization* HBM 大小 - 峰值 GPU 内存使用量。因此,--gpu-memory-utilization的值越大,可用的 kv_cache 就越多。然而,由于预热阶段的 GPU 内存使用量可能与实际推理时不同(例如由于 EP 负载不均),将--gpu-memory-utilization设置过高可能会导致实际推理时出现 OOM(内存不足)问题。默认值为0.9。--compilation-config包含与 aclgraph 图模式相关的配置。最重要的配置是 “cudagraph_mode” 和 “cudagraph_capture_sizes”,其含义如下:"cudagraph_mode":表示具体的图模式。目前支持 “PIECEWISE” 和 “FULL_DECODE_ONLY”。图模式主要用于降低算子下发开销。目前推荐使用 “FULL_DECODE_ONLY”。"cudagraph_mode":"FULL_DECODE_ONLY",表示只对 decode 阶段建图,不对 prefill 建图。原因:prefill 长度变化大,建图收益低。"cudagraph_capture_sizes"参数控制推理过程中图捕获的粒度。调整该值决定了一次捕获多少计算图,这会对性能和内存使用产生重大影响。如果未手动指定此列表,它将填充一系列均匀分布的值,这通常能确保良好的性能。然而,如果您想进一步微调,手动指定值将产生更好的结果。这是因为如果批次大小落在两个值之间,框架会自动将 token 数量填充到较大的值。这通常会导致实际性能偏离预期甚至下降。因此,与上述实际场景一样,在调整基准测试请求并发数时,我们始终确保并发数实际包含在 cudagraph_capture_sizes 列表中。这样,在解码阶段,基本上可以避免填充操作,确保实验数据的可靠性。需要注意的是,如果启用了 FlashComm_v1,此列表中的值必须是 TP 大小的整数倍。任何不满足此条件的值将被自动过滤掉。
--quantization "ascend"表示使用 Ascend 专用量化后端。要禁用量化,请移除该选项。--served-model-name表示 API 中使用的模型名称。如果提供了多个名称,服务器将响应提供的任何名称。--api-server-count表示运行的 API 服务器进程数量。--data-parallel-size表示数据并行组数量。--tensor-parallel-size表示张量并行组数量。--enable-expert-parallel表示对 MoE 层使用专家并行而不是张量并行。--no-enable-prefix-caching表示不启用前缀缓存。--block-size定义了操作系统内存分页机制中每个数据块(Block)所能容纳的 Token 数量。--tokenizer-mode deepseek_v4:启用 dsv4 专用 tokenizer。--tool-call-parser deepseek_v4:启用 dsv4 专用的工具调用(Function Calling)解析器,以便让 dsv4 模型在 Agent 系统中顺利工作。--reasoning-parser deepseek_v4:启用 dsv4 专用的思考模式解析器。--enable-auto-tool-choice:允许模型自动决定是否调用工具。--safetensors-load-strategy 'prefetch':开启权重预取,即边读边加载,可使模型启动更快。--async-scheduling:开启异步调度,可以实现调度和模型执行过程并行。--speculative-config '{"num_speculative_tokens": 1,"method": "deepseek_mtp"}':使用 DeepSeek 的 MTP(Multi-Token Prediction)机制进行投机解码。每次尝试提前预测 1 个 token。若预测正确,可减少主模型计算,从而降低延迟。--additional-config是 vllm 的附加配置,一般用于性能优化。"enable_cpu_binding": "true",从 vllm-ascend v0.18.0rc1 开始,CPU 绑定在基于 ARM 的昇腾服务器上默认启用。CPU 绑定改进了配备昇腾 NPU 的多插槽 ARM 服务器的主机侧调度。它旨在解决三个常见的主机侧推理性能问题:- 降低跨 NUMA 流量。 Worker 进程更靠近为其活跃 NPU 选择的 CPU 和内存资源,从而减少远程 NUMA 访问。
- 降低线程抢占导致的上下文切换开销。 关键运行时线程在稳定的 CPU 范围内运行,减少调度器移动和繁忙主机上的 CPU 争用。
- 更好的延迟稳定性和多 Worker 隔离。 独立的 Worker 避免共享相同的 CPU/NUMA 资源,这有助于减少尾延迟抖动,并使多 NPU 服务期间的吞吐量更可预测。
- 此功能是主机侧的性能优化。它不会改变模型执行逻辑或数值输出。 当内存迁移支持不可用时,CPU 亲和性仍然有效,但内存局部性可能会变差,延迟或吞吐量可能会下降。
"ascend_compilation_config":"enable_npugraph_ex":Npugraph_ex 是一个编译时 FX 图优化层,与 ACLGraph 协同工作。它在 ACLGraph 于运行时捕获模型 FX 图之前对其进行优化。其性能优势主要来自于将多个算子融合为单个内核(例如,add + rms_norm → npu_add_rms_norm),以减少内核启动开销。"enable_static_kernel":静态内核编译。静态内核编译是一个可选功能,它在编译时预编译具有固定形状的算子二进制文件,从而减少静态或接近静态形状网络的运行时开销。它默认禁用,需要显式启用。
"multistream_overlap_shared_expert":是否启用多流共享专家。此选项仅对包含共享专家的 MoE 模型生效。默认值为 false。
多机混部(DeepSeekV4-Pro)
主节点
unset ftp_proxy
unset https_proxy
unset http_proxy
nic_name="bond0" # 对应节点有环境IP的网口名
local_ip=xxx.xxx.xxx.xxx # 主节点ip
export HCCL_IF_IP=$local_ip
export GLOO_SOCKET_IFNAME=$nic_name
export TP_SOCKET_IFNAME=$nic_name
export HCCL_SOCKET_IFNAME=$nic_name
export HCCL_OP_EXPANSION_MODE="AIV"
export HCCL_BUFFSIZE=1024
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
export OMP_PROC_BIND=false
export OMP_NUM_THREADS=10
export TASK_QUEUE_ENABLE=1
export LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libjemalloc.so.2:$LD_PRELOAD
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/
export HCCL_CONNECT_TIMEOUT=7200
export ASCEND_CONNECT_TIMEOUT=10000
export ASCEND_TRANSFER_TIMEOUT=10000
export VLLM_RPC_TIMEOUT=1800000 # 毫秒,约 30 分钟
export VLLM_ASCEND_APPLY_DSV4_PATCH=1
export VLLM_ASCEND_ENABLE_FLASHCOMM1=1
# 参数--data-parallel-address的IP为主节点IP
vllm serve /mnt/share/weights/DeepSeek-V4-Pro-w4a8-fixmtp \
--port 8900 \
--host 0.0.0.0 \
--safetensors-load-strategy 'prefetch' \
--model-loader-extra-config='{"enable_multithread_load": "true", "num_threads": 128}' \
--max_model_len 135000 \
--max-num-batched-tokens 4096 \
--served-model-name dsv4 \
--gpu-memory-utilization 0.9 \
--max-num-seqs 16 \
--data-parallel-size 2 \
--data-parallel-size-local 1 \
--data-parallel-start-rank 0 \
--data-parallel-address xxx.xxx.xxx.xxx \
--data-parallel-rpc-port 13399 \
--tensor-parallel-size 16 \
--enable-expert-parallel \
--quantization ascend \
--block-size 128 \
--async-scheduling \
--compilation-config '{"cudagraph_mode":"FULL_DECODE_ONLY"}' \
--tokenizer-mode deepseek_v4 \
--tool-call-parser deepseek_v4 \
--enable-auto-tool-choice \
--reasoning-parser deepseek_v4 \
--speculative-config '{"num_speculative_tokens": 1,"method": "mtp","enforce_eager": true}' \
--api-server-count 1 \
--additional-config '
{"ascend_compilation_config":{
"enable_npugraph_ex":true,
"enable_static_kernel":false
},
"enable_cpu_binding": "true",
"multistream_overlap_shared_expert":true}'
从节点
unset ftp_proxy
unset https_proxy
unset http_proxy
nic_name="bond0" # 对应节点有环境IP的网口名
local_ip=xxx.xxx.xxx.xxx # 从节点ip
export HCCL_IF_IP=$local_ip
export GLOO_SOCKET_IFNAME=$nic_name
export TP_SOCKET_IFNAME=$nic_name
export HCCL_SOCKET_IFNAME=$nic_name
export HCCL_OP_EXPANSION_MODE="AIV"
export HCCL_BUFFSIZE=1024
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
export OMP_PROC_BIND=false
export OMP_NUM_THREADS=10
export TASK_QUEUE_ENABLE=1
export LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libjemalloc.so.2:$LD_PRELOAD
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/
export HCCL_CONNECT_TIMEOUT=7200
export ASCEND_CONNECT_TIMEOUT=10000
export ASCEND_TRANSFER_TIMEOUT=10000
export VLLM_RPC_TIMEOUT=1800000 # 毫秒,约 30 分钟
export VLLM_ASCEND_APPLY_DSV4_PATCH=1
export VLLM_ASCEND_ENABLE_FLASHCOMM1=1
# 参数--data-parallel-address的IP为主节点IP
vllm serve /mnt/share/weights/DeepSeek-V4-Pro-w4a8-fixmtp \
--port 8900 \
--host 0.0.0.0 \
--safetensors-load-strategy 'prefetch' \
--model-loader-extra-config='{"enable_multithread_load": "true", "num_threads": 128}' \
--max_model_len 135000 \
--max-num-batched-tokens 4096 \
--served-model-name dsv4 \
--gpu-memory-utilization 0.9 \
--max-num-seqs 16 \
--data-parallel-size 2 \
--data-parallel-size-local 1 \
--data-parallel-start-rank 1 \
--data-parallel-address xxx.xxx.xxx.xxx \
--headless \
--data-parallel-rpc-port 13399 \
--tensor-parallel-size 16 \
--enable-expert-parallel \
--quantization ascend \
--block-size 128 \
--async-scheduling \
--compilation-config '{"cudagraph_mode":"FULL_DECODE_ONLY"}' \
--tokenizer-mode deepseek_v4 \
--tool-call-parser deepseek_v4 \
--enable-auto-tool-choice \
--reasoning-parser deepseek_v4 \
--speculative-config '{"num_speculative_tokens": 1,"method": "mtp","enforce_eager": true}' \
--additional-config '
{"ascend_compilation_config":{
"enable_npugraph_ex":true,
"enable_static_kernel":false
},
"enable_cpu_binding": "true",
"multistream_overlap_shared_expert":true}'
双机混部与单机混部大致一样,主要注意以下几点多机配置:
HCCL_IF_IP需要设置为本机 ip,xxxx_SOCKET_IFNAME需要设置为对应网卡。- 当前多机建议使用 dp。拉起多机 dp 时:
--data-parallel-size表示总 dp 大小。--data-parallel-size-local表示单机 dp 大小,一般可以设置为--data-parallel-size//node_size。--data-parallel-start-rank表示当前机器上 dp 组编号的起始值。一般主节点设置为 0、从节点依次按--data-parallel-size-local递增即可。--data-parallel-address、--data-parallel-rpc-port表示 dp 主节点的 ip 地址及用于数据并行 RPC 通信的端口。注意此处端口不能和 vllm 服务端口(–port)冲突。- 从节点需要加
--headless,而主节点不能加该参数。
PD 分离(DeepSeekV4-Pro,3×2P+1×2D)
P 节点
unset https_proxy
unset http_proxy
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/
nic_name="enp48s3u1u2"
local_ip=xxx.xxx.xxx.xxx
jemalloc_path=$(find /usr/lib /usr/lib64 -maxdepth 2 -type f -name "libjemalloc.so.2" 2>/dev/null | head -n 1)
if [[ -n "$jemalloc_path" ]]; then
export LD_PRELOAD="${jemalloc_path}:${LD_PRELOAD}"
echo "jemalloc found at: $jemalloc_path"
echo "LD_PRELOAD is set successfully."
else
echo "Warning: libjemalloc.so.2 not found under /usr"
echo "Please make sure jemalloc is installed."
fi
export HCCL_IF_IP=$local_ip
export GLOO_SOCKET_IFNAME=$nic_name
export TP_SOCKET_IFNAME=$nic_name
export HCCL_SOCKET_IFNAME=$nic_name
export VLLM_RPC_TIMEOUT=3600000
export VLLM_EXECUTE_MODEL_TIMEOUT_SECONDS=30000
export HCCL_EXEC_TIMEOUT=204
export HCCL_CONNECT_TIMEOUT=6000
export OMP_PROC_BIND=false
export OMP_NUM_THREADS=10
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
export HCCL_BUFFSIZE=1024
export TASK_QUEUE_ENABLE=1
export HCCL_OP_EXPANSION_MODE="AIV"
export VLLM_ASCEND_ENABLE_FUSED_MC2=1
export VLLM_ASCEND_ENABLE_FLASHCOMM1=1
export VLLM_ASCEND_APPLY_DSV4_PATCH=1
export ASCEND_RT_VISIBLE_DEVICES=$1
vllm serve /mnt/share/weights/DeepSeek-V4-Pro-w4a8-fixmtp \
--host 0.0.0.0 \
--port $2 \
--data-parallel-size $3 \
--data-parallel-rank $4 \
--data-parallel-address $5 \
--data-parallel-rpc-port $6 \
--tensor-parallel-size $7 \
--enable-expert-parallel \
--seed 1024 \
--served-model-name auto \
--max-model-len 131072 \
--max-num-batched-tokens 4096 \
--max-num-seqs 16 \
--no-disable-hybrid-kv-cache-manager \
--tokenizer-mode deepseek_v4 \
--tool-call-parser deepseek_v4 \
--enable-auto-tool-choice \
--reasoning-parser deepseek_v4 \
--safetensors-load-strategy 'prefetch' \
--model-loader-extra-config='{"enable_multithread_load": "true", "num_threads": 128}' \
--trust-remote-code \
--gpu-memory-utilization 0.92 \
--quantization ascend \
--block-size 128 \
--enforce-eager \
--speculative-config '{"num_speculative_tokens": 1, "method":"mtp", "enforce_eager": true}' \
--additional-config '{"enable_cpu_binding": "True", "enable_dsa_cp": true}' \
--kv-transfer-config \
'{"kv_connector": "MooncakeHybridConnector",
"kv_role": "kv_producer",
"kv_port": "30000",
"engine_id": "0",
"kv_connector_extra_config": {
"prefill": {
"dp_size": 2,
"tp_size": 16
},
"decode": {
"dp_size": 16,
"tp_size": 2
}
}
}'
D 节点
unset ftp_proxy
unset https_proxy
unset http_proxy
rm -rf ~/ascend/log
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/
nic_name="enp48s3u1u2"
local_ip=xxx.xxx.xxx.xxx
jemalloc_path=$(find /usr/lib /usr/lib64 -maxdepth 2 -type f -name "libjemalloc.so.2" 2>/dev/null | head -n 1)
if [[ -n "$jemalloc_path" ]]; then
export LD_PRELOAD="${jemalloc_path}:${LD_PRELOAD}"
echo "jemalloc found at: $jemalloc_path"
echo "LD_PRELOAD is set successfully."
else
echo "Warning: libjemalloc.so.2 not found under /usr"
echo "Please make sure jemalloc is installed."
fi
export HCCL_IF_IP=$local_ip
export GLOO_SOCKET_IFNAME=$nic_name
export TP_SOCKET_IFNAME=$nic_name
export HCCL_SOCKET_IFNAME=$nic_name
# # AIV
export HCCL_OP_EXPANSION_MODE="AIV"
export TASK_QUEUE_ENABLE=1
export VLLM_RPC_TIMEOUT=3600000
export VLLM_EXECUTE_MODEL_TIMEOUT_SECONDS=30000
export HCCL_EXEC_TIMEOUT=204
export HCCL_CONNECT_TIMEOUT=1200
export OMP_PROC_BIND=false
export OMP_NUM_THREADS=10
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
export HCCL_BUFFSIZE=1024
export ASCEND_RT_VISIBLE_DEVICES=$1
export VLLM_ASCEND_APPLY_DSV4_PATCH=1
vllm serve /mnt/share/weights/DeepSeek-V4-Pro-w4a8-fixmtp \
--host 0.0.0.0 \
--port $2 \
--data-parallel-size $3 \
--data-parallel-rank $4 \
--data-parallel-address $5 \
--data-parallel-rpc-port $6 \
--tensor-parallel-size $7 \
--enable-expert-parallel \
--seed 1024 \
--served-model-name auto \
--max-model-len 131072 \
--max-num-batched-tokens 120 \
--max-num-seqs 60 \
--async-scheduling \
--block-size 128 \
--no-enable-prefix-caching \
--tokenizer-mode deepseek_v4 \
--tool-call-parser deepseek_v4 \
--enable-auto-tool-choice \
--reasoning-parser deepseek_v4 \
--no-disable-hybrid-kv-cache-manager \
--safetensors-load-strategy 'prefetch' \
--model-loader-extra-config='{"enable_multithread_load": "true", "num_threads": 128}' \
--trust-remote-code \
--gpu-memory-utilization 0.9 \
--quantization ascend \
--speculative-config '{"num_speculative_tokens": 1, "method":"mtp", "enforce_eager": true}' \
--compilation-config '{"cudagraph_mode": "FULL_DECODE_ONLY"}' \
--kv-transfer-config \
'{"kv_connector": "MooncakeHybridConnector",
"kv_role": "kv_consumer",
"kv_port": "30300",
"engine_id": "3",
"kv_connector_extra_config": {
"prefill": {
"dp_size": 2,
"tp_size": 16
},
"decode": {
"dp_size": 16,
"tp_size": 2
}
}
}' \
--additional-config '{
"ascend_compilation_config":{
"enable_npugraph_ex":true,
"enable_static_kernel":false
},
"enable_cpu_binding":true,
"multistream_overlap_shared_expert":false,
"recompute_scheduler_enable":true
}'
相较于混部,PD 分离部署时需要注意以下配置:
- 当前 vLLM-Ascend pd 分离建议使用 Mooncake。
- p 节点一般输入 token 数较多,不需要使用图模式,因此可以开启
--enforce-eager。 --enforce-eager标志用于强制模型以 “eager 模式” 运行。具体含义如下:- eager 模式:在 eager 模式下,模型的每一层操作会立即执行,而不是按计算图进行延迟执行。这种模式通常用于调试或开发阶段,因为它允许更直观地观察每一层的输出和中间状态。
- 默认行为:vLLM 默认可能使用图执行模式(如 PyTorch 的 torch.compile 或类似的优化),以提高推理效率。这种模式下,多个操作会被优化并组合成一个计算图,从而减少开销。
--kv-transfer-config代表 pd 分离相关设置:
"kv_role"用于指定 p 节点(kv_producer)或者 d 节点(kv_consumer)。
"kv_port"用于指定 kv cache 传输端口。该端口号同样不能和其他端口号冲突。
"engine_id"用于区分 pd 不同实例。例如,3×2P+1×2D 时可以将 3 个 p 设置为 0、1、2;1 个 d 设置为 3。(同一个 P 实例中 kv_port 和 engine_id 保持一致,不同 P 实例的区分)
"kv_connector_extra_config"中,"prefill"、"decode"需要分别同 p、d 并行方式相对应。- p 实例、d 实例本质上相互独立存在,可由各自的 host/port 来接收请求。pd proxy 则将 p、d 联系起来。
图模式在 Ascend 上的工作原理
Ascend 上的默认图路径涉及两个阶段:编译时优化和运行时捕获/重放。ACLGraph 处理运行时捕获/重放。编译时阶段因 cudagraph_mode 而异:
- FULL_AND_PIECEWISE:默认模式,与上游 vLLM 策略相同。编译时路径遵循 PIECEWISE 编译,而运行时对于均匀解码批次仍可能使用全图行为。
- FULL / FULL_DECODE_ONLY:Npugraph_ex 通过 npugraph_ex (
force_eager=True,仅编译时,无捕获) 优化 FX 图。然后,优化后的可调用对象在运行时由 ACLGraph 捕获和重放。 - PIECEWISE:Npugraph_ex 被禁用。编译时仅应用基本的 FX 融合过程。ACLGraph 在运行时捕获并重放生成的可调用对象。
- NONE:无编译或图捕获。模型以即时执行模式运行。
cudagraph_mode | 编译时 | 运行时 | Npugraph_ex |
|---|---|---|---|
| FULL_AND_PIECEWISE | 分段编译路径 | 混合:混合批次使用 PIECEWISE,均匀解码批次支持 FULL | 禁用 |
| FULL / FULL_DECODE_ONLY | Npugraph_ex FX 优化 | ACLGraph 捕获/重放 | 启用 |
| PIECEWISE | 仅融合过程 | ACLGraph 捕获/重放 | 禁用 |
| NONE | 无 | 即时执行 | 禁用 |
环境变量
| 变量 | 含义 |
|---|---|
| OMP_PROC_BIND=false | 关闭 OpenMP 线程与 CPU 核的强绑定。避免线程被固定在少量核心上,有时对多进程推理更灵活。 |
| OMP_NUM_THREADS=10 | 设置 OpenMP 线程数为 10。影响 CPU 侧算子、预处理、调度等线程并行度。 |
| PYTORCH_NPU_ALLOC_CONF=expandable_segments:True | Ascend NPU 内存分配器使用可扩展内存段,减少内存碎片,提高长时间运行稳定性。 |
| LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libjemalloc.so.2:$LD_PRELOAD | 预加载 jemalloc 内存分配器,通常能降低内存碎片、提高多线程性能。 |
| VLLM_USE_V1=1 | 启用 vLLM 新版(V1)引擎路径。 |
| VLLM_VERSION=0.18.0 | 只是一个环境标记,便于脚本或日志识别版本,本身不一定被 vLLM 读取。 |
| USE_MULTI_BLOCK_POOL=1 | 启用多 Block Pool 内存管理(Ascend/vLLM 优化),提升 KV Cache 分配效率。 |
| USE_MULTI_GROUPS_KV_CACHE=1 | 启用多组 KV Cache 管理,适合大模型、多并发场景。 |
| HCCL_BUFFSIZE=1024 | 设置 HCCL(Ascend 集体通信库)缓冲区大小,影响多卡通信性能。 |
| VLLM_ASCEND_ENABLE_FUSED_MC2=1 | 启用 Ascend 的 MC2 融合优化,启用 dispatch_gmm_combine_decode 和 dispatch_ffn_combine 算子,减少预填充和解码阶段 MoE 的时间消耗。 |
| VLLM_ASCEND_ENABLE_FLASHCOMM1=1 | FlashComm_v1 通过将传统的 allreduce 集合通信分解为 reduce-scatter 和 all-gather,显著提高了大批次场景下的性能。这种分解有助于减少 RMSNorm token 维度的计算,从而实现更高效的处理。在量化场景中,FlashComm_v1 还通过减少位级数据传输来降低通信开销,从而进一步最小化预填充阶段的端到端延迟。需要注意的是,将 allreduce 通信分解为 reduce-scatter 和 all-gather 操作仅在高并发场景下有益。 |
| DYNAMIC_EPLB=“true” | 启用动态 Expert Load Balance(专家负载均衡),用于 MoE 模型。 |
| VLLM_ENGINE_READY_TIMEOUT_S=1200 | 引擎初始化超时时间 1200 秒(20 分钟)。大模型加载、编译较慢时避免启动失败。 |
| VLLM_ASCEND_BALANCE_SCHEDULING=1 | 可启用均衡调度。这有助于提高 v1 调度器的输出吞吐量并降低 TPOT。但在某些场景下 TTFT 可能会下降。此外,不建议在 PD 分离场景下启用此特性。 |
| HCCL_OP_EXPANSION_MODE=“AIV” | 代表通信算子在 Vector Core 展开,一般用于推理场景。训练场景一般推荐保持默认值 “AI_CPU”,代表通信算子在 AI CPU 展开。 |
参考文档
https://docs.vllm.ai/projects/ascend/zh-cn/main/user_guide/configuration/env_vars.html
鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。
更多推荐



所有评论(0)