本文主要分享如何使用 LLaMAFactory 实现大模型微调,基于 Qwen1.5-1.8B-Chat 模型进行 LoRA 微调,修改模型自我认知。
本文的一个目的:基于 Qwen1.5-1.8B-Chat
模型进行微调,修改模型自我认证。
修改前对于 Qwen1.5-1.8B-Chat
模型,用户问你是谁?
时模型一般会回答我是阿里云自主研发的超大规模语言模型,我叫通义千问。
我们希望在微调之后,对于同样的问题,模型能回答我是 Archer,由 意琦行 研发
。
1. 训练相关概念
ChatGPT 是如何炼成的?
ChatGPT 是如何炼成的,或者说如何训练出一个大模型?
训练一个大模型一般可以分为三步:
-
1)预训练(Pre Training,PT):提供海量数据,通过无监督预训练,花费大量算力得到一个基座模型
-
比如 Llama 3 在 24K GPU 集群上训练,使用了 15T 的数据
-
此时模型有预测下一个 token 的能力,但是离对话 / 问答 模型还差一点,可能不会回复你的问题,反而给你生成一个类似的问题
-
2)指令微调(Supervised Fine-Tuning, SFT):在基座模型上微调,让模型能够适用特定任务,最终得到一个 SFT 模型
-
比如为了让模型成为问答助手,需要让模型学习更多的问答对话,从而学习到我们输入问题的时候,模型应该输出答案,而不是输出一个类似的问题。
-
这些问答对话由人类准备的,包括问题和正确的回答。
-
3)强化学习(Reinforcement Learning from Human Feedback, RLHF):通过人类反馈进一步优化模型的生成质量,使其生成的回答更符合用户的期望和人类的价值观。
-
Helpful:判断模型遵循用户指令以及推断指令的能力。
-
Honest:判断模型产生幻觉( 编造事实)的倾向。
-
Harmless:判断模型的输出是否适当、是否诋毁或包含贬义内容。
-
一般根据 3H 原则进行打分:
-
为了简化这一过程,一般是先训练一个用于打分的模型,即:奖励模型(Reward Model,RW),让奖励模型来代替人实现强化学习
预训练由于对算力和数据需求都比较大,因此要求比较高,一般用户不会涉及到预训练。
更多的是基于开源的基础模型(LLama、Baichuan、Qwen、ChatGLM…)等做微调、强化学习以满足自身需求。
微调
什么是大模型微调?
大模型微调,也称为 Fine-tuning,是指在已经预训练好的大型语言模型基础上(一般称为“基座模型”),使用特定的数据集进行进一步的训练,让模型适应特定任务或领域。
微调方法
上一篇中介绍了比较主流的训练方法,这里简单提一下:
微调根据更新参数量不同可以分为以下两种:
-
全量参数更新 Full Fine-tuning(FFT):即对预训练模型的所有参数进行更新,训练速度较慢,消耗机器资源较多。
-
参数高效微调 Parameter-Efficient Fine-Tuning(PEFT):只对部分参数做调整,训练速度快,消耗机器资源少。
理论上,预训练和微调都可以做全量参数更新和部分参数更新,但是一般实际训练时都是 预训练 + 全量,微调 + 部分参数更新 这样组合的。
其中 PEFT 是一系列方法的统称,Scaling Down to Scale Up: A Guide to Parameter-Efficient Fine-Tuning[1] 论文里系统地概述和比较了参数高效微调方法,涵盖了 2019 年 2 月至 2023 年 2 月之间发表的 40 多篇论文。
文中作者将高效微调方法分为三类:
-
添加额外参数 A(Addition-based)
-
类似适配器的方法(Adapter-like methods)
-
软提示(Soft prompts)
-
选取部分参数更新 S(Selection-based)
-
引入重参数化 R(Reparametrization-based)
选择合适的微调方法和框架可以显著提高效率,减少资源消耗,并帮助研究者和开发者更好地适应和优化特定任务。
现在比较主流的几种 PEFT:Prompt Tuning、Prefix Tuning、LoRA、QLoRA。
微调框架
比较主流的几个微调、训练工具:
-
huggingface/transformers[2]:最基础的一个库,提供了丰富的预训练模型和微调工具,支持大多数主流的 NLP 任务(如文本分类、序列标注、生成任务等)。适合进行快速实验和生产部署,有着广泛的社区支持。
-
huggingface/peft[3]:Parameter-Efficient Fine-Tuning,huggingface 开源的微调基础工具
-
modelscope/ms-swift[4]:modelscope 开源的轻量级微调框架
-
以中文大模型为主,支持各类微调方法
-
可以通过执行脚本进行微调,也可以在代码环境中一键微调
-
自带微调数据集和验证数据集,可以一键微调 + 模型验证
-
hiyouga/LLaMA-Factory[5]:全栈微调工具
-
运行脚本微调
-
基于 Web 端微调
-
支持海量模型 + 各种主流微调方法
-
自带基础训练数据集
-
除微调外,支持增量预训练和全量微调
-
NVIDIA/Megatron-LM[6]:NVIDIA 开发的大模型训练框架,支持大规模的预训练和微调。适用于需要极高性能和规模的大模型训练和微调。
快速实验选择 Transformers 即可,超大规模的选择 NVIDIA/Megatron-LM,普通规模就选择使用较为简单的 hiyouga/LLaMA-Factory。
本文则使用 LLaMAFactory 演示如何进行 LoRA 微调。
标签:15,23,--,模型,微调,json,root,LLaMAFactory From: https://blog.csdn.net/2401_85373691/article/details/144727089