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 32,552, pair micro-batches 9,997, 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/pairs.jsonl.
- Wall time 10.0 h on one NVIDIA A100-PCIE-40GB; training-pair accuracy mean 0.8897, final 0.94.
Pre-registered gates and reads (development halves; test halves unread)
- Held-out relational FlipAcc (operation, deployed text-only pass): 0.7400 [0.7100, 0.7700] — gate (>= 0.74) met on the bound; verify_only identical in all 800 decisions; 0.7812 [0.7525, 0.8087] with the ranker shown the chart.
- Forced-evidence acceptance at 0.5 (legend binding, 400 per cell): true 0.955 / false 0.005 deployed (gates met); 0.950 / 0.005 with the chart shown.
- Chart-disjoint pair gain over the v1 head: +0.1065 [0.0648, 0.1488] deployed; +0.1280 [0.0857, 0.1697] with the chart shown (gate >= +0.10 met).
- External dev halves, deployed pass: VisualProcessBench macro-F1@0.5 0.2907 (AUROC 0.5273), VLRMBench 0.3166 (AUROC 0.4836), VL-RewardBench 0.4794, Multimodal RewardBench 0.5632 — all below the final arm (0.4578 / 0.4314 / 0.5476 / 0.6132); no external target met. Image-visible external reads and the controlled pools were still running when this card was written (2026-09-10 18:30 KST); see the sync repository for the final values.
Status
Chart gates met in both passes; external targets not met in the deployed pass. Not deployed; a twelve-benchmark Best-of-8 run is started only after the author's decision.
Where the artifacts are
- Result files, per-example dumps, config and prompts: dataset
RESEARCH-EMPRM/emprm-sync-20260910 → results/**/runs/v2/train/stageB_g_s0/, results/**/runs/v2/e2/stageB_g_s0__*.json, configs/ablations/stageB_g_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_g_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.