参考
微调LLM中的魔鬼细节|大型语言模型lora调教指南_哔哩哔哩_bilibili
GitHub - EvilPsyCHo/Play-with-LLMs: Train your custom LLMs like Llama, baichuan-7b, GPT
lora微调
一、数据处理
1.单轮对话场景
按照方案(3)的思路,我们可以构建数据处理函数:
2.多轮问答场景

3.一些额外添加的信息和提问部分不需要loss,可以屏蔽掉
二、模型
1.量化加载
用8bit去加载 ,线性层发生改变
用4bit去加载,线性层发生改变
2.模型准备
(1)冻结参数,因为原有的参数是不需要训练的
(2)输出层调整更高的精度,会让loss更合理
(3)使lora部分拿到梯度,需要打开enable_input_require_grads
3.lora配置
(1)找到哪些层需要使用lora 手动配置或者自动化的找到
1)已经进行了量化加载,可以自动化找到,精度为4bit的那些线性层
2)手动配置,把名字传进去。使用target_modules传给配置文件
3)总结
4.标签移动和loss计算
因为是根据上一个输入预测下一个输出,所以label和input是错了一位
三、训练
四、测试
有两种模型权重,一种是原本的模型权重,一种是lora部分的权重
数据按照之前的方式包装起来
五、完整代码
sh文件
六、(sft、lora、p-tuning、freeze四种典型微调方法)
随着人工智能技术的不断发展,大语言模型在自然语言处理领域的应用越来越广泛。然而,预训练模型在通用领域的知识和特定领域的任务之间存在一定的鸿沟,因此需要对其进行微调以适应特定任务。本文将介绍四种用于微调大语言模型的技术:SFT、LoRA、P-tuning v2 和 Freeze。
- SFT(Supervised Fine-tuning)监督微调
SFT(Supervised Fine-Tuning)监督微调是指在源数据集上预训练一个神经网络模型,即源模型。然后创建一个新的神经网络模型,即目标模型。目标模型复制了源模型上除了输出层外的所有模型设计及其参数。这些模型参数包含了源数据集上学习到的知识,且这些知识同样适用于目标数据集。源模型的输出层与源数据集的标签紧密相关,因此在目标模型中不予采用。微调时,为目标模型添加一个输出大小为目标数据集类别个数的输出层,并随机初始化该层的模型参数。在目标数据集上训练目标模型时,将从头训练到输出层,其余层的参数都基于源模型的参数微调得到。
SFT 是最常见的微调方法之一,通过使用带有标签的下游任务数据来微调预训练模型。在 SFT 中,预训练模型在训练时将下游任务的标签作为输入,从而学习特定任务的表示。这种方法简单有效,但需要大量的标注数据。
也因为需要标注数据,随着技术的发展,涌现出越来越多的大语言模型,且模型参数越来越多,比如 GPT3 已经达到 1750 亿的参数量,传统的监督微调方法已经不再能适用现阶段的大语言模型。为了解决微调参数量太多的问题,同时也要保证微调效果,急需研发出参数高效的微调方法(Parameter Efficient Fine Tuning, PEFT)
2.LoRA(Learning from Latent Representations)微调方法
LoRA 是一种半监督学习的方法,通过从未标记的数据中学习潜在表示来扩展预训练模型。LoRA 使用潜在表示来指导预训练模型学习特定任务的表示,从而减少了对大量标注数据的需求。这种方法在某些场景下可以有效地扩展预训练模型的泛化能力。
- 预训练模型参数可以被共享,用于为不同的任务构建许多小的 LoRA 模块。冻结共享模型,并通过替换矩阵 A 和 B 可以有效地切换任务,从而显著降低存储需求和多个任务切换的成本。
- 当使用自适应优化器时,由于不需要计算梯度以及保存太多模型参数,LoRA 使得微调效果更好,并将微调的硬件门槛降低了 3 倍。
- 低秩分解采用线性设计的方式使得在部署时能够将可训练的参数矩阵与冻结的参数矩阵合并,与完全微调的方法相比,不引入推理延迟。
- LoRA 与其它多种微调方法不冲突,可以与其它微调方法相结合,比如下节实训将要介绍的前缀调优方法等。
3.P-tuning v2 微调方法
P-tuning v2 是一种元学习的方法,通过在多个任务上微调预训练模型来学习任务的表示。P-tuning v2 使用任务嵌入来表示任务,并使用元学习算法来更新预训练模型的权重以适应新任务。这种方法可以在不同的任务之间共享知识,从而提高模型的泛化能力。
4.Freeze 监督微调方法
Freeze 是一种轻量级的微调方法,通过在微调过程中冻结预训练模型的某些层来减少过拟合的风险。Freeze 通过保留预训练模型的高级表示,同时学习低级表示来适应特定任务。这种方法可以在不牺牲模型性能的情况下减少过拟合的风险,从而提高模型的泛化能力。
在实际应用中,根据具体任务和数据情况选择合适的微调方法可以提高模型的性能。例如,对于拥有大量标注数据的任务,SFT 可能是更好的选择;对于半监督学习场景,LoRA 可能更适合;对于元学习场景,P-tuning v2 可能更有优势;而对于防止过拟合和轻量级微调场景,Freeze 可能更合适。
人工智能大语言模型微调技术:SFT 监督微调、LoRA 微调方法、P-tuning v2 微调方法、Freeze 监督微调方法-腾讯云开发者社区-腾讯云
5.
Linear probing和end2end端到端微调都不直接属于sft、lora、p-tuning、freeze这四种典型的微调方法。
- Linear probing是一种在适配下游任务时,冻住预训练模型,仅对模型最后一层的线性层进行参数更新的方法。它并不直接对应于sft、lora、p-tuning、freeze中的任何一种。
- End2end端到端微调则是一种在整个处理流程中对模型进行统一的优化的方法。它强调的是对整个处理流程的优化,而不是仅对模型的某一部分进行微调。因此,它也不直接对应于这四种典型的微调方法
"end-to-end"(端到端)微调是一种微调策略,它涉及对整个模型的所有层进行微调,而不是只微调部分层次。与 SFT、LoRA、P-tuning 和 Freeze 不同,端到端微调是一种更通用的微调方法,它并不局限于特定的调整策略或技术