align-anything icon indicating copy to clipboard operation
align-anything copied to clipboard

[BUG] janus t2i finetune error

Open hl0737 opened this issue 9 months ago • 19 comments

Required prerequisites

What version of align-anything are you using?

0.0.1.dev0

System information

官方安装流程,单节点8卡a800训练,128个训练样本,首先使用pre tokenizer转换为pt文件,把pt文件路径放到sft的训练脚本中,启动训练

MODEL_NAME_OR_PATH="/mnt/data_vlm/models/Janus-Pro-1B" TRAIN_DATASETS="/mnt/data_vlm/liang.hu/janus_train/sft_imagegen_data/" TRAIN_DATA_FILE="train.pt" OUTPUT_DIR="/mnt/data_vlm/liang.hu/janus_train/output/" JANUS_REPO_PATH="/mnt/data_vlm/liang.hu/Janus"

export PYTHONPATH=$PYTHONPATH:$JANUS_REPO_PATH export WANDB_API_KEY="xxx" export WANDB_PROJECT="Janus" export WANDB_NAME="xxx" export WANDB_MODE=online

Source the setup script

source ./setup.sh

Execute deepspeed command

deepspeed
--master_port ${MASTER_PORT}
--module align_anything.trainers.janus.sft
--model_name_or_path ${MODEL_NAME_OR_PATH}
--train_datasets ${TRAIN_DATASETS}
--train_data_files ${TRAIN_DATA_FILE}
--train_split train
--learning_rate 2e-5
--epochs 1
--weight_decay 0.1
--adam_beta1 0.9
--adam_beta2 0.95
--lr_scheduler_type constant
--output_dir ${OUTPUT_DIR}

Problem description

报错

[rank1]: Traceback (most recent call last): [rank1]: File "", line 198, in _run_module_as_main [rank1]: File "", line 88, in _run_code [rank1]: File "/mnt/data_vlm/liang.hu/align-anything/align_anything/trainers/janus/sft.py", line 118, in [rank1]: sys.exit(main()) [rank1]: ^^^^^^ [rank1]: File "/mnt/data_vlm/liang.hu/align-anything/align_anything/trainers/janus/sft.py", line 113, in main [rank1]: trainer.train() [rank1]: File "/mnt/data_vlm/liang.hu/align-anything/align_anything/trainers/text_to_text/sft.py", line 143, in train [rank1]: info = self.train_step(batch) [rank1]: ^^^^^^^^^^^^^^^^^^^^^^ [rank1]: File "/mnt/data_vlm/liang.hu/align-anything/align_anything/trainers/text_to_text/sft.py", line 102, in train_step [rank1]: loss = self.loss(sft_batch)['loss'] [rank1]: ^^^^^^^^^^^^^^^^^^^^ [rank1]: File "/mnt/data_vlm/liang.hu/align-anything/align_anything/trainers/janus/sft.py", line 82, in loss [rank1]: outputs = self.model.forward(**sft_batch, task=sft_batch['task']) [rank1]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [rank1]: TypeError: deepspeed.utils.nvtx.instrument_w_nvtx..wrapped_fn() got multiple values for keyword argument 'task'

Reproducible example code

The Python snippets:


Command lines:


Extra dependencies:


Steps to reproduce:

Traceback


Expected behavior

No response

Additional context

No response

hl0737 avatar Apr 20 '25 09:04 hl0737

我看这个类 class SupervisedBatch(TypedDict, total=True): input_ids: torch.LongTensor # size = (B, L) labels: torch.LongTensor # size = (B, L) attention_mask: torch.BoolTensor # size = (B, L) pixel_values: torch.LongTensor | None # size = (B, C, H, W) task: str

已经包含task这个属性了,为啥forward方法又单独传一次,貌似传重复了就报错了= =然后我把forward里面的task这个key去掉,又报下面的错误= =

[rank1]: Traceback (most recent call last): [rank1]: File "", line 198, in _run_module_as_main [rank1]: File "", line 88, in _run_code [rank1]: File "/mnt/data_vlm/liang.hu/align-anything/align_anything/trainers/janus/sft.py", line 118, in [rank1]: sys.exit(main()) [rank1]: ^^^^^^ [rank1]: File "/mnt/data_vlm/liang.hu/align-anything/align_anything/trainers/janus/sft.py", line 113, in main [rank1]: trainer.train() [rank1]: File "/mnt/data_vlm/liang.hu/align-anything/align_anything/trainers/text_to_text/sft.py", line 143, in train [rank1]: info = self.train_step(batch) [rank1]: ^^^^^^^^^^^^^^^^^^^^^^ [rank1]: File "/mnt/data_vlm/liang.hu/align-anything/align_anything/trainers/text_to_text/sft.py", line 102, in train_step [rank1]: loss = self.loss(sft_batch)['loss'] [rank1]: ^^^^^^^^^^^^^^^^^^^^ [rank1]: File "/mnt/data_vlm/liang.hu/align-anything/align_anything/trainers/janus/sft.py", line 82, in loss [rank1]: outputs = self.model.forward(**sft_batch) [rank1]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [rank1]: File "/mnt/data_vlm/liang.hu/conda/envs/align-anything/lib/python3.11/site-packages/deepspeed/utils/nvtx.py", line 20, in wrapped_fn [rank1]: ret_val = func(*args, **kwargs) [rank1]: ^^^^^^^^^^^^^^^^^^^^^ [rank1]: File "/mnt/data_vlm/liang.hu/conda/envs/align-anything/lib/python3.11/site-packages/deepspeed/runtime/engine.py", line 2054, in forward [rank1]: loss = self.module(*inputs, **kwargs) [rank1]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [rank1]: File "/mnt/data_vlm/liang.hu/conda/envs/align-anything/lib/python3.11/site-packages/torch/nn/modules/module.py", line 1739, in _wrapped_call_impl [rank1]: return self._call_impl(*args, **kwargs) [rank1]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [rank1]: File "/mnt/data_vlm/liang.hu/conda/envs/align-anything/lib/python3.11/site-packages/torch/nn/modules/module.py", line 1845, in _call_impl [rank1]: return inner() [rank1]: ^^^^^^^ [rank1]: File "/mnt/data_vlm/liang.hu/conda/envs/align-anything/lib/python3.11/site-packages/torch/nn/modules/module.py", line 1793, in inner [rank1]: result = forward_call(*args, **kwargs) [rank1]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [rank1]: TypeError: _forward_unimplemented() got an unexpected keyword argument 'input_ids'

Image

这个model.forward应该怎么跟进去= =看不见代码了

麻烦帮看下,thanks~

hl0737 avatar Apr 20 '25 10:04 hl0737

感谢您的提问!我们正在复现问题,初步判断原因是Janus系列模型的支持实现时间相对较早,在后续框架的版本迭代中疏于维护导致self.model类型错误,我们复现问题后会第一时间进行更正并在issue内update相关信息,感谢海涵!

htlou avatar Apr 20 '25 16:04 htlou

好的好的,非常感谢!麻烦高优看下!最近有个工作非常依赖janus的t2i训练,麻烦了!或者有什么我这边需要帮忙的也ok,我可以直接contribution 😅

hl0737 avatar Apr 20 '25 17:04 hl0737

tips: 我训练的是pro模型,不过跟24年10月份的janus架构应该是一样的,我理解只是训练strategy和模型参数变了下, thx

hl0737 avatar Apr 20 '25 17:04 hl0737

感谢您的提问!我们正在复现问题,初步判断原因是Janus系列模型的支持实现时间相对较早,在后续框架的版本迭代中疏于维护导致self.model类型错误,我们复现问题后会第一时间进行更正并在issue内update相关信息,感谢海涵!

[https://github.com/htlou/Align_Anything_Janus/blob/main/janus/models/modeling_vlm.py 中新的forward仅关注了generation部分的代码,但是关于understanding仅显示调用父类代码,就会出现问题。

125jx avatar Apr 21 '25 07:04 125jx

感谢您的提问!我们正在复现问题,初步判断原因是Janus系列模型的支持实现时间相对较早,在后续框架的版本迭代中疏于维护导致self.model类型错误,我们复现问题后会第一时间进行更正并在issue内update相关信息,感谢海涵!

[https://github.com/htlou/Align_Anything_Janus/blob/main/janus/models/modeling_vlm.py 中新的forward仅关注了generation部分的代码,但是关于understanding仅显示调用父类代码,就会出现问题。

我擦咧,怎么还有这个仓库,宝藏啊,为什么这个里面有个forward方法,我看官方的janus没有,是作者自己撸的么?

hl0737 avatar Apr 21 '25 09:04 hl0737

哦!!!是不是janus的代码得用这个仓库的,不能用官方的啊?我用的janus是官方仓库

hl0737 avatar Apr 21 '25 09:04 hl0737

感谢您的提问!我们正在复现问题,初步判断原因是Janus系列模型的支持实现时间相对较早,在后续框架的版本迭代中疏于维护导致self.model类型错误,我们复现问题后会第一时间进行更正并在issue内update相关信息,感谢海涵!

[https://github.com/htlou/Align_Anything_Janus/blob/main/janus/models/modeling_vlm.py 中新的forward仅关注了generation部分的代码,但是关于understanding仅显示调用父类代码,就会出现问题。

我擦咧,怎么还有这个仓库,宝藏啊,为什么这个里面有个forward方法,我看官方的janus没有,是作者自己撸的么?

但是我在进行understanding 时候会报错,如果你有新的想法,可以讨论一下

125jx avatar Apr 21 '25 10:04 125jx

感谢您的提问!我们正在复现问题,初步判断原因是Janus系列模型的支持实现时间相对较早,在后续框架的版本迭代中疏于维护导致self.model类型错误,我们复现问题后会第一时间进行更正并在issue内update相关信息,感谢海涵!

[https://github.com/htlou/Align_Anything_Janus/blob/main/janus/models/modeling_vlm.py 中新的forward仅关注了generation部分的代码,但是关于understanding仅显示调用父类代码,就会出现问题。

我擦咧,怎么还有这个仓库,宝藏啊,为什么这个里面有个forward方法,我看官方的janus没有,是作者自己撸的么?

但是我在进行understanding 时候会报错,如果你有新的想法,可以讨论一下

我目前倒是不需要understanding,你的意思是,janus如果用这个仓库generation是跑的通的?understanding那块我过两天要开始训练,我一起看下吧,看下这个仓库跟官方仓库的不同~~感谢!

hl0737 avatar Apr 21 '25 11:04 hl0737

它这个生成还有个比较麻烦的地方,它训练不知道用了cfg没有,推理侧是用了cfg的= =我是搞不懂一个ar模型为啥要用diffusion的东西= =囧

hl0737 avatar Apr 21 '25 11:04 hl0737

感谢您的提问!我们正在复现问题,初步判断原因是Janus系列模型的支持实现时间相对较早,在后续框架的版本迭代中疏于维护导致self.model类型错误,我们复现问题后会第一时间进行更正并在issue内update相关信息,感谢海涵!

[https://github.com/htlou/Align_Anything_Janus/blob/main/janus/models/modeling_vlm.py 中新的forward仅关注了generation部分的代码,但是关于understanding仅显示调用父类代码,就会出现问题。

我擦咧,怎么还有这个仓库,宝藏啊,为什么这个里面有个forward方法,我看官方的janus没有,是作者自己撸的么?

但是我在进行understanding 时候会报错,如果你有新的想法,可以讨论一下

它这个understanding我觉得自己写也非常好写,就是过一个siglip然后adaptor然后llm然后head出来算交叉熵就行~~

hl0737 avatar Apr 21 '25 11:04 hl0737

它这个生成还有个比较麻烦的地方,它训练不知道用了cfg没有,推理侧是用了cfg的= =我是搞不懂一个ar模型为啥要用diffusion的东西= =囧

它训练居然也是用cfg训练的= =碉堡了。。。

hl0737 avatar Apr 21 '25 11:04 hl0737

感谢您的提问!我们正在复现问题,初步判断原因是Janus系列模型的支持实现时间相对较早,在后续框架的版本迭代中疏于维护导致self.model类型错误,我们复现问题后会第一时间进行更正并在问题内更新相关信息感谢,海涵!

[https://github.com/htlou/Align_Anything_Janus/blob/main/janus/models/modeling_vlm.py 中新的forward仅关注了代部分的代码,但是关于理解仅显示调用父类代码,就会出现问题。

我擦擦,怎么还有这个仓库,宝藏啊,为什么这里面有个转发方法,我看官方的janus没有,是作者自己撸的么?

但是我在进行理解的时候会报错,如果你有新的想法,可以讨论一下

这个理解我觉得自己写也非常好写,就是过一个siglip然后adaptorllm然后head出来算交叉熵就行~~

是吗?我尝试自己写了代码但是存在问题,不知道您是否愿意分享一下您的版本

125jx avatar Apr 22 '25 01:04 125jx

感谢您的提问!我们正在复现问题,初步判断原因是Janus系列模型的支持实现时间相对较早,在后续框架的版本迭代中疏于维护导致self.model类型错误,我们复现问题后会第一时间进行更正并在问题内更新相关信息感谢,海涵!

[https://github.com/htlou/Align_Anything_Janus/blob/main/janus/models/modeling_vlm.py 中新的forward仅关注了代部分的代码,但是关于理解仅显示调用父类代码,就会出现问题。

我擦擦,怎么还有这个仓库,宝藏啊,为什么这里面有个转发方法,我看官方的janus没有,是作者自己撸的么?

但是我在进行理解的时候会报错,如果你有新的想法,可以讨论一下

这个理解我觉得自己写也非常好写,就是过一个siglip然后adaptorllm然后head出来算交叉熵就行~~

是吗?我尝试自己写了代码但是存在问题,不知道您是否愿意分享一下您的版本

我转到verl去了,后续要大规模分布式训练

hl0737 avatar Apr 22 '25 01:04 hl0737

后面我贴上来

hl0737 avatar Apr 22 '25 01:04 hl0737

后面我贴上来

感谢,不知道大概什么时间您方便分享呢?

125jx avatar Apr 22 '25 02:04 125jx

后面我贴上来

感谢,不知道大概什么时间您方便分享呢?

目前没定,我还在测试,等测试ok了就放,不然就尴尬了,哈哈

hl0737 avatar Apr 22 '25 02:04 hl0737

后面我贴上来

感谢,不知道大概什么时间您方便分享呢?

目前没定,我还在测试,等测试ok了就放,不然就尴尬了,哈哈

感谢您的提问!我们正在复现问题,初步判断原因是Janus系列模型的支持实现时间相对较早,在后续框架的版本迭代中疏于维护导致self.model类型错误,我们复现问题后会第一时间进行更正并在问题内更新相关信息感谢,海涵!

[https://github.com/htlou/Align_Anything_Janus/blob/main/janus/models/modeling_vlm.py 中新的forward仅关注了代部分的代码,但是关于理解仅显示调用父类代码,就会出现问题。

我擦擦,怎么还有这个仓库,宝藏啊,为什么这里面有个转发方法,我看官方的janus没有,是作者自己撸的么?

但是我在进行理解的时候会报错,如果你有新的想法,可以讨论一下

这个理解我觉得自己写也非常好写,就是过一个siglip然后adaptorllm然后head出来算交叉熵就行~~

非常抱歉,还是想打扰您一下,您说的先经过siglip,在经过adapter-->llm--->head-->交叉熵损失。输入是否已经不是inputs_id了呢?

125jx avatar Apr 27 '25 02:04 125jx

后面我贴上来

感谢,不知道大概什么时间您方便分享呢?

目前没定,我还在测试,等测试ok了就放,不然就尴尬了,哈哈

感谢您的提问!我们正在复现问题,初步判断原因是Janus系列模型的支持实现时间相对较早,在后续框架的版本迭代中疏于维护导致self.model类型错误,我们复现问题后会第一时间进行更正并在问题内更新相关信息感谢,海涵!

[https://github.com/htlou/Align_Anything_Janus/blob/main/janus/models/modeling_vlm.py 中新的forward仅关注了代部分的代码,但是关于理解仅显示调用父类代码,就会出现问题。

我擦擦,怎么还有这个仓库,宝藏啊,为什么这里面有个转发方法,我看官方的janus没有,是作者自己撸的么?

但是我在进行理解的时候会报错,如果你有新的想法,可以讨论一下

这个理解我觉得自己写也非常好写,就是过一个siglip然后adaptorllm然后head出来算交叉熵就行~~

非常抱歉,还是想打扰您一下,您说的先经过siglip,在经过adapter-->llm--->head-->交叉熵损失。输入是否已经不是inputs_id了呢?

文本部分还是input_ids,图像部分是一个<image_placeholder>的占位符,经过embedding以后用图像的embedding去替代

hl0737 avatar Apr 29 '25 07:04 hl0737