Llama Factory :百种以上语言模型的统一高效微调框架

人工智能咨询培训老师叶梓 转载标明出处

大模型适应到特定下游任务时,传统的全参数微调方法成本高昂,因此,研究者们一直在探索更高效的微调技术。由北京航空航天大学和北京大学的研究团队提出了一个名为Llama Factory的统一框架,旨在解决大模型高效微调的问题。该框架整合了一系列前沿的高效训练方法,使用户能够灵活地定制100多种大模型的微调过程,而无需编写代码。通过内置的Web用户界面Llama board,用户可以轻松地进行模型微调和监控训练状态。

表1中列出了不同的微调技术,如 Freeze-tuning、GaLore、LoRA、DoRA 等,并标注了它们之间的兼容性(用 "√" 和 "×" 表示)。总的来说Llama Factory的主要优点包括:

  1. 多样化的微调技术:集成了多种高效的微调方法,适应不同需求。
  2. 用户友好的界面:通过Llama Factory,用户无需编码即可操作。
  3. 广泛的模型和数据集支持:兼容100+预训练模型和50+数据集。
  4. 资源优化:采用混合精度等技术减少计算资源消耗。
  5. 实时监控与评估:提供训练状态实时可视化和模型性能评估。
  6. 开源:持续更新和改进。
  7. 多语言支持:适合不同语言背景的用户使用。

想要掌握如何将大模型的力量发挥到极致吗?叶老师带您深入了解 Llama Factory —— 一款革命性的大模型微调工具。9月22日晚,实战专家1小时讲解让您轻松上手,学习如何使用 Llama Factory 微调模型。

加下方微信或评论留言,即可参加线上直播分享,叶老师亲自指导,互动沟通,全面掌握Llama Factory。关注享粉丝福利,限时免费CSDN听直播后的录播讲解。

LLaMA Factory 支持多种预训练模型和微调算法。它提供灵活的运算精度和优化算法选择,以及丰富的实验监控工具。开源特性和社区支持使其易于使用,适合各类用户快速提升模型性能。

方法

Llama Factory框架中使用的高效微调技术主要分为两大类:优化和计算。

高效优化

优化技术的目标是在微调大型语言模型(LLMs)的参数时,尽可能降低成本。Llama Factory中使用的一些关键技术包括:

  • Freeze-tuning:这种方法涉及冻结大部分参数,同时在一小部分解码层上进行微调。

  • GaLore:梯度低秩投影技术,将梯度投影到更低维度的空间,以内存高效的方式促进全参数学习。

  • LoRA:低秩适应方法,冻结所有预训练权重,并在指定层引入一对可训练的低秩矩阵。

  • QLoRA:结合量化的LoRA方法,进一步减少内存使用。

  • DoRA:权重分解低秩适应,将预训练权重分解为大小和方向组成部分,并更新方向部分以提高性能。

  • LoRA+:为了克服LoRA的次优性而提出的方法。

  • PiSSA:通过使用预训练权重的主成分初始化适配器,以实现更快的收敛。

高效计算

计算技术旨在减少LLMs所需的计算时间或空间。Llama Factory中集成的一些计算技术包括:

  • Mixed Precision Training:混合精度训练,使用不同精度的数据表示来减少内存占用。

  • Activation Checkpointing:激活检查点,通过保存中间激活值来减少内存消耗。

  • Flash Attention:一种硬件友好的方法,通过优化注意力层的输入输出开销来增强注意力计算。

  • S2 Attention:通过使用移位稀疏注意力来解决扩展上下文的挑战,从而减少长上下文LLMs微调中的内存使用。

  • Quantization:通过使用低精度表示来减少大型语言模型的内存需求。

  • Unsloth:结合Triton实现LoRA的反向传播,减少了梯度下降过程中的浮点运算(FLOPs),从而加速了LoRA训练。

图1为Llama Factory的整体架构,包括模型加载器(Model Loader)、数据工作者(Data Worker)和训练器(Trainer)三个主要模块,以及它们如何协同工作。Llama board提供了一个友好的视觉界面,使得用户可以无需编写代码即可配置和启动个别的LLM微调实例,并同步监控训练状态。每个模块的功能和特点如下:

Model Loader

Model Loader负责处理各种模型架构以进行微调,支持大型语言模型(LLMs)和视觉语言模型(VLMs)。它包含以下几个组成部分:

  • Model Initialization:使用Transformers的Auto Classes加载预训练模型并初始化参数。如果分词器的词汇表大小超过嵌入层的容量,则调整层大小并用带噪声的均值初始化新参数。

  • Model Patching:为了启用S2注意力,使用monkey patch替换模型的前向计算。对于flash attention,使用自Transformers 4.34.0以来广泛支持的原生类。

  • Model Quantization:通过bitsandbytes库将模型动态量化为8位或4位。支持包括GPTQ、AWQ和AQLM在内的后训练量化(PTQ)方法。

  • Adapter Attaching:自动确定要附加适配器的适当层。使用PEFT库方便地实现基于适配器的方法,如LoRA、rsLoRA、DoRA和PiSSA。

  • Precision Adaptation:根据计算设备的能力处理预训练模型的浮点精度。对于NVIDIA GPU,如果计算能力为8.0或更高,则采用bfloat16精度;否则,采用float16。

Data Worker

Data Worker开发了一个数据处理管道,包括数据加载、数据对齐、数据合并和数据预处理。它将不同任务的数据集标准化为统一格式,使我们能够在各种格式的数据集上微调模型。

  • Dataset Loading:使用Datasets库加载数据,支持从Hugging Face Hub加载远程数据集或通过脚本或文件读取本地数据集。

  • Dataset Aligning:设计数据描述规范来描述数据集的结构,将数据集转换为与各种任务兼容的标准结构。

  • Dataset Merging:为合并多个数据集提供高效的方法。对于非流式模式的数据集,在训练期间对数据集进行洗牌前简单地将它们连接起来。

  • Dataset Pre-processing:为微调文本生成模型设计,主要用在聊天完成中。提供数十种聊天模板,可以根据模型类型自动选择。

表2为Llama Factory支持的数据集结构,包括纯文本、Alpaca-like 数据、ShareGPT-like 数据和偏好数据等不同格式。 

Trainer

Trainer应用高效的微调技术到不同的训练方法中,支持预训练、指令调整和偏好优化。

  • Efficient Training:集成了包括LoRA+、GaLore和BAdam在内的最新高效微调方法。这些微调方法是独立的,易于应用于各种任务。

  • Model-Sharing RLHF:提出模型共享RLHF,允许使用不超过一个预训练模型进行整个RLHF训练。

  • Distributed Training:可以与DeepSpeed结合进行分布式训练,利用数据并行性充分利用计算设备的能力。

Llama board

Llama board是一个基于Gradio的统一用户界面,允许用户自定义LLMs的微调而无需编写任何代码。它提供了简化的模型微调和推理服务,使用户能够轻松探索LLMs在他们的环境中的潜力。

  • Easy Configuration:允许用户通过与Web界面的交互来自定义微调参数。

  • Monitorable Training:在训练过程中,实时可视化并更新训练日志和损失曲线,使用户能够监控训练进度。

  • Flexible Evaluation:支持在数据集上计算文本相似度分数以自动评估模型,或通过与模型聊天进行人工评估。

  • Multilingual Support:提供本地化文件,支持新语言的集成,目前支持英语、俄语和中文。

通过这些模块的协同工作,Llama Factory为用户提供了一个强大且易于使用的工具,以高效地微调和部署大型语言模型。

评估

系统的评估主要从两个角度:训练效率和对下游任务的适应性。

为了评估训练效率,研究者使用了PubMed数据集,其中包含超过3600万篇生物医学文献记录。他们从中提取了约400K个token来构建训练语料库。随后,他们使用生成预训练目标和各种高效微调方法对Gemma-2B、Llama2-7B和Llama2-13B模型进行了微调。比较了全参数微调、冻结微调、GaLore、LoRA和4位QLoRA等不同微调方法的结果。微调后,他们计算了模型在训练语料库上的困惑度(perplexity),以评估不同方法的效率。实验中还纳入了预训练模型的困惑度作为基线。

实验设置:

  • 学习率:
  • 批次大小:512个token
  • 优化器:8位AdamW,在bfloat16精度下使用激活检查点以减少内存占用
  • 冻结微调:只微调模型的最后3个解码层
  • GaLore:设置秩和缩放到128和2.0
  • LoRA和QLoRA:在所有线性层上附加适配器,设置秩和alpha到128和256

结果显示在Table 4中,其中内存指训练期间消耗的峰值内存,吞吐量计算为每秒训练的token数,PPL代表模型在训练语料库上的困惑度。

由于全参数微调Llama2-13B导致内存溢出,因此结果未记录。

QLoRA由于预训练权重以较低精度表示,因此内存占用最低。

LoRA利用Unsloth优化的LoRA层,展现出更高的吞吐量。

GaLore在大型模型上实现了更低的PPL,而LoRA在小型模型上表现更好。

为了评估不同高效微调方法的有效性,研究者比较了各种模型在下游任务上微调后的性能。他们构建了三个代表性文本生成任务(CNN/DM、XSum和AdGen)的非重叠训练集和测试集,每个任务使用2000个示例和1000个示例。选择了几个指令微调模型,并使用不同的微调方法进行了微调。然后,他们比较了全参数微调(FT)、GaLore、LoRA和4位QLoRA的结果。微调后,他们计算了每个任务测试集上的ROUGE分数,并纳入了原始指令微调模型的分数作为基线。

实验设置:

  • 学习率:
  • 批次大小:4
  • 最大输入长度:2048
  • 优化器:8位AdamW,在bfloat16精度下使用激活检查点
  • GaLore:设置秩和缩放到128和2.0
  • LoRA和QLoRA:在所有线性层上附加适配器,设置秩和alpha到128和256

结果显示在Table 5中,报告了ROUGE-1、ROUGE-2和ROUGEL的平均分数。

一些Gemma-7B和Qwen2-7B模型的结果没有包括在表中,因为GaLore方法可能不适用于它们。

结果显示,LoRA和QLoRA在大多数情况下实现了最佳性能,这突显了这些高效微调方法在适应特定任务方面的有效性。

Llama3-8B在这些模型中表现最佳,而Yi-6B和Mistral-7B在同等大小的模型中展现了有竞争力的性能。

这些实验结果证明了Llama Factory在提高训练效率和适应下游任务方面的有效性,为大型语言模型的微调提供了一个有力的工具。

论文链接:https://arxiv.org/pdf/2403.13372

项目链接:https://github.com/hiyouga/LLaMA-Factory
 

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

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

相关文章

QT天气预报

json 理论 什么是JSON? 规则 被大括号包括的是JSON对象,被中括号包括的是JSON数组. JSON数组JSON对象 实验 构建JSON 用代码实现如下json内容: //构建JSON void WirteJson() {QJsonObject rootObject;//1.插入name字段rootObject.insert("name","china&quo…

威胁建模STRIDE框架

威胁建模STRIDE框架 1.威胁建模框架概述2.STRIDE威胁建模框架欺骗 - 冒充某人或某物篡改 - 未经授权更改数据否认性 - 不宣称对执行的操作负责信息泄露 - 查看不应查看的数据拒绝服务 - 系统繁忙权限提升 - 拥有本不应该拥有的权限 3.后续的威胁发现 1.威胁建模框架概述 威胁建…

vxe-table之复选框 设置父子节点不互相关联

通过 checkStrictly 设置父子节点不互相关联&#xff0c;默认不显示头部复选框&#xff0c;可以通过 checkbox-config{showHeader} 设置 <template><div><vxe-table:column-config"{resizable: true}":data"tableData":tree-config"{…

sharding-jdbc metadata load优化(4.1.1版本)

背景 系统启动时&#xff0c;会注意sharding-jdbc提示加载metadata 于是想看看里面做了什么事情 问题追踪 debug后可以观察走到了该类 org.apache.shardingsphere.shardingjdbc.jdbc.core.context.ShardingRuntimeContext#loadSchemaMetaData 先看这个shardingRuntimeConte…

嵌入式-QT学习-小练习

1. 实现多窗口 2. 给按键增加图标 3. 动图展示 结果演示&#xff1a; Mul_Con main.cpp #include "widget.h"#include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); }一、第一个窗口展示 …

Android 测试机

要测手机应用&#xff0c;直接挂电脑上跑虚拟机的话&#xff0c;怀疑电脑都要起火了。 eBay 上买了个新的机器&#xff0c;也才 100 美元多点&#xff0c;机器都没有拆过&#xff0c;电池是完全无电的状态。 操作系统是 Android 12 的版本&#xff0c;升级到 Android 14 后&am…

苹果CMS vs. 海洋CMS:哪个系统更易于百度收录?

在选择网站内容管理系统&#xff08;影视网站选择那个CMS&#xff1f;&#xff09;时&#xff0c;收录效率和优化能力是关键考量因素。苹果CMS和海洋CMS都是受欢迎的选项&#xff0c;但在百度收录效果上&#xff0c;苹果CMS表现得更为出色。以下将详细探讨苹果CMS为何在百度收录…

uni-app生命周期(三)

文章目录 一、uni-app的生命周期二、应用生命周期三、页面的生命周期函数1.简介2.页面加载时序介绍3.页面加载常见问题4.页面加载顺序4.部分生命周期介绍 四、组件的生命周期函数 一、uni-app的生命周期 应用生命周期&#xff08;整个App的生命周期&#xff09; 在app.vue里面…

是德keysight N7552A 9G电子校准件2端口

是德keysight N7552A 9G电子校准件2端口 频率范围为直流到 9 GHz 支持 N 型和 3.5 mm 连接器 更小、更轻巧的 2 端口电子校准件 零等待时间&#xff0c;实现更快校准 兼具电子校准件的便利性与经济型机械套件的性能 N7552A 支持是德科技的 PNA-X、PNA、ENA、PXI 矢量网络分…

四、滑动窗口-算法总结

文章目录 四、滑动窗口4.1 模板4.2 示例4.2.1 最小覆盖子串4.2.2 字符串的排列4.2.3 找到字符串中所有字母异位词4.2.4 无重复字符的最长子串 四、滑动窗口 4.1 模板 /* 滑动窗口算法框架 */ void slidingWindow(string s, string t) {unordered_map<char, int> need, …

QT::QComboBox自定义左击事件信号

因为QComboBox没有自定义的clink信号&#xff0c;所以自己新建一个MyComBox类继承QComboBox&#xff0c;并且添加自定义的左击信号&#xff0c;以及使用该信号连接一个槽函数 mycombobox.h #ifndef MYCOMBOBOX_H #define MYCOMBOBOX_H#include <QComboBox> #include &l…

在 Mac 上安装虚拟机怎么样,安装虚拟机与直接安装 Windows 系统有区别吗?

随着跨系统操作的不断发展&#xff0c;虚拟机技术在生产力领域扮演着越来越重要的角色。Mac作为一款主流的操作系统&#xff0c;也有着运行虚拟机的能力。接下来给大家介绍Mac装虚拟机好不好&#xff0c;Mac装虚拟机和装Windows系统一样吗的具体内容。 Mac装虚拟机好不好 Mac…

通信工程学习:什么是FDMA频分多址

FDMA&#xff1a;频分多址 FDMA&#xff08;Frequency Division Multiple Access&#xff0c;频分多址&#xff09;是一种在无线通信领域广泛应用的多址技术。该技术通过将可用的频谱资源按频率划分&#xff0c;把传输频带划分为若干较窄且互不重叠的子频带&#xff08;或称信道…

SprinBoot+Vue爱老助老服务平台的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质…

c/c++面试100道

1.一道笔试题解析_哔哩哔哩_bilibili P20&#xff1a;#define offsetof(TYPE, MEMBER) ((size_t)&((TYPE*)0)->MEMBER) 1、 offsetof 宏是 C 语言中用于计算结构体成员相对于结构体起始地址的偏移量的宏定义。这个宏的定义如下&#xff1a; #define offsetof(TYPE, …

JavaScript模块化——ES6模块化规范

作者&#xff1a;CSDN-PleaSure乐事 欢迎大家阅读我的博客 希望大家喜欢 使用环境&#xff1a;vscode Chrome浏览器 1.ES6 1.1ES6介绍 ES6的全称是ECMAScript 6&#xff0c;也称为ES2015&#xff0c;是JavaScript的一个重要版本&#xff0c;它引入了许多新特性和改进&#xf…

Linux搭建邮箱服务器(简易版)

本章是上一文档的简易版本搭建方式更为快速简洁&#xff08;只需要两条命令即可搭建&#xff09;&#xff0c;如果想了解更详细一些可以看我上一文档 Linux接发邮件mailx_linux mailx o365-CSDN博客文章浏览阅读857次&#xff0c;点赞25次&#xff0c;收藏19次。本文详细描述了…

独立站内容营销SOP 1.0 丨出海笔记

提到内容营销&#xff0c;可能很多朋友都听过但没深入做&#xff0c;国内跨境独立站通过内容营销做的大流量的目前不多&#xff0c;哪怕大如 Shein, Anker&#xff0c;大部分时候还是在买量获客的阶段。 但大家只要明白一点即可&#xff1a;内容做得好不好&#xff0c;直接影响…

文档智能:OCR+Rocketqa+layoutxlm

此次先记录LayoutLMv2&#xff0c;梳理相关论文&#xff0c;记录如下&#xff1a; 首先认识一下 visually-rich document understanding tasks → \to → VrDU 其次&#xff0c;the text fields of interest&#xff0c;与图像识别的感兴趣区域 region of Interest 类似&…

【脑机接口】脑机接口性能的电压波形的尖峰分类和阈值比较

Comparison of spike sorting and thresholding of voltage waveforms for intracortical brain–machine interface performance 脑机接口性能的电压波形的尖峰分类和阈值比较论文下载&#xff1a;摘要1 介绍2 方法2.1数据获取2.2spike sorting 技术2.3神经数据分析 3结果3.1神…