文中代码: https://github.com/wz940216/From0to1-MLLM-StudyLog.git
摘要: 本周重点是将前几周的实验代码整理成更接近开源工程的形态,包括清晰的目录结构、明确的入口、可复用的配置和可追踪的日志。主要内容包括:1) 工程目录结构整理为code、configs、utils、outputs四个核心目录;2) MiniLLaVA架构解析(CLIP vision encoder、projector、LLM decoder);3) 数据格式处理(LLaVA conversations与OpenAI chat messages);4) 训练与推理脚本的JSONL日志系统优化;5) 新增三个配置样例用于不同场景;6) 总结前三个月的主要收获与当前不足。目标是构建一个文档清晰、配置灵活、日志完备的MLLM学习工程框架。
本周重点不是继续堆模型能力,而是把前面几周的实验代码整理成更接近开源工程的形态:目录清楚、入口明确、配置可复用、日志可追踪、文档能让别人快速跑起来。
当前第 12 周目录保留四类内容:
-
code/:核心源码,包括模型、数据集、训练和推理入口。 -
configs/:不同任务组合和运行环境的配置样例。 -
utils/:数据格式转换工具。 -
outputs/:checkpoint、上下文和日志等运行产物。 -
工程目录结构。
-
MiniLLaVA 架构:CLIP vision encoder、projector、LLM decoder。
-
LLaVA conversations 与 OpenAI chat messages 两种数据格式。
-
训练命令、推理命令、多轮上下文保存方式。
-
checkpoint、训练日志、推理日志的默认输出位置。
-
端到端 smoke test 建议。
训练脚本新增 JSONL 日志:
train_start:记录配置路径、epoch 数、总步数、调试样本数。train_step:按LOG_STEPS记录 loss 和 lr。train_end:记录最终 step 和 checkpoint 目录。
推理脚本新增 JSONL 日志:
- 记录图片路径、问题、回答、上下文轮数、是否交互模式。
- 默认读取配置里的
INFERENCE.LOG_FILE。 - 命令行可用
--log-file覆盖。
新增三个配置样例:
configs/projector_debug.yaml:小样本调试配置,适合先跑通训练循环。configs/multitask_balanced.yaml:COCO caption 与 VQA 均衡多任务训练。configs/caption_only_cpu.yaml:CPU smoke test 配置,只建议配合--max-samples使用。
这些配置把模型大小、任务组合、日志目录、checkpoint 目录拆开,避免每次实验都直接改默认配置。
前三个月的主要收获:
- 从单轮 VQA 逐步扩展到多轮图文对话,理解了数据格式对模型训练接口的影响。
- 掌握了 MiniLLaVA 的核心拼接方式:用
<image>token 作为视觉 embedding 插入位置。 - 熟悉了冻结底座、训练 projector、加入 LoRA adapter 的轻量微调路径。
- 开始把多任务数据混合、采样比例、collator label mask 等工程细节纳入训练流程。
当前不足:
- 评估体系还偏弱,目前主要依赖人工推理观察,缺少固定验证集指标。
- 日志还只是基础 JSONL,后续可以接入 TensorBoard、WandB 或简单可视化脚本。
- checkpoint 管理还可以继续完善,例如自动清理旧 checkpoint、记录 git commit、记录数据版本。
- 推理输出格式虽然加入 JSON 约束,但模型未必稳定遵守,需要更多格式校验和失败重试策略。
以上笔记来源于我的仓库: https://github.com/wz940216/From0to1-MLLM-StudyLog.git
我正在连载一个从零到一的多模态大模型学习笔记。
如果你对多模态大模型感兴趣,或者也在准备往大模型方向转
可以点赞/Fork我的仓库: https://github.com/wz940216/From0to1-MLLM-StudyLog.git
也可评论区留言交流,后面我会继续把每周的学习记录、踩坑经验陆续更新到仓库和这里。