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 1, learning rate 5e-05, micro-batch 2 x grad_accum 4, 1 epoch, 2,500 optimiser steps over 20,000 task records; pair records 8,353, pair micro-batches 5,000, lambda_pair 1.0, pair_sees_image True.
- Initialised from
a2_support_s0 (RESEARCH-EMPRM/emprm-v2-a2_support_s0). Task-data sha256 fc09fcb5d086…, pair-data runs/v2/data/stageB_pairs_rung5_noev/pairs.jsonl.
- Wall time 5.4 h on one NVIDIA A100-PCIE-40GB; training-pair accuracy mean 0.8514, final 0.93.
Pre-registered gates and reads (development halves; test halves unread)
- Held-out relational FlipAcc (deployed): 0.0000 [0.0000, 0.0000] — gate lost, forced by the architecture; 0.0875 [0.0688, 0.1075] with the chart shown.
- Forced-evidence acceptance at 0.5: true 0.1575 / false 0.0025 deployed; 0.9725 / 0.020 with the chart shown.
- Chart-disjoint pair gain over v1: +0.0992 [0.0524, 0.1449] deployed; +0.0846 [0.0485, 0.1201] with the chart shown.
- Controlled pools (dev, Best-of-5, InternVL / Qwen): 0.3742 / 0.5171.
- External dev halves (deployed): VisualProcessBench 0.4797, VLRMBench 0.4565, VL-RewardBench 0.5333, Multimodal RewardBench 0.5083.
Status
Not a deployment candidate (chart gates lost). Kept as the seed-1 replicate of the "E removed" ablation.
Where the artifacts are
- Result files, per-example dumps, config and prompts: dataset
RESEARCH-EMPRM/emprm-sync-20260910 → results/**/runs/v2/train/stageB_rung5_noev_s1/, results/**/runs/v2/e2/stageB_rung5_noev_s1__*.json, configs/ablations/stageB_rung5_noev_s1.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_rung5_noev_s1")
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.