一、引言
2026年4月24日,DeepSeek V4-Pro和DeepSeek V4-Flash正式发布并开源,模型上下文处理长度由原有的128K显著扩展至1M,实现近10倍的容量提升,首次增加了KV Cache滑窗和压缩算法,大幅减少Attention计算和访存开销,并通过模型架构创新更好地支持了Agent和Coding场景。本指南基于天翼云 HCC(高性能计算集群)平台,提供从集群开通、环境配置到服务部署的全流程详细操作,帮助用户快速完成 DeepSeek-V4-Pro 在昇腾 910B 算力上部署,实现稳定、高效的推理服务。
资源要求
管控节点:1 台搭载昇腾 910B NPU 的节点(每节点 8 × 64GB 昇腾 910B,HBM2e 显存)。
计算节点:3 台搭载昇腾 910B NPU 的节点(每节点 8 × 64GB 昇腾 910B,HBM2e 显存)。
共享存储:根据资源池选择 OceanFS 或 SFS Turbo,容量需满足模型权重、数据集与镜像存储需求(默认500GB)。
网络:节点间使用 RoCE 或高速以太网连接,管控节点绑定 EIP 用于公网访问,EIP 避免直接暴露在公网,具体可参照安全防护。
二、环境准备
2.1 集群开通
天翼云高性能计算集群(HCC)平台拥有 “基础版” 和 “大模型精简版” 两种集群版本,根据开通机器类型建议选择 大模型精简版 :
2.1.1 高性能计算集群(HCC) 大模型精简版
功能定位:包含 Slurm 调度系统、Apptainer 高性能容器,实现deepseek服务一键启停。
开通步骤:
登录天翼云控制台,进入“弹性高性能计算”产品页面,选择“高性能计算集群”,点击进入集群控制台。
点击“创建集群”,在集群类型中选择“大模型精简版”。
依次配置各项参数,包括计费模式、地域、可用区、集群名称、虚拟私有云、安全组、共享存储( SFS 或 OceanFS)、管理节点和计算节点的对应规格、镜像、磁盘、子网、登录密码。
确认所有配置无误后,提交订单并完成集群创建,等待节点纳管完成,直至集群页面显示“可用”“配置完成”状态。
2.2 NVMe 磁盘挂载配置
昇腾910B物理机默认配备2×3.2T NVMe SSD,请格式化后用于存储模型文件,提升推理性能。
需将节点的nvme1n1和nvme0n1两块 NVMe 盘分别挂载至/mnt/nvme1n1和/mnt/nvme0n1目录。
可通过以下脚本实现自动化挂载及开机自动挂载的配置:
#!/bin/bash
# 设备列表
devices=("/dev/nvme0n1" "/dev/nvme1n1")
mount_points=("/mnt/nvme0n1" "/mnt/nvme1n1")
fs_type="xfs"
# 确保 root 权限
if [[ $EUID -ne 0 ]]; then
echo "请使用 root 运行此脚本!"
exit 1
fi
for i in "${!devices[@]}"; do
device="${devices[$i]}"
mount_point="${mount_points[$i]}"
# 创建挂载目录
mkdir -p "$mount_point"
# 获取设备的文件系统类型
current_fs=$(blkid -s TYPE -o value "$device")
if [[ -z "$current_fs" ]]; then
echo "设备 $device 没有文件系统,正在格式化为 $fs_type..."
mkfs.xfs -f "$device"
else
echo "$device 已格式化为 $current_fs,跳过格式化"
fi
# 确保设备未被挂载后再尝试挂载
umount "$device" 2>/dev/null
mount -t "$fs_type" "$device" "$mount_point"
if [[ $? -ne 0 ]]; then
echo "错误:无法挂载 $device 到 $mount_point,请检查设备或文件系统!"
exit 1
fi
echo "$device 已成功挂载到 $mount_point"
# 获取 UUID 并更新 /etc/fstab,避免重复添加
uuid=$(blkid -s UUID -o value "$device")
if ! grep -q "$uuid" /etc/fstab; then
echo "UUID=$uuid $mount_point $fs_type defaults 0 0" >> /etc/fstab
echo "$device (UUID=$uuid) 已添加到 /etc/fstab"
else
echo "$device 已存在于 /etc/fstab,无需添加"
fi
done
echo "所有磁盘已成功挂载并配置为开机自动挂载!"将以上脚本保存为mount.sh,并执行
bash mount.sh本指南中部署将统一使用以下路径:
高速容器存储路径:
/mnt/nvme0n1/apptainer/服务部署工作路径:
/home/deepseek/模型权重参数路径:
/mnt/nvme1n1/model/
建议将权重参数放在单独的nvme盘中,启动加载时更快
2.3 管控节点加入计算队列
Slurm 集群默认架构设计中,管控(管理)节点常规场景下不纳入计算调度队列。在大模型训推、高性能算力作业场景下,单靠原有计算节点资源难以满足大模型权重加载、容器运行、推理生成的高算力与大内存诉求。
为最大化挖掘整机集群资源利用率、扩充可用算力规模,需将管控节点从纯管理模式,纳入 Slurm 计算调度队列,使其同时承担集群管理 + 大模型算力计算双重角色,统一参与大模型相关作业调度与算力承载。
sed -i 's/^\s*noderole\s*=.*/NodeRole=server,execute/i' /usr/local/galaxy/cluster/default/galaxy-launcher/etc/launcher.conf
launcher resource setup_scheduler
# {"success": true, "result": null}
# master0001为管控节点hostname,按实际修改;batch是队列名,在计算节点下单页可自定义命名,建议用batch
launcher resource add_node --node_name master0001 --queue_name batch
# {"success": true, "result": null}命令执行成功后,可通过sinfo命令查看计算队列节点
# 查看计算队列节点
sinfo
# PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
# batch* up infinite 4 idle compute[0001-0003],master0001三、物料准备
3.1 模型文件获取
方式一:(极速)使用cthpc一键安装工具,分钟级快速下发模型,当前支持:
华东1、武汉41、上海15、华北2、华南2、西南1、西南2-贵州、长沙42、杭州7。
mkdir -p /mnt/nvme1n1/model
# 使用 cthpc 工具极速下发
cthpc model makecache
cthpc model install DeepSeek-V4-Pro-w4a8-mtp --dir /mnt/nvme1n1/model/方式二:(传统方式速度慢)基于modelscope、魔乐社区、huggingface平台,使用对应工具直接下载(不推荐,受限于公网EIP订阅的带宽大小)
mkdir -p /mnt/nvme1n1/model
# modelscope下载依赖python3.8+的环境,若缺失,则需要构建虚拟环境
pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install modelscope
modelscope download --model Eco-Tech/DeepSeek-V4-Pro-w4a8-mtp --local_dir /mnt/nvme1n1/model/DeepSeek-V4-Pro-w4a8-mtp3.2 高性能容器SIF文件获取
基于Apptainer(原 Singularity) 封装的 vLLM-Ascend 昇腾推理加速包,高性能计算集群产品将持续迭代优化,原生适配昇腾 NPU 硬件、无权限壁垒、极致轻量化、生产级稳定,全面超越传统 Docker 容器,是昇腾 AI 推理场景的最优融合选择。
方式一:(极速)使用cthpc一键安装工具,秒级快速下发Apptainer高性能容器灌装,当前支持:
华东1、武汉41、上海15、华北2、华南2、西南1、西南2-贵州、长沙42、杭州7。
mkdir -p /mnt/nvme0n1/apptainer
# 使用 cthpc 工具极速下发
cthpc apptainer makecache
cthpc apptainer install vllm-ascend_deepseekv4 --dir /mnt/nvme0n1/apptainer/方式二:(传统方式速度慢)通过天翼云zos站点直接下载(不推荐,受限于公网EIP订阅的带宽大小)
mkdir -p /mnt/nvme0n1/apptainer
# 使用 wget 从 天翼云ZOS 下载 SIF 镜像
wget https://jiangsu-10.zos.ctyun.cn/galaxy/apptainer/vllm_ascend/vllm-ascend_deepseekv4.sif3.2.1镜像更新说明
华为会持续更新 vllm-ascend 包,优化推理性能与兼容性。更新时只需重新下载最新 SIF 镜像,替换旧文件即可,无需修改部署配置。
3.3 模型权重及高性能容器分发至所有节点
将 AI 模型权重文件与高性能业务容器镜像统一分发至集群所有计算节点,确保全节点模型文件、运行环境完全一致,避免单机重复下载。
进入集群工作目录
mkdir -p /home/bcast
cd /home/bcast创建 / 编辑分发脚本 srun_bcast.sh:
#!/bin/bash
#SBATCH --job-name=bcast
#SBATCH --nodes=4
#SBATCH --ntasks-per-node=1
#SBATCH --partition=batch # batch 需修改为集群初始化时设置的队列名
#SBATCH --time=01:00:00
#SBATCH --output=log_%j.out
#SBATCH --error=log_%j.err
export MPICH_NET_DEV=eno0
module load mpich/3.2.1/gcc-10.3.1
module load cthpc_910b/2.0.0/mpich-3.2.1
# cthpc_model_bcast [发送节点] [发送节点路径] [接受节点路径]
# 管理节点名如 master0001
srun --mpi=pmi2 \
--output=logs/log_%j_%t.log \
--error=logs/log_%j_%t.err \
cthpc_model_bcast master0001 /mnt/nvme0n1/apptainer /mnt/nvme0n1/apptainer
srun --mpi=pmi2 \
--output=logs/log_%j_%t.log \
--error=logs/log_%j_%t.err \
cthpc_model_bcast master0001 /mnt/nvme1n1/model/DeepSeek-V4-Pro-w4a8-mtp /mnt/nvme1n1/model/DeepSeek-V4-Pro-w4a8-mtp提交任务至 Slurm 调度器执行分发
sbatch srun_bcast.sh当前cthpc_model_bcast在部分资源池上线,如您的提交任务时提示不存在二进制文件,请提交工单。
四、推理服务启停
4.1 创建部署目录
mkdir -p /home/deepseek
mkdir -p /home/deepseek/logs
mkdir -p /home/deepseek/ascend_log4.2 准备slurm启动脚本
将以下脚本保存至/home/deepseek/srun.sh
#!/bin/bash
#SBATCH -N 4
#SBATCH --partition=batch
#SBATCH -J deepseek
#SBATCH -o logs/log_%J.out
#SBATCH -e logs/log_%J.err
#SBATCH --gres=gpu:8
#SBATCH --cpus-per-task=190
#SBATCH --nodelist=master0001,compute0001,compute0002,compute0003
export LC_CTYPE=C.UTF-8
export MASTER_ADDR=$(scontrol show hostnames "$SLURM_JOB_NODELIST" | head -n 1 | hostname -i)
export MODEL_NAME=DeepSeek-V4
export MODEL_PORT=11025
export MODEL_DIR=/mnt/nvme1n1/model/DeepSeek-V4-Pro-w4a8-mtp
export VLLM_IMG=vllm-ascend_deepseekv4.sif
echo "模型推理服务API为:http://$MASTER_ADDR:$MODEL_PORT/v1"
echo "模型名称为:$MODEL_NAME"
srun --ntasks-per-node=1 \
-o logs/log_%J.%t.out \
-e logs/log_%J.%t.err \
./node.sh4.3 准备节点部署脚本
将以下脚本保存至/home/deepseek/node.sh
#!/bin/sh
nic_name="eno0" # 网卡,弹性裸金属使用“eno0”,标准裸金属使用“bond0”
local_ip=$(hostname -i | awk '{print $1}')
node0_ip=$MASTER_ADDR
export HCCL_IF_IP=$local_ip
export GLOO_SOCKET_IFNAME=$nic_name
export TP_SOCKET_IFNAME=$nic_name
export HCCL_SOCKET_IFNAME=$nic_name
export OMP_PROC_BIND=false
export OMP_NUM_THREADS=10
export HCCL_BUFFSIZE=200
export HCCL_OP_EXPANSION_MODE="AIV"
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
export HCCL_CONNECT_TIMEOUT=120
export HCCL_INTRA_PCIE_ENABLE=1
export HCCL_INTRA_ROCE_ENABLE=0
export ACL_OP_INIT_MODE=1
export TRITON_ALL_BLOCKS_PARALLEL=1
export USE_MULTI_BLOCK_POOL=1
export USE_MULTI_GROUPS_KV_CACHE=1
export ASCEND_BUFFER_POOL=0:0
export VLLM_ASCEND_ENABLE_FLASHCOMM1=1
export VLLM_ENGINE_READY_TIMEOUT_S=3600
apptainer instance start --no-home --writable-tmpfs \
-B /usr/local/sbin:/usr/local/sbin \
-B /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-B ascend_log:/root/ascend \
-B $MODEL_DIR:/model \
$VLLM_IMG app-instance
if [ $SLURM_NODEID == 0 ]; then
apptainer exec instance://app-instance \
vllm serve \
/model \
--served-model-name "$MODEL_NAME" \
--host 0.0.0.0 \
--port "$MODEL_PORT" \
--data-parallel-size $SLURM_NNODES \
--data-parallel-size-local 1 \
--data-parallel-address $node0_ip \
--data-parallel-rpc-port 13389 \
--tensor-parallel-size 8 \
--quantization ascend \
--seed 1024 \
--enable-expert-parallel \
--max-num-seqs 16 \
--max-model-len 65536 \
--max-num-batched-tokens 4096 \
--tokenizer-mode deepseek_v4 \
--tool-call-parser deepseek_v4 \
--enable-auto-tool-choice \
--reasoning-parser deepseek_v4 \
--trust-remote-code \
--async-scheduling \
--enable-prefix-caching \
--gpu-memory-utilization 0.95 \
--safetensors-load-strategy 'prefetch' \
--default-chat-template-kwargs '{"thinking": true}' \
--compilation-config '{"cudagraph_mode": "FULL_DECODE_ONLY"}' \
--additional-config '{"ascend_compilation_config":{"enable_npugraph_ex":true,"enable_static_kernel":false},"enable_cpu_binding":"True"}' \
--speculative-config '{"num_speculative_tokens": 3, "method": "deepseek_mtp"}'
else
apptainer exec instance://app-instance \
vllm serve \
/model \
--served-model-name "$MODEL_NAME" \
--host 0.0.0.0 \
--port "$MODEL_PORT" \
--headless \
--data-parallel-size $SLURM_NNODES \
--data-parallel-size-local 1 \
--data-parallel-start-rank $SLURM_NODEID \
--data-parallel-address $node0_ip \
--data-parallel-rpc-port 13389 \
--tensor-parallel-size 8 \
--quantization ascend \
--seed 1024 \
--enable-expert-parallel \
--max-num-seqs 16 \
--max-model-len 65536 \
--max-num-batched-tokens 4096 \
--tokenizer-mode deepseek_v4 \
--tool-call-parser deepseek_v4 \
--enable-auto-tool-choice \
--reasoning-parser deepseek_v4 \
--trust-remote-code \
--async-scheduling \
--enable-prefix-caching \
--gpu-memory-utilization 0.95 \
--safetensors-load-strategy 'prefetch' \
--default-chat-template-kwargs '{"thinking": true}' \
--compilation-config '{"cudagraph_mode": "FULL_DECODE_ONLY"}' \
--additional-config '{"ascend_compilation_config":{"enable_npugraph_ex":true,"enable_static_kernel":false},"enable_cpu_binding":"True"}' \
--speculative-config '{"num_speculative_tokens": 3, "method": "deepseek_mtp"}'
fi4.4 服务启动与停止
# 进入部署目录
cd /home/deepseek
# 设置节点启动脚本执行权限
chmod +x node.sh
# 启动 DeepSeek 服务
sbatch srun.sh
# 查看npu运行状态
npu-smi info
# 查看实例和作业运行信息
squeue
# 示例输出
# JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
# 1 batch deepseek root R 3:04:45 4 compute[0001-0003],master0001
# 停止一项服务
# scancel [JOBID],根据上文deepseek服务的JOBID为1
scancel 1
# 停止全部服务
scancel --me五、服务验证与运维
5.1 推理服务验证
测试方法:向大模型问一个简单的问题,准备如下脚本并保存到check.sh
#!/bin/bash
curl http://localhost:11025/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "DeepSeek-V4",
"messages": [
{"role":"user","content":"你是谁?"}
],
"extra": {"openai_proxy":true}
}'成功响应示例:
sh check.sh
# {"id":"chatcmpl-a716c986cde163c7","object":"chat.completion","created":1778038089,"model":"DeepSeek-V4","choices":[{"index":0,"message":{"role":"assistant","content":"你好呀!我是DeepSeek,很高兴认识你!🎉\n\n让我来正式介绍一下自己:\n\n## 我的身份\n我是由**深度求索公司**创造的AI助手,是这个星球上最“聪明”的AI之一!我的知识截止到2025年5月。\n\n## 我能做什么\n- 📝 **文字处理高手**:写作、翻译、编程、数据分析、创意策划...各种文本任务我都擅长\n- 📎 **文件处理**:支持上传图片、PDF、Word、Excel、PPT等文件,我能读取其中的文字信息帮你分析\n- 🔗 **阅读链接**:可以把网址发给我,我能帮你读取内容\n- 🌐 **联网搜索**:需要最新信息时,你可以手动开启联网搜索功能(在Web/App上点击按钮)\n- 🎤 **语音交互**:App端支持语音输入,更方便交流 hilabihan\n\n## 我的特点\n- ✅ **完全免费**:没错,目前没有任何收费计划!可以放心使用\n- 📚 **超长上下文**:1M token的上下文窗口,可以一次性处理像《三体》三部曲那么大体量的内容\n- 📱 **多平台使用**:支持Web网页版和App移动端,可以在官方应用商店下载\n\n## 我不能做什么\n- ❌ 不支持多模态识别(虽然可以上传图片,但只能读取其中的文字信息)\n- ❌ 知识截止后的事情我就不知道啦,需要联网搜索帮忙\n\n有什么问题想问我,或者需要我帮忙的吗?尽管来聊!😊","refusal":null,"annotations":null,"audio":null,"function_call":null,"tool_calls":[],"reasoning":"嗯,用户让我介绍一下我自己。这是一个非常基础且常见的问题。\n\n我需要用清晰、友好的方式介绍我的身份、能力、特点和局限性。考虑到用户可能刚接触我,信息应该全面但不过于冗长。\n\n可以从名字和创造者开始,然后列举核心能力,比如文本处理、文件支持、上下文长度,再说明免费属性和其他特点如联网搜索、语音输入,最后提及知识截止日期和局限性。这样结构比较清晰。\n\n最后可以用热情的语气收尾,并主动询问是否需要帮助,引导进一步互动。"},"logprobs":null,"finish_reason":"stop","stop_reason":null,"token_ids":null}],"service_tier":null,"system_fingerprint":null,"usage":{"prompt_tokens":6,"total_tokens":441,"completion_tokens":435,"prompt_tokens_details":null,"completion_tokens_details":{"reasoning_tokens":111,"audio_tokens":null,"accepted_prediction_tokens":null,"rejected_prediction_tokens":null}},"prompt_logprobs":null,"prompt_token_ids":null,"kv_transfer_params":null}5.2 推理日志查看
若服务异常,可通过日志排查问题:
# 查看模型推理服务API及模型名
tail -f /home/deepseek/logs/log.$JOBID.out
# 查看作业输出日志
tail -f /home/deepseek/logs/log.$JOBID.${节点编号}.out
# 查看错误日志
tail -f /home/deepseek/logs/log.$JOBID.${节点编号}.err其中JOBID可通过squeue命令查看,节点编号格式为0.x,x从0开始,表示第一个节点。
六、注意事项
模型版本管理:建议对模型权重、SIF 镜像进行版本化管理,避免更新后无法回滚。
安全防护:生产环境建议配置安全组IP 白名单,减少公网暴露面,并通过天翼云 WAF 防护恶意攻击,推荐以下5种安全组网方案:
ELB+VPN
ELB+NAT 网关。
DDoS+WAF+ELB+NATGW+VPN。
DDoS+WAF+ELB+SDWAN。
DDoS+WAF+ELB+专线
七、附录
天翼云 HCC 产品文档:弹性高性能计算-产品文档-帮助中心 - 天翼云
DeepSeek-V4 模型下载地址:https://modelscope.cn/collections/deepseek-ai/DeepSeek-V4