本节课的内容:单卡微调
大语言模型是在海量文本上以无监督或半监督的方式进行训练的,这些海量的文本赋予了大模型各方面的知识,但是当我们专注于某个领域,实际应用于某个领域或应用时,大语言模型的表现的表现就没有那么完美了。此时就引入了微调。
而由于训练成本太过昂贵,
增量训练
和指令跟随
是两种常用的微调模式。
指令跟随示意图:
由于不同的微调多为不同的组织发行,对话模板一般不太相同。
根据对话模板完成对话构建后,我们需要将构建完成的数据输入模型,来进行损失,由于我们真正希望模型回答的部分是对话的答案部分,所欲计算损失如图也只计算答案的部分。
增量训练的数据不需要构建对话,只需要陈述事实。
所以将对话模板的system
和user
的对话内容留空,只计算assistant的损失
全参数微调需要太多的显存开销
LORA: LOW-RANK ADAPTATION OF LARGE LAN-GUAGE MODELS
LLM的主要参数集中在模型中的Linear,训练这些会耗费大量的显存
LoRA通过在原本的Linear旁,新增一个支路,包含两个连续的小Linear,新增的支路通常会叫做Adapter。
而Adapter的参数量要远小于原本的Linear,所以可以提大幅降低显存消耗。
Xtuner默认会开启
Flash Attention
,DepSpeed ZeRO
则需要在启动时增加启动参数