昇腾910B/910C 多模态模型私有化部署实战:11 个模型 + Nginx 统一 API 网关
昇腾910B/910C 多模态模型私有化部署实战:11 个模型 + Nginx 统一 API 网关
摘要:本文分享一套基于昇腾 910B ×32 + 910C ×16 的多模态模型私有化部署方案,覆盖 LLM、视觉理解、文生视频、文生音频/音乐、语音识别与 RAG 组件共 11 个模型,每个模型单实例部署,推理框架直接暴露 API,通过 Nginx 统一网关对外提供服务。含节点资源分配、Docker 昇腾运行时配置、逐模型部署命令、网关路由与排障清单,可直接照抄落地。
一、部署目标与总体方案
1.1 部署目标
在私有化环境中完成 LLM 与多模态(文生视频、文生音频/音乐、语音识别、视觉理解、RAG 组件)模型的推理服务部署,并通过 Nginx 统一 API 网关对外提供服务。由于多模态接口(视频 / 音频 / 语音)需要自建推理服务,本文方案将全部模型服务统一自建、单实例部署,不依赖任何外部模型管理平台。
1.2 硬件资源清单
| 芯片型号 | 数量 | 单卡显存 | FP16 算力 | 折合服务器 |
|---|---|---|---|---|
| 昇腾 910B | 32 张 | 64GB HBM2e | ~320 TFLOPS | 4 台 × 8 卡 |
| 昇腾 910C | 16 张 | 96GB HBM2e | ~500 TFLOPS | 2 台 × 8 卡 |
1.3 覆盖模型
| 类型 | 模型 |
|---|---|
| LLM | DeepSeek-V4 Flash、Qwen3.8-27B |
| 视觉理解 | InternVL2.5-78B |
| 文生视频 | MiniMax H3、Wan2.2、Step-Video-T2V、Open-Sora Plan V1.5(备选) |
| 文生音频/音乐 | Ming-Flash-Omni 2.0、Step-Audio 2 mini |
| 语音识别 | Whisper-large-v3 |
| RAG 组件 | BGE-M3、BGE-Reranker-v2-m3 |
1.4 部署原则
- 单实例:每个模型单实例部署,空余 NPU 资源加载不同模型,不搞同模型多实例负载均衡;
- 原生 API:各模型推理框架(vLLM / SGLang)直接暴露 HTTP API,通过 Nginx 统一网关对外服务;
- 大卡跑大模型:910C(96GB)分配给最吃显存的视频模型和主力 LLM,910B(64GB)分配给音频、轻量 LLM 和备选模型。
二、整体架构与资源分配
2.1 节点分配总览
| 节点 | 硬件 | 部署模型 | 用途 | 推理引擎 |
|---|---|---|---|---|
| Node-1 | 8×910C | MiniMax H3 | 主力文生视频(2K/15秒/音画同步) | SGLang / vLLM-Omni |
| Node-2 | 8×910C | DeepSeek-V4 Flash | 主力 LLM(高并发推理) | vLLM Ascend |
| Node-3 | 8×910B | Wan2.2 + Open-Sora Plan | 备选视频模型(分时复用) | vLLM-Omni × MindIE |
| Node-4 | 8×910B | Qwen3.8-27B(2卡)+ InternVL2.5-78B(6卡) | 轻量 LLM + 视觉理解/OCR | vLLM Ascend |
| Node-5 | 8×910B | Ming-Flash-Omni(4卡)+ Whisper(2卡)+ BGE-M3(1卡)+ BGE-Reranker(1卡) | 音乐生成 + 语音识别 + RAG 组件 | vLLM / MIS-TEI |
| Node-6 | 8×910B | Step-Video-T2V(6卡)+ Step-Audio(2卡)+ Nginx 网关 | 备选视频 + TTS + 统一 API 网关 | CANN 原生 / Nginx |
2.2 分配逻辑
- 910C(96GB 大显存)→ MiniMax H3 视频模型、DeepSeek-V4 Flash 主力 LLM;
- 910B(64GB)→ 音频模型、轻量 LLM、备选视频模型;
- Qwen3.8-27B 量化后仅约 17GB,2 卡即可运行,空余 6 卡部署 InternVL2.5-78B;
- Node-5 空余 4 卡部署 Whisper 与 BGE Embedding / Rerank 等 RAG 配套模型;
- Open-Sora Plan 与 Wan2.2 分时复用 Node-3,不同时运行。
2.3 API 服务层架构
各模型推理框架直接暴露 HTTP API,通过 Nginx 统一网关(Node-6)按路径路由到对应模型后端:
客户端应用
│
▼
Nginx 统一网关(Node-6)
│ 按路径路由
├── /v1/chat/deepseek/ → DSV4 Flash (Node-2:8000)
├── /v1/chat/qwen/ → Qwen3.8-27B (Node-4:8001)
├── /v1/vision/internvl/→ InternVL2.5-78B (Node-4:8002)
├── /v1/video/minimax/ → MiniMax H3 (Node-1:8500)
├── /v1/video/wan/ → Wan2.2 (Node-3:8600)
├── /v1/video/step/ → Step-Video (Node-6:8700)
├── /v1/audio/ming/ → Ming-Flash-Omni (Node-5:8800)
├── /v1/audio/step/ → Step-Audio (Node-6:8900)
├── /v1/audio/whisper/ → Whisper-large-v3 (Node-5:9000)
├── /v1/embedding/bge/ → BGE-M3 (Node-5:9100)
└── /v1/rerank/bge/ → BGE-Reranker (Node-5:9200)
三、环境准备
3.1 操作系统与基础软件
| 组件 | 推荐版本 | 说明 |
|---|---|---|
| 操作系统 | openEuler 22.03 LTS / Ubuntu 22.04 | 鲲鹏 CPU 推荐 openEuler;x86 可用 Ubuntu |
| 昇腾驱动 | 25.5.0 | 与 CANN 8.5 匹配 |
| CANN | 8.5(商用版) | 华为异构计算架构,所有部署的基础 |
| torch_npu | 对应 CANN 8.5 的版本 | PyTorch 昇腾插件 |
| Docker | 24.0+ | 容器化部署 |
| Python | 3.10 | 推理框架兼容最佳 |
⚠️ 版本对齐警告:驱动、CANN、torch_npu、推理框架四者版本必须严格匹配。CANN 8.5 对应驱动 25.5.0,版本不匹配会导致算子加载失败或运行时崩溃。
3.2 验证昇腾环境
在每台服务器上执行:
# 查看 NPU 设备信息(预期能看到 8 张昇腾芯片,状态 OK,显存正常)
npu-smi info
# 验证 CANN 安装
source /usr/local/Ascend/ascend-toolkit/set_env.sh
python3 -c "import torch; import torch_npu; print('torch_npu version:', torch_npu.__version__); print('NPU available:', torch.npu.is_available())"
# 预期输出:torch_npu 版本号 + NPU available: True
3.3 Docker 与昇腾容器运行时
安装 Ascend Docker Runtime(使容器能访问 NPU),然后验证:
docker run --rm --device=/dev/davinci0 --device=/dev/davinci_manager \
--device=/dev/devmm_svm --device=/dev/hisi_hdc \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/Ascend/add-ons/:/usr/local/Ascend/add-ons/ \
ascendai/ascend-pytorch:24.0.RC1-ubuntu22.04 \
bash -c "npu-smi info"
3.4 模型权重存储规划
所有模型权重统一存放在共享存储或各节点本地 /data/models/ 目录下:
/data/models/
├── llm/
│ ├── DeepSeek-V4-Flash-w8a8-mtp/
│ └── Qwen3.8-27B-Instruct/
├── vlm/
│ └── InternVL2_5-78B/
├── video/
│ ├── MiniMax-H3/
│ ├── Wan2.2-T2V-14B/
│ └── Step-Video-T2V-30B/
├── audio/
│ ├── Ming-Flash-Omni-2.0/
│ ├── Step-Audio-2-mini/
│ └── whisper-large-v3/
├── embedding/
│ ├── bge-m3/
│ └── bge-reranker-v2-m3/
└── opensora/
└── Open-Sora-Plan-v1.5/
四、LLM 模型部署
4.1 DeepSeek-V4 Flash 部署(Node-2,8×910C)
模型信息
| 项目 | 详情 |
|---|---|
| 架构 | MoE,总参数 304B(0731 版),激活参数 13B |
| 上下文 | 1M Token |
| 推荐量化 | W8A8 + MTP 投机解码版(DeepSeek-V4-Flash-w8a8-mtp) |
| 单卡显存 | 约 48-52GB(W8A8),910C 96GB 余量充足 |
| 推理性能 | 910B 单并发约 35 token/s;910C 更高 |
获取模型权重
python3 -c "
from modelscope import snapshot_download
snapshot_download('deepseek-ai/DeepSeek-V4-Flash-w8a8-mtp', cache_dir='/data/models/llm')
"
启动服务(8 卡 TP)
docker run -d \
--name deepseek-v4-flash \
--restart unless-stopped \
-p 8000:8000 \
--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 /data/models/llm/DeepSeek-V4-Flash-w8a8-mtp:/model \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/Ascend/add-ons/:/usr/local/Ascend/add-ons/ \
-e ASCEND_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 \
-e VLLM_USE_V1=1 \
vllm/vllm-ascend:v0.13.0rc3 \
--model /model \
--served-model-name deepseek-v4-flash \
--host 0.0.0.0 --port 8000 \
--tensor-parallel-size 8 \
--max-model-len 131072 \
--gpu-memory-utilization 0.85 \
--trust-remote-code \
--dtype float16 \
--enable-mtp \
--mtp-num-draft-layers 3
验证
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model": "deepseek-v4-flash", "messages": [{"role": "user", "content": "你好,请介绍一下你自己"}], "max_tokens": 200, "stream": true}'
✅ 成功标志:日志中出现
Application startup complete,API 调用返回正常 JSON(含choices[0].message.content)。
4.2 Qwen3.8-27B 部署(Node-4,卡 0-1)
Qwen3.8-27B 是 27B 稠密原生多模态模型,INT4 量化后仅约 17GB,2 张 910B 即可稳定运行,剩余 6 卡用于 InternVL2.5-78B。
# 获取权重
python3 -c "
from modelscope import snapshot_download
snapshot_download('Qwen/Qwen3.8-27B-Instruct', cache_dir='/data/models/llm')
"
# 启动单实例(2 卡 TP)
docker run -d \
--name qwen38-27b \
--restart unless-stopped \
-p 8001:8000 \
--device=/dev/davinci0 --device=/dev/davinci1 \
--device=/dev/davinci_manager --device=/dev/devmm_svm --device=/dev/hisi_hdc \
-v /data/models/llm/Qwen3.8-27B-Instruct:/model \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/Ascend/add-ons/:/usr/local/Ascend/add-ons/ \
-e ASCEND_VISIBLE_DEVICES=0,1 \
vllm/vllm-ascend:v0.13.0rc3 \
--model /model \
--served-model-name qwen3.8-27b \
--host 0.0.0.0 --port 8000 \
--tensor-parallel-size 2 \
--max-model-len 32768 \
--gpu-memory-utilization 0.9 \
--trust-remote-code \
--quantization awq \
--dtype float16
验证
curl http://localhost:8001/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model": "qwen3.8-27b", "messages": [{"role": "user", "content": "写一个快速排序的 Python 函数"}], "max_tokens": 500}'
4.3 InternVL2.5-78B 部署(Node-4,卡 2-7)
InternVL2.5-78B 是上海人工智能实验室开源的 78B 视觉语言模型,支持图文理解、OCR 文字识别、文档/表格/图表分析、多图推理和 Grounding 定位。昇腾 ModelZoo 官方适配,BF16 全量约 156GB,6 张 910B 张量并行可稳定运行。
# 获取权重(或从昇腾 ModelZoo 下载适配版本)
python3 -c "
from huggingface_hub import snapshot_download
snapshot_download('OpenGVLab/InternVL2_5-78B', local_dir='/data/models/vlm/InternVL2_5-78B')
"
# 启动(6 卡 TP)
docker run -d \
--name internvl2-78b \
--restart unless-stopped \
-p 8002:8000 \
--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 /data/models/vlm/InternVL2_5-78B:/model \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/Ascend/add-ons/:/usr/local/Ascend/add-ons/ \
-e ASCEND_VISIBLE_DEVICES=2,3,4,5,6,7 \
vllm/vllm-ascend:v0.13.0rc3 \
--model /model \
--served-model-name internvl2.5-78b \
--host 0.0.0.0 --port 8000 \
--tensor-parallel-size 6 \
--max-model-len 8192 \
--gpu-memory-utilization 0.85 \
--trust-remote-code \
--dtype bfloat16 \
--limit-mm-per-prompt image=4
验证(图文理解)
curl http://localhost:8002/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model": "internvl2.5-78b", "messages": [{"role": "user", "content": [{"type": "text", "text": "请描述这张图片的内容"}, {"type": "image_url", "image_url": {"url": "https://example.com/test.jpg"}}]}], "max_tokens": 500}'
五、文生视频模型部署
5.1 MiniMax H3 部署(Node-1,8×910C)—— 主力视频模型
模型信息
| 项目 | 详情 |
|---|---|
| 架构 | 33B 全模态视频生成模型(H3-Context-IR + H3-Base + H3-Regenerate-2K) |
| 能力 | 文生视频、图生视频、视频编辑、V2V 动作迁移;原生立体声同步生成 |
| 规格 | 最高 2K 分辨率,最长 15 秒,24fps |
| 昇腾适配 | 开源当日 0Day 适配,Atlas 800 A3 (910C) / A2 (910B) 稳定运行 |
| 性能排名 | Artificial Analysis 有声视频编辑全球第一(Elo 1130) |
# 获取权重
python3 -c "
from huggingface_hub import snapshot_download
snapshot_download('MiniMaxAI/H3-Base', local_dir='/data/models/video/MiniMax-H3')
"
# 使用 SGLang 部署(推荐)
docker run -d \
--name minimax-h3 \
--restart unless-stopped \
-p 8500:30000 \
--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 /data/models/video/MiniMax-H3:/model \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/Ascend/add-ons/:/usr/local/Ascend/add-ons/ \
-e ASCEND_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 \
lmsysorg/sglang:latest \
python3 -m sglang.launch_server \
--model-path /model \
--served-model-name minimax-h3 \
--host 0.0.0.0 \
--port 30000 \
--tensor-parallel-size 8 \
--trust-remote-code \
--dtype bfloat16 \
--mem-fraction-static 0.85
验证
curl http://localhost:8500/v1/videos/generations \
-H "Content-Type: application/json" \
-d '{"model": "minimax-h3", "prompt": "一只猫在阳光下打盹,镜头缓慢推进", "num_frames": 81, "width": 1280, "height": 720, "num_inference_steps": 20}' \
--output output.mp4
生成耗时参考:720P/5秒/30步 ≈ 2-4 分钟;2K/15秒 ≈ 8-15 分钟。
5.2 Wan2.2 部署(Node-3,8×910B)
Wan2.2-T2V-14B 是阿里通义万相开源的 14B DiT 文生视频模型,指令遵循强,支持运镜控制。vLLM-Omni × MindIE SD 在昇腾上性能提升 2.4 倍。
docker run -d \
--name wan22 \
--restart unless-stopped \
-p 8600:8000 \
--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 /data/models/video/Wan2.2-T2V-14B:/model \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/Ascend/add-ons/:/usr/local/Ascend/add-ons/ \
-e ASCEND_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 \
vllm/vllm-omni-ascend:latest \
--model /model \
--served-model-name wan2.2 \
--host 0.0.0.0 --port 8000 \
--tensor-parallel-size 8 \
--trust-remote-code \
--dtype bfloat16 \
--gpu-memory-utilization 0.85
5.3 Step-Video-T2V 部署(Node-6,卡 0-5)
Step-Video-T2V-30B 是阶跃星辰开源的 30B 文生视频模型,基于华为昇腾 CANN 完成适配,魔乐社区上架。占用 Node-6 的 6 张卡,剩余 2 卡部署 Step-Audio。
docker run -d \
--name step-video \
--restart unless-stopped \
-p 8700:8000 \
--device=/dev/davinci0 --device=/dev/davinci1 --device=/dev/davinci2 \
--device=/dev/davinci3 --device=/dev/davinci4 --device=/dev/davinci5 \
--device=/dev/davinci_manager --device=/dev/devmm_svm --device=/dev/hisi_hdc \
-v /data/models/video/Step-Video-T2V-30B:/model \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/Ascend/add-ons/:/usr/local/Ascend/add-ons/ \
-e ASCEND_VISIBLE_DEVICES=0,1,2,3,4,5 \
stepfun/step-video-ascend:latest \
--model /model \
--served-model-name step-video \
--host 0.0.0.0 --port 8000 \
--tensor-parallel-size 6 \
--trust-remote-code \
--dtype float16
5.4 Open-Sora Plan V1.5(备选,分时复用 Node-3)
Open-Sora Plan V1.5 是行业首个 100% 基于昇腾架构的视觉生成模型,昇腾上性能最优。与 Wan2.2 分时复用 Node-3,不同时运行:
# 停止 Wan2.2
docker stop wan22
# 启动 Open-Sora
cd /data/models/opensora/Open-Sora-Plan-v1.5
bash scripts/inference.sh --config configs/opensora-v1-5/inference.py --prompt "测试视频"
六、文生音频 / 语音与 RAG 组件部署
6.1 Ming-Flash-Omni 2.0 部署(Node-5,卡 0-3,4 卡)—— 主力音乐/音频模型
模型信息
| 项目 | 详情 |
|---|---|
| 定位 | 业界首个全场景音频统一生成模型(蚂蚁百灵) |
| 能力 | 同一条音轨同时生成语音 + 环境音效 + 音乐;自然语言控制音色、语速、语调、音量、情绪、方言 |
| 规格 | 推理帧率 3.1Hz,可生成分钟级音频 |
| 昇腾生态 | 同家族 Ling-3.0-flash 获昇腾 0Day 适配,配套官方标准化部署方案 |
docker run -d \
--name ming-flash-omni \
--restart unless-stopped \
-p 8800:8000 \
--device=/dev/davinci0 --device=/dev/davinci1 --device=/dev/davinci2 --device=/dev/davinci3 \
--device=/dev/davinci_manager --device=/dev/devmm_svm --device=/dev/hisi_hdc \
-v /data/models/audio/Ming-Flash-Omni-2.0:/model \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/Ascend/add-ons/:/usr/local/Ascend/add-ons/ \
-e ASCEND_VISIBLE_DEVICES=0,1,2,3 \
vllm/vllm-ascend:v0.13.0rc3 \
--model /model \
--served-model-name ming-flash-omni \
--host 0.0.0.0 --port 8000 \
--tensor-parallel-size 4 \
--trust-remote-code \
--dtype bfloat16 \
--gpu-memory-utilization 0.8 \
--max-model-len 8192
API 调用示例
# 音乐生成
curl http://localhost:8800/v1/audio/music \
-H "Content-Type: application/json" \
-d '{"model":"ming-flash-omni","prompt":"轻快的钢琴曲,适合咖啡厅背景","duration":30}' \
--output music.wav
# 语音生成
curl http://localhost:8800/v1/audio/speech \
-H "Content-Type: application/json" \
-d '{"model":"ming-flash-omni","input":"你好,欢迎使用智能语音服务","voice":"female_calm"}' \
--output speech.wav
6.2 Step-Audio 2 mini 部署(Node-6,卡 6-7)
模型信息
| 项目 | 详情 |
|---|---|
| 定位 | 行业首个产品级开源端到端语音交互模型 |
| 能力 | 情绪、方言、语种、歌声、个性化风格;高质量音色复刻;连续对话+打断处理 |
| 架构 | 端到端多模态,语音理解+音频推理+生成统一建模 |
| 昇腾支持 | 基于 CANN 完成适配,魔乐社区上架 |
docker run -d \
--name step-audio \
--restart unless-stopped \
-p 8900:8000 \
--device=/dev/davinci6 --device=/dev/davinci7 \
--device=/dev/davinci_manager --device=/dev/devmm_svm --device=/dev/hisi_hdc \
-v /data/models/audio/Step-Audio-2-mini:/model \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/Ascend/add-ons/:/usr/local/Ascend/add-ons/ \
-e ASCEND_VISIBLE_DEVICES=6,7 \
stepfun/step-audio-ascend:latest \
--model /model \
--served-model-name step-audio \
--host 0.0.0.0 --port 8000 \
--tensor-parallel-size 2 \
--trust-remote-code \
--dtype float16
6.3 Whisper-large-v3 部署(Node-5,卡 4-5)
Whisper-large-v3 是 OpenAI 开源的多语言语音识别模型,支持 99 种语言的语音转文字和翻译。昇腾有 Atomgit-Ascend 官方优化版,支持 CANN 8.0+,提供 OpenAI Whisper API 兼容接口。2 张 910B 可支撑大 batch 并发和长音频处理。
# 获取权重(或使用昇腾优化版:https://ai.gitcode.com/atomgit-ascend/whisper-large-v3-turbo)
python3 -c "
from huggingface_hub import snapshot_download
snapshot_download('openai/whisper-large-v3', local_dir='/data/models/audio/whisper-large-v3')
"
# 启动(2 卡)
docker run -d \
--name whisper-large-v3 \
--restart unless-stopped \
-p 9000:9000 \
--device=/dev/davinci4 --device=/dev/davinci5 \
--device=/dev/davinci_manager --device=/dev/devmm_svm --device=/dev/hisi_hdc \
-v /data/models/audio/whisper-large-v3:/model \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/Ascend/add-ons/:/usr/local/Ascend/add-ons/ \
-e ASCEND_VISIBLE_DEVICES=4,5 \
-e MODEL_PATH=/model \
-e PORT=9000 \
atomgit-ascend/whisper-large-v3:latest \
python3 server.py --model /model --host 0.0.0.0 --port 9000 --device npu
验证
curl http://localhost:9000/v1/audio/transcriptions \
-H "Content-Type: multipart/form-data" \
-F "file=@test_audio.wav" \
-F "model=whisper-large-v3" \
-F "language=zh" \
-F "response_format=json"
6.4 BGE-M3 Embedding 部署(Node-5,卡 6)
BGE-M3 是智源 BAAI 开源的多语言 Embedding 模型,支持 100+ 语言,提供稠密/稀疏/多向量三种模式,最大上下文 8192。单张 910B 即可轻松运行,可支撑数百 QPS 的向量化请求,是 RAG 系统的核心组件。
# 获取权重
python3 -c "
from huggingface_hub import snapshot_download
snapshot_download('BAAI/bge-m3', local_dir='/data/models/embedding/bge-m3')
"
# 启动(1 卡,MIS-TEI)
docker run -d \
--name bge-m3 \
--restart unless-stopped \
-p 9100:8080 \
--device=/dev/davinci6 \
--device=/dev/davinci_manager --device=/dev/devmm_svm --device=/dev/hisi_hdc \
-v /data/models/embedding/bge-m3:/model \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/Ascend/add-ons/:/usr/local/Ascend/add-ons/ \
-e ASCEND_VISIBLE_DEVICES=6 \
-e MODEL_ID=/model \
-e MAX_BATCH_TOKENS=8192 \
mis-tek/tei-ascend:latest
验证
curl http://localhost:9100/v1/embeddings \
-H "Content-Type: application/json" \
-d '{"model": "bge-m3", "input": ["你好世界", "Hello World"]}'
6.5 BGE-Reranker-v2-m3 部署(Node-5,卡 7)
BGE-Reranker-v2-m3 是智源 BAAI 开源的多语言重排序模型,用于 RAG 系统中对初筛结果精排,显著提升检索准确率。单张 910B 即可运行,与 BGE-M3 配合构成完整 RAG 检索增强链路。
# 获取权重
python3 -c "
from huggingface_hub import snapshot_download
snapshot_download('BAAI/bge-reranker-v2-m3', local_dir='/data/models/embedding/bge-reranker-v2-m3')
"
# 启动(1 卡,MIS-TEI)
docker run -d \
--name bge-reranker \
--restart unless-stopped \
-p 9200:8080 \
--device=/dev/davinci7 \
--device=/dev/davinci_manager --device=/dev/devmm_svm --device=/dev/hisi_hdc \
-v /data/models/embedding/bge-reranker-v2-m3:/model \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/Ascend/add-ons/:/usr/local/Ascend/add-ons/ \
-e ASCEND_VISIBLE_DEVICES=7 \
-e MODEL_ID=/model \
mis-tek/tei-ascend:latest
验证
curl http://localhost:9200/rerank \
-H "Content-Type: application/json" \
-d '{"model": "bge-reranker-v2-m3", "query": "什么是昇腾910?", "documents": ["昇腾910是华为自研的AI训练芯片", "今天天气很好", "昇腾910B支持64GB HBM2e显存"]}'
七、统一 API 网关部署
7.1 架构说明
本方案不引入额外的模型管理平台,各模型推理框架(vLLM Ascend、vLLM-Omni、SGLang)直接启动 HTTP API Server 暴露服务。在 Node-6 部署 Nginx 作为统一入口,按请求路径路由到对应模型后端。LLM 接口天然兼容 OpenAI 格式,视频和音频生成接口按各推理框架原生格式暴露。
💡 为什么不用 GPUStack:GPUStack 适合需要 Web UI、多租户、模型自动调度的场景。如果只需要部署模型并提供 API,直接用各推理框架自带的 API Server + Nginx 反向代理更轻量,减少一层依赖和性能开销,排障也更直接。
7.2 各模型 API 端口汇总
| 模型 | 节点 | 端口 | API 路径 | 接口格式 |
|---|---|---|---|---|
| DeepSeek-V4 Flash | Node-2 | 8000 | /v1/chat/completions | OpenAI 兼容 |
| Qwen3.8-27B | Node-4 | 8001 | /v1/chat/completions | OpenAI 兼容 |
| InternVL2.5-78B | Node-4 | 8002 | /v1/chat/completions(多模态) | OpenAI 兼容 |
| MiniMax H3 | Node-1 | 8500 | /v1/videos/generations | SGLang 原生 |
| Wan2.2 | Node-3 | 8600 | /v1/videos/generations | vLLM-Omni 原生 |
| Step-Video-T2V | Node-6 | 8700 | /v1/videos/generations | 框架原生 |
| Ming-Flash-Omni | Node-5 | 8800 | /v1/audio/music, /v1/audio/speech | vLLM 扩展 |
| Step-Audio | Node-6 | 8900 | /v1/audio/speech | 框架原生 |
| Whisper-large-v3 | Node-5 | 9000 | /v1/audio/transcriptions | OpenAI 兼容 |
| BGE-M3 | Node-5 | 9100 | /v1/embeddings | OpenAI 兼容 |
| BGE-Reranker-v2-m3 | Node-5 | 9200 | /rerank | Cohere 兼容 |
7.3 Nginx 部署与配置
在 Node-6 上使用 Docker 运行 Nginx 容器作为统一入口:
docker run -d \
--name ai-gateway \
--restart unless-stopped \
--network host \
-v /opt/ai-gateway/nginx.conf:/etc/nginx/nginx.conf:ro \
nginx:1.25-alpine
创建 /opt/ai-gateway/nginx.conf(将 Node-X-IP 替换为各节点实际内网 IP):
worker_processes auto;
events { worker_connections 4096; }
http {
upstream llm_deepseek {
server Node-2-IP:8000 max_fails=3 fail_timeout=30s;
keepalive 32;
}
upstream llm_qwen {
server Node-4-IP:8001 max_fails=3 fail_timeout=30s;
keepalive 32;
}
upstream vision_internvl {
server Node-4-IP:8002 max_fails=3 fail_timeout=30s;
keepalive 16;
}
upstream video_minimax {
server Node-1-IP:8500 max_fails=3 fail_timeout=30s;
}
upstream video_wan {
server Node-3-IP:8600 max_fails=3 fail_timeout=30s;
}
upstream video_step {
server Node-6-IP:8700 max_fails=3 fail_timeout=30s;
}
upstream audio_ming {
server Node-5-IP:8800 max_fails=3 fail_timeout=30s;
}
upstream audio_step {
server Node-6-IP:8900 max_fails=3 fail_timeout=30s;
}
upstream audio_whisper {
server Node-5-IP:9000 max_fails=3 fail_timeout=30s;
}
upstream embedding_bge {
server Node-5-IP:9100 max_fails=3 fail_timeout=30s;
keepalive 32;
}
upstream rerank_bge {
server Node-5-IP:9200 max_fails=3 fail_timeout=30s;
keepalive 16;
}
server {
listen 80;
server_name ai-gateway.yourdomain.com;
client_max_body_size 200m;
location /v1/chat/deepseek/ {
rewrite ^/v1/chat/deepseek/(.*)$ /v1/$1 break;
proxy_pass http://llm_deepseek;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_read_timeout 600s;
proxy_buffering off;
}
location /v1/chat/qwen/ {
rewrite ^/v1/chat/qwen/(.*)$ /v1/$1 break;
proxy_pass http://llm_qwen;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_read_timeout 600s;
proxy_buffering off;
}
location /v1/vision/internvl/ {
rewrite ^/v1/vision/internvl/(.*)$ /v1/$1 break;
proxy_pass http://vision_internvl;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_read_timeout 600s;
proxy_buffering off;
}
location /v1/video/minimax/ {
rewrite ^/v1/video/minimax/(.*)$ /v1/$1 break;
proxy_pass http://video_minimax;
proxy_set_header Host $host;
proxy_read_timeout 900s;
proxy_buffering off;
}
location /v1/video/wan/ {
rewrite ^/v1/video/wan/(.*)$ /v1/$1 break;
proxy_pass http://video_wan;
proxy_set_header Host $host;
proxy_read_timeout 900s;
proxy_buffering off;
}
location /v1/video/step/ {
rewrite ^/v1/video/step/(.*)$ /v1/$1 break;
proxy_pass http://video_step;
proxy_set_header Host $host;
proxy_read_timeout 900s;
proxy_buffering off;
}
location /v1/audio/ming/ {
rewrite ^/v1/audio/ming/(.*)$ /v1/$1 break;
proxy_pass http://audio_ming;
proxy_set_header Host $host;
proxy_read_timeout 600s;
proxy_buffering off;
}
location /v1/audio/step/ {
rewrite ^/v1/audio/step/(.*)$ /v1/$1 break;
proxy_pass http://audio_step;
proxy_set_header Host $host;
proxy_read_timeout 600s;
proxy_buffering off;
}
location /v1/audio/whisper/ {
rewrite ^/v1/audio/whisper/(.*)$ /v1/$1 break;
proxy_pass http://audio_whisper;
proxy_set_header Host $host;
proxy_read_timeout 600s;
client_max_body_size 100m;
}
location /v1/embedding/bge/ {
rewrite ^/v1/embedding/bge/(.*)$ /v1/$1 break;
proxy_pass http://embedding_bge;
proxy_set_header Host $host;
proxy_read_timeout 120s;
}
location /v1/rerank/bge/ {
rewrite ^/v1/rerank/bge/(.*)$ /$1 break;
proxy_pass http://rerank_bge;
proxy_set_header Host $host;
proxy_read_timeout 120s;
}
location /health {
access_log off;
return 200 "ok\n";
add_header Content-Type text/plain;
}
}
}
📝 配置说明:路径采用
/v1/<类型>/<模型名>/前缀区分不同模型,Nginx 通过 rewrite 去掉前缀后转发到对应后端。LLM 流式输出(SSE)必须设置proxy_buffering off,否则客户端无法实时收到 token。
7.4 网关验证
# 健康检查
curl http://Node-6-IP/health
# LLM 接口(DeepSeek)
curl http://Node-6-IP/v1/chat/deepseek/chat/completions \
-H "Content-Type: application/json" \
-d '{"model":"deepseek-v4-flash","messages":[{"role":"user","content":"你好"}],"max_tokens":50}'
# 视频生成接口(MiniMax)
curl http://Node-6-IP/v1/video/minimax/videos/generations \
-H "Content-Type: application/json" \
-d '{"model":"minimax-h3","prompt":"测试","num_frames":41,"width":640,"height":480,"num_inference_steps":10}'
# 语音识别接口(Whisper)
curl http://Node-6-IP/v1/audio/whisper/audio/transcriptions \
-F "file=@test.wav" -F "model=whisper-large-v3" -F "language=zh"
# Embedding 接口(BGE-M3)
curl http://Node-6-IP/v1/embedding/bge/v1/embeddings \
-H "Content-Type: application/json" \
-d '{"model":"bge-m3","input":["你好世界"]}'
八、验证与性能测试
8.1 逐模型验证清单
| 模型 | 验证命令 | 预期结果 |
|---|---|---|
| DeepSeek-V4 Flash | curl /v1/chat/completions | 返回正常文本,首 token 延迟 < 2s |
| Qwen3.8-27B | curl /v1/chat/completions | 返回正常文本,2 卡单实例稳定运行 |
| InternVL2.5-78B | curl /v1/chat/completions(带图片) | 返回图片描述,OCR 文字识别正确 |
| MiniMax H3 | curl /v1/videos/generations | 返回视频文件,720P/5秒 |
| Wan2.2 | curl /v1/videos/generations | 返回视频文件,1080P/10秒 |
| Ming-Flash-Omni | curl /v1/audio/music | 返回 wav 音频,可播放 |
| Step-Audio | curl /v1/audio/speech | 返回语音 wav,自然流畅 |
| Whisper-large-v3 | curl /v1/audio/transcriptions | 返回识别文本,中文准确率 > 95% |
| BGE-M3 | curl /v1/embeddings | 返回 1024 维向量,响应 < 100ms |
| BGE-Reranker | curl /rerank | 返回相关性打分,排序正确 |
8.2 性能基准测试
# LLM 吞吐测试
for i in $(seq 1 10); do
curl -s http://Node-2-IP:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model":"deepseek-v4-flash","messages":[{"role":"user","content":"写一首关于秋天的诗"}],"max_tokens":200,"stream":true}' \
| grep -o '"delta":{"content":"[^"]*"' | wc -c
done
# 视频生成耗时测试
time curl -s http://Node-1-IP:8500/v1/videos/generations \
-H "Content-Type: application/json" \
-d '{"model":"minimax-h3","prompt":"测试视频","num_frames":81,"width":1280,"height":720,"num_inference_steps":20}' \
-o /dev/null
九、运维与排障
9.1 常用运维命令
# 实时查看 NPU 利用率和显存
watch -n 1 npu-smi info
# 查看指定芯片详细信息
npu-smi info -t board -i 0
# 查看 NPU 健康状态
npu-smi info -t health -i 0
# 查看模型加载日志
docker logs -f --tail 100 deepseek-v4-flash
# 查看最近的错误
docker logs minimax-h3 2>&1 | grep -i error | tail -20
9.2 常见问题与解决方案
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 容器启动后 npu-smi 无设备 | 未正确挂载 /dev/davinci* 设备 | 检查 docker run 的 --device 参数 |
| 模型加载 OOM(显存不足) | 量化版本不对或 max-model-len 过大 | 降低 max-model-len,使用更激进量化,增加 TP 卡数 |
| 算子不支持报错 | CANN 版本与模型算子不匹配 | 升级 CANN,或使用模型官方推荐的镜像 |
| 视频生成花屏/噪点 | VAE 解码精度问题或 dtype 不对 | 确保使用 bfloat16/float16,检查 VAE 权重 |
| 音频生成有杂音 | 采样率不匹配或音频解码器问题 | 检查 sample_rate 参数,使用默认声码器配置 |
| vLLM 启动卡住 | 模型权重路径错误或格式不支持 | 检查模型路径,确认权重格式(safetensors) |
| Nginx 502 Bad Gateway | 后端模型服务未启动或端口不通 | 检查对应节点容器状态,curl 后端端口验证 |
| Whisper 识别慢 | 音频过长或 batch 配置不当 | 分段处理长音频,调整 batch_size |
9.3 监控建议
- 部署 Prometheus + npu-exporter 采集 NPU 利用率、显存、温度指标;
- 配置 Grafana 仪表盘,实时监控 6 台节点的 NPU 状态;
- 对模型 API 配置健康检查(/health 端点),异常时自动告警;
- 视频/音频生成任务为长耗时操作,建议接入任务队列(Redis + Celery)做异步处理。
十、附录
10.1 模型下载地址汇总
| 模型 | 下载地址 | 协议 |
|---|---|---|
| DeepSeek-V4-Flash-w8a8-mtp | ModelScope: deepseek-ai/DeepSeek-V4-Flash-w8a8-mtp | MIT |
| Qwen3.8-27B-Instruct | ModelScope: Qwen/Qwen3.8-27B-Instruct | Apache 2.0 |
| InternVL2.5-78B | 昇腾 ModelZoo / HuggingFace: OpenGVLab/InternVL2_5-78B | Apache 2.0 |
| MiniMax H3-Base | HuggingFace: MiniMaxAI/H3-Base | Apache 2.0 |
| Wan2.2-T2V-14B | ModelScope: Wan-AI/Wan2.2-T2V-14B | Apache 2.0 |
| Step-Video-T2V-30B | 魔乐社区 Modelers / HuggingFace: stepfun | Apache 2.0 |
| Ming-Flash-Omni-2.0 | ModelScope: ant-research/Ming-Flash-Omni-2.0 | Apache 2.0 |
| Step-Audio-2-mini | HuggingFace: stepfun/Step-Audio-2-mini | Apache 2.0 |
| Whisper-large-v3 | HuggingFace: openai/whisper-large-v3 / Atomgit-Ascend 优化版 | MIT |
| BGE-M3 | HuggingFace: BAAI/bge-m3 | MIT |
| BGE-Reranker-v2-m3 | HuggingFace: BAAI/bge-reranker-v2-m3 | MIT |
| Open-Sora Plan V1.5 | GitHub: hpcaitech/Open-Sora | Apache 2.0 |
10.2 版本兼容性矩阵
| 组件 | 版本 A | 版本 B(推荐) | 版本 C | 备注 |
|---|---|---|---|---|
| CANN | 8.3 | 8.5 | 9.0(测试) | 8.5 对应驱动 25.5.0 |
| 驱动 | 25.3.0 | 25.5.0 | 26.0.0 | 必须与 CANN 匹配 |
| vLLM Ascend | v0.12.0 | v0.13.0rc3 | latest | v0.13.0rc3 支持 DSV4 |
| torch_npu | 2.4.0 | 2.5.0 | 2.6.0 | 与 PyTorch 版本对应 |
| Nginx | 1.24 | 1.25 | 1.27 | 统一 API 网关,支持流式代理 |
10.3 参考资源
- 昇腾社区:https://www.hiascend.com
- CANN 文档:https://www.hiascend.com/document
- vLLM Ascend:https://github.com/vllm-project/vllm
- 魔乐社区(Modelers):https://modelers.cn
- 魔搭社区(ModelScope):https://modelscope.cn
- 华为云论坛昇腾专区:https://developer.huawei.com/consumer/cn/forum/ascend
总结
本方案的核心在于单实例 + 原生 API + Nginx 统一网关:每个模型独占所需 NPU 资源、推理框架直接暴露 HTTP 接口、网关按路径路由,整体架构轻量、排障直接,适合私有化场景快速交付。模型与昇腾工具链更新频繁,部署前请核对各模型官方仓库的最新昇腾适配说明
鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。
更多推荐

所有评论(0)