定制你的私人本地离线"ChatGPT" - GPT 模型微调实战指南

0x00 前言

在众多企业级应用场景中,GPT 模型具有广泛的实用性。然而,由于 ChatGPT 仅提供在线版本,其应用受到一定限制。近期,笔者通过训练LLaMa,Alpaca、ChatGLM-6B 等众多 10B 以下的小模型,终于找到了一种高效的炼丹方法。

这种方法能够低成本地快速更新模型的知识库,并成功实现预期的对话表现。如下图所示,微调后的ChatGLM6B的模型重新认识了自己:

图片[1]-定制你的私人本地离线"ChatGPT" - GPT 模型微调实战指南-JieYingAI捷鹰AI

0x01环境准备

硬件配置建议

部署环境

检验:依次输入以下命令,查看环境是否部署好:

nvidia-smi 查看显卡是否能够正常识别

图片[2]-定制你的私人本地离线"ChatGPT" - GPT 模型微调实战指南-JieYingAI捷鹰AI

pytorch查看显卡是否能够正常识别

图片[3]-定制你的私人本地离线"ChatGPT" - GPT 模型微调实战指南-JieYingAI捷鹰AI

0x02模型准备

训练脚本:

模型:

创建文件夹 ChatGLM-6B,把训练脚本中的所有文件放置该目录下。

在ChatGLM-6B中,创建 thuglm 文件夹,把模型中所有文件下载后放置在ChatGLM-6B/thuglm 中。切记不要下漏文件。

整理后的文件如图所示:

图片[4]-定制你的私人本地离线"ChatGPT" - GPT 模型微调实战指南-JieYingAI捷鹰AI

使用 pip 安装依赖:pip install -r requirements.txt,其中 transformers 库版本推荐为 4.27.1,但理论上不低于 4.23.1 即可。

我们主要采用 cli_demo.py 作为测试训练的交互工具。请编辑修改第 6、7 行代码,将模型路径指向我们刚刚下载的 thuglm。

图片[5]-定制你的私人本地离线"ChatGPT" - GPT 模型微调实战指南-JieYingAI捷鹰AI

运行命令 python cli_demo.py,输入你是谁,如下对话出现,说明模型已成功启动:

图片[6]-定制你的私人本地离线"ChatGPT" - GPT 模型微调实战指南-JieYingAI捷鹰AI

0x03训练数据准备

本文全程参考了官方的微调方法:

里面已经说的非常详细了,这里主要讲一下自定义的部分:

1. 在 ptuning 文件夹中创建一个名为 AdvertiseGen 的新目录。当然,你可以使用其他名称,但需要相应地修改训练文件中的代码。为了简便起见,我直接使用官方训练的同名文件夹。

2. 准备自定义数据,每行一个 JSON 对象,并将数据写入两个文件当作训练集和测试集:ptuning/AdvertiseGen/train.json和 ptuning/AdvertiseGen/dev.json。

JSON 格式如下:

{"summary": "提示词", "content": "期望生成的结果"}

我们的这次训练目的是让模型说出他是微调后的结果,所以json内容基本以这个为主:

{"summary": "你是谁?", "content": "我是wstart通过ChatGLM -6B微调后的模型,训练编号是:0.08376971294904079"}

准备好后如下图,

图片[7]-定制你的私人本地离线"ChatGPT" - GPT 模型微调实战指南-JieYingAI捷鹰AI

注:thuglm是ChatGLM-6B/thuglm的原模型文件,为了方便我这里又复制了一遍。

3. 修改训练文件

图片[8]-定制你的私人本地离线"ChatGPT" - GPT 模型微调实战指南-JieYingAI捷鹰AI

4.启动训练

bash train.sh如果看到下图,即开始训练启动成功:

图片[9]-定制你的私人本地离线"ChatGPT" - GPT 模型微调实战指南-JieYingAI捷鹰AI

程序会按照加载模型->加载训练数据->训练->保存到output_dir 4个步骤进行。可以查看自己在哪一个步骤出错,进行修改。

每个人的环境不一样,训练的时间不一样,我这个配置训练的时间是大概7-8个小时走完3000轮的epoch,如果看到loss变化不大后,可以自行调整。

当前的配置是1000轮导出一次模型,可以自行修改。

0x04 训练结果

8个小时后,在ptuning/out/adgen-chatglm-6b-pt-8-1e-2/ 看到训练好的模型,checkpoint-x000 ,一般取最新的。

图片[10]-定制你的私人本地离线"ChatGPT" - GPT 模型微调实战指南-JieYingAI捷鹰AI

继续使用 cli_demo.py 作为测试训练的交互工具。编辑修改第 6、7 行代码,将模型路径指向我们刚刚训练好的模型

图片[11]-定制你的私人本地离线"ChatGPT" - GPT 模型微调实战指南-JieYingAI捷鹰AI

运行命令python cli_demo.py,输入你是谁,如下对话出现,说明模型已成功更新知识库。

图片[12]-定制你的私人本地离线"ChatGPT" - GPT 模型微调实战指南-JieYingAI捷鹰AI

0x05局限性

1. 不确定是数据集问题还是其他原因,更新知识库后,部分原有知识丢失,导致某些对话表现不如之前。

2. 官方提到,由于 ChatGLM-6B 规模较小,本身存在诸多局限,此方法主要适用于离线环境下验证 GPT 技术是否能解决特定业务场景。若需实际应用,可能还是需要使用超过 10B 规模的模型和精细的 RLHF 才能达到可用标准。

笔者将持续关注GPT相关前沿进展。感兴趣的朋友可点赞或私信 GPT,加入讨论群交流。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
来说点什么吧!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容