国货之光,复旦发布大模型训练效率工具 CoLLiE,效率显著提升

在这个信息爆炸的时代,大型语言模型(LLM)成为理解和挖掘文本信息的重要工具。为了更好地适应各种应用场景,对 LLM 进行定制化训练变得至关重要。

在预训练 LLM 的过程中,无论是初学者还是经验丰富的炼丹人士,复旦大学研究团队提出的 CoLLiE 都能成为其趁手的工具。不管是追求高效的多 GPU 并行训练,还是想通过指令微调实现卓越性能,CoLLiE 在效率方面都能够脱颖而出。

论文题目:
CoLLiE: Collaborative Training of Large Language Models in an Efficient Way

论文链接:
https://arxiv.org/abs/2312.00407

Github 地址:
https://github.com/OpenLMLab/collie

工具包教程:
https://openlmlab-collie.readthedocs.io/zh-cn/latest/


LLM 在各种自然语言处理任务中展现出卓越的能力,而通过对其进行预训练,我们可以在特定应用场景中实现更出色的性能。如图 1 所示,训练过程可以分为两个阶段:

  1. 进一步预训练:用于补充特定领域知识,扩展词汇以提高分词效率;

  2. 指令微调:用于微调模型,使其适应下游任务并提高遵循指令的能力。

图片

▲图1 预训练语言模型的两个训练阶段

随着语言模型规模的扩展,训练所需的资源显著增加,使得在单个 GPU 上训练整个模型变得困难。为了解决这个问题,模型并行性通过在不同 GPU 之间划分模型、在这些 GPU 之间分配训练工作负载。可以通过三种方法实现:

  • 张量并行性:将模型的不同部分分配给不同的 GPU 进行训练;

  • 流式并行性:将训练过程划分为多个阶段,每个阶段在不同 GPU 上执行;

  • 零冗余优化器的第三阶段(ZeRO-3):使用零冗余优化器来实现模型的并行训练。

此外,在指令微调阶段存在参数高效微调(PEFT)方法,是资源效率和训练效果之间的权衡方法。通过选择性地选择或添加一些参数进行训练,有效降低了训练 LLM 所需的 GPU 内存。

本文作者提出了 CoLLiE,作为易于使用的协同 LLM 高效训练库,不仅整合了先前提到的三种并行策略和 PEFT 方法,还实现了高效的优化器。

对比当下流行的方法,CoLLiE 的训练效率更胜一筹,具备更高的训练吞吐量。此外,CoLLiE 还提供了多种功能,其模块化设计使得用户可以灵活组合并行策略、PEFT 方法和训练超参数,其设计注重可扩展性,旨在为用户提供灵活的定制功能。总之,CoLLiE 既能满足初学者的需求,也适用于经验丰富的专业人士。

CoLLiE

图 2(a) 概述了以 Trainer 类为中心的 CoLLiE 整体结构。CollieConfig、CollieModel、CollieDataset 和 Optimizer 类作为 Trainer 的输入。CoLLiE 还为 Trainer 提供了一组方便的插件,使用户能自定义训练过程。根据所配置和选择的插件,Trainer 执行训练过程,保存模型的检查点,并记录系统指标。

图片

▲图2 CoLLiE 的整体架构和功能

根据图 2(b) 所示,CoLLiE 基于 PyTorch 和 DeepSpeed,各种技术协同来促进大型语言模型的有效训练。具体而言,CoLLiE 集成了 FlashAttention 以提升效率,实现了基于 ZeRO 的 DP(数据并行)、TP(模型并行)和 PP(流式并行),以支持 3D 并行性。此外,CoLLiE 还实现了内存高效的微调方法。

协同微调方法

  • 3D 并行性:在分布式训练框架中同时利用数据并行性(Data Parallelism)、模型并行性(Model Parallelism)和流式并行性(Pipeline Parallelism)的一种训练方法。但 HuggingFace 中的模型由于结构限制只能选择 ZeRO-3 进行模型并行。为支持 3D 并行性,CoLLiE 采用 Megatron-LM 来重构模型,并根据 DeepSpee 对流式模型(pipeline model)结构的要求进行重组,这种方法的优势在于显著降低了用户学习曲线

  • 参数高效微调:CoLLiE 通过将 PEFT 库整合到其 CollieModel 中,填补了 PEFT 库在分布式训练方面的不足,使其能够更好地适应大规模分布式训练的需求

  • 高效优化器:CoLLiE 集成了多种新型优化器(Adan、Lion、Sophia、LOMO 和 AdaLomo 等),其目标是在训练过程中节省内存、改善优化结果或加速模型收敛。同时,CoLLiE 优化器的实现与其他组件解耦合,以便更灵活地进行组合和定制。

模型

此外,CoLLiE 在模型实现中做了一些改进,其中包括将自注意力替换为 FlashAttention,这是一种新的自注意力机制,然而,由于其对硬件和 CUDA 版本具有一定要求,因此 CoLLiE 在 CollieConfig 中添加了 'use_flash' 选项,用户可以通过该选项一键禁用 FlashAttention。

而且 CoLLiE 实现了各种开源语言模型(包括 LLaMA、InternLM、ChatGLM 和 MOSS),并计划在未来支持更多的语言模型。

配置

CoLLiE 提供了一个名为 CollieConfig 的统一配置类,用于管理多种配置(包括模型配置、并行策略、DeepSpeed 配置、PEFT 配置和训练超参数等)。CollieConfig 的内容可以方便地组合不同预训练语言模型、微调方法和超参数

用户可以通过 CollieConfig 轻松设置模型结构和参数,而 CollieModel 和 Trainer 将根据 CollieConfig 的内容自动微调模型参数的分区和修改训练过程。这使得用户在使用 CoLLiE 时无需处理分布式训练的复杂性,而能够轻松配置 3D 并行性

数据集

CoLLiE 提供了三个 Dataset 类,分别为训练任务、生成任务的评估和分类任务的评估提供了方便的数据处理功能:

  1. CollieDatasetForTraining:

    • 用于训练任务,可以接受两种形式的输入。一种是带有字段"text",另一种是带有字段"input"和"output"。

    • 如果输入包含"text"字段,那么模型将进行预训练任务,并将计算 token 损失。

    • 如果输入包含"input"和"output"字段,那么模型将进行指令微调任务,其中 token 损失将在"output"字段中计算。

  2. CollieDatasetForGeneration:

    • 用于生成任务的评估,"text"作为必需字段,"target"作为可选字段。

    • 模型基于"text"生成输出,而"target"用于计算 Evaluator 中的指标。

  3. CollieDatasetForClassification:

    • 用于分类任务的评估,有"input"、"output"和"target"字段。

    • "input"字段表示问题,"output"字段包含所有可能的选项,而"target"字段表示应该选择哪个选项。

可以从 JSON 文件或字典列表读取数据,并在处理数据后将结果存储在磁盘上,以便下次直接读取。这使得数据处理变得方便且高效,提升了不同类型任务的灵活性。

控制器

作者还介绍了 CoLLiE 中围绕 Trainer 类的三个模块化设计的类:

  1. Trainer:

    • Trainer 类用于管理分布式训练,包括分布环境的初始化、训练循环以及模型权重保存和检查点。

    • CoLLiE 提供了 Trainer 来简化用户的训练过程,封装了相对固定的训练循环,并为用户提供了多个接口,以定制训练过程。

    • Trainer 还支持插件,其中,Monitor 用于跟踪并记录在训练过程中的各种指标,而 Callback 在训练过程中的不同回调点进行自定义操作。

  2. Evaluator:

    • Evaluator 类与 Metric 类一起用于评估模型性能。

    • CoLLiE 通过子类化 Evaluator 基类,实现了三种类型的Evaluator,用于生成任务、分类任务和困惑度评估。

    • Evaluator 的结果可用于更新 Metric 类,该类在处理评估数据集的每个批次后更新计算评估所需的变量。

  3. Server:

    • Server 类提供基于 Web 的、交互式的、流生成序列的功能,使用户能方便地将训练好的模型部署到 Web 上进行使用,并在训练过程中手动探查模型性能。

    • DataProvider 类为 Server 提供异步推理数据作为子进程,用户可以通过 Web 界面输入提示,服务器根据提示生成输出,并返回到 Web 界面供用户查看。

它们使得 CoLLiE 更加模块化和灵活,用户可以根据自己的需求选择并定制相应的功能。

实验评估

内存需求

前人的工作估计了模型训练所需的总 GPU 内存为模型参数数量的 18 倍,这仅考虑了参数、梯度和优化器状态使用的内存,但没考虑其他组件。图 3 的展示了不同优化器对训练内存需求的影响,以及在选择优化器时需要考虑内存效率的重要性。

图片

▲图3 在不同配置下训练模型时的内存需求

吞吐量分析

这项实验分析了预训练和微调阶段的吞吐量。吞吐量的度量标准是每个 GPU 每秒处理的标记数量,即 TGS(Tokens per GPU Second)。

如图 4 所示,CoLLiE 在不同硬件上通过集成 FlashAttention 和优化并行策略,在预训练和微调中实现了明显更高的吞吐量

图片

▲图4 在 A100 和 RTX-3090 上测试的吞吐量

指令微调任务的表现

表 1 中的实验结果显示了不同训练方法在 GPT-4-Alpaca 上的性能比较。原始 LLaMA-65B 在事实知识、推理能力、代码能力等方面表现出相当大的能力,但在遵循指令方面存在困难。通过进行指令微调,模型的性能平均显著提高

由此可见,通过使用不同的训练方法,特别是结合指令微调,可以显著提升 GPT-4-Alpaca 在遵循指令方面的性能

图片

▲表1 在 GPT4-Alpaca 上比较不同训练方法

总结

最后,作为一个国产的大模型工具包,复旦大学研究团队提出的 CoLLiE,通过各项比较展示了其在协同大规模语言模型训练领域的卓越性能。CoLLiE 不仅集成了高效的模型结构和 FlashAttention 技术、支持 3D 并行性,而且提供了可定制的 Trainer,助力用户在训练过程中更灵活地使用各种训练方法。

CoLLiE 与流行工具的性能比较,展现了显著提高的训练吞吐量,以及其在 LLM 任务中的卓越性能。此外,CoLLiE 对 GPU 内存需求与模型参数大小的关系进行了深入剖析,为用户管理训练资源提供了实用的参考指南。相信 CoLLiE 以其卓越的性能和可定制性,可以为国产大模型工具树立新的标杆。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据分析基础之《numpy(4)—ndarry运算》

一、逻辑运算 当我们要操作符合某一条件的数据时,需要用到逻辑运算 1、运算符 满足条件返回true,不满足条件返回false # 重新生成8只股票10个交易日的涨跌幅数据 stock_change np.random.normal(loc0, scale1, size(8, 10))# 获取前5行前5列的数据 s…

光模块市场分析与发展趋势预测

光模块是光通信领域的重要组成部分,随着数字经济,大数据,云计算,人工智能等行业的兴起,光模块市场经历了快速发展,逐渐在数据中心、无线回传、电信传输等应用场景中得到广泛应用。本文将基于当前光模块全球…

画图之C4架构图idea和vscode环境搭建篇

VS Code 下C4-PlantUML安装 安装VS Code 直接官网下载安装即可,过程略去。 安装PlantUML插件 在VS Code的Extensions窗口中搜索PlantUML,安装PlantUML插件。 配置VS Code代码片段 安装完PlantUML之后,为了提高效率,我们最好安装PlantUML相关的代码片段。 打开VS Cod…

基于SSM的游戏资源管理系统设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

Vue 使用 js-audio-recorder 实现录制、播放、下载音频

Vue 使用 js-audio-recorder 实现录制、播放、下载 PCM 数据 Vue 使用 js-audio-recorder 实现录制、播放、下载 PCM 数据js-audio-recorder 简介Vue 项目创建下载相关依赖主界面设计设置路由组件及页面设计项目启动源码下载 Vue 使用 js-audio-recorder 实现录制、播放、下载 …

【Hadoop精讲】HDFS详解

目录 理论知识点 角色功能 元数据持久化 安全模式 SecondaryNameNode(SNN) 副本放置策略 HDFS写流程 HDFS读流程 HA高可用 CPA原则 Paxos算法 HA解决方案 HDFS-Fedration解决方案(联邦机制) 理论知识点 角色功能 元数据持久化 另一台机器就…

VSCode报错插件Error lens

1.点击左侧扩展图标→搜索“error lens”→点击“安装” 2.安装成功页面如下: 3.代码测试一下:书写代码的过程中会出现红色提醒或红色报错 4.另外推荐小伙伴们安装中文插件,学习过程中会比较实用方便,需要安装中文插件的小伙伴请点…

智能优化算法应用:基于鼠群算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于鼠群算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于鼠群算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.鼠群算法4.实验参数设定5.算法结果6.参考文献7.MA…

SoC芯片中的复位

文章目录 文章前情预告一、复位是什么?二、为什么要有复位?1.复位可以让电路有一个确定的初始状态2.复位可以使电路从错误状态回到可以控制的确定状态 三、 复位有什么类型,复位的注意事项!四、 复位的概念在其他方面的体现五、 复…

3d游戏公司选择云电脑进行云办公有哪些优势

随着游戏行业的不断发展,很多的游戏制作公司也遇到了很多的难题,比如硬件更换成本高、团队协同难以及效率低下等问题,那么如何解决游戏行业面临的这些行业痛点,以及游戏制作公司选择云电脑进行云办公有哪些优势?一起来…

OpenAI 疑似正在进行 GPT-4.5 灰度测试!

‍ 大家好,我是二狗。 今天,有网友爆料OpenAI疑似正在进行GPT-4.5灰度测试! 当网友询问ChatGPT API调用查询模型的确切名称是什么时? ChatGPT的回答竟然是 gpt-4.5-turbo。 也有网友测试之后发现仍然是GPT-4模型。 这是有网友指…

13 v-show指令

概述 v-show用于实现组件的显示和隐藏,和v-if单独使用的时候有点类似。不同的是,v-if会直接移除dom元素,而v-show只是让dom元素隐藏,而不会移除。 在实际开发中,v-show也经常被用到,需要重点掌握。 基本…

【CLion】使用CLion开发STM32

本文主要记录使用CLion开发STM32,并调试相关功能 使用的CLion版本:2023.3.1 CLion嵌入式配置教程:STM32CubeMX项目 |CLion 文档 (jetbrains.com) OpenOCD官网下载:Download OpenOCD for Windows (gnutoolchains.com) GNU ARM工…

ros2机器人在gazebo中移动方案

原文连接Gazebo - Docs: Moving the robot (gazebosim.org) 很重要的地方:使用虚拟机运行Ubuntu的时候,需要关闭”加速3D图形“的那个选项,否则gazebo无法正常显示。 Moving the robot(使用命令移动机器人示例) In t…

通用的java中部分方式实现List<自定义对象>转为List<Map>

自定义类 /*** date 2023/12/19 11:20*/ public class Person {private String name;private String sex;public Person() {}public Person(String name, String sex) {this.name name;this.sex sex;}public String getName() {return name;}public String getSex() {return…

Ubuntu中基础命令使用

前言 以下指令测试来自于Ubuntu18.04 如果有说的不对的,欢迎指正与补充 以下指令为我学习嵌入式开发中使用过最多的指令 目录 前言 1 ls 首先我们进入到Linux操作系统中 2 touch创建一个文件 3 pwd查看当前路径 4 创建目录 5 删除文件 6 cd 目录跳转 0…

Seata使用详解

分布式事务介绍分布式事务的优缺点CAP理论介绍Base理论介绍CAP和BASE之间有什么区别Seata介绍Seata支持的事务模式介绍Seata的架构Seata应用场景Seata集群部署Seata集群部署的优缺点Seata在Java中的使用案例Seata在Java中的代码示例Seata与SpringBoot2.x的整合Seata与SpringBoo…

【️Java是值传递还是引用传递?】

✅Java是值传递还是引用传递? ✅Java是值传递还是引用传递?✅典型理解 ✅增加知识仓✅Java的求值策略✅Java中的对象传递✅值传递和共享对象传递的现象冲突吗? ✅总结 ✅Java是值传递还是引用传递? ✅典型理解 编程语言中需要进行方法间的…

实现个人日志命令行工具(C语言)

〇、前言 中午上课的时候,打开 github 看了一下个人主页,虽然最近很忙,但是这个活动记录有点过于冷清: 于是我就想着写一个日志命令行工具,输入以下命令就能将我的日志立即同步到 github 上: mylog toda…

<软考>软件设计师-5计算机网络(总结)

1 网络功能和分类 1-1计算机网络的功能 计算机网络是计算机技术与通信技术相结合的产物,它实现了远程通信、远程信息处理和资源共享。计算机网络的功能:数据通信、资源共享、负载均衡、高可靠性。 1-2计算机网络按分布范围划分 1-3网络的拓扑结构 总线型&#xff0…