Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open

Conversation

micrazy
Copy link

@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
Author

micrazy commented Sep 7, 2023

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

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

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

@Rorschach2333
Copy link

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

@micrazy
Copy link
Author

micrazy commented Nov 1, 2023

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

lora比pt好吗?

@Rorschach2333
Copy link

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

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

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

@Zou-njust
Copy link

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

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

None yet

4 participants