文中代码: https://github.com/wz940216/From0to1-MLLM-StudyLog.git

摘要: 本文主要介绍了在多模态大语言模型(MLLM)训练中,如何将不同格式的数据(如caption、QA、VQA)统一转换为OpenAI Chat风格的三角色(system/user/assistant)消息格式,并进行训练的过程。

到第十三周了,之前我们将 caption和qa、vqa格式的数据都统一成了OpenAI Chat 风格的多轮 messages 格式,但不是完整意义上的 system/user/assistant 三角色模板。

它目前只有 user/assistant,system 被省略了。对于 SFT 通常可以接受,因为 system 是可选的。

为了更严格的对齐三角色规范,需要在脚本里给每条样本开头加一条 system message。

而每次都加同样的system message又使得模型很死板,我们随机生成一些selected_system_message,每次随机选择一个system message,并把他放在每条样本的开头。
训练时拼成模型实际输入,大概是:

<system>
You are a helpful visual assistant. Answer the user's questions based on the image.
</system>
<user>
<image>
What is in the image?
</user>
<assistant>
A dog is running on the grass.
</assistant>

这里需要注意,即使增加了system message,它也同样不参与loss 梯度的反向传播,只参与attention,影响assistant的输出即可。

规律就是只有模型预测出来的文字才需要参与loss梯度的反向传播,其余的对话当做条件即可。

system tokens      -> label = -100
user tokens        -> label = -100
image tokens       -> label = -100
assistant tokens   -> 正常 label

Convert

python week13_chat_format_alignment/utils/convert_qa_to_openai_chat.py --input dataset/VQA/abstract_v002_val2017_qa.json --output dataset/VQA/abstract_v002_val2017_multiturn_system.json --image-prefix scene_img_abstract_v002_val2017 --keep-single-turn --no-rewrite-repeated-questions 

python week13_chat_format_alignment/utils/convert_qa_to_openai_chat.py --input dataset/LLaVA-CC3M-Pretrain-595K/chat.json --output dataset/LLaVA-CC3M-Pretrain-595K/chat_multiturn_system.json --image-prefix images --keep-single-turn --no-rewrite-repeated-questions 

python week13_chat_format_alignment/utils/convert_qa_to_openai_chat.py --input dataset/COCOCaption/annotations/captions_val2017_qa.json --output dataset/COCOCaption/annotations/captions_val2017_multiturn_system.json --image-prefix val2017 --keep-single-turn --no-rewrite-repeated-questions 

Train

accelerate launch --multi_gpu week13_chat_format_alignment/code/train.py --config week13_chat_format_alignment/configs/multitask_balanced.yaml

使用了两张3090训练,跑了40分钟左右,三个epoch。
两张3090训练了40分钟左右,三个epoch
以上笔记来源于我的仓库: https://github.com/wz940216/From0to1-MLLM-StudyLog.git

我正在连载一个从零到一的多模态大模型学习笔记。
如果你对多模态大模型感兴趣,或者也在准备往大模型方向转
可以点赞/Fork我的仓库: https://github.com/wz940216/From0to1-MLLM-StudyLog.git

也可评论区留言交流,后面我会继续把每周的学习记录、踩坑经验陆续更新到仓库和这里。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐