Ascend-SACT/Bagel-7B-MoT-A3
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

1. 概述

本文档介绍如何在华为昇腾 Ascend 910C NPU 服务器上,基于 vllm + vllm-ascend + vllm-omni 部署 BAGEL-7B-MoT 多模态模型。

BAGEL-7B-MoT 采用双 Stage 架构:

Stage名称类型显存占用功能
Stage 0ThinkerLLM (AR)~27.3 GB + KV Cache文本理解、文本生成、为 DiT 提供 KV Cache
Stage 1DiTDiffusion~26.5 GB图像生成

支持的推理模式:

模式输入输出使用 Stage
text2img文本图像Stage 0 + Stage 1
img2img图像 + 文本图像Stage 1
img2text图像 + 文本文本Stage 0
text2text文本文本Stage 0

2. 环境要求

2.1 硬件

项目要求
NPU2 x Ascend 910C** (每卡 64 GB HBM)
CPUARM架构
内存>= 64 GB
磁盘>= 40 GB 可用空间(模型权重约 29.5 GB)

注意:单卡 64 GB HBM 无法同时容纳 Thinker (27.3 GB) 和 DiT (26.5 GB) 两个模型,必须使用双卡部署。

2.2 软件版本

组件版本
操作系统Linux (aarch64)
Python3.11
CANN8.5.1
昇腾驱动25.5.0
PyTorch2.9.0
torch_npu2.9.0
vllm0.18.0
vllm-ascend0.18.0rc1
vllm-omni0.18.0
transformers4.57.6
huggingface-hub>= 0.34.0, < 1.0

2.3 镜像和容器准备

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

2.4 容器环境检查

进入容器后,执行以下命令确认环境正常:

# 检查 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 版本

3. 模型权重准备

模型权重总大小约 29.5 GB(ae.safetensors ~335 MB + ema.safetensors ~29.2 GB)。

方式一:huggingface-cli 下载

huggingface-cli download ByteDance-Seed/BAGEL-7B-MoT \
    --local-dir /root/models/Bagel-7B-MoT

方式二:镜像源下载(国内推荐)

HF_ENDPOINT=https://hf-mirror.com huggingface-cli download ByteDance-Seed/BAGEL-7B-MoT \
    --local-dir /root/models/Bagel-7B-MoT

方式三:git clone + git-lfs

apt-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 pull

验证权重完整性

ls -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。


4. 补丁修复

由于 vllm-omni 对 Ascend NPU 的支持存在一点兼容性问题,部署前需要执行补丁修复:

4.1 上传补丁

上传补丁文件patch_bagel_ascend.py到容器的/workspace目录

4.2 执行补丁

python3 /workspace/patch_bagel_ascend.py --vllm-omni-root /vllm-workspace/vllm-omni

5. 在线服务模式

5.1 启动服务

// 设置必须的环境变量

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

5.2 发送测试请求

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

6. 性能参考

测试环境:2 x Ascend 910 (64 GB HBM),模型加载后的推理性能:

模式推理耗时备注
text2img~35秒A beautiful sunset over mountains
text2text~1秒What is the capital of France

7. 文件清单

部署涉及的关键文件:

patch_bagel_ascend.py                                                    # 一键补丁

许可证:apache-2.0 硬件:NPU