赞
踩
该文档是一篇关于LLAMAFACTORY的学术论文,这是一个用于高效微调大型语言模型(LLMs)的统一框架。这篇论文详细介绍了LLAMAFACTORY的设计、实现和评估,以及它在语言建模和文本生成任务中的应用。下面是对文档内容的详细解释:
这篇论文提供了LLAMAFACTORY框架的全面介绍,包括其设计理念、实现细节、实验验证以及与现有技术的比较。此外,它还讨论了框架的社会影响和负责任使用的重要性。
Yaowei Zheng1, Richong Zhang1, Junhao Zhang1, Yanhan Ye1, Zheyan Luo1, Yongqiang Ma2
1School of Computer Science and Engineering, Beihang University, China
2School of Software and Microelectronics, Peking University, China
hiyouga@buaa.edu.cn, zhangrc@act.buaa.edu.cn, {zhang.jh,yeyanhan,akamya}@buaa.edu.cn, codingma@pku.edu.cn
Demonstration video: https://youtu.be/W29FgeZEpus
有效的微调对于使大语言模型适应下游任务至关重要。 然而,在不同的模型上实现这些方法需要付出很大的努力。 我们提出了LlamaFactory,一个集成了一套尖端高效训练方法的统一框架。 它允许用户通过内置的Web UI LlamaBoard灵活定制100+大语言模型的微调,而无需编码。 我们凭经验验证了我们的框架在语言建模和文本生成任务上的效率和有效性。 它已在 GitHub - hiyouga/LLaMA-Factory: Unify Efficient Fine-Tuning of 100+ LLMs 发布,并已获得超过 13,000 个 star 和 1,600 个分叉。
LlamaFactory:100+语言模型统一高效微调
Yaowei Zheng1, Richong Zhang1, Junhao Zhang1, Yanhan Ye1, Zheyan Luo1, Yongqiang Ma21School of Computer Science and Engineering, Beihang University, China2School of Software and Microelectronics, Peking University, Chinahiyouga@buaa.edu.cn, zhangrc@act.buaa.edu.cn, {zhang.jh,yeyanhan,akamya}@buaa.edu.cn, codingma@pku.edu.cnDemonstration video: https://youtu.be/W29FgeZEpus
大语言模型(大语言模型)(Zhao等人,2023)呈现出卓越的推理能力,并赋能广泛的应用,例如问答(Jiang等人,2023b) t1>、机器翻译(Wang 等人, 2023c; Jiao 等人, 2023a)、信息提取(Jiao 等人, 2023b)。 随后,大量的大语言模型被开发出来并通过开源社区访问。 例如,Hugging Face开放的大语言模型排行榜(Beeching等人,2023)拥有超过5000个模型,为寻求利用大语言模型力量的个人提供了便利。
用有限的资源微调极其大量的参数成为大语言模型适应下游任务的主要挑战。 一种流行的解决方案是高效的微调(Houlsby 等人,2019;Hu 等人,2022;Ben Zaken 等人,2022;Dettmers 等人,2023;Zhao 等人,2024),它可以减少大语言模型适应各种任务时的训练成本。 然而,社区提供了各种高效微调大语言模型的方法,缺乏一个系统框架来将这些方法适应和统一到不同的大语言模型,并为用户定制提供友好的界面。
为了解决上述问题,我们开发了LlamaFactory,一个使大语言模型微调民主化的框架。 它通过可扩展的模块统一了多种高效的微调方法,能够以最少的资源和高吞吐量实现数百个大语言模型的微调。 此外,它还简化了常用的训练方法,包括生成式预训练(Radford等人,2018)、监督微调(SFT)(Wei等人,2022)、基于人类反馈的强化学习 (RLHF) Ouyang 等人 (2022) 和直接偏好优化 (DPO) Rafailov 等人 (2023)。 用户可以利用命令行或 Web 界面来定制和配置他们的大语言模型,只需很少的编码工作或无需编码工作。
LlamaFactory由三个主要模块组成:Model Loader、Data Worker和Trainer。 我们最大限度地减少这些模块对特定模型和数据集的依赖,使框架能够灵活地扩展到数百个模型和数据集。 具体来说,我们首先建立一个模型注册表,模型加载器可以通过识别确切的层将适配器精确地附加到预训练的模型上。 然后我们开发一个数据描述规范,允许数据工作者通过对齐相应的列来收集数据集。 此外,我们提供了高效微调方法的即插即用实现,使训练器能够通过替换默认方法来激活。 我们的设计允许这些模块在不同的训练方法中重复使用,从而显着降低新方法的集成成本。
LlamaFactory 使用 PyTorch 实现(Paszke 等人, 2019) 并显着受益于 Transformers 等开源库(Wolf 等人, 2020) t2>、PEFT (Mangrulkar 等人,2022) 和 TRL (von Werra 等人,2020)。 在此基础上,我们提供了一个具有更高抽象级别的开箱即用的框架。 此外,我们还使用 Gradio (Abid 等人,2019) 构建了 LlamaBoard,无需编码即可微调大语言模型。
LlamaFactory 在 Apache-2.0 许可证下开源。 它已在 GitHub 上获得超过 13,000 颗星和 1,600 个分支1,并在 Hugging Face Hub2 上的 LlamaFactory 上构建了数百个开源模型。 例如,著名的 GemSUra-7B (Nguyen 等人,2024) 是基于 LlamaFactory 构建的,它首先揭示了 Gemma 的跨语言能力(梅斯纳德等人,2024)。 此外,还有数十项研究利用我们的框架探索大语言模型的新方法,例如Wang等人(2023a);于等人 (2023); Bhardwaj 等人 (2024)。
高效的大语言模型微调技术可以分为两大类:针对优化的技术和针对计算的技术。 高效优化技术的主要目标是调整大语言模型的参数,同时将成本保持在最低限度。 另一方面,高效的计算方法寻求减少大语言模型中所需计算的时间或空间。 表1列出了LlamaFactory中包含的方法。 我们将在下面的章节中介绍这些有效的微调技术,并展示通过将它们合并到我们的框架中所实现的显着效率改进。
表格1:LlamaFactory 中的高效微调技术。 相互兼容的技术用✓标记,而不兼容的技术用✗标记。
Freeze-tuning | GaLore | LoRA | DoRA | |
---|---|---|---|---|
Mixed precision | ✓ | ✓ | ✓ | ✓ |
Checkpointing | ✓ | ✓ | ✓ | ✓ |
Flash attention | ✓ | ✓ | ✓ | ✓ |
S2 attention | ✓ | ✓ | ✓ | ✓ |
Quantization | ✗ | ✗ | ✓ | ✓ |
Unsloth | ✗ | ✗ | ✓ | ✗ |
首先,我们概述了 LlamaFactory 中使用的高效优化技术。 冻结调整方法(Houlsby等人,2019)涉及冻结大部分参数,同时微调一小部分解码器层中的剩余参数。 另一种称为梯度低秩投影(GaLore)(Zhao 等人,2024)的方法将梯度投影到低维空间,以节省内存的方式促进全参数学习。 相反,低秩适应(LoRA)(Hu等人,2022)方法冻结所有预训练的权重,并向指定层引入一对可训练的低秩矩阵。 当与量化相结合时,这种方法被称为 QLoRA (Dettmers 等人,2023),它还减少了内存使用量。 权重分解低秩自适应(DoRA)(Liu等人,2024)方法将预训练的权重分解为幅度和方向分量,仅将LoRA应用于方向分量以增强精细化大语言模型的调优。 LoRA+ (Hayou 等人, 2024) 的提出是为了克服 LoRA 的次优性。
在LlamaFactory中,我们集成了一系列高效的计算技术。 常用的技术包括混合精度训练(Micikevicius等人,2018)和激活检查点(Chen等人,2016)。 Flash Attention (Dao 等人,2022) 通过对注意力层输入输出(IO)开销的检查得出见解,引入了一种硬件友好的方法来增强注意力计算。 S2注意力(Chen 等人, 2024b)解决了块稀疏注意力中扩展上下文的挑战,从而减少了微调长上下文大语言模型的内存使用。 各种量化策略(Dettmers 等人,2022a;Frantar 等人,2023;Lin 等人,2023;Egiazarian 等人,2024)通过利用较低的-权重的精确表示。 然而,量化模型的微调仅限于基于适配器的技术,例如 LoRA (Hu 等人,2022)。 Unsloth (Han and Han, 2023) 结合了 Triton (Tillet 等人, 2019) 来实现 LoRA 的反向传播,减少梯度期间的浮点运算 (FLOP)下降并导致快速 LoRA 训练。
LlamaFactory有效地将这些技术组合成一个内聚的结构,大大提高了大语言模型微调的效率。 这导致混合精度(Micikevicius等人,2018)期间每个参数18个字节的内存占用减少或bfloat16训练(Le Scao等人,2022)每个参数8个字节的内存占用减少) 每个参数仅 0.6 个字节。 下一节将进一步阐述我们的框架。
LlamaFactory 由三个主要模块组成:Model Loader、Data Worker 和 Trainer。 模型加载器准备了各种架构进行微调,支持超过100个大语言模型。 Data Worker 通过精心设计的管道处理来自不同任务的数据,该管道支持 50 多个数据集。 Trainer 统一了高效的微调方法,使这些模型适应不同的任务和数据集,它提供了四种训练方法。 LlamaBoard为上述模块提供了友好的可视化界面,使用户能够以无代码的方式配置和启动单个大语言模型微调过程,并实时监控状态。 我们在图1中说明了LlamaFactory的整体架构。
LlamaBoardArgument ConfiguratorTraining Status MonitorTrainerOptimizationApproachesLoRA+GaLoreOffloadPartitionPre-trainSFTRLHFDPOModel LoaderData WorkerInitializationPatchesQuantizationAdaptersAligningLoadingPreprocessMerging100+ Pre-Trained Models50+ NLP Datasets
图1:LlamaFactory的架构。
本节首先介绍模型加载器中的四个组件:模型初始化、模型修补、模型量化和适配器附加,然后描述我们通过在精细时处理参数浮点精度来适应各种设备的方法。调整。
我们使用 Transformers (Wolf 等人, 2020) 的 AutoModel API 来加载模型和初始化参数。 为了使我们的框架兼容不同的模型架构,我们建立了一个模型注册表来存储每一层的类型,从而方便更直接地利用高效的微调技术。 如果标记器的词汇量大小超过嵌入层的容量,我们会调整层的大小并使用噪声均值初始化来初始化新参数。 为了确定 RoPE 缩放(Chen 等人,2023) 的缩放因子,我们将其计算为最大输入序列长度与模型上下文长度的比率。
为了启用 flash 注意力和 S2 注意力,我们使用猴子补丁来代替模型的前向计算。 尽管如此,由于自 Transformers 4.34.0 起就支持 Flash Attention,因此我们使用 API 来启用 Flash Attention。 为了防止动态模块的过度划分,我们在 DeepSpeed ZeRO-3 (Rasley 等人, 2020) 下优化时将专家混合 (MoE) 块设置为叶模块。
可以通过bitsandbytes库(Dettmers,2021)使用大语言模型.int8(Dettmers等人,2022a)将模型动态量化为8位或4位。 对于 4 位量化,我们利用双量化和 4 位普通浮点作为 QLoRA (Dettmers 等人,2023)。 我们还支持对训练后量化(PTQ)方法量化的模型进行微调,包括 GPTQ (Frantar 等人, 2023)、AWQ (Lin 等人, 2023) 和 AQLM (Egiazarian 等人,2024)。 请注意,我们不能直接计算量化权重;因此,量化模型仅与基于适配器的方法兼容。
我们使用模型注册表自动识别适当的层来附加适配器。 默认情况下,适配器附加到层的子集以节省内存,但将它们附加到所有线性层可能会产生更好的性能(Dettmers 等人,2023)。 PEFT (Mangrulkar 等人, 2022) 库提供了一种极其方便的方式来连接适配器,例如 LoRA (Hu 等人, 2022)、rsLoRA (Kalajdzievski, 2023),以及 DoRA (刘等人,2024)。 我们用 Unsloth (Han and Han, 2023) 的反向计算代替反向计算来加速 LoRA。 为了根据人类反馈(RLHF)执行强化学习,我们在模型上添加了一个值头,这是一个将每个词符的表示映射到标量的线性层。
我们根据设备的功能处理预训练模型的浮点精度。 对于 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) 加速样本查询。 默认情况下,整个数据集下载到本地磁盘。 但是,如果数据集太大而无法存储,我们的框架会提供数据集流来迭代它而无需下载。
表2:LlamaFactory 中的数据集结构。
Plain text | [{"text": "…"}, {"text": "…"}] |
---|---|
Alpaca-like data | [{"instruction": "…", "input": "…", "output": "…"}] |
ShareGPT-like data | [{"conversations": [{"from": "human", "value": "…"}, {"from": "gpt", "value": "…"}]}] |
Preference data | [{"instruction": "…", "input": "…", "output": ["…", "…"]}] |
Standardized data | {"prompt": [{"role": "…", "content": "…"}], |
"response": [{"role": "…", "content": "…"}], | |
"system": "…", "tools": "…"} |
为了统一数据集格式,我们设计了数据描述规范来表征数据集的结构。 例如,alpaca 数据集有三列:指令、输入和输出(Taori 等人, 2023)。 我们根据数据描述规范将数据集转换为兼容各种任务的标准结构。 表2中显示了数据集结构的一些示例。
统一的数据集结构提供了合并多个数据集的有效方法。 对于非流模式下的数据集,我们只需在数据集被打乱之前将它们连接起来即可。 然而,在流模式下,简单地连接数据集会阻碍数据洗牌。 因此,我们提供了从不同数据集中交替读取数据的方法。
LlamaFactory 旨在微调文本生成模型,主要用于聊天补全。 聊天模板是这些模型中的关键组成部分,因为它与这些模型的指令跟踪能力高度相关。 因此,我们提供了数十种聊天模板,可以根据模型类型自动选择。 我们使用分词器应用聊天模板后对句子进行编码。 默认情况下,我们只计算完成时的损失,而忽略提示(Taori等人,2023)。 或者,我们可以利用序列打包 (Krell 等人, 2021) 来减少训练时间,该时间在执行生成预训练时自动启用。 附录C显示了我们模板设计的详细信息。
我们将最先进的高效微调方法,包括 LoRA+ (Hayou 等人, 2024) 和 GaLore (Zhao 等人, 2024) 集成到训练器中通过替换默认组件。 这些训练方法独立于训练者,使它们可以轻松应用于各种任务。 我们使用 Transformers (Wolf 等人, 2020) 的训练器进行预训练和 SFT,同时采用 TRL (von Werra 等人, 2020) 的训练器进行 RLHF和 DPO。 利用定制的数据整理器来区分不同训练方法的培训师。 为了匹配偏好数据的训练器输入格式,我们在一批中构建 2� 样本,其中第一个 � 样本是选择的样本,最后一个 � 样本都是被拒绝的例子。
允许在消费设备上进行 RLHF 训练对于大语言模型微调来说是一个有用的属性。 然而,这很困难,因为 RLHF 训练需要四种不同的模型。 为了解决这一问题,我们提出了模型共享 RLHF 训练,使整个 RLHF 只需要一个以上的预训练模型。 具体来说,我们首先训练一个适配器和一个具有奖励建模目标函数的值头,使模型能够计算奖励分数。 然后我们初始化另一个适配器和值头,并使用 PPO 算法(Ouyang 等人,2022)对它们进行训练。 训练过程中,通过 PEFT (Mangrulkar 等人, 2022) 的 set_adapter 和 disable_adapter API 动态切换适配器和值头,允许预配置-训练模型同时充当政策、价值、参考和奖励模型。 据我们所知,这是第一个在消费设备上支持 RLHF 训练的方法。
我们可以将上述训练器与 DeepSpeed (Rasley 等人, 2020) 结合起来进行分布式训练。 利用 DeepSpeed ZeRO 优化器,可以通过分区或卸载进一步减少内存消耗。
在推理期间,我们重用数据工作者的聊天模板来构建模型输入。 我们支持使用 Transformers (Wolf 等人, 2020) 和 vLLM (Kwon 等人, 2023) 对模型输出进行采样,两者都支持流解码。 此外,我们实现了一个OpenAI风格的API,利用异步大语言模型引擎和vLLM的分页注意力来提供高吞吐量并发推理服务,方便将微调的大语言模型部署到各种应用程序中。
我们提供了多个评估大语言模型的指标,包括多项选择任务,例如 MMLU (Hendrycks 等人, 2021)、CMMLU (Li 等人, 2023a) 和C-Eval (Huang 等人, 2023),以及计算文本相似度分数,如 BLEU-4 (Papineni 等人, 2002) 和 ROUGE (Lin ,2004)。
LlamaBoard是基于Gradio(Abid等人,2019)的统一用户界面,允许用户自定义大语言模型的微调,而无需编写任何代码。 它提供了简化的模型微调和推理服务,使用户能够在实践中轻松利用100多个大语言模型和50多个数据集。 LlamaBoard具有以下显着特点:
轻松配置 LlamaBoard 允许用户通过与 Web 界面交互来自定义微调参数。 我们为大多数用户推荐的许多参数提供了默认值,从而简化了配置过程。 此外,用户可以在 Web UI 上预览数据集以检查其自定义格式。
可监控的训练 训练过程中,训练日志和训练损失曲线可视化并实时更新,方便用户监控训练进度。 此功能为分析微调过程提供了宝贵的见解。
灵活评估 LlamaBoard 支持计算数据集上的文本相似度分数以自动评估模型或通过与模型聊天进行人工评估。
多语言支持 LlamaBoard 提供本地化文件,方便集成新语言来渲染界面。 目前我们支持英语、俄语、中文三种语言,可以让更广泛的用户使用 羊驼板 用于微调大语言模型。
表3:LlamaFactory中使用不同微调方法的训练效率比较。 每个模型的 GaLore、LoRA 和 QLoRA 中最好的结果以粗体显示。
Gemma-2B | Llama2-7B | Llama2-13B | |||||||
---|---|---|---|---|---|---|---|---|---|
Method | Memory | Throughput | PPL | Memory | Throughput | PPL | Memory | Throughput | PPL |
(GB) | (Tokens/s) | (GB) | (Tokens/s) | (GB) | (Tokens/s) | ||||
Baseline | / | / | 11.83 | / | / | 7.53 | / | / | 6.66 |
Full-tuning | 17.06 | 3090.42 | 10.34 | 38.72 | 1334.72 | 5.56 | / | / | / |
Freeze-tuning | 8.10 | 5608.49 | 11.33 | 15.69 | 2904.98 | 6.59 | 29.02 | 1841.46 | 6.56 |
GaLore | 10.16 | 2483.05 | 10.38 | 15.43 | 1583.77 | 5.88 | 28.91 | 956.39 | 5.72 |
LoRA | 7.91 | 3521.05 | 10.19 | 16.32 | 1954.07 | 5.81 | 30.09 | 1468.19 | 5.75 |
QLoRA | 5.21 | 3158.59 | 10.46 | 7.52 | 1579.16 | 5.91 | 12.61 | 973.53 | 5.81 |
表4:在 LlamaFactory 中使用不同微调方法在特定任务上的性能比较(以 ROUGE 计)。 每个模型的最佳结果是下划线,每个任务的最佳结果是粗体。
CNN / DM | XSum | AdGen | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Model | Baseline | FT | GaLore | LoRA | QLoRA | Baseline | FT | GaLore | LoRA | QLoRA | Baseline | FT | GaLore | LoRA | QLoRA |
LLaMA2-7B | 12.94 | 22.87 | 22.40 | 22.70 | 22.61 | 13.89 | 27.69 | 27.64 | 28.80 | 28.05 | 0.61 | 20.51 | 19.61 | 20.29 | 20.45 |
Mistral-7B | 14.39 | 22.03 | 22.99 | 23.47 | 23.28 | 15.87 | 23.57 | 28.00 | 30.41 | 30.44 | 7.82 | 20.14 | 20.90 | 20.99 | 20.56 |
Gemma-7B | 15.97 | 22.07 | / | 22.41 | 22.44 | 15.31 | 25.13 | / | 28.67 | 29.02 | 11.57 | 19.99 | / | 20.62 | 19.81 |
Qwen1.5-7B | 15.40 | 22.46 | 21.76 | 22.71 | 22.52 | 19.27 | 26.68 | 26.64 | 27.77 | 27.60 | 14.49 | 20.42 | 21.08 | 21.31 | 21.34 |
Yi-6B | 16.85 | 22.40 | 22.68 | 22.98 | 22.97 | 18.24 | 27.09 | 28.25 | 28.71 | 29.21 | 13.34 | 19.68 | 20.06 | 20.97 | 20.31 |
ChatGLM3-6B | 18.51 | 22.00 | 22.16 | 21.68 | 21.70 | 16.14 | 26.25 | 26.34 | 26.50 | 26.78 | 14.53 | 19.91 | 20.57 | 20.47 | 20.49 |
我们系统地评估LlamaFactory 从两个角度来看:1)内存使用、吞吐量和困惑度方面的训练效率。 2)下游任务适应的有效性。
我们利用 PubMed Canese 和 Weis (2013) 数据集,其中包含超过 3600 万条生物医学文献记录。 我们从文献摘要中提取了大约 400,000 个标记来构建训练示例。 我们使用生成预训练目标来构建 Gemma-2B (Mesnard 等人, 2024)、Llama2-7B 和 Llama2-13B (Touvron 等人, 2023b) 模型具有各种有效的微调方法。 我们比较了全调优、冻结调优、GaLore、LoRA 和 4 位 QLoRA 的结果。 微调后,我们计算训练示例的困惑度来评估不同方法的效率。 我们还将预训练模型的困惑度作为基线。 更多实验细节可参见附录 D.1.
训练效率结果见表3,其中内存是指训练期间消耗的峰值内存,吞吐量计算为每秒训练的 Token 数量,PPL 表示模型在训练示例上的困惑度。 由于完全调优 Llama2-13B 会导致内存溢出,因此不会记录结果。 我们观察到 QLoRA 始终具有最低的内存占用,因为预训练的权重以较低的精度表示。 LoRA 利用 Unsloth 对 LoRA 层的优化表现出更高的吞吐量。 GaLore 在大型模型上实现了较低的 PPL,而 LoRA 在小型模型上具有优势。
为了评估不同高效微调方法的有效性,我们比较了各种模型在下游任务上微调后的性能。 我们使用来自三个代表性文本生成任务的 2,000 个示例和 1,000 个示例构建训练集和测试集,包括 CNN/DM (Nallapati 等人, 2016)、XSum (Narayan 等人, 2018 ) 和 AdGen (Shao 等人, 2019)。 我们选择了几个指令调整模型,并使用不同的微调方法按照序列到序列任务对它们进行调节。 我们比较了全调优(FT)、GaLore、LoRA 和 4 位 QLoRA 的结果。 经过微调后,我们计算每个任务的测试集上的 ROUGE 分数(Lin,2004)。 我们还将原始指令调整模型的分数作为基线。 更多实验细节可参见附录 D.2.
下游任务评估结果如表4. 我们报告每个大语言模型和每个数据集的 ROUGE-1、ROUGE-2 和 ROUGE-L 的平均分数。 Gemma-7B 的一些结果未包含在表中,因为 GaLore 方法不适用于该模型。 结果中一个有趣的发现是,LoRA 和 QLoRA 在大多数情况下都实现了最佳性能,除了 CNN/DM 和 AdGen 数据集上的 Llama2-7B 和 ChatGLM3-6B 模型。 这一现象凸显了这些有效的微调方法在使大语言模型模型适应特定任务方面的有效性。 此外,我们观察到 Mistral-7B 模型在英语数据集上表现更好,而 Qwen1.5-7B 模型在中文数据集上取得了更高的分数。 这些结果表明,微调模型的性能也与其在特定语言上的固有功能相关。
在本文中,我们演示了LlamaFactory,大语言模型高效微调的统一框架。 通过模块化设计,我们最大限度地减少了模型、数据集和训练方法之间的依赖性,并提供了超过 100 个大语言模型的集成方法以及各种高效的微调技术。 此外,我们还提供灵活的 Web UI 羊驼板,无需编码即可实现大语言模型的定制微调和评估。 我们凭经验验证了我们的框架在语言建模和文本生成任务上的效率和有效性。
未来,我们将一如既往地保留LlamaFactory 与最先进的模型和高效的微调技术同步。 我们也欢迎开源社区的贡献。 在未来的版本中,我们将探索更先进的大语言模型并行训练策略和多模态高效微调。
骆驼工厂 吸引了大量对大语言模型感兴趣的个人探索微调自己模型的可能性。 这对开源社区的发展做出了重大贡献。 它受到越来越多的关注,并出现在《Awesome Transformers》中3 作为大语言模型高效微调框架的代表。 我们期望实践者在我们的框架上建立他们的大语言模型,为社会带来好处。 使用时必须遵守模型许可证 骆驼工厂 用于微调大语言模型,从而防止任何潜在的误用。
表5:LlamaFactory与现有大语言模型微调框架的功能比较。
Methods | LlamaFactory | FastChat | LitGPT | LMFlow | Open Instruct |
LoRA | ✓ | ✓ | ✓ | ✓ | ✓ |
QLoRA | ✓ | ✓ | ✓ | ✓ | |
LoRA+ | ✓ | ||||
DoRA | ✓ | ||||
GaLore | ✓ | ||||
SFT | ✓ | ✓ | ✓ | ✓ | ✓ |
RLHF | ✓ | ✓ | |||
DPO | ✓ | ✓ | |||
Flash attention | ✓ | ✓ | ✓ | ✓ | ✓ |
Unsloth | ✓ | ||||
DeepSpeed | ✓ | ✓ | ✓ | ✓ | ✓ |
在本节中,我们列举了现有的用于微调大语言模型的框架,特别重点介绍了那些用于高效微调的框架。
LLaMA-Adapter (Zhang 等人, 2022) 使用零初始注意力有效地微调 Llama 模型 (Touvron 等人, 2023a) 的指令跟踪能力。 FastChat (Zheng 等人, 2023) 是一个专注于训练和评估用于聊天完成目的的大语言模型的框架。 LitGPT (AI, 2023) 提供生成模型的实现并支持各种训练方法。 Open-Instruct (Wang 等人, 2023d) 是一个支持高效微调的微调框架。 Colossal AI (Li 等人, 2023b) 采用先进的并行策略进行分布式训练。 LMFlow (Diao 等人, 2023) 是一个可扩展且高效的微调框架,支持仅解码器模型,同时支持全调优和适配器调优。 GPT4All (Anand 等人, 2023) 允许大语言模型在消费设备上运行,同时还提供微调功能。
与上面介绍的框架相比,LlamaFactory 支持更广泛的高效微调方法。 我们将我们的框架与表中的现有工作进行比较 5.
表6:支持的型号列表。
Model | Variant | Organization |
---|---|---|
Llama (Touvron et al., 2023a) | 7B/13B/33B/65B | Meta AI |
Llama 2 (Touvron et al., 2023b) | 7B/13B/70B | Meta AI |
Baichuan Yang et al. (2023) | 7B/13B | Baichuan Inc |
Baichuan2 (Yang et al., 2023) | 7B/13B | Baichuan Inc |
BLOOM (Le Scao et al., 2022) | 560M/3B/7.1B | BigScience |
BLOOMZ (Le Scao et al., 2022) | 560M/3B/7.1B | BigScience |
ChatGLM2 (Du et al., 2022) | 6B | THUDM |
ChatGLM3 (Du et al., 2022) | 6B | THUDM |
ChineseLLaMA2 (Cui et al., 2023) | 3B/7B/13B | HFL |
DeepSeek-LLM (Bi et al., 2024) | 7B/67B | DeepSeek |
DeepSeek-Math (Shao et al., 2024) | 7B | DeepSeek |
DeepSeek-MoE (Dai et al., 2024) | 16B | DeepSeek |
DeepSeek-Coder (Guo et al., 2024) | 6.7B/7B/33B | DeepSeek |
Falcon (Almazrouei et al., 2023) | 7B/40B/180B | TII |
Gemma (Mesnard et al., 2024) | 2B/7B | |
InternLM (Team, 2023) | 7B/20B | Shanghai AI Lab |
InternLM2 (Team, 2023) | 1.8B/7B/20B | Shanghai AI Lab |
Mistral (Jiang et al., 2023a) | 7B | Mistral AI |
Mixtral (Jiang et al., 2023a) | 8x7B | Mistral AI |
OLMo (Groeneveld et al., 2024) | 1B/7B | Allen AI |
OpenChat (Wang et al., 2023b) | 7B | OpenChat |
Orion (Chen et al., 2024a) | 14B | OrionStar |
Phi-1.5 (Li et al., 2023c) | 1.3B | Microsoft |
Phi-2 (Li et al., 2023c) | 2.7B | Microsoft |
Qwen (Bai et al., 2023) | 1.8B/7B/14B/72B | Alibaba Cloud |
Qwen1.5 (Bai et al., 2023) | 1.8B/7B/14B/72B | Alibaba Cloud |
SOLAR (Kim et al., 2023) | 10.7B | Upstage AI |
Skywork (Wei et al., 2023) | 13B | Skywork |
StarCoder2 (Lozhkov et al., 2024) | 3B/7B/15B | BigCode |
Vicuna1.5 (Zheng et al., 2023) | 7B/13B | LMSYS |
Yi (Young et al., 2024) | 6B/9B/34B | 01.AI |
Yuan2 (Wu et al., 2023) | 2B/51B/102B | IEIT |
Zephyr (Tunstall et al., 2023) | 7B | Hugging Face H4 |
我们选择了LlamaFactory支持的流行预训练模型并在表中列出6,范围从密集模型到稀疏专家混合 (MoE) 模型。
表7:LlamaFactory中函数调用的提示。
You have access to the following tools: |
> Tool Name: tool1 |
Tool Description: the usage of tool1 |
Tool Args: |
- arg1 (dtype): the usage of arg1 |
Use the following format if using a tool: |
``` |
Action: tool name (one of [tool1]). |
Action Input: the input to the tool, in a JSON format representing the kwargs (e.g. ```{"input": "hello world", "num_beams": 5}```). |
``` |
尽管 Transformers 4.34.0 引入了聊天模板功能,但一些模型(例如 ChatGLM 和 Qwen)具有表现出特定行为的标记器,并且无法直接对特殊标记进行编码。 因此,我们设计了一个 格式化程序 类将文本输入稳健地转换为其嵌入 ID。 具体来说,我们提供 EmptyFormatter、StringFormatter、FunctionFormatter 和 工具格式化程序。此外,LlamaFactory 支持微调模型以获得函数调用能力。 虽然 ReAct 提示 Yao 等人 (2023) 是工具使用的流行选择,但对于嵌套工具参数来说,它是不够的。 我们优化了工具提示并在表格中提供 7.
我们采用学习率为10−5,词符批量大小为512 使用 bfloat16 精度的 8 位 AdamW 优化器(Dettmers 等人,2022b) 来调节这些模型,并通过激活检查点来减少内存占用。 在冻结调整中,我们只调节最后一个 3 模型的解码器层。 对于 GaLore,我们将排名和规模设置为 128 和 2.0, 分别。 对于 LoRA 和 QLoRA,我们将适配器附加到所有线性层并将等级和 alpha 设置为 128 和 256, 分别。 所有实验均在单个 NVIDIA A100 40GB GPU 上进行。 我们在所有实验中启用 Flash Attention,并在 LoRA 和 QLoRA 实验中启用 Unsloth。
我们简要描述用于评估不同微调方法有效性的数据集。
CNN/DM (Nallapati 等人, 2016) 该数据集用于摘要生成任务。 英文文章摘自 CNN 和《每日邮报》。 我们使用 1.0.0 版本,其中包含超过 30 万个样本。
XSum (Narayan 等人, 2018) 该数据集用于抽象摘要生成任务,由英文文档和一句话摘要组成,总计超过 20 万个样本。
AdGen (Shao 等人, 2019) 该数据集是一个中文数据集,需要模型根据给定的关键字生成广告文本,总共超过 10 万个样本。
在本实验中,我们采用学习率为10−5。我们将批量大小设置为4,而最大输入长度为2048. 我们使用 8 位 AdamW 优化器(Dettmers 等人,2022b) 以 bfloat16 精度对模型进行操作,并通过激活检查点来减少内存占用。 对于 GaLore,我们将排名和规模设置为 128 和 2.0, 分别。 对于 LoRA 和 QLoRA,我们将适配器附加到所有线性层并将等级和 alpha 设置为 128 和 256, 分别。 所有实验结果均在启用了 Flash Attention 的 NVIDIA A100 40GB GPU 上进行。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。