☰
Day 0 部署:昇腾 910B 上 DeepSeek-V4 的 GPUStack 与 vLLM 配置指南及压测表现
2026/9/26 21:36:04 网站建设 项目流程

1. 昇腾 910B 单机跑 DeepSeek-V4,Day 0 到底难在哪

如果你手上有一台八卡昇腾 910B2 的机器,想第一时间把 DeepSeek-V4 跑起来,大概率会卡在三个地方:驱动和容器运行时对不上、推理引擎版本太旧不认新模型、启动参数里并行策略和量化配置写错导致加载到一半 OOM。DeepSeek-V4 这类超大规模 MoE 模型对底层适配的要求比上一代高不少,混合注意力结构加上 mHC 深层稳定性设计,让它在长上下文和复杂推理上性价比更好,但代价是推理引擎必须跟得上。

这篇就按 Day 0 的节奏来:从驱动检查、GPUStack 控制面安装,到自定义 vLLM Ascend 版本、部署 DeepSeek-V4-Flash-w8a8-mtp,最后跑通健康检查和并发压测。全程给可复制的命令和配置片段,你照着敲就能在当天完成从环境到压测的闭环。适合已经在做国产算力推理落地、手里有 910B 节点、想快速验证 DeepSeek-V4 表现的工程师。文中所有镜像和参数都来自实际部署过程,压测数据也是实测采集,不是纸面推算。

2. 前置准备:驱动、容器运行时与 GPUStack 控制面

2.1 驱动版本与 Ascend Docker Runtime 检查

先在目标节点确认 NPU 驱动版本。执行:

npu-smi info

输出里会显示驱动版本,建议不低于 25.5,否则 DeepSeek-V4 的算子兼容性可能出问题。接着检查 Docker 是否挂上了 Ascend 运行时:

sudo docker info 2>/dev/null | grep -q "ascend" && echo "Ascend Container Toolkit OK" || (echo "Ascend Container Toolkit not configured"; exit 1)

如果输出Ascend Container Toolkit OK,说明容器里能访问 NPU。如果提示未配置,需要装 Ascend Docker Runtime,装完重启 Docker 再验一次。这一步不做,后面 Worker 容器起来也拿不到卡。

2.2 启动 GPUStack Server

GPUStack Server 不依赖 GPU,可以跑在 CPU 节点,也可以直接跑在 910B 节点上。这里以八卡 910B2 为例,直接在本机起 Server:

sudo docker run -d --name gpustack \ --restart unless-stopped \ -p 80:80 \ --volume gpustack-data:/var/lib/gpustack \ swr.cn-south-1.myhuaweicloud.com/gpustack/gpustack:v2.1.2 \ --debug --bootstrap-password GPUStack@123

几个参数值得留意:-p 80:80是对外暴露 Web 控制台,想换端口就改成-p 9999:80;--volume持久化平台数据,包括模型服务、计量和 API Key;--bootstrap-password是 admin 初始密码;--debug开调试日志方便排障。启动后看日志确认:

docker logs -f gpustack

浏览器打开http://<Server主机IP>:80,用admin / GPUStack@123登录,先建一个 Docker 类型集群,后面接节点都归到这个集群下。

2.3 接入昇腾 NPU Worker

在控制台选添加节点,复制系统生成的接入命令,在目标节点执行。这条命令本质是起一个 Worker 容器并自动注册到 Server。接入后验证:

docker logs -f gpustack-worker

控制台里节点状态变成 Ready 就说明通了,设备名称、索引、厂商、温度、利用率、显存这些指标都能正常采集。到这一步,控制面加 NPU 节点就绪,可以开始配推理引擎了。

3. 自定义 vLLM Ascend 版本与 config.toml 骨架

3.1 为什么必须自定义 vLLM 版本

GPUStack 内置的 vLLM 版本通常落后于社区最新发布,而 DeepSeek-V4 需要 vLLM Ascend v0.13.0rc3 才支持。GPUStack 的可插拔引擎架构允许你加自定义后端,指向官方镜像即可。在推理后端菜单编辑 vLLM,添加版本:

配置项值
版本0.13.0rc3
镜像名称quay.io/ascend/vllm-ascend:v0.13.0rc3
框架CANN
覆盖 ENTRYPOINTvllm serve
执行命令{{model_path}} --host {{worker_ip}} --port {{port}} --served-model-name {{model_name}}

执行命令里的{{}}变量是模板占位,别改。也可以切 YAML 模式直接导入:

backend_name: vLLM version_configs: 0.13.0rc3-custom: image_name: quay.io/ascend/vllm-ascend:v0.13.0rc3 entrypoint: vllm serve run_command: >- {{model_path}} --host {{worker_ip}} --port {{port}} --served-model-name {{model_name}} env: {} custom_framework: cann

注意:如果之前已经加过其它自定义版本,导入时要把旧版本一起写进version_configs,否则会被覆盖掉。另外 Worker 节点要能访问 Quay.io,离线环境就提前拉镜像重新 tag,再改 UI 里的镜像地址。

3.2 模型权重准备

联网环境直接在控制台部署菜单选 ModelScope,搜Eco-Tech/DeepSeek-V4-Flash-w8a8-mtp部署。离线环境要提前下好权重分发到 Worker 节点,挂载进 Worker 容器,然后在模型文件菜单选本地路径,填容器内路径,比如/var/lib/gpustack/cache/model_scope/Eco-Tech/DeepSeek-V4-Flash-w8a8-mtp。

3.3 启动参数骨架

部署时后端选 vLLM,版本选0.13.0rc3-custom,GPU 选 8 块 910B2 64GB。后端参数如下,已设 TP8 DP1,确保有八块卡可分配:

--gpu-memory-utilization 0.9 \ --max-model-len 65536 \ --max-num-batched-tokens 8192 \ --max-num-seqs 16 \ --data-parallel-size 1 \ --tensor-parallel-size 8 \ --enable-expert-parallel \ --quantization ascend \ --block-size 128 \ --async-scheduling \ --chat-template /var/lib/gpustack/cache/model_scope/Eco-Tech/DeepSeek-V4-Flash-w8a8-mtp/chat_template.jinja \ --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"}'

环境变量:

USE_MULTI_BLOCK_POOL=1 OMP_PROC_BIND=false OMP_NUM_THREADS=10 PYTORCH_NPU_ALLOC_CONF=expandable_segments:True ACL_OP_INIT_MODE=1 TRITON_ALL_BLOCKS_PARALLEL=1

--chat-template路径要改成你实际的权重路径。--enable-expert-parallel配合 MoE 结构能省显存,--speculative-config开 MTP 投机解码提升吞吐,--compilation-config的 FULL_DECODE_ONLY 让 decode 阶段走图模式。这些参数不是随便堆的,每一项都对应 DeepSeek-V4 的结构特点。

4. 验证请求与压测指标采集

4.1 服务健康检查

模型实例状态显示 Running 后,先做单请求验证。在试验场发一条请求,实测单请求约 31 Tokens/s。这个数字是初始支持下的表现,后续还有优化空间。也可以用 curl 直接打:

curl http://<worker_ip>:<port>/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "DeepSeek-V4-Flash-w8a8-mtp", "messages": [{"role": "user", "content": "用一句话解释混合注意力机制"}], "max_tokens": 128 }'

返回正常就说明服务通了。如果卡住或报错,先看容器日志里模型加载阶段有没有 OOM 或算子不支持。

4.2 并发压测

GPUStack 自带基准测试功能,选吞吐模式一键压测。压测会按不同并发梯度打请求,采集吞吐和延迟。实测下来,八卡 910B2 在 TP8 配置下,吞吐随并发上升有明显爬坡,但到一定并发后延迟开始抬头,这是 MoE 模型专家路由开销的正常表现。压测结果里重点看两个指标:tokens/s 总吞吐和 P99 延迟。前者决定单位时间能服务多少请求,后者决定用户体验下限。

采集时建议固定--max-num-seqs 16不变,只调并发数,这样对比才有意义。如果要做长上下文压测,把输入长度拉到 32K 以上,观察--max-model-len 65536下的显存余量。压测过程中用npu-smi info盯显存和利用率,确认没有掉卡或降频。

5. 本篇常见错排查

启动卡在加载权重:多半是--chat-template路径写错,或者权重没挂进容器。检查容器内路径是否存在,docker exec进去ls一下。

报算子不支持:驱动版本低于 25.5,或者 vLLM Ascend 版本不是 0.13.0rc3。升级驱动,确认镜像 tag 对得上。

OOM:--gpu-memory-utilization 0.9太高,降到 0.85 试试;或者--max-model-len设太大,按实际需求调小。MoE 模型专家并行没开也会导致单卡显存爆掉,确认--enable-expert-parallel在。

Worker 节点一直 Not Ready:Ascend Docker Runtime 没配好,回到 2.1 重新检查。或者节点网络不通,Server 和 Worker 之间端口要能互访。

压测吞吐上不去:--max-num-seqs太小,适当调大;--async-scheduling没开也会限制调度效率。但别盲目调大,要配合显存余量。

镜像拉不动:Quay.io 访问不稳定,提前在能访问的机器拉好,docker save导出再docker load到 Worker,重新 tag 后改 UI 镜像地址。

6. 统一 Key 通道与后续接入

Day 0 把模型跑起来只是第一步,后面要接应用、做 Agent、跑长期编码任务,Key 和 API 通道的管理会变成新问题。TaoToken 提供统一的 Key 和 API 通道,省去每个模型单独配一套鉴权的麻烦。如果你在排障或接入阶段需要统一管理密钥,可以看 API Keys 页面和接入文档;想先验证模型对话效果,直接进模型对话;如果是长期编码或 Agent 场景,Coding Plan 更合适。

  • 模型对话:https://taotoken.net/api?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=model_chat
  • Coding Plan:https://taotoken.net/api?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=coding_plan
  • 控制台:https://taotoken.net/api?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=console
  • API Keys:https://taotoken.net/api?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=api_keys
  • 接入文档:https://taotoken.net/api?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=doc
  • ClaudeCodeAnthropic:https://taotoken.net/api?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=claudecode

实际部署时,我习惯先把单请求跑通再上压测,别一上来就并发打满,不然出问题分不清是配置错还是压力大。压测数据采集完记得存一份基线,后面调参才有对照。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询