记录| Llama-Factory参数总结

前言

最近正在研究大模型微调,经常记不住Llama-Factory的各种参数和各种概念,这里记录下来,方便自己查看。

1 微调方法

1.1 LoRA

LoRA是一种通过低秩近似方法来减少模型参数数量和计算量的技术。它的主要目标是通过将原始的高维参数矩阵分解为两个低秩矩阵的乘积,从而实现模型的参数压缩和计算加速。

优点

参数压缩: 通过低秩分解,可以将模型的参数数量显著减少,从而减小模型的存储需求。
计算加速: 低秩分解后的计算复杂度较低,可以加速模型的推理和训练过程。
保持模型性能: 在大多数情况下,LoRA能够在减少参数数量的同时,保持模型的性能不显著下降。

缺点

适应性有限: 对于一些非常复杂或特定的任务,它可能无法完全捕捉任务中的细节。
灵活性有限: LoRA 将模型参数进行低秩分解,可能限制了模型对复杂任务的灵活调整能力。
难以处理极大模型: 对于极其庞大的模型,LoRA 可能仍然无法有效地缩减到一个适用的范围,特别是在存储和计算上。

1.2 Full

全参数微调是指在微调过程中,预训练模型的所有参数都参与训练。这意味着模型的每一层、每一个参数都会根据新的任务数据进行更新和调整。

优点

灵活性高: 可以充分利用预训练模型的全部能力,适应新任务的各种特性。
效果好: 在大多数情况下,能够获得较好的微调效果,因为所有参数都参与了训练和调整。

缺点

计算资源消耗大: 需要较多的计算资源和时间,尤其是在处理大型模型时。
过拟合风险: 在数据量较小的情况下,容易导致过拟合,因为所有参数都可能被过度调整。

1.3 Freeze

优点

计算资源需求低: 由于只更新部分参数,计算资源和时间需求较低。
减少过拟合风险: 冻结大部分参数可以减少过拟合的风险,特别是在数据量较小的情况下。
快速收敛: 由于参数更新较少,模型训练通常收敛更快。

缺点

灵活性较低: 由于大部分参数被冻结,模型的适应能力有限,可能无法充分利用预训练模型的全部能力。
性能可能受限: 在一些复杂任务中,性能可能不如全参数微调,因为模型无法进行全面的调整。

总的来说,LoRA 是一个高效且较为节省资源的方法,尤其适用于在有限的显存和数据集情况下微调模型,Freeze 更适用于在数据集较小且对新任务要求不高的场景,显存消耗较低,但模型灵活性较差,Full 方法性能最强,适合数据集较大且需要模型充分适应新任务的场景,但它显存消耗较高,可能不适用于资源有限的情况,如下图所示:
在这里插入图片描述

2 微调超参数

2.1 序列长度

在模型微调过程中,序列长度(–cutoff_len)指的是模型在处理输入文本时所考虑的最大令牌(token)数。具体来说,当输入文本被Token化后,如果文本长度超过设定的–cutoff_len,模型将仅截取前–cutoff_len个Token进行训练。

优点

降低显存需求: 适当减少序列长度,可以避免OOM问题,使训练过程更加顺利。
提升计算效率: 减少每步的计算量,加快训练速度。

缺点

信息丢失: 如果重要信息集中在序列的后部,截断可能导致模型无法学习到这些关键内容,影响模型性能。
上下文理解不足: 对于需要长上下文理解的任务,如长文生成或文档摘要,截断可能会削弱模型的表现。

2.2 梯度累计

梯度累计(Gradient Accumulation)是一种训练技巧,旨在模拟更大的批次大小(batch size),从而提升模型的训练稳定性和效果,同时不额外增加显存的消耗。其核心思想是在多次小批次(mini-batch)的前向和反向传播过程中,累计梯度,待达到设定的梯度累积步数后,再一次性更新模型参数。

优点

节省显存: 允许使用较小的物理批次,减少每步的显存占用。
提升泛化能力: 较大的有效批次大小有助于模型的泛化能力提升。
稳定训练: 更大的批次规模使梯度估计更准确,训练过程更稳定。

缺点

训练时间延长: 累计梯度过程增加了每步的训练时间。
复杂性增加: 需要管理梯度的累积和参数的更新,使训练过程更为复杂。

3 优化步数训练

我一直有一个疑问,为什么大模型微调时,不像传统的视觉算法训练,多少个epoch就显示多少个epoch显示,跑完就完成了,如下图所示:
在这里插入图片描述
明明epoch=10,但是却显示优化步数410,这是怎么计算的呢?
后来研究发现,优化步数是根据epoch个数、总样本数(数据集条数)、梯度累积步数和批处理大小决定的,就上图而言,计算步骤如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

这只是目前阶段,有疑问的超参数和微调问题,后续会继续提出问题、解决问题、总结问题,持续更新。

参考文章

微调大模型的优化指南

### 如何设置和调整 LLAMA-Factory参数 #### 参数配置文件位置 LLaMA-Factory项目中的参数通常位于配置文件中,这些配置文件一般采用 YAML 或 JSON 格式。对于大多数情况而言,在`configs/`目录下可以找到相应的配置文件[^1]。 #### 常见参数解释 一些常用的可调参选项及其意义如下: - `model`: 定义模型架构名称以及加载预训练权重路径。 - `data_path`: 数据集所在的位置,确保此路径指向有效的数据源。 - `batch_size`: 训练过程中每批次处理的数据量大小;较小批量有助于更稳定的梯度下降过程,而较大则可能加速收敛速度。 - `learning_rate`: 学习率决定了优化算法每次迭代时更新权值的程度。过高可能导致发散不收敛,过低会延长训练时间。 - `max_seq_len`: 输入序列的最大长度限制,超过部分会被截断。 - `num_epochs`: 整个数据集将被遍历多少次用于训练。 - `save_steps`: 表明每隔多少步保存一次检查点(checkpoint),以便于后续恢复训练或评估性能。 - `log_interval`: 日志记录频率,指定了间隔多远打印一次损失函数和其他指标信息。 ```yaml # 配置示例片段 model: name: "llama" pretrained_weights: "./pretrained_models/model.bin" training: batch_size: 8 learning_rate: 0.0001 max_seq_len: 512 num_epochs: 3 save_steps: 1000 log_interval: 100 ``` 为了修改上述任一参数,只需编辑对应的键值对即可满足特定需求下的微调目的。完成更改之后记得重启服务使新设定生效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值