news 2025/12/19 17:39:07

昇腾910B部署DeepSeek-R1-Distill-Qwen-32B

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
昇腾910B部署DeepSeek-R1-Distill-Qwen-32B

昇腾910B部署DeepSeek-R1-Distill-Qwen-32B

在国产化信创浪潮持续推进的背景下,越来越多企业开始将大模型推理能力下沉至自主可控的硬件平台。昇腾910B作为华为推出的高性能AI加速卡,凭借其强大的算力与能效比,正逐步成为构建本地化大模型服务的核心选择之一。结合vLLM这一高性能推理引擎,我们完全可以在4张昇腾910B上高效运行像DeepSeek-R1-Distill-Qwen-32B这类32B级别的大语言模型,实现高吞吐、低延迟的生产级部署。

本文将带你从零开始,在鲲鹏920 + EulerOS/Ubuntu ARM64 架构服务器上完成整个部署流程。方案采用容器化方式运行,集成Ascend优化版vLLM镜像,支持OpenAI兼容API接口,适用于金融、政务、教育等对安全性和稳定性要求较高的行业场景。


环境准备:确保基础组件就位

部署前,请确认你的系统满足以下软硬件条件:

项目要求
算力卡昇腾910B ×4
CPU 型号鲲鹏920(ARM64/aarch64)
操作系统EulerOS 或 Ubuntu AArch64
Docker 版本建议 24.0.9 及以上
共享内存(shm)至少预留 500GB

✅ 强烈建议使用ARM64架构主机,以避免交叉编译或兼容性问题。Ascend生态工具链和官方镜像主要针对aarch64构建。

首先验证NPU设备状态:

npu-smi info

预期输出应包含四张昇腾910B的信息,表示驱动和固件已正确安装。若未看到设备信息,请先完成驱动安装并重启系统。


获取vLLM Ascend优化镜像

为充分发挥昇腾硬件性能,我们采用由昇腾社区维护的vLLM Ascend专用镜像。该镜像基于开源vLLM项目深度定制,内置多项关键优化:

  • ✅ 支持PagedAttention,显著提升KV Cache内存利用率
  • ✅ 实现连续批处理(Continuous Batching),提高请求吞吐量
  • ✅ 内建 GPTQ/AWQ 量化加载器,便于低成本部署
  • ✅ 提供标准 OpenAI API 接口,无缝对接现有应用

镜像地址:https://quay.io/repository/ascend/vllm-ascend
GitHub源码:https://github.com/vllm-project/vllm-ascend
官方文档:https://docs.vllm.ai/projects/ascend/en/latest/

由于目标平台为ARM64架构,拉取时需显式指定平台:

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

如果服务器处于内网环境,可在有外网权限的机器上先导出镜像:

docker save quay.io/ascend/vllm-ascend:v0.11.0rc0 > vllm-ascend.tar scp vllm-ascend.tar user@target-server:/path/to/ docker load < vllm-ascend.tar

安装Ascend Docker Runtime

为了让Docker容器能够直接访问昇腾NPU资源,必须安装Ascend Docker Runtime组件。这是连接宿主机驱动与容器内推理框架的关键桥梁。

前往昇腾官网获取对应版本的安装包:

🔗 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

安装完成后重启Docker服务:

sudo systemctl restart docker

此时可通过npu-smi info再次验证设备是否可识别。如仍报错,请检查SELinux策略或udev规则是否生效。


下载并准备模型权重

前往ModelScope平台下载DeepSeek-R1-Distill-Qwen-32B的完整权重文件:

📌 https://www.modelscope.cn/models/deepseek-ai/DeepSeek-R1-Distill-Qwen-32B/files

推荐将模型统一存放于/data/DeepSeek-R1-Distill-Qwen-32B目录下,方便后续挂载管理:

mkdir -p /data/DeepSeek-R1-Distill-Qwen-32B tar -zxvf DeepSeek-R1-Distill-Qwen-32B.tar.gz -C /data/DeepSeek-R1-Distill-Qwen-32B

最终目录结构应如下所示:

/data/DeepSeek-R1-Distill-Qwen-32B/ ├── config.json ├── merges.txt ├── pytorch_model-*.bin ├── tokenizer.json ├── tokenizer_config.json └── vocab.json

注意:确保所有文件具有读权限,且磁盘空间充足(建议预留至少100GB用于缓存和临时计算)。


启动模型服务:两种部署方式对比

方式一:使用docker run手动启动

适合调试阶段快速验证,命令行一次性定义全部参数:

docker run --name vllm-deepseek-qwen32b \ --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/DeepSeek-R1-Distill-Qwen-32B:/models/DeepSeek-R1-Distill-Qwen-32B \ --privileged=true \ -e ASCEND_RT_VISIBLE_DEVICES=0,1,2,3 \ -p 18489:18489 \ -itd quay.io/ascend/vllm-ascend:v0.11.0rc0 bash
关键参数说明
  • --shm-size=500g:vLLM的PagedAttention机制依赖大块共享内存来管理KV缓存,此值过小会导致OOM。
  • --device挂载:必须包含所有NPU相关设备节点,否则容器内无法调用硬件加速。
  • -v挂载路径:尤其是驱动库和配置文件,是容器识别Ascend设备的前提。
  • --privileged=true:开启特权模式以允许设备直通,虽存在安全风险但目前为必要手段。
  • ASCEND_RT_VISIBLE_DEVICES=0,1,2,3:控制可用NPU编号,配合--tensor-parallel-size 4实现四卡并行。

容器启动后进入实例并手动运行服务:

docker exec -it vllm-deepseek-qwen32b bash vllm serve /models/DeepSeek-R1-Distill-Qwen-32B \ --port 18489 \ --dtype auto \ --kv-cache-dtype auto \ --max-model-len 65536 \ --tensor-parallel-size 4 \ --gpu-memory-utilization 0.90 \ --enable-chunked-prefill

参数解读:
---tensor-parallel-size 4:启用四卡张量并行,充分利用昇腾集群算力。
---max-model-len 65536:支持最长64K上下文,适用于长文本摘要、代码生成等任务。
---enable-chunked-prefill:分块预填充技术,有效缓解长输入导致的显存峰值压力。


方式二:使用docker-compose编排部署(推荐)

对于生产环境,强烈建议使用docker-compose管理服务。它不仅简化了配置管理,还支持自动重启、日志追踪和服务编排。

创建docker-compose.yaml文件:

version: '3.8' services: deepseek-qwen32b-inference: container_name: vllm-deepseek-qwen32b image: quay.io/ascend/vllm-ascend:v0.11.0rc0 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/DeepSeek-R1-Distill-Qwen-32B:/models/DeepSeek-R1-Distill-Qwen-32B privileged: true environment: - ASCEND_RT_VISIBLE_DEVICES=0,1,2,3 ports: - "18489:18489" restart: unless-stopped command: > vllm serve /models/DeepSeek-R1-Distill-Qwen-32B --port 18489 --dtype auto --kv-cache-dtype auto --max-model-len 65536 --tensor-parallel-size 4 --gpu-memory-utilization 0.90 --enable-chunked-prefill
优势分析
  • 配置集中化:所有参数清晰可见,便于团队协作和版本控制。
  • restart: unless-stopped:实现故障自愈,保障服务可用性。
  • command字段整合启动参数:避免遗漏关键选项,降低人为错误概率。
  • 更易扩展为多模型服务或加入监控组件(如Prometheus、Fluentd)。

部署命令:

docker-compose up -d docker logs -f vllm-deepseek-qwen32b

观察日志直到出现以下提示:

INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:18489 (Press CTRL+C to quit)

表明服务已就绪。


测试与调用:验证部署结果

等待模型加载完毕后,通过curl发起一次标准OpenAI风格的聊天请求:

curl http://127.0.0.1:18489/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "DeepSeek-R1-Distill-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 系列大模型……" }, "finish_reason": "stop" } ], "usage": { "prompt_tokens": 21, "completion_tokens": 128, "total_tokens": 149 } }

只要返回内容合理且无错误码(如500、404),即可确认DeepSeek-R1-Distill-Qwen-32B 已在昇腾910B平台上稳定运行


总结与延伸思考

本次部署展示了如何利用Ascend 910B + vLLM + Docker构建一个高效、稳定的国产化大模型推理平台。只需4张NPU卡,就能支撑32B级别模型的服务化输出,具备良好的性价比和可维护性。

核心价值点总结:

  • 性能优化到位:PagedAttention 和 Chunked Prefill 技术有效缓解内存瓶颈;
  • 工程实践成熟:容器化部署保证环境一致性,易于迁移与复制;
  • 接口标准化:OpenAI兼容设计极大降低了集成成本;
  • 国产生态闭环:从芯片到框架再到模型,实现全栈自主可控。

未来可进一步探索的方向包括:

  • 尝试AWQ/GPTQ量化版本,在保持效果的同时降低显存占用;
  • 调整--max-num-seqs和批处理策略,优化高并发下的吞吐表现;
  • 结合 Kubernetes(如KubeFlow、Seldon Core)实现弹性伸缩与多租户管理;
  • 集成监控告警系统,实时跟踪GPU利用率、请求延迟等关键指标。

这套技术组合拳——Ascend 910B+vLLM+PagedAttention+Docker+OpenAI API——正在成为构建企业级大模型服务平台的新范式。它不仅是技术选型的胜利,更是国产算力走向实用化的标志性一步。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/19 12:02:23

用Dify构建智能客服系统,只需3步完成上线

用Dify构建智能客服系统&#xff0c;只需3步完成上线 在客户对服务响应速度和准确性的要求日益提升的今天&#xff0c;企业正面临一个现实挑战&#xff1a;如何以可控成本提供724小时、专业且一致的客户服务&#xff1f;传统人工客服受限于人力成本与响应效率&#xff0c;而早期…

作者头像 李华
网站建设 2025/12/18 21:49:01

COLMAP动态干扰终极解决方案:从入门到精通的实战指南

COLMAP动态干扰终极解决方案&#xff1a;从入门到精通的实战指南 【免费下载链接】colmap COLMAP - Structure-from-Motion and Multi-View Stereo 项目地址: https://gitcode.com/GitHub_Trending/co/colmap 当你使用COLMAP进行3D重建时&#xff0c;是否经常被行人、车…

作者头像 李华
网站建设 2025/12/18 22:17:16

基于SpringBoot的活动策划网站的设计与实现(程序+文档+讲解)

课题介绍基于 SpringBoot 的活动策划网站&#xff0c;直击 “活动策划流程分散、资源对接低效、执行进度难追踪、数据统计不精准” 的核心痛点&#xff0c;依托 SpringBoot 轻量级框架优势&#xff0c;构建 “策划管理 资源对接 进度监控 数据复盘” 的一体化活动运营平台。…

作者头像 李华
网站建设 2025/12/16 11:56:24

基于SpringBoot的考务管理系统设计与实现(程序+文档+讲解)

课题介绍基于 SpringBoot 的考务管理系统&#xff0c;直击 “考务流程线下化、考场编排效率低、成绩统计不精准、违规监管缺失” 的核心痛点&#xff0c;依托 SpringBoot 轻量级框架优势&#xff0c;构建 “考试编排 考场管理 成绩统计 违规溯源” 的一体化考务管控平台。系…

作者头像 李华
网站建设 2025/12/16 11:56:17

基于SpringBoot的篮球馆预约系统的设计与实现(程序+文档+讲解)

课题介绍基于 SpringBoot 的篮球馆预约系统&#xff0c;直击 “场馆预约流程繁琐、时段管控混乱、场地使用数据缺失、收费结算不透明” 的核心痛点&#xff0c;依托 SpringBoot 轻量级框架优势&#xff0c;构建 “场地预约 时段管控 费用结算 数据运营” 的一体化管理平台。…

作者头像 李华
网站建设 2025/12/16 11:54:55

SDUT java常用类 -字符串

6-1 人口统计public static int numofHan(String[] data) {int sum0;for(int i0;i<data.length;i){if(data[i].indexOf("汉族")>0)sum;}return sum;}7-1 sdut-String-3 字符串字母大小写转换逆序输出import java.util.Scanner;public class Main {public stati…

作者头像 李华