国产DCU加速卡部署DeepSeek全指南:驱动、Docker与推理框架实战

发布时间:2026/10/11 10:22:59

国产DCU加速卡部署DeepSeek全指南:驱动、Docker与推理框架实战 简介这份PDF文档面向具备Linux系统管理与深度学习框架经验的IT技术人员和运维人员聚焦海光DCU平台上DeepSeek-R1/V3推理环境的完整搭建流程。内容覆盖DCU驱动与Docker基础依赖安装、模型下载的三种渠道SCNet超算互联网、Huggingface、Modelscope并针对K100AI与Z100/K100系列分别给出vllm、ollama、Pytorch三种框架的部署配置最后延伸至Anythingllm与DCU智能助手的Webuiserver可视化交互方案。资源包为1个PDF文件大小约1.05MB结构按简介、环境依赖、模型下载、推理部署、可视化交互、参考链接及部署信息概览附表组织命令行示例与环境变量说明较为完整。目前已有1543人学习适合需要快速完成DCU推理环境落地、对照框架配置与排错思路的读者参考。1. 国产加速卡上跑 DeepSeek这份部署指南能省掉你多少试错时间手里有一台搭载海光 DCU 的服务器想跑 DeepSeek-R1 或 V3第一反应往往是翻官方文档、搜社区帖子、对着报错一条条试。问题是 DCU 的软件栈和常见的 CUDA 生态不完全一样驱动版本、DTK 版本、Docker 镜像、推理框架之间的匹配关系一旦搞错轻则容器起不来重则模型加载到一半直接挂掉。这份部署指南的价值就在于它把 K100AI 和 Z100/K100 两个系列加速卡上跑 DeepSeek 的完整路径拆开了——从 DCU 驱动安装、Docker 环境准备到 vllm、Ollama、Pytorch 三种推理框架的具体配置再到 AnythingLLM 和 DCU 智能助手的可视化交互。适合手里有 DCU 机器、需要快速把 DeepSeek 推理服务跑起来的运维和 AI 工程师也适合正在做国产化替代选型、想评估 DCU 实际部署体验的技术负责人。2. 环境底座DCU 驱动与 Docker 的版本匹配逻辑2.1 驱动版本为什么必须卡在 rock-5.7.2-6.2.26 以上DCU 驱动是整个软件栈的地基。指南里明确写了驱动版本要求 rock-5.7.2-6.2.26 及以上这个版本号不是随便定的——它对应的是后续 DTKDCU Toolkit和推理框架能正常调用加速卡的最低门槛。低于这个版本容器里可能识别不到 /dev/kfd 和 /dev/dri 设备节点vllm 启动时会直接报找不到可用设备。安装依赖这一步CentOS 和 Ubuntu 的命令不同但核心都是把编译工具链和内核头文件补齐# CentOS 环境 yum install -y gcc gcc-c rpm-build autoconf kernel-devel-$(uname -r) kernel-headers-$(uname -r) # Ubuntu 环境 apt-get install -y cmake gcc autoconf linux-kernel-headers kernel-package automake \ linux-modules-extra-uname -r linux-image-uname -r linux-headers-uname -r这两条命令的逻辑是DCU 驱动安装过程中需要编译内核模块缺了 kernel-devel 或 linux-headers 就会在编译阶段报错。Ubuntu 下额外装了 linux-modules-extra是因为部分发行版默认不包含 DCU 所需的辅助模块。驱动安装本身分四步下载 .run 文件、chmod x 赋权、执行安装、重启 hymgr 服务。最后一步 systemctl restart hymgr3 容易被忽略——不重启这个服务驱动虽然装了但不会生效。如果安装过程中提示需要升级 vbios必须重启服务器不能只重启服务。注意驱动安装完成后用hy-smi验证加速卡是否被正确识别。如果输出为空或报错先检查 hymgr3 服务状态再确认内核版本是否匹配。2.2 Docker 安装与容器启动参数里的关键挂载Docker 版本要求 18.01 以上安装方式按发行版走阿里云镜像源即可。CentOS 下配置 yum 源后直接yum install docker-ce docker-ce-cli containerd.ioUbuntu 下用 apt 仓库安装。装完后把普通用户加入 docker 组避免每次都要 sudo。真正需要仔细看的是容器启动命令。指南里给出的推荐命令包含了一长串参数每个都有实际作用docker run -dit --networkhost --namedeepseek_test --privileged \ --device/dev/kfd --device/dev/dri --ipchost --shm-size256G \ --group-add video --cap-addSYS_PTRACE --security-opt seccompunconfined \ -u root --ulimit stack-1:-1 --ulimit memlock-1:-1 \ -v /opt/hyhal:/opt/hyhal:ro \ -v /data/projects:/home/ \ image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.4.1-ubuntu22.04-dtk25.04-rc4-vllm0.6.6-py3.10逐项拆解--device/dev/kfd --device/dev/dri是把 DCU 的设备节点透传给容器没有这两个挂载容器里看不到加速卡--shm-size256G是因为大模型推理时进程间通信需要大量共享内存默认的 64M 根本不够模型加载到一半就会报 shared memory 不足--ulimit memlock-1:-1解除内存锁定限制vllm 在分配显存时会用到-v /opt/hyhal:/opt/hyhal:ro把宿主机的 HAL 库以只读方式挂进去这是 DCU 软件栈正常运行的必要依赖。-v your_workspace_path:/home/这行需要根据实际情况替换。比如宿主机上模型权重放在 /data/models 下就写成-v /data/models:/home/models这样容器里直接访问 /home/models 就能读到模型文件不用把几十上百 G 的权重再复制一遍。3. 模型下载与推理框架选型vllm、Ollama、Pytorch 怎么选3.1 三种下载渠道与 git-lfs 的配合指南推荐了三个模型下载渠道SCNet 超算互联网、Huggingface 镜像站、ModelScope。实际用下来ModelScope 在国内的下载速度最稳定Huggingface 镜像站作为备选。GGUF 格式的模型在 ModelScope 上也有专门的上传者维护Ollama 用户直接下 GGUF 版本最省事。用 git clone 拉模型之前必须先装 git-lfs否则拉下来的只是指针文件而不是真正的权重# Ubuntu apt-get install git-lfs # CentOS yum install git-lfs # 初始化并拉取 git init git lfs install git clone https://www.modelscope.cn/deepseek-ai/DeepSeek-R1.gitgit lfs install只需要执行一次之后所有 git clone 操作都会自动走 LFS。如果忘了这一步clone 下来的模型文件只有几百字节加载时必然报格式错误。3.2 vllm 部署蒸馏版和满血版的版本分叉vllm 在 DCU 上的部署有个关键分叉点蒸馏版本DeepSeek-Distill-Qwen/Llama推荐用 vllm 0.6.2满血版和 AWQ 量化版推荐用 vllm 0.7.2。这个版本差异不是随便定的——0.6.2 对蒸馏版的小模型做了针对性优化启动更快0.7.2 才支持满血版 MoE 架构的专家并行和 MLA 注意力机制。蒸馏版的启动命令相对简单vllm serve /data/models/deepseek-r1-distill-qwen32b \ --tensor-parallel-size 4 \ --max-model-len 32768 \ --enforce-eager \ --host localhost --port 8000 \ --dtype float16--tensor-parallel-size 4表示用 4 张 DCU 卡做张量并行这个值要根据实际卡数调整。--enforce-eager在 DCU 上建议加上避免图模式编译带来的兼容性问题。--max-model-len 32768是上下文长度上限设太大显存扛不住设太小长文本推理会截断。满血版 V3/R1 的部署复杂度高一个量级。FP16/BF16 精度需要 4 机 32 卡AWQ 量化版单机 8 卡可以跑。多机部署要先用 ray 组建集群# master 节点 ray start --head --node-ip-address10.1.1.1 --port6379 --num-gpus8 --num-cpus16 # worker 节点 ray start --address10.1.1.1:6379 --num-gpus8 --num-cpus16然后启动 vllm 服务时指定--distributed-executor-backend ray让 vllm 通过 ray 调度多机资源。环境变量里NCCL_SOCKET_IFNAME和GLOO_SOCKET_IFNAME必须设成本机实际通信网口名用ifconfig查。设错了会报 NCCL 通信超时模型加载卡在初始化阶段。AWQ 量化版单机部署时VLLM_MLA_DISABLE1是必须设置的否则 MLA 注意力层在量化模式下会出问题。NCCL_MIN_NCHANNELS16和NCCL_MAX_NCHANNELS16限制通信通道数避免通道过多导致显存碎片。3.3 Ollama 部署镜像直用与编译安装的取舍Ollama 在 DCU 上有两种装法直接用打包好的镜像或者从源码编译。镜像方式最省事docker pull下来启动容器就能用。编译安装适合需要改代码或特定版本的情况。镜像方式启动容器后进入 /home/ollama 目录设置几个环境变量再启动服务export HSA_OVERRIDE_GFX_VERSION9.2.8 export ROCR_VISIBLE_DEVICES0,1,2,3,4,5,6,7 export OLLAMA_SCHED_SPREADTrue export OLLAMA_HOST0.0.0.0 ./ollama serveHSA_OVERRIDE_GFX_VERSION9.2.8是 DCU 上跑 Ollama 的玄学参数——不设这个Ollama 可能识别不到加速卡或者跑着跑着崩掉。OLLAMA_SCHED_SPREADTrue让 Ollama 把负载分散到所有可见设备上多卡场景下能提升吞吐。编译安装的流程是拉源码、装 Go 环境、make -j 32编译。编译前要设LIBRARY_PATH/opt/dtk/lib:$LIBRARY_PATH否则链接阶段找不到 DCU 的库文件。编译产物在go build .之后生成验证时同样要设 HSA_OVERRIDE_GFX_VERSION。用本地 GGUF 模型时需要写 ModelfileFROM /data/models/DeepSeek-R1-Distill-Qwen-7B-GGUF/DeepSeek-R1-Distill-Qwen-7B-F16.gguf PARAMETER temperature 0.1 PARAMETER num_ctx 2048 TEMPLATE User{{ .Prompt }}Assistant然后./ollama create deepseek_r1_distill_qwen_7b_f16 -f /path/to/Modelfile把模型注册进去。如果下载的 GGUF 是分片的多个 gguf 文件需要先用 llama.cpp 的 llama-gguf-split 工具合并成一个文件否则 Ollama 加载时会报错。3.4 Pytorch 多机推理免密配置与启动脚本Pytorch 环境下的 671B 模型推理需要 4 台 8 卡 K100AI配置复杂度最高。第一步是配物理机免密改 /etc/hosts 加节点名、关防火墙、生成 SSH 密钥、把公钥写进 authorized_keys。验证方式是ssh node1能直接登录不输密码。Docker 免密需要在启动容器时把宿主机的 /root/.ssh 挂进去-v /root/.ssh:/root/.ssh。容器内还要启动 sshd 并指定端口/usr/sbin/sshd -p 2222。验证四个容器之间ssh node1 -p 2222能通。模型准备阶段要把 FP8 权重转成 BF16然后跑 convert.py 做格式转换。转换完成后把 json 文件复制到输出目录设NCCL_ALGORing和NCCL_PROTOSimple。多机推理脚本的关键参数export NCCL_IB_DISABLE1 export NCCL_SOCKET_IFNAMEens38f0 export NCCL_P2P_DISABLE1 export NCCL_ALGORing export NCCL_PROTOSimple export CUDA_VISIBLE_DEVICES0,1,2,3,4,5,6,7 GPUS_PER_NODE8 NNODES4 NODE_RANK0 # 主节点 0其余 1/2/3 MASTER_ADDR10.17.27.99 MASTER_PORT30182 MODEL/home/data/models/DeepSeek-R1-DemoNCCL_SOCKET_IFNAME必须设成本机实际网口名用ifconfig查。NCCL_IB_DISABLE1在非 InfiniBand 环境下必须设否则 NCCL 会尝试走 IB 通道然后超时。启动顺序是先起主节点脚本再起其余子节点程序才会开始初始化。4. 可视化交互与避坑排查4.1 AnythingLLM 和 DCU 智能助手接入推理服务跑起来之后用 AnythingLLM 做前端交互是最快的方式。AnythingLLM 支持 OpenAI 兼容的 API 格式vllm 启动的服务默认就是 OpenAI 兼容接口。在 AnythingLLM 的设置里把 API 地址填成http://localhost:8000/v1模型名填 vllm serve 时指定的模型路径或名称就能直接对话。DCU 智能助手是另一个可视化选项适合不想额外装 AnythingLLM 的场景。接入方式类似核心是确认推理服务的端口和 API 路径对得上。4.2 常见问题排查现象一容器启动后hy-smi看不到设备。原因启动容器时没加--device/dev/kfd --device/dev/dri或者宿主机驱动版本低于 rock-5.7.2-6.2.26。 解决检查 docker run 命令里设备挂载参数用hy-smi确认宿主机驱动正常版本不够就升级驱动。现象二vllm 启动时报 shared memory 不足。原因--shm-size设得太小默认 64M 对大模型推理远远不够。 解决启动容器时加--shm-size256G如果模型特别大可以设到 500G。现象三多机部署时 NCCL 通信超时。原因NCCL_SOCKET_IFNAME设错了网口名或者NCCL_IB_DISABLE没设导致 NCCL 尝试走 IB 通道。 解决用ifconfig确认实际通信网口名设NCCL_IB_DISABLE1非 IB 环境必须加这个。现象四Ollama 加载本地 GGUF 模型报格式错误。原因GGUF 文件是分片的没有合并成一个完整文件。 解决用 llama.cpp 的 llama-gguf-split 工具执行--merge合并再重新 create。现象五满血版 AWQ 量化推理时显存溢出。原因VLLM_MLA_DISABLE1没设或者--gpu-memory-utilization设得太高。 解决确认环境变量已设把--gpu-memory-utilization从 0.97 降到 0.9 左右试试。5. 从能跑到跑好几个让部署更稳的实操习惯部署跑通只是第一步真正上线跑业务还有几个细节值得注意。第一模型权重目录的挂载方式。我一般会把宿主机上的模型目录以只读方式挂进容器-v /data/models:/home/models:ro。只读挂载的好处是容器里误操作删不掉权重文件而且多个容器可以共享同一份权重不用每个容器都复制一份。如果确实需要在容器里写文件单独挂一个可写目录给输出用。第二vllm 的--max-model-len和--gpu-memory-utilization要配合调。max-model-len设大了 KV Cache 占用高gpu-memory-utilization设高了留给 KV Cache 的显存就少。我一般先把gpu-memory-utilization设 0.9然后根据实际请求的上下文长度反推max-model-len能设到多少。如果业务场景主要是短对话max-model-len设 8192 就够省下来的显存可以提并发。第三多机部署时 ray 集群的稳定性。ray 的 head 节点如果挂了整个集群就散了。生产环境建议把 ray head 和 vllm master 放在同一台机器上并且用 systemd 或者 supervisor 做进程守护挂了自动拉起。worker 节点同理。第四Ollama 的OLLAMA_HOST0.0.0.0只在需要外部访问时设。如果只是本机调用设成127.0.0.1更安全。OLLAMA_SCHED_SPREADTrue在多卡场景下能提升吞吐但单卡场景设不设没区别。第五日志和监控。vllm 启动时加--disable-log-requests可以减少日志量但排查问题时反而需要日志。我一般先在调试阶段开着日志稳定运行后再关。DCU 的hy-smi可以看显存和利用率配合watch -n 1 hy-smi能实时观察推理时的负载变化。验证部署是否真正稳定我习惯跑一个简单的压测用curl向 vllm 的/v1/completions接口发 100 个并发请求看响应时间和成功率。如果成功率低于 99% 或者响应时间波动很大说明显存分配或者并发配置还有问题。这个压测脚本很简单for i in $(seq 1 100); do curl -s -X POST http://localhost:8000/v1/completions \ -H Content-Type: application/json \ -d {model:/data/models/deepseek-r1-distill-qwen32b,prompt:你好,max_tokens:50} done wait跑完之后看有没有报错返回以及hy-smi里显存是否稳定。如果显存持续增长不释放可能是 KV Cache 没配好需要调--max-num-seqs或者--gpu-memory-utilization。从那以后我每次部署完 DCU 上的推理服务都会先跑一遍这个压测再交给业务方确认稳定了才敢上线。希望帮到你。本文还有配套的精品资源点击获取
延伸阅读

更多相关文章

2026/10/11 10:22:59

系统思维方法精要:复杂系统风险评估与事故分析方法实操指南

简介:《系统思维方法精要》是一份聚焦复杂系统问题解决的专业资料,内容源自Paul M. Salmon等人撰写的《Handbook of Systems Thinking Methods》,系统梳理了12种实用方法,覆盖风险评估、系统分析、事故分析与计算建模四大类别。全…

2026/10/11 10:22:59

AI编码助手越写越乱?用Agent Skills约束代码复杂度

1. 当代码生成不再是瓶颈,复杂度成了新的战场最近半年我一直在折腾一件事:把 AI 编码助手真正用进日常开发流里。从最初的新鲜感,到后来的“能跑就行”,再到现在的隐隐不安——我发现一个越来越明显的问题:AI 写代码越…

2026/10/11 10:22:59

rea:规则驱动的命令行文本抽取与字段映射工具实战

我入行头几年,最怕听到的四个字就是“导出文件”。不管是业务系统的明细、网关日志还是上游的数据对账表,落到手里永远是各种格式的纯文本:有的是制表符分隔,有的用竖线,有的干脆是几万行带时间戳的半结构化记录。而我…

2026/10/11 11:18:02

OpenCV手势识别控制小米智能家居:毕设源码实战与避坑指南

简介:这份资源是一套基于OpenCV实现手势控制小米智能家居的完整项目源码,面向计算机视觉入门者、智能家居爱好者及需要毕业设计选题的学生,帮助解决手势识别与设备远程控制联动的实践问题。压缩包共14个文件,约1.36MB,…

2026/10/11 11:18:02

岩石裂缝与CT岩心图像语义分割实战:从UNet训练到像素级裂缝识别

简介:面向计算机视觉课程设计与期末大作业,这套基于Python的岩石裂缝与CT岩心裂缝语义分割资料包,覆盖从图像预处理到模型训练与验证的关键环节。包内共14个文件,含6张岩石表面、混凝土断面及CT岩心扫描样例图及对应标注图&#x…

2026/10/11 11:18:02

人脸识别考勤系统:深度学习模型与业务闭环实战解析

简介:基于深度学习的人脸识别考勤系统完整源码与配套文档,面向计算机相关专业学生,可用于毕业设计、课程设计、期末大作业或项目实战练习。系统主要涵盖人脸检测、特征提取与考勤记录等环节,代码结构清晰,附带手册和部…

2026/10/11 0:02:13

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/11 0:02:13

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/11 0:02:13

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/11 0:02:13

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/11 0:02:13

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/11 0:02:13

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑