Atlas 300I DUO#
在 Atlas 300I DUO 上运行 vLLM#
注意事项#
当前版本在 Atlas 300I DUO 设备上支持
FULL_DECODE_ONLY图模式,但由于硬件事件ID资源限制,存在以下限制:当启用多个张量并行(TP)rank时,可捕获的图数量受限,且取决于模型深度。例如,Qwen3-32B 可以捕获并重放 2 个图。
当 TP=1 时,不存在此限制。
我们已联系相关专家寻求解决方案。基于软件的修复被认为是可行的,但完全支持需要额外时间。感谢您的理解。
Atlas 300I DUO 不支持
triton或triton-ascend。如果从源码安装,
vllm和vllm-ascend会自动引入triton和triton-ascend依赖,这可能在 Atlas 300I DUO 上导致意外问题。请运行:
pip uninstall -y triton triton-ascend
# If you still encounter errors mentioning triton, manually remove the remaining triton directory in site-packages,
# as uninstalling triton may leave residual files behind.
# For example: rm -rf /usr/local/python3.11.10/lib/python3.11/site-packages/triton
部署#
警告
对于 Atlas 300I DUO (310P),不要依赖 max-model-len 的自动检测(即不要省略 --max-model-len 参数),否则可能发生 OOM。
原因(当前 310P 注意力路径):
AscendAttentionMetadataBuilder310将model_config.max_model_len传递给AttentionMaskBuilder310。AttentionMaskBuilder310构建一个形状为[max_model_len, max_model_len]的完整 float16 因果掩码,然后将其转换为 FRACTAL_NZ 格式。在 310P 的
attention_v1prefill/chunked-prefill 路径(_npu_flash_attention/_npu_paged_attention_splitfuse)中,这个显式的掩码张量被直接使用,目前没有压缩掩码路径。
如果自动解析到一个很大的上下文长度,分配这个掩码(O(max_model_len^2))可能会超出 NPU 内存并触发 OOM。请确保设置一个显式且保守的值,例如 --max-model-len 16384。
运行 Docker 容器:
# Use the vllm-ascend image
export IMAGE=quay.io/ascend/vllm-ascend:v0.18.0-310p
docker run --rm \
--name vllm-ascend \
--shm-size=10g \
--device /dev/davinci0 \
--device /dev/davinci1 \
--device /dev/davinci2 \
--device /dev/davinci3 \
--device /dev/davinci4 \
--device /dev/davinci5 \
--device /dev/davinci6 \
--device /dev/davinci7 \
--device /dev/davinci_manager \
--device /dev/devmm_svm \
--device /dev/hisi_hdc \
-v /usr/local/dcmi:/usr/local/dcmi \
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
-v /usr/local/Ascend/driver/lib64/:/usr/local/Ascend/driver/lib64/ \
-v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info \
-v /etc/ascend_install.info:/etc/ascend_install.info \
-v /root/.cache:/root/.cache \
-p 8000:8000 \
-it $IMAGE bash
注意#
高性能基于最新的 CANN 社区版和新的 PTA 版本实现。因此,您需要手动将 CANN 版本替换为 CANN 9.0.0 和 torch_npu。以下以 Ubuntu 为例介绍如何安装 CANN。详细信息请参见以下步骤:Procedure 安装新的 PTA 版本。pip install torch_npu==2.9.0.post2 此步骤将在 v0.18.0.post 及更高版本中得到支持。支持后您可以忽略此步骤。
运行以下步骤在 NPU 上为 Qwen3 Dense 系列启动 vLLM 服务:
准备环境
获取模型权重(
W8A8SC权重稍后将上传到 Eco-Tech 官方 ModelScope 仓库。)本指南需要 Qwen3 Dense
8B/14B/32B模型的W8A8SC量化权重。您需要自行生成 SC 压缩权重。首先,准备
W8A8S权重:Qwen3-8B-w8a8s-310:https://modelers.cn/models/Eco-Tech/Qwen3-8B-w8a8s-310
Qwen3-14B-w8a8s-310:https://modelers.cn/models/Eco-Tech/Qwen3-14B-w8a8s-310
Qwen3-32B-w8a8s-310:https://modelers.cn/models/Eco-Tech/Qwen3-32B-w8a8s-310
注意:如果您想直接使用
w8a8s权重而不是w8a8sc权重进行验证,以下示例显示了Qwen3-8B-w8a8s-310的服务命令。性能略低于使用压缩的w8a8sc权重。详细的w8a8sc测试将在后续章节中介绍。vllm serve Eco-Tech/Qwen3-8B-w8a8s-310 --host 127.0.0.1 --port 8080 \ --tensor-parallel-size 1 --gpu_memory_utilization 0.90 \ --served_model_name qwen --dtype float16 \ --additional-config '{"ascend_compilation_config": {"fuse_norm_quant": false}}' \ --compilation-config '{"cudagraph_mode": "FULL_DECODE_ONLY", "cudagraph_capture_sizes": [1,2,4,8,16,32]}' \ --quantization ascend --max-model-len 16384 # `--load_format` is required only for the W8A8SC quantized weight format. #
压缩权重
卸载 triton(310P 上不支持):
pip uninstall triton pip uninstall triton-ascend
获取压缩脚本:
安装压缩工具
压缩命令
export PYTORCH_NPU_ALLOC_CONF=max_split_size_mb:256 export LD_LIBRARY_PATH=/usr/local/python3.11.10/lib/:$LD_LIBRARY_PATH python save_sharded_state_310.py \ --model /your-load-path/w8a8s-weight \ --tensor-parallel-size 1 \ --output /your-save-path/w8a8sc-weight \ --enable-compress \ --compress-process-num 4 \ --enforce-eager \ --dtype float16 \ --quantization ascend \ --max-model-len 10240
参数说明:
--tensor-parallel-size:W8A8SC量化权重与 TP 大小紧密耦合,因此在运行压缩时必须指定计划在服务时使用的 TP 大小。--model是输入w8a8s权重的路径,--output是压缩后w8a8sc权重的输出路径。补充说明
Qwen3-8B 模型参数较少,因此某些层在量化过程中需要回退处理。建议在可用时直接从 Eco-Tech 官方 ModelScope 仓库下载
qwen3-8B-w8a8sc权重。
示例
Qwen3-8B-w8a8sc 示例
vllm serve /your-save-path/Qwen3-8B-w8a8sc-310-vllm/TP1/Qwen3-8B-w8a8sc-310-vllm-tp1/ \ --host 127.0.0.1 \ --port 8080 \ --tensor-parallel-size 1 \ --gpu_memory_utilization 0.90 \ --max_num_seqs 32 \ --served_model_name qwen \ --dtype float16 \ --additional-config '{"ascend_compilation_config": {"fuse_norm_quant": false}}' \ --compilation-config '{"cudagraph_mode": "FULL_DECODE_ONLY", "cudagraph_capture_sizes": [1,2,4,8,16,32]}' \ --quantization ascend \ --max-model-len 16384 \ --no-enable-prefix-caching \ --load_format="sharded_state"
Qwen3-14B-w8a8sc 示例
vllm serve /your-save-path/Qwen3-14B-w8a8sc-310-vllm/TP1/Qwen3-14B-w8a8sc-310-vllm-tp1/ \ --host 127.0.0.1 \ --port 8080 \ --tensor-parallel-size 1 \ --gpu_memory_utilization 0.90 \ --max_num_seqs 16 \ --served_model_name qwen \ --dtype float16 \ --additional-config '{"ascend_compilation_config": {"fuse_norm_quant": false}}' \ --compilation-config '{"cudagraph_mode": "FULL_DECODE_ONLY", "cudagraph_capture_sizes": [1,2,4,8,16]}' \ --quantization ascend \ --max-model-len 16384 \ --no-enable-prefix-caching \ --load_format="sharded_state"
Qwen3-32B-w8a8sc 示例
export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3 vllm serve /save-path/Qwen3-32B-w8a8sc-310-vllm/TP4/Qwen3-32B-w8a8sc-310-vllm-tp4/ \ --host 127.0.0.1 \ --port 8080 \ --tensor-parallel-size 4 \ --gpu_memory_utilization 0.90 \ --max_num_seqs 32 \ --served_model_name qwen \ --dtype float16 \ --additional-config '{"ascend_compilation_config": {"fuse_norm_quant": false}}' \ --compilation-config '{"cudagraph_mode": "FULL_DECODE_ONLY", "cudagraph_capture_sizes": [16,32]}' \ --quantization ascend \ --max-model-len 20480 \ --no-enable-prefix-caching \ --load_format="sharded_state"
结束语
如需抢先体验 Qwen3-MoE、Qwen3-VL,以及 Qwen3.5 和 Qwen3.6 的性能加速预览支持,请关注 #7394 以获取更新的部署指南。