【ChatGLM2-6B微调】6GB显存实现ChatGLM2-6B大模型微调!

本文做清华官方代码包中自带的ptuning微调方式实践。(如下图所见,使用的是int4量化模型)这个可以参照我发布的博文《清华ChatGLM2-6B一键式部署,无需自行安装依赖环境!!》进行快速部署
【ChatGLM2-6B微调】6GB显存实现ChatGLM2-6B大模型微调!_第1张图片
采用了5条训练数据,训练时长在四个半小时左右,主要参考以下教程进行复现
参考链接:《ChatGLM-6B 部署与 P-Tuning 微调实战》https://mp.weixin.qq.com/s/xSF23H_LHgioU8wfEcjs4A
参考链接:《ChatGLM2微调的学习笔记-2【本地部署+微调】》https://zhuanlan.zhihu.com/p/648923534
文字部分不做过多赘述,下面按步开始介绍:

0、准备数据:train.json、dev.json都用这两条
【ChatGLM2-6B微调】6GB显存实现ChatGLM2-6B大模型微调!_第2张图片
1、配置train.sh

  • 修改 train.sh 和 evaluate.sh 中的train_file、validation_file和test_file为你自己的 JSON 格式数据集路径。
  • 将 prompt_column 和 response_column 改为 JSON 文件中输入文本和输出文本对应的 KEY。
  • 可能还需要增大 max_source_length 和 max_target_length 来匹配你自己的数据集中的最大输入输出长度。
  • 将模型路径 THUDM/chatglm-6b 改为你本地的模型路径。
  • train.sh 中的 PRE_SEQ_LEN 和 LR 分别是 soft prompt 长度和训练的学习率,可以进行调节以取得最佳的效果。
  • P-Tuning-v2 方法会冻结全部的模型参数,可通过调整 quantization_bit来被原始模型的量化等级,不加此选项则为 FP16 精度加载。
  • 注意使用1版本的这个文件的抬头,下图已经做了修改(不知道为啥chatglm2版本的这个运行起来就会报错,一直调bug都没解决,后来用1版的就可以了)
    【ChatGLM2-6B微调】6GB显存实现ChatGLM2-6B大模型微调!_第3张图片
    (详细的配置方式可以详见这位作者的文章:https://mp.weixin.qq.com/s/xSF23H_LHgioU8wfEcjs4A)

2、展开P-Tuning V2 微调训练
此处注意的是以依赖包Transformers的版本要求为4.27.1

bash train.sh

这里的注意事项是,是在windows环境下执行了Linux系统的bash指令,安装了git来实现bash指令的调用,安装非常简单,官网上下载安装包就行,但是想要bash能够正常运行,要配置git环境变量!(如下图)配置好了就能正常执行bash指令了
【ChatGLM2-6B微调】6GB显存实现ChatGLM2-6B大模型微调!_第4张图片

下图为训练过程:
【ChatGLM2-6B微调】6GB显存实现ChatGLM2-6B大模型微调!_第5张图片
【ChatGLM2-6B微调】6GB显存实现ChatGLM2-6B大模型微调!_第6张图片
运行了非常久,结果如下:
【ChatGLM2-6B微调】6GB显存实现ChatGLM2-6B大模型微调!_第7张图片
3、配置evaluate.sh并推理测评
【ChatGLM2-6B微调】6GB显存实现ChatGLM2-6B大模型微调!_第8张图片
CHECKPOINT 实际就是 train.sh 中的 output_dir。
(我是基于这位作者的文章:https://mp.weixin.qq.com/s/xSF23H_LHgioU8wfEcjs4A进行修改的,不过也根据自己的情况保留了quantization_bit 4,如果你的情况和我一样,可以直接使用我截图上的参数配置。)

bash evaluate.sh 

这个运行起来非常快,如下图所示
【ChatGLM2-6B微调】6GB显存实现ChatGLM2-6B大模型微调!_第9张图片
执行完成后,会生成评测文件(内容如下),评测指标为中文 Rouge score 和 BLEU-4。生成的结果保存在 ./output/adgen-chatglm-6b-pt-32-2e-2/generated_predictions.txt。我们准备了 5 条推理数据,所以相应的在文件中会有 5 条评测数据,labels 是 dev.json 中的预测输出,predict 是 ChatGLM2-6B 生成的结果,对比预测输出和生成结果,评测模型训练的好坏。如果不满意调整训练的参数再次进行训练。
【ChatGLM2-6B微调】6GB显存实现ChatGLM2-6B大模型微调!_第10张图片
4、部署并使用微调后的模型
模型参数有两个,一个是微调得到的参数,一个是原参数。因为在 P-tuning v2 训练时模型只保存 PrefixEncoder 部分的参数,所以在推理时需要同时加载原 ChatGLM2-6B 模型以及 PrefixEncoder 的权重,因此需要指定对应的参数,并且配置对应的参数:
【ChatGLM2-6B微调】6GB显存实现ChatGLM2-6B大模型微调!_第11张图片
(我是基于这位作者的文章:https://mp.weixin.qq.com/s/xSF23H_LHgioU8wfEcjs4A进行参数修改的)

bash web_demo.sh

即可使用微调后的模型,使用情况如下图所示:
【ChatGLM2-6B微调】6GB显存实现ChatGLM2-6B大模型微调!_第12张图片
微调前的效果如下:
【ChatGLM2-6B微调】6GB显存实现ChatGLM2-6B大模型微调!_第13张图片
结语:
其实一开始也没抱希望说6GB显存的电脑能跑起来微调,因为官方教程上看见的是最低7GB显存即可实现为微调,没想到我6GB的电脑也跑起来了,分享出来,如果里面的哪怕一点内容对你也有帮助的话,那就再好不过了。如有错误或者不合理的地方,欢迎批评指正和指导!

你可能感兴趣的:(人工智能,语言模型,python,conda,自然语言处理)