阿里PAI-ChatLearn:大规模 Alignment高效训练框架正式开源

导读

ChatGPT是OpenAI开发的基于大型语言模型(LLM)的聊天机器人,以其令人惊叹的对话能力而迅速火爆并被广泛采用。ChatGPT 成功背后得益于大型语言模型生成领域的新训练范式:RLHF (Reinforcement Learning from Human Feedback),即以强化学习方式依据人类反馈优化语言模型。不同于传统的深度学习训练,只涉及到单个模型的迭代和优化,以 RLHF 为代表的Alignment训练范式涉及到多个大模型的计算和数据交互,这对于构建构建一个易用、高效、可扩展的训练系统提出了诸多的挑战。

为了解决上述问题,我们提出了一个新的 Alignment 训练框架 PAI-ChatLearn。ChatLearn 通过对 Alignment 训练流程进行合理的抽象和解耦,提供灵活的资源分配和模型调度策略。ChatLearn提供了RLHF、DPO、OnlineDPO、GRPO等 Alignment 训练,同时也支持用户自定义 model 的执行 flow,来实现自定义的训练流程。相比于当前的 SOTA 系统,ChatLearn 在 7B+7B (Policy+Reward) 规模性能提升115%,70B+70B 规模性能提升208%,并且能支持更大规模的Alignment训练,例如300B+300B规模。同时ChatLearn也一直在支持Qwen大模型的Alignment训练,在Qwen-Chat、Qwen2-Chat、Qwen2-Math上都取得不错的效果。

PAI-ChatLearn现已全面开源,助力用户快速、高效的Alignment训练体验。借助ChatLearn,用户可全身心投入于模型设计与效果优化,无需分心于底层技术细节。ChatLearn将承担起资源调度、数据传输、参数同步、分布式运行管理以及确保系统高效稳定运作的重任,为用户提供一站式解决方案。PAI-ChatLearn背后的技术框架如何设计?性能和效果如何?未来有哪些规划?今天一起来深入了解。

PAI-ChatLearn是什么

PAI-ChatLearn是阿里云PAI团队自研并开源的、灵活易用的、支持大规模 Alignment高效训练的框架。

背景

ChatGPT 是由 OpenAI 开发的基于大型语言模型 (Large Language Model, LLM) 的聊天机器人,以其令人惊叹的对话能力而迅速火爆并被广泛采用。ChatGPT 成功背后得益于大型语言模型生成领域的新训练范式:RLHF (Reinforcement Learning from Human Feedback),即以强化学习方式依据人类反馈优化语言模型。

不同于传统的深度学习训练,只涉及到单个模型的迭代和优化,以 RLHF 为代表的训练范式涉及到多个大模型的计算和数据交互,这对于构建构建一个易用、高效的训练系统提出了诸多的挑战。

  1. 编程接口:如何设计一个通用且灵活的编程接口,让用户能专注于单个模型的建模,同时,又可以灵活地控制模型间的交互。

  2. 分布式加速引擎:随着模型规模的增大,用户会选择一些分布式计算和加速的 backend,比如 训练有Megatron-LM、DeepSpeed 等,推理有vLLM等,如何结合这些加速 backend 来实现高效的多模型计算框架。

  3. 并行策略:多个模型可能各有各的计算特点,比如仅推理的模型和训练的模型在显存和计算上的特性都不同,每个模型最佳的并行策略也可能不同。因此,框架应该允许不同的模型配置不同的并行策略以发挥整体的最佳性能。

  4. 资源分配:如何灵活地给多个模型分配资源来实现高效的并发调度和执行。

  5. 扩展训练方式:当前Alignment训练,除了RLHF还有很多变种,例如:DPO/IPO、KTO、ORPO、Online DPO、RLAIF等,如何能便捷、快速地扩展训练流程以适用不同的Alignment训练。

为了解决上述问题,阿里云PAI团队提出了一个新的 Alignment 模型训练框架 ChatLearn。ChatLearn 通过对模型计算逻辑的抽象,解耦了模型和计算 backend、分布式策略的绑定,提供灵活的资源调度机制,可以支持灵活的资源分配和并行调度策略。

PAI-ChatLearn主要特性

ChatLearn的优点总结如下:

  1. 易用的编程接口: ChatLearn提供通用的编程抽象,用户只需要封装几个函数即可完成模型构造。用户只需要专注于单模型的编程,系统负责资源调度、数据流传输、控制流传输、分布式执行等。

  2. 高可扩展的训练方式: ChatLearn 提供 RLHF、DPO、OnlineDPO、GRPO 等 Alignment 训练,同时也支持用户自定义 model 的执行 flow,使定制化训练流程变得非常便捷。

  3. 多种分布式加速引擎: 用户可以使用不同的计算 backend 进行模型建模,如 Megatron-LM、DeepSpeed、vLLM 等。用户也可以组合使用不同的 backend,如用 Megatron-LM 来进行加速训练,用 vLLM 来加速推理。

  4. 灵活的并行策略和资源分配: ChatLearn 支持不同模型配置不同的并行策略,可以结合各模型计算、显存、通信的特点来制定不同的并行策略。同时 ChatLearn 支持灵活的资源调度机制,支持各模型的资源独占或复用,通过系统调度策略支持高效的串行/并行执行和高效的显存共享。

  5. 高性能: 相较于当前的 SOTA 系统,ChatLearn 在 7B+7B (Policy+Reward) 规模性能提升115%,70B+70B 规模性能提升 208%。同时,ChatLearn 支持更大规模的 Alignment 训练,例如:300B+300B。

PAI-ChatLearn技术架构

PAI-ChatLearn技术架构如上图:

API:ChatLearn提供了RLHF、DPO、OnlineDPO、GRPO 等 Alignment 训练,同时也支持用户自定义 model 的执行 flow,来实现自定义的训练流程。同时ChatLearn提供Module的抽象,用户通过继承MegatronModule、DeepSpeedModule、VLLMModule 完成对不同计算backend的封装。ChatLearn 通过 yaml 文件的形式为 Alignment 训练,以及不同的模型配置不同的超参数、并行策略等,来实现灵活的模型和并行策略配置。

Scheduler:ChatLearn 提出了 DistActor 的抽象来支持模型的分布式训练或推理。DistActor 继承了 Ray actor 的状态管理和 worker 间的隔离性,同时突破了 Ray actor 不能跨机的限制。通过 DistActor,ChatLearn 可以支持任意规模的模型推理和训练。同时,ChatLearn Scheduler 通过划分集群 Resource Group 和调度策略,实现硬件感知的亲和性调度。ChatLearn 也支持灵活的资源分配,支持模型间的资源复用、独占或部分复用等策略,在给定资源数的情况下,实现训练效率的最大化。

Executor:ChatLearn Executor 将 Alignment 训练流程划分为三个主要的模块,Environment、 Trainer和 Evaluator。Environment 负责推理模块模型和数据的并发执行和管理,Trainer 负责相应的训练模块,Evaluator 负责模型效果评估。Executor 还负责数据传输、参数同步。

Backend:得益于 ChatLearn 良好的编程接口抽象,用户通过简单的封装即可接入各种不同 backend 进行计算优化和算法优化。

Optimization:ChatLearn 也支持各种计算、显存、通信优化,通过各种并行策略组合来加速训练,通过 paged attention 和 continuous batching 等来加速推理,通过 EMS(Efficient Memory Sharing) 技术来高效复用显存,减少总资源需求,通过分组广播技术来支持 Training 和 Inference 模型间高效参数同步,等等。

性能和效果

我们比较了不同参数量规模模型的 RLHF 训练吞吐量,采取 N+N 的模型配置,即 Policy 模型和 Reward 模型采用相同大小的参数量。我们和 DeepSpeed-Chat、OpenRLHF 对比了 7B 和 70B 的模型配置,在 8 GPUs 7B+7B 规模,有 115% 的加速,在 32 GPUs 70B+70B 规模,有 208% 的加速。规模越大,加速效果越明显。同时ChatLearn还能支持更大规模的 Alignment 训练,例如:300B+300B 规模。

ChatLearn支持了Qwen 大模型的Alignment训练,Qwen2-72B Online DPO训练效果在开源模型中取得领先:

Qwen2-Math-Instruct GRPO训练效果领先业界模型:

Roadmap

后续我们计划定期发布Release版本。ChatLearn近期的Roadmap如下:

  • 支持Megatron-mcore格式模型;

  • 支持MoE模型Alignment训练;

  • 支持更多的模型;

总结

PAI-ChatLearn 是阿里云 PAI 团队自研的、灵活易用的、支持大规模 Alignment 高效训练的框架。ChatLearn 通过对 Alignment 训练流程进行合理的抽象和解耦,提供灵活的资源分配和并行调度策略。ChatLearn提供了 RLHF、DPO、OnlineDPO、GRPO 等 Alignment 训练,同时也支持用户自定义 model 的执行 flow,来实现自定义的训练流程。相比于当前的 SOTA 系统,ChatLearn 在 7B+7B 规模有 115% 的加速,在 70B+70B规模有 208% 的加速。同时ChatLearn可以扩展到更大规模,如:300B+300B(Policy+Reward)。后续ChatLearn会持续扩展支持的模型种类,并支持更多的backend进行训练或推理,同时会持续优化框架性能,简化使用接口,方便大家进行 Alignment 训练。欢迎大家来使用、交流和反馈。

开源地址

开源地址:GitHub - alibaba/ChatLearn

使用文档:

  • 中文:ChatLearn 使用文档 — ChatLearn 文档

  • 英文:ChatLearn Documentation — ChatLearn documentation

交流钉群号:98090003312

参考文献

  1. https://arxiv.org/pdf/2407.10671

  2. Introducing Qwen2-Math | Qwen

  3. Megatron-LM: GitHub - NVIDIA/Megatron-LM: Ongoing research training transformer models at scale

  4. DeepSpeed-Chat: DeepSpeedExamples/applications/DeepSpeed-Chat at master · microsoft/DeepSpeedExamples · GitHub

  5. OpenRLHF: GitHub - OpenRLHF/OpenRLHF: An Easy-to-use, Scalable and High-performance RLHF Framework (70B+ PPO Full Tuning & Iterative DPO & LoRA & Mixtral)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/52883.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PTA L1-028 判断素数

L1-028 判断素数(10分) 本题的目标很简单,就是判断一个给定的正整数是否素数。 输入格式: 输入在第一行给出一个正整数N(≤ 10),随后N行,每行给出一个小于的需要判断的正整数。 …

利用clip模型实现text2draw

参考论文 实践 有数据增强的代码 import math import collections import CLIP_.clip as clip import torch import torch.nn as nn from torchvision import models, transforms import numpy as np import webp from PIL import Image import skimage import torchvision …

滚柱导轨:数控机床高效运行的驱动力

机床制造者最关心的莫过于机床的精度,刚性和使用寿命,对导轨系统的关注甚少。但导轨为机床功能的实现奠定了可靠的基础,各种类型的机床工作部件,都是利用控制轴在指定的导轨上运动。机床设计者根据机床的类型和用途选用各种不同形…

C++ 中 static 关键字

修饰普通变量,修改变量的存储区域和生命周期,使变量存储在静态区,在 main 函数运行前就分配了空间,如果有初始值就用初始值初始化它,如果没有初始值系统用默认值初始化它。 修饰普通函数,表明函数的作用范围…

Python进阶04-网络编程

零、文章目录 Python进阶04-网络编程 1、计算机网络 网络相关知识请参考计算机网络详解 (1)IP地址的概念 IP 地址就是标识网络中设备的一个地址,好比现实生活中的家庭地址。 (2)IP地址的表现形式 IP 地址分为两类…

Javaweb学习之Vue数据绑定(五)

前期回顾 Javaweb学习之Vue实践小界面(四)-CSDN博客 认识数据绑定 Vue.js 中的数据绑定是一个核心概念,它极大地简化了前端开发中数据与视图(DOM)之间的同步问题。Vue.js 通过其响应式系统实现了数据的双向绑定&…

【Python Web开发】Flask+HTML学习笔记

目录 Flask框架一、安装flask库二、运行一个网页三、库函数及变量 HTML标签语言一、基本格式二、标签2.1 块级标签2.1.1 标题2.1.2 div2.1.3 图片2.1.4 列表2.1.5 表格 2.2 行内标签2.2.1 span2.2.2 超链接2.2.3 输入 2.3 其他标签2.3.1 提交表单 Flask框架 一、安装flask库 …

电阻柜柜体采用不锈钢材质有什么优点

电阻柜柜体采用不锈钢材质有什么优点: 1. **耐腐蚀性**:不锈钢材质具有极好的耐腐蚀性,能有效抵抗各种腐蚀物质的侵蚀,确保设备经久耐用。 2. **美观大方**:不锈钢表面光滑,质感细腻,呈现出大气…

Elasticsearch写入、读取、更新、删除以及批量操作(golang)

目录 1、背景 2、elasticsearch基础操作 2.1 创建es链接客户端 2.2 创建、删除索引 2.3 插入文档 2.3 查询文档 2.4 删除一条文档 2.5 更新文档 2.6 逻辑查询 2.7 滚动查询(批量查询) 2.8 批量插入数据 2.9 批量更新文档 2.10 批量删除文档 3、检索条件设置 4、测…

探索Unity与C#的无限潜能:从新手到高手的编程之旅

在数字创意与技术创新交织的今天,Unity游戏引擎凭借其强大的跨平台能力和灵活的编程接口,成为了无数开发者心中的首选。而C#,作为Unity的官方脚本语言,更是以其面向对象的特性和丰富的库支持,为游戏开发注入了无限可能…

Golang | Leetcode Golang题解之第375题猜数字大小II

题目&#xff1a; 题解&#xff1a; func getMoneyAmount(n int) int {f : make([][]int, n1)for i : range f {f[i] make([]int, n1)}for i : n - 1; i > 1; i-- {for j : i 1; j < n; j {f[i][j] j f[i][j-1]for k : i; k < j; k {cost : k max(f[i][k-1], f[…

关于Scrapy的那些事儿(四)Scrapy Shell

Scrapy Shell launch Scrapy shell 使用如下命令&#xff1a; scrapy shell <url>当运行scrapy shell的时候&#xff0c;它为我们提供了一些功能函数&#xff1a; shelp() :打印可用对象和快捷命令的帮助列表fetch&#xff08;request or url&#xff09;&#xff1a;…

CMake构建学习笔记11-minizip库的构建

准确来说&#xff0c;minizip其实是zlib提供的辅助工具&#xff0c;位于zlib库的contrib文件夹内。minizip提供了更为高级一点的接口&#xff0c;能直接操作文件进行压缩。不过&#xff0c;有点麻烦的是这个工具并没有提供CMake构建的方式。那么可以按照构建giflib的方式&#…

Java开发工程师-匹配性岗位(借鉴性质)

1.匹配性质 技能迁移:Java开发工程师通常具备较强的编程能力、逻辑思维和问题解决能力,这些技能可以迁移到其他领域。行业选择:考虑目前行业趋势以及未来发展方向,Java工程师可以转向大数据、人工智能、云计算等等领域。个人兴趣与职业发展:转行时个人的兴趣和职业发展规划…

1.1量化交易的定义与魅力

Hey&#xff0c;Python高手们&#xff0c;欢迎来到量化交易的世界&#xff01;在这里&#xff0c;我们不谈风花雪月&#xff0c;只谈数字和代码。量化交易&#xff0c;听起来是不是有点像是“用电脑代替人脑做交易”的黑科技&#xff1f;没错&#xff0c;你猜对了&#xff01; …

【JAVA入门】Day28 - 数据结构

【JAVA入门】Day28 - 数据结构 文章目录 【JAVA入门】Day28 - 数据结构一、栈二、队列三、数组3.1 ArrayList 四、链表4.1 LinkedList 五、二叉树5.1 二叉查找树5.2 二叉树的遍历方式5.3 平衡二叉树5.4 平衡二叉树的旋转5.5 平衡二叉树需要旋转的几种情况 六、红黑树6.1 红黑规…

永成防回水防回气装置煤矿毫不犹豫选择

永成防回水防回气装置煤矿毫不犹豫选择&#xff0c;不敢说我们有多好&#xff0c;我们只把简单的事做好&#xff0c;用心服务&#xff0c;因为品质&#xff0c;所以信任。因为信任&#xff0c;所以值得选择。 本防回水防回气装置是一种用于煤矿瓦斯管路爆渣和燃烧时防止回火、…

abstract类

1 问题 abstract类不能用 new运算符创建对象&#xff0c;必须产生其子类&#xff0c;由子类创建对象。若 abstract类的类体中有 abstract()方法&#xff0c;则只允许声明&#xff0c;不能带有方法体&#xff0c;而该类的子类必须实现 abstract()方法。一个abstract类只关心子类…

3_1_PID控制原理

自从计算机进入控制领域以来&#xff0c;用数字计算机代替模拟计算机调节器组成计算机控制系统&#xff0c;不仅可以用软件实现PID控制算法&#xff0c;而且可以利用计算机的逻辑功能&#xff0c;使PID控制更加灵活。数字PID控制在生产过程中是一种最普遍采用的控制方法&#x…

[Algorithm][综合训练][奇数位丢弃][求和][计算字符串的编辑距离]详细讲解

目录 1.奇数位丢弃1.题目链接2.算法原理详解 && 代码实现 2.求和1.题目链接2.算法原理详解 && 代码实现 3.计算字符串的编辑距离1.题目链接2.算法原理详解 && 代码实现 1.奇数位丢弃 1.题目链接 奇数位丢弃 2.算法原理详解 && 代码实现 解法…