liucongg / ChatGLM-Finetuning

基于ChatGLM-6B、ChatGLM2-6B、ChatGLM3-6B模型,进行下游具体任务微调,涉及Freeze、Lora、P-tuning、全参微调等
2.66k stars 294 forks source link

增加chatGLM2+PT的预测代码 #99

Open micrazy opened 1 year ago

micrazy commented 1 year ago

Description

  1. 修改了模型保存方式,只保存PrefixEncoder部分
  2. 优化了训练过程的日志打印方式
  3. 新增了预测和cli代码

在chatGLM2+PT场景下,可以复现三元组抽取任务, 不同epoch的模型f1在测试集上表现为:

基本和作者的实验相符

micrazy commented 1 year ago

补充一句,随着训练轮数增加,会出现灾难性遗忘现象

Rorschach2333 commented 1 year ago

是真的,我感觉pt微调的遗忘问题非常严重,根本没有对话能力了

Rorschach2333 commented 1 year ago

在我的实验里只做了一次微调训练,但是结果貌似lora好很多,遗忘效果也没那么明显,我再试试多次训练后什么情况

micrazy commented 1 year ago

在我的实验里只做了一次微调训练,但是结果貌似lora好很多,遗忘效果也没那么明显,我再试试多次训练后什么情况

lora比pt好吗?

Rorschach2333 commented 1 year ago

我的实验结果是这样的,lora微调: 0.4670529755761953 0.49894855144855144 0.55351585129846 0.5553688147601193 0.5634696969696971 0.6320420851937882 0.5791721859418254 0.6105994321847981 0.620511885775044 0.6314630720323322 并且用第10轮的权重,仍然可以保持正常的沟通能力,测试的几个问题都能回答,但是ptv2我试了两个轮次,他连自己是谁都不知道了,根本没法用,测试精度大约是0.49(pt第二轮) 感谢你提供的脚本,这周组会又有救了

micrazy commented 1 year ago

我的实验结果是这样的,lora微调: 0.4670529755761953 0.49894855144855144 0.55351585129846 0.5553688147601193 0.5634696969696971 0.6320420851937882 0.5791721859418254 0.6105994321847981 0.620511885775044 0.6314630720323322 并且用第10轮的权重,仍然可以保持正常的沟通能力,测试的几个问题都能回答,但是ptv2我试了两个轮次,他连自己是谁都不知道了,根本没法用,测试精度大约是0.49(pt第二轮) 感谢你提供的脚本,这周组会又有救了

很棒~

Zou-njust commented 11 months ago

在我的实验里只做了一次微调训练,但是结果貌似lora好很多,遗忘效果也没那么明显,我再试试多次训练后什么情况

你好,我尝试lora微调,生成的文件中没有pytorch_model.bin,但predict.py和cli.py中都需要这个文件,请问这里是怎么处理的?

Zou-njust commented 11 months ago

我的实验结果是这样的,lora微调: 0.4670529755761953 0.49894855144855144 0.55351585129846 0.5553688147601193 0.5634696969696971 0.6320420851937882 0.5791721859418254 0.6105994321847981 0.620511885775044 0.6314630720323322 并且用第10轮的权重,仍然可以保持正常的沟通能力,测试的几个问题都能回答,但是ptv2我试了两个轮次,他连自己是谁都不知道了,根本没法用,测试精度大约是0.49(pt第二轮) 感谢你提供的脚本,这周组会又有救了

现在用下面的方式可以加载成功, tokenizer = ChatGLMTokenizer.from_pretrained(args.model_dir) config = PeftConfig.from_pretrained(args.lora_checkpoint) model = AutoModel.from_pretrained(config.base_model_name_or_path, trust_remote_code=True).cuda() model = PeftModel.from_pretrained(model, args.lora_checkpoint) 但使用predict.py分数全部为0,用cli问答,回答结果感觉和原始模型完全一样,怀疑是微调的部分哪里有问题,请问你是怎么操作的

nowyouseemejoe commented 10 months ago

我的实验结果是这样的,lora微调: 0.4670529755761953 0.49894855144855144 0.55351585129846 0.5553688147601193 0.5634696969696971 0.6320420851937882 0.5791721859418254 0.6105994321847981 0.620511885775044 0.6314630720323322 并且用第10轮的权重,仍然可以保持正常的沟通能力,测试的几个问题都能回答,但是ptv2我试了两个轮次,他连自己是谁都不知道了,根本没法用,测试精度大约是0.49(pt第二轮) 感谢你提供的脚本,这周组会又有救了

现在用下面的方式可以加载成功, tokenizer = ChatGLMTokenizer.from_pretrained(args.model_dir) config = PeftConfig.from_pretrained(args.lora_checkpoint) model = AutoModel.from_pretrained(config.base_model_name_or_path, trust_remote_code=True).cuda() model = PeftModel.from_pretrained(model, args.lora_checkpoint) 但使用predict.py分数全部为0,用cli问答,回答结果感觉和原始模型完全一样,怀疑是微调的部分哪里有问题,请问你是怎么操作的

我也是这个问题,用了和你一样的代码加上model = model.merge_and_unload(),但是结果还是和原始模型一样,看了下好像参数都是原来的模型