OpenGVLab / InternVL

[CVPR 2024 Oral] InternVL Family: A Pioneering Open-Source Alternative to GPT-4o. 接近GPT-4o表现的开源多模态对话模型
https://internvl.readthedocs.io/en/latest/
MIT License
6.02k stars 468 forks source link

微调internvl-chat lora但是loss不收敛一直在1左右,最后模型推理输出结果全是空格 #56

Closed YYY-MMW closed 7 months ago

YYY-MMW commented 8 months ago

InternVL-Chat-Chinese-V1-2-Plus以这个模型为基础进行微调,checkpoint文件中缺少推理相关文件,我简单的将InternVL-Chat-Chinese-V1-2-Plus里的配置文件拷贝到checkpoint中

czczup commented 8 months ago

方便贴一下训练的tensorboard loss曲线吗

YYY-MMW commented 8 months ago
截屏2024-03-07 20 33 25

这是我的一次的训练loss,曲线看似正常,很快下降到1左右,然后一直震荡,推理时输出为换行符或者空🤔️

YYY-MMW commented 8 months ago

我仔细检查了我的数据格式应该没问题;我用的是八张A100 80G,为了和你初始16个batch梯度回传一次,我每个GPU设置两个batch;学习率为1e-5;

{"id": 0, "image": "train2017/000000203564.jpg", "conversations": [{"from": "human", "value": "<image>\nAccurately describe the picture in one sentence."}, {"from": "gpt", "value": "A bicycle replica with a clock as the front wheel."}]}

非常感谢🙏你的回复

czczup commented 8 months ago

感谢反馈,请问您使用的数据是COCO Caption吗?其实我还没有完整地用Lora的setting跑完一次训练+测试,不太确定lora部分是否有问题(full tune应该是没问题的),我等下在COCO Caption上跑个Lora的验证试验。

YYY-MMW commented 8 months ago

我是使用的COCO Caption数据集,非常感谢能抽空验证🙏期待您的结果

Pro-flynn commented 8 months ago

InternVL-Chat-Chinese-V1-2-Plus以这个模型为基础进行微调,checkpoint文件中缺少推理相关文件,我简单的将InternVL-Chat-Chinese-V1-2-Plus里的配置文件拷贝到checkpoint中

@YYY-MMW 请问您是在finetune之后 inference时, 是使用的官方预训练模型的inference示例吗,如下的finetuned_path 是finetune后的模型地址

model = AutoModel.from_pretrained(
    finetuned_path,
    torch_dtype=torch.bfloat16,
    low_cpu_mem_usage=True,
    trust_remote_code=True).eval().cuda()
# Otherwise, you need to set device_map='auto

我采用以上示例代码推理finetune之后的模型,提示缺少configuration_internvl_chat.py 等系列py文件

YYY-MMW commented 8 months ago

@Pro-flynn 是的,但是会提示缺少文件,在下载的pretrained文件下有推理相关的脚本,做直接copy过来了。你是用的lora finetune,结果怎么样

czczup commented 8 months ago

@Pro-flynn 是的,但是会提示缺少文件,在下载的pretrained文件下有推理相关的脚本,做直接copy过来了。你是用的lora finetune,结果怎么样

你好,finetune完保存的checkpoint里没有模型的代码文件,可以从pretrain的模型里拷贝过去,就可以用AutoModel加载了

YYY-MMW commented 8 months ago

@czczup 请问lora微调的实验结果怎么样,是我处理错了吗

czczup commented 8 months ago

@czczup 请问lora微调的实验结果怎么样,是我处理错了吗

昨晚跑完了一个coco caption的lora微调,输出结果是正常的,但coco caption的karp. test评测没涨点,训完一个epoch反而从143.4掉到了142.3。

我的setting是这样的,可能还要再调一下学习率或者lora rank看看:

set -x

GPUS=${GPUS:-8}
BATCH_SIZE=${BATCH_SIZE:-256}
PER_DEVICE_BATCH_SIZE=${PER_DEVICE_BATCH_SIZE:-32}
GRADIENT_ACC=$((BATCH_SIZE / PER_DEVICE_BATCH_SIZE / GPUS))

export PYTHONPATH="${PYTHONPATH}:$(pwd)"
export MASTER_PORT=34223
export LAUNCHER=pytorch

OUTPUT_DIR='work_dirs/internvl_chat_v1_2_hermes2_yi34b_448_finetune_continue_lora_coco'

if [ ! -d "$OUTPUT_DIR" ]; then
  mkdir -p "$OUTPUT_DIR"
fi

# number of gpus: 8
# batch size per gpu: 32
# gradient accumulation steps: 1
# total batch size: 256
# epoch: 1
torchrun \
  --nnodes=1 \
  --node_rank=0 \
  --master_addr=127.0.0.1 \
  --nproc_per_node=${GPUS} \
  --master_port=${MASTER_PORT} \
  ${SRUN_ARGS} \
  internvl/train/internvl_chat_finetune.py \
  --model_name_or_path "./pretrained/InternVL-Chat-Chinese-V1-2-Plus" \
  --conv_style "Hermes-2" \
  --output_dir ${OUTPUT_DIR} \
  --meta_path "shell/data/coco_caption.json" \
  --overwrite_output_dir True \
  --force_image_size 448 \
  --down_sample_ratio 0.5 \
  --drop_path_rate 0.0 \
  --pad2square False \
  --freeze_llm True \
  --freeze_mlp True \
  --freeze_backbone True \
  --use_llm_lora 16 \
  --vision_select_layer -1 \
  --use_data_resampling False \
  --dataloader_num_workers 2 \
  --bf16 True \
  --num_train_epochs 1 \
  --per_device_train_batch_size ${PER_DEVICE_BATCH_SIZE} \
  --gradient_accumulation_steps ${GRADIENT_ACC} \
  --evaluation_strategy "no" \
  --save_strategy "steps" \
  --save_steps 200 \
  --save_total_limit 1 \
  --learning_rate 1e-5 \
  --weight_decay 0.05 \
  --warmup_ratio 0.03 \
  --lr_scheduler_type "cosine" \
  --logging_steps 1 \
  --max_seq_length 2048 \
  --group_by_length True \
  --do_train True \
  --grad_checkpoint True \
  --deepspeed "zero_stage3_config.json" \
  --report_to "tensorboard" \
  2>&1 | tee -a "${OUTPUT_DIR}/training_log.txt"
YYY-MMW commented 8 months ago

请问方便看一下loss曲线吗,我按照这个参数再跑一次

czczup commented 8 months ago
image

可能还有问题,loss其实没降,我Lora跑的少,还要再研究一下

YYY-MMW commented 8 months ago

@czczup 好的,非常感谢你的回复🙏

Pro-flynn commented 8 months ago

@Pro-flynn 是的,但是会提示缺少文件,在下载的pretrained文件下有推理相关的脚本,做直接copy过来了。你是用的lora finetune,结果怎么样

@YYY-MMW @czczup 我是做的Grounding任务的finetune(基于lora) ,我跑了一个epoch的微调,目前看结果有问题:用微调之后模型测试了一下训练集,发现连指令遵循都做不到了:prompt是Grounding的prompt(训练集中的prompt) , 但不回答框了,预训练模型虽然Grounding的结果不对,但最起码指令遵循是可以做到的(回答是框)

YYY-MMW commented 8 months ago

@Pro-flynn 可能正如作者所说基于lora微调还有待探索

czczup commented 8 months ago

@Pro-flynn 可能正如作者所说基于lora微调还有待探索

大佬们,再给我点时间调一调LORA,QAQ

YYY-MMW commented 8 months ago

@czczup 大佬辛苦🙏

qingchunlizhi commented 8 months ago

@Pro-flynn 可能正如作者所说基于lora微调还有待探索

大佬们,再给我点时间调一调LORA,QAQ

大佬,现在LORA 异常的问题解决了吗

Pro-flynn commented 8 months ago

@Pro-flynn 是的,但是会提示缺少文件,在下载的pretrained文件下有推理相关的脚本,做直接copy过来了。你是用的lora finetune,结果怎么样

@YYY-MMW @czczup 我是做的Grounding任务的finetune(基于lora) ,我跑了一个epoch的微调,目前看结果有问题:用微调之后模型测试了一下训练集,发现连指令遵循都做不到了:prompt是Grounding的prompt(训练集中的prompt) , 但不回答框了,预训练模型虽然Grounding的结果不对,但最起码指令遵循是可以做到的(回答是框)

@czczup 我把r调到128以上 现在 Grounding finetune之后可以指令遵循了

YYY-MMW commented 8 months ago

@Pro-flynn 你说的是这个参数吗--use_llm_lora 16

Pro-flynn commented 8 months ago

@Pro-flynn 你说的是这个参数吗--use_llm_lora 16

是的

czczup commented 8 months ago

@Pro-flynn 可能正如作者所说基于lora微调还有待探索

大佬们,再给我点时间调一调LORA,QAQ

大佬,现在LORA 异常的问题解决了吗

LoRA的rank调大一点就可以了,比如上面的大佬设置--use_llm_lora 128

czczup commented 8 months ago

COCO caption Finetune有点难搞,只用COCO数据,可以把InternVL−Chat−V1.2从113.9的CIDEr finetune到142-143。但finetune InternVL−Chat−V1.2-Plus不会涨点。

YYY-MMW commented 8 months ago

多谢大佬🙏

Hoantrbl commented 1 month ago

@czczup 大佬,是否可以用lora微调vision的backbone呢?我尝试了一下,loss都是不收敛的。