聊聊ChatGLM2-6B模型的微调
概述
GLM、ChatGLM的相关基础知识说明:
- GLM模型底层还是基于Transformer,因此其设计、优化都是围绕Transformer的各个组件的。从注意力层的掩码、位置编码等方面优化与设计。
- ChatGLM3/ChatGLM2的源码中,比如finetune、trainer等代码,其实是copy自HuggingFace,而且其使用流程与调用机制,与HuggingFace的开发流程是一致的。
- 对GLM-130B,ChatGLM千亿模型,ChatGLM-6B的区分不够清楚,这里给出说明:
- GLM-130B:于2022年8月由清华智谱AI开源放出。该大语言模型基于之前提出的GLM(General Language Model),在Norm处理、激活函数、Mask机制等方面进行了调整,目的是训练出开源开放的高精度千亿中英双语稠密模型,能够让更多研发者用上千亿模型。
- ChatGLM千亿模型: 该模型是为了解决大基座模型在复杂问题、动态知识、人类对齐场景的不足,基于GLM-130B,引入面向对话的用户反馈,进行指令微调后,得到的对话机器人。
- ChatGLM-6B:于2023年3月开源。在进行ChatGLM千亿模型内测的同时,清华团队也开放出了同样技术小参数量的版本,方便研发者们进行学习和开发(非商用)。
ChatGLM对话模型的微调需要用到两个部分;一是已预训练的模型文件,二是ChatGLM的源码文件。
模型文件
在Huggingface平台下载到本地或直接用远程的文件。
已预训练的模型,其开发调用模式遵循Huggingface的开发规范。
微调
在github上托管的ChatGLM源码包中,详细的介绍了基于p-tuning的微调策略。
其源码模块中已经准备好了脚本文件 train.sh ,该文件包含所有相关的配置参数,根据微调后的配置调整脚本文件,一键运行即可。
微调并执行后,会保存并生成checkpoint-xxx文件。这就是新的权重超参数。
模型部署
有两种方式用来运行微调后的模型:
- 基于Huggingface的开发规范,将原模型超参数文件与微调后的超参数文件一起加载,并调用。
- 调整 web_demo.sh 文件中的路径配置,运行即可。
参考
ChatGLM2-6B微调视频讲解
基于第二代 ChatGLM2-6B P-Tuning v2 微调训练医疗问答任务
官方p-tuning微调文档