ChatGLM2-6B icon indicating copy to clipboard operation
ChatGLM2-6B copied to clipboard

lora 微调长文本,输出内容不断重复

Open yysirs opened this issue 11 months ago • 22 comments

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

微调完成后,输出效果(不是每次输出都有重复的)。 4aa789e023bd4f70511c90be8ae1e61

Additional context

No response

yysirs avatar Jul 10 '23 10:07 yysirs

+1,全参数SFT之后也会出现这种情况,希望有大佬解读

tarnish233 avatar Jul 11 '23 02:07 tarnish233

检查下微调代码,eos_id对不对

FrankWhh avatar Jul 12 '23 02:07 FrankWhh

我也遇到了相似的问题,在用自己的数据进行微调之后,有的能停止,有的会在后边不断重复 正确的例子:剩余电量还能达到老公家吗? 错误的例子:设置途经点成都行吗途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点吧途经点

shenhongdeng avatar Jul 12 '23 08:07 shenhongdeng

检查下微调代码,eos_id对不对

你的意思是指 训练阶段的eos_id和推理阶段的eos_id不一致导致的嘛?

yysirs avatar Jul 13 '23 08:07 yysirs

排查了很长时间,觉得可能是ChatGLM-Efficient-Tuning/src/utils/data_collator.py中的140行到中对labels进行处理的部分出了问题。 因为ChatGLM2-6B中eos_id和pad_token_id的值是一样的,都是2。导致最终labelseos_id被替换成了-100,从而不能停下 截屏2023-07-14 15 02 06 具体是否有用正在修改,修改成功与否都会追加回答

shenhongdeng avatar Jul 14 '23 07:07 shenhongdeng

排查了很长时间,觉得可能是ChatGLM-Efficient-Tuning/src/utils/data_collator.py中的140行到中对labels进行处理的部分出了问题。 因为ChatGLM2-6B中eos_id和pad_token_id的值是一样的,都是2。导致最终labelseos_id被替换成了-100,从而不能停下 截屏2023-07-14 15 02 06 具体是否有用正在修改,修改成功与否都会追加回答

解决方案找到啦:ChatGLM-Efficient-Tuning/src/utils/data_collator.py141行添加如下代码。 截屏2023-07-15 01 05 45

shenhongdeng avatar Jul 14 '23 17:07 shenhongdeng

@shenhongdeng ChatGLM2-6B 的 eos_token_id 和 pad_token_id 不同 https://huggingface.co/THUDM/chatglm2-6b/blob/main/config.json#L39-L40

hiyouga avatar Jul 17 '23 08:07 hiyouga

@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 avatar Jul 17 '23 15:07 shenhongdeng

@shenhongdeng 用 Huggingface 最新代码测试的,你的代码是最新版吗 image

hiyouga avatar Jul 18 '23 08:07 hiyouga

@hiyouga 我使用的并不是最新的版本,是最早发布的版本。在我使用的版本中出问题的关键原因是,eos_token_idpad_token_id一样,都是2。代码中在140在对label进行处理的时候,将pad_token_id全部替换为ignore(-100)的时候 将eos_token_id也替换成了-100。从而导致label最终没有eos_id从而不能停止。目前参考前边进行修改,我已经能够正常停止,不再产生停止不能重复的情况。 截屏2023-07-18 16 33 26 希望我的办法能够帮到你

shenhongdeng avatar Jul 18 '23 08:07 shenhongdeng

@shenhongdeng 我认为我们应该使用最新的代码,并且我的微调框架理论上仅支持最新版本的模型

hiyouga avatar Jul 18 '23 08:07 hiyouga

你好,能看一下你的loss曲线吗

QJShan avatar Jul 18 '23 09:07 QJShan

@shenhongdeng 用 Huggingface 最新代码测试的,你的代码是最新版吗 image

最新版也会出现这问题啊。。

mavisyyc avatar Jul 20 '23 03:07 mavisyyc

建议ChatGLM2做一些发行版本,因为从中间取代码经常会出现各种各样的问题。

dijkstra-mose avatar Jul 31 '23 06:07 dijkstra-mose

@shenhongdeng 用 Huggingface 最新代码测试的,你的代码是最新版吗 image

最新版也会出现这问题啊。。

使用官方的p-tuning脚本进行训练和推理,用上图的方法检查,训练和推理时都有tok.eos_token_id=2, tok.pad_token_id=0, 也会出现输出内容不断重复的问题

vhwzx avatar Aug 02 '23 07:08 vhwzx

@shenhongdeng 用 Huggingface 最新代码测试的,你的代码是最新版吗 image

最新版也会出现这问题啊。。

使用官方的p-tuning脚本进行训练和推理,用上图的方法检查,训练和推理时都有tok.eos_token_id=2, tok.pad_token_id=0, 也会出现输出内容不断重复的问题

请问有解决吗,我全量微调也碰到这种问题,生成重复以及无法停止

Chevalier1024 avatar Aug 04 '23 11:08 Chevalier1024

@shenhongdeng 用 Huggingface 最新代码测试的,你的代码是最新版吗 image

最新版也会出现这问题啊。。

使用官方的p-tuning脚本进行训练和推理,用上图的方法检查,训练和推理时都有tok.eos_token_id=2, tok.pad_token_id=0, 也会出现输出内容不断重复的问题

请问有解决吗,我全量微调也碰到这种问题,生成重复以及无法停止

请问这个问题目前有解决方案或者处理思路吗?我也遇到了相同的问题,训练LoRA后也出现了生成重复内容 + 无法停止,只能kill掉服务并重启,使服务变得不可用了。

qinyuenlp avatar Aug 08 '23 01:08 qinyuenlp

@shenhongdeng 用 Huggingface 最新代码测试的,你的代码是最新版吗 image

最新版也会出现这问题啊。。

使用官方的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

shenhongdeng avatar Aug 08 '23 02:08 shenhongdeng

+1,使用lora微调后遇到了同样的问题,模型回答一直重复且无法打断

wufxgtihub123 avatar Aug 15 '23 10:08 wufxgtihub123

@yysirs 你好,请问你这个回答重复的问题解决了吗?

wufxgtihub123 avatar Aug 15 '23 10:08 wufxgtihub123

+1

soultrans avatar Sep 27 '23 12:09 soultrans

想问一下chatglm 的ptuning也遇到这个问题了,该如何解决呢

white-0629 avatar Apr 07 '24 09:04 white-0629