LLAMA-FACTORY:100+语言模型的统一高效微调框架

打印 上一主题 下一主题

主题 1802|帖子 1802|积分 5406

24年3月来自北航和北大的论文“LLAMA-FACTORY: Unified Efficient Fine-Tuning of 100+ Language Models”。
高效的微调对于将大语言模型 (LLM) 顺应卑鄙使命至关紧张。然而,在差别模型上实行这些方法必要付出不小的努力。 LLAMA-FACTORY是一个集成一套高效训练方法的统一框架。它允许用户通过内置的 Web UI LLAMA-BOARD 机动地自定义 100 多个 LLM 的微调,无需编码。经验验证该框架在语言建模和文本生成使命上的效率和有效性。
开源发布在 GitHub - hiyouga/LLaMA-Factory
LLAMA-FACTORY是一个使 LLM 微调民主化的框架。它通过可扩展的模块统一了各种高效的微调方法,从而能够以最少的资源和高吞吐量对数百个 LLM 进行微调。此外,它还简化了常用的训练方法,包括生成式预训练(Radford,2018)、监视微调 (SFT)(Wei,2022)、人类反馈中强化学习 (RLHF)(Ouyang,2022)和直接偏好优化 (DPO)(Rafailov,2023)。用户可以利用下令行或 Web 界面以最少或无需编码工作量来定制和微调LLM。
下表是其和现存LLM调优工具的特征比力:

LLAMA-FACTORY 由三个重要模块组成:模型加载器、数据工作器和训练器。尽量减少这些模块对特定模型和数据集的依赖,使框架能够机动地扩展到数百个模型和数据集。具体来说,首先建立一个模型注册表,模型加载器可以通过识别精确的层将适配器精确地连接到预训练模型。然后,开辟一个数据形貌规范,允许数据工作器通过对齐相应的列来收集数据集。此外,提供高效微调方法的即插即用实现,使训练器能够通过替换默认方法激活。允许这些模块在差别的训练方法中重复使用,从而显著低落新方法的集成本钱。
下表是支持的LLM清单:

LLAMA-FACTORY 是用 PyTorch(Paszke,2019)实现的,并且从开源库中获益良多,例如 Transformers(Wolf,2020)、PEFT(Mangrulkar,2022)和 TRL(von Werra,2020)。在此基础上,提供一个具有更高抽象级的开箱即用框架。此外,用 Gradio(Abid,2019)构建 LLAM-ABOARD,无需编码即可微调 LLM。
高效的 LLM 微调技术可分为两大类:专注于优化和面向计算。高效优化技术的重要目标是调解 LLM 参数,同时将本钱保持在最低水平。另一方面,高效的计算方法则力求减少 LLM 中所需计算的时间或空间。LLAMA-FACTORY 中包罗的方法列于下表中。

冻结调解方法 (Houlsby,2019) 涉及冻结大多数参数,同时在一小部门解码器层中微调剩余参数。另一种称为梯度低秩投影 (GaLoRA) (Zhao,2024) 的方法将梯度投影到低维空间,以节省内存的方式促进全参数学习。相反,低秩自顺应 (LoRA) (Hu,2022) 方法冻结全部预训练权重,并将一对可训练的低秩矩阵引入指定层。当与量化结适时,这种方法称为 QLoRA (Dettmers,2023),这进一步减少了内存使用量。权重分解低秩自顺应 (DoRA) (Liu et al., 2024) 方法将预训练权重分解为绝对值和方向分量,将 LoRA 单独应用于方向分量以加强 LLM 的微调。LoRA+ (Hayou et al., 2024) 提出来是为了克服 LoRA 的次优性。
在 LLAMA-FACTORY 中,集成了一系列高效的计算技术。常用的技术包括混合精度训练(Micikevicius,2018)和激活检查点(Chen,2016)。从检查留意层的输入输出 (IO) 开销中罗致见解,flash attention(Dao,2022 年)引入一种硬件友好的方法来加强留意计算。S^2 attention(Chen,2024b)解决了在块稀疏留意中扩展上下文的挑衅,从而减少了微调长上下文 LLM 中的内存使用量。
各种量化策略(Dettmers,2022a;Frantar,2023;Lin,2023;Egiazarian,2024)用较低精度的权重表现来低落大语言模型 (LLM) 中的内存需求。只管如此,量化模型的微调仅限于基于适配器的技术,例如 LoRA(Hu,2022)。Unsloth(Han & Han,2023)结合 Triton(Tillet,2019)来实现 LoRA 的后向传播,从而减少梯度下降过程中的浮点运算 (FLOPS) 并加快 LoRA 训练。
LLAMA-FACTORY 有效地将这些技术组合成一个凝聚的结构,大大提高 LLM 微调的效率。这使得内存占用从混合精度训练期间的18 字节/参数(Micikevicius,2018)或 Bfloat16 训练期间的 8 字节/参数(Le Scao,2022)减少到 0.6 字节/参数。
在LLAMA-FACTORY 中, 模型加载器准备了各种用于微调的架构,支持 100 多个 LLM。数据工作器通过精心设计的流水线处理来自差别使命的数据,支持 50 多个数据集。训练器统一了有效的微调方法,使这些模型顺应差别的使命和数据集,提供四种训练方法。LLAMA-BOARD 为上述模块提供了友好的可视化界面,使用户能够以无代码的方式配置和启动单个 LLM 微调过程,并实时监控训练状态。如图分析 LLAMA-FACTORY 的整体架构。

模型加载器有四个组件:模型初始化、模型补丁、模型量化和适配器连接。
模型初始化。用 HF Transformers 的 AutoModel API(Wolf,2020)来加载模型和初始化参数。为了使框架与差别的模型架构兼容,建立了一个模型注册表来存储每个层的类型,从而更直接地促进高效微调技术的使用。假如token化器的词汇表巨细超出了嵌入层的容量,会调解层的巨细并使用噪声均值初始化来初始化新参数。为了确定 RoPE 的缩放因子(Chen,2023),将其取做最大输入序列长度与模型的上下文长度之比。
模型补丁。为了启用 flash attention 和 S^2 attention,用 monkey patch 来代替模型的前向计算。不外,由于自 HF Transformers 4.34.0 以来就支持 flash attention,用 API 来启用 flash attention。为了防止动态模块过分分区,在 DeepSpeed ZeRO-3 (Rasley et al., 2020) 优化时将混合专家 (MoE) 块设置为叶(Leaf)模块。
模型量化。可以通过 bits-and-bytes 库 (Dettmers, 2021) 用 LLM.int8 (Dettmers et al., 2022a) 将模型动态量化为 8 位或 4 位。对于 4 位量化,用双量化和 4 位普通浮点作为 QLoRA (Dettmers et al., 2023)。还支持训练后量化 (PTQ) 方法量化的模型微调,包括 GPTQ (Frantar,2023)、AWQ (Lin,2023) 和 AQLM (Egiazarian,2024)。请留意,无法直接微调量化权重;因此,量化模型仅与基于适配器的方法兼容。
适配器附加。用模型注册表主动识别适当的层来附加适配器。适配器默认附加到一个层的子集以节省内存,但将它们附加到全部线性层大概会产生更好的性能 (Dettmers,2023)。 PEFT (Mangrulkar et al., 2022) 库提供了一种非常方便的方式来连接适配器,例如 LoRA (Hu et al., 2022)、rsLoRA (Kalajdzievski, 2023) 和 DoRA (Liu et al., 2024)。替换后向计算为Unsloth (Han & Han, 2023) 的版本加速 LoRA。为了执行人类反馈中强化学习 (RLHF) ,在模型上添加了一个V头,这是一个将每个 token 的表现映射到标量的线性层。
精度顺应。根据设备的功能处理预训练模型的浮点精度。对于 NVIDIA GPU,假如计算能力为 8.0 或更高,使用 bfloat16 精度。否则,采用 float16。对 Ascend NPU 和 AMD GPU 使用 float16,对非 CUDA 设备使用 float32。请留意,用 float16 精度加载 bfloat16 模型大概会导致溢出问题。在混合精度训练中,将全部可训练参数设置为 float32。只管如此,在 bfloat16 训练中将可训练参数保存为 bfloat16。
一个数据处理流水线包括数据集加载、数据集对齐、数据聚集并和数据集预处理。它将差别使命的数据集标准化为统一的格式,能够在各种格式的数据集上微调模型。
数据集加载。用数据集(Lhoest,2021)库来加载数据,这使用户可以从 Hugging Face Hub 加载远程数据集或通过脚本或文件读取本地数据集。数据集库显着减少数据处理过程中的内存开销,并加速了用 Arrow(Apache,2016)的样本查询。默认情况下,整个数据聚会会议下载到本地磁盘。但是,假如数据集太大而无法存储,框架提供数据集流动对其进行迭代,而无需下载。
数据集对齐。为了统一数据集格式,设计了一个数据形貌规范来表征数据集的结构。例如,羊驼数据集有三列:指令、输入和输出(Taori,2023)。根据数据形貌规范将数据集转换为与各种使命兼容的标准结构。下表显示了一些数据集结构示例。

数据聚集并。统一的数据集结构为合并多个数据集提供了一种有效的方法。对于非流动模式下的数据集,只需在训练期间数据集混洗之前先连接起来。然而,在流动模式下,简单地连接数据聚会会议拦阻数据混洗。因此,提供瓜代读取差别数据集数据的方法。
数据集预处理。LLAMA-FACTORY 专为微调文本生成模型而设计,重要用于聊天完成。聊天模板是这些模型中的关键组成部门,因为它与这些模型的指令遵照能力高度相干。因此,提供数十种聊天模板,可以根据模型类型主动选择。用token化器在应用聊天模板后对句子进行编码。默认情况下,仅计算完成的损失,而忽略提示(Taori,2023)。大概,利用序列打包(Krell,2021)来减少训练时间,这在执行生成式预训练时会主动启用。
设计了一个 Formatter 类,以便将文本输入稳健地转换为其嵌入 ID。具体来说,提供 EmptyFormatter、StringFormatter、FunctionFormatter 和 ToolFormatter。此外,LLAMA-FACTORY 支持微调模型以获得函数调用能力。固然 ReAct 提示(Yao,2023)是工具使用的盛行选择,但它对于嵌套工具参数来说是不敷的。优化的工具调用提示如表所示。

高效训练。将开始进的高效微调方法,包括 LoRA+(Hayou,2024)和 GaLore(Zhao,2024),集成到训练器中,替换默认组件。这些训练方法独立于训练器,因此可以轻松应用于各种使命。利用 Transformers(Wolf,2020)的训练器进行预训练和 SFT,同时采用 TRL(von Werra,2020)的训练器进行 RLHF 和 DPO。利用定制的数据整理器来区分各种训练方法的训练器。为了匹配训练器偏好数据的输入格式,在一个批次中构建 2n 个样本,其中前 n 个样本是选定的示例,后 n 个样本是拒绝的示例。
模型共享RLHF。允许在消耗设备上进行 RLHF 训练是 LLM 微调的一个有用属性。然而,这个实现起来很困难,因为 RLHF 训练必要四种差别的模型。为了解决这个问题,提出了模型共享 RLHF,使整个 RLHF 训练只用一个预训练模型即可完成。具体来说,首先用奖励建模的目标函数训练一个适配器和一个V头,让模型计算奖励分数。然后初始化另一个适配器和V头,并用 PPO 算法 (Ouyang et al., 2022) 训练它们。在训练过程中,适配器和V头通过 PEFT (Mangrulkar et al., 2022) 的 set_adapter 和 disable_adapter API 动态切换,允许预训练模型同时用作策略、代价、参考和奖励模型。
分布式训练。将上述训练器与 DeepSpeed (Rasley et al., 2020) 结合进行分布式训练。利用 DeepSpeed ZeRO 优化器,可以通太过区或卸载进一步减少内存消耗。
加速推理。在推理期间,重用数据工作器的聊天模板来构建模型输入。支持使用 HF Transformers(Wolf,2020 年)和 vLLM(Kwon,2023)对模型输出进行采样,这两者都支持流解码。此外,还实现一个 OpenAI 风格的 API,该 API 利用异步 LLM 引擎和 vLLM 的paged attention来提供高吞吐量的并发推理服务,从而促进微调的 LLM 部署到各种应用步伐中。
综合评估。纳入多项 LLM 评估指标,包括多项选择使命,如 MMLU(Hendrycks et al., 2021)、CMMLU(Li et al., 2023a)和 C-Eval(Huang et al., 2023),以及计算文本相似度分数,如 BLEU-4(Papineni et al., 2002)和 ROUGE(Lin, 2004)。
LLAMA-BOARD 是一个基于 Gradio(Abid,2019)的统一用户界面,允许用户自定义 LLM 的微调,而无需编写任何代码。它提供了简化的模型微调和推理服务,使用户能够在实践中轻松利用 100 多个 LLM 和 50 多个数据集。LLAMA-BOARD 具有以下显着特点:
易于配置。LLAMA-BOARD 允许用户通过Web 界面交互自定义微调参数。其为很多参数提供了推荐给大多数用户的默认值,从而简化了配置过程。此外,用户可以在 Web UI 上预览数据集以检查其自定义格式。
可监控的训练。在训练过程中,训练日记和损失曲线可视化和实时更新,使用户可以监控训练进度。此功能为分析微调过程提供了有代价的见解。
机动的评估。LLAMA-BOARD 支持计算数据集上的文本相似度得分,主动评估模型或通过与模型聊天进行人工评估。
多语言支持。LLAMA-BOARD 提供本地化文件,方便集成新语言出现界面。现在支持三种语言:英语、俄语和中文,这使得更广泛的用户能够使用 LLAMA-BOARD 来微调 LLM。
训练细节。采用 10−5 的学习率和 512 的tokens批处理巨细,使用 8 位 AdamW 优化器(Dettmers,2022b)以 bfloat16 精度对这些模型进行微调,并使用激活检查点来减少内存占用。在冻结调解中,仅微调模型的末了 3 个解码器层。对于 GaLore,分别将秩和尺度设置为 128 和 2.0。对于 LoRA 和 QLoRA,将适配器连接到全部线性层,并将秩和 alpha 分别设置为 128 和 256。全部实行均在单个 NVIDIA A100 40GB GPU 上进行。在全部实行中启用flash attention,并在 LoRA 和 QLoRA 实行中启用 Unsloth。
下表是其差别微调方法的训练效率对比:

下表是其差别微调方法在卑鄙使命的性能比力:


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

商道如狼道

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表