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 |
| CANN | 8.5.1 |
| Python | 3.11.14 |
| vLLM-Ascend | v0.18.0rc1-a3 |
推荐镜像: quay.io/ascend/vllm-ascend:v0.18.0rc1-a3
重要: 必须使用
-a3后缀镜像,对应 CANN 8.5.x,兼容 Driver 25.5.0
模型链接: 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下载完成后,目录结构如下:
/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,下载需要较长时间和足够磁盘空间。
# 创建容器(推荐使用 --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替代
# 设置可见 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
# 启动推理服务
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基础依赖(图像推理必需):
pip install datasets pillow openai可选依赖(视频理解功能):
# FFmpeg(系统级依赖)
apt-get update && apt-get install -y ffmpeg
# decord(视频解码库)
pip install decord说明: 如果只进行图像推理,不需要安装 FFmpeg 和 decord。视频理解功能需要这两个依赖。
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)见 deliverable/mmmu_eval.py - 支持 MMMU Math 评测。
| max_tokens | 准确率 | 截断比例 | marker策略占比 |
|---|---|---|---|
| 2048 | 56.7% | 70% | 30% |
| 4096 | 60.0% | 53% | 46.7% |
| 8192 | 65.5% | 37% | 63.3% |
| 官方基准 | 65.4% | - | - |
结论: max_tokens=8192 时达到 65.5% 准确率,接近官方 65.4%。
Answer: X 格式)Gate LoRA 针对 MoE 模型的 Gate 权重进行低秩适配,调整专家路由策略。仅训练 0.0039% 的参数。 注:此训练仅作为样例,训练结果并无实际业务应用。
| 项目 | 值 |
|---|---|
| LoRA 目标 | mlp.gate.weight, mlp.gate.weight_1 |
| LoRA rank | 8 |
| LoRA alpha | 16 |
| 可训练参数 | 1,133,568 (0.0039%) |
| 训练方式 | 单卡 PyTorch(无 DeepSpeed) |
重要: Gate LoRA 训练需要 PyTorch + torch_npu 环境,与推理使用的 vLLM 镜像不同。
推荐方案:
- 方案 A: 使用
quay.io/ascend/pytorch:镜像创建独立训练容器- 方案 B: 在当前 vLLM 容器内补装训练依赖(pip install)
| 软件名 | 版本 |
|---|---|
| Python | 3.11.14 |
| torch | 2.9.0 |
| torch_npu | 2.9.0.post1 |
| transformers | 4.57.6 |
| peft | 0.19.1 |
| accelerate | 1.13.0 |
| datasets | latest |
| NPU 显存要求 | ≥ 61 GB(单卡) |
安装依赖:
# 训练相关依赖
pip install peft accelerate datasets
# 注意:torch 和 torch_npu 通常已在 Ascend 镜像中预装
# transformers 版本需兼容模型(建议 4.57.6+)# 设置环境变量
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.jsonltrainable 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.8strainable 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 条 QA | COIG-CQIA zhihu 子集 |
| 样本数 | 20 | 500 |
| max_length | 256 | 32 |
| epochs | 3 | 3 |
| 总步数 | 60 | 1500 |
| 平均 loss | 2.64 | 4.51 |
| NPU 显存 | 58.83 GB | 58.84 GB |
| 总耗时 | 121.8s | 3533.8s (~59 min) |
| 框架 | 用途 | 状态 | 说明 |
|---|---|---|---|
| vLLM-Ascend | 推理 | ✅ 推荐 | 官方适配,内置 MoE 支持 |
| PyTorch + PEFT | LoRA 训练 | ✅ 可用 | 单卡训练已验证 |
# 环境变量(必须)
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 # 确定性输出