Llama-factory具体基础利用说明
近来许多小伙伴在利用llama-factory时遇到了不少题目,特殊是基础不太好的童鞋,对各种参数或者webui界面的内容不理解,总是一会一个题目,网上大部门的教程,都只是教到能跑起来就行,对于细的调整没有做介绍,这里具体整理了一下界面中的内容和命令行参数的解读,分享出来,如许各人再遇到不懂的,对照着利用就可以了 。一、什么是llama-factory
对于初入算法的童鞋来说,有的大概还不知道llama-factory是什么,只知道大模子用到了这个框架,这是不可的。
LLaMA-Factory 是一个低代码的大规模语言模子(LLM)训练框架,它主要面向研究职员和开发者,旨在简化大型语言模子的微调、评估和部署过程。
白话说就是集合了当下LLM领域各种好用的开源或者自研的框架以及工具,举行封装以及优化,简化利用方法,方便各人对大模子举行微调和评估部署等工作,降低了利用难度。
包罗推理框架vllm等(具体可以看官网哈,下面有地址)
二、llama-factory安装
这部门实在网上有许多教程,github上也有具体说明,具体的不再赘述,给出地址各人点进去看。(假如各人有需要,可以留言或私信,我再举行增补)
llama-factory的github地址:GitHub - hiyouga/LLaMA-Factory: Efficiently Fine-Tune 100+ LLMs in WebUI (ACL 2024)
llama-factory的中文readme地址:LLaMA-Factory/README_zh.md at main · hiyouga/LLaMA-Factory · GitHub
三、webui界面具体说明
我利用的装备是aurodl上租的RTX 3090,只安装,做展示不举行任何加载操作的话,选择无卡开机就可以。
llama-factory的webui部门界面如下:https://i-blog.csdnimg.cn/direct/5efad1572ae94e99b9c3c31512a8b59c.png
下面举行分模块的解读。
1.语言
https://i-blog.csdnimg.cn/direct/c937c8844a6346e4b556ee5b81a8d14d.png
语言模块中,默认提供了四种语言。英文不方便的童鞋,直接选择zh就行。
[*]en:英语
[*]ru:俄语
[*]zh:中文
[*]ko:韩语
2.模子名称和模子路径https://i-blog.csdnimg.cn/direct/bdd932d739b046df81ab5b10c53f0fac.png
点击模子名称,会自动弹出可选择的模子,同时模子路径会显示出对应的hugging face上的模子标识符(就是默认的模子文件夹路径地址),就行如许:meta-llama/Llama-3.2-3B
这里要注意下,许多小伙伴是已经把模子下载到本地后利用,那就要把模子路径部门自动弹出的地址改成本地模子文件实际的地址,建议利用绝对地址,稳妥。注意,文件夹下要有config.json才对。
假如本地没有下载模子,模子路径不做修改,后面直接举行模子加载,体系在本地检索不到对应文件夹以及模子,会自动从hugging face举行下载。这里注意,需要科学上网才华下载成功。假如想设置镜像站的小伙伴,可以自己修改下载的配置文件举行修改。个人风俗是把模子下载到本地,然后利用,因为大概会涉及多模子轮换利用,会有一个专门的文件夹存放模子。
这里要注意仔细核查自己的路径对不对,因为假如路径写错了,模子读取不到本地下载好的模子,还是会尝试从hugging face举行下载的,假如一直开着科学上网,就比较浪费资源了。
3.微调方法和检查点路径
https://i-blog.csdnimg.cn/direct/b6d5f3134b7f403e99e8206e65d38d45.png
微调方法中提供了三个选择
[*]full:全量微调,就是所有权重都举行训练。
[*]freeze:冻结微调,只训练部门层,其它层的权重举行冻结,也就是不举行训练。
[*]lora:目前众多微调方法中,最常用,也是相对来说结果比较好的微调方法之一。个人比较偏幸的微调方法,优点许多,好比需要的盘算资源少,盘算服从高,不改变原始模子结构等等。具体的小伙伴们可以查阅相干资料,实在不理解可以私聊我。
检查点路径在长时间训练大模子的时候会经常用,主要作用是把训练过程中的阶段性结果举行生存,这里是设置指定的生存地址的。如许假如训练过程意外停止,可以从检查点开始继承训练,不消重新再开始训练。
3.高级设置
这里需要点下高级设置最右边的小三角才会展开,默认在界面中是折叠的。
https://i-blog.csdnimg.cn/direct/5d0e83d6131d4d6a91181f0b2a7139c9.png
[*] 量化品级
https://i-blog.csdnimg.cn/direct/f4b5f9e8123442089a78c3516bab3ab5.png
这部门图像化界面默认是8位和4位两种量化,这里主要提一下什么是量化,以及为什么要量化,还有量化类型。
量化是指将神经网络中的权重和激活值从高精度(如32位浮点数)转换为低精度(如8位整数或更低)的过程。这一技能的主要目的是减少模子的内存占用和盘算需求,从而加快推理过程并降低硬件成本,尤其是在边缘装备上部署模子时尤为告急。
量化类型:
[*]动态量化:仅对激活值举行量化,而权重保持全精度。这通常用于RNN等需要生存状态的模子。
[*]静态量化:同时对权重和激活值举行量化,并且是在训练后举行的。它包罗校准步骤以确定量化的参数。
[*]量化感知训练(QAT):在训练过程中模仿量化效应,使得最终的量化模子性能接近未量化版本。
[*] 量化方法
https://i-blog.csdnimg.cn/direct/d404208e133848acab913096c999250f.png
量化方法中,提供了三种量化选项。三种量化方式建议对比利用。
bitsandbytes:BitsAndBytes是一种8位优化的实现方式(8位优化是一种将深度学习模子中的权重和激活值从传统的32位浮点数(float32)转换为8位整数(int8)的技能),它通过高效的量化算法将模子参数和中心盘算结果转换为8位表示,以到达压缩和加快的目的。 与其他量化方法相比,BitsAndBytes提供了更好的性能和更低的精度损失。 BitsAndBytes的焦点在于它的量化和反量化策略。
hqq:Half-Quadratic Quantization (HQQ) 是一个快速且精确的模子量化工具,它不需要校准数据即可量化大型模子。HQQ 的焦点优势在于其速率和兼容性,支持 8、4、3、2、1 位量化,并且可以应用于任何模子(如大型语言模子和视觉模子)。HQQ 的反量化步骤是线性操作,这意味着它与各种优化的 CUDA/Triton 内核兼容。此外,HQQ 还支持 peft 训练,并尝试使其完全兼容 torch compile,以实现更快的推理和训练。(转载地址:Half-Quadratic Quantization (HQQ) 开源项目教程-CSDN博客)
eetq:EETQ(Easy & Efficient Quantization for Transformers) 是为Transformer量身打造的高效量化神器,旨在在保证精度的同时提拔盘算服从和降低资源消耗。通过引入全新特性gemv算子,EETQ明显提拔了模子的运行速率,是对现有量化方法的一次重大革新。EETQ是一种不依赖数据的量化方案,可直接用于恣意模子。
[*] 提示词模板
这部门我没用过,有尝试过的小伙伴可以举行分享
[*] RoPE插值方法
https://i-blog.csdnimg.cn/direct/716cd61b7f6e4b3c8561da8db83cc41d.png
这里主要说明一下什么是RoPE。编码方式实际上是一种扩大大模子上下文长度的方法。
旋转位置编码(Rotary Position Embedding, RoPE)是一种在自然语言处理惩罚任务中用于Transformer模子的位置编码方法。它被提出用来改善传统位置编码的范围性,特殊是当涉及到序列长度变革时的题目。RoPE通过利用复数空间中的旋转操作来编码位置信息,使得模子能够更好地理解和处理惩罚相对位置信息。
传统的绝对位置编码,如在原始Transformer论文中提出的正弦波位置编码,大概会导致模子难以泛化到训练时未见过的差别长度的序列。RoPE通过引入一种基于复数表示的方法来克服这一题目,这种表示可以捕获到输入序列元素之间的相对距离,并且这些距离在差别长度的序列之间是可转移的。
具体来说,RoPE将每个位置编码为一个复数向量,其中向量的每个分量都是以特定频率举行旋转的角度。这种设计答应模子学习到与位置无关的特性,因为旋转角度只依赖于两个元素之间的相对偏移,而不是它们的具体位置。这有助于提高模子对于差别长度输入的鲁棒性和泛化本领。
假如不是太理解,请记住这句话:绝对位置编码为每个位置分配一个唯一的向量,固然简朴但不能很好地扩展并且无法有效捕获相对位置;相对位置编码关注标记之间的距离,增强模子对标记关系的理解,但使模子架构复杂化。(来源:大语言模子中常用的旋转位置编码RoPE详解:为什么它比绝对或相对位置编码更好?-阿里云开发者社区 (aliyun.com)
)
至于两个选项,就很好理解了,线性的和动态的。
[*] 加快方式
这部门主要是用来选择推理加快的方式。
https://i-blog.csdnimg.cn/direct/c889a4de28d74c8fb251c9c7870b63c6.png
auto:自动选择最佳的加快方式。
flashattn2:全称是FlashAttention,2是指第二代,FlashAttention的主要作用是全面降低显存读写,旨在减少盘算复杂度并加快推理速率。
unsloth:开源的加快微调项目,地址:github.comhttps://csdnimg.cn/release/blog_editor_html/release2.3.7/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=O83Ahttps://github.com/unslothai/unsloth
liger_kernel:也是加快训练的项目,地址:github.comhttps://csdnimg.cn/release/blog_editor_html/release2.3.7/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=O83Ahttps://github.com/linkedin/Liger-Kernel
4.Train
这部门内容比较多,一部门内容会举行省略,假如不懂的可以艾特我哈。
整个绿框部门就是train模块包罗的内容。
https://i-blog.csdnimg.cn/direct/7a1811a0291c4fa38b9ea86769880e0f.png
主框架未折叠部门
[*]训练阶段
训练阶段包罗了六种训练方式。
https://i-blog.csdnimg.cn/direct/fc3f28d593f9409aac17ffe1ca18af98.png
[*] Supervised Fine-Tuning: 监督微调是一种迁徙学习技能,起首在一个预训练模子上举行无标签的数据集训练,然后在这个预训练模子的基础上,用带标签的新数据举行进一步的训练,以顺应新的任务需求。
[*] Reward Modeling: 奖励建模是强化学习的一部门,目标是猜测情况对署理行动的奖励信号。通过猜测奖励,模子可以更好地理解哪些动作会导致更好的结果。
[*] PPO: PPO(Proximal Policy Optimization)是一种强化学习算法,它通过限制新旧策略之间的差异来优化策略梯度。这种方法可以保证每次迭代更新后的策略不会偏离太多,从而稳固地提拔性能。
[*] DPO: DPO(Decoupled Policy Optimization)是一种强化学习算法,它将策略优化和代价估计解耦开来,分别举行独立的更新。这种方式可以制止策略和代价函数之间的相互影响,从而提高学习服从。
[*] KTO: KTO(Knowledge Transfer for Optimal Learning)是一种知识转移方法,它试图从源任务中学到的知识转移到目标任务中,以加快学习过程并提高最终性能。
[*] Pre-Training: 预训练是一种先在大规模无标签数据集上训练模子的技能,然后再将其用于特定任务的微调。预训练可以帮助模子捕获通用的语义信息,从而提高鄙俚任务的体现。
这些训练方式大概适用于差别的应用场景,用户可以根据自己的需求选择最适合的训练方式。
[*]数据路径
https://i-blog.csdnimg.cn/direct/c1cd43c3c4be43239a216768286da3a8.png
这里默认是llama-factory中的data文件夹中的数据,在利用自己的数据集的时候,可以把数据集文件直接放到data文件夹下。注意,无论是否放到data文件夹下,记得在dataset_info.json中添加你要用的数据集信息,包罗名称和路径,否则在页面中是加载不出来的。
[*]数据集
在上面设置好后,正常这里是可以加载出可选的数据集列表的,选择自己要用的数据集,在预览数据集部门,是可以看到数据集的内容的。假如没有精确加载,请查看路径和json配置文件是否设置精确。
[*]学习率
这个不做介绍,假如不知道学习率是什么的童鞋,就要认真学习基础了。
[*]训练轮数
epoch设置项
[*]最大梯度范数
最大梯度范数(Maximum Gradient Norm)是在深度学习中用来衡量模子参数更新过程中梯度大小的一种指标。它通常用于优化算法中,以控制梯度的规模,防止在训练过程中出现梯度爆炸的题目。
当我们在训练神经网络时,通过反向传播算法盘算损失函数关于模子参数的梯度,并根据这些梯度来更新参数。梯度提供了损失函数如何随着参数变革而变革的信息,因此它指示了参数应该调整的方向和幅度。
梯度范数是指梯度向量的长度或大小,可以利用差别的范数来衡量,最常用的是L2范数,即欧几里得距离。假如梯度范数非常大,这意味着梯度指向的方向上的斜率非常陡峭,大概导致参数更新过大,从而造成数值不稳固或无法收敛到最优解。这种情况通常被称为梯度爆炸。
为了应对这个题目,可以在梯度降落或其他优化算法中实行梯度裁剪(Gradient Clipping)。梯度裁剪是一种技能,它限制了梯度的最大值,确保梯度不会超过一个预设的阈值。具体来说,假如梯度范数超过了这个阈值,就将梯度按比例缩小,使得新的梯度范数等于设定的阈值。如许做有助于保持训练过程中的稳固性。
[*]最大样本数
顾名思义,不多做介绍。
[*]盘算类型
https://i-blog.csdnimg.cn/direct/bc788d643a97488bbdac01a75ae5f7cc.png
[*] Bfloat16 (bf16): Bfloat16 是由 Google 设计的一种介于 float16 和 float32 之间的数据格式,主要用于深度学习训练。它具有比 float16 更大的动态范围,同时保存了较低的内存占用和盘算成本。Bfloat16 的有效位数较少,因此精度低于 float32,但在某些情况下仍能提供充足的准确性。
[*] Float16 (fp16): Float16 是 IEEE 标准中的半精度浮点数格式,它只有 16 位,相比 float32 或 float64 能够明显降低存储和盘算的需求。尽管如此,float16 的精度较低,大概导致数值稳固性题目,尤其是在深度学习训练中。
[*] Float32 (fp32): Float32 是最常见的单精度浮点数格式,遵循 IEEE 754 标准。它拥有更高的精度和更大的动态范围,适合大多数科学盘算和深度学习任务。然而,相比于 bfloat16 和 float16,float32 占用更多的内存和盘算资源。
[*] pure_bf16:指在深度学习模子训练过程中完全利用 bfloat16 (bf16) 精度举行盘算的一种设置。这意味着不仅仅是某些部门(如权重更新、梯度盘算等)利用 bf16,而是整个训练过程中的所有操作,包罗前向传播、反向传播、参数存储和更新等,都利用 bfloat16 格式。
[*]截断长度
指输入的token超过多少后就举行截断,默认是1024,这里可以根据自己的模子能接受的长度具体举行设置。
[*]批处理惩罚大小
https://i-blog.csdnimg.cn/direct/dc396e561a9349708b0c79a01e84123a.png
就像图中写的,每个GPU处理惩罚的样本的大小,具体得看GPU的性能,数量越多,要求性能越高。
[*]梯度累积
https://i-blog.csdnimg.cn/direct/91019aee7083461c8b2c9b14ba918801.png
梯度累积是一种优化算法,在这种算法中,模子的权重在多个批次上举行更新,而不是在一个批次上举行更新。如许可以提高训练速率,并且减少内存利用。
在深度学习中,每次迭代时,模子会盘算损失函数相对于每个参数的梯度。然后,这些梯度将用于更新模子的权重。梯度累积的工作原理是将这些梯度存储起来,直到到达指定的数量或时间后才对模子的权重举行一次大的更新。
这种方法特殊适用于大型模子,因为它们需要大量的内存来存储梯度。通过累积梯度,我们可以减少所需的内存,并加快训练过程的速率。
这里默认是8步做一次累积。
[*]验证集比例
在全量数据集中按比例抽出一部门数据作为验证集。默认是0
[*]学习率调节器
学习率调节器用于调整优化器的学习率,以改善模子的收敛性和性能。
[*]linear(线性):学习率随时间线性衰减。
[*]cosine(余弦):学习率按照余弦曲线衰减,周期性地改变学习率可以帮助跳出局部最优解。
[*]cosine_with_restarts(周期重启):与cosine雷同,但在每个周期竣过后重新开始,即学习率从最大值开始再次衰减。
[*]polynomial(多项式):学习率按多项式方式衰减,通常指数为2表示二次衰减。
[*]constant(常数):学习率保持稳定。
[*]constant_with_warmup(带有预热阶段的常数):先逐渐增加学习率,然后再保持恒定,有助于模子更快地收敛。
[*]inverse_sqrt(反平方根):学习率随着训练步数的增加而减小,同时除以批次大小的平方根,这在处理惩罚图像数据时结果较好。
[*]reduce_lr_on_plateau(根据指标降低学习率):当验证集上的指标不再改进时,动态降低学习率。
[*]cosine_with_min_lr(带有最小学习率的余弦):雷同于cosine,但是设置了一个最小学习率阈值,防止学习率过低导致无法继承优化。
[*]warmup_stable_decay(稳固衰减预热):先逐渐增加学习率,再按照稳固的速率衰减到一个较低的水平,有助于模子快速收敛并获得更好的性能。
其它参数设置
https://i-blog.csdnimg.cn/direct/cce3755f5e5c40c481ac0bdfd87a9909.png
[*]日记间隔
设定每隔多少步输出一次日记。
[*]生存间隔
用于定期生存模子以防止意外丢失训练结果。
[*]预热步数
在训练过程中,学习率逐步增加到初始设定值之前的步数。
[*]NEFTune噪声参数
嵌入向量所添加的噪声大小,用于正则化和提拔模子泛化本领。
[*]优化器
https://i-blog.csdnimg.cn/direct/4a19c57a1ebc464c93d429555e83a566.png
图中列出的三种优化器都是基于Adam优化器的变体,主要用于深度学习模子的训练。
[*]adamw_torch:这是AdamW的实现,全称Adaptive Moments with Weight Decay。它结合了Adam优化器和L2正则化项(weight decay)。Adam是一种自顺应学习率的方法,能够分别估计一阶矩和二阶矩的估计值,并利用这些信息调整学习率。Weight decay则有助于防止模子过拟合,通过使权重系数衰减至较小的值。AdamW将这两个概念结合起来,使得模子在训练过程中更加稳固,通常能取得较好的结果。
[*]adafactor:这是一种轻量级的优化器,旨在提供与Adam相似的性能,但占用更少的内存。Adafactor基于Factorized Second-Moment Estimation,它将二阶矩分解成两个较小的矩阵来节省内存。相比于Adam,adafactor更适合于大规模分布式训练场景,因为它可以在有限的内存资源下运行。
[*]adamw_8bit:采用了量化技能来减少内存消耗和加快盘算。在这种方法中,某些数值(比方学习率、动量等)会被转换为8位整数表示,而不是浮点数。如许的量化操作可以明显减少内存利用,同时由于8位运算比32位浮点数运算更快,因此还能提高盘算速率。
https://i-blog.csdnimg.cn/direct/d209a45e395a49b58c8193760f908dd4.png
[*]序列打包:序列打包是将长度相近的句子组合在一起形成一个长序列,以便在同一个GPU上并行处理惩罚。这有助于提高训练服从,尤其是在处理惩罚大量短序列时。
[*]学习提示词:在某些模子中,提示词(prompting)是一种技巧,用于引导模子产生期望的输出。学习提示词是指让模子自动学习有效的提示词,以提高天生文本的质量。
[*]更改词表大小:词表大小决定了模子所能识别的词汇数量。更改词表大小可以根据任务需求调整模子的复杂度和表达本领。
[*]利用LongLongRA提出的shift short attention:这大概是一种特殊的注意力机制,用于处理惩罚黑白文本混合的情况。shift short attention大概有助于提高模子在处理惩罚长文本时的性能。
[*]利用S^2 Attention:S^2 Attention大概是一种新的注意力机制,用于改进模子的注意力分配策略,提高模子的性能和服从。
[*]利用块LLaMA Pro:块LLaMA Pro大概是一种特殊的注意力机制或优化策略,用于提高模子的训练服从或性能。具体细节未知,但通常这类技能会针对特定的模子架构举行优化。
[*]仅训练扩展后的参数:这意味着在训练过程中,只更新模子新增加的部门,而保存原始模子的参数稳定。这通常用于微调预训练模子以顺应特定任务。
[*]启用外部记录面板:启用外部记录面板大概指的是在训练过程中收集和可视化各种指标,如损失函数、准确率等。这对于监控模子的训练状态和调试非常有效。
部门参数微调设置
https://i-blog.csdnimg.cn/direct/c686843197be44e29454073510e794c2.png
[*] 可训层数(Trainable Layers): 这个滑块控制了模子中可以举行训练的层数。在微调过程中,你可以选择只对模子的部门层级举行训练,而不是全部。这大概是因为你想保存预训练模子的一些知识,或者因为你的数据集较小,全量训练大概导致过拟合。比方,在盘算机视觉任务中,假如你有一个基于卷积神经网络(CNN)的预训练模子,如VGG或ResNet,你大概会选择仅微调末了几层,而保持早期的特性提取层固定,以利用它们在通用图像理解方面的强大本领。
[*] 可训模块(Trainable Modules): 在这个文本框中,你可以指定要训练的具体模块名称。假如输入"all",则表示所有模块都将被训练。否则,你需要提供一个逗号分隔的列表来指明哪些模块需要训练。这在一些复杂的模子结构中非常有效,好比Transformer模子,其中包罗多个差别的组件,如自注意力层、多头注意力层等。通过选择特定的模块举行训练,你可以更好地控制模子的学习过程,制止过度训练某些部门并提高服从。
[*] 额外模块(非必须域)(Additional Modules (optional)): 这个字段答应你添加除隐藏层之外的其他可训练模块。这些大概是模子中的特殊组件,如嵌入层、池化层或其他特定于任务的层。假如你想要微调的模块不是默认的隐藏层,那么在这里列出它们可以帮助你精确地控制哪些部门应该被更新。
LoRA参数设置https://i-blog.csdnimg.cn/direct/8c7554618e9a4ae89e089b8ca3876589.png
LoRA是一种大模子微调方法,目前比较主流的,不了解的需要重点学习下这部门了。
[*] LoRA秩(LoRA rank): LoRA秩决定了LoRA矩阵的大小,即LoRA矩阵的行数和列数。较大的LoRA秩意味着更大的顺应空间,但也增加了盘算负担。这个值越高,LoRA矩阵的维度就越大,能够捕获到的模式也就越多,但是也会导致更高的盘算和存储成本。
[*] LoRA紧缩系数(LoRA expansion factor): LoRA紧缩系数是指LoRA矩阵相对于原权重矩阵的扩展程度。较高的紧缩系数会导致更大的LoRA矩阵,理论上能捕获更多的模式,但同样会增加盘算和存储成本。
[*] LoRA随机丢弃(LoRA dropout): 这是一个概率值,用于在训练过程中随机丢弃LoRA矩阵的一部门元素。雷同于Dropout技能,它可以用来防止过拟合,增加模子的鲁棒性。将此值设为0表示不应用随机丢弃。
[*] LoRA+学习率比例(LoRA+ learning rate multiplier): LoRA+是一种改进的LoRA方法,它在LoRA矩阵上利用单独的学习率。这个参数界说了LoRA+中B矩阵的学习率倍数,即B矩阵的学习率是基础学习率的多少倍。适当调整这个值有助于找到符合的优化速率。
[*] 对LoRA层利用稳态压缩方法(Use rsloRA): 利用rsLoRA(Stable LoRA)是一种稳固LoRA的方法,旨在办理LoRA在训练过程中大概出现的数值稳固性题目。启用该选项可以确保LoRA矩阵的正定性,从而提高训练的稳固性。
[*] 利用权重分解的LoRA(Use DoRA): DoRA(Decomposed LoRA)是一种LoRA的变体,它将LoRA矩阵分解成两个较小的矩阵相乘的情势,降低了盘算复杂度。
[*] 利用PiSSA方法(Use PiSSA): PiSSA(Piecewise Square-root Scaling for Adapters)是一种优化方法,用于改善LoRA的性能。它通过分段平方根缩放来调整LoRA矩阵,以实现更好的收敛性和泛化本领。
[*] LoRA作用模块(LoRA modules): 这里可以指定LoRA应用于哪些模块。假如输入"all",则表示LoRA将在所有模块上应用。否则,你需要提供一个逗号分隔的列表来指明哪些模块需要应用LoRA。这让你可以选择性地在模子的差别部门应用LoRA,以到达最佳结果。
[*] 附加模块(Additional modules): 这个字段答应你添加除LoRA层以外的其他可训练模块。这些大概是模子中的特殊组件,如嵌入层、池化层或其他特定于任务的层。假如你想要微调的模块不是LoRA层,那么在这里列出它们可以帮助你精确地控制哪些部门应该被更新。
RLHF参数设置
https://i-blog.csdnimg.cn/direct/68cc6afb68b6482bb8e138a72f91c7fc.png
RLHF(Reinforcement Learning from Human Feedback,人类反馈强化学习)是一种机器学习技能,它结合了监督学习和强化学习,通过人类反馈来引导模子的行为。在这个界面中,提供了几个与RLHF相干的参数设置,下面是对各个参数的功能表明:
[*] Beta参数(Beta parameter): Beta参数是在损失函数中利用的超参数,用于平衡差别类型的损失项。在RLHF训练中,通常会有多种损失项,包罗原始的任务损失和来自人类反馈的损失。这个值调节了这些损失之间的衡量关系,高值会使得人类反馈的损失更加告急。
[*] Ftx gamma参数(Ftx gamma parameter): Ftx gamma参数是SFT损失的权重,SFT代表Self-Training with eXtreme teaching signals(极端教学信号自我训练)。这是一个强化学习中的概念,用于衡量模子猜测和教师标签之间的差异。这个值影响了SFT损失在总损失中的相对告急性。
[*] 损失类型(Loss type): 损失类型决定如何盘算模子的训练误差。sigmoid交织熵损失通常用于二分类题目,softmax交织熵适用于多分类题目,huber损失适合处理惩罚离散和连续数据,l1和l2损失则是常见的回归损失函数。选择适当的损失类型有助于优化模子的性能。
[*] 奖励模子(Reward model): PPO(Proximal Policy Optimization,近端策略优化)是一种强化学习算法,用于训练智能体的策略。奖励模子路径是PPO训练中利用的奖励模子的路径,它负责评估智能体行为的优劣。这个模子通常是经过训练的,用于给出情况中的动作的奖励分数。
[*] 白化奖励(Whitened rewards): 白化奖励是指在PPO训练中将奖励分数做归一化处理惩罚。如许做的目的是使奖励分布更加匀称,有利于PPO算法的收敛。归一化的奖励可以使学习过程更加稳固,制止由于奖励标准过大或过小导致的学习困难。
GaLore参数设置
https://i-blog.csdnimg.cn/direct/ba2defd9a1e04e3fb23389198a5849b9.png
[*] 利用 Galore: 这是一个开关按钮,用于开启或关闭Galor投影。Galor投影是一种低秩投影技能,用于减少模子参数的数量,从而降低盘算复杂度和内存消耗。开启后,模子会在训练过程中利用低秩投影举行优化。
[*] Galor 秩: Galor秩决定了投影矩阵的大小,即投影矩阵的行数和列数。较高的秩意味着更大的顺应空间,但也增加了盘算负担。这个值越高,Galor矩阵的维度就越大,能够捕获到的模式也就越多,但是也会导致更高的盘算和存储成本。
[*] 更新间隔: 更新间隔指的是相邻两次投影更新之间的步数。较大的间隔意味着较少的投影更新次数,较小的间隔意味着更多的投影更新次数。这个值可以根据具体的训练情况来调整,以获得最佳的训练服从和精度。
[*] Galor 缩放系数: Galor缩放系数是指投影矩阵的缩放因子。这个值影响了投影矩阵在优化过程中的影响力。较高的缩放系数会使投影矩阵对模子的影响更大,较低的缩放系数则会让模子更多依赖于原始参数。
[*] Galor 作用模块: Galor作用模块是指Galor投影应用到的模子组件。这里可以指定投影应用于哪些模块。假如输入“all”,则表示Galor投影将在所有模块上应用。否则,你可以提供一个逗号分隔的列表来指明哪些模块需要应用Galor投影。
BAdam参数设置https://i-blog.csdnimg.cn/direct/347103ee6a624de48df8173f2b6e73e0.png
[*] 利用 BAdam: 也是开关。BAdam是一种自顺应动量优化方法,结合了Adam和Blockwise Adam的优点,旨在办理深度神经网络训练中的梯度消散和爆炸题目。
[*] BAdam 模式: BAdam模式可以选择layer-wise或ratio-wise两种方式。Layer-wise BAdam优化器按层更新参数,而ratio-wise BAdam优化器按照比例更新参数。Layer-wise方式通常适用于大型模子,因为它可以更好地控制每层的更新速率,而ratio-wise方式大概更适合小型模子或者需要快速收敛的情况。
[*] 切换策略: 切换策略界说了Layer-wise BAdam优化器的块切割策略。这里有四个切换策略:
Ascending: Ascending策略表示随着训练的举行,逐步增加块的大小。这通常用于帮助模子从局部最小值逃脱,制止过早收敛。在训练开始时,小块更轻易找到梯度,而在后期阶段,大块答应模子探索更大的搜刮空间。
Descending: Descending策略表示随着训练的举行,逐步减小块的大小。这大概有助于稳固训练并防止模子过度拟合。在训练初期,大块可以加快收敛,而在后期阶段,小块可以提高精确度。
Random: Random策略随机选择块的大小。这种方法可以在训练过程中引入一些随机性,有助于防止模子陷入局部最优解。然而,过多的随机性也大概导致训练不稳固。
Fixed: Fixed策略保持块的大小稳定。这是一种简朴的策略,易于实现且轻易理解,但它大概无法充实利用差别训练阶段的优势。
[*] 切换频率: 切换频率决定了Layer-wise BAdam优化器在多少次迭代后改变块的大小。较高的切换频率意味着更快地改变块的大小,较低的切换频率则意味着更慢地改变块的大小。这个值应该根据模子的规模和训练数据的特性来调整。
[*] Block 更新比例: Ratio-wise BAdam优化器的更新比例决定了每次更新时更新的比例。较高的更新比例意味着更多的参数会被更新,较低的更新比例则意味着更少的参数会被更新。这个值应该根据模子的规模和训练数据的特性来调整。
增补说明
https://i-blog.csdnimg.cn/direct/fc127794cf3f4bd2855ead9ffd1d357e.png
这部门差点忘了,增补说明下,这就是大部门内容都配置完后,要举行训练时候的选项。这里提一下多卡训练,假如有多张卡的话,可以配置上。
DeepSpeed Offload重点说下,这是一项功能,它可以帮助优化内存利用和提高训练性能。当启用时,它会将部门盘算从GPU转移到CPU,释放GPU内存以容纳更大的模子或更大的批次大小。固然如许做大概会轻微降低训练速率,但它可以使训练过程在内存受限的情况中成为大概。
Evaluate & Predict
https://i-blog.csdnimg.cn/direct/da37bd664c524c7a9d1f46be48255a53.png
这部门比较好理解,不多做表明,就是做验证和猜测时候利用,默认数据集在data文件夹下,用自己的数据集,记得换路径。
chat
https://i-blog.csdnimg.cn/direct/c53a393c9042467aa2f7a5e08a42a6b6.png
这部门相当于在线利用大模子举行测试,实行下模子加载是否成功以及对话结果。
每次设置完模子地址,不确定是否精确,就可以先加载下模子试试。
推理引擎里面提供了两种,huggingface和vllm,下面会具体介绍下,后面数据推理类型就是设置精度的,和前面介绍的精度理解一样。
Hugging Face 推理引擎
特点:
[*]广泛的模子支持:Hugging Face 提供了一个非常全面的模子库,支持多种架构,包罗但不限于 BERT、GPT-2/3、T5 等。
[*]易于利用:通过 Transformers 库,用户可以很轻易地加载预训练模子并举行推理,无需深入了解底层实现。
[*]灵活的API:提供了丰富的API来处理惩罚各种NLP任务,如文本分类、命名实体识别、问答等。
[*]社区活泼:拥有巨大的开发者社区,不断更新新的模子和功能,并且有大量的文档和示例代码。
适用场景:
[*]适合需要快速原型开发和实行的研究者和开发者。
[*]对于想要利用现成模子库和工具来构建应用的人非常适合。
[*]支持从轻量级到大规模的各种模子。
vLLM (Vectorized Language Model Library)
特点:
[*]高性能推理:vLLM 是专门为大语言模子的高效推理而设计的,它通过向量化操作和其他优化技能来加快推理过程。
[*]低延迟:通过批处理惩罚和缓存机制,vLLM 能够明显减少单个哀求的处理惩罚时间。
[*]GPU/CPU 利用率高:针对硬件举行了深度优化,特殊是在多GPU情况下,能够充实利用盘算资源。
[*]动态批处理惩罚:支持动态调整批处理惩罚大小以顺应差别的工作负载,从而保持较高的吞吐量。
[*]内存服从:采用了一些内存管理策略,如激活检查点(activation checkpointing),以减少内存占用。
适用场景:
[*]非常适合在生产情况中部署大规模的语言模子,尤其是在对延迟和吞吐量有严格要求的情况下。
[*]当你需要最大化硬件利用率,特殊是当运行多个模子实例或处理惩罚大量并发哀求时。
[*]对于那些已经准备好投入更多精神来优化推理性能的高级用户。
区别总结
[*]易用性 vs. 性能:Hugging Face 更注重易用性和广泛的模子支持,而 vLLM 则更专注于性能优化。
[*]灵活性 vs. 专门化:Hugging Face 提供了更多的灵活性和多功能性,适用于多种NLP任务;vLLM 则是一个更加专业化的库,专为大语言模子的高效推理而设计。
[*]开发阶段 vs. 生产情况:Hugging Face 适合快速原型开发和研究用途,而 vLLM 更适合用于生产情况中的高性能服务部署。
Export
https://i-blog.csdnimg.cn/direct/46f95914a9654e0097d857bae8b3e1c1.png
Export模块是用于导出训练好的模子以便在其他地方利用或分享:
[*] 最大分块大小(GB): 这个滑块用于设置导出文件的最大大小。这对于上传到某些平台(如Hugging Face Hub)有限制的文件大小很有效。你可以调整此值以确保导出的文件不会超过所选的最大大小。
[*] 导出量化品级: 这里可以选择是否要对模子举行量化。选择 "none" 表示不举行量化,而选择其他选项大概会导致模子尺寸减小,但在某些情况下大概会影响准确率。
[*] 导出量化数据集: 假如选择了量化级别,你可以在这里选择用于量化评估的数据集。这通常是训练或验证数据的一个子集,用于评估和微调量化后的模子性能。
[*] 导出装备类型: 这个下拉菜单让你选择模子将被导出到什么类型的装备上。CPU选项表示模子将被优化以在CPU上运行,而auto选项让体系自动决定最适合的装备类型。这取决于你的目标情况和可用硬件。
[*] 不利用safetensors格式生存模子: 这个复选框用于选择是否利用safetensors格式生存模子。safetensors是一种安全的张量格式,可以保护模子免受恶意攻击。取消勾选该选项表示将利用标准格式生存模子。
[*] 导出目次: 在这里,你可以指定一个路径来生存导出的模子文件。这是模子及其相干文件将被生存的位置。
[*] HF Hub ID: 假如你想将模子上传到Hugging Face Hub,你可以在此处输入仓库ID。这是一个可选字段,假如你不想上传模子,则可以留空。
四、总结
以上就是我对llama-factory的整理内容,盼望能对各人的学习之路锦上添花,整理不易,感觉还可以的话,记得动动你发财的小手,给予支持。
这里特殊说明下,实际利用中,一样寻常不会设置这么多内容,大部门内容默认就可以,一样寻常是训练遇到瓶颈了,才会做一些细节的调整。
假如各人在实际利用过程中遇到题目,欢迎留言或私聊咨询,一起学习进步。
假如有整理错误的地方,也可以留言,我会及时更正。
假如有想深入了解,举行学习或者需要辅导帮助,包罗知识点梳理,答疑,就业辅导,口试辅导,简历辅导等等,都可以过来扫码添加过来交换,备注:CSDN
https://i-blog.csdnimg.cn/direct/646af05c75cd43ee8781ffe693c36869.jpeg
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]