Build1 distinct publisher3 min readUpdated
A year of SFT and GRPO on 9B to 35B vision-language models, and the costliest bug never threw an exception. It supervised prose and scored a single letter.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
Token-level cross-entropy over a free-text reasoning trace pays the same rate for every word of the explanation as for the one character that settles a multiple-choice answer, and the evaluation read only that character [3]. On those terms the 99% was honest about what it measured: the model had learned to reproduce the shape of the training text [2][3]. The proxy was not lagging behind the target. It was scoring a different task, and it went on scoring it for 18 hours [2].
The crash was the cheap one. The GRPO trainer for the 9B vision model died in the forward pass inside rotary position embedding code with nothing changed in the training code, which at least stops the meter [6]. The cause sat on a seam: text sequence length came from token-type ids, vision length from the image grid, and image-pad tokens were counted twice by two components that were each internally consistent [7]. That is the pattern the author draws out, that fine-tuning at the edge of a model family's tooling produces integration bugs whose stack traces name the victim rather than the culprit [10].
Two of the three failures in these notes produced no error at all [1]. In the outcome-reward RL project the curve was flat rather than diverging or collapsing, every batch processed, and the only symptom was a held-out metric that should have moved and had not [11][13]. Underneath were outcomes attributed to the wrong decisions and a sign error that inverted part of the advantage, so the model was being nudged away from behaviour that had worked [12]. No log line separates that from a genuinely hard task; the author found it by auditing every stage of the reward computation by hand [13].
The other half of the fix is durability. The 35B MoE variant was repaired by monkeypatching the position-id computation [8], and a monkeypatch has a shelf life measured in upstream releases [10]. So it shipped with a regression test that builds the exact failing input shape, runs only the position-id path on CPU, needs no cluster, and finishes in seconds [9]. Cheap enough to keep in CI forever is the only property that matters there.
What is left is unglamorous accounting, drawn from these failures plus a benchmarking programme across more than 70 vision-language models [15]: a five-step GRPO run watching the clip ratio and the fraction of outputs that parse, on the argument that a degenerate run reveals itself that early [16]; fail-closed gating, so a finished training job with a crashed eval publishes nothing [17]; and a refusal to report gains that exist only in the training curve, with held-out evaluation against the base model as the decider [14]. This is one practitioner's account of one model family, not a controlled study. The structural claim is the portable part, and it costs nothing to test: supervise the thing you evaluate, and treat any other training metric as an unverified hypothesis about correlation [4][5].
Follow any of these and your For You feed starts watching them — no settings page required.
Ranked by verification strength, evidence, and original report placement.
The author spent the past year fine-tuning open vision-language models, from 9B dense up to a 35B mixture-of-experts, with supervised fine-tuning and GRPO-style reinforcement learning on verifiable rewards.
An 18-hour supervised fine-tune reported token accuracy climbing steadily to 99% while the real evaluation metric, accuracy on multiple-choice questions, never moved.
The cause was a mismatch between supervision and evaluation: training loss was computed over free-text reasoning traces while evaluation scored a single extracted answer letter, so the model became good at reproducing the shape of the training text without that transferring to the decision being measured.
The fix was structural rather than a hyperparameter change: supervise the thing you evaluate, and if the deliverable is a constrained answer the training signal has to reach that answer rather than only the prose around it.
The author's general rule: any training metric that is not your evaluation metric is a hypothesis about correlation, and the correlation should be checked before spending GPU-days on it.
The GRPO trainer for the 9B vision model crashed in the forward pass, deep inside rotary position embedding code, with nothing changed in the author's training code.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Single self-reported practitioner account, no artifacts
All claims trace to one dev.to post by one practitioner. The mechanisms described are specific and internally coherent (loss/eval mismatch, image-pad tokens double counted across two length derivations, inverted advantage sign), which raises plausibility, but nothing is externally checkable: no logs, code, model or library names, versions, held-out numbers, or upstream issue links are supplied, and no second publisher corroborates.
One practitioner's own practice, no external uptake
The only adoption signals are the author's disclosed usage - a year of SFT/GRPO across 9B to 35B open VLMs plus a 70+ model benchmarking programme - and the practices they personally apply. There is no evidence of any other team, product, or organisation adopting the smoke test, fail-closed gating, or the position-id monkeypatch, and the patch and regression test are not shown as shared artifacts.
Slightly understated relative to content
The post explicitly refuses novelty claims ('None of this is novel', 'They are boring'), reports failures rather than wins, withholds any held-out improvement numbers, and insists training curves are telemetry only. The dramatic headline framing about being billed for 18 hours is matched by the narrative it describes, so rhetoric does not outrun the material. The small negative reflects understatement, not verified magnitude - the underlying claims remain unverifiable.
Mild author-visibility incentive, no vendor stake disclosed
The author closes by promoting their own writing on ML evaluation and world models with a personal dev.to link, so there is a personal-credibility and audience-building incentive typical of practitioner posts. No employer, vendor, product, model provider, or funding relationship is disclosed, and no tool being sold is named, so there is no commercial stake pushing a particular model, library, or purchase.
Moderate-low: plausible mechanisms, unverifiable specifics
Confidence is limited by single-source, single-publisher evidence with no reproducible artifacts, but supported by the internal consistency and technical specificity of the failure mechanisms and by the author's restraint about results. The practice-level guidance is safe to read as one practitioner's method; the numeric outcomes and root causes should be treated as unverified testimony.
build
Three manual interventions in a month, and every guard was working as designed1 distinct publisher
build
Six MariaDB versions, one real difference: the only reason to leave 10.6 is the July 2026 clock1 distinct publisher
build
Force the tool call, then hand Lightsail a long-lived key1 distinct publisher
build
AI-written code fails the same four ways, and every gate you own reports green1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 23, 2026