2024年6月1日操作
XTuner 微调 LLM:1.8B、多模态、Agent (更新撰写中)
XTuner 一个大语言模型&多模态模型微调工具箱。由 MMRazor 和 MMDeploy 联合开发。
- 🤓 傻瓜化: 以 配置文件 的形式封装了大部分微调场景,0基础的非专业人员也能一键开始微调。
- 🍃 轻量级: 对于 7B 参数量的LLM,微调所需的最小显存仅为 8GB : 消费级显卡✅,colab✅
过程中没有出现任何的报错,那也就意味着成功安装好支持 XTuner 所运行的环境啦。其实对于很多的初学者而言,安装好环境意味着成功了一大半!因此接下来就可以进入第二步,准备好数据集、模型和配置文件!
微调也经常被戏称为是炼丹,就是说你炼丹的时候你得思考好用什么样的材料、用多大的火候、烤多久的时间以及用什么丹炉去烧。这里的丹炉其实我们可以想象为 XTuner ,只要丹炉的质量过得去,炼丹的时候不会炸,一般都是没问题的。但是假如炼丹的材料(就是数据集)本来就是垃圾,那无论怎么炼(微调参数的调整),炼多久(训练的轮数),炼出来的东西还只能且只会是垃圾。只有说用了比较好的材料,那么我们就可以考虑说要炼多久以及用什么办法去炼的问题。因此总的来说,学会如何构建一份高质量的数据集是至关重要的。
2.3 配置文件修改
在选择了一个最匹配的配置文件并准备好其他内容后,下面我们要做的事情就是根据我们自己的内容对该配置文件进行调整,使其能够满足我们实际训练的要求。
完成了这部分的修改后,我们就可以正式的开始我们下一阶段的旅程: XTuner 启动~!
提升GPU 到30%再做训练
2.4.2 使用 deepspeed 来加速训练
2.4.2 使用 deepspeed 来加速训练
Part 2: 多模态部分
在本节中,我们将学习使用 XTuner 微调多模态LLM的内容,这是学完本节内容后的多模态LLM性能效果展示:
本部分需要的GPU资源为24GB 30% 的 A100
1.3.2. 概述
1.3.4. Finetune阶段
1.3.4.1.2. 制作
1.3.4.2. 准备配置文件
1.3.4.2.1. 创建配置文件
1.3.4.3. 开始Finetune
cd /root/tutorial/xtuner/llava/
xtuner train /root/tutorial/xtuner/llava/llava_internlm2_chat_1_8b_qlora_clip_vit_large_p14_336_lora_e1_gpu8_finetune_copy.py --deepspeed deepspeed_zero2
1.3.5. 对比Finetune前后的性能差异
1.3.5.1. Finetune前
即:加载 1.8B 和 Pretrain阶段产物(iter_2181) 到显存
conda activate xtuner0.1.17
过程中没有出现任何的报错,那也就意味着成功安装好支持 XTuner 所运行的环境啦。其实对于很多的初学者而言,安装好环境意味着成功了一大半!因此接下来就可以进入第二步,准备好数据集、模型和配置文件!
微调也经常被戏称为是炼丹,就是说你炼丹的时候你得思考好用什么样的材料、用多大的火候、烤多久的时间以及用什么丹炉去烧。这里的丹炉其实我们可以想象为 XTuner ,只要丹炉的质量过得去,炼丹的时候不会炸,一般都是没问题的。但是假如炼丹的材料(就是数据集)本来就是垃圾,那无论怎么炼(微调参数的调整),炼多久(训练的轮数),炼出来的东西还只能且只会是垃圾。只有说用了比较好的材料,那么我们就可以考虑说要炼多久以及用什么办法去炼的问题。因此总的来说,学会如何构建一份高质量的数据集是至关重要的。
2.3 配置文件修改
在选择了一个最匹配的配置文件并准备好其他内容后,下面我们要做的事情就是根据我们自己的内容对该配置文件进行调整,使其能够满足我们实际训练的要求。
完成了这部分的修改后,我们就可以正式的开始我们下一阶段的旅程: XTuner 启动~!
提升GPU 到30%再做训练
2.4.2 使用 deepspeed 来加速训练
2.4.2 使用 deepspeed 来加速训练
conda activate xtuner0.1.17
模型续训指南
假如我们的模型训练过程中突然被中断了,我们也可以通过在原有指令的基础上加上 --resume {checkpoint_path}
来实现模型的继续训练。需要注意的是,这个继续训练得到的权重文件和中断前的完全一致,并不会有任何区别。下面我将用训练了500轮的例子来进行演示
2.5 模型转换、整合、测试及部署
2.5.2 模型整合
我们通过视频课程的学习可以了解到,对于 LoRA 或者 QLoRA 微调出来的模型其实并不是一个完整的模型,而是一个额外的层(adapter)。那么训练完的这个层最终还是要与原模型进行组合才能被正常的使用。
2.5.3 对话测试
# 与模型进行对话
xtuner chat /root/ft/final_model --prompt-template internlm2_chat
xtuner chat /root/ft/model --prompt-template internlm2_chat
除了这些参数以外其实还有一个非常重要的参数就是 --adapter
,这个参数主要的作用就是可以在转化后的 adapter 层与原模型整合之前来对该层进行测试。使用这个额外的参数对话的模型和整合后的模型几乎没有什么太多的区别,因此我们可以通过测试不同的权重文件生成的 adapter 来找到最优的 adapter 进行最终的模型整合工作。
# 使用 --adapter 参数与完整的模型进行对话
xtuner chat /root/ft/model --adapter /root/ft/huggingface --prompt-template internlm2_chat
2.5.4 Web demo 部署
pip install streamlit==1.24.0
\
conda activate xtuner0.1.17
# 修改模型地址(第183行)
- model = (AutoModelForCausalLM.from_pretrained('/root/ft/final_model',
+ model = (AutoModelForCausalLM.from_pretrained('/root/ft/model',
# 修改分词器地址(第186行)
- tokenizer = AutoTokenizer.from_pretrained('/root/ft/final_model',
+ tokenizer = AutoTokenizer.from_pretrained('/root/ft/model',
streamlit run /root/ft/web_demo/InternLM/chat/web_demo.py --server.address 127.0.0.1 --server.port 6006
Part 2: 多模态部分
在本节中,我们将学习使用 XTuner 微调多模态LLM的内容,这是学完本节内容后的多模态LLM性能效果展示:
在本节中,我们将学习使用 XTuner 微调多模态LLM的内容,这是学完本节内容后的多模态LLM性能效果展示:
本部分需要的GPU资源为24GB 30% 的 A100
1.3.2. 概述
1.3.4. Finetune阶段
1.3.4.1.2. 制作
1.3.4.2. 准备配置文件
1.3.4.2.1. 创建配置文件
1.3.4.3. 开始Finetune
cd /root/tutorial/xtuner/llava/
xtuner train /root/tutorial/xtuner/llava/llava_internlm2_chat_1_8b_qlora_clip_vit_large_p14_336_lora_e1_gpu8_finetune_copy.py --deepspeed deepspeed_zero2
1.3.5. 对比Finetune前后的性能差异
1.3.5.1. Finetune前
即:加载 1.8B 和 Pretrain阶段产物(iter_2181) 到显存
conda activate xtuner0.1.17