华为昇腾 NPU 部署 Qwen3.5 + SGLang 实战指南

面向希望在昇腾 910B/8.5.0 环境快速落地 Qwen3.5 推理服务的同学,结合官方示例与实测脚本,给出可直接复用的 Docker Compose 与启动参数说明。全文按「环境准备 → 拉起服务 → 验证 → 调优与排障」路径展开。

一、项目结构与核心文件

  • docker-compose.yml:定义容器镜像、挂载、设备映射与启动脚本入口。服务暴露 8000 端口,可对外提供推理 API。@ascend_qwen3.5/docker-compose.yml#1-28
  • start.sh:容器内启动脚本,设置 CPU 性能模式、Ascend 环境变量,并以 SGLang 启动 Qwen3.5 推理服务。@ascend_qwen3.5/start.sh#1-43
  • 参考链接.txt:官方 Ascend NPU + Qwen3.5 示例文档入口,便于对照版本与更多参数。@ascend_qwen3.5/参考链接.txt#1-1

二、环境前置

  1. 确保宿主机已安装 Ascend 910B 驱动与 CANN 8.5.0,对应目录 /usr/local/Ascend/driver 存在,并具备 npu-smihccn_tool。@ascend_qwen3.5/docker-compose.yml#13-25
  2. 模型权重与脚本目录挂载到宿主 /iflytek/models,容器内使用 /root/models 路径。@ascend_qwen3.5/docker-compose.yml#19-19
  3. 端口 8000 对外暴露,可按需在 Compose 中调整。

三、Docker Compose 说明

核心配置摘录:

services:
  sglang:
    image: lmsysorg/sglang:v0.5.9-cann8.5.0-910b
    entrypoint: ["/root/models/Qwen3.5-35B-A3B/start.sh"]
    ports:
      - "0.0.0.0:8000:8000"
    volumes:
      - /usr/local/bin/npu-smi:/usr/local/bin/npu-smi
      - /usr/local/dcmi:/usr/local/dcmi
      - /usr/local/Ascend/driver/tools/hccn_tool:/usr/local/Ascend/driver/tools/hccn_tool
      - /usr/local/Ascend/driver/lib64/:/usr/local/Ascend/driver/lib64/
      - /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info
      - /iflytek/models:/root/models
    devices:
      - /dev/davinci0
      - /dev/davinci1
      - /dev/davinci2
      - /dev/davinci3
      - /dev/davinci_manager
      - /dev/devmm_svm
      - /dev/hisi_hdc

要点:

  • 镜像已内置 SGLang + Ascend 8.5.0 适配,无需额外构建。@ascend_qwen3.5/docker-compose.yml#5-5
  • entrypoint 定位到挂载目录内的 start.sh,保证参数可自定义。@ascend_qwen3.5/docker-compose.yml#9-9
  • 映射多张 NPU 设备,便于张量并行;如资源更少,可缩减设备列表。@ascend_qwen3.5/docker-compose.yml#21-27

四、启动脚本解读

start.sh 关键步骤:

# CPU & NUMA 调优
echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
sysctl -w vm.swappiness=0
sysctl -w kernel.numa_balancing=0
sysctl -w kernel.sched_migration_cost_ns=50000
export SGLANG_SET_CPU_AFFINITY=1

# 清理代理、设置 Ascend 环境
unset https_proxy http_proxy HTTPS_PROXY HTTP_PROXY ASCEND_LAUNCH_BLOCKING
source /usr/local/Ascend/ascend-toolkit/set_env.sh
source /usr/local/Ascend/nnal/atb/set_env.sh

# 通信/性能参数
export STREAMS_PER_DEVICE=32
export HCCL_BUFFSIZE=1000
export HCCL_OP_EXPANSION_MODE=AIV
export HCCL_SOCKET_IFNAME=lo
export GLOO_SOCKET_IFNAME=lo

# 启动 SGLang 服务器
python3 -m sglang.launch_server \
  --model-path Qwen3.5-35B-A3B/V1 \
  --served-model-name qwen3.5 \
  --attention-backend ascend \
  --device npu \
  --tp-size 2 --nnodes 1 --node-rank 0 \
  --chunked-prefill-size 4096 --max-prefill-tokens 280000 \
  --disable-radix-cache \
  --trust-remote-code \
  --host 0.0.0.0 \
  --mem-fraction-static 0.7 \
  --port 8000 \
  --cuda-graph-bs 16 \
  --enable-multimodal \
  --mm-attention-backend ascend_attn \
  --reasoning-parser qwen3 \
  --tool-call-parser qwen3_coder

解读:

  • CPU 固定性能模式,降低 NUMA 干扰,开启 CPU 亲和性,利于大模型多线程。@ascend_qwen3.5/start.sh#1-9
  • 加载 Ascend Toolkit/ATB 环境,确保 NPU 算子可用。@ascend_qwen3.5/start.sh#15-18
  • 通信参数(STREAMS、HCCL/GLOO)优化多卡并发与回环网卡通信。@ascend_qwen3.5/start.sh#19-23
  • --tp-size 2 采用 2 卡张量并行,可按硬件调整;--max-prefill-tokens 280000 提升长文本预填充长度;--enable-multimodal 开启多模态能力。@ascend_qwen3.5/start.sh#27-43

五、部署步骤(宿主机)

  1. 放置模型与脚本
    • Qwen3.5-35B-A3B 目录与本文 docker-compose.ymlstart.sh 放入 /iflytek/models(或按需修改 Compose 与脚本路径)。
  2. 启动
    docker compose -f docker-compose.yml up -d
    
  3. 查看日志
    docker logs -f sglang
    
  4. 验证接口(示例 JSON):
    curl -X POST "http://<host>:8000/v1/chat/completions" \
      -H "Content-Type: application/json" \
      -d '{
        "model": "qwen3.5",
        "messages": [
          {"role": "user", "content": "给我一个昇腾部署 Qwen3.5 的测试句子"}
        ]
      }'
    

六、性能与稳定性建议

  • 并行度:根据 NPU 数调整 --tp-size,单机多卡时保持 --nnodes 1,跨机需结合 HCCL 配置扩展 --nnodes/--node-rank
  • 内存水位--mem-fraction-static 控制显存静态分配比例,默认 0.7,可在显存紧张时适当降低。
  • prefill 长度--max-prefill-tokens 影响长文本性能,业务场景短文本可适度下调以减少首次延迟。
  • 多模态:已开启 --enable-multimodal--mm-attention-backend ascend_attn,如纯文本可关闭以降低开销。
  • CPU 亲和SGLANG_SET_CPU_AFFINITY=1 有助于线程绑核,若容器共享算力,可取消以减少干扰。

七、常见问题排查

现象 排查方向
容器启动失败,提示设备不可用 检查 /dev/davinci* 是否存在并已映射;驱动版本与 CANN 是否匹配
推理报错找不到算子 确认已 source ascend-toolkit/atb,或更新镜像至匹配版本
性能不达预期 调整 STREAMS_PER_DEVICE--tp-size,观察 npu-smi 占用;检查 NUMA/亲和性设置
长文本 OOM 下调 --max-prefill-tokens--mem-fraction-static,并观察日志

八、参考

  • 官方文档:https://docs.sglang.io/platforms/ascend_npu_qwen3_5_examples.html @ascend_qwen3.5/参考链接.txt#1-1

以上配置可直接在昇腾 910B + CANN 8.5.0 环境拉起 Qwen3.5 服务,若有多机多卡需求,可基于现有 HCCL 映射与 SGLang 启动参数做横向扩展。

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐