本文档介绍如何在华为昇腾 Ascend 910C NPU 服务器上,基于 vllm + vllm-ascend + vllm-omni 部署 BAGEL-7B-MoT 多模态模型。
BAGEL-7B-MoT 采用双 Stage 架构:
| Stage | 名称 | 类型 | 显存占用 | 功能 |
|---|---|---|---|---|
| Stage 0 | Thinker | LLM (AR) | ~27.3 GB + KV Cache | 文本理解、文本生成、为 DiT 提供 KV Cache |
| Stage 1 | DiT | Diffusion | ~26.5 GB | 图像生成 |
支持的推理模式:
| 模式 | 输入 | 输出 | 使用 Stage |
|---|---|---|---|
text2img | 文本 | 图像 | Stage 0 + Stage 1 |
img2img | 图像 + 文本 | 图像 | Stage 1 |
img2text | 图像 + 文本 | 文本 | Stage 0 |
text2text | 文本 | 文本 | Stage 0 |
| 项目 | 要求 |
|---|---|
| NPU | 2 x Ascend 910C** (每卡 64 GB HBM) |
| CPU | ARM架构 |
| 内存 | >= 64 GB |
| 磁盘 | >= 40 GB 可用空间(模型权重约 29.5 GB) |
注意:单卡 64 GB HBM 无法同时容纳 Thinker (27.3 GB) 和 DiT (26.5 GB) 两个模型,必须使用双卡部署。
| 组件 | 版本 |
|---|---|
| 操作系统 | Linux (aarch64) |
| Python | 3.11 |
| CANN | 8.5.1 |
| 昇腾驱动 | 25.5.0 |
| PyTorch | 2.9.0 |
| torch_npu | 2.9.0 |
| vllm | 0.18.0 |
| vllm-ascend | 0.18.0rc1 |
| vllm-omni | 0.18.0 |
| transformers | 4.57.6 |
| huggingface-hub | >= 0.34.0, < 1.0 |
export IMAGE=quay.io/ascend/vllm-ascend:v0.18.0rc1-a3
docker run -itd
--name vllm-omni-npu
--privileged
--shm-size=16g
--user root
--net=host
--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 /usr/local/dcmi:/usr/local/dcmi
-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 /root/.cache:/root/.cache
-it $IMAGE bash
进入容器,在容器内从源码安装 vLLM-Omni
cd /vllm-workspace
获取vllm-omni源码
git clone -b v0.18.0 https://github.com/vllm-project/vllm-omni.git
cd vllm-omni
安装vllm-omni
pip install -v -e . --no-build-isolation
注意:若出现部分软件小版本号不匹配的红色ERROR提示,不影响部署,可忽略。
export VLLM_WORKER_MULTIPROC_METHOD=spawn
进入容器后,执行以下命令确认环境正常:
# 检查 NPU 可见性
npu-smi info
# 检查 PyTorch + torch_npu
python3 -c "import torch; import torch_npu; print('NPU count:', torch.npu.device_count())"
# 检查 vllm 插件加载
python3 -c "import vllm; print(vllm.__version__)"
python3 -c "import pkg_resources; print(pkg_resources.get_distribution('vllm-ascend').version)"
python3 -c "import vllm_omni; print(vllm_omni.__version__)"预期输出:
NPU count: 4 # 至少 2 个逻辑设备
0.18.0 # vllm 版本
0.18.0rc1 # vllm-ascend 版本
0.18.0+npu # vllm-omni 版本模型权重总大小约 29.5 GB(ae.safetensors ~335 MB + ema.safetensors ~29.2 GB)。
huggingface-cli download ByteDance-Seed/BAGEL-7B-MoT \
--local-dir /root/models/Bagel-7B-MoTHF_ENDPOINT=https://hf-mirror.com huggingface-cli download ByteDance-Seed/BAGEL-7B-MoT \
--local-dir /root/models/Bagel-7B-MoTapt-get install -y git-lfs && git lfs install
git clone https://hf-mirror.com/ByteDance-Seed/BAGEL-7B-MoT /root/models/Bagel-7B-MoT
cd /root/models/Bagel-7B-MoT && git lfs pullls -lh /root/models/Bagel-7B-MoT/预期输出:
ae.safetensors ~320 MB
ema.safetensors ~28 GB (核心权重)
config.json
tokenizer.json
model.safetensors.index.json
...注意:如果 safetensors 文件只有 100 多字节,说明是 git-lfs 指针文件,真实权重未下载。需要执行
git lfs pull。
由于 vllm-omni 对 Ascend NPU 的支持存在一点兼容性问题,部署前需要执行补丁修复:
上传补丁文件patch_bagel_ascend.py到容器的/workspace目录
python3 /workspace/patch_bagel_ascend.py --vllm-omni-root /vllm-workspace/vllm-omni// 设置必须的环境变量
export VLLM_WORKER_MULTIPROC_METHOD=spawn export TRUST_REMOTE_CODE=True
// 启动服务(2卡并行+显存限制)
nohup vllm serve /root/models/Bagel-7B-MoT --omni --port 8091 --gpu-memory-utilization 0.9 --stage-configs-path /vllm-workspace/vllm-omni/vllm_omni/platforms/npu/stage_configs/bagel_npu.yaml > vllm.log 2>&1 &// 查看启动过程 tail -f vllm.log
出现下面内容,说明模型启动成功
(APIServer pid=403) INFO: Started server process [403]
(APIServer pid=403) INFO: Waiting for application startup.
(APIServer pid=403) INFO: Application startup complete.
//查看模型占用NPU状态
npu-smi info
cd /vllm-workspace/vllm-omni/examples/online_serving/bagel
# Text to Image
python openai_chat_client.py \
--prompt "A beautiful sunset over mountains" \
--modality text2img \
--server http://localhost:8091
# Text to Text
python openai_chat_client.py \
--prompt "What is the capital of France?" \
--modality text2text \
--server http://localhost:8091测试环境:2 x Ascend 910 (64 GB HBM),模型加载后的推理性能:
| 模式 | 推理耗时 | 备注 |
|---|---|---|
| text2img | ~35秒 | A beautiful sunset over mountains |
| text2text | ~1秒 | What is the capital of France |
部署涉及的关键文件:
patch_bagel_ascend.py # 一键补丁