Training

训练 MiniMind-V

复现训练时最重要的是准备三样东西:MiniMind 语言权重、SigLIP2 视觉编码器、parquet 数据。然后选择直接 SFT,或先 Pretrain Projector 再 SFT。

1. 环境和资源

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

# 下载视觉编码器
modelscope download --model gongjy/siglip2-base-p32-256-ve --local_dir ./model/siglip2-base-p32-256-ve

# 下载 MiniMind 语言模型权重,作为 VLM 训练底座
modelscope download --model gongjy/minimind-3v-pytorch llm_768.pth --local_dir ./out

如果使用 HuggingFace,也可以从 MiniMind-V Collection 选择对应模型目录。视觉编码器需要放在 model/siglip2-base-p32-256-ve/

2. 两条训练路径

快速路径:直接 SFT

SFT 数据已包含 Pretrain caption 子集,适合先跑通流程。

cd trainer
python train_sft_vlm.py --epochs 2 --from_weight llm

稳妥路径:Pretrain + SFT

先让 Projector 学会基础图文对齐,再进入指令微调。

cd trainer
python train_pretrain_vlm.py --epochs 2 --from_weight llm
python train_sft_vlm.py --epochs 2 --from_weight pretrain_vlm

3. 冻结策略

参数训练范围适用阶段理由
--freeze_llm 2仅训练 vision_projPretrain 默认干净完成视觉到语言空间的初始对齐。
--freeze_llm 1vision_proj + LLM 首尾层SFT 默认融合视觉 token,同时保护中间层语言能力。
--freeze_llm 0除视觉编码器外全参可训实验用灵活但风险更高,小模型容易遗忘原语言能力。

4. 默认超参数

脚本batch学习率max_seq_lenfrom_weight
train_pretrain_vlm.py164e-4450llm
train_sft_vlm.py45e-6768pretrain_vlm

训练脚本使用 cosine 风格学习率衰减、梯度裁剪、bf16/float16 混合精度,并支持 torch.compile

5. 断点续训和多卡

# 中断后恢复
python train_sft_vlm.py --epochs 4 --from_resume 1

# 单机 N 卡 DDP
torchrun --nproc_per_node N train_sft_vlm.py

保存时会同时写出 out/*.pthcheckpoints/*_resume.pth。resume 文件保存优化器、scaler、epoch、step 和日志 id;GPU 数量变化时,脚本会按 world size 自动折算 step。

6. Loss 曲线参考

MiniMind-V Pretrain loss 曲线

Pretrain:主要观察 Projector 是否快速完成视觉语言对齐。

MiniMind-V SFT loss 曲线

SFT:学习率更低,目标是指令遵循、细节问答和语言能力平衡。

README 记录:单张 NVIDIA 3090 上,SFT 跑完 1 个 epoch 约 2 小时,成本按当时云租价格估算约 3 元。实际速度会受数据读取、CUDA、磁盘和显存策略影响。