? ? ? ? 大语言模型是在海量的文本内容上以无监督或半监督的进行训练的,这些海量的文本内容赋予了大语言模型各行各业的知识。但是如果想将大语言模型用到实际的生产或者科研中,往往会发现模型的回答不尽如人意。这种时候我们就需要微调(finetune),以使其在具体的场景或者领域中输出更好的回答。
? ? ? ? 常见的两种微调策略分别是增量预训练和指令跟随。??其中增量预训练是指给模型投喂一些新知识,这些新知识是目标领域有关的文本内容,让基底模型学习到一些新知识。而指令跟随是指让模型学会对话模板,根据人类指令进行对话。下图解释了增量微调和指令微调的区别:
? ? ? ? 开始之前,首先要对训练数据进行角色指定,通常会有三种角色:
? ? ? ? 不同的开源模型使用的对话模板不尽相同,System、User、Assistant 会有不同模板。下图对比了LLama2 和 InternLM 使用的区别:
? ? ? ? 接下来要将构建好的数据输入模型,计算损失(答案部分)。
? ? ? ? 增量训练的数据不需要问题,只需要回答(没有问答形式存在)。? 依据之前的模板,只需要把System 和 User这两个角色留空,?数据放到Assistant角色中即可。
? ? ?
? ? ? ? LoRA通过在原本的Linear 层 新增一个分支,包含两个小Linear。新增的支路通常叫做 Adapter,这个参数量远小于原本的Linear,能大幅降低训练的显存消耗。
三种微调方式对比:
? ? ? ? XTuner 支持了Flash Attention 和 DeepSpeed 功能。