PAI-ChatLearn 是阿里云机器学习平台 PAI 团队自主研发的,灵活易用、大规模模型 RLHF 高效训练框架,支持大模型进行 SFT(有监督指令微调)、RM(奖励模型)、RLHF(基于人类反馈的强化学习)完整训练流程。PAI-ChatLearn 支持训练和推理组合使用不同的 backend,可对各个模型配置不同并行策略和灵活的资源分配,支持大规模(175B + 175B)模型的 RLHF 高效训练,性能比业界框架有较大提升,有助于用户专注于模型效果调优。
随着大模型的快速发展,推动了模型训练方式(特别是深度学习和人工智能领域)不断演进。随着模型规模的增长,单个设备(如 GPU 或 CPU)的内存和计算能力已经不足以处理整个模型,因此需要采用并行化策略来分配任务和计算负载。下面分别介绍模型训练的数据并行、模型并行和任务并行。
早期的深度学习模型相对较小,如经典的卷积神经网络模型 AlexNet 和 ResNet,可在单个 GPU 上顺利运行。然而,随着图像数据量的激增,单 GPU 的训练性能逐渐无法满足需求。为了应对这一挑战,模型训练开始采用数据并行策略来加速。
数据并行(Data Parallelism)是将训练数据集分割成多个小批次,并在多个处理器或设备上同时训练模型的副本。每个设备都有模型的一个完整副本,并且在每个训练步骤结束时,通过某种形式的通信(如梯度平均或参数服务器)来同步模型参数。
数据并行(Data Parallelism)策略本身也经历了一系列的演进。例如,Zero Redundancy Optimizer (ZeRO) 和 Fully Sharded Data Parallel (FSDP) 等概念的出现,它们的核心思想是在训练过程中将状态信息、梯度或模型参数分散存储,而计算过程仍然遵循数据并行的原则。将训练数据集分割成多个小批次,并在多个处理器或设备上同时训练模型的副本。每个设备都有模型的一个完整副本,并且在每个训练步骤结束时,通过某种形式的通信(如梯度平均或参数服务器)来同步模型参数。
这种方法可以显著减轻每个 GPU 上的显存压力,使得我们能够训练更大的模型。但随着模型规模的增加,数据并行策略需要更高效的通信机制和更大的带宽来处理增加的同步负载。
随着模型规模的进一步扩大,纯粹的数据并行已不足以满足训练需求。我们面临的挑战不仅是显存容量不足,还包括计算能力的限制。因此,模型并行(Model Parallelism)成为了一种大规模深度学习模型训练的常用解决方案。
模型并行依据模型切分方法主要分为两种形式:流水并行(Pipeline Parallelism)和张量并行(Tensor Parallelism):
单一的模型并行往往难以高效地支持模型训练。更大的模型(如GPT3-175B)需要混合多种并行策略。混合并行(Hybrid Parallelism)结合了数据并行、模型并行和任务并行的优点,以实现更高效的训练。如,可以在多个设备上使用数据并行来训练模型的不同副本,同时在每个设备内部使用模型并行来处理模型的不同部分。
随着模型的不断演进,模型训练方式出现了一些新的趋势。任务并行不是直接针对模型或数据的并行化,而是将不同的任务分配给不同的处理器或设备。在大模型训练中,任务并行可以用来同时执行多个不同的训练过程,例如,同时进行超参数搜索、模型评估或不同模型的训练。任务并行可以提高资源利用率和训练效率,但需要有效的任务调度和管理机制。
RLHF (Reinforcement Learning from Human Feedback)是将初始语言模型的微调任务建模为 RL 强化学习问题,用人类反馈信号来优化,使生成更符合人类的期望,提高模型的性能和可靠性。
训练步骤:
RLHF训练需要Policy、Reward、Value 等 models 同时训练。已有框架如 Megatron-LM、DeepSpeed 等适用于单模型训练/推理。已有的 RLHF 框架只支持单机训练或者多机将模型 place 在相同的设备上,支持的模型最大规模受限,不支持 70B+70B 或以上规模,并且无法支持混合框架的训练/推理。
本节主要介绍 PAI-ChatLearn 框架的底层实现细节、接口如何定义以及如何实现大规模高效的 RLHF 训练。
PAI_ChatLearn 是一个灵活且适用于大规模 RHF 训练的高效框架,其特点如下:
下图是在 PAI_ChatLearn 中实现的 RLHF 训练流程的图示。
API 层提供模型建模的接口
Engine 层负责具体资源分配和调度,以及训练和推理的实际执行。
PAI-ChatLearn 训练核心流程如下,首先对 chatlearn 进行初始化,接着定义模型(RLHF 训练过程包含 2 个 training 模型,4 个模型做 inference),然后定义 Engine 和数据集,调用 engine.learn() 开始训练。
PAI-ChatLearn 训练框架中,用户通过 YAML 文件来配置整个运行环境,无论是 PAI 的执行环境 DLC 还是本地 local 环境,都可灵活配置。
在任务分发过程中,采用了一种内部优化策略,即通过 'exclude' 功能,可以明确指定不需要分发的组件。从而有效减少不必要的通信开销,提高整体效率。
每个模型有独立的配置选项,允许用户根据需要自定义资源分配和策略。在 RLHF 中,支持六种不同的模型配置。
用户可以定义诸如实际运行的数量、训练批次大小、生成任务的基线大小等参数。此外,还可以设置定期保存检查点的时间间隔、数据存储路径以及评估模型性能的时间点。
PAI-ChatLearn 框架提供了清晰的配置流程,用户只需定义模型并添加相应的配置,即可轻松启动训练过程。
为了加速模型构建过程,我们提供了一系列的子类,这些子类旨在简化和加快开发流程。无论是基于 PyTorch、Meta 还是 VIM 的框架,这些子类都能够提供强大的支持。同时,用户可以选择基于这些子类或者直接基于父类来构建 HF 模型。
在 PAI-ChatLearn 框架中,模型的封装变得很简单。用户只需关注模型的设置和构建过程,例如初始化(init)环节。封装层旨在屏蔽不同框架之间的接口差异,使得用户只需在我们的框架中进行一层封装。例如,如果用户需要实现前向传播(forward steps),无论是仅进行推理还是进行完整的训练周期,我们的封装都能够简化这一过程。用户只需将模型中已定义的训练模块进行整合,即可实现标准模型训练的流程。
此外,框架提供了底层接口的灵活选择,以适应不同的执行需求。用户可以选择 Megatron 作为执行引擎,VIM 作为后端,或者采用我们团队自研的高性能计算机 HC 作为后端资源。这种自由切换的能力确保了用户可以根据具体需求和偏好选择最合适的工具和资源。
本节基于开源模型示例讲解模型 RLHF 训练的具体流程及训练效果。
镜像:
PAI-DLC 平台上提供已经准备好的镜像或参考 ChatLearn 提供的 Dockerfile 自定义镜像
模型:
下载开源模型,例如从 Huggingface 或 ModeScope 上下载。
如果是 HuggingFace transformers 的模型,调用 ChatLearn 提供的工具将 transformers 模型转成 Megatron-LM 格式,支持修改模型的并行策略。
步骤一:训练 SFT 模型
准备 SFT 训练的数据:
格式:{'query':问题,'response':回复}。
训练方式:
转换好的模型,调用 ChatLearn 进行 SFT 训练。
训练好保存 SFT 模型
如果有训练好的SFT 模型,这个步骤可以跳过。
步骤二:训练奖励模型(RM)。
准备 RM 训练的数据:
格式:{'query':问题,'response':[回复1, 回复2, .....],'score':[score1,score2,.....]}。
训练方法:
定义 RM,一般主体结构复用 SFT,增加一个 head 层。
使用训练好的 SFT 模型参数初始化 RM。
调用 ChatLearn 进行 RM 训练。
保存训练好的模型。
步骤三:使用强化学习进行微调。
准备 RL 训练的数据:
格式:{"prompt":问题}。
训练方法:
定义 Policy/Reference Model,结构和 SFT 模型一致。
使用 SFT 模型参数初始化 Policy/Reference Model。
定义 Reward/Value model,结构和 Reward Model 一致。
使用 RM 模型参数初始化 Reward/Value model。
调用 ChatLearn 进行 RLHF 训练。
保存训练好的模型。
步骤四:Inference。
离线批量预测。
准备好需要预测的数据集合。
调用 ChatLearn 加载训练好的 RLHF 模型进行离线批量预测。
在线预测。
调用 ChatLearn 工具将训练好的 RLHF 模型转成 Transformer 格式。
调用 PAI-EAS 或 vLLM 部署模型进行在线预测。
Base 模型使用 Vicuna 13B,RM 也采用 13B 规模。
在 HH(helpful&harmless)数据集进行 SFT、RM、RLHF 训练。
RLHF 训练使用了 16 GPUs。
RLHF 训练中 Reward Model 的评分如图所示。
在 MT-Bench 上使用 GPT-4 API 测评 SFT 和 RLHF 模型的效果,平均得分提升 11%。
Policy 和 Reward Model 都是 14B;
基础评测上效果如上图所示,优于同规模的其他开源模型;
构造一个包含广泛主题的测试数据集进行人工评测,RLHF 训练的模型效果明显优于 SFT 模型。测试题包括知识类、语言理解类,创作类、数学类,编码类等能力。
A1:百川 2 技术报告中提到模型中的 HF 训练,使用了不止一个奖励模型。如在数学领域,现有的奖励模型在数学评分方面可能不够精准,效果不理想,他们会专门采用一个单独的数学能力更强的模块来辅助奖励模型的训练。
一些开源框架,由于是平铺设计,会遇到显存不足等各种挑战,难以扩展。
而 PAI-ChatLearn 框架,其采用分离式架构设计,方便了在不同阶段进行各种扩展。只需在奖励模型部分添加一系列处理逻辑,即可实现多个奖励模型的结合。由于每个模型都被封装成一个独立的分布式 actor,所以只需添加一个新的分布式 actor,并将其结果串联起来,最后用KL散度或其他方法进行计算即可。
A2:对模型进行 TP 张量并行或者 PP 流水并行的切分是不会改变模型大小的。
老版本的 Megatron 上有个 bug,进行转换后会保存多份,最新版本已经没有这个问题了。
A3:这个是一个标准的 PPO 实现,这些参数是必要的。
PAI-ChatLearn 会把这个 inference 和 training 分开,增加了参数同步,也即最上面的线的部分。