ChatGLM2-6B
ChatGLM2-6B copied to clipboard
lora 微调长文本,输出内容不断重复
Is your feature request related to a problem? Please describe.
No response
Solutions
lora微调长文本后,输出内容会有重新。 训练参数
CUDA_VISIBLE_DEVICES=1,2 torchrun --nproc_per_node 2 supervised_finetuning.py \
--model_type chatglm \
--model_name_or_path chatglm2-6b \
--train_file_dir ./data/finetune/report_generate \
--per_device_train_batch_size 1 \
--per_device_eval_batch_size 1 \
--do_train \
--do_eval \
--use_peft True \
--fp16 \
--max_train_samples 1000 \
--max_eval_samples 10 \
--num_train_epochs 10 \
--learning_rate 2e-5 \
--warmup_ratio 0.05 \
--weight_decay 0.05 \
--logging_strategy steps \
--logging_steps 10 \
--eval_steps 50 \
--evaluation_strategy steps \
--save_steps 500 \
--save_strategy steps \
--save_total_limit 3 \
--gradient_accumulation_steps 1 \
--preprocessing_num_workers 1 \
--max_source_length 50 \
--max_target_length 1000 \
--output_dir outputs-sft-v1 \
--overwrite_output_dir \
--ddp_timeout 30000 \
--logging_first_step True \
--target_modules all \
--lora_rank 8 \
--lora_alpha 16 \
--lora_dropout 0.05 \
--torch_dtype float16 \
--device_map auto \
--report_to tensorboard \
--ddp_find_unused_parameters False \
--gradient_checkpointing True
微调完成后,输出效果(不是每次输出都有重复的)。
Additional context
No response
+1,全参数SFT之后也会出现这种情况,希望有大佬解读
检查下微调代码,eos_id对不对
我也遇到了相似的问题,在用自己的数据进行微调之后,有的能停止,有的会在后边不断重复 正确的例子:剩余电量还能达到老公家吗? 错误的例子:设置途经点成都行吗途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点
检查下微调代码,eos_id对不对
你的意思是指 训练阶段的eos_id和推理阶段的eos_id不一致导致的嘛?
排查了很长时间,觉得可能是ChatGLM-Efficient-Tuning/src/utils/data_collator.py
中的140行到中对labels
进行处理的部分出了问题。
因为ChatGLM2-6B中eos_id和pad_token_id的值是一样的,都是2。导致最终labels
的eos_id
被替换成了-100,从而不能停下
具体是否有用正在修改,修改成功与否都会追加回答
排查了很长时间,觉得可能是
ChatGLM-Efficient-Tuning/src/utils/data_collator.py
中的140行到中对labels
进行处理的部分出了问题。 因为ChatGLM2-6B中eos_id和pad_token_id的值是一样的,都是2。导致最终labels
的eos_id
被替换成了-100,从而不能停下具体是否有用正在修改,修改成功与否都会追加回答
解决方案找到啦:ChatGLM-Efficient-Tuning/src/utils/data_collator.py
141行添加如下代码。
@shenhongdeng ChatGLM2-6B 的 eos_token_id 和 pad_token_id 不同 https://huggingface.co/THUDM/chatglm2-6b/blob/main/config.json#L39-L40
@shenhongdeng ChatGLM2-6B 的 eos_token_id 和 pad_token_id 不同 https://huggingface.co/THUDM/chatglm2-6b/blob/main/config.json#L39-L40
glm2中eos_token_id
改了,改成可tokenizer.tokenizer.eos_id
他们两个的值都是2
@shenhongdeng 用 Huggingface 最新代码测试的,你的代码是最新版吗
@hiyouga 我使用的并不是最新的版本,是最早发布的版本。在我使用的版本中出问题的关键原因是,eos_token_id
和pad_token_id
一样,都是2。代码中在140在对label进行处理的时候,将pad_token_id
全部替换为ignore(-100)的时候 将eos_token_id
也替换成了-100。从而导致label最终没有eos_id
从而不能停止。目前参考前边进行修改,我已经能够正常停止,不再产生停止不能重复的情况。
希望我的办法能够帮到你
@shenhongdeng 我认为我们应该使用最新的代码,并且我的微调框架理论上仅支持最新版本的模型
你好,能看一下你的loss曲线吗
@shenhongdeng 用 Huggingface 最新代码测试的,你的代码是最新版吗
最新版也会出现这问题啊。。
建议ChatGLM2做一些发行版本,因为从中间取代码经常会出现各种各样的问题。
@shenhongdeng 用 Huggingface 最新代码测试的,你的代码是最新版吗
最新版也会出现这问题啊。。
使用官方的p-tuning脚本进行训练和推理,用上图的方法检查,训练和推理时都有tok.eos_token_id=2, tok.pad_token_id=0, 也会出现输出内容不断重复的问题
@shenhongdeng 用 Huggingface 最新代码测试的,你的代码是最新版吗
最新版也会出现这问题啊。。
使用官方的p-tuning脚本进行训练和推理,用上图的方法检查,训练和推理时都有tok.eos_token_id=2, tok.pad_token_id=0, 也会出现输出内容不断重复的问题
请问有解决吗,我全量微调也碰到这种问题,生成重复以及无法停止
@shenhongdeng 用 Huggingface 最新代码测试的,你的代码是最新版吗
最新版也会出现这问题啊。。
使用官方的p-tuning脚本进行训练和推理,用上图的方法检查,训练和推理时都有tok.eos_token_id=2, tok.pad_token_id=0, 也会出现输出内容不断重复的问题
请问有解决吗,我全量微调也碰到这种问题,生成重复以及无法停止
请问这个问题目前有解决方案或者处理思路吗?我也遇到了相同的问题,训练LoRA后也出现了生成重复内容 + 无法停止,只能kill掉服务并重启,使服务变得不可用了。
@shenhongdeng 用 Huggingface 最新代码测试的,你的代码是最新版吗
最新版也会出现这问题啊。。
使用官方的p-tuning脚本进行训练和推理,用上图的方法检查,训练和推理时都有tok.eos_token_id=2, tok.pad_token_id=0, 也会出现输出内容不断重复的问题
请问有解决吗,我全量微调也碰到这种问题,生成重复以及无法停止
请问这个问题目前有解决方案或者处理思路吗?我也遇到了相同的问题,训练LoRA后也出现了生成重复内容 + 无法停止,只能kill掉服务并重启,使服务变得不可用了。
我用的不是最新版本的,但是一般出现这种不能停止的情况,应该检查在data collator
构建数据input ids
时,是否添加了eos token
,一般是微调的数据的input ids
最后没有添加eos token
才会导致这种情况。自己可以debug看一下每一步input ids
的变化情况,检查一下后边是否带有eos token
。
+1,使用lora微调后遇到了同样的问题,模型回答一直重复且无法打断
@yysirs 你好,请问你这个回答重复的问题解决了吗?
+1
想问一下chatglm 的ptuning也遇到这个问题了,该如何解决呢