Files
SkillOpt/ablation_plan.md
T
carpedkm eb4d1ee8d0 init
2026-05-08 08:37:13 +00:00

68 KiB
Raw Blame History

ReflACT Ablation Study 启动计划

最终可复现实验配置已单独固化在 configs/ablation_study/ matrix.yaml 记录公共 overrides、benchmark splits、消融变量、token/output caps 和无效 run 规则; launch_commands.sh 记录正确启动命令;validation.md 记录监控和填表检查。

当前新增实验目标有两类:

1. 新增 train.batch_size 消融:8 / 24 / 40 / 56 / fullgradient.minibatch_size 固定为 8。
2. 在现有 ablation table 方法不变的前提下,补齐 LiveMathBench、ALFWorld 和 DocVQA。

已完成的 SearchQA / SpreadsheetBench 结果不重复跑,除非缺 batch-size 新表所需的点。train.batch_size=40 是默认 setting,优先复用已有 default runLiveMathBench / ALFWorld 还没有 default 结果,因此需要先跑 default。

2026-05-06 Harness 冲分实验清单

目标:把 harness 分数跑高,而不是继续扩大无关 ablation 矩阵。当前只考虑 SearchQA、SpreadsheetBench、LiveMathBench、DocVQA 10%;不跑 ALFWorld harness。

状态规则:

[ ] = 还没起,另一台机器可以接着跑。
[x] = 已经起过、正在跑、或已经完成,不要重复起。

通用 harness 固定参数:

model.teacher_backend=openai_chat
model.teacher=gpt-5.5
model.teacher_azure_openai_endpoint=https://oaidr21.openai.azure.com/
model.teacher_azure_openai_auth_mode=azure_cli
model.reasoning_effort=medium
model.student_backend=codex_exec for the Codex rows
model.student=gpt-5.5
model.codex_exec_use_sdk=auto
model.codex_exec_sandbox=workspace-write
model.codex_exec_approval_policy=never
model.codex_exec_reasoning_effort=medium
model.codex_trace_to_teacher=true
train.num_epochs=4
train.train_size=0
train.accumulation=1
gradient.minibatch_size=8
gradient.merge_batch_size=8
gradient.analyst_workers=16
gradient.use_deep_reflect=false
optimizer.lr_control_mode=fixed
optimizer.skill_update_mode=patch
optimizer.use_slow_update=true
optimizer.slow_update_samples=20
optimizer.use_meta_skill=true
optimizer.use_meta_reflect=false
evaluation.use_gate=true
evaluation.eval_test=true
env.split_mode=split_dir

当前已经在跑或已经有结果的参考实验,不要重复起:

Status 通俗名字 Table row 说明
[x] SearchQA 从默认 skill 训练 Codex HARNESS-BESTSETTING-searchqa-codex fresh-machine completed, test 0.8800
[x] LiveMath 从默认 skill 训练 Codex HARNESS-BESTSETTING-livemathematicianbench-codex fresh-machine completed, test 0.7600
[x] LiveMath 从默认 skill 训练 Claude HARNESS-BESTSETTING-livemathematicianbench-claude fresh-machine completed, test 0.3040
[x] DocVQA10 从默认 skill 训练 Codex HARNESS-BESTSETTING-docvqa10pct-codex fresh-machine completed, test 0.7032
[x] DocVQA10 从默认 skill 训练 Claude HARNESS-BESTSETTING-docvqa10pct-claude fresh-machine completed after image fix, test 0.5802
[x] SearchQA 从默认 skill 训练 Claude HARNESS-BESTSETTING-searchqa-claude fresh-machine running
[x] Spreadsheet 从默认 skill 训练 Codex HARNESS-BESTSETTING-spreadsheetbench-codex fresh-machine running
[x] Spreadsheet 从默认 skill 训练 Claude HARNESS-BESTSETTING-spreadsheetbench-claude fresh-machine running
[x] SearchQA 最好 skill 迁移 Codex HARNESS-BESTSKILL-searchqa-codex completed, test 0.8714
[x] LiveMath 最好 skill 迁移 Codex HARNESS-BESTSKILL-livemathematicianbench-codex completed, test 0.8240
[x] DocVQA10 最好 skill 迁移 Codex HARNESS-BESTSKILL-docvqa10pct-codex completed, test 0.7032
[x] Spreadsheet 最好 skill 迁移 Codex HARNESS-BESTSKILL-spreadsheetbench-codex-multifix running on this machine
[x] 四个 Claude 最好 skill fixed rerun HARNESS-BESTSKILL-*-claude* running on this machine; wait for fixed summaries

Harness 冲分分三步:

Step 1: Codex 先搜 no-harness 里最可能高分的 setting。
Step 2: Claude Code 完整复制 Step 1 的 18 个 setting,用来比较两个 harness backend。
Step 3: Codex 再补齐 no-harness 里剩余可调参数。

全程固定:

optimizer.use_slow_update=true
optimizer.use_meta_skill=true
env.split_mode=split_dir
不调 split ratio;所有 harness 都用当前固定 harness split。
不跑 meta-only、slow-only、no-meta、no-slow 这类模块关闭实验。
所有 score-pushing run 都必须用 benchmark-level 唯一 best skill 初始化;不要用 setting-specific best_skill,也不要从默认初始 skill 训练。
SpreadsheetBench 所有 score-pushing run 都必须保持 env.mode=multi, env.workers=4, env.data_root=data/spreadsheetbench/files。

Step 1: Codex 高概率搜索,共 18 个。原则是从 docs/ablation_paper_tables.html 的 2:1:7 split 下所有消融实验中,为每个 benchmark 选 test 最好的一个 benchmark-level best_skill.md,再把不同参数设置迁移到 harness。每个 benchmark 只允许一个 source skill;参数 sweep 只改变参数,不改变 source skill。不选 split-ratio setting。

2026-05-06 note: the successful 2026-05-05 Codex harness rows used model.codex_exec_use_sdk=auto and actually executed through codex_sdk. The first local Codex Step 1 attempts were stopped and their outputs deleted because codex_exec hit student-side Codex service 429s under high concurrency. The 2026-05-06 08:04-08:26 UTC reruns were also stopped because they used setting-specific source skills instead of one benchmark-level source skill per benchmark. They are not valid results. Rerun these rows with SDK/auto auth restored, low local concurrency, and the canonical source skills below.

Canonical benchmark-level source skills: SearchQA: docs/harness_source_skills/searchqa_best_skill.md from outputs/ablation_20260502_040604_unique48/optimizer.lr_scheduler-searchqa-constant/best_skill.md, test 0.8729. SpreadsheetBench: docs/harness_source_skills/spreadsheetbench_best_skill.md from outputs/ablation_20260502_040604_unique48/optimizer.lr_scheduler-spreadsheetbench-constant/best_skill.md, test 0.8071. LiveMathBench: docs/harness_source_skills/livemathematicianbench_best_skill.md from outputs/ablation_livemath_alfworld_clean_20260503_155155_run/LR-livemathematicianbench-8/best_skill.md, test 0.6694. DocVQA: docs/harness_source_skills/docvqa_best_skill.md from outputs/ablation_docvqa_20260503_160225_run/BATCH-docvqa-full/best_skill.md, test 0.9049.

Status 通俗名字 建议 Run ID Benchmark Backend Skill init Split / data 需要改的参数
[ ] SearchQA skill + constant scheduler HARNESS-Codex-SearchQA-sched-constant SearchQA codex_exec docs/harness_source_skills/searchqa_best_skill.md data/searchqa/splits Pending valid rerun; 2026-05-06 setting-specific run stopped; Azure MI Codex wrapper, env.workers=2, env.exec_timeout=1020
[ ] SearchQA skill + linear scheduler HARNESS-Codex-SearchQA-sched-linear SearchQA codex_exec docs/harness_source_skills/searchqa_best_skill.md data/searchqa/splits Pending valid rerun; env.workers=2, env.exec_timeout=1020
[ ] SearchQA skill + full batch HARNESS-Codex-SearchQA-batch-full SearchQA codex_exec docs/harness_source_skills/searchqa_best_skill.md data/searchqa/splits Pending valid rerun; train.batch_size=400, env.workers=2, env.exec_timeout=1020
[ ] SearchQA skill + LR=8 HARNESS-Codex-SearchQA-lr8 SearchQA codex_exec docs/harness_source_skills/searchqa_best_skill.md data/searchqa/splits Pending valid rerun; optimizer.learning_rate=8, env.workers=2, env.exec_timeout=1020
[ ] Spreadsheet skill + constant scheduler HARNESS-Codex-Spreadsheet-sched-constant-multi SpreadsheetBench codex_exec docs/harness_source_skills/spreadsheetbench_best_skill.md data/spreadsheetbench, data root data/spreadsheetbench/files optimizer.learning_rate=4, optimizer.lr_scheduler=constant, optimizer.min_learning_rate=2, train.batch_size=40, env.mode=multi, env.workers=4
[ ] Spreadsheet skill + LR=4 HARNESS-Codex-Spreadsheet-lr4-multi SpreadsheetBench codex_exec docs/harness_source_skills/spreadsheetbench_best_skill.md data/spreadsheetbench, data root data/spreadsheetbench/files optimizer.learning_rate=4, optimizer.lr_scheduler=constant, optimizer.min_learning_rate=1, train.batch_size=40, env.mode=multi, env.workers=4
[ ] Spreadsheet skill + LR=16 HARNESS-Codex-Spreadsheet-lr16-multi SpreadsheetBench codex_exec docs/harness_source_skills/spreadsheetbench_best_skill.md data/spreadsheetbench, data root data/spreadsheetbench/files optimizer.learning_rate=16, optimizer.lr_scheduler=constant, optimizer.min_learning_rate=1, train.batch_size=40, env.mode=multi, env.workers=4
[ ] Spreadsheet skill + minibatch=16 HARNESS-Codex-Spreadsheet-minibatch16-multi SpreadsheetBench codex_exec docs/harness_source_skills/spreadsheetbench_best_skill.md data/spreadsheetbench, data root data/spreadsheetbench/files train.batch_size=40, gradient.minibatch_size=16, env.mode=multi, env.workers=4
[ ] LiveMath skill + LR=8 HARNESS-Codex-LiveMath-lr8 LiveMathBench codex_exec docs/harness_source_skills/livemathematicianbench_best_skill.md data/livemathbench/splits Pending valid rerun; teacher oaidr9 MI, Codex student MI wrapper, env.workers=2, env.exec_timeout=1020
[ ] LiveMath skill + LR=16 HARNESS-Codex-LiveMath-lr16 LiveMathBench codex_exec docs/harness_source_skills/livemathematicianbench_best_skill.md data/livemathbench/splits Pending valid rerun; optimizer.learning_rate=16, env.workers=2, env.exec_timeout=1020
[ ] LiveMath skill + slow10 HARNESS-Codex-LiveMath-slow10 LiveMathBench codex_exec docs/harness_source_skills/livemathematicianbench_best_skill.md data/livemathbench/splits Pending valid rerun; optimizer.slow_update_samples=10, teacher oaidr9 MI, Codex student MI wrapper
[ ] LiveMath skill + linear scheduler HARNESS-Codex-LiveMath-sched-linear LiveMathBench codex_exec docs/harness_source_skills/livemathematicianbench_best_skill.md data/livemathbench/splits Pending valid rerun; optimizer.lr_scheduler=linear, teacher oaidr9 MI, Codex student MI wrapper
[ ] LiveMath skill + minibatch=4 HARNESS-Codex-LiveMath-minibatch4 LiveMathBench codex_exec docs/harness_source_skills/livemathematicianbench_best_skill.md data/livemathbench/splits Pending valid rerun; gradient.minibatch_size=4, teacher oaidr9 MI, Codex student MI wrapper
[ ] DocVQA10 skill + full batch HARNESS-Codex-DocVQA10-batch-full DocVQA 10% codex_exec docs/harness_source_skills/docvqa_best_skill.md data/harness_splits/docvqa_zisu_first10pct Pending valid rerun; train.batch_size=107, teacher oaidr9 MI, absolute Codex wrapper
[ ] DocVQA10 skill + LR=16 HARNESS-Codex-DocVQA10-lr16 DocVQA 10% codex_exec docs/harness_source_skills/docvqa_best_skill.md data/harness_splits/docvqa_zisu_first10pct Pending valid rerun; optimizer.learning_rate=16, teacher oaidr9 MI, absolute Codex wrapper
[ ] DocVQA10 skill + LR=8 HARNESS-Codex-DocVQA10-lr8 DocVQA 10% codex_exec docs/harness_source_skills/docvqa_best_skill.md data/harness_splits/docvqa_zisu_first10pct Pending valid rerun; optimizer.learning_rate=8, teacher oaidr9 MI, absolute Codex wrapper
[ ] DocVQA10 skill + minibatch=32 HARNESS-Codex-DocVQA10-minibatch32 DocVQA 10% codex_exec docs/harness_source_skills/docvqa_best_skill.md data/harness_splits/docvqa_zisu_first10pct Pending valid rerun; gradient.minibatch_size=32, teacher oaidr9 MI, absolute Codex wrapper
[ ] DocVQA10 skill + student batch=24 HARNESS-Codex-DocVQA10-batch24 DocVQA 10% codex_exec docs/harness_source_skills/docvqa_best_skill.md data/harness_splits/docvqa_zisu_first10pct Pending valid rerun; train.batch_size=24, teacher oaidr9 MI, absolute Codex wrapper

Step 2: Claude Code 镜像实验,共 18 个。Claude Code 现在没有搜完;目前只是 fixed best-skill / best-setting 相关 run 在跑或部分完成。为了公平比较 harness backendClaude Step 2 应完整复制 Codex Step 1 的 18 个 setting,而不是只复制每个 benchmark 的 top 1。每个 benchmark 也只允许一个 benchmark-level source skill。每个 run 单独打勾,不能用一个勾概括一组。Claude Step 2 默认用 env.workers=2, env.exec_timeout=102017 分钟);不要再把 workers=4 当默认稳定设置。

Status 通俗名字 建议 Run ID Benchmark Backend Skill init 必须保持
[ ] Claude SearchQA skill + constant scheduler HARNESS-Claude-SearchQA-sched-constant SearchQA claude_code_exec docs/harness_source_skills/searchqa_best_skill.md Pending valid rerun; prior setting-specific run stopped; env.workers=2, env.exec_timeout=1020
[ ] Claude SearchQA skill + linear scheduler HARNESS-Claude-SearchQA-sched-linear SearchQA claude_code_exec docs/harness_source_skills/searchqa_best_skill.md Pending valid rerun; env.workers=2, env.exec_timeout=1020
[ ] Claude SearchQA skill + full batch HARNESS-Claude-SearchQA-batch-full SearchQA claude_code_exec docs/harness_source_skills/searchqa_best_skill.md Pending valid rerun; train.batch_size=400, env.workers=2, env.exec_timeout=1020
[ ] Claude SearchQA skill + LR=8 HARNESS-Claude-SearchQA-lr8 SearchQA claude_code_exec docs/harness_source_skills/searchqa_best_skill.md Pending valid rerun; optimizer.learning_rate=8, optimizer.lr_scheduler=constant, optimizer.min_learning_rate=1, env.workers=2, env.exec_timeout=1020
[ ] Claude Spreadsheet skill + constant scheduler HARNESS-Claude-Spreadsheet-sched-constant-multi SpreadsheetBench claude_code_exec docs/harness_source_skills/spreadsheetbench_best_skill.md env.mode=multi, env.workers=4, env.data_root=data/spreadsheetbench/files
[ ] Claude Spreadsheet skill + LR=4 HARNESS-Claude-Spreadsheet-lr4-multi SpreadsheetBench claude_code_exec docs/harness_source_skills/spreadsheetbench_best_skill.md env.mode=multi, env.workers=4, env.data_root=data/spreadsheetbench/files
[ ] Claude Spreadsheet skill + LR=16 HARNESS-Claude-Spreadsheet-lr16-multi SpreadsheetBench claude_code_exec docs/harness_source_skills/spreadsheetbench_best_skill.md env.mode=multi, env.workers=4, env.data_root=data/spreadsheetbench/files
[ ] Claude Spreadsheet skill + minibatch=16 HARNESS-Claude-Spreadsheet-minibatch16-multi SpreadsheetBench claude_code_exec docs/harness_source_skills/spreadsheetbench_best_skill.md env.mode=multi, env.workers=4, env.data_root=data/spreadsheetbench/files
[ ] Claude LiveMath skill + LR=8 HARNESS-Claude-LiveMath-lr8 LiveMathBench claude_code_exec docs/harness_source_skills/livemathematicianbench_best_skill.md Pending valid rerun; optimizer.learning_rate=8, optimizer.lr_scheduler=constant, optimizer.min_learning_rate=1, env.workers=2, env.exec_timeout=1020
[ ] Claude LiveMath skill + LR=16 HARNESS-Claude-LiveMath-lr16 LiveMathBench claude_code_exec docs/harness_source_skills/livemathematicianbench_best_skill.md Pending valid rerun; optimizer.learning_rate=16, optimizer.lr_scheduler=constant, optimizer.min_learning_rate=1, env.workers=2, env.exec_timeout=1020
[ ] Claude LiveMath skill + slow10 HARNESS-Claude-LiveMath-slow10 LiveMathBench claude_code_exec docs/harness_source_skills/livemathematicianbench_best_skill.md Pending valid rerun; optimizer.slow_update_samples=10, env.workers=2, env.exec_timeout=1020
[ ] Claude LiveMath skill + linear scheduler HARNESS-Claude-LiveMath-sched-linear LiveMathBench claude_code_exec docs/harness_source_skills/livemathematicianbench_best_skill.md Pending valid rerun; optimizer.lr_scheduler=linear, env.workers=2, env.exec_timeout=1020
[ ] Claude LiveMath skill + minibatch=4 HARNESS-Claude-LiveMath-minibatch4 LiveMathBench claude_code_exec docs/harness_source_skills/livemathematicianbench_best_skill.md Pending valid rerun; gradient.minibatch_size=4, env.workers=2, env.exec_timeout=1020
[ ] Claude DocVQA10 skill + full batch HARNESS-Claude-DocVQA10-batch-full DocVQA 10% claude_code_exec docs/harness_source_skills/docvqa_best_skill.md Pending valid rerun; train.batch_size=107, env.workers=2, env.exec_timeout=1020
[ ] Claude DocVQA10 skill + LR=16 HARNESS-Claude-DocVQA10-lr16 DocVQA 10% claude_code_exec docs/harness_source_skills/docvqa_best_skill.md Pending valid rerun; optimizer.learning_rate=16, env.workers=2, env.exec_timeout=1020
[ ] Claude DocVQA10 skill + LR=8 HARNESS-Claude-DocVQA10-lr8 DocVQA 10% claude_code_exec docs/harness_source_skills/docvqa_best_skill.md 确认 image attachment fix 生效
[ ] Claude DocVQA10 skill + minibatch=32 HARNESS-Claude-DocVQA10-minibatch32 DocVQA 10% claude_code_exec docs/harness_source_skills/docvqa_best_skill.md 确认 image attachment fix 生效
[ ] Claude DocVQA10 skill + student batch=24 HARNESS-Claude-DocVQA10-batch24 DocVQA 10% claude_code_exec docs/harness_source_skills/docvqa_best_skill.md 确认 image attachment fix 生效

Step 3: Codex 补齐剩余可调参数。这个阶段是计划内的后续补齐,不一次性全起;通常在 Step 1 初步结果后按 benchmark 展开。搜索空间来自 no-harness ablation 中所有仍允许调的参数;排除 split ratio 和模块关闭实验。每个 run 单独打勾;启动前必须设置 env.skill_init 指向该 benchmark 的 canonical best skill,不能用 setting-specific skill,也不能用默认初始 skill。

Status 建议 Run ID Benchmark 参数 必须保持
[ ] HARNESS-Codex-SearchQA-batch8 SearchQA train.batch_size=8 对应 no-harness best_skill
[ ] HARNESS-Codex-SearchQA-batch24 SearchQA train.batch_size=24 对应 no-harness best_skill
[ ] HARNESS-Codex-SearchQA-batch56 SearchQA train.batch_size=56 对应 no-harness best_skill
[ ] HARNESS-Codex-Spreadsheet-batch8-multi SpreadsheetBench train.batch_size=8 对应 no-harness best_skill; env.mode=multi
[ ] HARNESS-Codex-Spreadsheet-batch24-multi SpreadsheetBench train.batch_size=24 对应 no-harness best_skill; env.mode=multi
[ ] HARNESS-Codex-Spreadsheet-batch56-multi SpreadsheetBench train.batch_size=56 对应 no-harness best_skill; env.mode=multi
[ ] HARNESS-Codex-Spreadsheet-batch-full-multi SpreadsheetBench train.batch_size=80 对应 no-harness best_skill; env.mode=multi
[ ] HARNESS-Codex-LiveMath-batch8 LiveMathBench train.batch_size=8 对应 no-harness best_skill
[ ] HARNESS-Codex-LiveMath-batch24 LiveMathBench train.batch_size=24 对应 no-harness best_skill
[ ] HARNESS-Codex-LiveMath-batch56 LiveMathBench train.batch_size=56 对应 no-harness best_skill
[ ] HARNESS-Codex-LiveMath-batch-full LiveMathBench train.batch_size=35 对应 no-harness best_skill; current 2:1:7 train size
[ ] HARNESS-Codex-DocVQA10-batch8 DocVQA 10% train.batch_size=8 对应 no-harness best_skill
[ ] HARNESS-Codex-DocVQA10-batch56 DocVQA 10% train.batch_size=56 对应 no-harness best_skill
[ ] HARNESS-Codex-SearchQA-minibatch1 SearchQA gradient.minibatch_size=1 对应 no-harness best_skill
[ ] HARNESS-Codex-SearchQA-minibatch2 SearchQA gradient.minibatch_size=2 对应 no-harness best_skill
[ ] HARNESS-Codex-SearchQA-minibatch4 SearchQA gradient.minibatch_size=4 对应 no-harness best_skill
[ ] HARNESS-Codex-SearchQA-minibatch16 SearchQA gradient.minibatch_size=16 对应 no-harness best_skill
[ ] HARNESS-Codex-SearchQA-minibatch32 SearchQA gradient.minibatch_size=32 对应 no-harness best_skill
[ ] HARNESS-Codex-Spreadsheet-minibatch1-multi SpreadsheetBench gradient.minibatch_size=1 对应 no-harness best_skill; env.mode=multi
[ ] HARNESS-Codex-Spreadsheet-minibatch2-multi SpreadsheetBench gradient.minibatch_size=2 对应 no-harness best_skill; env.mode=multi
[ ] HARNESS-Codex-Spreadsheet-minibatch4-multi SpreadsheetBench gradient.minibatch_size=4 对应 no-harness best_skill; env.mode=multi
[ ] HARNESS-Codex-Spreadsheet-minibatch32-multi SpreadsheetBench gradient.minibatch_size=32 对应 no-harness best_skill; env.mode=multi
[ ] HARNESS-Codex-LiveMath-minibatch1 LiveMathBench gradient.minibatch_size=1 对应 no-harness best_skill
[ ] HARNESS-Codex-LiveMath-minibatch2 LiveMathBench gradient.minibatch_size=2 对应 no-harness best_skill
[ ] HARNESS-Codex-LiveMath-minibatch16 LiveMathBench gradient.minibatch_size=16 对应 no-harness best_skill
[ ] HARNESS-Codex-LiveMath-minibatch32 LiveMathBench gradient.minibatch_size=32 对应 no-harness best_skill
[ ] HARNESS-Codex-DocVQA10-minibatch1 DocVQA 10% gradient.minibatch_size=1 对应 no-harness best_skill
[ ] HARNESS-Codex-DocVQA10-minibatch2 DocVQA 10% gradient.minibatch_size=2 对应 no-harness best_skill
[ ] HARNESS-Codex-DocVQA10-minibatch4 DocVQA 10% gradient.minibatch_size=4 对应 no-harness best_skill
[ ] HARNESS-Codex-DocVQA10-minibatch16 DocVQA 10% gradient.minibatch_size=16 对应 no-harness best_skill
[ ] HARNESS-Codex-SearchQA-lr1 SearchQA optimizer.learning_rate=1, optimizer.lr_scheduler=constant, optimizer.min_learning_rate=1 对应 no-harness best_skill
[ ] HARNESS-Codex-SearchQA-lr2 SearchQA optimizer.learning_rate=2, optimizer.lr_scheduler=constant, optimizer.min_learning_rate=1 对应 no-harness best_skill
[ ] HARNESS-Codex-SearchQA-lr4 SearchQA optimizer.learning_rate=4, optimizer.lr_scheduler=constant, optimizer.min_learning_rate=1 对应 no-harness best_skill
[ ] HARNESS-Codex-SearchQA-lr16 SearchQA optimizer.learning_rate=16, optimizer.lr_scheduler=constant, optimizer.min_learning_rate=1 对应 no-harness best_skill
[ ] HARNESS-Codex-Spreadsheet-lr1-multi SpreadsheetBench optimizer.learning_rate=1, optimizer.lr_scheduler=constant, optimizer.min_learning_rate=1 对应 no-harness best_skill; env.mode=multi
[ ] HARNESS-Codex-Spreadsheet-lr2-multi SpreadsheetBench optimizer.learning_rate=2, optimizer.lr_scheduler=constant, optimizer.min_learning_rate=1 对应 no-harness best_skill; env.mode=multi
[ ] HARNESS-Codex-Spreadsheet-lr8-multi SpreadsheetBench optimizer.learning_rate=8, optimizer.lr_scheduler=constant, optimizer.min_learning_rate=1 对应 no-harness best_skill; env.mode=multi
[ ] HARNESS-Codex-LiveMath-lr1 LiveMathBench optimizer.learning_rate=1, optimizer.lr_scheduler=constant, optimizer.min_learning_rate=1 对应 no-harness best_skill
[ ] HARNESS-Codex-LiveMath-lr2 LiveMathBench optimizer.learning_rate=2, optimizer.lr_scheduler=constant, optimizer.min_learning_rate=1 对应 no-harness best_skill
[ ] HARNESS-Codex-LiveMath-lr4 LiveMathBench optimizer.learning_rate=4, optimizer.lr_scheduler=constant, optimizer.min_learning_rate=1 对应 no-harness best_skill
[ ] HARNESS-Codex-DocVQA10-lr1 DocVQA 10% optimizer.learning_rate=1, optimizer.lr_scheduler=constant, optimizer.min_learning_rate=1 对应 no-harness best_skill
[ ] HARNESS-Codex-DocVQA10-lr2 DocVQA 10% optimizer.learning_rate=2, optimizer.lr_scheduler=constant, optimizer.min_learning_rate=1 对应 no-harness best_skill
[ ] HARNESS-Codex-DocVQA10-lr4 DocVQA 10% optimizer.learning_rate=4, optimizer.lr_scheduler=constant, optimizer.min_learning_rate=1 对应 no-harness best_skill
[ ] HARNESS-Codex-Spreadsheet-sched-linear-multi SpreadsheetBench optimizer.learning_rate=4, optimizer.lr_scheduler=linear, optimizer.min_learning_rate=2 对应 no-harness best_skill; env.mode=multi
[ ] HARNESS-Codex-LiveMath-sched-constant LiveMathBench optimizer.learning_rate=4, optimizer.lr_scheduler=constant, optimizer.min_learning_rate=2 对应 no-harness best_skill
[ ] HARNESS-Codex-DocVQA10-sched-constant DocVQA 10% optimizer.learning_rate=4, optimizer.lr_scheduler=constant, optimizer.min_learning_rate=2 对应 no-harness best_skill
[ ] HARNESS-Codex-DocVQA10-sched-linear DocVQA 10% optimizer.learning_rate=4, optimizer.lr_scheduler=linear, optimizer.min_learning_rate=2 对应 no-harness best_skill
[ ] HARNESS-Codex-SearchQA-slow5 SearchQA optimizer.slow_update_samples=5 对应 no-harness best_skill
[ ] HARNESS-Codex-SearchQA-slow10 SearchQA optimizer.slow_update_samples=10 对应 no-harness best_skill
[ ] HARNESS-Codex-SearchQA-slow40 SearchQA optimizer.slow_update_samples=40 对应 no-harness best_skill
[ ] HARNESS-Codex-Spreadsheet-slow5-multi SpreadsheetBench optimizer.slow_update_samples=5 对应 no-harness best_skill; env.mode=multi
[ ] HARNESS-Codex-Spreadsheet-slow10-multi SpreadsheetBench optimizer.slow_update_samples=10 对应 no-harness best_skill; env.mode=multi
[ ] HARNESS-Codex-Spreadsheet-slow40-multi SpreadsheetBench optimizer.slow_update_samples=40 对应 no-harness best_skill; env.mode=multi
[ ] HARNESS-Codex-LiveMath-slow5 LiveMathBench optimizer.slow_update_samples=5 对应 no-harness best_skill
[ ] HARNESS-Codex-LiveMath-slow40 LiveMathBench optimizer.slow_update_samples=40 对应 no-harness best_skill
[ ] HARNESS-Codex-DocVQA10-slow5 DocVQA 10% optimizer.slow_update_samples=5 对应 no-harness best_skill
[ ] HARNESS-Codex-DocVQA10-slow10 DocVQA 10% optimizer.slow_update_samples=10 对应 no-harness best_skill
[ ] HARNESS-Codex-DocVQA10-slow40 DocVQA 10% optimizer.slow_update_samples=40 对应 no-harness best_skill
[ ] HARNESS-Codex-SearchQA-policy-changed SearchQA optimizer.longitudinal_pair_policy=changed 对应 no-harness best_skill
[ ] HARNESS-Codex-SearchQA-policy-unchanged SearchQA optimizer.longitudinal_pair_policy=unchanged 对应 no-harness best_skill
[ ] HARNESS-Codex-Spreadsheet-policy-changed-multi SpreadsheetBench optimizer.longitudinal_pair_policy=changed 对应 no-harness best_skill; env.mode=multi
[ ] HARNESS-Codex-Spreadsheet-policy-unchanged-multi SpreadsheetBench optimizer.longitudinal_pair_policy=unchanged 对应 no-harness best_skill; env.mode=multi
[ ] HARNESS-Codex-LiveMath-policy-changed LiveMathBench optimizer.longitudinal_pair_policy=changed 对应 no-harness best_skill
[ ] HARNESS-Codex-LiveMath-policy-unchanged LiveMathBench optimizer.longitudinal_pair_policy=unchanged 对应 no-harness best_skill
[ ] HARNESS-Codex-DocVQA10-policy-changed DocVQA 10% optimizer.longitudinal_pair_policy=changed 对应 no-harness best_skill
[ ] HARNESS-Codex-DocVQA10-policy-unchanged DocVQA 10% optimizer.longitudinal_pair_policy=unchanged 对应 no-harness best_skill

Step 3 展开数量:共 66 个 Codex 实验。计数规则是:排除 Step 1 已经覆盖的值,排除现有 default/best-skill/best-setting 已覆盖的默认值,排除 split ratio 和模块关闭组合。

参数组 SearchQA SpreadsheetBench LiveMathBench DocVQA10 小计
train.batch_size 3 4 4 2 13
gradient.minibatch_size 5 4 4 4 17
optimizer.learning_rate 4 3 3 3 13
optimizer.lr_scheduler 0 1 1 2 4
optimizer.slow_update_samples 3 3 2 3 11
optimizer.longitudinal_pair_policy 2 2 2 2 8
Total 17 17 16 15 66

数量上限:

Codex Step 118 个。
Claude Step 218 个,完整复制 Codex Step 1 的 setting。
Codex Step 366 个,补齐剩余允许参数。
当前完整计划总量:102 个新实验。
实际启动原则:每轮最多 1-4 个,高负载时不要继续加。

明确不跑:

1. 不跑 ALFWorld harness。
2. 不在本机重复 fresh-machine best-setting from-scratch。
3. 不一次性启动 8 个 harness best-setting。
4. 不在 Claude fixed rerun 完成前做 Claude Step 2 镜像实验。
5. Claude Step 2 只复制 Codex Step 1 的 18 个 settingStep 3 不默认镜像到 Claude。
6. 不跑 `optimizer.use_slow_update/use_meta_skill` 的 off/on 模块关闭组合。

0. 启动前强制检查

每次启动新一批实验前必须满足:

检查项 必须满足
Python 使用 /home/azureuser/workspace-gzy/miniconda3/envs/reflact/bin/python
代码语法 py_compile 覆盖 launcher、train、LiveMathBench dataloader、ALFWorld dataloader/adapter
Harness 普通 ablation 使用 model.teacher_backend=openai_chatmodel.student_backend=openai_chat;本节 harness 冲分使用 model.teacher_backend=openai_chatmodel.student_backend=codex_exec/claude_code_exec
模型 teacher/student 默认均为 gpt-5.5
Azure 当前 harness 冲分 endpoint 使用 https://oaidr21.openai.azure.com/
Auth teacher/student 默认均使用 azure_cli
API version teacher/student 默认均为 2024-12-01-preview
Reasoning model.reasoning_effort=mediumteacher 和 student 都必须生效
Split 所有 benchmark 都使用固定 env.split_mode=split_dir
Train size train.train_size=0,由 split 自动推断
Batch 逻辑 steps_per_epoch = ceil(train_size / (train.batch_size * train.accumulation))
Rollout 并发 本轮 active benchmark 的 rollout 不允许使用裸 as_completed; 必须使用 wait(..., FIRST_COMPLETED) + started-at timeout,避免最后一个 future 卡死
LLM timeout chat_student / chat_student_messages 必须向 SDK 传入显式 timeout,不能只依赖外层 future timeout
Gate/Test evaluation.use_gate=trueevaluation.eval_test=true
输出目录 每个 run 的 env.out_root 唯一;错误目录不复用

启动后立刻检查每个 run 的 config.json 和 log 前 50 行,确认模型、split、reasoning、train size、batch size、消融参数都正确。

1. 固定默认 Setting

除当前消融变量外,所有实验固定:

参数 默认值
model.teacher_backend openai_chat
model.student_backend openai_chat
model.teacher gpt-5.5
model.student gpt-5.5
model.teacher_azure_openai_endpoint https://t2vgoaigpt4o3.openai.azure.com/
model.student_azure_openai_endpoint https://t2vgoaigpt4o3.openai.azure.com/
model.teacher_azure_openai_api_version 2024-12-01-preview
model.student_azure_openai_api_version 2024-12-01-preview
model.teacher_azure_openai_auth_mode azure_cli
model.student_azure_openai_auth_mode azure_cli
model.reasoning_effort medium
train.num_epochs 4
train.train_size 0
train.batch_size 40
train.accumulation 1
train.seed 42
gradient.minibatch_size 8
gradient.merge_batch_size 8
gradient.analyst_workers 16
gradient.use_deep_reflect false
optimizer.learning_rate 4
optimizer.min_learning_rate 2
optimizer.lr_scheduler cosine
optimizer.skill_update_mode patch
optimizer.use_slow_update true
optimizer.slow_update_samples 20
optimizer.use_meta_skill true
optimizer.use_meta_reflect false
evaluation.use_gate true
evaluation.eval_test true

Benchmark 固定项:

Benchmark Config Default split Train Val Test Student rollout
SearchQA configs/searchqa/default.yaml data/ablation_splits/searchqa/2-1-7_seed42 400 200 1400 chat_student
SpreadsheetBench configs/spreadsheetbench/default.yaml data/ablation_splits/spreadsheetbench/2-1-7_seed42 80 40 280 codegen_agent.py -> get_student_client()
LiveMathBench configs/livemathematicianbench/default.yaml data/ablation_splits/livemathematicianbench/2-1-7_seed42 35 18 124 chat_student
ALFWorld configs/alfworld/default.yaml data/ablation_splits/alfworld/2-1-7_seed42 39 18 134 chat_student
DocVQA configs/docvqa/default.yaml /home/azureuser/zisu/SkillReflection/data/docvqa/splits 1070 535 3744 chat_student_messages

ALFWorld 必须设置:

export ALFWORLD_DATA=/home/azureuser/.cache/alfworld

2. 已验证的数据和 loader 行为

LiveMathBench 使用固定 JSON split,训练时每个 batch 内仍按 seed shuffle choices。已验证 batch 切分:

train.batch_size Train size Steps/epoch Batch sizes
8 35 5 8 + 8 + 8 + 8 + 3
24 35 2 24 + 11
40 35 1 35
56 35 1 35
full 35 1 35

ALFWorld 使用固定 gamefile split39 个 train gamefile 从本地 /home/azureuser/.cache/alfworld/json_2.1.1/train 中固定抽样,val/test 分别来自 valid_seen / valid_unseen。已验证本地 gamefile 全部存在,并做过单环境 reset() smoke。

train.batch_size Train size Steps/epoch Batch sizes
8 39 5 8 + 8 + 8 + 8 + 7
24 39 2 24 + 15
40 39 1 39
56 39 1 39
full 39 1 39

新增 benchmark 的 env.split_dir 多比例数据已补齐:

Benchmark Split Train Val Test 说明
LiveMathBench 1shot_seed42 1 1 175 从同一 177-item 候选池生成
LiveMathBench 1-1-8_seed42 18 18 141 从同一 177-item 候选池生成
LiveMathBench 2-1-7_seed42 35 18 124 scripts/prepare_ablation_splits.py 同一整数规则生成
LiveMathBench 4-1-5_seed42 71 18 88 从同一 177-item 候选池生成
ALFWorld 1shot_seed42 1 1 134 domain-preserving fixed gamefiles
ALFWorld 1-1-8_seed42 18 18 134 train 只来自 official trainval/test 保持 valid_seen/valid_unseen
ALFWorld 2-1-7_seed42 39 18 134 已验证 fixed split
ALFWorld 4-1-5_seed42 82 18 103 train 只来自 train_pool_80test 从 valid_unseen 固定抽样
DocVQA 1shot_seed42 1 1 5347 从同一 5349-item 候选池生成
DocVQA 1-1-8_seed42 535 535 4279 scripts/prepare_ablation_splits.py 同一整数规则生成
DocVQA zisu splits 1070 535 3744 直接使用 /home/azureuser/zisu/SkillReflection/data/docvqa/splits;旧 2-1-7_seed42 是同一 5349 样本池的重新划分,不再作为最终 2:1:7
DocVQA 4-1-5_seed42 2140 535 2674 scripts/prepare_ablation_splits.py 同一整数规则生成

DocVQA 图片目录不复制,使用 symlink:

data/docvqa_images -> /home/azureuser/zisu/SkillReflection/data/docvqa_images

2026-05-05 DocVQA 数据修正:

使用路径:/home/azureuser/zisu/SkillReflection/data/docvqa/splits
数量:train=1070, val=535, test=3744, total=5349
CSV 字段:question, answer, topic, questionId, docId, image_path, ...
图片:所有抽查和全量 image_path 均可通过 data/docvqa_images symlink 解析
对比:旧 data/ablation_splits/docvqa/2-1-7_seed42 与 zisu split 的 5349 questionId 集合完全相同,但 train/val/test 分配不同。
结论:所有 DocVQA 2:1:7 结果需要按 zisu split 重跑;旧 DocVQA 表格结果仅作历史参考。
建议新 run_rootoutputs/ablation_docvqa_zisu10pct_20260505_run,避免旧 outputs/ablation_docvqa_20260503_160225_run 的 summary.json 被 launcher 跳过。

3. 新跑实验清单

3.1 LiveMathBench / ALFWorld / DocVQA 补齐现有 ablation table

对 LiveMathBench、ALFWorld 和 DocVQA 新跑下面这些组;默认点会被复用,不重复跑同一设置:

Values 每 benchmark 新 run 数
default 默认 gpt-5.5/gpt-5.5 setting 1
env.split_dir 1shot / 1-1-8 / 4-1-5,跳过默认 2-1-7 3
gradient.minibatch_size 1 / 2 / 4 / 16 / 32,跳过默认 8 5
optimizer.learning_rate 1 / 2 / 4 / 8 / 16,本组固定 lr_scheduler=constant min_learning_rate=1 5
optimizer.lr_scheduler constant / linear,跳过默认 cosine 2
optimizer.slow_update_samples 5 / 10 / 40,跳过默认 20 3
optimizer.use_slow_update / optimizer.use_meta_skill true,false / false,true / false,false,跳过默认 true,true 3
model.student gpt-5.4-pro / gpt-5.4-mini,跳过默认 gpt-5.5 2

合计:每个新增 benchmark 24 个现有表补齐 run;三个 benchmark 共 72 个。

3.2 新增 train.batch_size ablation

对五个 benchmark 都补 batch-size 表:

train.batch_size = 8 / 24 / 40 / 56 / full
gradient.minibatch_size = 8

train.batch_size=40 是默认点:

Benchmark full 展开值 默认 40 来源 需要新跑 batch 点
SearchQA 400 复用已有 default 8 / 24 / 56 / full
SpreadsheetBench 80 复用已有 default 8 / 24 / 56 / full
LiveMathBench 35 复用本轮新增 default 8 / 24 / 56 / full
ALFWorld 39 复用本轮新增 default 8 / 24 / 56 / full
DocVQA 1070 复用本轮新增 default 8 / 24 / 56 / full

新增 batch-size run 数:五个 benchmark 共 20 个。

3.3 本轮总新增 run 数

实验块 SearchQA SpreadsheetBench LiveMathBench ALFWorld DocVQA 新增合计
补齐现有 table 0 0 24 24 24 72
新增 batch-size table 4 4 4 4 4 20
合计 4 4 28 28 28 92

3.4 新增 longitudinal comparison example policy ablation

这个实验只改变 slow update 和 meta skill 看到的 comparison examples,不改 prompt、不改模型、不改 rollout、不改优化主流程。默认 mixed 复用原版随机 20 条。

Policy Comparison examples Top-up 规则
mixed 原版随机样本,可能包含 10/01/00/11 不额外补样本
changed 只保留 10/01,即 improved/regressed 不满 20 时继续从 train split 扫描补满,扫完整个 train split 为止
unchanged 只保留 00/11,即 persistent_fail/stable_success 不强求 20 条,不补样本

本轮先跑除 ALFWorld 外四个 benchmark

SearchQA / SpreadsheetBench / LiveMathBench / DocVQA

新增 run 数:4 benchmarks x 2 policies = 8

3.5 新增 learning-rate-control baseline

这个实验只在除 ALFWorld 外四个 benchmark 上跑:

SearchQA / SpreadsheetBench / LiveMathBench / DocVQA

两类 baseline

Run 设置 说明
autonomous optimizer.lr_control_mode=autonomous 保留 edit/patch 框架,但每个 step 由 teacher 根据当前证据自主输出一个整数 LR;prompt 不给默认 LR、候选 LR 或历史 LR 先验;每步写 lr_decision.json,全局写 lr_history.jsonl
full-rewrite optimizer.lr_control_mode=none + optimizer.skill_update_mode=full_rewrite_minibatch 去掉 LR/edit budget/select/apply-edit;每个 minibatch 直接生成完整 skill candidateaggregate/merge 直接合成最终 candidate skill

新增 run 数:4 benchmarks x 2 baselines = 8

实现落点:

功能 文件
autonomous LR 决策 reflact/optimizer/lr_autonomous.py
LR control config configs/_base_/default.yaml, reflact/config.py, scripts/train.py
full-rewrite-minibatch mode reflact/optimizer/update_modes.py, reflact/gradient/reflect.py, reflact/gradient/aggregate.py, reflact/engine/trainer.py
autonomous LR prompt reflact/prompts/lr_autonomous.md
full-rewrite analyst prompts reflact/prompts/analyst_error_full_rewrite.md, reflact/prompts/analyst_success_full_rewrite.md
full-rewrite merge prompts reflact/prompts/merge_failure_full_rewrite.md, reflact/prompts/merge_success_full_rewrite.md, reflact/prompts/merge_final_full_rewrite.md

验证记录:

py_compile passed for train, config, trainer, reflect, aggregate, update_modes, lr_autonomous, env base.
SearchQA smoke autonomous passed: wrote steps/step_0001/lr_decision.json and lr_history.jsonl.
SearchQA smoke full-rewrite passed: wrote steps/step_0001/full_rewrite_result.json and candidate_skill.md.
Formal LRCTRL config alignment vs default: ALL OK.

正式 run root

outputs/ablation_lrctrl_20260504_run

正式启动后必须检查:

autonomous: lr_decision.json count increases with steps; lr_history.jsonl exists.
full-rewrite: full_rewrite_result.json count increases with steps; edit_budget in step_record is null.
all: config.json differs from default only in lr_control_mode / skill_update_mode / out_root.

2026-05-05 minimal-prompt full-rewrite rerun:

Motivation:
The original full-rewrite prompts were highly guided: expert rewriter framing,
failure corrections as high priority, preservation of strongest guidance, and
explicit generalizable behavioral guidance. To test a less scaffolded rewrite
baseline, the original full-rewrite prompt files were replaced in-place with
summary-style prompts.

Changed prompt files:
- reflact/prompts/analyst_error_full_rewrite.md
- reflact/prompts/analyst_success_full_rewrite.md
- reflact/prompts/merge_failure_full_rewrite.md
- reflact/prompts/merge_success_full_rewrite.md
- reflact/prompts/merge_final_full_rewrite.md

The replacement prompts keep the same JSON schema and still require complete
replacement skill documents, but only ask the model to summarize lessons or
combine complete skill candidates. They keep the no-task-specific-answer rule.

Runs started manually, not via matrix launcher:
run_root=outputs/rerun_lrctrl_fullrewrite_minimalprompt_20260505_run

LRCTRL-searchqa-full-rewrite-minimalprompt
  pid=281937
  config=configs/searchqa/default.yaml
  split=data/ablation_splits/searchqa/2-1-7_seed42
  verified train/val/test=400/200/1400
  overrides: optimizer.lr_control_mode=none, optimizer.skill_update_mode=full_rewrite_minibatch

LRCTRL-spreadsheetbench-full-rewrite-minimalprompt
  pid=281938
  config=configs/spreadsheetbench/default.yaml
  split=data/ablation_splits/spreadsheetbench/2-1-7_seed42
  verified train/val/test=80/40/280
  overrides: optimizer.lr_control_mode=none, optimizer.skill_update_mode=full_rewrite_minibatch

Table status rows were added in docs/ablation_paper_tables.md; metrics remain
blank until summary.json is produced.

2026-05-05 14:48 UTC update:

The code-assembled final merge user prompt also had hardcoded priority wording:
`Group 1 (failure-driven, HIGH priority)` and `Group 2 (success-driven, lower priority)`.
For `full_rewrite_minibatch` only, this was changed in `reflact/gradient/aggregate.py`
to neutral source labels: `Group 1 (from failed trajectories)` and
`Group 2 (from successful trajectories)`. Ordinary patch-mode merging keeps the
existing failure-priority prompt.

The earlier two `minimalprompt` processes were stopped before `summary.json`.
The replacement runs use a fresh root:

run_root=outputs/rerun_lrctrl_fullrewrite_minimalprompt_neutralmerge_20260505_run

LRCTRL-searchqa-full-rewrite-minimalprompt-neutralmerge
  pid=438572
  config=configs/searchqa/default.yaml
  split=data/ablation_splits/searchqa/2-1-7_seed42
  verified train/val/test=400/200/1400
  overrides: optimizer.lr_control_mode=none, optimizer.skill_update_mode=full_rewrite_minibatch

LRCTRL-spreadsheetbench-full-rewrite-minimalprompt-neutralmerge
  pid=438573
  config=configs/spreadsheetbench/default.yaml
  split=data/ablation_splits/spreadsheetbench/2-1-7_seed42
  verified train/val/test=80/40/280
  overrides: optimizer.lr_control_mode=none, optimizer.skill_update_mode=full_rewrite_minibatch

3.6 当前 active experiments snapshot

2026-05-04 18:00 UTC 左右,当前不跑 ALFWorldactive 训练进程保持 24 个,无重复 out_root。

DocVQA 旧矩阵剩余 8 个:

SLOWN-docvqa-5
SLOWN-docvqa-10
SLOWN-docvqa-40
MOD-docvqa-slow-only
MOD-docvqa-meta-only
MOD-docvqa-none
SMODEL-docvqa-5.4
SMODEL-docvqa-5.4-mini

Longitudinal comparison-example policy 8 个:

LONGPAIR-searchqa-changed
LONGPAIR-searchqa-unchanged
LONGPAIR-spreadsheetbench-changed
LONGPAIR-spreadsheetbench-unchanged
LONGPAIR-livemathematicianbench-changed
LONGPAIR-livemathematicianbench-unchanged
LONGPAIR-docvqa-changed
LONGPAIR-docvqa-unchanged

Learning-rate-control baseline 8 个:

LRCTRL-searchqa-autonomous
LRCTRL-searchqa-full-rewrite
LRCTRL-spreadsheetbench-autonomous
LRCTRL-spreadsheetbench-full-rewrite
LRCTRL-livemathematicianbench-autonomous
LRCTRL-livemathematicianbench-full-rewrite
LRCTRL-docvqa-autonomous
LRCTRL-docvqa-full-rewrite

DocVQA skill-none eval 另有一个 eval-only 进程在跑,不计入 24 个 train:

outputs/ablation_docvqa_20260503_160225_run/skill-none-model.student-docvqa-5.5

旧的 0-byte partial 已归档:

outputs/ablation_docvqa_20260503_160225_run/archive_skill_none_docvqa_empty_20260504_175635

3.7 2026-05-05 handoff snapshot

2026-05-05 08:26 UTC 手动检查状态如下。本节覆盖上一节的过期 active snapshot;上一节只作为历史记录保留。

当前没有 run_ablation_matrix.py launcher、rerun_unfinished_no_prior helper 或自动监控脚本在跑。只保留已经直接启动的 scripts/train.py 实验进程。由于 ALFWorld 会派生本地环境 worker,进程行数会被放大;统计时必须按唯一 env.out_root/run id 计数。

当前 active setting 共 19 个:

DEFAULT-alfworld-5.5
SPLIT-alfworld-1shot
SPLIT-alfworld-1-1-8
SPLIT-alfworld-4-1-5
BATCH-alfworld-8
BATCH-alfworld-24
BATCH-alfworld-56
BATCH-alfworld-full
MBS-alfworld-1
MBS-alfworld-2
MBS-alfworld-4
MBS-alfworld-16
MBS-alfworld-32
LR-alfworld-1
LR-alfworld-2
LR-alfworld-4
LONGPAIR-spreadsheetbench-changed
LRCTRL-docvqa-full-rewrite
LRCTRL-spreadsheetbench-autonomous

当前尚未启动、建议交给新机器补跑的 setting 共 17 个:

LR-alfworld-8
LR-alfworld-16
SCHED-alfworld-constant
SCHED-alfworld-linear
SLOWN-alfworld-5
SLOWN-alfworld-10
SLOWN-alfworld-40
MOD-alfworld-slow-only
MOD-alfworld-meta-only
MOD-alfworld-none
SMODEL-alfworld-5.4
SMODEL-alfworld-5.4-mini
LONGPAIR-alfworld-changed
LONGPAIR-alfworld-unchanged
LRCTRL-alfworld-autonomous
LRCTRL-alfworld-full-rewrite
LRCTRL-docvqa-autonomous

No-prior autonomous LR rerun 状态:

done: LRCTRL-searchqa-autonomous
done: LRCTRL-livemathematicianbench-autonomous
active: LRCTRL-spreadsheetbench-autonomous
not started: LRCTRL-docvqa-autonomous

健康状态:

true 429 check: none found in active logs
Traceback/OOM/Killed check: none found in active logs
memory: about 617 GiB available, train RSS about 20 GiB
known non-fatal issue: SpreadsheetBench active runs have task-level TIMEOUT rows during rollout; these are benchmark item timeouts, not API 429.

继续手动监控时用这个唯一 run-id 统计,不要用裸进程行数:

/home/azureuser/workspace-gzy/miniconda3/envs/reflact/bin/python - <<'PY'
import os, re, subprocess, collections
out = subprocess.check_output(["ps", "-eo", "pid,ppid,lstart,cmd"], text=True, errors="replace")
by = collections.defaultdict(list)
root_by = {}
for line in out.splitlines()[1:]:
    if "scripts/train.py" not in line or "python - <<" in line or "ps -eo" in line:
        continue
    m = re.search(r"env\.out_root=([^\s]+)", line)
    if not m:
        continue
    root = m.group(1)
    run_id = os.path.basename(root.rstrip("/"))
    by[run_id].append(line.split(None, 1)[0])
    root_by[run_id] = root
print(f"unique_active_settings={len(by)} process_rows={sum(len(v) for v in by.values())}")
for run_id in sorted(by):
    print(f"{run_id}\trows={len(by[run_id])}\troot={root_by[run_id]}")
PY

真实 429 检查必须用错误文本,不要把 ALFWorld progress bar 的 429/494 误判为 rate limit

rg -n "Error code: 429|too_many_requests|Too Many Requests|Rate limit|rate_limit" \
  outputs/ablation_alfworld_nonray_20260505_run/logs \
  outputs/ablation_longpair_20260504_run/logs/LONGPAIR-spreadsheetbench-changed.log \
  outputs/ablation_lrctrl_20260504_run/logs/LRCTRL-docvqa-full-rewrite.log \
  outputs/ablation_lrctrl_autonomous_noprior_20260505_031612_run/logs/LRCTRL-spreadsheetbench-autonomous.rerun_20260505_0800.log \
  2>/dev/null || true

3.8 Fresh-machine handoff

新机器目标:不要重复当前 19 个 active setting;只补跑 17 个 not-started setting。若新机器和当前机器共享同一磁盘,必须使用新的 run root,避免与当前 active writer 混写。推荐:

ALFWorld remaining root:
outputs/ablation_alfworld_nonray_newmachine_20260505_run

DocVQA no-prior autonomous root:
outputs/ablation_lrctrl_autonomous_noprior_newmachine_20260505_run

环境准备:

git clone <repo-url> SkillReflection
cd SkillReflection
git checkout ablation

conda create -n reflact python=3.11 -y
conda activate reflact
python -m pip install -U pip
python -m pip install openai pyyaml openpyxl numpy gymnasium ray regex tqdm alfworld textworld

az login
az account show

export ALFWORLD_DATA=/home/azureuser/.cache/alfworld
test -d "$ALFWORLD_DATA/json_2.1.1/train"
[ -L data/docvqa_images ] || [ -d data/docvqa_images ]

如果 DocVQA 图片目录不在仓库内,按机器实际路径建立 symlink:

ln -s /path/to/docvqa_images data/docvqa_images

启动前验证:

PY=$(which python)
$PY -m py_compile \
  scripts/train.py \
  scripts/run_ablation_matrix.py \
  reflact/envs/alfworld/rollout.py \
  reflact/envs/docvqa/rollout.py \
  reflact/engine/trainer.py \
  reflact/model/azure_openai.py

$PY - <<'PY'
from reflact.envs.alfworld.dataloader import load_alfworld_splits
s = load_alfworld_splits("data/ablation_splits/alfworld/2-1-7_seed42")
print(len(s["train"]), len(s["val"]), len(s["test"]))
PY

只生成 ALFWorld 剩余 16 个 direct train 命令。注意:run_ablation_matrix.py 原始 dry-run 会枚举整个 ALFWorld matrix,显示 num_experiments=32 是正常的,但这 32 个不能全跑;其中 16 个已经在当前机器 active,只能启动 filtered list 里的 16 个 remaining run。

PY=$(which python)
$PY scripts/run_ablation_matrix.py \
  --groups default split batch mbs lr sched slown mod smodel longpair lrctrl \
  --bench alfworld \
  --run-root /home/azureuser/workspace-gzy/SkillReflection/outputs/ablation_alfworld_nonray_newmachine_20260505_run \
  > /tmp/alfworld_all_32_commands.txt

$PY - <<'PY'
from pathlib import Path

remaining = {
    "LR-alfworld-8",
    "LR-alfworld-16",
    "SCHED-alfworld-constant",
    "SCHED-alfworld-linear",
    "SLOWN-alfworld-5",
    "SLOWN-alfworld-10",
    "SLOWN-alfworld-40",
    "MOD-alfworld-slow-only",
    "MOD-alfworld-meta-only",
    "MOD-alfworld-none",
    "SMODEL-alfworld-5.4",
    "SMODEL-alfworld-5.4-mini",
    "LONGPAIR-alfworld-changed",
    "LONGPAIR-alfworld-unchanged",
    "LRCTRL-alfworld-autonomous",
    "LRCTRL-alfworld-full-rewrite",
}

lines = Path("/tmp/alfworld_all_32_commands.txt").read_text().splitlines()
out = []
current = None
for line in lines:
    if line.startswith("# "):
        current = line[2:].strip()
        continue
    if current in remaining and "scripts/train.py" in line:
        out.append(f"# {current}")
        out.append(line)
        current = None

missing = remaining - {out[i][2:] for i in range(0, len(out), 2)}
if missing:
    raise SystemExit(f"missing commands: {sorted(missing)}")
Path("/tmp/alfworld_remaining_16_commands.txt").write_text("\n".join(out) + "\n")
print("remaining_alfworld_commands", len(out) // 2)
PY

只允许启动 /tmp/alfworld_remaining_16_commands.txt 里的这些 header 后面的命令,逐个用 setsid ... > logs/<run_id>.log 2>&1 & 手动启动:

LR-alfworld-8
LR-alfworld-16
SCHED-alfworld-constant
SCHED-alfworld-linear
SLOWN-alfworld-5
SLOWN-alfworld-10
SLOWN-alfworld-40
MOD-alfworld-slow-only
MOD-alfworld-meta-only
MOD-alfworld-none
SMODEL-alfworld-5.4
SMODEL-alfworld-5.4-mini
LONGPAIR-alfworld-changed
LONGPAIR-alfworld-unchanged
LRCTRL-alfworld-autonomous
LRCTRL-alfworld-full-rewrite

生成 DocVQA no-prior autonomous direct train 命令,同样不加 --execute,只启动 LRCTRL-docvqa-autonomous,不要启动 full-rewrite

PY=$(which python)
$PY scripts/run_ablation_matrix.py \
  --groups lrctrl \
  --bench docvqa \
  --run-root /home/azureuser/workspace-gzy/SkillReflection/outputs/ablation_lrctrl_autonomous_noprior_newmachine_20260505_run \
  > /tmp/docvqa_lrctrl_noprior_command.txt

建议新机器第一批不要超过 16 个 direct train;如果 15-30 分钟内无真实 429、无 OOM、日志持续增长,再补到 20-24。不要把 helper/launcher 留在后台自动补位;本轮按手动观察、手动起进程执行。

4. 启动命令

当前恢复第一轮节奏:总并发约 24 个 train。具体做法是拆成 3 个 matrix launcher,每个 --max-parallel 8。不要给每个 launcher 设 24,否则会超过总并发预期。

如果刚修完 runner 或刚接入新 benchmark,可以先用 --max-parallel 1 做短 smoke;确认没有重复 out_root、tail-sample hang、配置错误后,再切到下面的 24-way 运行方式。

4.1 当前 24-way 启动方式

export ALFWORLD_DATA=/home/azureuser/.cache/alfworld

setsid /home/azureuser/workspace-gzy/miniconda3/envs/reflact/bin/python \
  scripts/run_ablation_matrix.py \
  --groups default split batch mbs lr sched slown mod smodel \
  --bench docvqa \
  --run-root /home/azureuser/workspace-gzy/SkillReflection/outputs/ablation_docvqa_20260503_160225_run \
  --max-parallel 8 \
  --execute \
  > /home/azureuser/workspace-gzy/SkillReflection/outputs/ablation_docvqa_20260503_160225_run/launcher_parallel8.log 2>&1 &

setsid /home/azureuser/workspace-gzy/miniconda3/envs/reflact/bin/python \
  scripts/run_ablation_matrix.py \
  --groups default split batch mbs lr sched slown mod smodel \
  --bench livemathematicianbench alfworld \
  --run-root /home/azureuser/workspace-gzy/SkillReflection/outputs/ablation_livemath_alfworld_clean_20260503_155155_run \
  --max-parallel 8 \
  --execute \
  > /home/azureuser/workspace-gzy/SkillReflection/outputs/ablation_livemath_alfworld_clean_20260503_155155_run/launcher_parallel8.log 2>&1 &

setsid /home/azureuser/workspace-gzy/miniconda3/envs/reflact/bin/python \
  scripts/run_ablation_matrix.py \
  --groups batch \
  --bench searchqa spreadsheetbench \
  --run-root /home/azureuser/workspace-gzy/SkillReflection/outputs/ablation_batch_searchqa_spreadsheet_20260503_153902_run \
  --max-parallel 8 \
  --execute \
  > /home/azureuser/workspace-gzy/SkillReflection/outputs/ablation_batch_searchqa_spreadsheet_20260503_153902_run/launcher_parallel8.log 2>&1 &

4.2 Longitudinal comparison example policy 启动方式

ALFWorld 暂停不跑;其余四个 benchmark 用独立 run root,避免污染旧矩阵:

setsid /home/azureuser/workspace-gzy/miniconda3/envs/reflact/bin/python \
  scripts/run_ablation_matrix.py \
  --groups longpair \
  --bench searchqa spreadsheetbench livemathematicianbench docvqa \
  --run-root /home/azureuser/workspace-gzy/SkillReflection/outputs/ablation_longpair_20260504_run \
  --max-parallel 8 \
  --execute \
  > /home/azureuser/workspace-gzy/SkillReflection/outputs/ablation_longpair_20260504_run/launcher_longpair_parallel8.log 2>&1 &

4.3 Learning-rate-control baseline 启动方式

ALFWorld 暂停不跑;其余四个 benchmark 用独立 run root

setsid /home/azureuser/workspace-gzy/miniconda3/envs/reflact/bin/python \
  scripts/run_ablation_matrix.py \
  --groups lrctrl \
  --bench searchqa spreadsheetbench livemathematicianbench docvqa \
  --run-root /home/azureuser/workspace-gzy/SkillReflection/outputs/ablation_lrctrl_20260504_run \
  --max-parallel 8 \
  --execute \
  > /home/azureuser/workspace-gzy/SkillReflection/outputs/ablation_lrctrl_20260504_run/launcher_lrctrl_parallel8.log 2>&1 &

注意:run_ablation_matrix.py 会在启动时跳过当时 active 的 run,但不会管理先前 orphan train 的生命周期。重启 launcher 前后必须检查 env.out_root 是否重复;如果有两个进程写同一目录,立刻杀掉重复进程、删除污染目录、让 launcher 干净重启该 run。

4.4 实时监控命令

进程数和重复输出目录检查:

/home/azureuser/workspace-gzy/miniconda3/envs/reflact/bin/python - <<'PY'
import subprocess, re, collections
try:
    raw = subprocess.check_output(["pgrep", "-af", "scripts/train.py"], text=True)
except subprocess.CalledProcessError:
    raw = ""
roots = []
for line in raw.splitlines():
    m = re.search(r"env\.out_root=([^\s]+)", line)
    if m:
        roots.append(m.group(1))
ctr = collections.Counter(roots)
print("train_count", len(roots))
print("duplicate_roots", [r for r, c in ctr.items() if c > 1])
for root in sorted(roots):
    print(root.rsplit("/", 1)[-1])
PY

launcher 和错误日志检查:

for f in \
  outputs/ablation_docvqa_20260503_160225_run/launcher_parallel8.log \
  outputs/ablation_livemath_alfworld_clean_20260503_155155_run/launcher_parallel8.log \
  outputs/ablation_batch_searchqa_spreadsheet_20260503_153902_run/launcher_parallel8.log
do
  echo "### $f"
  tail -80 "$f" 2>/dev/null || true
done

rg -n "Traceback|ERROR|Error code|AuthenticationError|BadRequest|RateLimit|content_filter|Killed|rc=|\\[FAIL\\]|\\[RETRY\\]" \
  outputs/ablation_docvqa_20260503_160225_run/logs \
  outputs/ablation_livemath_alfworld_clean_20260503_155155_run/logs \
  outputs/ablation_batch_searchqa_spreadsheet_20260503_153902_run/logs \
  -g '*.log' | tail -120 || true

结果行数进度检查:

/home/azureuser/workspace-gzy/miniconda3/envs/reflact/bin/python - <<'PY'
from pathlib import Path
roots = [
    Path("outputs/ablation_docvqa_20260503_160225_run"),
    Path("outputs/ablation_livemath_alfworld_clean_20260503_155155_run"),
    Path("outputs/ablation_batch_searchqa_spreadsheet_20260503_153902_run"),
]
for root in roots:
    print("\\n##", root.name)
    for run in sorted([p for p in root.iterdir() if p.is_dir() and p.name != "logs"]):
        summary = run / "summary.json"
        if summary.exists():
            print("DONE", run.name)
            continue
        files = sorted(run.rglob("results.jsonl"), key=lambda p: p.stat().st_mtime if p.exists() else 0)
        if not files:
            print("NO_RESULTS", run.name)
            continue
        f = files[-1]
        print("RUN", run.name, sum(1 for _ in f.open()), f.relative_to(run))
PY

DocVQA 是多模态 benchmark2-1-7 默认 test 有 3744 个样本、selection 有 535 个样本;完整 28-run 矩阵成本显著高于 SearchQA/SpreadsheetBench。高并发时必须持续看 rate limit、content filter、重复 out_root 和尾样本 timeout。

5. 已完成的本地验证

当前本地验证状态:

状态
py_compile 已通过:launcher、train、OpenAI wrapper、LiveMathBench dataloader/adapter、ALFWorld dataloader/adapter/rollout、DocVQA adapter/rollout
Tail-sample hang audit 已通过:SearchQA、SpreadsheetBench、LiveMathBench、ALFWorld、DocVQA rollout active paths 均移除裸 as_completed
LiveMathBench split 已加载:train=35 val=18 test=124
ALFWorld split 已加载:train=39 val=18 test=134
ALFWorld gamefile 39+18+134 个本地路径全部存在
ALFWorld env smoke 已通过:单环境 build/resetreset 后 gamefile 与 fixed split item 一致
ALFWorld reflect None fields 已修复:trajectory 的 action/env_feedback/reasoning/cmd/obs/content 先归一为空字符串再截断;修复前 ALFWorld run 不可填表
ALFWorld slow-update None fields 已修复:reflact/optimizer/slow_update.py 读取 comparison trajectory 时同样归一 None;修复前失败 run 已删除并用同一 matrix launcher 重挂
LiveMathBench token cap 已修复:旧 768/512 cap 导致 GPT-5.x hidden reasoning 吃完预算,results 中大量空 response;已提到 16384 并通过 8 条 smokeempty=0, <answer>=8/8, acc=0.625
ALFWorld token cap 已修复:旧 512 cap 下 conversation 存在空 model_response/no_action;已提到 2048,旧 512-token run 已归档并重启
ALFWorld empty action fallback 已修复:rollout.py 对 empty response / missing <action> 统一 fallback 到 <action>look</action>;所有修复前启动的 ALFWorld active run 已归档,不能填表
Launcher dry-run 已验证:LiveMathBench/ALFWorld clean matrix 56 个;DocVQA matrix 28 个;SearchQA/SpreadsheetBench batch-size 8 个

2026-05-04 token-cap restart:

export ALFWORLD_DATA=/home/azureuser/.cache/alfworld
setsid /home/azureuser/workspace-gzy/miniconda3/envs/reflact/bin/python \
  scripts/run_ablation_matrix.py \
  --groups default split batch mbs lr sched slown mod smodel \
  --bench livemathematicianbench alfworld \
  --run-root /home/azureuser/workspace-gzy/SkillReflection/outputs/ablation_livemath_alfworld_clean_20260503_155155_run \
  --max-parallel 8 \
  --execute \
  > /home/azureuser/workspace-gzy/SkillReflection/outputs/ablation_livemath_alfworld_clean_20260503_155155_run/launcher_parallel8_tokenfix_20260504_0223.log 2>&1 &

Token-cap restart monitor checks:

LiveMath old evidence: DEFAULT baseline test 124 rows, 115 empty response, only 9 answer tags.
LiveMath 4096 smoke: 8 rows, 5 empty response, not enough.
LiveMath 16384 smoke: 8 rows, 0 empty response, 8 answer tags, acc=0.625.
New run first check: LiveMath DEFAULT/SPLIT selection baseline 38 rows total, empty=0, answer_tag=38/38.
New ALFWorld first check: SPLIT-alfworld-1shot first conversation 29 steps, empty_resp=0, no_action=0.
Archives:
- outputs/ablation_livemath_alfworld_clean_20260503_155155_run/archive_livemath_token768_20260504_022258/
- outputs/ablation_livemath_alfworld_clean_20260503_155155_run/archive_alfworld_token512_20260504_021417/

2026-05-04 parallelism top-up:

SearchQA/SpreadsheetBench batch-size matrix completed, freeing 8 slots. DocVQA launcher remains at 8 active train processes. A second LiveMath/ALFWorld launcher was started with --max-parallel 16 on the same run_root; run_ablation_matrix active_run_ids() skips existing active out_roots and only starts pending runs. This brought total active train processes back to 24 with no duplicate out_root.
export ALFWORLD_DATA=/home/azureuser/.cache/alfworld
setsid /home/azureuser/workspace-gzy/miniconda3/envs/reflact/bin/python \
  scripts/run_ablation_matrix.py \
  --groups default split batch mbs lr sched slown mod smodel \
  --bench livemathematicianbench alfworld \
  --run-root /home/azureuser/workspace-gzy/SkillReflection/outputs/ablation_livemath_alfworld_clean_20260503_155155_run \
  --max-parallel 16 \
  --execute \
  > /home/azureuser/workspace-gzy/SkillReflection/outputs/ablation_livemath_alfworld_clean_20260503_155155_run/launcher_parallel16_tokenfix_topup_20260504_0240.log 2>&1 &

Top-up verification:

train_count=24
duplicate_roots=[]
newly started: BATCH-livemathematicianbench-{8,24,56,full}, BATCH-alfworld-{8,24,56,full}

2026-05-04 ALFWorld empty-action fallback restart:

发现 DEFAULT-alfworld-5.5 和 BATCH-alfworld-8 中各有 1 条 empty model_response/no_action。为了不混用旧代码,已停掉并归档所有修复前启动的 ALFWorld active run
- DEFAULT-alfworld-5.5
- SPLIT-alfworld-1shot
- SPLIT-alfworld-1-1-8
- SPLIT-alfworld-4-1-5
- BATCH-alfworld-8
- BATCH-alfworld-24
- BATCH-alfworld-56
- BATCH-alfworld-full

归档目录:
- outputs/ablation_livemath_alfworld_clean_20260503_155155_run/archive_alfworld_empty_action_20260504_025311/
- outputs/ablation_livemath_alfworld_clean_20260503_155155_run/archive_alfworld_prefallback_20260504_025402/

launcher 已记录这些 run 为 rc=-6 retry;后续 retry 使用修复后的 `reflact/envs/alfworld/rollout.py`。当前 24 并发已满,ALFWorld default/split/batch retry 会在槽位释放后启动。当前 active ALFWorld 是修复后启动的 MBS-alfworld-{1,2,4}。

2026-05-04 ALFWorld OOM/concurrency adjustment:

在 24 总并发下,ALFWorld 多个 run 同时进入 Ray/ALFWorld env 初始化和 slow-update rollout,触发 Ray OOM prevention
memory 约 823GB / 866GB (0.950+) 超过 Ray 默认 0.95 阈值,导致 worker 被杀。

受影响并归档的 partial run
- MBS-alfworld-{1,2,4,16,32}
- LR-alfworld-{2,4,8,16}
- SCHED-alfworld-{constant,linear}
- SLOWN-alfworld-{5,10,40}

归档目录:
- outputs/ablation_livemath_alfworld_clean_20260503_155155_run/archive_alfworld_oom_partial_20260504_050517/

已停掉 LiveMath/ALFWorld 两个 launcher
- launcher_parallel8_tokenfix_20260504_0223.log 对应进程
- launcher_parallel16_tokenfix_topup_20260504_0240.log 对应进程

当前只保留已跑较久的 `LR-alfworld-1` 继续,DocVQA launcher 不动,LiveMath 已启动进程继续。后续 ALFWorld 必须低并发补跑,建议 `--bench alfworld --max-parallel 1` 或最多 2;不要再把 ALFWorld 混入 24 总并发。

2026-05-04 ALFWorld serial retry launcher:

export ALFWORLD_DATA=/home/azureuser/.cache/alfworld
setsid /home/azureuser/workspace-gzy/miniconda3/envs/reflact/bin/python \
  scripts/run_ablation_matrix.py \
  --groups default split batch mbs lr sched slown mod smodel \
  --bench alfworld \
  --run-root /home/azureuser/workspace-gzy/SkillReflection/outputs/ablation_livemath_alfworld_clean_20260503_155155_run \
  --max-parallel 1 \
  --execute \
  > /home/azureuser/workspace-gzy/SkillReflection/outputs/ablation_livemath_alfworld_clean_20260503_155155_run/launcher_alfworld_serial_20260504_1258.log 2>&1 &
launcher_pid=9322
first started: DEFAULT-alfworld-5.5
valid existing ALFWorld result before serial retry: LR-alfworld-1
reason: previous high-concurrency ALFWorld runs hit Ray OOM; serial retry avoids mixing ALFWorld into 24-way total concurrency.

2026-05-04 ALFWorld serial retry paused:

DEFAULT-alfworld-5.5 启动 Ray 后,系统内存 available 从约 19GiB 降到约 6GiBRay 同时报 `/tmp/ray` spill 风险。为避免影响正在跑的 DocVQA/LiveMath,已停掉串行 ALFWorld launcher 和 DEFAULT-alfworld-5.5 train 进程。

归档目录:
- outputs/ablation_livemath_alfworld_clean_20260503_155155_run/archive_alfworld_serial_lowmem_20260504_1300/

后续重启条件:DocVQA/LiveMath 当前队列进一步释放资源后,再用同一串行命令重启 ALFWorld;不要在 available memory 只有十几 GiB 时启动 ALFWorld。

2026-05-04 current monitor and GPU-memory clarification:

当前 SkillReflection active train processes=12,无重复 env.out_root
- LR-docvqa-16
- MOD-docvqa-meta-only
- MOD-docvqa-none
- MOD-docvqa-slow-only
- SCHED-docvqa-constant
- SCHED-docvqa-linear
- SLOWN-docvqa-10
- SLOWN-docvqa-40
- SLOWN-docvqa-5
- SMODEL-docvqa-5.4
- SMODEL-docvqa-5.4-mini
- SMODEL-livemathematicianbench-5.4

最新完成并已填表:
- LR-docvqa-8: best_sel=0.9047, base=0.8675, best_test=0.9017, delta=+0.0342, tokens=279012493

SkillReflection ALFWorld 当前没有在跑。当前有效 ALFWorld summary 只有:
- LR-alfworld-1

nvidia-smi 显示 GPU 显存被 ray::ServeReplica:*GroundingDINOModel / DA3Model 占用,但这些进程 cwd 是:
/home/azureuser/workspace-gzy/zyf/gca-skill

这不是本仓库 /home/azureuser/workspace-gzy/SkillReflection 的 ALFWorld ablation。

另有 unrelated ALFWorld jobs 在:
/home/azureuser/zisu/skill_distill

这些不是本轮 SkillReflection ablation 输出,不能混进本表。

6. 不纳入本轮的内容

本轮不启动以下实验:

原因
已完成 default 点的重复 run 复用 default 结果,避免同一设置重复计费
train.batch_size=40 重复 run 复用 default 结果,避免同一设置重复计费
model.student=gpt-5.5 student-model 重复 run 复用 default 结果
gradient.minibatch_size=8 重复 run 复用 default 结果
optimizer.lr_scheduler=cosine 重复 run 复用 default 结果
optimizer.slow_update_samples=20 重复 run 复用 default 结果
use_slow_update=true,use_meta_skill=true 重复 run 复用 default 结果