Training
- LoRA rank 64, alpha 128, dropout 0.05, target modules down_proj, gate_proj, k_proj, o_proj, q_proj, up_proj, v_proj (174,587,904 trainable parameters); vision tower frozen; bfloat16.
- Seed 0, learning rate 5e-05, micro-batch 2 x grad_accum 4, 1 epoch, 2,500 optimiser steps over 20,000 task records; pair records 24,199, pair micro-batches 9,995, lambda_pair 1.0, pair_sees_image True.
- Initialised from
a2_support_s0 (RESEARCH-EMPRM/emprm-v2-a2_support_s0). Task-data sha256 ddd7be2d3ddf…, pair-data runs/v2/data/stageB_pairs_g_copies1/pairs.jsonl.
- Wall time 10.2 h on one NVIDIA A100-PCIE-40GB; training-pair accuracy mean 0.879, final 0.935.
Pre-registered gates and reads (development halves; test halves unread)
- Held-out relational FlipAcc: 0.2988 deployed, 0.2300 [0.2013, 0.2587] with the chart shown — gate (>= 0.74) lost in both passes.
- Forced-evidence acceptance at 0.5: true 0.9175 / false 0.0075 deployed; 0.970 / 0.005 with the chart shown.
- Chart-disjoint pair gain over the v1 head: +0.1685 deployed; +0.1815 [0.1387, 0.2244] with the chart shown (the largest pair gain measured, on an arm whose FlipAcc is 0.23-0.30).
- External dev halves, deployed pass: VisualProcessBench 0.3025, VLRMBench 0.3098, VL-RewardBench 0.4810, Multimodal RewardBench 0.5435.
Status
Discarded as a deployment candidate (chart FlipAcc gate lost). The run is preserved unchanged, as the rules require for failed runs; its numbers are diagnostics.
Where the artifacts are
- Result files, per-example dumps, config and prompts: dataset
RESEARCH-EMPRM/emprm-sync-20260910 → results/**/runs/v2/train/stageB_g1_s0/, results/**/runs/v2/e2/stageB_g1_s0__*.json, configs/ablations/stageB_g1_s0.yaml, EXPERIMENT_REGISTRY.csv (rows tagged with this adapter), CURRENT.md and WRITER_SYNC_BUNDLE.md (what the deployed scorer computes; which arm is which).
- The frozen 2026-09-09 tree backup
RESEARCH-EMPRM/emprm-v2 predates this arm and does not contain it.
Load
from transformers import AutoModelForImageTextToText, AutoProcessor
from peft import PeftModel
base = AutoModelForImageTextToText.from_pretrained("Qwen/Qwen3-VL-8B-Instruct", dtype="bfloat16", device_map="cuda")
model = PeftModel.from_pretrained(base, "RESEARCH-EMPRM/emprm-v2-stageB_g1_s0")
processor = AutoProcessor.from_pretrained("Qwen/Qwen3-VL-8B-Instruct")
adapter_config.json records the local path the adapter was trained from; pass the base model explicitly as above. The scorer (scoring.Scorer.score_grounded, family grounded, aggregation product) and its prompts are in code/ of the sync dataset.