Atlas 300I DUO#

在 Atlas 300I DUO 上运行 vLLM#

注意事项#

  • 当前版本在 Atlas 300I DUO 设备上支持 FULL_DECODE_ONLY 图模式,但由于硬件事件ID资源限制,存在以下限制:

    • 当启用多个张量并行(TP)rank时,可捕获的图数量受限,且取决于模型深度。例如,Qwen3-32B 可以捕获并重放 2 个图。

    • 当 TP=1 时,不存在此限制。

    • 我们已联系相关专家寻求解决方案。基于软件的修复被认为是可行的,但完全支持需要额外时间。感谢您的理解。

  • Atlas 300I DUO 不支持 tritontriton-ascend

  • 如果从源码安装,vllmvllm-ascend 会自动引入 tritontriton-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 注意力路径):

  • AscendAttentionMetadataBuilder310model_config.max_model_len 传递给 AttentionMaskBuilder310

  • AttentionMaskBuilder310 构建一个形状为 [max_model_len, max_model_len] 的完整 float16 因果掩码,然后将其转换为 FRACTAL_NZ 格式。

  • 在 310P 的 attention_v1 prefill/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 仓库。)

      注意:如果您想直接使用 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-sizeW8A8SC 量化权重与 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 以获取更新的部署指南。