Instructions to use shredder-31/mmprovence-checkpoints with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- PEFT
How to use shredder-31/mmprovence-checkpoints with PEFT:
Task type is invalid.
- Notebooks
- Google Colab
- Kaggle
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-5775is 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
- -