一、引言
2026年4月24日,DeepSeek V4-Pro 和 DeepSeek V4-Flash 正式发布并开源。模型上下文处理长度由原有的128K显著扩展至1M(约8倍提升),首次增加了 KV Cache 滑窗和压缩算法,大幅减少了 Attention 计算和访存开销,并通过模型架构创新更好地支持了 Agent 和 Coding 场景。本指南基于天翼云公有云平台,提供从AI推理云主机开通、环境配置到服务部署的全流程详细操作,帮助用户快速完成 DeepSeek V4-Flash MTP(Multi‑Token Prediction,多令牌预测)在昇腾910B算力上的服务部署,实现稳定、高效的推理。
资源要求
计算资源:1台搭载8张昇腾910B NPU的云主机。
存储资源:容量需满足模型权重、数据集与推理容器镜像的存储需求(建议数据盘至少350 GB),推荐使用高性能存储以加速模型加载。
网络:满足需求的公网EIP,用于公网访问。请注意避免EIP直接暴露在公网,建议配合安全组、WAF等防护措施。
注意:
目前该云主机规格仅白名单开放。
二、环境准备
2.1 云主机开通
2.1.1 昇腾计算加速型云主机开通
开通步骤:
登录天翼云,点击右上角“控制中心”,进入控制台,选择“弹性云主机”产品页面,点击左侧“弹性云主机 ECS”栏,进入计算控制台。
点击计算控制台右上角“创建云主机”,进入云主机开通页面。
按提示依次配置各项参数,重点关注规格类型、镜像、存储及磁盘大小、弹性IP,其他配置请自行按需选择。
规格:选择ARM计算下“GPU加速/AI加速型”中的昇腾计算加速型 PAK3.32xlarge.8。
镜像:选择CTyunOS预装驱动的镜像,名称为 CTyunOS 23.01 64位 ARM版 昇腾25.2.0 专用。
磁盘:系统盘使用默认大小,增加一块数据盘,数据盘容量至少350 GB。
弹性IP:网络配置中选择“自动分配”或绑定已有EIP。
确认所有配置无误后,提交订单并创建云主机,等待云主机创建完成,直至订购页面订单状态为“完成”。
回到计算控制台,查看已创建的云主机。
2.2 数据盘初始化
2.2.1 参考官网指导进行数据盘初始化
请参考 初始化数据盘 完成磁盘初始化及文件系统加载。
注意
挂载路径需指定为 /data,否则后续 vLLM-Ascend 容器启动脚本中的模型路径需要相应调整。
[root@ecm-8476 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sr0 11:0 1 378K 0 rom
vda 253:0 0 150G 0 disk
├─vda1 253:1 0 200M 0 part /boot/efi
└─vda2 253:2 0 149.8G 0 part /
vdb 253:16 0 350G 0 disk
└─vdb1 253:17 0 350G 0 part /data三、物料准备
3.1 模型文件获取
基于 ModelScope 平台,使用对应工具直接下载(下载速度依赖公网EIP的带宽大小)。
# 模型存放路径
mkdir -p /data/model
# 安装 ModelScope 模型管理服务, 使用国内清华源
pip install modelscope -i https://pypi.tuna.tsinghua.edu.cn/simple
# 下载模型
modelscope download --model Eco-Tech/DeepSeek-V4-Flash-w8a8-mtp --local_dir /data/model/3.2 Docker 安装
CTyunOS 系统安装 Docker 可使用以下指令一键完成:
yum install -y docker-engine检查 Docker 服务状态:
systemctl status docker
# 确保服务状态为 active (running)3.3 vLLM-Ascend 推理引擎镜像下载
参考 vLLM-Ascend 安装说明,选择如下容器镜像下载:
docker pull quay.io/ascend/vllm-ascend:v0.13.0rc3镜像源地址:https://quay.io/repository/ascend/vllm-ascend?tab=tags
四、推理服务启停
4.1 创建部署目录
mkdir -p /data/deepseek4.2 准备启动脚本
将以下脚本保存至 /data/deepseek/start-vllm-ascend.sh。
如需修改模型路径,请调整脚本中的 HOST_MODEL_DIR 变量。
#!/bin/bash
set -e
# ==========================================
# 1. 配置
# ==========================================
export IMAGE="quay.io/ascend/vllm-ascend:v0.13.0rc3"
export NAME="vllm-ascend"
export HOST_MODEL_DIR="/data/model" # 宿主机模型路径
export CONTAINER_MODEL_DIR="/root/.cache/model"
export PORT=8006
export TENSOR_PARALLEL_SIZE=8 # npu-smi 显示的 8 张卡
export SERVED_MODEL_NAME="deepseek-v4-mtp"
# 输出颜色
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# ==========================================
# 2. 依赖环境检查函数
# ==========================================
check_dependencies() {
echo -e "${YELLOW}[1/5] 正在检查依赖环境...${NC}"
# 2.1 检查 Docker 是否运行
if ! systemctl is-active --quiet docker; then
echo -e "${RED}错误: Docker 服务未运行。请先执行: systemctl start docker${NC}"
exit 1
fi
echo -e "${GREEN} ✔ Docker 服务运行正常${NC}"
# 2.2 检查 NPU 驱动和 npu-smi
if ! command -v npu-smi &> /dev/null; then
echo -e "${RED}错误: 未找到 npu-smi 命令,请检查 Ascend 驱动安装。${NC}"
exit 1
fi
if ! npu-smi info &> /dev/null; then
echo -e "${RED}错误: NPU 状态异常,请使用 npu-smi info 排查。${NC}"
exit 1
fi
echo -e "${GREEN} ✔ Ascend NPU 驱动正常${NC}"
# 2.3 检查 Docker 镜像是否存在
if ! docker image inspect "$IMAGE" &> /dev/null; then
echo -e "${RED}错误: 镜像 $IMAGE 不存在,请先拉取镜像。${NC}"
exit 1
fi
echo -e "${GREEN} ✔ Docker 镜像已存在${NC}"
# 2.4 检查模型文件是否存在
if [ ! -f "$HOST_MODEL_DIR/config.json" ]; then
echo -e "${RED}错误: 模型文件未找到 (检查路径: $HOST_MODEL_DIR/config.json)${NC}"
exit 1
fi
echo -e "${GREEN} ✔ 模型文件检查通过${NC}"
}
# ==========================================
# 3. 清理旧容器函数
# ==========================================
cleanup_old_container() {
echo -e "${YELLOW}[2/5] 清理旧容器...${NC}"
if [ "$(docker ps -a -q -f name=$NAME)" ]; then
echo -e " 正在停止并删除旧容器: $NAME"
docker rm -f $NAME
fi
}
# ==========================================
# 4. 启动服务函数
# ==========================================
start_service() {
echo -e "${YELLOW}[3/5] 正在启动 vLLM Ascend 容器...${NC}"
docker run -d \
--name $NAME \
--net=host \
--ipc=host \
--shm-size=1g \
--device /dev/davinci0 \
--device /dev/davinci1 \
--device /dev/davinci2 \
--device /dev/davinci3 \
--device /dev/davinci4 \
--device /dev/davinci5 \
--device /dev/davinci6 \
--device /dev/davinci7 \
--device /dev/davinci_manager \
--device /dev/devmm_svm \
--device /dev/hisi_hdc \
-v /usr/local/dcmi:/usr/local/dcmi \
-v /usr/local/Ascend/driver/tools/hccn_tool:/usr/local/Ascend/driver/tools/hccn_tool \
-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 /etc/hccn.conf:/etc/hccn.conf \
-v $HOST_MODEL_DIR:$CONTAINER_MODEL_DIR \
-e USE_MULTI_BLOCK_POOL=1 \
-e OMP_PROC_BIND=false \
-e OMP_NUM_THREADS=10 \
-e PYTORCH_NPU_ALLOC_CONF=expandable_segments:True \
-e ACL_OP_INIT_MODE=1 \
-e TRITON_ALL_BLOCKS_PARALLEL=1 \
--restart=on-failure \
$IMAGE \
vllm serve --model $CONTAINER_MODEL_DIR \
--host 0.0.0.0 \
--served-model-name $SERVED_MODEL_NAME \
--max_model_len 65536 \
--max-num-batched-tokens 8192 \
--gpu-memory-utilization 0.9 \
--max-num-seqs 16 \
--data-parallel-size 1 \
--tensor-parallel-size $TENSOR_PARALLEL_SIZE \
--enable-expert-parallel \
--quantization ascend \
--port $PORT \
--block-size 128 \
--async-scheduling \
--additional-config '{"enable_cpu_binding": "true", "multistream_overlap_shared_expert": true}' \
--speculative-config '{"num_speculative_tokens": 1,"method": "deepseek_mtp"}' \
--compilation-config '{"cudagraph_mode":"FULL_DECODE_ONLY"}'
echo -e "${GREEN} ✔ 容器启动命令已执行${NC}"
}
# ==========================================
# 5. 服务状态检查函数
# ==========================================
verify_service() {
echo -e "${YELLOW}[4/5] 正在等待服务启动(可能需要几分钟)...${NC}"
# 5.1 检查容器是否在运行
for i in {1..30}; do
if [ "$(docker ps -q -f name=$NAME -f status=running)" ]; then
echo -e "${GREEN} ✔ 容器状态: 运行中${NC}"
break
fi
if [ "$i" -eq 30 ]; then
echo -e "${RED}错误: 容器启动失败或意外退出。查看日志: docker logs $NAME${NC}"
exit 1
fi
sleep 5
done
# 5.2 检查端口和API(模型加载时间较长)
echo -e "${YELLOW}[5/5] 正在检查推理服务 API (模型加载中)...${NC}"
local max_attempts=120 # 120 * 10秒 = 1200秒 = 20分钟
local attempt=0
while [ $attempt -lt $max_attempts ]; do
if curl -s http://localhost:$PORT/v1/models &> /dev/null; then
echo -e ""
echo -e "${GREEN}============================================${NC}"
echo -e "${GREEN} 🎉 vLLM Ascend 推理服务启动成功!${NC}"
echo -e "${GREEN} 容器名: $NAME${NC}"
echo -e "${GREEN} 服务地址: http://localhost:$PORT${NC}"
echo -e "${GREEN} 查看日志: docker logs -f $NAME${NC}"
echo -e "${GREEN}============================================${NC}"
return 0
fi
echo -ne " 等待模型加载... 已等待 $(($attempt * 10 / 60)) 分钟 $(($attempt * 10 % 60)) 秒,最长等待 20 分钟。\r"
sleep 10
attempt=$((attempt + 1))
done
echo -e ""
echo -e "${RED}错误: 服务超时未就绪。请检查日志: docker logs $NAME${NC}"
exit 1
}
# ==========================================
# 主程序执行
# ==========================================
trap 'echo -e "${RED}脚本执行中断${NC}"; exit 1' INT TERM
check_dependencies
cleanup_old_container
start_service
verify_service4.3 服务启动
bash /data/deepseek/start-vllm-ascend.sh五、服务验证与运维
5.1 推理服务验证
curl http://localhost:8006/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model": "deepseek-v4-mtp", "messages": [{"role": "user", "content": "你好"}], "max_tokens": 100}'成功响应示例:
5.2 推理日志查看
若服务异常,可通过日志排查问题,请在容器外部执行以下指令。
5.2.1 查看实时日志(推荐)
docker logs -f vllm-ascend-f 参数可实时跟踪日志输出。
5.2.2 查看历史日志
docker logs vllm-ascend显示容器从启动到当前的全部日志(包括启动时的错误信息)。
六、注意事项
驱动版本:请不要自行更换 910B NPU 驱动版本,避免与硬件固件不兼容导致未知问题。
安全防护:生产环境建议配置安全组 IP 白名单,减少公网暴露面,并通过天翼云 WAF 防护恶意攻击。请勿将 EIP 直接无防护暴露于公网。
七、附录
天翼云 GPU 云主机产品文档:GPU云主机-产品文档-帮助中心 - 天翼云
DeepSeek-V4 910B 适配版模型下载地址:https://www.modelscope.cn/models/Eco-Tech/DeepSeek-V4-Flash-w8a8-mtp
vllm-ascend 启动 deepseek-v4 帮助文档:https://docs.vllm.ai/projects/ascend/en/v0.13.0/tutorials/DeepSeek-V4.html