SFT训练过程中的评估生成阶段(predict_with_generate=True时)能设置成padding_side="left",但保持训练时还是"right"吗? #9023
Unanswered
Androidest
asked this question in
Q&A
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
问题
基础模型: Qwen3, decoder-only transformer
训练阶段:SFT
我在TrainingArguments中设置了predict_with_generate=True,想着在训练过程中每隔 n 步评估一次生成,按最高‘eval_rouge-l’来保存模型。发现SFT在训练中和中间的评估生成中使用的都是一样的右侧填充。由于模型不是T5这种encoder+decoder的模型,decoder-only模型在评估生成时输入和生成的token之间隔着多个pad token。问题是:怎么设置训练时保持原来的右侧填充,但是途中介入的评估生成临时切换成左侧填充?支持吗?
我看到llamafactory和transformers里的data collator在做填充时都是以tokenizer.padding_side为准的,但好像没在这两个包里看到训练中评估生成时临时切换padding_side的地方。不知道是我自己看漏了,还是说本来没这个功能?🙏
复现方式
在LLaMA-Factory根目录下添加以下测试代码 test.py
然后在这个地方插入断点和打印未经修改的generated_tokens
LLaMA-Factory/src/llamafactory/train/sft/trainer.py
Line 107 in e22ac05
打印结果是:输入文本和生成文本中间隔着多个pad token
断点处打印attention_mask也显式的是右侧填充(评估和训练一样都是右侧)
看起来transformers包也在警告这个生成问题
Beta Was this translation helpful? Give feedback.
All reactions