多模态训练 — Qwen3.5-2B 图文数据配比

方案说明见 多模态介绍 · 2×A100-80GB(排队中)· 训练尚未开始

这一轮要回答的问题
在完全相同的模型、算法、序列长度、采样预算下,唯一自变量是训练数据里图文样本的占比。想看两件事:① 视觉推理能力的获得速度与上限(Geo3K acc);② 混入图文数据后,纯文本数学能力是否被"稀释"或"带崩"(复用 aime24/math_500 探针,与 E1 GRPO 直接可比)。详见 vlm_exp/exp_plan_mm.md

M0–M3 消融分组设计

图文占比训练数据组成说明
M00%(纯文本) polaris_easy_boxed.parquet(全量 13688 行) 直接复用已跑完的 e1_grpo_2b 结果,不重跑,省 ~26h——本质就是 E1 的原始设定,把"0% 图文"端点直接对齐到已有结果。
M1100%(纯图文) geo3k/train.parquet(2101 行) 极端组,检验纯视觉信号下 GRPO 的行为;池小需 total_epochs=10 循环凑够 150 step。
M250% geo3k/train + text_subset_m2_2101(各 2101 行) 等量混合;池 4202 行,total_epochs=5
M320% geo3k/train(2101) + text_subset_m3_8404 更贴近真实 post-training 配比;池 10505 行,total_epochs=2

统一不变量(M1–M3 逐字相同,只改 data.train_files):GRPO、train_batch_size=32、rollout.n=8、max_prompt_length=1024、max_response_length=16384、非思考模式、lr=1e-6、total_training_steps=150、data.seed=1、2 卡 FSDP2 —— 与 E1 统一配置块完全一致,只多了图文数据。

模型与任务选型依据

模型:Qwen3.5-2B 原生 vision——与 E1–E5 文本实验同一份权重、同一个 conda 环境,已用 AutoProcessor 实测确认 checkpoint 带 vision_config/image_token_id,processor 类是 Qwen3VLProcessor,能正确把图像转成 pixel_values/image_grid_thw。选它而非独立的 Qwen3-VL-2B,是因为可以做"同底座加图像模态"这种最干净的对比,且直接复用已验证过的 verl_qwen35 环境与 E1 超参。

任务:Geo3Khiyouga/geometry3k,几何图形+数学推理,2101 训练/601 测试)——verl 官方有现成 GRPO 示例和 reward 实现,社区结果可比,规模适合 2B/2 卡的预算。

Reward 设计:按 data_source 分发判分

同一 batch 里会混有 data_source=math_dapo/aime24(纯文本)和 data_source=hiyouga/geometry3k(图文)的行,统一 dispatcher 按来源分发:

def compute_score(data_source, solution_str, ground_truth, extra_info=None):
    if data_source == "hiyouga/geometry3k":
        return _score_geo3k(solution_str, ground_truth)
    return _score_text_math(solution_str, ground_truth)

纯文本分支:复用现有 reward_boxed.py 逻辑(Math-Verify 符号等价判定,强制 \boxed{}),与 E1–E5 完全一致,保证 M0↔M1–M3 的文本判分口径不变。
图文分支:复用 verl 官方 geo3k.py 判分逻辑(mathruler 的 grade_answer + 10% 权重的格式奖励),与社区 Geo3K GRPO 基线口径一致。

为什么只锁定"数据配比"这一个自变量

多模态场景下值得做的消融还有:视觉编码器冻结 vs 解冻、图像分辨率/视觉 token 数量、模型底座对比(Qwen3.5-2B vs Qwen3-VL-2B)。这些都有价值,但上一轮纯算法消融(5 组×150 step)在 2 卡上就花了 1.5–2 周,多模态单 step 通常更慢;把"数据配比"和其它维度交叉会导致组数指数增长,也会让"是哪个变量导致的差异"难以归因。因此本轮把算法(固定 GRPO)、分辨率、模型底座都固定,只让图文数据配比变化。如果这轮结果显示图文数据对文本能力有明显负面影响或正面迁移,值得作为下一轮"视觉编码器冻结 vs 解冻"消融的立项依据。

评测计划(每组跑完执行)

判据方法关注点
视觉能力主判据Geo3K test(601题)acc,vLLM 批量推理 + geo3k.py 判分逻辑离线评测M0(0%)→M1(100%) 理应单调上升;重点看 M2/M3 用多少图文比例就能追多少视觉能力
文本能力保持主判据math_500(沿用 exp_plan.md 主判据口径),复用 evalscope 流程混入图文数据后,文本数学能力相对 M0(=E1) 掉了多少;"掉多少图文比例换多少视觉能力"的权衡曲线
通用能力监控mmlu_temp相对 base 掉 1–2 点内正常
训练过程指标reward/pass rate 按 data_source 分开看naive reward manager 的 per-sample 判分自然按行归属,可从 rollout_dump/*.jsonl 按 data_source 拆开统计

执行顺序与当前状态

阶段状态说明
数据准备(Geo3K 下载 + 文本子集切分 + 验证探针)已完成产物已落盘 vlm_exp/parquet/mm/,可直接被训练脚本引用
Reward dispatcher / 训练脚本(M1–M3 + 烟测脚本)已完成run_m1_geo3k_2b.sh / run_m2_mix50_2b.sh / run_m3_mix20_2b.sh / run_smoke_mm.sh
多模态链路烟测待执行验证 FSDP2+vLLM 对多模态生成路径无报错(此前架构验证只测过纯文本)——正式跑前必须先过
M1 → M2 → M3 正式训练排队中等文本赛道 2B 机位空出(E5 REINFORCE++ 训练完)后依次启动,本页 2B 机位当前仍被 E5 占用
Geo3K 601 题离线评测脚本待开发暂无现成 evalscope 多模态评测能力,需要另写

时间预算粗估:烟测几分钟~半小时;M1–M3 单 step 耗时待烟测校准(图文响应通常更短但视觉 encoder 有额外开销,方向不确定);评测每组 ~2-4h;合计与文本 5 组消融相近量级(约 1~1.5 周),实际以烟测结果为准。

📡
训练尚未开始,暂无监控数据
M1–M3 需等 2B 机位(当前被 E5 REINFORCE++ 占用)空出后依次启动。启动后本页会补上与 2B/4B 页面一致的结构:Pass rate / Geo3K acc / 响应长度 / entropy / grad_norm 逐 step 曲线,以及按 data_source 拆开的文本 vs 图文 reward 对比。

数据源规划:vlm_exp/logs/exp2card_mm/m1_geo3k_2b/train_*.log(M2/M3 同理),届时会复用 scripts/parse_4b_logs.py 同款解析逻辑产出 js/data-m*.js