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

news2024/9/20 12:36:54

导读

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.coloradmin.cn/o/2086951.html

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

相关文章

代码随想录第十天——LeetCode 150. 逆波兰表达式求值、239. 滑动窗口最大值、347.前 K 个高频元素

150. 逆波兰表达式求值 力扣题目链接(opens new window) 根据 逆波兰表示法,求表达式的值。 有效的运算符包括 , - , * , / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。 说明: 整数除法只保留整数部分。 给定逆波兰表达式总是…

weditor使用问题总结

1.Pixel连接weditor提示Local server not started 产生原因1:开发者模式关闭后重开部分选项没勾选 解决方案:打开如下设置即可 产生原因2:安装了uiautodev导致uiautomator2版本升级到了3.x版本 解决方案:重新安装uiautomator2的…

Nginx: 缓存, 不缓存特定内容和缓存失效降低上游压力策略及其配置示例

概述 在负载均衡的过程中,有一个比较重要的概念,就是缓存利用缓存可以很好协调Nginx在客户端和上游服务器之间的速度不匹配的矛盾从而很好的解决整体系统的响应速度 如果用户需要通过Nginx获取某一些内容的时候,发起一个request请求这个请求…

我在高职教STM32——ADC电压采集与光敏电阻(4)

大家好,我是老耿,高职青椒一枚,一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次,同行应该都懂的,老师在课堂上教学几乎是没什么成就感的。正是如此,才有了借助 CSDN 平台寻求认同感和成就感的想法。在这里,我准备陆续把自己花了很多心思设计的教学课件…

linux每个memory cgroup的lru链表是什么创建的

1.概述 对Linux memory子系统有基本了解的都知道,linux内核通过LRU管理物理内存,不知道是否有思考过如下问题:LRU是全局一套,还是说每个memory cgroup拥有单独的一套LRU链表?直接揭晓答案:每个memory cgro…

Typora + PicGo + Gitee 实现图片自动上传

Typora PicGo Gitee 实现图片自动上传 1.配置Gitee1.创建Gitee仓库2.设置私人令牌2. PicGo 的安装配置2.1 下载 PicGo2.2 安装 PicGo2.3 安装 PicGo 的自动上传插件2.4 Gitee 图床设置 3. Typora 安装配置3.1 安装**版本3.2 配置 PicGo 4. 上传验证 1.配置Gitee 1.创建Gitee…

字节AI辅助编程工具MarsCode,开启高效编程之旅

点击链接即可注册和使用:豆包MarsCode 一、巨头较量,MarsCode 崭露头角 在当今的编程世界中,代码补全工具层出不穷。阿里的通义灵码凭借阿里强大的技术实力,在代码补全方面表现出色,能够快速理解程序员的意图&#x…

tomcat在eclipse中起动成功,无法访问tomcat主页

最近通过geoserver的war包将,geoserver服务部署到了tomcat,发现在eclipse中启动服务后,无法访问localhost:8080主页,geoserver主页:localhost:8080/geoserver/web同样也无法访问。 只需要双击下面的server…

css画个熊猫

【html源码-一键复制查看效果】 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title></title><style>* {margin: 0;padding: 0;box-sizing: border-box;}.box {position: relative;width: 300px;height: 260px;…

全国地铁站数据实时更新:Python + 高德地图实战

数据抓取呢&#xff0c;非常注重时效性。本篇文章记录于2024年8月&#xff0c;介绍如何使用Python和高德地图来获取中国各大城市的最新地铁站数据。通过python脚本&#xff0c;可以直接获取最新的地铁站信息&#xff0c;确保数据与高德地图的数据源同步更新&#xff0c;数据来源…

软件测学习笔记丨Linux的进程与线程

本文转自测试人社区&#xff0c;原文链接&#xff1a;https://ceshiren.com/t/topic/32047 一、简介 进程&#xff1a;在Linux中&#xff0c;进程指正在运行的程序的示例。每个进程都有一个唯一的标识符&#xff08;PID&#xff09;&#xff0c;并且可以包含代码、数据和文件描…

主控

3. 修改 etcd 数据库配置 [rootnode1 ~] # vim /etc/etcd/etcd.conf [rootnode1 ~] # cat /etc/etcd/etcd.conf #[Member] #ETCD_CORS"" ETCD_DATA_DIR "/var/lib/etcd/default.etcd" #ETCD_WAL_DIR"" #ETCD_LISTEN_PEER_URLS"http…

如何在你vs code和ide编译器使用AI

vs code举例。先看效果图 2个步骤轻松拥有 1、注册豆包AI账号&#xff1a;点击注册 2、在vs code中安装&#xff1a; 第一种方法&#xff1a;快速安装 第二种方法&#xff1a;手动安装, 第1步&#xff1a;安装 Visual Studio Code 后&#xff0c;左侧导航栏上点击扩展。 第2步…

Avalonia 播放 VLC 视频(Windows / Linux)

【演示效果】 一、开发步骤 1. 版本与引用类库 Avalonia 版本:11.0.11 Windows上只需要安装以下类库: LibVLCSharp 3.8.5 LibVLCSharp.Avalonia 3.8.5 VideoLAN.LibVLC.Windows 3.0.20 引用截图: 2. 前端代码 <UserControl xmlns="https://github.com/avaloni…

代码随想录 刷题记录-20 动态规划(4)多重背包理论、背包问题总结

一、多重背包基本理论 有N种物品和一个容量为V 的背包。第i种物品最多有Mi件可用&#xff0c;每件耗费的空间是Ci &#xff0c;价值是Wi.求解将哪些物品装入背包可使这些物品的耗费的空间 总和不超过背包容量&#xff0c;且价值总和最大。 多重背包和01背包是非常像的&#x…

Vue项目“npm run serve”总卡住的问题 已解决

Vue项目“npm run serve”总卡住的问题 已解决 概述 如果卡住进度在51% 直接看这篇 https://blog.csdn.net/qq_34419312/article/details/141681307?spm1001.2014.3001.5501 在使用Vue.js进行项目开发时&#xff0c;npm run serve命令是我们常用的启动本地开发服务器的方式…

SpringBoot依赖之Spring Boot DevTools热部署开发增效工具

摘要&#xff1a;Spring项目又大又重&#xff0c;依赖多&#xff0c;编译启动慢&#xff0c;怎么提高研发效率呢&#xff1f;方法之一热部署&#xff01; 概念 Spring Boot DevTools 依赖名称: Spring Boot DevTools功能描述: Provides fast application restarts, LiveRelo…

提高 Web 应用程序安全性的标准

开放式 Web 应用程序安全项目 (OWASP) 是一个国际非营利组织&#xff0c;致力于为任何有兴趣提高 Web 应用程序安全性的人提供免费文档、工具、视频和论坛。 OWASP 最初成立为开放式 Web 应用程序安全项目&#xff0c;并于 2004 年注册为非营利性慈善机构&#xff0c;提供有关…

杰发科技AC7840——EEP的EEP_HAL_OTHER_ERROR错误

0. 初始化EEP时候发现返回5 在EEP使用手册里面有写答案 2. 根据文档看看EEP初始化的参数 2. 从代码看看EEP初始化流程 对EepSize进行校验&#xff0c;有异常直接退出 最小编程字节数&#xff0c;用的挺多的 重复次数赋值&#xff0c;看起来每个都要尝试3次 EEP的地址赋值 解锁…

嵌入式Linux应用程序开发-2 Linux基础命令

Linux常用命令 Shell是一种Linux中的命令行解释程序&#xff0c;就如同Command.com是DOS下的命令解释程序一样&#xff0c;为用户提供使用操作系统的接口。用户在提示符下输入的命令都由Shell先解释然后传给Linux内核。 Shell是命令语言、命令解释程序集程序设计语言的统称。…