Chatglm3-6Bの小白利用方法
写这篇blog的时候GLM-4-9B也开源了,性能看描述比6B好了很多。 但是还没尝试,但是看AutoDL上已经有弄好的社区镜像了,估计可以尝试。
快速部署上云
考虑到如果只是做个toy,然后toy又希望搞点比如微调之类的二次开发,但又不想老老实实地在自己服务器上配环境,那最简单的方式其实就是镜像。
腾讯云
网址如下 https://buy.cloud.tencent.com/hai 随后在选择应用上选择ChatGLM3 6B即可,然后GPU一定选进阶型(不过之前用过是V100来着) 创建完实例以后,进去以后环境方面基本无需担心。
AutoDL
网址如下 https://www.autodl.com/create 算力在购买界面拉到下面选社区镜像,算力提供了3090,L20,V100,A800,可以租多卡,建议多卡
直接测试
cli_demo里的是脚手架的测试,给出命令行交互 进basic_demo跑web_demo_gradio.py会给出网页(但是服务器上一般用不到)
微调
进finetune_demo目录,config下给出了 SFT 全量微调,P-TuningV2 微调和LORA 微调
单机单卡测试Lora python finetune_hf.py data/AdvertiseGen/ THUDM/chatglm3-6b configs/lora.yaml
微调内容格式
1 | { |
更多内容直接参考https://github.com/THUDM/ChatGLM3/tree/main/finetune_demo即可
微调方法的区别
SFT (Soft Prompt Tuning)
核心思想:在预训练模型中引入一组可学习的软提示,这些提示可以捕获特定任务的额外信息,而无需对模型的主体进行大规模调整。
实现方式:软提示作为可训练的向量被添加到输入token的嵌入层或者模型的中间层。在微调过程中,只更新这些软提示的参数,而模型的原始权重保持不变。
优势:通过少量可训练参数即可实现任务适应性,保留了预训练模型的大部分通用知识,同时减少了计算资源和数据需求。 ## P-TuningV2 核心思想:通过一个辅助的连续提示编码器生成任务特定的软提示,从而实现对预训练模型的精确调整,而不改变其原始权重。
实现方式:引入一个额外的提示编码器,该编码器生成软提示并将其注入到预训练模型的适当位置。在训练过程中,只更新这个提示编码器的参数。
优势:提供了更灵活的任务适应性,通过连续的提示编码器可以更好地捕捉任务特定的特征,同时保持了预训练模型的整体结构不变。 ## LORA (Low-Rank Adaptation) 核心思想:当大型模型被用于特定任务时,实际上只有其中一小部分参数扮演了关键角色。
实现方式:尽管参数矩阵的维度非常高,但模型的原始权重矩阵被分解为两个较小的矩阵,一个是低秩矩阵,另一个是适配矩阵。在微调过程中,只有适配矩阵会被训练,而原始的预训练权重保持不变。
优势:这种方法允许模型在新的任务上快速适应,同时保留了预训练时学到的通用语言知识,实现了参数效率高的微调策略。