Finetune简介
微调模式:
- 增量预训练微调
- 使用场景:让基座模型学习到一些新知识,如某个垂直领域的常识
- 训练数据:文章、书籍、代码等
- 指令跟随微调
- 使用场景:让模型学会对话模板,根据人类指令进行对话
- 训练数据:高质量的对话、问答数据

增量预训练微调
增量预训练微调不需要问题,只需要回答,是一个一个的陈述句的数据集

指令跟随微调
不进行指令微调时,只是单纯的拟合训练数据集中分布,并不知道是问模型一个问题。为了让模型更加明白我们的意图就要在预训练好的模型上进行指令跟随微调

指令跟随是一问一答的数据


微调原理
微调策略采用LoRA或QLoRA
- LoRA是在原本的Linear旁,新增一个支路,包含两个连续的小Linear, 新增的这个支路叫Adapter
- Adapter参数量远小于原本的Linear,大幅降低训练的显存消耗

对大模型进行全面改动显存消耗非常大,因此,有一种叫LoRA的方法,只对模型的某些参数进行改动,而不是对整个大模型的参数进行修改,而QLoRA是LoRA的一种改进,可以改动更小的模型参数,就能达到想要的结果

XTuner微调框架
在书生·浦语大模型全链路开源体系有详细的介绍,需要的可以查看
XTuner数据引擎

XTuner微调的优化策略
- Flash Attention
- 将Attention计算并行,避免了计算过程中Attention Score N×N的显存占用(训练过程中N都比较大)
- DeepSpeed ZeRO
- ZeRO优化,通过将训练过程中的参数、梯度和优化器状态切片保存,能够在多个GPU训练时显著节省显存
- 除了训练时切片,DeepSpeed训练时使用FP16的权重,相较于Pytorch的AMP训练,在单个GPU上也能大幅节省显存
动手实战
手把手的实现微调训练一个自己模型见XTuner 大模型单卡低成本微调实战