[BUG] <title> 提交一个训练代码逻辑错误,代码位于MiniCPM-V/finetune/dataset.py 151行
是否已有关于该错误的issue或讨论? | Is there an existing issue / discussion for this?
- [X] 我已经搜索过已有的issues和讨论 | I have searched the existing issues / discussions
该问题是否在FAQ中有解答? | Is there an existing answer for this in FAQ?
- [X] 我已经搜索过FAQ | I have searched FAQ
当前行为 | Current Behavior
当前在代码走到146行的时候,是我们遇到了输入大于规定的最大长度,然后经过判断之后,进行截断; 然后 使用截断后的input_ids;然后在经过151行代码的时候必定会报错
The input length (9927) exceeds the model's maximum length (8192), so it has been truncated No tokens available to compute loss.
这个逻辑就是,我的输入长度超出了max_len,我们需要截断它,是为了不影响继续训练,我在训练qwenvl的时候,使用超出max_len的输入的时候,并没有遇到这个报错; 然后 现在代码中做了什么 截断了它,然后截断之后的input_ids长度为max_len,假设当前的input_ids全是有效token,这个时候context就是全是1, 146行 if torch.all(context) 就会进入判断,那么就会直接报错;前面截断过长token的意义也就没有了;
训练直接中断;
我认为 把if torch.all(context) 修改成 if not torch.any(context),只要context不全是0,那么input_ids里面就存在有效token,就可以进行loss计算;
但是我修改完之后又报了另一个错误,raise Exception("image start token != image end tokens") 我还在解决中,我想是截断之后出现的问题,可能你们更了解代码,更容易修复
期望行为 | Expected Behavior
希望在截断过长token之后依然可以进行训练;
复现方法 | Steps To Reproduce
只需要把max_len 也就是fintune_lora.sh中的MODEL_MAX_Length 设置成比你数据集文本长度要小的数值,进行测试即可;
运行环境 | Environment
- OS:
- Python:
- Transformers:
- PyTorch:
- CUDA (`python -c 'import torch; print(torch.version.cuda)'`):
备注 | Anything else?
111