【免费下载链接】PIIP-LLaVA_ConvNeXt-B_CLIP-L_1024-336_13B
PIIP-LLaVA_ConvNeXt-B_CLIP-L_1024-336_13B 是基于 Vicuna-13B 的图像多模态大模型(LLaVA 架构),本仓库除了模型权重,还完整保留了trainer_state.json训练状态日志和training_args.bin训练参数文件。本文将带你用这份"训练黑匣子",完整复盘这次 5197 步的视觉指令微调全过程:学习率如何爬升与衰减、loss 从 1.46 降到多少、34 小时训练跑了多少算力。🔍
一、仓库里的"训练档案"长什么样
打开仓库,与训练直接相关的文件主要有这 4 个:
| 文件 | 作用 | 大小 |
|---|---|---|
| trainer_state.json | 记录每一步的 loss、学习率与训练耗时 | ~630 KB |
| training_args.bin | PyTorch 序列化的训练参数快照 | 仅 129 B |
| config.json | 模型结构配置(LLM + 视觉塔 + 投影器) | ~1.5 KB |
| model.safetensors.index.json | 27.1 GB 权重的分片索引 | ~298 KB |
其中 trainer_state.json 是最有价值的文件:它的log_history里逐步记录了 5197 条训练日志,相当于一张完整的训练曲线数据表。
二、核心字段速读:30 秒看懂训练配置
在 trainer_state.json 的末尾字段中,可以直接读出本次微调的关键设置:
global_step: 5197,与max_steps: 5197一致,且epoch达到 1.0 —— 说明数据集恰好完整过了一遍(num_train_epochs: 1),训练完整结束而非中途停止train_batch_size: 4,按此估算全程消费约 5197 × 4 ≈ 2.08 万条图文样本logging_steps: 1.0—— 每一步都记录日志,所以才有 5197 条明细save_steps: 1000 /eval_steps: 500—— 每 1000 步存一次检查点,每 500 步评估一次(日志中未记录 eval_loss 条目,评估结果未写入该文件)total_flos: 9.2×10¹⁵—— 全程约 9200 亿亿次浮点运算,这是衡量多模态微调算力成本的直接依据
三、学习率曲线复盘:3% 步数 warmup + 余弦衰减
从日志中任取几个节点即可还原完整的学习率调度策略(cosine衰减):
| 步数 | 学习率 | loss | 阶段解读 |
|---|---|---|---|
| 1 | 1.28×10⁻⁷ | 1.4573 | 从近 0 开始线性爬升 |
| 100 | 1.28×10⁻⁵ | 0.2206 | 仍在 warmup |
| 156 | 2×10⁻⁵(峰值) | 0.9531 | warmup 结束,约占 3% 步数 |
| 1000 | 1.86×10⁻⁵ | 0.7914 | 进入余弦衰减段 |
| 2598 | 1.05×10⁻⁵ | 0.7417 | 半程,学习率降至峰值一半 |
| 4000 | 2.66×10⁻⁶ | 0.6798 | 衰减加速 |
| 5197 | 0 | 0.46 | 衰减归零,训练结束 |
这条曲线符合多模态指令微调的常见做法:先以约 3% 的步数做线性 warmup 保护刚接入视觉特征的投影层,再按余弦规律平滑降到 0,避免训练末期参数震荡。📉
四、loss 走势:从 1.46 到 0.74 的平滑下降
单步 loss 波动很大(最小值 0.1795 出现在第 217 步,最后一步仅 0.46),判断收敛情况应看滑动均值:
| 区间(步数) | 100 步滑动平均 loss |
|---|---|
| 1 – 100 | 0.986 |
| 500 – 1000 | 约 0.79 |
| 2000 – 3000 | 约 0.74 |
| 4000 – 5000 | 约 0.69 |
| 4197 – 5197(最后 1000 步) | 0.692 |
官方记录的整段train_loss为0.7432(见 trainer_state.json)。可以看到,训练后段 loss 仍以缓慢但稳定的斜率下降,没有出现反弹或发散——这是一次健康收敛的微调。
五、training_args.bin:129 字节的"参数指纹"
training_args.bin 只有 129 字节,却值得单独一提:它由 HuggingFaceTrainingArguments序列化而来,是训练启动参数的"指纹"。当trainer_state.json记录了"发生了什么",它就回答"当时是怎么配置的"。两者配合,任何人都能在不接触原始训练脚本的情况下,审计和复现本次微调的超参数设定。
六、权重印证:训练到底改了什么
结合 config.json 与 model.safetensors.index.json 可以验证本次微调的完整链路:
- 语言模型:
LlavaLlamaForCausalLM(Vicuna-13B),40 层、hidden_size 5120、vocab 32000,权重以 bfloat16 存储,共 6 个 safetensors 分片、合计 27.1 GB - 视觉塔:PIIP 的 ConvNeXt-B 图像金字塔网络(
mm_vision_tower),隐藏维度 1024,tune_vision_tower: true表示视觉塔参与了训练 - 投影器:
mm_projector采用mlp2x_gelu,且索引中可见branch1/branch2双分支结构——正是 PIIP 多分辨率分支设计的体现;freeze_mm_mlp_adapter: false说明投影层也未冻结,三个部分协同微调
推理侧参数见 generation_config.json:temperature 0.9+top_p 0.6的采样设置,适合回答类多模态任务。项目背景与论文引用可参考 README.md。
七、新手复盘清单:3 步看懂任何模型的训练日志
- 看结尾字段:
global_step是否等于max_steps,判断训练是否完整跑完 - 看曲线节点:抽取 warmup 结束点、半程、最后 1000 步的 loss 与学习率,判断收敛是否健康
- 看配置印证:对照
config.json与权重索引,确认哪些模块参与微调、存储精度与总参数量
按这套方法,你只需打开 trainer_state.json 就能独立完成一次训练复盘,不需要原始训练代码。✅
结语
这份 5197 步的 PIIP-LLaVA 视觉指令微调,以 2×10⁻⁵ 峰值学习率、余弦衰减策略,用 34.4 小时(train_runtime123863 秒)、约 9.2×10¹⁵ FLOPs 的算力,把 loss 从 1.46 平滑压到 0.74。trainer_state.json与training_args.bin这对"训练档案",正是开源模型可信与可复现的最好证明。
【免费下载链接】PIIP-LLaVA_ConvNeXt-B_CLIP-L_1024-336_13B
相关推荐
从trainer_state.json看PIIP-LLaVA_ConvNeXt-L_CLIP-L_1024-336_13B训练全过程:5197步损失曲线与超参数复盘
从trainer_state.json看PIIP LLaVA_ConvNeXt L_CLIP L_1024 336_13B训练全过程:5197步损失曲线与超参数
把PIIP-LLaVA微调成行业专属模型:LoRA与全参训练的完整实操指南
把PIIP LLaVA微调成行业专属模型:LoRA与全参训练的完整实操指南 PIIP LLaVA_ConvNeXt B_CLIP L_1024 336_7B 是
训练日志不会说谎:从trainer_state.json还原PIIP-LLaVA的5198步训练曲线
训练日志不会说谎:从trainer_state.json还原PIIP LLaVA的5198步训练曲线 想看懂一个多模态大模型到底训练得怎么样,别听宣传,看日志就
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考