昇腾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.jsonpytorch_model*.bin(多个分片)tokenizer.modelgeneration_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基础设施正逐步走向成熟。这条从芯片到框架再到应用的全栈自研之路,不仅是技术选择,更是战略必然。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考