OpenBMB / MiniCPM-V

MiniCPM-Llama3-V 2.5: A GPT-4V Level Multimodal LLM on Your Phone
Apache License 2.0
7.86k stars 547 forks source link

[BUG] <title>MiniCPM-V2.0不支持zero3全量微调 #268

Open daihuidai opened 3 weeks ago

daihuidai commented 3 weeks ago

一台机器,两张4090;一台机器,两张3090

v2.0在zero2下使用lora或者不适用lora仅训练vpm+resampler都是没问题的,但是一旦改成zero3就会报错;这个问题似乎只在v2.0上有。当我训练MiniCPM-V2.5使用zero3时可以正常运行并没有什么问题。 所以我觉得这可能是v2.0使用zero3的bug,在群里反馈也有人遇到同样的问题,不知道是否可以解决下。

1SingleFeng commented 2 weeks ago

您好,您说的是哪个群,请问能分享一下吗

daihuidai commented 2 weeks ago

@1SingleFeng 你好,就是MiniCPM-V-16群。只要2.0使用zero3就报下面这个错:

image

请问这个是代码还是环境原因呢

qyc-98 commented 2 weeks ago

您好这个是代码问题,我们会更新huggingface的代码,如果着急您可以直接前往页面找到对应的pr修改自己的模型文件进行微调

daihuidai commented 2 weeks ago

感谢回复,期待你们的更新,我这边也找对应pr尝试下

daihuidai commented 2 weeks ago

@1SingleFeng 你好,我根据pr修改了两个文件的代码出现了新的报错信息: image

这似乎是模型的张量处理的问题,请问是哪里的问题呢

1SingleFeng commented 2 weeks ago

@1SingleFeng 你好,我根据pr修改了两个文件的代码出现了新的报错信息: image

这似乎是模型的张量处理的问题,请问是哪里的问题呢

你好,我暂时用不上minicpmv-2,所以对这些问题不太了解

daihuidai commented 2 weeks ago

@qyc-98 你好,请问上面这个报错是新代码的问题还是,什么原因呢

qyc-98 commented 2 weeks ago

您好 如果您使用的是minicpmv2 您可以参考咱们这个仓库里的pr,里面对trainer等部分做了修改 https://github.com/OpenBMB/MiniCPM-V/pull/273

daihuidai commented 2 weeks ago

@qyc-98 你好,我按照pr也修改了trainer,这边依旧还是报上面第一个RunningError错误,但并没有出现后面的AssertionError错误,我检查了修改代码确实是按照pr的修改了,目前希望官方能够早点更新整体代码吧

qyc-98 commented 2 weeks ago

你目前的报错是什么呢

daihuidai commented 2 weeks ago

@qyc-98 目前的报错信息如下: image

我的ds.sh参数如下: image

没有出现之前的AssertionError错误了。

MrToy commented 2 weeks ago

bump, finetune with swift

qyc-98 commented 2 weeks ago

@daihuidai 您好我目前对代码做了修改,这个bug的原因是vpm的pos_embed没有被deepspeed调用起来,导致forward和backward都需要强制的召唤这部分参数,模型代码里我们进行了修改,但是在trainer的代码里也需要做修改,目前我自己的pr是做了这个修改 你可以参考这个 https://github.com/OpenBMB/MiniCPM-V/pull/273 ,后续我们会更新到主分支里 I have made some modifications to the code. The cause of the bug was that the pos_embed of the VPM was not being invoked by DeepSpeed, resulting in both the forward and backward passes requiring explicit calls to this part of the parameters. We have made modifications in the model code, but changes are also needed in the trainer code. I have already made these changes in my pull request, which has been successfully executed. You can refer to it. We will update it to the main branch subsequently.

daihuidai commented 2 weeks ago

@qyc-98 你好,我似乎又发现问题了......,我按照最新的pr又修改了trainer的代码,目前并没有报错直接退出程序,但是出现了下面的报错信息,导致打印日志卡死在这里,并且显存一直被占用但没有变化,估计是程序卡死了。 image

并且问题比较大的是,我打印了训练开始时模型的参数信息,发现模型的shape变成了0。 image

从上面的权重信息里我还发现了上面你提到的vpm的pos_embed层确实有问题,因为在全量微调下它的grad居然是False。

daihuidai commented 2 weeks ago

@MrToy 你好,我试过swift,可以lora,但是没法full finetune,我是一台机器两张卡,当swift使用--lora_target_modules ALL --deepspeed default-zero3时会报错如下: DeepSpeed is not compatible with MP. n_gpu: 2, local_world_size: 1

daihuidai commented 1 week ago

@qyc-98 请问Minicpmv2.0对zero3的支持有新的更新了吗