华为昇腾 1 张卡 300I Duo Qwen3.6-27BQwen3-Embedding-8B 嵌入模型、Qwen3-Reranker-8B 重排序模型(GPUStack 辅助),保姆级命令及教程

昇腾 Atlas 300I Duo(单卡双 NPU)三模型混合部署保姆级教程

硬件与模型说明

  • 硬件:Atlas 300I Duo(1 张卡 = 2 颗 310P NPU,单 NPU 48GB,合计 96GB NPU 显存)
  • 模型组合(RAG 全链路):
    1. Qwen3.6-27B-Instruct 对话大模型(TP=2,双卡并行推理)
    2. Qwen3-Embedding-8B 向量嵌入模型(单 NPU 轻量实例)
    3. Qwen3-Reranker-8B 重排序模型(单 NPU 轻量实例)
  • 调度工具:GPUStack(统一纳管 NPU、多实例资源隔离、OpenAI 标准 API)
  • 推理引擎:vLLM-Ascend(原生支持 Qwen3 系列、Embedding/Reranker、昇腾图优化)
  • 版本基线(必须对齐,否则 OOM / 算子报错)
    • CANN:8.5.RC2
    • 驱动固件:HDK 25.5.1 / Firmware 7.7.0
    • vLLM-Ascend ≥0.13.0rc3(支持 Qwen3 Reranker 专用架构)
    • GPUStack ≥0.6.0(完善昇腾 NPU 资源调度)

一、底层环境前置安装(物理机操作)

1.1 用户权限配置

# 昇腾运行专属用户组

sudo groupadd HwHiAiUser

sudo useradd -g HwHiAiUser -m HwHiAiUser -s /bin/bash

# 当前用户加入NPU权限组

sudo usermod -aG HwHiAiUser $USER

# 生效权限

newgrp HwHiAiUser

1.2 驱动 + 固件安装(Atlas300I Duo 专用)

  1. 昇腾官网下载对应系统包(x86_64/aarch64 二选一)
    • Ascend-hdk-310p-npu-driver_25.5.1_linux-x86_64.run
    • Ascend-hdk-310p-npu-firmware_7.7.0.x.run
  2. 赋予执行权限

chmod +x *.run

# 首次安装:先驱动,后固件

sudo ./Ascend-hdk-310p-npu-driver_25.5.1_linux-x86_64.run --full

sudo ./Ascend-hdk-310p-npu-firmware_7.7.0.x.run --full

# 重启生效

sudo reboot

  1. 验证 NPU 识别(必须输出 2 块 310P)

bash

npu-smi info

# 输出应显示 NPU0、NPU1,Memory 48768MB/颗

1.3 CANN 工具包安装

# 解压CANN 8.5.RC2包

unzip Ascend-cann-toolkit_8.5.RC2_linux-x86_64.zip

chmod +x Ascend-cann-toolkit_8.5.RC2_linux-x86_64.run

sudo ./Ascend-cann-toolkit_8.5.RC2_linux-x86_64.run --install

# 写入环境变量(永久生效)

echo "source /usr/local/Ascend/ascend-toolkit/latest/set_env.sh" >> ~/.bashrc

source ~/.bashrc

1.4 昇腾 Docker Runtime(GPUStack 依赖)

# 安装ascend-docker-runtime

sudo apt install -y ascend-docker-runtime

# 配置docker默认runtime为ascend

sudo vi /etc/docker/daemon.json

# 写入内容

{

  "runtimes": {

    "ascend": {

      "path": "/usr/bin/npu-docker-runtime",

      "runtimeArgs": []

    }

  },

  "default-runtime": "ascend"

}

# 重启docker

sudo systemctl restart docker

# 校验

docker info | grep ascend

二、GPUStack 单机部署(Server+Worker 一体化)

2.1 Docker 一键启动 GPUStack 服务

# 创建模型存储目录(离线模型存放路径)

sudo mkdir -p /data/models && sudo chmod 777 /data/models

# 启动GPUStack容器(完整NPU设备挂载,关键参数不可省略)

docker run -d \

  --name gpustack \

  --restart unless-stopped \

  --privileged \

  --ipc=host \

  --device /dev/davinci0 \

  --device /dev/davinci1 \

  --device /dev/davinci_manager \

  --device /dev/devmm_svm \

  --device /dev/hisi_hdc \

  -v /usr/local/Ascend:/usr/local/Ascend:ro \

  -v /usr/local/dcmi:/usr/local/dcmi:ro \

  -v /var/log/npu:/var/log/npu \

  -v /data/models:/data/models \

  -v /var/lib/gpustack:/var/lib/gpustack \

  -p 80:80 \

  gpustack/gpustack:latest-ascend

2.2 登录 GPUStack 控制台

  1. 浏览器访问 http://服务器IP
  2. 初始密码查看:

docker exec gpustack cat /var/lib/gpustack/token

  1. 登录后进入【资源】页面,确认识别到 2 颗 310P NPU(96GB 总显存)

三、模型下载(两种方式,推荐 ModelScope 国内加速)

方式 1:容器内在线拉取(GPUStack 自动下载)

环境变量开启 ModelScope 加速(部署时填入环境变量)

VLLM_USE_MODELSCOPE=true

模型 ID:

  • Qwen/Qwen3.6-27B-Instruct
  • Qwen/Qwen3-Embedding-8B
  • Qwen/Qwen3-Reranker-8B

方式 2:离线下载至 /data/models(无外网环境)

# 安装modelscope

pip install modelscope

# 下载27B对话模型

modelscope download --model Qwen/Qwen3.6-27B-Instruct --local-dir /data/models/Qwen3.6-27B-Instruct

# 嵌入模型

modelscope download --model Qwen/Qwen3-Embedding-8B --local-dir /data/models/Qwen3-Embedding-8B

# 重排模型

modelscope download --model Qwen/Qwen3-Reranker-8B --local-dir /data/models/Qwen3-Reranker-8B

四、GPUStack 三模型部署配置(保姆级参数 + 完整启动命令)

核心资源规划(300I Duo 96GB 显存最优分配)

  1. Qwen3.6-27B-Instruct:TP=2(占用 NPU0+NPU1,bfloat16 约 72GB)
  2. Qwen3-Embedding-8B:DP=1,独占 NPU0 分片剩余显存(8GB)
  3. Qwen3-Reranker-8B:DP=1,独占 NPU1 分片剩余显存(8GB)

总显存占用≈88GB,预留 8GB 缓冲,无 OOM 风险

4.1 模型 1:Qwen3.6-27B-Instruct 部署参数

Web 界面填写

  1. 模型名称:qwen3.6-27b
  2. 模型路径:/data/models/Qwen3.6-27B-Instruct(离线)/ Qwen/Qwen3.6-27B-Instruct(在线)
  3. 推理后端:vllm-ascend
  4. 实例数量:1
  5. 分配 NPU:0,1

环境变量(复制全部填入)

PYTORCH_NPU_ALLOC_CONF=expandable_segments:True

HCCL_OP_EXPANSION_MODE=AIV

HCCL_BUFFSIZE=1024

OMP_NUM_THREADS=1

TASK_QUEUE_ENABLE=1

VLLM_USE_MODELSCOPE=true

ASCEND_RT_VISIBLE_DEVICES=0,1

后端启动参数(完整复制,单行)

--served-model-name qwen3.6-27b

--tensor-parallel-size 2

--data-parallel-size 1

--max-model-len 32768

--gpu-memory-utilization 0.75

--dtype bfloat16

--trust-remote-code

--enable-npu-graph 1

--max-num-batched-tokens 24576

--max-num-seqs 64

--enforce-eager

4.2 模型 2:Qwen3-Embedding-8B 向量嵌入部署

Web 界面填写

  1. 模型名称:qwen3-embedding-8b
  2. 模型路径:/data/models/Qwen3-Embedding-8B
  3. 推理后端:vllm-ascend
  4. 实例数量:1
  5. 分配 NPU:0

环境变量

PYTORCH_NPU_ALLOC_CONF=expandable_segments:True

OMP_NUM_THREADS=1

ASCEND_RT_VISIBLE_DEVICES=0

VLLM_USE_MODELSCOPE=true

后端启动参数(Embedding 专用)

--served-model-name qwen3-embedding-8b

--tensor-parallel-size 1

--data-parallel-size 1

--max-model-len 32768

--gpu-memory-utilization 0.2

--dtype bfloat16

--trust-remote-code

--enable-npu-graph 1

--task embed

4.3 模型 3:Qwen3-Reranker-8B 重排序部署(关键特殊参数)

Web 界面填写

  1. 模型名称:qwen3-reranker-8b
  2. 模型路径:/data/models/Qwen3-Reranker-8B
  3. 推理后端:vllm-ascend
  4. 实例数量:1
  5. 分配 NPU:1

环境变量

PYTORCH_NPU_ALLOC_CONF=expandable_segments:True

OMP_NUM_THREADS=1

ASCEND_RT_VISIBLE_DEVICES=1

VLLM_USE_MODELSCOPE=true

后端启动参数(Reranker 必须加 hf_overrides 适配)

--served-model-name qwen3-reranker-8b

--tensor-parallel-size 1

--data-parallel-size 1

--max-model-len 32768

--gpu-memory-utilization 0.2

--dtype bfloat16

--trust-remote-code

--enable-npu-graph 1

--task score

--hf_overrides {"architectures":["Qwen3ForSequenceClassification"],"is_original_qwen3_reranker":true}

4.4 部署操作步骤

  1. GPUStack 左侧【模型】→【部署模型】,依次创建 3 个模型实例
  2. 全部参数复制粘贴,核对 NPU 分配(27B 占 0,1;Embedding 占 0;Reranker 占 1)
  3. 点击【保存并部署】,等待模型下载 / 权重加载(27B 首次加载约 15-30 分钟)
  4. 查看【实例】页面,三个实例状态全部为「运行中」即部署成功

五、本地裸机 vLLM-Ascend 独立启动命令(不使用 GPUStack 备选方案)

5.1 环境变量统一加载

source /usr/local/Ascend/ascend-toolkit/latest/set_env.sh

export PYTORCH_NPU_ALLOC_CONF="expandable_segments:True"

export HCCL_OP_EXPANSION_MODE="AIV"

export HCCL_BUFFSIZE=1024

export OMP_NUM_THREADS=1

export TASK_QUEUE_ENABLE=1

export VLLM_USE_MODELSCOPE=true

5.2 终端 1:Qwen3.6-27B(双卡 TP,端口 8000)

ASCEND_RT_VISIBLE_DEVICES=0,1 vllm serve /data/models/Qwen3.6-27B-Instruct \

--served-model-name qwen3.6-27b \

--host 0.0.0.0 \

--port 8000 \

--tensor-parallel-size 2 \

--data-parallel-size 1 \

--max-model-len 32768 \

--gpu-memory-utilization 0.75 \

--dtype bfloat16 \

--trust-remote-code \

--enable-npu-graph 1 \

--max-num-batched-tokens 24576 \

--max-num-seqs 64 \

--enforce-eager

5.3 终端 2:Embedding-8B(NPU0,端口 8001)

ASCEND_RT_VISIBLE_DEVICES=0 vllm serve /data/models/Qwen3-Embedding-8B \

--served-model-name qwen3-embedding-8b \

--host 0.0.0.0 \

--port 8001 \

--tensor-parallel-size 1 \

--gpu-memory-utilization 0.2 \

--task embed \

--trust-remote-code

5.4 终端 3:Reranker-8B(NPU1,端口 8002)

ASCEND_RT_VISIBLE_DEVICES=1 vllm serve /data/models/Qwen3-Reranker-8B \

--served-model-name qwen3-reranker-8b \

--host 0.0.0.0 \

--port 8002 \

--tensor-parallel-size 1 \

--gpu-memory-utilization 0.2 \

--task score \

--trust-remote-code \

--hf_overrides '{"architectures":["Qwen3ForSequenceClassification"],"is_original_qwen3_reranker":true}'

六、API 调用测试(OpenAI 标准格式)

6.1 对话模型 /v1/chat/completions

curl http://127.0.0.1:80/v1/chat/completions \

-H "Content-Type: application/json" \

-d '{

  "model": "qwen3.6-27b",

  "messages": [{"role":"user","content":"介绍RAG检索增强生成"}]

}'

6.2 向量嵌入 /v1/embeddings

curl http://127.0.0.1:80/v1/embeddings \

-H "Content-Type: application/json" \

-d '{

  "model": "qwen3-embedding-8b",

  "input": "昇腾300I Duo大模型推理"

}'

6.3 重排序打分 /v1/score

curl http://127.0.0.1:80/v1/score \

-H "Content-Type: application/json" \

-d '{

  "model": "qwen3-reranker-8b",

  "query": "昇腾部署Qwen3教程",

  "documents": ["300I Duo部署Qwen3.6-27B","英伟达A100训练LLaMA"]

}'

七、常见踩坑解决方案

1. 模型加载 OOM(显存溢出)

  • 降低 27B 的gpu-memory-utilization至 0.7;
  • 关闭--enable-npu-graph(图编译占用额外显存);
  • 27B 必须 TP=2,禁止单 NPU 加载 27B。

2. Reranker 模型报错权重不匹配

  • 必须添加--hf_overrides参数,vLLM-Ascend 原生不自动识别 Qwen3-Reranker 架构;
  • 模型权重完整,无缺失 bin 分片。

3. GPUStack 无法识别 NPU

  • 容器启动必须带--ipc=host,昇腾双卡通信依赖共享内存;
  • 确认宿主机 docker runtime 为 ascend;
  • 执行npu-smi info验证宿主机 NPU 正常。

4. HCCL 通信失败(27B 双卡并行报错)

  • 环境变量HCCL_OP_EXPANSION_MODE=AIV必须配置;
  • 关闭防火墙,PCIe 互通无隔离;
  • 重启 GPUStack 容器重新加载。

5. Embedding 无向量输出

  • 启动参数添加--task embed,vLLM 默认 LLM 模式,不会输出向量;
  • 模型路径正确,使用 Embedding 专用权重,不要用基础 Qwen3。

八、运维监控命令

1. 宿主机 NPU 实时显存 / 负载监控

npu-smi info -t memory -i 0

npu-smi info -t memory -i 1

watch -n1 npu-smi info

2. GPUStack 查看实例日志

# 查看全部实例

docker exec -it gpustack gpustack-cli list-instances

# 查看单实例实时日志

docker exec -it gpustack gpustack-cli logs <实例ID> -f

3. 停止 / 重启单个模型实例

docker exec -it gpustack gpustack-cli stop-instance <实例ID>

docker exec -it gpustack gpustack-cli start-instance <实例ID>

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐