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

训练能跑通了,但是我这边训练的人设好像没啥效果,是训练参数问题还是训练数据问题 #59

Open
jianxun168 opened this issue Mar 23, 2023 · 16 comments

Comments

@jianxun168
Copy link

jianxun168 commented Mar 23, 2023

我这边数据集格式是
{
"instruction": "你做为一个佛学人事,请回答下面问题",
"input": "宇宙人生的真相是什么?",
"output": " 空."
},
{
"instruction": "你做为一个佛学人事,请回答下面问题",
"input": "什么是空?",
"output": " 空为物,为极微之物."
},
调用方式是
input_text = "### Instruction:你做为一个佛学人事,请回答下面问题\n ### Input:有人说你是傻瓜?\n### Response:"
#input_text = "### Input:昨天与今天,我们该如何把握?\n### Response:"
batch = tokenizer(input_text, return_tensors="pt")
out = model.generate(
#input_ids=batch["input_ids"],
input_ids=batch["input_ids"],
eos_token_id=tokenizer.eos_token_id*2,
attention_mask=torch.ones_like(batch["input_ids"]).bool(),
max_length=512,
temperature=0.9
)
out_text = tokenizer.decode(out[0])
print(out_text)
回答的问题是

Instruction:你做为一个佛学人事,请回答下面问题

Input:什么是空??

Response: 空即是色,色即是空。佛教认为一切存在都是虚幻不实的,包括物质世界和心灵世界。因此,佛教不提倡追求物质财富和享受,而是提倡追求内心的平静和解脱。佛教中的“空”并不是指完全不存在,而是强调一切存在都是虚幻不实的,包括物质和精神层面。佛教中的“色”也并不是指物质世界,而是指的是一切存在都有产生和灭亡的过程,包括物质和精神层面。因此,佛教中的“空”和“色”并不是对立的概念,而是一种相对的概念。

这个回答和我训练集的相对应的数据好像一点也不一样,我不清楚是训练的参数不对还是训练集不对,能指教一下吗
训练的参数是
python finetune.py
--dataset_path /root/autodl-fs/data/alpaca
--lora_rank 8
--per_device_train_batch_size 1
--gradient_accumulation_steps 1
--max_steps 600
--save_steps 300
--save_total_limit 2
--learning_rate 2e-5
--fp16
--remove_unused_columns false
--logging_steps 50
--output_dir /root/autodl-fs/output,

@jianxun168 jianxun168 changed the title 如果我要用我的数据训练一个人设,数据集要如何配置,我这边训练好像没啥效果 训练能跑通了,但是我这边训练的人设好像没啥效果,是训练参数问题还是训练数据问题 Mar 23, 2023
@siriusctrl
Copy link

siriusctrl commented Mar 23, 2023

我个人体感只 finetune attention 效果是不太行的,我把 r 增加到 32 了,然后 finetune 所有 dense layer, 包括 attention 后的 dense 和 FFN. Loss 降低到差不多 2.5 左右,有一些效果。也可以确认一下是否 load 了正确的数据集。另一方面,我觉得 ChatGLM 原模型训练的太过了,只训练很少的 lora 可能很难把原本的模型扳过来。所以可能要非常贴切还是得 finetune 整个模型。

@jianxun168
Copy link
Author

谢谢,r指的是训练参数中的--lora_rank 8 吗?我刚学习,参数还不太搞的明白用处了

@siriusctrl
Copy link

siriusctrl commented Mar 23, 2023

谢谢,r指的是训练参数中的--lora_rank 8 吗?我刚学习,参数还不太搞的明白用处了

是的,我的 LoRa config 如下

peft_config = LoraConfig(
    task_type=TaskType.CAUSAL_LM,
    inference_mode=False,
    r=32,
    lora_alpha=32,
    lora_dropout=0.1,
    target_modules=["query_key_value", "dense", "dense_h_to_4h", "dense_4h_to_h"],
)

需要同步的改 Inference 代码里面的 LoRA Config

@jianxun168
Copy link
Author

好的,谢谢,我再试一下

@jianxun168
Copy link
Author

谢谢,r指的是训练参数中的--lora_rank 8 吗?我刚学习,参数还不太搞的明白用处了

是的,我的 LoRa config 如下

peft_config = LoraConfig(
    task_type=TaskType.CAUSAL_LM,
    inference_mode=False,
    r=32,
    lora_alpha=32,
    lora_dropout=0.1,
    target_modules=["query_key_value", "dense", "dense_h_to_4h", "dense_4h_to_h"],
)

需要同步的改 Inference 代码里面的 LoRA Config

你好,我加上这个target_modules=["query_key_value", "dense", "dense_h_to_4h", "dense_4h_to_h"],训练后,调用infer.ipynb会报错,这个参数的作用是啥?可以不加的吧

@EnHuiPug
Copy link

lora是为了调linear层,这个参数的意思调哪些linear层

@siriusctrl
Copy link

这个是调更多的 linear,如果说你训练的时候也 inject 了这些 lora,那么你推理的时候也需要这些

@jianxun168
Copy link
Author

这个是调更多的 linear,如果说你训练的时候也 inject 了这些 lora,那么你推理的时候也需要这些
谢谢回复,我还有问题就是
如果我训练用了target_modules=["query_key_value", "dense", "dense_h_to_4h", "dense_4h_to_h"],推理的时候怎么使用的?有相关的文档吗?

@siriusctrl
Copy link

这个是调更多的 linear,如果说你训练的时候也 inject 了这些 lora,那么你推理的时候也需要这些
谢谢回复,我还有问题就是
如果我训练用了target_modules=["query_key_value", "dense", "dense_h_to_4h", "dense_4h_to_h"],推理的时候怎么使用的?有相关的文档吗?

只需要推理的时候也增加这些就可以了,我这边是能正确 inference 的

@jianxun168
Copy link
Author

这个是调更多的 linear,如果说你训练的时候也 inject 了这些 lora,那么你推理的时候也需要这些
谢谢回复,我还有问题就是
如果我训练用了target_modules=["query_key_value", "dense", "dense_h_to_4h", "dense_4h_to_h"],推理的时候怎么使用的?有相关的文档吗?

只需要推理的时候也增加这些就可以了,我这边是能正确 inference 的

谢谢回复,我这边也能推理了,但是和.json文件的答复还是不一样,感觉训练后的人设没立起来,估计训练量不够或文本量不够

@cincinno
Copy link

谢谢,r指的是训练参数中的--lora_rank 8 吗?我刚学习,参数还不太搞的明白用处了

是的,我的 LoRa config 如下

peft_config = LoraConfig(
    task_type=TaskType.CAUSAL_LM,
    inference_mode=False,
    r=32,
    lora_alpha=32,
    lora_dropout=0.1,
    target_modules=["query_key_value", "dense", "dense_h_to_4h", "dense_4h_to_h"],
)

需要同步的改 Inference 代码里面的 LoRA Config

我尝试了 target_modules=["query_key_value"]和 target_modules=["query_key_value", "dense", "dense_h_to_4h", "dense_4h_to_h"]两种方式各在我的训练集上训练了一个epoch,其中前者正确训练出了人设,后者好像没有任何影响,可以详细说说这几个参数的意义吗(或者相关文档),谢谢了

@zhongtao93
Copy link

这个是调更多的 linear,如果说你训练的时候也 inject 了这些 lora,那么你推理的时候也需要这些
谢谢回复,我还有问题就是
如果我训练用了target_modules=["query_key_value", "dense", "dense_h_to_4h", "dense_4h_to_h"],推理的时候怎么使用的?有相关的文档吗?

只需要推理的时候也增加这些就可以了,我这边是能正确 inference 的

谢谢回复,我这边也能推理了,但是和.json文件的答复还是不一样,感觉训练后的人设没立起来,估计训练量不够或文本量不够

请教一下,你现在是用了多少的数据量

@xiaoweiweixiao
Copy link

谢谢,r指的是训练参数中的--lora_rank 8 吗?我刚学习,参数还不太搞的明白用处了

是的,我的 LoRa config 如下

peft_config = LoraConfig(
    task_type=TaskType.CAUSAL_LM,
    inference_mode=False,
    r=32,
    lora_alpha=32,
    lora_dropout=0.1,
    target_modules=["query_key_value", "dense", "dense_h_to_4h", "dense_4h_to_h"],
)

需要同步的改 Inference 代码里面的 LoRA Config

我尝试了 target_modules=["query_key_value"]和 target_modules=["query_key_value", "dense", "dense_h_to_4h", "dense_4h_to_h"]两种方式各在我的训练集上训练了一个epoch,其中前者正确训练出了人设,后者好像没有任何影响,可以详细说说这几个参数的意义吗(或者相关文档),谢谢了

可以分享一下所用的训练数据中有关某一人设的数据用了多少条吗?

@Stupid-Ai
Copy link

epoch设置多一点、我使用五条对话训练了100epoch才让模型记住了

@jianxun168
Copy link
Author

200条数据的样子

@CP-AI-CODE
Copy link

请问target_modules=["query_key_value", "dense", "dense_h_to_4h", "dense_4h_to_h"]中后三个参数的意思是什么

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

No branches or pull requests

8 participants