飞桨PaddlePaddle/ERNIE-4.5-21B-A3B-Paddle
模型介绍文件和版本Pull Requests讨论分析
下载使用量0
Chat Hugging Face Github Blog
License

ERNIE-4.5-21B

ERNIE 4.5 亮点

ERNIE 4.5 模型的先进能力,尤其是基于 MoE 的 A47B 和 A3B 系列,依赖于以下几项关键技术创新:

  1. 多模态异构 MoE 预训练: 我们的模型在文本和视觉两种模态上共同训练,以更好地捕捉多模态信息的细微差别,并提高涉及文本理解和生成、图像理解和跨模态推理的任务性能。为了防止一种模态阻碍另一种模态的学习,我们设计了 异构 MoE 结构,引入了 模态隔离路由,并应用了 路由正交损失 和 多模态标记平衡损失。这些结构选择确保了两种模态都能有效表示,并在训练过程中实现相互强化。

  2. 扩展效率化基础设施: 我们提出了用于 ERNIE 4.5 模型高效训练的异构混合并行和分层负载平衡策略。通过使用节点内专家并行、内存高效管道调度、FP8 混合精度训练和细粒度重计算方法,我们实现了显著的预训练吞吐量。对于推理,我们提出了 多专家并行协作 方法和 卷积代码量化 算法,以实现 4 位/2 位无损量化。此外,我们引入了基于角色的动态切换的 PD 解聚,以有效利用资源,增强 ERNIE 4.5 MoE 模型的推理性能。建立在 PaddlePaddle 之上的 ERNIE 4.5 在多种硬件平台上提供了高性能推断。

  3. 模态特定后训练: 为了满足现实世界应用的各种需求,我们对预训练模型的不同模态变体进行了微调。我们的 LLM 优化了通用语言理解和生成,而 VLM 专注于视觉语言理解,并支持思考和和非思考模式。每个模型在训练后采用了 监督微调(SFT)、直接偏好优化(DPO) 或名为 统一偏好优化(UPO) 的修改后的强化学习方法。

模型概览

ERNIE-4.5-21B-A3B 是一个文本 MoE 后训练模型,拥有 21B 总参数和每个标记 3B 激活参数。以下为模型的配置详情:

关键参数值
模态文本
训练阶段后训练
参数(总/激活)21B / 3B
层数28
头数(Q/KV)20 / 4
文本专家(总/激活)64 / 6
视觉专家(总/激活)64 / 6
共享专家2
上下文长度131072

快速入门

使用 ERNIEKit 进行模型微调

ERNIEKit 是基于 PaddlePaddle 开发的训练工具包,专为 ERNIE 系列开源大模型设计。它为指令微调(SFT, LoRA)和对齐训练(DPO)等场景提供了全面支持,确保最佳性能。

使用示例:

# Download model
huggingface-cli download baidu/ERNIE-4.5-21B-A3B-Paddle --local-dir baidu/ERNIE-4.5-21B-A3B-Paddle
# SFT
erniekit train examples/configs/ERNIE-4.5-21B-A3B/sft/run_sft_lora_8k.yaml
# DPO
erniekit train examples/configs/ERNIE-4.5-21B-A3B/dpo/run_dpo_lora_8k.yaml

以下是更为详细的示例,包括搭配LoRA的SFT、多GPU配置以及高级脚本,请参考 ERNIEKit 仓库中的示例文件夹。

FastDeploy 推理部署

使用以下 FastDeploy 命令,可以快速完成服务部署。有关更详细的用法指南,请查阅 FastDeploy 仓库。

注意:单卡部署时,至少需要80G的GPU内存资源。

python -m fastdeploy.entrypoints.openai.api_server \
       --model baidu/ERNIE-4.5-21B-A3B-Paddle \
       --port 8180 \
       --metrics-port 8181 \
       --engine-worker-queue-port 8182 \
       --max-model-len 32768 \
       --max-num-seqs 32

使用 transformers 库

以下是一个代码示例,展示了如何根据给定输入使用模型生成内容。

from transformers import AutoModelForCausalLM, AutoTokenizer

model_name = "baidu/ERNIE-4.5-21B-A3B-PT"

# load the tokenizer and the model
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(model_name, trust_remote_code=True)

# prepare the model input
prompt = "Give me a short introduction to large language model."
messages = [
    {"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True
)
model_inputs = tokenizer([text], add_special_tokens=False, return_tensors="pt").to(model.device)

# conduct text completion
generated_ids = model.generate(
    model_inputs.input_ids,
    max_new_tokens=1024
)
output_ids = generated_ids[0][len(model_inputs.input_ids[0]):].tolist()

# decode the generated ids
generate_text = tokenizer.decode(output_ids, skip_special_tokens=True).strip("\n")
print("generate_text:", generate_text)

vLLM 推理

vLLM 目前正在适配中,可优先使用我们分叉的代码仓库 vllm。我们正在与社区合作,全面支持 ERNIE4.5 模型,敬请期待。

vllm serve baidu/ERNIE-4.5-21B-A3B-PT --trust-remote-code

许可证

ERNIE 4.5 模型遵循 Apache 许可证 2.0 提供使用。该许可证在遵守其条款和条件的前提下,允许商业用途。版权所有(c)2025 百度公司。保留所有权利。

引用

如果您认为 ERNIE 4.5 有用,或希望将其应用于您的项目中,敬请友好引用我们的技术报告:

@misc{ernie2025technicalreport,
      title={ERNIE 4.5 Technical Report},
      author={Baidu ERNIE Team},
      year={2025},
      eprint={},
      archivePrefix={arXiv},
      primaryClass={cs.CL},
      url={}
}