ymcui / Chinese-LLaMA-Alpaca-2

中文LLaMA-2 & Alpaca-2大模型二期项目 + 64K超长上下文模型 (Chinese LLaMA-2 & Alpaca-2 LLMs with 64K long context models)
Apache License 2.0
7.01k stars 571 forks source link

如何通过metric_for_best_model 参数还是别的方式保存eval_accuracy最高的checkpoint ,并且能顺利执行完run_clm_sft_with_peft.py? #473

Closed feifei05 closed 6 months ago

feifei05 commented 7 months ago

提交前必须检查以下项目

问题类型

模型训练与精调

基础模型

Chinese-Alpaca-2 (7B/13B)

操作系统

Linux

详细描述问题

#为了保存最好的lora模型,即保存eval_accuracy最大的checkponit,在run_sft.sh中增加了三个参数,"metric_for_best_model"="eval_accuracy",  “load_best_model_at_end”=“True”,“greater_is_better”="True",但是在执行sh文件后,完成训练后就报错missing key(s) in state_dic:"base_model.model.model.layers.0.self.attn.q_proj

依赖情况(代码类问题务必提供)

![0fd275174c91c23df3b74e4503b09c1](https://github.com/ymcui/Chinese-LLaMA-Alpaca-2/assets/69673314/8f2c1c2d-63ad-4f1d-8ee5-6c096e95f930)

运行日志或截图

# 请在此处粘贴运行日志(请粘贴在本代码块里)

4dafe1af5d9793d0db57ee68bb7450c

feifei05 commented 7 months ago

我用的依赖环境是peft=0.5.0,请问是版本的问题?

iMountTai commented 7 months ago

没有设置过这个参数,如果是resume可能会报这个错误,需要修改deepspeed相关代码即可。但是你在完成训练即报错,得DEBUG一下。

feifei05 commented 7 months ago

没有设置过这个参数,如果是resume可能会报这个错误,需要修改deepspeed相关代码即可。但是你在完成训练即报错,得DEBUG一下。

没有设置过这个参数,如果是resume可能会报这个错误,需要修改deepspeed相关代码即可。但是你在完成训练即报错,得DEBUG一下。

请问是修改哪个代码,加上这个最好的参数后,我保存checkpoint中的lora文件目录也不同,普通checkpoint不会保存lora,我发现原来的checkpoint都会保存lora,还有就是大佬,为啥debug和run的输出不一样,debug根本执行不到微调结束,就第一个checkpoint后就报了没有save checkpoint路径,大佬大大能具体指导下嘛

iMountTai commented 7 months ago

可以参考issue debug对于路径、环境有一定的要求,你可以在合适的位置打印你想要的信息试试。这个代码是参考的transformers的run_clm.py,时间比较久且版本较老,目前transformers已经更新好多版本了,也不排除这个原因。如果你一定要从最好的指标模型处resume,可以直接设置peft_path为你保存的最好指标的lora路径,然后从该处resume。

feifei05 commented 7 months ago

可以参考issue debug对于路径、环境有一定的要求,你可以在合适的位置打印你想要的信息试试。这个代码是参考的transformers的run_clm.py,时间比较久且版本较老,目前transformers已经更新好多版本了,也不排除这个原因。如果你一定要从最好的指标模型处resume,可以直接设置peft_path为你保存的最好指标的lora路径,然后从该处resume。

将deepspeed/runtime/engine.py中函数load_checkpoint定义中的参数load_module_strict默认值改为False,可以执行完,解决了这个问题RuntimeError: Error(s) in loading state_dict for PeftModelForCausalLM。 谢谢大佬哈。