ERNIE 4.5 模型,特别是基于MoE的A47B和A3B系列,其先进能力得益于以下几项关键技术创新:
多模态异构MoE预训练:模型在文本和视觉两种模态上联合训练,以更好地捕捉多模态信息的细微差别,从而提升文本理解与生成、图像理解以及跨模态推理等任务的性能。为了实现这一目标,同时避免一种模态的学习过程阻碍另一种模态的学习,设计了异构MoE结构,引入了模态隔离路由机制,并采用了路由正交损失和多模态令牌平衡损失。这些架构选择确保了两种模态的有效表示,从而在训练过程中实现相互强化。
高效扩展的基础设施:提出了一种新颖的异构混合并行和分层负载均衡策略,以实现ERNIE 4.5模型的高效训练。通过节点内专家并行、内存高效的流水线调度、FP8混合精度训练以及细粒度重计算方法,实现了显著的预训练吞吐量。在推理阶段,提出了多专家并行协作方法和卷积码量化算法,实现了4位/2位无损量化。此外,还引入了动态角色切换的PD解耦技术,以有效利用资源,从而提升ERNIE 4.5 MoE模型的推理性能。基于PaddlePaddle框架,ERNIE 4.5在广泛的硬件平台上实现了高性能推理。
模态专用微调:为了满足现实应用的多样化需求,对预训练模型进行了针对特定模态的微调。LLM(大语言模型)专注于通用语言理解与生成。VLM(视觉语言模型)则专注于视觉语言理解,并支持思考和非思考两种模式。每种模型在微调阶段都采用了监督微调(SFT)、直接偏好优化(DPO)或一种改进的强化学习方法——统一偏好优化(UPO)。
在视觉语言模型的微调阶段,视觉与语言之间的深度整合对模型在理解、推理和生成等复杂任务中的表现起着决定性作用。为了增强模型在多模态任务中的泛化能力和适应性,重点提升了三个核心能力——图像理解、任务专用微调和多模态思维链推理,并进行了系统的数据构建和训练策略优化。此外,还使用RLVR(可验证奖励的强化学习)进一步提升了模型的对齐性和性能。经过SFT和RL阶段后,获得了ERNIE-4.5-VL-28B-A3B模型。
ERNIE-4.5-VL-28B-A3B是一个多模态MoE聊天模型,总参数为28B,每个令牌激活参数为3B。以下是模型配置详情:
| 关键项 | 值 |
|---|---|
| 模态 | 文本与视觉 |
| 训练阶段 | 后训练 |
| 参数(总数 / 激活) | 28B / 3B |
| 层数 | 28 |
| 头部(Q/KV) | 20 / 4 |
| 文本专家(总数 / 激活) | 64 / 6 |
| 视觉专家(总数 / 激活) | 64 / 6 |
| 共享专家 | 2 |
| 上下文长度 | 131072 |
根据vllm-ascend官网中release版本对模型的支持情况,选择可用的vllm-ascend镜像。
vllm-ascend官网模型支持:
https://vllm-ascend.readthedocs.io/zh-cn/latest/user_guide/support_matrix/supported_models.html
vllm-ascend官网版本说明:
https://vllm-ascend.readthedocs.io/zh-cn/latest/user_guide/release_notes.html本文以quay.io/ascend/vllm-ascend:v0.10.2rc1镜像为例。
方式a与方式b二选一。
a. 直接在A2单机下载镜像:
docker pull quay.io/ascend/vllm-ascend:v0.10.2rc1b. 在官网下载镜像压缩包:
官网地址:https://quay.io/repository/ascend/vllm-ascend?tab=tags下载完成后,上传到A2单机选定的路径,再执行docker load -i <镜像压缩包名>加载镜像。
从modelscope社区下载权重文件。正式下载前,先下载config.json,检查"torch_dtype"参数,注意昇腾NPU不支持fp8计算精度。
https://modelscope.cn/models/PaddlePaddle/ERNIE-4.5-VL-28B-A3B-PT下载方式:
在服务器安装modelscope
pip install modelscope下载权重文件到指定目录./dir
modelscope download --model PaddlePaddle/ERNIE-4.5-VL-28B-A3B-PT --local_dir ./dir使用A2单机的双卡足够拉起Ernie-4.5-VL-28B-A3B-PT模型的服务化。注意挂载需要使用的目录。
docker run -itd --privileged --name=vllm_ernie_28B --net=host \
--device /dev/davinci0 \
--device /dev/davinci1 \
--device=/dev/davinci_manager \
--device=/dev/hisi_hdc \
--device /dev/devmm_svm \
-v /usr/local/dcmi:/usr/local/dicm \
-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 /usr/local/sbin:/usr/local/sbin \
-v /etc/hccn.conf:/etc/hccn.conf \
-v /opt/:/opt/ \
-v /usr/local/Ascend/:/usr/local/Ascend/ \
-v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime \
-v /mnt/:/mnt/ \
-p 8010:8010 \
<镜像id或镜像名> \
bashdocker exec -it -u root vllm_ernie_28B bash
cd /vllm-workspace进入创建的容器vllm_ernie_28B后,在/vllm-workspace目录下安装多模态推理依赖的FFmpeg和decord模块。decord在arm架构下仅支持源码编译安装。
组件名称 组件功能 FFmpeg 整体多媒体框架,包含以下所有库的命令行工具和软件套件 libavcodec 核心编解码:提供音频、视频和字幕的编码器和解码器,是处理压缩数据的核心 libavformat 容器封装:处理多媒体容器格式(如MP4、MKV),负责解复用(拆分文件)和复用(封装文件) libavutil 通用工具:提供公共辅助函数,如数学计算、数据结构、日志系统等 libavdevice 设备接入:用于捕获来自摄像头、麦克风等设备的音视频数据 libavfilter 特效处理:提供音视频滤镜功能,如缩放、裁剪、水印、倍速播放等 libswscale 图像缩放:处理视频图像的缩放、色彩空间转换和像素格式转换 libswresample 音频重采样:处理音频的重采样、声道布局转换和采样格式转换 使用apt-get进行下载安装。
apt-get update
apt-get install -y ffmpeg libavcodec-dev libavformat-dev libavutil-dev libavdevice-dev libavfilter-dev libswresample-dev libswscale-dev curl安装源码编译工具
apt-get install -y build-essential cmake pkg-config下载decord源码
git clone --recursive https://github.com/dmlc/decord.git编译安装decord
cd /vllm-workspace/decord
rm -rf build
mkdir build && cd build
cmake ..
make -j$(nproc)
cd ..
mkdir -p build && cd build
cmake .. -DBUILD_PYTHON=ON
make -j$(nproc)
cd ../python
python3 setup.py install使用如下vllm serve命令拉起服务化。
vllm serve /opt/data/verification/models/ERNIE-4.5-VL-28B-A3B-PT \
--served-model-name ernie-28B \
--tensor-parallel-size 2 \
--trust-remote-code \
--max-model-len 10240 \
--host xx.xx.xx.xx \
--port 8010服务化拉起后,使用curl命令检查基础功能可用。
curl http://0.0.0.0:8010/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "ernie-28B",
"prompt": "AI大模型的发展",
"max_tokens": 100,
"temperature": 0
}'