MMProvence β€” LoRA checkpoints

Student adapters from MMProvence, which distils Qwen/Qwen3-VL-Reranker-8B into a small Qwen3.5-VL model that emits a relevance score and the bounding boxes / text spans of the query-relevant evidence.

Annotations for these runs: shredder-31/mmprovence (private).

329 checkpoints over 17 runs, 108 GB. Every adapter was header-validated before upload, so none was caught mid-write.

Loading β€” read this first

adapter_config.json has base_model_name_or_path: null on every run except the merged one, because training resolved the base from a local path. You must pass the base model explicitly:

from peft import PeftModel
from transformers import AutoModelForImageTextToText

base = AutoModelForImageTextToText.from_pretrained("Qwen/Qwen3.5-VL-4B", dtype="bfloat16")
model = PeftModel.from_pretrained(base, "shredder-31/mmprovence-checkpoints",
                                  subfolder="runs/join-structure-v7-score-sft-64lora-v2/checkpoint-5075")

Each run's config.used.yaml records the exact base it was trained against.

modules_to_save = ["score", "rerank_embed"] β€” these are full trained tensors, not low-rank deltas. merge_and_unload() silently drops them, leaving a random score head under a trained backbone. Carry them across any merge by hand.

Runs

join-* = phase 2 (score + evidence). mix-* = phase 1 (score only), kept as warm-start seeds. "kept" is what is in this repo, not what was trained β€” see selection.

v7 β€” reference runs

run base r kept GB policy
join-structure-v7-score-sft-64lora-v2 Qwen3.5-4B 64 10 / 41 3.60 argmax
join-structure-v7-score-sft-64lora-2b-v1 Qwen3.5-2B 64 2 / 41 0.39 argmax
join-structure-v7-score-sft-64lora-9b-v1 Qwen3.5-9B 64 41 19.92 all
join-structure-v7-score-sft-128lora-2b-merged-v1 Qwen3.5-2B-mixv4merged 128 27 9.98 all

v7-2 β€” phase-schedule ablation

Same recipe, varying which phases the student sees. No best/-independent sweep exists for these, so all checkpoints are kept.

run base kept GB
join-structure-v7-2-score-sft-64lora-9b-p2only-v1 Qwen3.5-9B 41 19.92
join-structure-v7-2-score-sft-64lora-p2only-v1 Qwen3.5-4B 41 14.76
join-structure-v7-2-score-sft-64lora-2b-p2only-v1 Qwen3.5-2B 41 7.99
join-structure-v7-2-score-sft-64lora-2b-p1p2-v1 Qwen3.5-2B 41 7.99
join-structure-v7-score-sft-64lora-2b-p2only-v1 Qwen3.5-2B 41 7.99

p2only skips the phase-1 score-only warm start; p1p2 runs both. Comparing ...-2b-p2only-v1 against ...-2b-p1p2-v1 isolates the warm start at 2B.

v8 β€” span-target ablation

Three arms differing only in how the label box is built. All complete at 11 checkpoints. The arm names map onto logs/span_report.md in the source repo as control / rawbox / capped.

run arm kept GB probe-best
join-structure-v8-stev-score-sft-64lora-v3 control 11 3.96 checkpoint-834
join-structure-v8-stev-rawbox-score-sft-64lora-v1 rawbox 11 3.96 checkpoint-973
join-structure-v8-stev-capped-score-sft-64lora-v1 capped 11 3.96 checkpoint-1112

"probe-best" = highest eval iou in the offline regrade (artifacts/box_probe_v8_regrade), not the iou in train.log. Box matching became overlap-gated on 2026-09-21; every iou logged before that date is inflated by 0.04–0.13.

Do not compare raw iou across these three arms β€” each arm's target is a different size and a bigger target is an easier one, since a whole-frame guess already scores its own area. span_coverage and span_iou are comparable as-is.

Incomplete

Stopped early. No best/, no final_metrics.json.

run base kept GB
join-structure-v8-stev-repeat-score-sft-64lora-v1 Qwen3.5-4B 5 1.80
join-structure-tube-v9-stev-score-sft-64lora-v1 Qwen3.5-4B 3 1.08

mix β€” phase 1

run base kept GB
mix-structure-score-sft-64lora-v9 Qwen3.5-4B 1 / 2 0.36
mix-structure-score-sft-64lora-2b-v4 Qwen3.5-2B 1 / 41 0.20
mix-structure-score-sft-64lora-9b-v2 Qwen3.5-9B 1 / 11 0.49

What was selected, and why

mix-* runs β†’ last checkpoint only. Their sole consumer is the phase-2 warm start. best/ there is chosen on eval_loss, which is ~99.5% sft_loss because score_loss is ~200Γ— smaller β€” so best/ tracks the generative head, not ranking, and is not what any phase 2 actually loaded. The last checkpoint is.

v7 4B and 2B β†’ union of per-metric argmaxes over the eval and test sweeps (11 metrics: score_loss, mse_score_head, mse_gen_head, sft_loss, iou, iou@0.5, CoverIoU, recall, precision, f2, judge).

4B (checkpoint-5075 is the reference model):

checkpoint best on
3150 eval iou Β· test sft_loss
3850 eval iou@0.5, CoverIoU Β· test score_loss, mse_score_head, iou@0.5
4550 eval mse_score_head, sft_loss
4725 eval precision, judge Β· test precision
4900 eval recall, f2
5075 test iou, CoverIoU, judge
5425 test recall, f2
6475 eval score_loss
6650 test mse_gen_head
6999 eval mse_gen_head

2B: checkpoint-5775 (the reference model; 17 of 22 metricΓ—split slots) and checkpoint-4375 (the rest).

The 2B selection is far weaker evidence than the 4B one. Only 2 of its 41 checkpoints were ever swept (4375, 5775), against 40 of 40 for the 4B. So the 2B "winner" is a two-way pick, not an argmax over training. checkpoint-5775 is still the settled reference, but it was never scored against 3850/4900/5425 the way the 4B's winners were.

Also note the argmaxes were selected on the same eval/test splits they are reported on, so those per-metric bests are optimistic.

Everything else β†’ all checkpoints. No sweep exists for the v7-2, v8 or v9 runs, so there is no basis on which to thin them.

join-structure-v5-* is excluded entirely.

selection.json records, per checkpoint, which metrics it won.

Not included

optimizer.pt, scheduler.pt and rng_state_*.pth are omitted β€” roughly two thirds of the bytes, and useful only for bit-exact resumption. These checkpoints load and warm-start fine; they cannot resume a run at an exact step.

Licence

Adapters over Qwen3.5-VL bases, distilled from Qwen/Qwen3-VL-Reranker-8B; both models' terms apply. Released for research use.

Downloads last month
-
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support

Model tree for shredder-31/mmprovence-checkpoints

Adapter
(2)
this model