一、Finetune 简介
1.1 Finetune技术路线
从参数规模的角度,大模型(LLM)的微调分成两条技术路线:
一条是对全量的参数,进行全量的训练,这条路径叫全量微调FFT(Full Fine Tuning)。
一条是只对部分的参数进行训练,这条路径叫PEFT(Parameter-Efficient Fine Tuning)。
FFT的原理,就是用特定的数据,对大模型进行训练,将W变成W,W
相比W ,最大的优点就是上述特定数据领域的表现会好很多。
但FFT也会带来一些问题,影响比较大的问题,主要有以下两个:
- 一个是训练的成本会比较高,因为微调的参数量跟预训练的是一样的多的;
- 一个是叫灾难性遗忘(Catastrophic Forgetting),用特定训练数据去微调可能会把这个领域的表现变好,但也可能会把原来表现好的别的领域的能力变差。
PEFT主要想解决的问题,就是FFT存在的上述两个问题,PEFT也是目前比较主流的微调方案。
从训练数据的来源、以及训练的方法的角度,大模型的微调有以下几条技术路线:
- 监督式微调SFT(Supervised Fine Tuning),这个方案主要是用人工标注的数据,用传统机器学习中监督学习的方法,对大模型进行微调;
- 基于人类反馈的强化学习微调RLHF(Reinforcement Learning with Human Feedback),这个方案的主要特点是把人类的反馈,通过强化学习的方式,引入到对大模型的微调中去,让大模型生成的结果,更加符合人类的一些期望;
- 基于AI反馈的强化学习微调RLAIF(Reinforcement Learning with AI Feedback),这个原理大致跟RLHF类似,但是反馈的来源是AI。这里是想解决反馈系统的效率问题,因为收集人类反馈,相对来说成本会比较高、效率比较低。
不同的分类角度,只是侧重点不一样,对同一个大模型的微调,也不局限于某一个方案,可以多个方案一起。
微调的最终目的,是能够在可控成本的前提下,尽可能地提升大模型在特定领域的能力。
1.2 增量预训练和指令跟随
LLM 的下游应用中,增量预训练和指令跟随是经常会用到两种的微调模式
增量预训练微调:
使用场景:让基座模型学习到一些新知识,如某个垂类领域的常识
训练数据:文章、书籍、代码等
指令跟随微调:
使用场景:让模型学会对话模板,根据人类指令进行对话
训练数据:高质量的对话、问答数据
指令跟随微调是为了得到能够实际对话的 LLM。
在实际对话时,通常会有三种角色
System: 给定一些上下文信息,比如“你是一个安全的 AI 助手”
User: 实际用户,会提出一些问题,比如“世界第一高峰是?”
Assistant : 根据 User 的输入,结合 System 的上下文信息,做出回答,比如“珠穆朗玛峰”
二、LoRA和QLoRA
LoRA和QLoRA是最常用的两种微调方法。
1.LoRA
LoRA(Low-Rank Adaptation of Large Language Models),直译为大语言模型的低阶自适应。LoRA 的基本原理是冻结预训练好的模型权重参数,在冻结原模型参数的情况下,通过往模型中加入额外的网络层,并只训练这些新增的网络层参数。由于这些新增参数数量较少,这样不仅 finetune 的成本显著下降,还能获得和全模型参数参与微调类似的效果。
LLM 的参数量主要集中在模型中的 Linear,训练这些参数会耗费大量的显存,LoRA 通过在原本的Linear 旁,新增一个支路,包含两个连续的小 Linear,新增的这个支路通常叫做 Adapter。Adapter 参数量远小于原本的 Linear,能大幅降低训练的显存消耗。
2.QLoRA
QLoRA就是量化版的LoRA,它是在LoRA的基础上,进行了进一步的量化,将原本用16bit表示的参数,降为用4bit来表示,可以在保证模型效果的同时,极大地降低成本。量化(Quantization),是一种在保证模型效果基本不降低的前提下,通过降低参数的精度,来减少模型对于计算资源的需求的方法。量化的核心目标是降成本,降训练成本,特别是降后期的推理成本。
- Full Finetuning: Base Model 参与训练并更新参数,需要保存 Base Model 中参数的优化器状态.
- LoRA: Base Model 只参与 Forward,只有 Adapter 部分 Backward 更新参数,只需保存
Adapter 中参数的优化器状态。 - QLoRA:Base Model 量化为 4-bit,优化器状态在 CPU 与 GPU 间 Offload,Base Model 只参与
Forward,只有 Adapter 部分 Backward 更新参数,只需保存 Adapter 中参数的优化器状态。
三、 XTuner
XTuner 是由上海人工智能实验室开发的低成本大模型训练、微调工具箱,通过 XTuner, 最低只需 8GB 显存即可微调 7B 模型,仅需 24GB 显存,就可以微调 InternLM-20B 系列模型。
目前,XTuner 已支持 InternLM-20B 模型的 LoRA、QLoRA、全参数微调,集成 DeepSpeed ZeRO 训练优化技巧,并支持诸如 Alpaca、OpenAssistant、MSAgent 等热门开源数据集,用户可以“开箱即用”!
XTuner GitHub 链接:
https://link.zhihu.com/?target=https%3A//github.com/InternLM/xtuner
四、实战
实战环节:
https://github.com/InternLM/tutorial/tree/main/xtuner
微调自己的私人助手:
https://github.com/InternLM/tutorial/blob/main/xtuner/self.md
视频教程:
https://www.bilibili.com/video/BV13t4y1o75X/
参考:
https://blog.youkuaiyun.com/qq_42672770/article/details/134656083
https://zhuanlan.zhihu.com/p/663510798