跳转至

vLLM 昇腾(Ascend)DeepSeek-V4 部署ヾ(•ω•`)o

本文档说明如何在昇腾(Ascend 910C / A3)服务器上,通过 vLLM Ascend 部署和服务 DeepSeek-V4-Flash(DSpark,w8a8 量化) 等大模型。文中主机名、IP、路径、容器名均为**示例**,请按实际环境替换。


1. 环境信息ヾ(•ω•`)o

值(示例)
主机昇腾 910C / A3 级服务器
NPU16 × Ascend 910,64GB HBM/片(davinci0–15)
驱动25.5.0
本机 IP10.123.4.76(示例,替换为实际 IP)
API 地址http://<HOST_IP>:8000/v1(OpenAI 兼容)
防火墙放行服务端口 8000/tcp(firewalld)

2. 镜像要求(关键)ヾ(•ω•`)o

  • A3(910C)必须使用 -a3 后缀镜像,否则启动报设备类型不匹配 AssertionError 而失败。
  • DSpark 需要 vLLM Ascend v0.25.0+(低版本如 0.22.x 不支持 DSpark)。
镜像用途
quay.io/ascend/vllm-ascend:v0.22.x-a3通用模型(如 Qwen 系列,vLLM 0.22.x)
quay.io/ascend/vllm-ascend:DeepSeekV4-flash-<date>-a3DeepSeek-V4-Flash DSpark(vLLM 0.25.x)

3. 部署ヾ(•ω•`)o

3.1 服务信息(示例)ヾ(•ω•`)o

模型DeepSeek-V4-Flash-<date>-w8a8(DSpark,w8a8 量化)
模型路径/<data-dir>/<MODEL_DIR>/snapshots/master/
镜像quay.io/ascend/vllm-ascend:DeepSeekV4-flash-<date>-a3
并行16 卡全用(DP4 × TP4 + 专家并行)
端口8000,模型名 deepseek-v4-flash

3.2 启动服务(部署模板)ヾ(•ω•`)o

#!/bin/bash
# DeepSeek-V4-Flash-0731-w8a8 A3 单节点部署脚本(v0.23.0-a3 版本)
# 基于用户指定参数组合
# ============================================================
set -e

IMAGE=quay.io/ascend/vllm-ascend:nightly-releases-v0.25.1rc-a3
MODEL_DIR=/data2/Eco-Tech--DeepSeek-V4-Flash-0731-w8a8
PORT=8000
CONTAINER=ds-v4-flash-0731-w8a8

# 幂等启动:若同名旧容器已存在则先移除,保证脚本可重复执行
docker rm -f ${CONTAINER} >/dev/null 2>&1 || true

docker run -d \
  --name ${CONTAINER} \
  --network host \
  --shm-size=512g \
  --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/davinci8 \
  --device /dev/davinci9 \
  --device /dev/davinci10 \
  --device /dev/davinci11 \
  --device /dev/davinci12 \
  --device /dev/davinci13 \
  --device /dev/davinci14 \
  --device /dev/davinci15 \
  --device /dev/davinci_manager \
  --device /dev/devmm_svm \
  --device /dev/hisi_hdc \
  -v /usr/local/dcmi:/usr/local/dcmi \
  -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
  -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 ${MODEL_DIR}:/model \
  -e OMP_PROC_BIND=false \
  -e OMP_NUM_THREADS=10 \
  -e PYTORCH_NPU_ALLOC_CONF=expandable_segments:True \
  -e LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libjemalloc.so.2 \
  -e HCCL_BUFFSIZE=1024 \
  -e TASK_QUEUE_ENABLE=1 \
  -e HCCL_OP_EXPANSION_MODE=AIV \
  ${IMAGE} vllm serve /model/snapshots/master \
    --max-model-len 1048576 \
    --max-num-batched-tokens 10240 \
    --served-model-name deepseek-v4-flash \
    --gpu-memory-utilization 0.9 \
    --max-num-seqs 64 \
    --data-parallel-size 4 \
    --tensor-parallel-size 4 \
    --enable-expert-parallel \
    --tokenizer-mode deepseek_v4 \
    --tool-call-parser deepseek_v4 \
    --enable-auto-tool-choice \
    --reasoning-parser deepseek_v4 \
    --enable-prefix-caching \
    --model-loader-extra-config='{"enable_multithread_load": true, "num_threads": 128}' \
    --quantization ascend \
    --port ${PORT} \
    --block-size 128 \
    --speculative-config '{"method":"dspark","num_speculative_tokens":7,"enforce_eager":true}' \
    --compilation-config '{"cudagraph_mode": "FULL_DECODE_ONLY"}' \
    --async-scheduling \
    --additional-config '{"ascend_compilation_config":{"enable_npugraph_ex":true,"enable_static_kernel":false},"enable_cpu_binding":true,"enable_dsa_cp":true,"enable_flashcomm1":true,"multistream_overlap_shared_expert":true}'

3.3 关键环境变量 / 参数优化(已验证)ヾ(•ω•`)o

说明
HCCL_BUFFSIZE=1024DSpark 专家并行必须,否则报 HCCL_BUFFSIZE_EP too SMALL
VLLM_ASCEND_ENABLE_FUSED_MC2=1mega_moe 融合通信(W8A8 MoE 优化)
VLLM_ASCEND_ENABLE_FLASHCOMM1=1FlashComm1 通信优化
OMP_PROC_BIND=false / OMP_NUM_THREADS=10关闭 CPU 绑核 / 设置线程数
PYTORCH_NPU_ALLOC_CONF=expandable_segments:TrueNPU 显存可扩展段,缓解碎片
LD_PRELOAD=.../libjemalloc.so.2内存分配优化(需镜像内存在)
--no-disable-hybrid-kv-cache-manager混合 KV 缓存管理器(DeepSeek-V4 必须,否则启动可能 OOM)
--async-scheduling异步调度,提升并发吞吐
--enable-prefix-caching前缀缓存(与混合注意力配合)
--gpu-memory-utilization 0.85~0.9给 KV Cache 留余量,防 HBM 满载重计算
--enable-expert-parallelMoE 专家并行(如 256 专家 / 16 rank)
--speculative-config dspark:7DSpark 投机解码(7 tokens,配合 enforce_eager
--compilation-config FULL_DECODE_ONLYDecode 阶段 ACL 图执行
--quantization ascendW8A8 量化加载

说明:计算卡 davinci<N> 按实际数量逐一挂载(16 卡为 davinci0–15);--tokenizer-mode deepseek_v4--tool-call-parser deepseek_v4--enable-auto-tool-choice--reasoning-parser deepseek_v4 为 DeepSeek-V4 专用参数,按模型需要加回。

4. 调用 APIヾ(•ω•`)o

4.1 cURLヾ(•ω•`)o

curl http://<HOST_IP>:8000/v1/models

curl http://<HOST_IP>:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model": "deepseek-v4-flash",
       "messages": [{"role": "user", "content": "Who are you?"}],
       "max_tokens": 256, "temperature": 0}'

4.2 OpenAI SDK(Python)ヾ(•ω•`)o

from openai import OpenAI

client = OpenAI(base_url="http://<HOST_IP>:8000/v1", api_key="EMPTY")
resp = client.chat.completions.create(
    model="deepseek-v4-flash",              # 与 --served-model-name 一致
    messages=[{"role": "user", "content": "你好"}],
)
print(resp.choices[0].message.content)

5. 运维命令ヾ(•ω•`)o

docker ps --filter name=<CONTAINER>   # 查看容器
docker logs -f <CONTAINER>            # 查看实时日志
docker rm -f <CONTAINER>              # 停止并删除容器
bash /path/to/run_<model>.sh          # (重新)启动

注意:多模型共用同一端口时**不能同时运行**,切换前先停止当前容器;不同模型可分别指定端口同时运行。

6. 排障要点(踩坑记录)ヾ(•ω•`)o

  1. 镜像 A3 匹配:A3(910C)必须用 -a3 后缀镜像,否则启动报 AssertionError 设备类型不匹配。
  2. DSpark 必须 HCCL_BUFFSIZE=1024:否则 MoE 专家并行报 HCCL_BUFFSIZE_EP too SMALL ... NEEDED 557MB,引擎初始化失败。
  3. 不要设 HCCL_IF_BASE_PORT=65536:65536 是无效端口,会导致 TCPStore recvValueWithTimeout 超时、worker 崩溃;不设该变量让 vLLM 自动管理即可。
  4. DSpark 需要 v0.25.0+ 镜像:低版本(如 0.22.x)不支持 DSpark。
  5. 确保 vllm serve 各参数书写正确,多余的换行/续行被 vLLM 误吞会导致参数失效。
  6. 该版本不识别 --disable-log-requests,如报未知参数可去除。
  7. 多卡部署前需确认 NPU 全部空闲(triton 等容器占用会冲突)。
  8. 如需限制访问来源,可仅对指定 IP 开放防火墙端口。

评论