一、Finetune简介
1. 微调策略分为增量预训练和指令跟随两种。
2. 增量预训练是给模型投喂新的知识,特别是目标领域的文本内容。
3. 通过学习新知识,模型在该领域的表现能够得到提升。
4. 指令跟随是一种更通俗的说法,指的是根据给定的指令来微调模型。
5. 这两种微调策略可以结合使用,以达到更好的效果。
1. 预训练模型是一种海量预训练数据训练出来的模型,也称为base模型或pretrained模型。
2. 预训练模型在没有进行指令微调之前,无法理解输入的问题,只是拟合训练数据集中的分布。
3. 通过指令微调,可以让预训练模型理解问题并做出回答。
4. 指令微调是通过对训练数据进行角色指定来实现的。
5. 在指令跟随微调中,需要将问题和答案构成的数据投给模型,并指定问题的角色为问者,答案的角色为答者。
1. 在角色指定时,需要将问题部分指定给user角色。
2. system部分需要按照自己微调的目标领域来书写。
3. 同一次微调中,system部分通常是固定的。
4. 完成对话模板的构建后,可以将数据喂给模型进行微调训练。
5. 不同的开源模型所使用的对话模板不尽相同。
指令微调的原理是通过对话模板构建角色。
1.进行指令微调时,每条数据都是由一问一答的形式构成的。
2. 增量训练的数据不需要问题,只需要回答,都是一个一个的陈述。
3. 在增量预训练中,只需要将system和user这两个角色的内容留空,将增量训练的数据放到assistant的角色中,计算损失时仍然计算system部分的损失。
1. 训练数据的处理包括预处理和剪枝。
2. Xtuner中使用的微调原理是QLoRA和LoRA。
3. LoRA模型是在原模型的linear旁新增一个旁路分支,即adapter,adapter的参数量远小于原模型的linear,可以降低训练显存的消耗。
4. QLoRA是LoRA的改进,可以在不改动整个模型的情况下对部分零件进行改动,进一步减小显存占用。
5. 全参数微调需要加载整个模型和所有参数优化器到显存中,而lora微调只需要加载部分参数优化器,QLoRA微调则使用4比特量化加载,并可以在GPU和CPU之间进行调度。
二、 XTuner
1. XTuner是一个打包好的大模型微调工具箱。
2. XTuner支持从huggingface和modelscope加载模型和数据集。
3. XTuner支持多款开源大模型,如书生、Llama、阿里的通义千问、百川大模型和清华的chatGLM等。
1. 首先需要安装XTuner,并指定版本以避免版本问题。
2. 创建大环境,选择配置模板,并进行一键训练。
3. 训练完成后,得到adapter文件,需要在加载底座模型的基础上加载adapter进行对话和测试。
4. 使用XTuner自带的chat命令进行对话模式和比特量化模式的设置。
5. 启动模式的设置使用XTuner自带的chat命令。
1.默认开启了flash attention的加速方式,可以加速训练。
2. 集成了deepspeed zero的优化方法,可以在训练过程中更快。
3. 对于qlora算法,需要使用deepspeed zero2。
4. 展示了不同算法上的计算卡的显存占用情况。