LLAMA FACTORY是一个统一框架,用于高效微调100+种大语言模型。它整合了LoRA、QLoRA、GaLore等前沿微调技术,提供无需编码的Web界面LLAMA BOARD,降低微调门槛和计算成本。该框架支持预训练、指令微调和偏好优化等多种训练范式,已在GitHub获得25K+星标,使大模型微调变得"民主化",让更多人能轻松使用。
今天我们要聊的这篇论文,介绍了一个非常厉害的工具,叫做LLAMA FACTORY。你可以把它想象成一个“大语言模型工厂”。
通俗解释一下:现在市面上有很多强大的语言模型,比如大家可能听说过的LLaMA、GPT等等。但是,这些模型就像刚从工厂出来的“通用产品”,要让它帮你写邮件、做翻译或者当客服,就需要根据你的具体任务对它进行“再培训”,这个过程就叫做微调(Fine-Tuning)。
那么问题来了:
- 不同的模型(比如LLaMA和ChatGLM)微调方法不一样,很麻烦。
- 微调需要很多计算资源(比如很贵的显卡),成本很高。
- 微调过程复杂,对新手不友好。
LLAMA FACTORY就是为了解决这些问题而生的!它就像一个大工具箱,把100多种不同语言模型的微调方法都统一到了一起。无论你用哪个模型,都可以用同样的、高效的方法来微调它,大大降低了使用门槛和计算成本。
举个例子:假设你开了一家电商公司,想训练一个智能客服。以前你需要为不同的模型(A模型、B模型)分别学习不同的微调方法,费时费力。现在有了LLAMA FACTORY,你只需要学会这一种工具,就可以轻松微调A模型或B模型来当你的客服,又快又省事。
摘要
高效微调对于将大语言模型(LLMs)适配到下游任务至关重要。然而,在不同的模型上实现这些方法需要付出不小的努力。我们提出了LLAMA FACTORY,这是一个集成了多种前沿高效训练方法的统一框架。它提供了一个解决方案,可以通过内置的Web用户界面LLAMA BOARD,灵活定制100多种大语言模型的微调,而无需编写代码。我们在语言建模和文本生成任务上,通过实验验证了我们框架的效率和有效性。该框架已在 https://github.com/hiyouga/LLaMA-Factory 发布,并获得了超过 25,000 个星标和 3,000 个分支。
1 引言
想象一下,有一个超级聪明的“大脑”,它不仅能回答问题、翻译语言,还能从一堆信息里提取关键内容。这就是大语言模型,它展现出了惊人的推理能力,并推动了问答系统、机器翻译和信息抽取等众多应用的发展。
随之而来的是,开源社区涌现了大量的大语言模型。比如,Hugging Face 的开放大语言模型排行榜上就有超过5000个模型,这为想要利用大语言模型力量的人们提供了极大的便利。
但是,问题来了:这些模型通常有海量的参数(可以理解为模型的“知识量”或“复杂度”)。如果我们想用有限的资源(比如普通的电脑显卡)来训练它,让它适应某个特定任务(比如专门回答医学问题),这成本太高了,几乎不可能。
怎么办呢?一个流行的解决方案是高效微调(Efficient Fine-tuning)。这种方法可以大大降低训练大语言模型以适应各种任务时的成本。然而,社区里贡献了各种各样的高效微调方法,却缺少一个系统性的框架,能够把这些方法统一起来,适配到不同的大语言模型上,并为用户提供一个友好的界面来自定义训练。
为了解决上述问题,我们开发了LLAMA FACTORY框架。这个框架的目标是让大语言模型的微调变得“民主化”——也就是让更多人能轻松使用。它通过可扩展的模块,统一了多种高效微调方法,使得用极少的资源和高效率来微调数百个大语言模型成为可能。
此外,它还简化了常用的训练方法,包括:
- 生成式预训练(Generative Pre-training)
- 监督式微调(Supervised Fine-tuning, SFT)
- 基于人类反馈的强化学习(Reinforcement Learning from Human Feedback, RLHF)
- 直接偏好优化(Direct Preference Optimization, DPO)
用户可以利用命令行或网页界面,以最少甚至无需编码的方式来定制和微调他们的大语言模型。
LLAMA FACTORY 主要由三个核心模块构成:模型加载器(Model Loader)、数据处理器(Data Worker)和训练器(Trainer)。我们最大限度地减少了这些模块对特定模型和数据集的依赖,使得框架能够灵活扩展到数百个模型和数据集。
具体来说:
- 我们建立了一个模型注册表,模型加载器可以通过识别精确的层,将适配器(Adapter)精确地附加到预训练模型上。
- 我们开发了一种数据描述规范,数据处理器可以通过对齐相应的数据列来收集数据集。
- 我们提供了即插即用的最先进高效微调方法实现,训练器可以通过替换默认方法来激活它们。
我们的设计使得这些模块可以在不同的训练方法中重复使用,显著降低了集成成本。
LLAMA FACTORY 使用 PyTorch 实现,并极大地受益于 Transformers、PEFT 和 TRL 等开源库。在此基础上,我们提供了一个开箱即用、具有更高抽象层次的框架。此外,我们还基于 Gradio 构建了LLAMA BOARD,使得微调大语言模型完全不需要编码。
表 1:LLAMAFACTORY 与流行的大语言模型微调框架功能对比。
LLAMAFACTORY 在 Apache-2.0 许可证下开源。它在 GitHub 上已经获得了超过 25,000 颗星和 3,000 次分支,并且在 Hugging Face Hub 上有数百个开源模型是基于 LLAMAFACTORY 构建的。例如,Truong 等人基于 LLAMAFACTORY 构建了 GemSura-7B 模型,揭示了 Gemma 模型的跨语言能力。此外,数十项研究已经利用我们的框架来探索大语言模型。
2 相关工作
随着对微调大语言模型(LLMs)的需求快速增长,许多用于将LLM适配到特定目的的框架被开发出来。
- LLAMAFADapter(Zhang et al., 2024) 通过使用零初始化的注意力(zero-initialized attention)来高效地微调Llama模型 (Touvron et al., 2023a)。
- FastChat(Zheng et al., 2023) 是一个专注于为聊天完成(chat completion)目的训练和评估LLM的框架。
- LitGPT(AI, 2023) 提供了生成模型的实现,并支持多种训练方法。
- Open-Instruct(Wang et al., 2023d) 提供了训练指令(instruct)模型的方案。
- Colossal AI(Li et al., 2023b) 采用了先进的并行策略进行分布式训练。
- LMFlow(Diao et al., 2024) 支持为特定领域或任务训练LLM。
- GPT4All(Anand et al., 2023) 允许LLM在消费级设备上运行,同时也提供微调能力。
与现有的竞争框架相比,LLAMAFACTORY支持更广泛的高效微调技术和训练方法。我们在表1中列出了代表性框架之间的特性对比。
表2:LLAMAFACTORY中特色微调技术之间的兼容性。
3 高效的微调技术
高效的大型语言模型(LLM)微调技术主要可以分为两大类:一类侧重于优化,另一类侧重于计算。
- 高效的优化技术:其主要目标是在尽可能降低成本的前提下,微调LLM的参数。
- 高效的计算方法:其主要目标是减少LLM所需计算的时间或空间。
换句话说,优化技术关心“花更少的钱”,而计算方法关心“用更少的资源(时间/内存)”。
LLAMAFACTORY框架中包含的方法在表2中列出。在接下来的章节中,我们将介绍这些高效的微调技术,并展示将它们集成到我们的框架中所带来的显著效率提升。
3.1 高效优化
首先,我们来概览一下LLAMAFACTORY中用到的高效优化技术。
冻结微调(freeze-tuning)这个方法(Houlsby等人,2019)的思路是“冻住大部分,只动一小部分”。它会把模型里大部分的参数都固定住(冻结),只去微调解码器层中一个小子集里的剩余参数。这就像你有一本厚厚的说明书,但只允许修改其中几页的内容,其他页都保持原样,以此来节省计算资源。
梯度低秩投影(Gradient low-rank projection, GaLore)这个方法(Zhao等人,2024)则更巧妙一些。它不冻结参数,而是把计算出来的梯度(指导参数更新的方向)投影到一个更低维度的空间里。这样做的好处是,你可以在内存高效的情况下,对整个模型的所有参数进行学习。简单来说,就是把原本复杂、庞大的更新信息,压缩成一个精简版,再用这个精简版去更新模型。
BADAM这个方法(Luo等人,2024)利用了块坐标下降(Block Coordinate Descent, BCD)的思想。想象一下,你要优化一个巨大的模型,如果一次性考虑所有参数,计算量会非常大。BCD的策略是“分而治之”,把参数分成很多块,然后轮流优化每一块,而暂时固定其他块。BADAM就用这个思路来高效地优化海量参数。
低秩适应(Low-Rank Adaptation, LoRA)这是一个非常流行的方法(Hu等人,2022)。它的核心思想是“原封不动,外加补丁”。它会把预训练好的模型权重全部冻结(原封不动),然后在指定的层(比如注意力层)旁边,引入一对可训练的低秩矩阵(就是两个又窄又长的矩阵)。在微调时,只训练这对新加的“补丁”矩阵,然后用它们的结果和原始的冻结权重相加,来得到最终的输出。这极大地减少了需要训练的参数数量。
QLoRA这是LoRA的“升级版”(Dettmers等人,2023)。它在LoRA的基础上,又加上了量化(Quantization)技术。量化就是把模型权重从高精度(比如32位浮点数)转换成低精度(比如4位整数),从而进一步减少内存占用。所以,QLoRA = LoRA + 量化,是双重省内存的利器。
DoRA这个方法(Liu等人,2024)对预训练权重进行了“解剖”。它将权重分解为幅度(magnitude)和方向(direction)两个部分。在微调时,主要更新方向部分,以此来提升模型性能。你可以把它想象成调整一个向量:我们保持它的长度(幅度)大致不变,但精细地调整它指向的方向。
LoRA+这个方法(Hayou等人,2024)是为了解决LoRA可能存在的“次优”问题而提出的。在标准的LoRA中,新增的两个低秩矩阵的学习率通常是相同的。LoRA+发现,为这两个矩阵设置不同的、经过精心设计的学习率,可以让模型收敛得更好、效果更优。
PiSSA这个方法(Meng等人,2024)在初始化LoRA的“补丁”矩阵时动了脑筋。它不像LoRA通常用随机初始化,而是使用预训练权重矩阵的主成分(principal components)来初始化这些适配器。这样做的好处是,这些“补丁”从一开始就包含了原始权重中最关键的信息,因此模型能够更快地收敛到好的结果。
3.2 高效计算
在LLAMAFACTORY中,我们整合了一系列高效计算技术。常用的技术包括混合精度训练(Mixed Precision Training)和激活检查点(Activation Checkpointing)。
通过分析注意力层的输入输出开销,Flash Attention引入了一种对硬件友好的方法来加速注意力计算。 Attention则通过移位稀疏注意力来解决长上下文带来的挑战,从而减少了在微调长上下文大语言模型时的内存占用。
各种量化策略通过使用更低精度的权重表示,降低了大语言模型的内存需求。然而,量化模型的微调通常仅限于像LoRA这样的基于适配器的技术。Unsloth集成了Triton来实现LoRA的反向传播,这减少了梯度下降过程中的浮点运算次数,从而加速了LoRA的训练。
LLAMAFACTORY将这些技术无缝结合成一个整体,以提升大语言模型微调的效率。这使得内存占用从混合精度训练时的每个参数18字节,或半精度训练时的每个参数8字节,降低到了仅每个参数0.6字节。关于LLAMAFACTORY中各组件的更多细节将在后续章节中提供。
4 LLAMAFACTORY 框架
LLAMAFACTORY 框架主要由三个核心模块构成:模型加载器(Model Loader)、数据处理器(Data Worker)和训练器(Trainer)。
- 模型加载器(Model Loader):它的职责是管理和操作各种不同的模型架构,以便进行微调。它既支持大语言模型(Large Language Models, LLMs),也支持视觉语言模型(Vision Language Models, VLMs)。换句话说,无论你的模型是纯文本的还是能理解图片的,这个模块都能帮你加载和准备好。
- 数据处理器(Data Worker):这个模块负责处理来自不同任务的数据。它有一个设计良好的处理流程,能够支持单轮对话和多轮对话两种数据格式。例如,单轮对话可能是一个简单的问答(Q: 天空是什么颜色的? A: 蓝色的。),而多轮对话则更像一次连续的聊天(用户:你好。 助手:你好!有什么可以帮您? 用户:今天天气怎么样?)。
- 训练器(Trainer):这个模块负责应用高效的微调技术到不同的训练方法中。它支持预训练(Pretraining)、指令微调(Instruction Tuning)和偏好优化(Preference Optimization)等多种训练范式。
除此之外,LLAMAFACTORY 还提供了一个名为LLAMABOARD的友好可视化界面。这个界面让用户能够无代码地配置和启动单个大语言模型的微调任务,并且可以同步监控训练状态。
我们在下面的图1中展示了这些模块之间的关系以及 LLAMAFACTORY 的整体架构。
图1:LLAMAFACTORY 的架构。4.1 模型加载器
这一节首先介绍模型加载器中的四个组成部分:模型初始化、模型修补、模型量化和适配器附加,然后描述我们通过在处理微调期间的参数浮点精度来适应广泛设备的方法。
模型初始化我们利用Transformers库的自动类来加载预训练模型并初始化参数。简单来说,就是用一个“万能钥匙”来打开不同的模型文件。具体来说:
- 对于视觉语言模型,我们使用
AutoModelForVision2Seq类来加载。 - 对于其他模型,我们使用
AutoModelForCausalLM类来加载。 - tokenizer(分词器)则使用
AutoTokenizer类与模型一起加载。
特殊情况处理:
- 词汇表扩容:有时候分词器的词汇量(比如有10万个词)会超过模型嵌入层(比如只能装5万个词)的容量。这时,我们会调整嵌入层的大小,并用一种“带噪声的平均初始化”方法来初始化新增的参数。
- RoPE缩放因子:RoPE是一种让模型理解位置信息的技术。为了确定它的缩放因子,我们计算一个比例:
最大输入序列长度 / 模型的上下文长度。这就像是根据你需要的最大句子长度,来调整模型的“记忆窗口”大小。
模型修补为了启用 注意力机制,我们采用了一种叫做“猴子补丁”的技术来替换模型的前向计算过程。你可以把它想象成给汽车的发动机(模型的核心计算)换了一个更高效的零件。
- Flash Attention:对于Flash Attention(一种加速注意力计算的技术),我们直接使用其原生类,因为它已经被广泛支持。
- MoE模型优化:对于混合专家模型,为了防止在DeepSpeed ZeRO stage-3优化过程中对动态层进行过度分割,我们将MoE块设置为“叶子模块”,这就像把一整个功能模块打包,不让优化器拆开它。
模型量化量化就是把模型参数从高精度(如32位浮点数)转换为低精度(如8位或4位整数),从而大幅减少模型大小和内存占用。
- 动态量化:我们可以通过
bitsandbytes库,使用LLM.int8方法将模型动态量化为8位或4位。 - 4位量化:对于4位量化,我们采用QLoRA中使用的“双重量化”和“4位正态浮点数”技术,以获得更好的效果。
- 后训练量化:我们也支持微调那些已经通过GPTQ、AWQ、AQLM等后训练量化方法处理过的模型。重要提示:我们无法直接微调已经被量化的权重本身。因此,量化模型只兼容基于适配器的方法(如LoRA),即只训练新增的小参数,而不动原始的大模型参数。
适配器附加适配器是一种轻量级的微调方法,我们只在原始模型上附加一些小的、可训练的参数层。
- 自动识别:我们通过遍历模型的所有层,自动识别出适合附加适配器的位置。
- 附加位置:为了获得更好的收敛效果,我们将低秩适配器附加到所有的线性层上。
- 实现工具:PEFT库为我们实现LoRA、rsLoRA、DoRA和PiSSA等适配器方法提供了极其便捷的方式。
- 训练加速:我们使用Unsloht中的反向计算方法来替换原有的,以加速训练过程。
- RLHF支持:为了进行基于人类反馈的强化学习,我们会在transformer模型的顶部附加一个“价值头”层,它的作用是将每个token的表示映射成一个标量值(可以理解为对该token的“打分”)。
精度适应我们根据计算设备的能力来处理预训练模型的浮点精度。这就像根据不同的路况(设备)选择不同的驾驶模式(精度)。
- NVIDIA GPU:
- 如果计算能力≥8.0,则采用bfloat16精度。
- 否则,采用float16精度。
- 昇腾NPU和AMD GPU:采用float16精度。
- 非CUDA设备:采用float32精度。
- 混合精度训练:在混合精度训练中,为了训练稳定性,我们将所有可训练参数设置为float32。但在半精度训练中,我们仍将可训练参数保留为bfloat16。
表3:LLAMAFACTORY中的数据集结构。
4.2 数据工作者
我们开发了一个数据处理流水线,包括数据集加载、数据集对齐、数据集合并和数据集预处理。它将不同任务的数据集标准化为统一的格式,使我们能够在各种格式的数据集上对模型进行微调。
数据集加载我们利用 Datasets 库来加载数据,该库允许用户从 Hugging Face Hub 加载远程数据集,或通过脚本或文件读取本地数据集。Datasets 库显著减少了数据处理过程中的内存开销,并使用 Arrow 加速样本查询。默认情况下,整个数据集会被下载到本地磁盘。但是,如果一个数据集太大而无法存储,我们的框架提供了数据集流式处理功能,可以在不下载的情况下对其进行迭代。
数据集对齐为了统一数据集格式,我们设计了一个数据描述规范来描述数据集的结构。例如,alpaca 数据集有三列:instruction(指令)、input(输入)和 output(输出)。我们根据数据描述规范,将数据集转换为与各种任务兼容的标准结构。数据集结构的一些示例如下表所示。
数据集合并统一的数据集结构为合并多个数据集提供了一种高效的方法。对于非流式模式下的数据集,我们只需在训练期间数据集被打乱之前将它们连接起来。然而,在流式模式下,简单地连接数据集会妨碍数据打乱。因此,我们提供了从不同数据集交替读取数据的方法。
数据集预处理LLAMAFACTORY 是为微调文本生成模型而设计的,主要用于聊天补全。聊天模板是这些模型中的一个关键组件,因为它与这些模型的指令跟随能力高度相关。因此,我们提供了数十种聊天模板,可以根据模型类型自动选择。我们在应用聊天模板后,使用分词器对句子进行编码。默认情况下,我们只计算补全部分的损失,而忽略提示部分。可选地,我们可以利用序列打包来减少训练时间,这在执行生成式预训练时会自动启用。
4.3 训练器
高效训练我们将最先进的、高效的微调方法整合到了训练器中,包括 LoRA+、GaLore 和 BAdam。具体做法是,用这些新方法替换掉训练器里默认的组件。这些微调方法与训练器本身是相互独立的,所以它们可以很方便地应用到各种不同的任务上。
我们是怎么做的呢?
- 对于预训练和监督微调,我们使用的是 Transformers 库里的训练器。
- 对于RLHF和DPO,我们使用的是 TRL 库里的训练器。
- 我们还从 TRL 库里引入了像KTO和ORPO这样的高级偏好优化方法的训练器。
为了让不同的训练方法能正确工作,我们使用了专门定制的“数据整理器”。特别是对于偏好数据(比如RLHF中“被选中的回答”和“被拒绝的回答”),为了匹配训练器需要的输入格式,我们是这样构建一个批次的:在一个批次里,前 个样本是“被选中的例子”,后 个样本是“被拒绝的例子”。这样,一个批次总共就有 个样本。
模型共享的RLHF让 RLHF 训练能在消费级设备(比如个人电脑)上运行,对于普及大语言模型微调至关重要。但传统 RLHF 很难做到这一点,因为它需要同时加载四个不同的模型(策略模型、价值模型、参考模型、奖励模型),内存开销巨大。
为了解决这个问题,我们提出了模型共享的RLHF方法,使得整个 RLHF 训练过程只需要一个预训练模型。具体是怎么实现的呢?
- 第一步:训练奖励模型。我们给这个预训练模型加上一个“适配器”和一个“价值头”,然后用奖励建模的目标函数去训练它们。训练完成后,这个模型就能计算奖励分数了。
- 第二步:训练策略模型。我们再初始化另一套适配器和价值头,用 PPO 算法去训练它们。
- 动态切换。在训练过程中,我们利用 PEFT 库提供的
set_adapter和disable_adapter方法,动态地切换使用哪一套适配器和价值头。这样,同一个预训练模型就能在不同的时刻,分别扮演策略模型、价值模型、参考模型和奖励模型。
据我们所知,这是第一个支持在消费级设备上进行 RLHF 训练的方法。
分布式训练我们还可以将上面提到的这些训练器与DeepSpeed框架结合起来,进行分布式训练。我们主要采用数据并行的方式来充分利用所有计算设备的能力。通过利用 DeepSpeed 的 ZeRO 优化器,我们可以通过参数分区或卸载到 CPU/硬盘的方式,进一步降低内存消耗。
4.4 实用工具
在推理阶段,我们复用了来自数据工作器(Data Worker)的聊天模板来构建模型输入。我们提供了使用Transformers库和vLLM库来采样模型输出的支持,这两个库都支持流式解码。
此外,我们还实现了一个OpenAI风格的API。这个API利用了vLLM的异步LLM引擎和分页注意力(paged attention)机制,能够提供高吞吐量的并发推理服务。这使得将微调后的大语言模型部署到各种应用中变得更加容易。
模型评估我们包含了几种用于评估大语言模型的指标。这些指标包括多项选择题任务,例如MMLU、CMMLU和C-Eval。同时,也包括计算文本相似度分数的指标,例如BLEU-4和ROUGE。这个功能方便用户衡量微调后模型的能力。
举个例子:假设你微调了一个模型来写诗。你可以用MMLU测试它的常识,用BLEU-4来比较它生成的诗句和经典诗句的相似度,从而全面了解模型的能力。
4.5 LLAMA BOARD:LLAMA FACTORY的统一界面
LLAMA BOARD是一个基于Gradio(Abid等人,2019)的统一用户界面,它允许用户无需编写任何代码即可定制大语言模型(LLMs)的微调。它提供了一个简化的模型微调和推理服务,使用户能够轻松探索大语言模型在其环境中的潜力。LLAMA BOARD具有以下显著特点。
易于配置LLAMA BOARD允许我们通过与网页界面交互来自定义微调参数。我们为大多数参数提供了推荐给大多数用户的默认值,从而简化了配置过程。此外,用户可以在网页界面上预览数据集以进行验证。
可监控的训练在训练过程中,训练日志和损失曲线会被可视化并实时更新,使用户能够监控训练进度。这个功能为分析微调过程提供了有价值的洞察。
表4:在LLAMA FACTORY中使用不同微调方法的训练效率比较。每个模型中GaLore、LoRA和QLoRA的最佳结果已加粗。
灵活评估LLAMA BOARD支持计算数据集上的文本相似度分数来自动评估模型,或者通过与模型聊天来进行人工评估。
多语言支持LLAMA BOARD提供了本地化文件,便于集成新语言来渲染界面。目前我们支持三种语言:英语、俄语和中文,这使得更广泛的用户能够使用LLAMA BOARD来微调大语言模型。
5 实证研究
我们系统地从两个角度评估了LLAMAFACTORY:
- 训练效率:从内存使用、吞吐量和困惑度(perplexity)方面进行评估。
- 下游任务适应能力:评估其适应下游任务的有效性。
5.1 训练效率
实验设置
我们使用了PubMed数据集,它包含了超过3600万条生物医学文献记录。我们从这些文献的摘要中提取了大约40万个token来构建训练语料库。然后,我们使用生成式预训练目标,结合多种高效微调方法,对Gemma-2B、Llama2-7B和Llama2-13B模型进行微调。
我们比较了以下方法的微调结果:
- 全量微调:更新模型的所有参数。
- 冻结微调:只更新模型的一部分参数。
- GaLore:一种低秩梯度投影方法。
- LoRA:低秩适应。
- 4位QLoRA:量化低秩适应。
微调完成后,我们计算模型在训练语料库上的困惑度,以此来评估不同方法的效率。同时,我们也记录了预训练模型的困惑度作为基线。
实验细节
在这个实验中,我们采用了以下设置:
- 学习率:
- 批次大小:512个token
- 优化器:使用8位AdamW优化器,精度为bfloat16。
- 内存优化:启用了激活检查点以减少内存占用。
- 冻结微调:只微调模型的最后3个解码器层。
- GaLore设置:秩为128,缩放因子为2.0。
- LoRA/QLoRA设置:在所有线性层上附加适配器,秩为128,alpha值为256。
- 硬件:所有实验均在单张NVIDIA A100 40GB GPU上进行。
- 软件优化:所有实验都启用了Flash Attention。对于LoRA和QLoRA实验,还启用了Unsoloth优化。
代码实现:
# 定义学习率learning_rate = 10 ** -5print(f"学习率设置为:{learning_rate}")# 定义批次大小batch_size = 512print(f"批次大小设置为:{batch_size}")# 定义GaLore参数galore_rank = 128galore_scale = 2.0print(f"GaLore参数:秩={galore_rank}, 缩放因子={galore_scale}")# 定义LoRA/QLoRA参数lora_rank = 128lora_alpha = 256print(f"LoRA/QLoRA参数:秩={lora_rank}, alpha={lora_alpha}")结果分析
关于训练效率的结果展示在下面的表格中。其中:
- 内存:指训练过程中消耗的峰值内存。
- 吞吐量:指每秒训练的token数量。
- PPL:指模型在训练语料库上的困惑度。
由于全量微调Llama2-13B会导致内存溢出,因此没有记录其结果。
我们观察到:
- QLoRA始终具有最低的内存占用,因为它的预训练权重以较低的精度表示。
- LoRA通过Unsoloth对LoRA层的优化,表现出更高的吞吐量。
- GaLore在大型模型上取得了更低的困惑度,而LoRA在较小的模型上表现更优。
换句话说:如果你想节省内存,QLoRA是最好的选择;如果你想训练得更快,LoRA更胜一筹;而对于大模型的效果,GaLore可能略好一些。
5.2 在下游任务上进行微调
实验设置
为了评估不同高效微调方法的有效性,我们比较了各种模型在下游任务上微调后的性能。我们使用了三个有代表性的文本生成任务来构建互不重叠的训练集和测试集,分别是CNN/DM、XSum和AdGen,每个任务分别使用了2000个和1000个例子。
我们选择了几种经过指令调优(instruction-tuned)的模型,并使用不同的微调方法,按照序列到序列(sequence-to-sequence)任务的方式对它们进行微调。然后,我们比较了全参数微调(full-tuning, FT)、GaLore、LoRA和4-bit QLoRA的结果。微调完成后,我们在每个任务的测试集上计算ROUGE分数。我们还将原始指令调优模型的分数作为基线(baseline)纳入比较。
实验结果下游任务的评估结果如表5所示。我们报告的是ROUGE-1、ROUGE-2和ROUGE-L分数的平均值。表格中没有包含Gemma-7B和Qwen2-7B模型的部分结果,因为GaLore方法可能不适用于它们。
从结果中我们发现一个有趣的现象:在大多数情况下,LoRA和QLoRA取得了最佳性能,除了ChatGLM3-6B和Llama2-7B模型在CNN/DM和AdGen数据集上的表现。这一现象凸显了这些高效微调方法在使大语言模型(LLMs)适应特定任务方面的有效性。
此外,我们观察到,在这些模型中,Llama3-8B取得了最佳的整体性能,而Yi-6B和Mistral-7B在同等规模的模型中表现出了有竞争力的性能。
例如:你可以把微调想象成“专业培训”。一个通用的大语言模型就像一个刚毕业的大学生,知识面广但不专精。全参数微调就像让他回炉重造,把所有知识都按新领域更新一遍,成本高。而LoRA这类方法,就像给他报了一个高效的“周末培训班”,只学习新任务最关键的那部分“技能包”(适配器),成本低,效果却常常很好。
实验细节在这个实验中,我们将学习率(learning rate)设置为 ,批大小(batch size)设置为4,最大输入长度设置为2048。我们使用8-bit AdamW优化器,以bfloat16精度并启用激活检查点(activation checkpointing)来微调这些模型。
对于GaLore方法,我们将其秩(rank)和缩放因子(scale)分别设置为128和2.0。 对于LoRA和QLoRA方法,我们将适配器(adapters)附加到所有线性层,并将其秩(rank)和alpha参数分别设置为128和256。 所有实验均在NVIDIA A100 40GB GPU上进行。
代码实现:
# 这里我们模拟一下实验中的关键超参数设置# 注意:以下代码不涉及复杂的训练过程,仅用于展示参数配置# 定义实验超参数learning_rate = 1e-5# 学习率,即公式中的 10^{-5}batch_size = 4max_input_length = 2048# GaLore 方法的参数galore_rank = 128galore_scale = 2.0# LoRA/QLoRA 方法的参数lora_rank = 128lora_alpha = 256# 示例:打印参数配置print("实验超参数配置:")print(f"学习率 (learning rate): {learning_rate}")print(f"批大小 (batch size): {batch_size}")print(f"最大输入长度: {max_input_length}")print(f"\nGaLore 参数 -> 秩 (rank): {galore_rank}, 缩放因子 (scale): {galore_scale}")print(f"LoRA/QLoRA 参数 -> 秩 (rank): {lora_rank}, alpha: {lora_alpha}")# 示例:一个简单的计算,模拟使用学习率更新参数的过程(概念性展示)def update_parameters_with_lr(parameters, gradients, lr): """ 使用梯度下降和学习率更新参数。 这是一个简化的示例,实际优化器(如AdamW)更复杂。 """ updated_parameters = parameters - lr * gradients return updated_parameters# 假设某个参数的初始值和梯度initial_param = 1.0gradient = 0.5updated_param = update_parameters_with_lr(initial_param, gradient, learning_rate)print(f"\n参数更新示例:")print(f"初始参数值: {initial_param}")print(f"梯度值: {gradient}")print(f"应用学习率 {learning_rate} 更新后的参数值: {updated_param}")表5:在LLAMA FACTORY中使用不同微调方法在特定任务上的性能(以ROUGE计)比较。每个模型的最佳结果加下划线,每个任务的最佳结果加粗。
6 结论与未来工作
在这篇论文中,我们介绍了LLAMA FACTORY,这是一个用于高效微调大语言模型(LLMs)的统一框架。通过模块化的设计,我们最小化了模型、数据集和训练方法之间的依赖关系,并提供了一种集成方法,可以用多种高效微调技术对超过100种大语言模型进行微调。此外,我们还提供了一个灵活的网页界面LLAMA BOARD,使得无需编码即可对大语言模型进行定制化的微调和评估。我们通过实验,在语言建模和文本生成任务上验证了我们框架的效率和有效性。
最后
我在一线科技企业深耕十二载,见证过太多因技术更迭而跃迁的案例。那些率先拥抱 AI 的同事,早已在效率与薪资上形成代际优势,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。
我整理出这套 AI 大模型突围资料包:
- ✅AI大模型学习路线图
- ✅Agent行业报告
- ✅100集大模型视频教程
- ✅大模型书籍PDF
- ✅DeepSeek教程
- ✅AI产品经理入门资料
完整的大模型学习和面试资料已经上传带到CSDN的官方了,有需要的朋友可以扫描下方二维码免费领取【保证100%免费】👇👇
为什么说现在普通人就业/升职加薪的首选是AI大模型?
人工智能技术的爆发式增长,正以不可逆转之势重塑就业市场版图。从DeepSeek等国产大模型引发的科技圈热议,到全国两会关于AI产业发展的政策聚焦,再到招聘会上排起的长队,AI的热度已从技术领域渗透到就业市场的每一个角落。
智联招聘的最新数据给出了最直观的印证:2025年2月,AI领域求职人数同比增幅突破200%,远超其他行业平均水平;整个人工智能行业的求职增速达到33.4%,位居各行业榜首,其中人工智能工程师岗位的求职热度更是飙升69.6%。
AI产业的快速扩张,也让人才供需矛盾愈发突出。麦肯锡报告明确预测,到2030年中国AI专业人才需求将达600万人,人才缺口可能高达400万人,这一缺口不仅存在于核心技术领域,更蔓延至产业应用的各个环节。
资料包有什么?
①从入门到精通的全套视频教程⑤⑥
包含提示词工程、RAG、Agent等技术点
② AI大模型学习路线图(还有视频解说)
全过程AI大模型学习路线
③学习电子书籍和技术文档
市面上的大模型书籍确实太多了,这些是我精选出来的
④各大厂大模型面试题目详解
⑤ 这些资料真的有用吗?
这份资料由我和鲁为民博士共同整理,鲁为民博士先后获得了北京清华大学学士和美国加州理工学院博士学位,在包括IEEE Transactions等学术期刊和诸多国际会议上发表了超过50篇学术论文、取得了多项美国和中国发明专利,同时还斩获了吴文俊人工智能科学技术奖。目前我正在和鲁博士共同进行人工智能的研究。
所有的视频教程由智泊AI老师录制,且资料与智泊AI共享,相互补充。这份学习大礼包应该算是现在最全面的大模型学习资料了。
资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。
智泊AI始终秉持着“让每个人平等享受到优质教育资源”的育人理念,通过动态追踪大模型开发、数据标注伦理等前沿技术趋势,构建起"前沿课程+智能实训+精准就业"的高效培养体系。
课堂上不光教理论,还带着学员做了十多个真实项目。学员要亲自上手搞数据清洗、模型调优这些硬核操作,把课本知识变成真本事!
如果说你是以下人群中的其中一类,都可以来智泊AI学习人工智能,找到高薪工作,一次小小的“投资”换来的是终身受益!
应届毕业生:无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。
零基础转型:非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界。
业务赋能 突破瓶颈:传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型。
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓**