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

本文做清华官方代码包中自带的ptuning微调方式实践。(如下图所见,使用的是int4量化模型)这个可以参照我发布的博文《清华ChatGLM2-6B一键式部署,无需自行安装依赖环境!!》进行快速部署
在这里插入图片描述
采用了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都用这两条
在这里插入图片描述
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版的就可以了)
    在这里插入图片描述
    (详细的配置方式可以详见这位作者的文章: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指令了
在这里插入图片描述

下图为训练过程:
在这里插入图片描述
在这里插入图片描述
运行了非常久,结果如下:
在这里插入图片描述
3、配置evaluate.sh并推理测评
在这里插入图片描述
CHECKPOINT 实际就是 train.sh 中的 output_dir。
(我是基于这位作者的文章:https://mp.weixin.qq.com/s/xSF23H_LHgioU8wfEcjs4A进行修改的,不过也根据自己的情况保留了quantization_bit 4,如果你的情况和我一样,可以直接使用我截图上的参数配置。)

bash evaluate.sh 

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

bash web_demo.sh

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

<think>好的,我现在需要帮助用户了解如何对ChatGLM3-6B模型进行微调。首先,我得回顾用户提供的引用内容,确保回答准确。用户提到了三个引用,其中引用[1]指出ChatGLM3-6B-base支持Lora微调,而ChatGLM3-6B支持全量微调和P-Tuning V2。引用[3]提到了启动脚本run.sh中的参数设置,比如model_name_or_path、train_file等。 用户的问题是关于微调方法和示例的,所以需要分步骤解释。首先,可能需要介绍不同的微调方法:全量微调、Lora和P-Tuning V2,并说明它们适用的模型版本。然后,给出具体的步骤,比如准备数据、配置参数、运行脚本等。此外,用户可能需要示例代码或命令,这需要参考引用中的信息,比如scripts/run_sft.sh的使用。 还要注意用户提到的显存需求,引用[2]提到ChatGLM-6B的显存需求,可能需要提醒用户在微调时的硬件要求。同时,数据格式方面,引用[3]提到训练文件和验证文件的路径设置,可能需要说明数据应该如何准备,比如JSON格式,每行包含prompt和response。 可能还需要强调不同模型版本对应的微调方法,比如ChatGLM3-6B-base只能用Lora,而ChatGLM3-6B可以用全量和P-Tuning V2。同时,参数设置如cutoff_len对于不同模型的影响,如LLaMA建议1024以上,Bloom用512,但ChatGLM的情况可能需要进一步确认,但根据引用[3],可能需要设置合理的长度。 最后,生成相关问题时要考虑用户可能进一步的问题,比如显存优化、数据处理、超参数调整等。需要确保问题覆盖用户可能关心的其他方面,比如应用场景或性能分析。</think>### ChatGLM3-6B模型微调方法及示例 #### 1. 微调方法概述 根据官方文档,ChatGLM3-6B模型的微调支持以下方法[^1]: - **ChatGLM3-6B-base模型**:仅支持Lora微调 - **ChatGLM3-6B模型**:支持全量微调(Full Fine-Tuning)和P-Tuning V2 - 显存需求:FP16模式下至少需要13GB显存,通过INT8/INT4量化可降低至10GB/6GB[^2] #### 2. 微调步骤 ##### 步骤1:准备数据 - 数据格式:建议使用JSON文件,每行包含`prompt`(输入)和`response`(期望输出) - 示例数据格式: ```json {"prompt": "解释牛顿定律", "response": "牛顿第一定律描述了惯性..."} ``` ##### 步骤2:配置训练脚本 修改`scripts/run_sft.sh`脚本关键参数[^3]: ```bash model_name_or_path="THUDM/chatglm3-6b" # 预训练模型路径 train_file="./data/train.json" # 训练数据路径 validation_file="./data/dev.json" # 验证数据路径 output_dir="./output" # 输出目录 cutoff_len=2048 # 序列长度(根据显存调整) ``` ##### 步骤3:运行微调命令 - **全量微调**: ```bash bash scripts/run_sft.sh \ --do_train \ --do_eval \ --fp16 ``` - **P-Tuning V2**: ```bash bash scripts/run_sft.sh \ --use_ptuning \ --prefix_projection \ --prefix_hidden_size 128 ``` #### 3. 关键参数说明 | 参数 | 说明 | 建议值 | |------|------|--------| | `learning_rate` | 学习率 | 1e-5~5e-5 | | `per_device_train_batch_size` | 批次大小 | 根据显存调整(通常1-4)| | `gradient_accumulation_steps` | 梯度累积步数 | 4-8 | | `max_seq_length` | 最大序列长度 | 512-2048 | #### 4. 显存优化技巧 - 启用量化训练(添加`--quantization_bit 4`) - 使用梯度检查点技术(添加`--gradient_checkpointing`) - 混合精度训练(`--fp16`或`--bf16`) #### 5. 示例代码片段 ```python from transformers import AutoModelForCausalLM, TrainingArguments model = AutoModelForCausalLM.from_pretrained("THUDM/chatglm3-6b") training_args = TrainingArguments( output_dir="./results", per_device_train_batch_size=2, gradient_accumulation_steps=4, learning_rate=2e-5, fp16=True, ) ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yurous

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值