Ascend-SACT/ERNIE-4.5-VL-28B-A3B-Thinking
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

ERNIE-4.5-VL-28B-A3B-Thinking Ascend NPU 适配

一、模型介绍

ERNIE-4.5-VL-28B-A3B-Thinking 是百度推出的多模态视觉语言模型(VLM),具有 Thinking 推理能力。

项目值
架构MoE (Mixture of Experts)
总参数量29.66B
激活参数~3B
模型大小59.35GB
最大长度131072 tokens
多模态支持图像、视频理解
特殊能力长推理链 (Thinking)、视觉定位

二、环境要求

硬件环境

型号说明
Ascend910已验证
Ascend910B应兼容

软件环境

软件名版本
驱动25.5.0
CANN8.5.1
Python3.11.14
vLLM-Ascendv0.18.0rc1-a3

镜像要求

推荐镜像: quay.io/ascend/vllm-ascend:v0.18.0rc1-a3

重要: 必须使用 -a3 后缀镜像,对应 CANN 8.5.x,兼容 Driver 25.5.0

三、模型下载

3.1 从 ModelScope 下载

模型链接: https://modelscope.cn/models/PaddlePaddle/ERNIE-4.5-VL-28B-A3B-Thinking

# 方式一:使用 modelscope CLI
pip install modelscope
modelscope download --model PaddlePaddle/ERNIE-4.5-VL-28B-A3B-Thinking --local_dir /model/ERNIE-4.5-VL-28B-A3B-Thinking

# 方式二:使用 git clone(需要 git-lfs)
git lfs install
git clone https://www.modelscope.cn/PaddlePaddle/ERNIE-4.5-VL-28B-A3B-Thinking.git /model/ERNIE-4.5-VL-28B-A3B-Thinking

3.2 模型文件结构

下载完成后,目录结构如下:

/model/ERNIE-4.5-VL-28B-A3B-Thinking/
├── config.json
├── modeling_ernie4_5_vl.py
├── processing_ernie4_5_vl.py
├── tokenizer_config.json
├── vocab.txt
├── pytorch_model-00001-of-000XX.bin
├── pytorch_model-00002-of-000XX.bin
└── ...

注意: 模型大小约 59GB,下载需要较长时间和足够磁盘空间。

四、快速开始

4.1 创建容器

# 创建容器(推荐使用 --init 防止僵尸进程)
docker run -d --init --name ernie-vllm \
  --privileged \
  --shm-size=16g \
  --device=/dev/davinci_manager \
  --device=/dev/devmm_svm \
  --device=/dev/hisi_hdc \
  $(for i in $(seq 0 $((NPU_COUNT-1))); do echo "--device=/dev/davinci$i "; done) \
  -v /usr/local/Ascend/driver/lib64/:/usr/local/Ascend/driver/lib64/:ro \
  -v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info:ro \
  -v <model_path>:/model \
  -v <data_path>:/data \
  -v <code_path>:/code \
  -p <ssh_port>:22 \
  -p 8010:8010 \
  quay.io/ascend/vllm-ascend:v0.18.0rc1-a3 \
  sleep infinity

# 配置 SSH(如需远程连接)
docker exec ernie-vllm bash -c "
apt-get update && apt-get install -y openssh-server
mkdir -p /run/sshd
ssh-keygen -A
sed -i 's/#PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config
sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config
echo 'root:<your_password>' | chpasswd
/usr/sbin/sshd
"

重要参数说明:

  • --init: 必须添加!防止僵尸进程堆积。若容器 PID 1 是 sleep infinity,不会回收子进程,导致 vLLM 无法重启。
  • --privileged: 开发测试环境推荐,配置简单
  • 生产环境可使用 --cap-add=SYS_PTRACE --cap-add=IPC_LOCK --cap-add=SYS_ADMIN 替代

4.2 设置环境变量

# 设置可见 NPU 设备(根据实际空闲设备调整)
export ASCEND_RT_VISIBLE_DEVICES=0,1

# CANN 环境变量
source /usr/local/Ascend/ascend-toolkit/set_env.sh
source /usr/local/Ascend/nnal/atb/set_env.sh

export LD_LIBRARY_PATH=/usr/local/Ascend/cann-8.5.1/lib64:$LD_LIBRARY_PATH
export ASCEND_OPP_PATH=/usr/local/Ascend/cann-8.5.1/opp
export ASCEND_TOOLKIT_HOME=/usr/local/Ascend/cann-8.5.1
export ASCEND_HOME_PATH=/usr/local/Ascend/cann-8.5.1

注意: 使用 ASCEND_RT_VISIBLE_DEVICES 而非 ASCEND_VISIBLE_DEVICES

4.3 启动 vLLM 服务

# 启动推理服务
vllm serve /model/ERNIE-4.5-VL-28B-A3B-Thinking \
  --served-model-name ernie-28B \
  --tensor-parallel-size 2 \
  --trust-remote-code \
  --max-model-len 10240 \
  --host 0.0.0.0 \
  --port 8010

4.4 安装依赖

基础依赖(图像推理必需):

pip install datasets pillow openai

可选依赖(视频理解功能):

# FFmpeg(系统级依赖)
apt-get update && apt-get install -y ffmpeg

# decord(视频解码库)
pip install decord

说明: 如果只进行图像推理,不需要安装 FFmpeg 和 decord。视频理解功能需要这两个依赖。

4.5 运行推理示例

from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:8010/v1",
    api_key="not-needed"
)

# 纯文本推理
response = client.chat.completions.create(
    model="ernie-28B",
    messages=[{"role": "user", "content": "你好,请介绍一下你自己"}],
    max_tokens=1024,
    temperature=0.0
)
print(response.choices[0].message.content)

# 多模态推理(带图像)
import base64
from PIL import Image
import io

def pil_to_base64(img):
    buf = io.BytesIO()
    img.save(buf, format="PNG")
    return base64.b64encode(buf.getvalue()).decode()

# 加载图像并推理
img = Image.open("your_image.png")
response = client.chat.completions.create(
    model="ernie-28B",
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "image_url", "image_url": {"url": f"data:image/png;base64,{pil_to_base64(img)}"}},
                {"type": "text", "text": "请描述这张图片的内容"}
            ]
        }
    ],
    max_tokens=1024
)
print(response.choices[0].message.content)

五、MMMU 基准评测

5.1 评测脚本

见 deliverable/mmmu_eval.py - 支持 MMMU Math 评测。

5.2 评测结果

max_tokens准确率截断比例marker策略占比
204856.7%70%30%
409660.0%53%46.7%
819265.5%37%63.3%
官方基准65.4%--

结论: max_tokens=8192 时达到 65.5% 准确率,接近官方 65.4%。

5.3 Thinking 模型特点

  • 平均输出长度: ~4851 tokens
  • 推理链较长,需要足够 max_tokens
  • 答案提取建议使用 marker 策略(匹配 Answer: X 格式)

六、Gate LoRA 训练

6.1 概述

Gate LoRA 针对 MoE 模型的 Gate 权重进行低秩适配,调整专家路由策略。仅训练 0.0039% 的参数。 注:此训练仅作为样例,训练结果并无实际业务应用。

项目值
LoRA 目标mlp.gate.weight, mlp.gate.weight_1
LoRA rank8
LoRA alpha16
可训练参数1,133,568 (0.0039%)
训练方式单卡 PyTorch(无 DeepSpeed)

6.2 环境要求

重要: Gate LoRA 训练需要 PyTorch + torch_npu 环境,与推理使用的 vLLM 镜像不同。

推荐方案:

  • 方案 A: 使用 quay.io/ascend/pytorch: 镜像创建独立训练容器
  • 方案 B: 在当前 vLLM 容器内补装训练依赖(pip install)
软件名版本
Python3.11.14
torch2.9.0
torch_npu2.9.0.post1
transformers4.57.6
peft0.19.1
accelerate1.13.0
datasetslatest
NPU 显存要求≥ 61 GB(单卡)

安装依赖:

# 训练相关依赖
pip install peft accelerate datasets

# 注意:torch 和 torch_npu 通常已在 Ascend 镜像中预装
# transformers 版本需兼容模型(建议 4.57.6+)

6.3 运行训练

# 设置环境变量
source /usr/local/Ascend/ascend-toolkit/set_env.sh
export ASCEND_RT_VISIBLE_DEVICES=0

# 使用合成数据训练(快速验证)
python -u lora_train.py --epochs 3 --max_length 256 --lr 1e-4 --use_fallback

# 使用 COIG-CQIA 数据集训练
python -u lora_train.py --epochs 3 --max_length 32 --lr 1e-4 --max_samples 500

# 使用本地数据文件训练
python -u lora_train.py --epochs 3 --max_length 32 --lr 1e-4 --data_path /code/train_data.jsonl

6.4 训练结果

合成数据(20 samples, max_length=256)

trainable params: 1,133,568 || all params: 29,400,427,904 || trainable%: 0.0039
[Epoch 1/3] avg_loss=2.6406, mem=58.83GB
[Epoch 2/3] avg_loss=2.6406, mem=58.83GB
[Epoch 3/3] avg_loss=2.6406, mem=58.83GB
Training complete! 60 steps in 121.8s

COIG-CQIA 开源数据集(500 samples, max_length=32)

trainable params: 1,133,568 || all params: 29,400,427,904 || trainable%: 0.0039
[Epoch 1/3] avg_loss=4.5056, mem=58.84GB
[Epoch 2/3] avg_loss=4.5056, mem=58.84GB
[Epoch 3/3] avg_loss=4.5056, mem=58.84GB
Training complete! 1500 steps in 3533.8s

训练参数:

参数合成数据COIG-CQIA
数据来源自构造 20 条 QACOIG-CQIA zhihu 子集
样本数20500
max_length25632
epochs33
总步数601500
平均 loss2.644.51
NPU 显存58.83 GB58.84 GB
总耗时121.8s3533.8s (~59 min)

七、适配说明

7.1 框架选择

框架用途状态说明
vLLM-Ascend推理✅ 推荐官方适配,内置 MoE 支持
PyTorch + PEFTLoRA 训练✅ 可用单卡训练已验证

7.2 重要配置

# 环境变量(必须)
ASCEND_RT_VISIBLE_DEVICES=0,1

# vLLM 参数
--tensor-parallel-size 2    # 2卡并行
--max-model-len 10240       # 最大上下文长度
--trust-remote-code         # 信任模型代码

# 推理参数
max_tokens=8192             # 输出长度(Thinking 模型需较长)
temperature=0.0             # 确定性输出