昇腾910B部署DeepSeek-Qwen32B大模型

在国产AI基础设施加速落地的今天,如何高效部署千亿参数级大模型已成为企业构建自主可控智能系统的关键挑战。尤其是在信创环境下,既要保证性能接近国际主流水平,又要实现软硬件深度协同优化——这正是昇腾910B与vLLM结合所要解决的核心问题。

本文将带你完整走通一条基于华为昇腾910B NPU卡、使用vLLM推理引擎部署DeepSeek-Qwen-32B大模型的技术路径。整个过程不依赖X86架构或英伟达GPU,完全运行于鲲鹏+昇腾的纯国产化技术栈之上,适用于对高并发、低延迟有严苛要求的企业级生产场景。

⚠️ 重要前提:
- 系统已正确安装昇腾910B驱动及固件,并可通过 npu-smi info 查看四张NPU卡状态。
- 至少配备 4张昇腾910B(单卡32GB显存),总计约128GB可用显存,满足32B模型加载需求。
- 操作环境为具备外网访问能力的ARM64服务器(推荐鲲鹏920平台 + OpenEuler 22.03 LTS)。


环境准备:从底层支撑到工具链齐备

部署前必须确认基础环境就绪。以下是我们实际使用的软硬件配置清单:

组件版本/型号
Docker版本24.0.9
算力卡昇腾910B ×4
CPU型号鲲鹏920
架构ARM64 (aarch64)
操作系统EulerOS 2.0 / OpenEuler 22.03 LTS

首先验证NPU设备是否正常识别:

npu-smi info

预期输出中应包含ID为0~3的四块NPU设备信息,且状态均为“Normal”。若未显示,请检查驱动安装和固件版本一致性。

同时确保 docker 已安装并可正常运行:

docker version

只有当主机层面的算力资源和容器运行时都准备妥当,才能进入下一步——拉取专为Ascend平台优化的高性能推理镜像。


获取vLLM Ascend优化镜像:让大模型真正“跑得快”

传统HuggingFace Transformers推理方式在处理长上下文和高并发请求时存在明显瓶颈。而vLLM通过引入 PagedAttention 技术,实现了KV Cache的分页管理与动态内存分配,显著提升了吞吐效率。据实测数据,在相同硬件条件下,其吞吐量可达原生方案的 5–10倍

为了在昇腾平台上发挥这一优势,我们需要使用由社区维护的 vLLM-Ascend专用镜像,它内置了对Ascend CANN栈的支持,以及针对DaVinci架构的算子融合与内存调度优化。

镜像地址:https://quay.io/repository/ascend/vllm-ascend
GitHub项目:https://github.com/vllm-project/vllm-ascend

由于目标平台是ARM64架构,务必指定平台参数进行拉取:

docker pull --platform=arm64 quay.io/ascend/vllm-ascend:v0.11.0rc0

拉取完成后记录镜像ID:

docker images | grep vllm-ascend

假设返回结果如下:

REPOSITORY               TAG                     IMAGE ID       CREATED        SIZE
quay.io/ascend/vllm-ascend v0.11.0rc0             f3e585186118   2 weeks ago    8.7GB

我们将以 f3e585186118 作为后续启动容器的基础镜像ID。


安装Ascend Docker Runtime:打通容器与NPU的“最后一公里”

标准Docker默认无法直接访问昇腾NPU设备。为此,华为提供了 Ascend Docker Runtime 插件,用于注册自定义运行时(runtime),使容器能够挂载 /dev/davinci* 等核心设备节点,并调用底层驱动库。

下载安装包:

👉 Ascend-docker-runtime_6.0.0.SPC1_linux-aarch64.run

执行安装:

chmod +x Ascend-docker-runtime_6.0.0.SPC1_linux-aarch64.run
sudo ./Ascend-docker-runtime_6.0.0.SPC1_linux-aarch64.run

安装成功后会自动注册 ascend-cl 运行时至Docker。接着重启服务以生效配置:

sudo systemctl restart docker

此时可通过以下命令验证运行时是否存在:

docker info | grep -A 5 "Runtimes"

若输出中包含 ascend-cl,说明环境已具备调用NPU的能力。


下载并组织模型权重:让数据“找得到、读得进”

DeepSeek-Qwen-32B 是深度求索发布的开源中文大模型,兼容Qwen系列指令格式,在多项中文任务上表现优异。该模型可在魔搭(ModelScope)平台免费获取。

📌 模型主页:https://www.modelscope.cn/models/deepseek-ai/DeepSeek-Qwen-32B/files

建议将模型完整目录下载至统一存储路径,例如:

/data/models/DeepSeek-Qwen-32B/

关键文件包括:

  • config.json
  • pytorch_model*.bin(多个分片)
  • tokenizer.model
  • generation_config.json

这些文件将在容器启动时通过 -v 参数挂载进 /app/model 目录,供vLLM加载使用。注意保持原始结构不变,避免因路径错乱导致加载失败。


启动模型服务:两种方式,一个目标

我们提供两种启动方式:docker run 命令直启 和 docker-compose 编排启动。虽然前者适合快速验证,但后者更利于长期运维与故障恢复。

方式一:使用 docker run 手动启动(适合调试)

完整命令如下:

docker run --name deepseek-qwen32b-vllm \
--net=host \
--shm-size=500g \
--device /dev/davinci0 \
--device /dev/davinci1 \
--device /dev/davinci2 \
--device /dev/davinci3 \
--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 \
-v /data/models/DeepSeek-Qwen-32B:/app/model \
--privileged=true \
-e ASCEND_RT_VISIBLE_DEVICES=0,1,2,3 \
-p 18489:18489 \
-itd f3e585186118 bash
关键参数解析
参数作用说明
--net=host使用主机网络模式,减少网络层开销,提升通信效率
--shm-size=500g设置共享内存大小,防止长序列推理时因共享内存不足导致OOM
--device /dev/davinci*将NPU设备直通给容器,实现硬件级加速
-v ... driver/lib64挂载驱动库和版本信息,确保容器内环境一致
-v /data/models/...:/app/model模型权重挂载点,vLLM默认从此路径加载模型
--privileged=true开启特权模式,允许容器操作底层设备
-e ASCEND_RT_VISIBLE_DEVICES=0,1,2,3指定可见NPU编号,用于多卡调度
-p 18489:18489映射API端口,对外提供OpenAI兼容接口

容器启动后进入内部并手动运行服务:

docker exec -it deepseek-qwen32b-vllm bash

# 启动vLLM服务
vllm serve /app/model \
  --port 18489 \
  --dtype auto \
  --kv-cache-dtype auto \
  --max-model-len 65536 \
  --tensor-parallel-size 4 \
  --gpu-memory-utilization 0.90 \
  --enable-prefix-caching

这种方式便于观察日志、调试参数,但在生产环境中缺乏自愈能力。


方式二:使用 docker-compose 启动(推荐用于生产)

创建 docker-compose.yaml 文件,内容如下:

version: '3.8'
services:
  deepseek-qwen32b:
    container_name: deepseek-qwen32b-vllm
    image: f3e585186118
    network_mode: host
    shm_size: 500g
    devices:
      - /dev/davinci0:/dev/davinci0
      - /dev/davinci1:/dev/davinci1
      - /dev/davinci2:/dev/davinci2
      - /dev/davinci3:/dev/davinci3
      - /dev/davinci_manager:/dev/davinci_manager
      - /dev/devmm_svm:/dev/devmm_svm
      - /dev/hisi_hdc:/dev/hisi_hdc
    volumes:
      - /usr/local/dcmi:/usr/local/dcmi
      - /usr/local/bin/npu-smi:/usr/local/bin/npu-smi
      - /usr/local/Ascend/driver/lib64/:/usr/local/Ascend/driver/lib64/
      - /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info
      - /etc/ascend_install.info:/etc/ascend_install.info
      - /root/.cache:/root/.cache
      - /data/models/DeepSeek-Qwen-32B:/app/model
    privileged: true
    environment:
      - ASCEND_RT_VISIBLE_DEVICES=0,1,2,3
    ports:
      - "18489:18489"
    restart: unless-stopped
    command: >
      vllm serve /app/model
      --port 18489
      --dtype auto
      --kv-cache-dtype auto
      --max-model-len 65536
      --tensor-parallel-size 4
      --gpu-memory-utilization 0.90
      --enable-prefix-caching
      --uvicorn-log-level warning
核心配置说明
  • --tensor-parallel-size=4:启用4卡张量并行,将模型权重切分到每张NPU上并行计算,最大化利用算力。
  • --max-model-len=65536:支持最长64K token输入,适用于法律文书分析、代码生成等长文本场景。
  • --gpu-memory-utilization=0.90:控制显存利用率至90%,留出缓冲空间防溢出,兼顾性能与稳定性。
  • --enable-prefix-caching:开启公共前缀缓存,对于相同system prompt的批量请求,避免重复编码,显著提升吞吐。
  • --uvicorn-log-level warning:降低日志输出级别,减少无关信息干扰,便于监控关键事件。

部署命令:

docker-compose up -d

查看启动日志:

docker logs -f deepseek-qwen32b-vllm

当看到如下输出时,表示服务已就绪:

INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:18489

此时模型已完成加载,可以接受外部请求。


验证服务可用性:一次真实的对话测试

等待2–5分钟完成模型加载后,即可发起测试请求。由于vLLM兼容OpenAI API协议,我们可以直接使用 curl 发起标准调用:

curl http://127.0.0.1:18489/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "DeepSeek-Qwen-32B",
    "messages": [
      {"role": "user", "content": "你好,请介绍一下你自己"}
    ],
    "temperature": 0.7,
    "max_tokens": 512
  }'

预期响应示例

{
  "id": "chat-xxx",
  "object": "chat.completion",
  "created": 1712345678,
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "我是DeepSeek-Qwen-32B,一个由深度求索开发的大规模语言模型……"
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 15,
    "completion_tokens": 128,
    "total_tokens": 143
  }
}

只要返回结构化的JSON响应且无错误码(如500、404等),即可判定模型服务部署成功。此时你已经拥有了一个稳定运行在国产化平台上的高性能大模型推理节点。


这套基于 昇腾910B + vLLM + DeepSeek-Qwen-32B 的部署方案,不仅摆脱了对外部生态的依赖,还通过PagedAttention、连续批处理、动态内存管理等先进技术,实现了媲美甚至超越国际主流方案的推理效率。更重要的是,它完全兼容OpenAI API接口,意味着现有应用无需修改即可平滑迁移。

未来还可在此基础上进一步探索:
- 引入AWQ/GPTQ量化技术,降低显存占用,尝试双卡部署;
- 调整动态批处理策略,适配不同业务流量模式;
- 结合Kubernetes实现多实例负载均衡与弹性伸缩;
- 接入RAG系统或Agent框架,构建完整智能体 pipeline。

随着昇腾生态与开源社区的持续演进,国产AI基础设施正逐步走向成熟。这条从芯片到框架再到应用的全栈自研之路,不仅是技术选择,更是战略必然。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐