深入解读LLaMA-Factory

news2024/11/16 9:40:31

转自:老朱读AI

1、介绍

LLaMA-Factory是一个开源平台,旨在为研究人员和开发者提供便捷的大型语言模型微调环境。通过LLaMA-Factory,用户可以轻松地加载预训练模型,调整模型参数,并在特定数据集上进行训练,从而优化模型性能。

想要掌握如何将大模型的力量发挥到极致吗?叶老师带您深入了解 Llama Factory —— 一款革命性的大模型微调工具。9月22日晚,实战专家1小时讲解让您轻松上手,学习如何使用 Llama Factory 微调模型。

加助理微信:amliy007,29.9元即可参加线上直播分享,叶老师亲自指导,互动沟通,全面掌握Llama Factory,关注享粉丝福利,限时免费CSDN听直播后的录播讲解。

LLaMA Factory 支持多种预训练模型和微调算法。它提供灵活的运算精度和优化算法选择,以及丰富的实验监控工具。开源特性和社区支持使其易于使用,适合各类用户快速提升模型性能。

2、特征

  • 各种型号:LLaMA、LLaVA、Mistral、Mixtral-MoE、Qwen、Yi、Gemma、Baichuan、ChatGLM、Phi 等。

  • 集成方法:(连续)预训练、(多模态)监督微调、奖励建模、PPO、DPO、KTO、ORPO 等。

  • 可扩展资源:通过 AQLM/AWQ/GPTQ/LLM.int8/HQQ/EETQ 的 16 位全调谐、冻结调谐、LoRA 和 2/3/4/5/6/8 位 QLoRA。

  • 高级算法:GaLore、BAdam、DoRA、LongLoRA、LLaMA Pro、Mixture-of-Depths、LoRA+、LoftQ、PiSSA 和 Agent tuning。

  • 实用技巧:FlashAttention-2、Unsloth、RoPE scaling、NEFTune 和 rsLoRA。

  • 实验监控:LlamaBoard、TensorBoard、Wandb、MLflow 等。

  • 更快的推理:带有 vLLM 工作器的 OpenAI 风格的 API、Gradio UI 和 CLI。

3、基准

与 ChatGLM 的P-Tuning相比,LLaMA Factory 的 LoRA 调优可将训练速度提高 3.7 倍,并在广告文本生成任务中获得更好的 Rouge 分数。通过利用 4 位量化技术,LLaMA Factory 的 QLoRA 进一步提高了 GPU 内存的效率。

4、定义

  • 训练速度:训练过程中每秒处理的训练样本数量。(bs=4,cutoff_len=1024)

  • Rouge Score :广告文本生成任务开发集上的Rouge-2分数。(bs=4,cutoff_len=1024)

  • GPU 内存:4 位量化训练中的峰值 GPU 内存使用率。(bs=1,cutoff_len=1024)

  • 我们采用pre_seq_len=128ChatGLM 的 P-Tuning 和lora_rank=32LLaMA Factory 的 LoRA 调优。

5、支持的模型

图片

5、支持的训练方式

图片

6、环境要求

图片

7、硬件要求

图片

**番外篇**

在了解LLM微调工具之前,我们务必要对模型微调的相关概念具备一定程度的了解,以此辅助我们更好地LLM微调工具。

一、模型训练阶段

在深入理解模型微调的概念之前,我们先来明晰大模型训练阶段包含哪些内容。

Pre-Training(预训练阶段):此阶段用于训练基础模型,是最为消耗算力的阶段,也是大模型得以诞生的起始点。

Supervised Finetuning(SFT,指令微调/监督微调阶段):与预训练阶段相比,此阶段最大的转变在于训练数据从“量多质低”转变为“量少质高”,训练数据主要通过人工进行筛选或生成。在这个阶段完成后,实际上已经能够获取一个可以上线使用的大模型。

RLHF(基于人类反馈的强化学习,Rainforcement Learning from Human Feedback):它可以划分为两个环节。

奖励建模阶段(Reward Modeling):在这一阶段,模型学习和输出的内容发生了本质性的变化。在前两个阶段,即预训练和微调阶段,模型的输出是符合预期的文本内容;而在奖励建模阶段,其输出不仅涵盖预测内容,还包含奖励值或者评分值,数值越高,表明模型的预测结果越佳。这个阶段输出的评分,并非提供给最终的用户,而是在强化学习阶段发挥关键作用。

强化学习阶段(Reinforcement Learning):这个阶段十分“聪明”地整合了前面的成果:

针对特定的输入文本,通过 SFT 模型获取多个输出文本。

基于 RM 模型为多个输出文本的质量进行打分,此打分实际上已符合人类的期望。

基于这个打分,为多个输出文本结果添加权重。这个权重实际上会体现在每个输出 Token 中。

将加权结果反向传播,对 SFT 模型的参数进行调整,这便是所谓的强化学习。

常见的强化学习策略包含 PPO 与 DPO,它们的细节我们无需深究,只需知晓 DPO 主要应用于分布式训练,适用于大规模并行处理的场景,而 PPO 通常指的是单机上的算法即可。

做一个形象的类比,这四个阶段相当于人的求学之路:

  • 预训练阶段,相当于是小学生

  • 有监督微调阶段,相当于是中学生

  • 奖励建模阶段,相当于是大学生

  • 强化学习阶段,相当于是社会人

二、模型训练模式

在了解了模型训练阶段之后,随之而来的一个问题是,我们应当在哪个阶段开展微调训练呢?

通常会有以下训练模式供选择,依据领域任务、领域样本的情况以及业务的需求,我们能够挑选适宜的训练模式。

  • 模式一:基于 base 模型 + 领域任务的 SFT;

  • 模式二:基于 base 模型 + 领域数据 continue pre-train + 领域任务 SFT;

  • 模式三:基于 base 模型 + 领域数据 continue pre-train + 通用任务 SFT + 领域任务 SFT;

  • 模式四:基于 base 模型 + 领域数据 continue pre-train + 通用任务与领域任务混合 SFT;

  • 模式五:基于 base 模型 + 领域数据 continue pre-train(混入 SFT 数据 + 通用任务与领域任务混合 SFT;

  • 模式六:基于 chat 模型 + 领域任务 SFT;

  • 模式七:基于 chat 模型 + 领域数据 continue pre-train + 领域任务 SFT

是否需要 continue pre-train

大模型的知识源自 pre-train 阶段,如果您的领域任务数据集与 pre-train 的数据集存在较大差异,例如您的领域任务数据来自公司内部,pre-train 训练样本基本无法覆盖到,那么必然要进行 continue pre-train。

倘若您的领域任务数据量庞大(token 在 1B 以上),并且仅追求领域任务的效果,不考虑通用能力,建议进行 continue pre-train。

是选择 chat 模型 还是 base 模型

假如您拥有一个出色的 base 模型,在 base 模型基础上进行领域数据的 SFT 与在 chat 模型上进行 SFT,效果方面的差异不大。

基于 chat 模型进行领域 SFT,极易导致灾难性遗忘,在进行领域任务 SFT 之后,模型的通用能力会降低,如果仅追求领域任务的效果,则无需考虑。

如果您的领域任务与通用任务存在很大的相关性,那么这种二阶段 SFT 会提升您的领域任务的效果。

如果您既追求领域任务的效果,并且期望通用能力不下降,建议选取 base 模型作为基座模型。在 base 模型上开展多任务混合训练时,需要关注各任务之间的数据配比。

其他经验

在资源许可的情况下,倘若只考虑领域任务效果,我会选择模式二;

在资源许可的情况下,若考虑模型的综合能力,我会选择模式五;

在资源不允许的情况下,我会考虑模式六;

一般而言,我们无需进行 RLHF 微调;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2076399.html

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

相关文章

【Python机器学习】NLP分词——利用分词器构建词汇表(六)——词汇表归一化

目录 大小写转换 词干还原 词形归并 使用场景 词汇表大小对NLP流水线的性能有很大的影响,有一种减少词汇表大小的方法是将词汇表归一化以便意义相似的词条归并成单个归一化的形式。这样做一方面可以减少需要再词汇表中保留的词条数,另一方面也会提高…

记录|Visual Studio中的Git上传下载使用

目录 前言一、前提准备Step1 仓库准备Step2. 本地仓库和远程仓库绑定当前效果展示 二、下载更新内容到本地仓库情形Step1. 下载 三、更新内容,上传文件到远程仓库情形Step1. 下载Step2. 上传当前效果展示 更新时间 前言 这部分是使用过程中的经验 一、前提准备 St…

【数模资料包】最新数模国赛word+latex模版|数模常用的算法python+matlab代码

【2024最全国赛研赛数模资料包】C君珍贵国一数模资料|最新数模国赛wordlatex模版|数模常用的算法pythonmatlab代码 国赛指:高教社杯全国大学生数学建模竞赛,研赛指:华为杯研究生数学建模竞赛。资料内容具体看文末卡片…

【C++算法/学习】位运算详解

✨ 忍能对面不相识,仰面欲语泪现流 🌏 📃个人主页:island1314 🔥个人专栏:算法学习 🚀 欢迎关注:👍点赞 &…

【Python 千题 —— 基础篇】面积计算(多种图形面积计算)

Python 千题持续更新中 …… 脑图地址 👉:⭐https://twilight-fanyi.gitee.io/mind-map/Python千题.html⭐ 题目描述 题目描述 编写一个面向对象的程序,定义一个基类 Shape 和两个派生类 Circle 和 Rectangle,用来计算不同图形…

原子操作与锁

1 原子性 1.1 CPU缓存 L1、L2:一级缓存、二级缓存,均为核心独有 L3:三级缓存,多个核心共用 多级缓存,弥补CPU与内存速度不匹配的问题 1.2 cache line 缓存进行管理的一个最小存储单元,缓存块 1.3 CPU读…

【xilinx】解决 I/O 时钟布局器错误:CLOCK_DEDICATED_ROUTE 异常示例

问题描述 设备&#xff1a; xcvm1102-sfva784-2HP-iS问题&#xff1a;尽管使用 GCIO 引脚作为时钟&#xff0c;但布局器返回 I/O 时钟错误 错误&#xff1a; <span style"background-color:#f3f3f3"><span style"color:#333333"><code&g…

《机器学习》 贝叶斯分类器 原理、参数讲解及代码演示

目录 一、贝叶斯算法 1、简介 2、贝叶斯算法具有以下特点&#xff1a; 二、贝叶斯原理 1、正向概率&#xff08;先验概率&#xff09; 例如&#xff1a; 2、逆向概率&#xff08;后验概率&#xff09; 3、公式 1&#xff09;实例1 2&#xff09;实例2 • 目标&#x…

基于初始运行数据的电池循环寿命预测

这个例子展示了如何使用线性回归(一种监督机器学习算法)预测快速充电锂离子电池的剩余循环寿命。使用基于物理的建模方法预测锂离子电池的循环寿命是非常复杂的&#xff0c;因为不同的操作条件和显著的设备可变性&#xff0c;即使是来自同一制造商的电池。对于这种情况&#xf…

FPGA上板项目(四)——FIFO测试

目录 实验内容实验原理FIFO IP 核时序绘制HDL 代码仿真综合实现上板测试 实验内容 理解 FIFO 原理调用 FIFO IP 核完成数据读写 实验原理 FIFO&#xff1a;First In First Out&#xff0c;先入先出式数据缓冲器&#xff0c;用来实现数据先入先出的读写方式。可分类为同步 FI…

论文翻译 | 通过逻辑增强大型语言模型中的零样本思维链推理

摘要 大型语言模型的最新进展已经展示了它们在各个领域的卓越泛化性。然而&#xff0c;他们的推理能力仍有很大的提高空间&#xff0c;特别是在面对需要多步骤推理的场景时。虽然大型语言模型拥有广泛的知识&#xff0c;但它们的推理往往不能有效地利用这些知识来建立连贯的思维…

机器学习/数据分析--通俗语言带你入门决策树(结合分类和回归案例)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 前言 机器学习是深度学习和数据分析的基础&#xff0c;接下来将更新常见的机器学习算法注意&#xff1a;在打数学建模比赛中&#xff0c;机器学习用的也很多&a…

[LeetCode]根据决策树设计代码解决dfs

目录 46. 全排列 - 力扣&#xff08;LeetCode&#xff09; 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 46. 全排列 - 力扣&#xff08;LeetCode&#xff09; 决策树&#xff1a;根据题意可以知道&#xff0c;全排列需要找到数组内元素不重复的所有排列方式&#xff0c…

Java面向接口编程——开发打印机

题目&#xff1a; 墨盒&#xff1a;彩色、黑白 纸张类型&#xff1a;A4、B5 墨盒和纸张都不是打印机厂商提供的 打印机厂商要兼容市场上的墨盒、纸张 墨盒接口&#xff1a; public interface InkBox {String colorInkBox(); // 墨盒颜色} 纸张接口&#xff1a; public i…

Centos 添加双网卡 (生产环境配置记录)

1、在虚拟机中添加网卡2 [rootntpserver network-scripts]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo …

前端(Vue)tagsView(子标签页视图切换) 原理及通用解决方案

文章目录 tagsView 方案总结tagsView 原理分析创建 tags 数据源生成 tagsViewtagsView 国际化处理contextMenu 展示处理contextMenu 事件处理处理 contextMenu 的关闭行为处理基于路由的动态过渡 tagsView 方案总结 整个 tagsView 整体来看就是三块大的内容&#xff1a; tags…

【SAM下游任务微调】TS-SAM: Fine-Tuning Segment-Anything Model for Downstream Tasks

TS-SAM: Fine-Tuning Segment-Anything Model for Downstream Tasks 论文链接&#xff1a;https://arxiv.org/pdf/2408.01835 代码链接&#xff1a;https://github.com/maoyangou147/TS-SAM 一、摘要 基于适配器的微调方法已经被研究用于改进SAM在下游任务上的性能。然而&am…

【2024】Datawhale X 李宏毅苹果书 AI夏令营 Task1

本文是关于李宏毅苹果书“第1章 机器学习基础”学习内容的记录。 1、术语解释 术语解释机器学习&#xff08;Machine Learning, ML&#xff09;机器学习是一种人工智能&#xff08;AI&#xff09;技术&#xff0c;它使计算机能够从数据中学习并做出决策或预测&#xff0c;而无…

【python计算机视觉编程——3.图像到图像的映射】

python计算机视觉编程——3.图像到图像的映射 3.图像到图像的映射3.1 单应性变换3.1.1 直接线性变换算法&#xff08;DLT&#xff09;3.1.2 仿射变换 3.2 图像扭曲3.2.1 图像中的图像3.2.2 分段仿射扭曲3.2.3 图像配准 3.3 创建全景图3.3.1 RANSAC3.3.2 稳健的单应性矩阵估计3.…

【二叉树】LC405-删除二叉搜索树的节点

文章目录 1 删除二叉树的节点思路其他代码参考 1 删除二叉树的节点 https://leetcode.cn/problems/delete-node-in-a-bst/description/ 给定一个二叉搜索树的根节点 root 和一个值 key&#xff0c;删除二叉搜索树中的 key 对应的节点&#xff0c;并保证二叉搜索树的性质不变。…