QwenLM / Qwen-VL

The official repo of Qwen-VL (通义千问-VL) chat & pretrained large vision language model proposed by Alibaba Cloud.
Other
4.27k stars 327 forks source link

请教关于微调训练finetune #401

Open elesun2018 opened 1 month ago

elesun2018 commented 1 month ago
# Single GPU training
sh finetune/finetune_lora_single_gpu.sh
# Distributed training
sh finetune/finetune_lora_ds.sh

DATA="path_to_data" 能否提供DATA样例,比如coco图片描述 另,finetune是单阶段训练就可以了(冻结Vit训练CrossAtt+QwenLM),还是要训练多个阶段。 谢谢!

drenched9 commented 1 month ago

DATA的样例就是README给出的json示例

elesun2018 commented 1 month ago

--num_train_epochs 5 这个参数配置能否减少,默认5训练时长太久了 1.5epoch-2epoch是否为best 经验值

另,是否支持训练日志可视化?观察训练效果

Qwen-VL/finetune/finetune_lora_single_gpu.sh中的--fix_vit True 的作用,谢谢

KDD2018 commented 1 month ago

我在2400+对图文定位数据集上做微调,效果很差,完全找不到图片目标和文本得对应关系,我也试着调整--fix-vit参数,但也没用,效果依旧很差。 @elesun2018 楼上微调效果怎么样?

elesun2018 commented 1 month ago

是否支持训练日志可视化?观察训练效果 A: 通过修改--report_to wandb实现观察训练效果。

我设置的--num_train_epochs 1.5 训练时长比较久目前没训练完成。

训练的label我使用的格式如下:狗[0.836,0.48,1.0,0.66],没有严格按照README给出的json示例。

另,训练过程中能否进行评估。谢谢!

KDD2018 commented 1 month ago

有大佬只微调过视觉模块吗,最低需要多少算力?

elesun2018 commented 1 month ago

你是说model.transformer.visual.requiresgrad(True)来实现微调过视觉模块? image 这段代码没搞懂,不使用lora,fixvit为true,冻结vit? 使用lora占用资源较多,冻结vit,占用的资源不再那麽多?

elesun2018 commented 1 month ago

请问这两者有什么区别 --lazy_preprocess True LazySupervisedDataset if data_args.lazy_preprocess else SupervisedDataset 谢谢!

KDD2018 commented 1 month ago

你是说model.transformer.visual.requiresgrad(True)来实现微调过视觉模块? image 这段代码没搞懂,不使用lora,fixvit为true,冻结vit? 使用lora占用资源较多,冻结vit,占用的资源不再那麽多?

这个似乎是全量微调的时候通过设置--fix_vit参数确定visual是否微调。通过lora微调,不是通过target_modules参数吗,就是对应finetune.py中的类LoraArguments的lora_target_modules。

elesun2018 commented 1 month ago

image 请问gradient_checkpointing是何用途,谢谢

elesun2018 commented 1 month ago

在标准的反向传播过程中,为了计算梯度,模型会保存所有中间层的输出(也就是激活值)。对于大型模型,这会迅速消耗大量内存。而启用gradient_checkpointing后,模型不会保存所有这些中间激活值。相反,它会在反向传播过程中重新计算部分前向传播步骤,仅在需要计算梯度的那一刻才计算相应的激活值。这样,尽管会增加一些计算开销(因为某些前向过程需要执行两次),但可以大幅度减少内存使用量。

elesun2018 commented 1 month ago

请问这两者有什么区别 --lazy_preprocess True LazySupervisedDataset if data_args.lazy_preprocess else SupervisedDataset 谢谢!

elesun2018 commented 1 month ago

请问如何根据peft保存的模型文件转换成推理用的qwen模型 image 有没有相应的代码

315386775 commented 1 month ago

@KDD2018 我在2400+对图文定位数据集上做微调,效果很差,完全找不到图片目标和文本得对应关系,我也试着调整--fix-vit参数,但也没用,效果依旧很差。 后来找到问题了吗?

KDD2018 commented 1 month ago

@KDD2018 我在2400+对图文定位数据集上做微调,效果很差,完全找不到图片目标和文本得对应关系,我也试着调整--fix-vit参数,但也没用,效果依旧很差。 后来找到问题了吗?

没有,微调之后,整体的聊天套路是学到了,但是目标和标签的关系完全没学到。我猜测是因为没有微调视觉模块,因为我看源码中LoraArguments的lora_target_modules参数指定的都是LM中的模块。仅仅是猜测,也请大佬们指点迷津。

KDD2018 commented 1 month ago

请问如何根据peft保存的模型文件转换成推理用的qwen模型 image 有没有相应的代码

可以参考README中的微调部分,有相关代码

KDD2018 commented 1 month ago

请问这两者有什么区别 --lazy_preprocess True LazySupervisedDataset if data_args.lazy_preprocess else SupervisedDataset 谢谢!

你是指LazySupervisedDataset和SupervisedDataset的区别吧, LazySupervisedDataset是获取到单个样本之后才进行preprocess。

elesun2018 commented 4 weeks ago

image 按照上图进行lora merge_save生成结果 image 与huggingface下载的模型文件不太一致 image 请问tokenization_qwen.py tokenizer_config.json如何获取,什么作用,影响推理使用吗 谢谢!

elesun2018 commented 4 weeks ago

@KDD2018 我在4W图文对,带定位box数据集上做lora微调。 效果也不行,跟没有训练没什么差异。但是训练日志还算可以。 wandb trainloss下降比较明显! --num_train_epochs 1.5,准备增大5-10epoch看下效果。 我Q 294813364

elesun2018 commented 3 weeks ago

请问finetune中modules_to_save是什么用途 image wte和lm head怎么设置 base_model.model.transformer.wte.modules_to_save base_model.model.lm_head.modules_to_save

elesun2018 commented 3 weeks ago

请问target_modules的用途,应该根据什么如何设置,谢谢 image 这几个模块 "w1", "attn.c_proj", "c_attn", "w2"

315386775 commented 3 weeks ago

@KDD2018 请问对Qwen-VL-Chat微调所需要的”图文对“数据量大概需要多少?目前进行lora微调效果不大 #300 我看其中提到,具体怎么对齐,有知道的吗,可以加Q交流:315386775

在进行lora微调后,进行测试,发现性能确实得到显著提升(大约10个点),原因在于可能之前的微调Prompt和测试Prompt没有对齐,将他们对齐后进行测试,性能的确是提升了。

elesun2018 commented 3 weeks ago

能否解答下上述几个问题,谢谢

elesun2018 commented 2 weeks ago

目前问题是lora训练loss下降明显趋于稳定,但是推理时发现跟没训练几乎没区别 lora训练后数参数,如何知道正在合并到了新的整体模型中了 image image 谢谢

elesun2018 commented 2 weeks ago

请问model.transformer.ln_f是论文里面的adapter层(交叉注意力)吗? finetune时adapter层是冻结的?

elesun2018 commented 2 weeks ago

能否帮忙解答一下,谢谢

Yan0613 commented 2 weeks ago

目前问题是lora训练loss下降明显趋于稳定,但是推理时发现跟没训练几乎没区别 lora训练后数参数,如何知道正在合并到了新的整体模型中了 image image 谢谢

the same issue

elesun2018 commented 2 weeks ago

请问model.transformer.ln_f是论文里面的adapter层(交叉注意力)吗? finetune时adapter层是冻结的? 梯度参数:base_model.model.transformer.ln_f.weight: torch.Size([4096]) False 这个参数需要打开 True,lora训练吗 image 如何跟论文对应上,参数量不对,to fix 256

elesun2018 commented 2 weeks ago

请问model.transformer.ln_f是论文里面的adapter层(交叉注意力)吗? finetune时adapter层是冻结的? 梯度参数:base_model.model.transformer.ln_f.weight: torch.Size([4096]) False 这个参数需要打开 True,lora训练吗 image 如何跟论文对应上,参数量不对,to fix 256

elesun2018 commented 2 weeks ago

我用finetune.py加载Qwen-VL-Chat-hug0611 huggingface trainer.train(),loss已训练至接近0 然后trainer.predict(data_module["eval_dataset"]) image decoded_labels是正常的,而decoded_predicts是乱码。 image 使用trainer.predict后解码输出就看不出文字效果呢。 请问是什么原因

elesun2018 commented 1 week ago

能否解答一下上述几个问题,谢谢!

elesun2018 commented 17 hours ago

请问train loss下降明显,而trainer.predict results中出现大部分乱码。是否正常,如何从results中提取想要的输出答案。 image

image