ChatGLM2-6B大语言模型微调训练教程
引言
随着ChatGPT的发展,不少企业都想训练出来适用于自己领域的大模型,但是训练一个模型成本是非常高的,中小型企业根本无法承受。今天给大家带来ChatGLM2-6B大语言模型微调训练教程,基于清华大学开源的大语言模型(GitHub:ChatGLM2-6B)进行微调,可以用非常少的成本训练出自己行业领域的大模型。
软硬件条件
系统
系统推荐 Ubuntu 22.x ,因为P-Tuning v2
不支持Windows多卡。
如果是单卡跑的话,使用Windows也是可以的,详细修改教程参照:issues#195
硬件
微调不需要多高的硬件,但也要满足最低硬件要求:
CPU:8核心以上
内存:32G以上
显卡:仅支持英伟达(NVDA)显卡,推荐最近新出卡,能加快微调速度。
显存:显存推荐16G以上,最低8G。
单卡多卡:推荐多卡,单卡也是可以的。
数据准备
下面给大家几条数据示例:
{"content":"你好","summary":"您好,我是人工智能助理iBot机器人。"}
{"content":"你叫什么名字?","summary":"我的名字叫做iBot机器人。"}
{"content":"你有什么功能?","summary":"我可以解决您在使用网站时遇到的各种问题。"}
{"content":"每次签到可以获得多少金币","summary":"您可以通过签到获取金币。每次签到获得的金币数量在5个~100个不等。签到获得的金币支持累加,但有一定的上限,普通用户通过签到最大累计金币数为30个,捐赠用户通过签到最大累计金币数为300个。"}
{"content":"软件闪退、黑屏、无法使用的原因是?","summary":"软件闪退、黑屏、无法使用的原因可能包括:软件需要输入ID但用户输入了自己的ID导致闪退;软件与当前iOS版本不兼容;以及软件自身存在问题。"}
{"content":"软件提示“输入ID”怎么办?","summary":"当软件打开后需要输入ID时,千万不要输入自己的ID,否则可能导致软件闪退或黑屏。iOS6系统:首先退出软件,回到桌面,在打开软件的一瞬间,迅速按下息屏键,再迅速点亮屏幕,继续使用软件就不会提示了(如果不行的话,多试几次)。非iOS6系统:仅仅对爱思正版软件有效:手机需要链接一次电脑版爱思,它会在你手机上面安装个爱思手机版,这个时候再打开爱思版免ID软件,就不会再提示需要id了。相似的,同步正版和91正版,自然需要下载个同步助手和91助手了。"}
讲这些数据存放到新建文件
train.json
中拉取项目
项目环境部署可以参考下方文章,但也仅作为参考,因为之前讲的是windows的环境下部署,本次微调使用的系统是ubuntu,虽有不同,但大同小异,下文仅供参考。
[post cid="82" /]
微调
软件依赖
运行微调除 ChatGLM2-6B 的依赖之外,还需要安装以下依赖
pip install rouge_chinese nltk jieba datasets
修改微调代码
微调代码文件路径:项目地址/ptuning/train.sh
文件部分参数我在这里给大家解读一下:PRE_SEQ_LEN=128
预处理序列的长度,假设你的微调数量很小(约莫有100条)建议调低到64LR=2e-2
学习率,它决定了模型在每次更新权重时所采用的步长。较小的学习率会导致训练过程缓慢,而较大的学习率可能会导致训练过程不稳定。若微调数据量很小(约莫有100条)可以使用较大的学习率例如2e-1
对于:per_device_train_batch_size 1
per_device_eval_batch_size 1
以及 gradient_accumulation_steps 16
请前往Github查看或参阅下方引用:
一次训练迭代会以 1 的批处理大小进行 16 次累加的前后向传播,等效为 16 的总批处理大小,此时最低只需 6.7G 显存。若想在同等批处理大小下提升训练效率,可在二者乘积不变的情况下,加大 per_device_train_batch_size 的值,但也会带来更多的显存消耗,请根据实际情况酌情调整。
修改例子:
源代码:
--per_device_train_batch_size 1 \
--per_device_eval_batch_size 1 \
--gradient_accumulation_steps 16 \
修改后:
--per_device_train_batch_size 4 \
--per_device_eval_batch_size 1 \
--gradient_accumulation_steps 4 \
亦或者:
--per_device_train_batch_size 8 \
--per_device_eval_batch_size 1 \
--gradient_accumulation_steps 2 \
还可以:
--per_device_train_batch_size 8 \
--per_device_eval_batch_size 2 \
--gradient_accumulation_steps 2 \
微调数据放置
将微调数据train.json
放置到路径:项目地址/ptuning/AdvertiseGen/train.json
至于dev.json
这个文件,就是训练后你想要什么结果存放到里面,内容示例:
{"content":"你好啊","summary":"您好,我是人工智能助理iBot机器人。"}
{"content":"你的叫什么?","summary":"我的名字叫做iBot机器人。"}
{"content":"你可以做什么?","summary":"我可以解决您在使用网站时遇到的各种问题。"}
开始微调:
bash train.sh
微调后部署
这个就不讲了,就是把部署后的模型跑出来,请参阅:ptuning#模型部署
我这里的话,直接接入了QQ机器人,就直接演示一下在qq群内的对话吧:
群对话: