当前开源社区中有许多的大模型,为了能够将其适配至不同应用场景,基本上都需要精心的调整模型参数。为了能够实现对大模型的高效微调,本文作者提出了一个统一的大模型微调框架:LLAMAFACTORY,该框架整合了一系列前沿的高效微调方法,支持对100多种大模型的微调。
https://arxiv.org/pdf/2403.13372.pdf
大型语言模型(LLMs)因其强大的生成能力而备受关注,且已经出现在了各种应用场景中,例如知识问答、机器翻译、信息提取等。随后,大量的语言模型被开源出来供大家使用,例如在Hugging Face上开放的LLM就5000多个模型,这极大的促进了大模型的行业发展。
然而,若要将这些模型应用至不同的下游任务中,则会面临在有限资源下微调大量模型参数的挑战。为了解决这个问题,研究人员提出了多种高效微调方法,例如prompt tuning、prefix tuning、LoRA等,这些方法可以显著降低LLMs在适应不同任务时的训练成本。但是,尽管研究人员们提出了多种高效微调方法,但缺乏一个系统性的框架来适配不同的LLMs,并且也缺少方便的定制接口。.
为了解决上述问题,本文作者提出了一个名为LLAMAFACTORY的框架,它通过可扩展的模块统一了多种高效微调方法,使用户能够在最小的资源消耗和高吞吐量下微调数百个LLMs。此外,LLAMAFACTORY还简化了常用的训练方法,包括生成式预训练(Generative Pre-training)、监督式微调(Supervised Fine-tuning,简称SFT)、基于人类反馈的强化学习(Reinforcement Learning from Human Feedback,简称RLHF)和直接偏好优化(Direct Preference Optimization,简称DPO)等。用户可以通过命令行或基于Web的界面LLAMABOARD,在几乎不需要编码的情况下定制和微调他们的LLMs。
LLAMAFACTORY框架中的高效微调技术(Efficient Fine-Tuning Techniques)主要分为两大类:优化方法和计算方法。该框架将这些技术有效地结合在一起,形成了一个统一的结构,极大地提高了LLMs微调的效率。如下图所示:
这些技术的目的是在最小化成本的同时调整LLMs的参数,以及减少LLMs所需计算的时间或空间。
「冻结微调(Freeze-tuning)」:这种方法涉及冻结大部分参数,同时在解码器的一小部分层中进行微调。这样可以在保持模型大部分结构不变的情况下,仅对关键部分进行更新。
「梯度低秩投影(Gradient Low-Rank Projection,GaLore)」:GaLore通过将梯度投影到低维空间中,实现了在内存高效的情况下进行全参数学习。
「低秩适应(Low-Rank Adaptation,LoRA)」:LoRA方法冻结了所有预训练权重,并在指定层引入了一对可训练的低秩矩阵。当与量化技术结合时,这种方法被称为QLoRA,进一步减少了内存使用。
「权重分解低秩适应(Weight-Decomposed Low-Rank Adaptation,DoRA)」:DoRA方法将预训练权重分解为幅度和方向分量,仅在方向分量上应用LoRA,以增强LLMs的微调能力。
「LoRA+」:为了克服LoRA的次优性,提出了LoRA+方法。
「混合精度训练(Mixed Precision Training)」:通过使用较低精度的数值表示来减少内存占用,同时保持训练过程的准确性。
「激活检查点(Activation Checkpointing)」:这是一种减少内存占用的技术,通过仅存储部分中间激活来减少计算资源的消耗。
「闪存注意力(Flash Attention)」:基于对注意力层输入输出开销的分析,引入了一种硬件友好的方法来增强注意力计算。
「S2注意力」:为了解决在微调长上下文LLMs时的内存使用问题,S2注意力通过扩展块稀疏注意力来减少内存占用。
「量化策略」:通过使用低精度表示权重,各种量化策略减少了LLMs的内存需求。然而,量化模型的微调仅限于基于适配器的技术,如LoRA。
「Unsloth」:通过结合Triton实现LoRA的反向传播,减少了梯度下降过程中的浮点运算(FLOPs),从而加速了LoRA的训练。
LLAMAFACTORY框架是一个用于大型语言模型(LLMs)高效微调的统一平台。它主要由三个模块组成:模型加载器(Model Loader)、数据工作者(Data Worker)和训练器(Trainer),以及一个提供友好用户界面的LLAMABOARD。整体架构如下图所示:
「模型加载器」 负责准备多种架构以适应微调的需求,支持超过100种不同的LLMs。它通过模型初始化、模型补丁、模型量化和适配器连接等功能,确保了模型的灵活性和适应性。模型初始化利用Transformers库的AutoModel API,而模型量化则通过bitsandbytes库实现,以降低内存占用。适配器连接功能则允许用户根据需要将适配器附加到模型的特定层上。
「数据工作者」 处理来自不同任务的数据,并通过设计良好的数据管道支持50多个数据集。它通过数据集加载、对齐、合并和预处理等功能,将不同格式的数据集标准化,以便在微调过程中使用。这一模块还特别为聊天生成模型提供了聊天模板,以增强模型遵循指令的能力。
「训练器」 则统一了各种高效的微调方法,如LoRA+和GaLore,以及模型共享RLHF和分布式训练策略,以适应不同任务和数据集的模型。它通过集成最新的高效微调技术,提供了一种独立于具体训练任务的微调方法,并且能够通过DeepSpeed进一步降低内存消耗。除了这些核心模块,LLAMAFACTORY还提供了一系列的实用工具,包括加速推理和全面评估LLMs的性能。
「LLAMABOARD」是一个基于Gradio构建的统一用户界面,它使用户能够无需编写代码即可定制LLMs的微调和推理服务。用户可以通过交互式Web界面轻松配置微调参数,并实时监控训练进度。LLAMABOARD还支持自动计算文本相似性分数或通过与模型的交互进行人工评估,以及多语言支持,目前包括英语、俄语和中文,使得更广泛的用户群体能够使用LLAMAFACTORY进行LLMs的微调。
在训练效率方面,如下图所示。QLoRA具有最低的内存占用,因为预训练权重以较低精度表示。LoRA通过Unsloth优化的LoRA层展示了更高的吞吐量。在大模型上,GaLore实现了较低的困惑度,而在小型模型上,LoRA表现更佳。
在下游任务适应性方面,如下图所示。LoRA和QLoRA在大多数情况下都取得了最佳性能,特别是在Llama2-7B和ChatGLM36B模型上。这突出了这些高效微调方法在适应特定任务方面的有效性。