Skip to content

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

Open
micrazy wants to merge 4 commits intoliucongg:masterfrom
micrazy:master
Open

增加chatGLM2+PT的预测代码#99
micrazy wants to merge 4 commits intoliucongg:masterfrom
micrazy:master

Conversation

@micrazy
Copy link
Copy Markdown

@micrazy micrazy commented Sep 7, 2023

Description

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

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

  • Epoch 1 0.4001908179539758
  • Epoch 5 0.48332597625972235
  • Epoch 7 0.5810401474342651
  • Epoch 10 0.5901889823940757

基本和作者的实验相符

@micrazy
Copy link
Copy Markdown
Author

micrazy commented Sep 7, 2023

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

@micrazy micrazy mentioned this pull request Sep 7, 2023
@Rorschach2333
Copy link
Copy Markdown

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

@Rorschach2333
Copy link
Copy Markdown

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

@micrazy
Copy link
Copy Markdown
Author

micrazy commented Nov 1, 2023

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

lora比pt好吗?

@Rorschach2333
Copy link
Copy Markdown

我的实验结果是这样的,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
Copy link
Copy Markdown
Author

micrazy commented Nov 1, 2023

我的实验结果是这样的,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
Copy link
Copy Markdown

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

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

@Zou-njust
Copy link
Copy Markdown

我的实验结果是这样的,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
Copy link
Copy Markdown

我的实验结果是这样的,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(),但是结果还是和原始模型一样,看了下好像参数都是原来的模型

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants