beyondguo / LLM-Tuning

Tuning LLMs with no tears💦; Sample Design Engineering (SDE) for more efficient downstream-tuning.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

ChatGLM2按照readme教程微调了,但是没有效果!!!

HelixPark opened this issue · comments

按照readme里面的过程,自己设置了一个自我介绍的数据,一步步的Tokenization和lora训练loss都为很0.0001了,然后按照model= PeftModel.from_pretrained(model, "/home/llm/ChatGLM2-6B/finetuning/weights").half()加载微调后的,自我介绍还是没变(原厂的自我介绍)。

求大神解答思路或者大神的微调过程

推理代码如下:
from peft import PeftModel
from transformers import AutoTokenizer, AutoModel
import torch

device = torch.device(7)

加载原始 LLM

model_path = "/home/llm/ChatGLM2-6B/chatglm2-6b"
model = AutoModel.from_pretrained(model_path, trust_remote_code=True).half().to(device)
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)

res1 = model.chat(tokenizer, "你好,自我介绍一下", history=[])
print(res1)

print('***********************************************************')

给原始 LLM 安装上你的 LoRA tool

model = PeftModel.from_pretrained(model, "/home/llm/ChatGLM2-6B/finetuning/weights").half()
res2 = model.chat(tokenizer, "你好,自我介绍一下", history=[])
print(res2)

其他的都是按照项目里的来的

你微调的数据是咋样的?数据量多少?

很奇怪,模型导进去了,lora的权重没有导进去。
我打出来发现权重全是0,

print(model.base_model.model.transformer.encoder.layers[27].self_attention.query_key_value.lora_B.default.weight)

自己手动load_state_dict进去了,但是推理结果还是没有微调后的变化。

一样没有微调效果

你微调的数据是咋样的?数据量多少?

数据格式就是按照demo写的,量不是很多几十个;我和楼下的一样,训练之后loraB还全是0

一样没有微调效果

看来是共病,一步步查吧

model = PeftModel.from_pretrained(model, "weights/xxx")
model_dict = model.state_dict()
model_dict.update(torch.load("weights/xxx/adapter_model.bin"))
model.load_state_dict(model_dict)

勉强先这样解决,但是感觉训练时loss算的有问题,我loss一直训到后面全是0了,推理时才能看到效果。

model = PeftModel.from_pretrained(model, "weights/xxx")
model_dict = model.state_dict()
model_dict.update(torch.load("weights/xxx/adapter_model.bin"))
model.load_state_dict(model_dict)

勉强先这样解决,但是感觉训练时loss算的有问题,我loss一直训到后面全是0了,推理时才能看到效果。

Unexpected key(s) in state_dict: "base_model.model.transformer.encoder.layers.0.self_attention.query_key_value.lora_A.weight", "base_model.model.transformer.encoder.layers.0.self_attention.query_key_value.lora_B.weight", "base_model.model.transformer.encoder.layers.1.self_attention.query_key_value.lora_A.weight", "base_model.model.transformer.encoder.layers.1.self_attention.query_key_value.lora_B.weight", "base_model.model.transformer.encoder.layers.2.self_attention.query_key_value.lora_A.weight", "base_model.model.transformer.encoder.layers.2.self_attention.query_key_value.lora_B.weight", "base_model.model.transformer.encoder.layers.3.self_attention.query_key_value.lora_A.weight", "base_model.model.transformer.encoder.layers.3.self_attention.query_key_value.lora_B.weight", "base_model.model.transformer.encoder.layers.4.self_attention.query_key_value.lora_A.weight", "base_model.model.transformer.encoder.layers.4.self_attention.query_key_value.lora_B.weight", "base_model.model.transformer.encoder.layers.5.self_attention.query_key_value.lora_A.weight", "base_model.model.transformer.encoder.layers.5.self_attention.query_key_value.lora_B.weight", "base_model.model.transformer.encoder.layers.6.self_attention.query_key_value.lora_A.weight", "base_model.model.transformer.encoder.layers.6.self_attention.query_key_value.lora_B.weight", "base_model.model.transformer.encoder.layers.7.self_attention.query_key_value.lora_A.weight", "base_model.model.transformer.encoder.layers.7.self_attention.query_key_value.lora_B.weight", "base_model.model.transformer.encoder.layers.8.self_attention.query_key_value.lora_A.weight", "base_model.model.transformer.encoder.layers.8.self_attention.query_key_value.lora_B.weight", "base_model.model.transformer.encoder.layers.9.self_attention.query_key_value.lora_A.weight", "base_model.model.transformer.encoder.layers.9.self_attention.query_key_value.lora_B.weight", "base_model.model.transformer.encoder.layers.10.self_attention.query_key_value.lora_A.weight", "base_model.model.transformer.encoder.layers.10.self_attention.query_key_value.lora_B.weight", "base_model.model.transformer.encoder.layers.11.self_attention.query_key_value.lora_A.weight", "base_model.model.transformer.encoder.layers.11.self_attention.query_key_value.lora_B.weight", "base_model.model.transformer.encoder.layers.12.self_attention.query_key_value.lora_A.weight", "base_model.model.transformer.encoder.layers.12.self_attention.query_key_value.lora_B.weight", "base_model.model.transformer.encoder.layers.13.self_attention.query_key_value.lora_A.weight", "base_model.model.transformer.encoder.layers.13.self_attention.query_key_value.lora_B.weight", "base_model.model.transformer.encoder.layers.14.self_attention.query_key_value.lora_A.weight", "base_model.model.transformer.encoder.layers.14.self_attention.query_key_value.lora_B.weight", "base_model.model.transformer.encoder.layers.15.self_attention.query_key_value.lora_A.weight", "base_model.model.transformer.encoder.layers.15.self_attention.query_key_value.lora_B.weight", "base_model.model.transformer.encoder.layers.16.self_attention.query_key_value.lora_A.weight", "base_model.model.transformer.encoder.layers.16.self_attention.query_key_value.lora_B.weight", "base_model.model.transformer.encoder.layers.17.self_attention.query_key_value.lora_A.weight", "base_model.model.transformer.encoder.layers.17.self_attention.query_key_value.lora_B.weight", "base_model.model.transformer.encoder.layers.18.self_attention.query_key_value.lora_A.weight", "base_model.model.transformer.encoder.layers.18.self_attention.query_key_value.lora_B.weight", "base_model.model.transformer.encoder.layers.19.self_attention.query_key_value.lora_A.weight", "base_model.model.transformer.encoder.layers.19.self_attention.query_key_value.lora_B.weight", "base_model.model.transformer.encoder.layers.20.self_attention.query_key_value.lora_A.weight", "base_model.model.transformer.encoder.layers.20.self_attention.query_key_value.lora_B.weight", "base_model.model.transformer.encoder.layers.21.self_attention.query_key_value.lora_A.weight", "base_model.model.transformer.encoder.layers.21.self_attention.query_key_value.lora_B.weight", "base_model.model.transformer.encoder.layers.22.self_attention.query_key_value.lora_A.weight", "base_model.model.transformer.encoder.layers.22.self_attention.query_key_value.lora_B.weight", "base_model.model.transformer.encoder.layers.23.self_attention.query_key_value.lora_A.weight", "base_model.model.transformer.encoder.layers.23.self_attention.query_key_value.lora_B.weight", "base_model.model.transformer.encoder.layers.24.self_attention.query_key_value.lora_A.weight", "base_model.model.transformer.encoder.layers.24.self_attention.query_key_value.lora_B.weight", "base_model.model.transformer.encoder.layers.25.self_attention.query_key_value.lora_A.weight", "base_model.model.transformer.encoder.layers.25.self_attention.query_key_value.lora_B.weight", "base_model.model.transformer.encoder.layers.26.self_attention.query_key_value.lora_A.weight", "base_model.model.transformer.encoder.layers.26.self_attention.query_key_value.lora_B.weight", "base_model.model.transformer.encoder.layers.27.self_attention.query_key_value.lora_A.weight", "base_model.model.transformer.encoder.layers.27.self_attention.query_key_value.lora_B.weight".

请问解决了吗

model = PeftModel.from_pretrained(model, "weights/xxx")
model_dict = model.state_dict()
model_dict.update(torch.load("weights/xxx/adapter_model.bin"))
model.load_state_dict(model_dict)

勉强先这样解决,但是感觉训练时loss算的有问题,我loss一直训到后面全是0了,推理时才能看到效果。

我和 dragononly 老哥出现了一样的问题,大佬有遇到吗

我尝试了您的代码,出现了楼上同样的问题。请问怎么解决呢?

什么叫没效果?没见到一个人贴一下例子,用的什么数据训练、测试的什么例子、原始模型和微调之后模型的对比,什么都没有。我这里训练的好好的。

什么叫没效果?没见到一个人贴一下例子,用的什么数据训练、测试的什么例子、原始模型和微调之后模型的对比,什么都没有。我这里训练的好好的。

lora微调
我用了5000条领域问答faq 都不长 问+答一共256字符之类。sft的lr为1e-5
epoch为40。最后loss收敛到0.2
但是infer时模型回答的结果跟没学习差不多。
不知道是不是sft的数据量少了的缘故?chatglm6b学习不到知识的问题我也在别的github项目中看到不少issue 感觉很奇怪 理论上说能力这么强的模型 微调莫非需要足够大的数据集才能学会新知识吗?
您微调是使用了多大的数据量 lr和epoch设定多少呢?

@valkryhx 你测试过训练集中的qa的有明显效果吗?如果训练集中特有的模式都没有学到,那可能确实哪里有问题。

我使用的训练参数就是repo里面提供的默认值,甚至只学2 epochs。一般你的微调语料跟日常对话差别越大,你就越能看到效果,ChatGLM本身的对话效果就很强,所以你继续用少量的qa去微调,不一定看得出来。

@valkryhx 你测试过训练集中的qa的有明显效果吗?如果训练集中特有的模式都没有学到,那可能确实哪里有问题。

我使用的训练参数就是repo里面提供的默认值,甚至只学2 epochs。一般你的微调语料跟日常对话差别越大,你就越能看到效果,ChatGLM本身的对话效果就很强,所以你继续用少量的qa去微调,不一定看得出来。

可能是我的qa语料属于对话类 与chatglm原始训练语料太接近所致
我试试数学计算的语料看看。谢谢。

model = PeftModel.from_pretrained(model, "weights/xxx")
model_dict = model.state_dict()
model_dict.update(torch.load("weights/xxx/adapter_model.bin"))
model.load_state_dict(model_dict)

勉强先这样解决,但是感觉训练时loss算的有问题,我loss一直训到后面全是0了,推理时才能看到效果。

我基于baichuan-7b 微调的,也出现了lora_weight为零的情况,手工导入lora权重 看到了finetune的效果。

作者更新代码后,新版的代码按照教程微调有效果的

commented

微调没效果可以看看保存的adapter_model.bin文件时多大,记得检查是否和作者是同一个版本,peft新的版本按作者的写法并没有正确保存adapter_model.bin文件,要把
model.state_dict = (
lambda self, *_, **__: get_peft_model_state_dict(
self, old_state_dict() )
).get(model, type(model))
这段代码去掉即可保存成功

model = PeftModel.from_pretrained(model, "weights/xxx")
model_dict = model.state_dict()
model_dict.update(torch.load("weights/xxx/adapter_model.bin"))
model.load_state_dict(model_dict)

勉强先这样解决,但是感觉训练时loss算的有问题,我loss一直训到后面全是0了,推理时才能看到效果。

我和 dragononly 老哥出现了一样的问题,大佬有遇到吗

应该是peft版本的问题,试试0.2.0