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

news2025/4/4 6:25:18

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

大模型适应到特定下游任务时,传统的全参数微调方法成本高昂,因此,研究者们一直在探索更高效的微调技术。由北京航空航天大学和北京大学的研究团队提出了一个名为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.coloradmin.cn/o/2133309.html

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

相关文章

【免费刷题】实验室安全第一知识题库分享

道路千万条,实验安全第一条。 嘿,实验室的小伙伴们!是不是还在为实验室安全考试而烦恼?别担心,今天就让我来分享一些实用的题库,帮助你轻松应对考试,同时也更好地保护自己和实验室的安全。 一、…

前端开发第三节课

20-目录文件夹和根目录 4.8图像标签和路径(重点) 2.路径(前期铺垫知识) (1)目录文件夹和目录 实际工作中,我们的文件不能随便乱放,否则用起来很难快速地找到他们,因此…

LeetCode 热题 100 回顾13

干货分享,感谢您的阅读!原文见:LeetCode 热题 100 回顾_力code热题100-CSDN博客 一、哈希部分 1.两数之和 (简单) 题目描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标…

基于SpringBoot+Vue的个性化旅游推荐系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的…

free -h 查看内存free空间不足

free空间不足 大部分被buff/cache占用 解决办法一: 手动释放缓存 释放页缓存 sudo sync; sudo sysctl -w vm.drop_caches1 释放目录项和inode缓存 sudo sync; sudo sysctl -w vm.drop_caches2 释放所有缓存(页缓存、目录项和inode缓存) sudo sync…

【隐私计算】安全多方计算MPC中的高效三角函数计算

隐私计算中的非线性函数很难算,或者开销很大。三角函数更是如此,Squirrel文章中提出了一种高效的计算方式,感觉可以作为一种通用优化方案。 参考文献:Squirrel: A Scalable Secure Two-Party Computation Framework for Training…

几何概率模型

一、几何概率模型 ① 样本空间的样本点为无限个 ② 每个样本点发生的可能性是均等的 ③ P(A)事件A的几何度量值/样本空间的几何度量值 说明:如果样本空间的样本点为有限个,则为古典概型 通过2个例子,来感受下两者的区别 ① 例&#xff1…

大语言模型之ICL(上下文学习) - In-Context Learning Creates Task Vectors

本文译自 《In-Context Learning Creates Task Vectors》 —— 论文中的作者也在用LLaMA模型,笔者自我感觉拉近和世界顶级人才的距离,哈哈内容较长,如想看结论直接看 摘要、介绍与结论几个章节即可,看细节请看目录索引。经验风险最…

ZoneTree: 高性能ACID兼容的.NET有序键值数据库

推荐一个专门针对键值存储的开源数据库。 01 项目简介 ZoneTree基于.Net开发的开源键值数据库。它以其持久化存储、高性能处理、事务性操作和ACID合规性而著称。ZoneTree能够以内存数据库的形式运行,也可以在本地或云存储上进行数据持久化,提供了灵活性…

人工智能物联网:一项综述

这篇论文的标题是《Artificial Intelligence of Things: A Survey》,作者是 Shakhrul Iman Siam 等人,来自不同的大学和研究机构。论文提供了对人工智能物联网(AIoT)研究的系统性和全面性回顾。以下是论文的主要内容概述&#xff…

【H2O2|全栈】关于CSS(4)CSS基础(四)

目录 CSS基础知识 前言 准备工作 精灵图 概念 属性 案例 浮动 基础属性 清除浮动 案例 预告和回顾 后话 CSS基础知识 前言 本系列博客将分享层叠样式表(CSS)有关的知识点。 接下来的几期内容相对比较少,主要是对前面的内容进…

服务网关Gateway快速入门

1.引入 网关可以把它理解成坐高铁时的安检,他可以对用户做身份验证,哪些人能通过,哪些人不能通过,都由他决定,如果没有安检,那么高铁的安全性将受到打击,一个微服务没有网关,那么接口…

大数据新视界 --大数据大厂之HBase深度探寻:大规模数据存储与查询的卓越方案

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

webpack原理简述

1.1 核心概念 JavaScript 的 模块打包工具 (module bundler)。通过分析模块之间的依赖,最终将所有模块打包成一份或者多份代码包 (bundler),供 HTML 直接引用。实质上,Webpack 仅仅提供了 打包功能 和一套 文件处理机制,然后通过生…

Mini-Omni 语言模型在流式传输中边思考边听说应用

引入简介 Mini-Omni 是一个开源的多模态大语言模型,能够在思考的同时进行听觉和语言交流。它具有实时端到端语音输入和流媒体音频输出的对话能力。 语言模型的最新进展取得了显著突破。GPT-4o 作为一个新的里程碑,实现了与人类的实时对话,展示了接近人类的自然流畅度。为了…

69、Python番外篇:从编程范式看如何学习一门编程语言的精髓

引言 在之前的文章中,我们曾聊过如何学习一门编程语言,当时是从程序的构成的角度来分析、展开的,主要提及了数据的表达 数据的处理,也就是数据结构 算法的内容。这个角度对应到所有编程语言,基本都是适用的。但是&a…

认识泛型和包装类

认识泛型和包装类 包装类基本数据类型和对应的包装类装箱和拆箱自动装箱和自动拆箱 什么是泛型引出泛型语法 泛型类的使用语法示例类型推导 裸类型(Raw Type)说明 泛型如何编译的擦除机制 泛型的上界语法示例复杂示例 泛型方法定义方法示例使用类型推导和不用类型推导静态的泛型…

电脑安装OpenWRT系统

通过网盘分享的文件:OpenWRT 链接: https://pan.baidu.com/s/1nrRBeKgGviD31Omji480qA?pwd9900 提取码: 9900 下面开始教程: 1.先把普通U盘制作成一个PE启动盘,我用的是微PE工具箱,直接安装PE到U盘。 2.把写盘工具和openWRT系统…

项目中使用简单的立体3D柱状图,不用引入外部组件纯css也能实现

在一些项目需求中&#xff0c;可能会遇到下面这种场景&#xff0c;3d柱状图来展示百分比&#xff0c;但是又不想引入外部组件&#xff0c;下面就用纯css给大家封装了一个组件 先赞后看&#xff0c;养成习惯 <template><view class"lui-column-bg" :sty…