Join the conversation

Join the community of Machine Learners and AI enthusiasts.

Sign Up
vineeth98 
posted an update 5 days ago
Post
869
I made a speedrun leaderboard for LoRA fine-tuning. One frozen task (Qwen2.5-1.5B to 57% on GSM8K), one GPU, fastest training run wins. Every record gets re-run 3x with fresh seeds on identical hardware before it counts, so no self-reported numbers.

The baseline was 11:57 three days ago. Someone already got it down to 1:44, with data pruning and a chunked cross-entropy that never materializes the logits.

Attempting is free (Modal's monthly credits cover full runs), and the second track (SmolLM2 + SQuAD) is still sitting at its naive baseline — easy first record for someone.

vineeth98/lora-speedrun

The 3x re-run is the right instinct. Just check which axis it guards.

Fresh seeds so the 57% is real, not a lucky finish. That variance-controls the accuracy gate.

But you rank on time, and the winning time is one of those 3 runs. If the record is the min, the cherry-pick just moved from accuracy to the clock. The honesty you spent on the gate leaks back out on the quantity that sets the order.

The number you protect is not always the number that decides the ranking.

Is a record the median of the 3 times, or the fastest run that still clears 57%?

·

Good question — and sharper than it looks. Short answer: the record is the
mean of the 3 runs, not the fastest, so the cherry-pick you're picturing
(record = the luckiest fast run) is already closed. No single run stands on
its own.

But you caught the real soft spot. The timing noise here is one-sided: a
shared Modal volume can only ever make a run slower (a cold I/O stall), never
faster than the algorithm — so the mean can get dragged up by one bad-disk
run. The track-2 baseline had exactly that: two runs at ~525s and one at 953s
from I/O.

So I just changed the rule: a run whose wall-clock is >1.5x the batch median
while its accuracy is normal is flagged as infrastructure noise, dropped from
the official time, and re-run. It never drops below 2 runs and only ever drops
a run that passed on accuracy, so a genuinely slow submission can't hide. That
record went 11:08 → 8:45 — refresh the board. I used this instead of a plain
median because with only 3 runs the median can throw out the cleanest run
rather than the contaminated one.

The deeper version of your point — resampling across attempts — is closed too:
one verification per code state, fresh seeds each time, so nobody can re-roll
/verify until a lucky-fast batch comes back. It's all in JUDGING.md if you want
to poke holes. Thanks — this genuinely made the benchmark better.

Mean of 3 closes the cherry-pick. The re-roll came back on a different axis.

A batch that draws a stall gets 4 runs, 3 plus the re-run. A clean batch gets 3. The extra draw is granted conditional on an outcome, which is the resampling channel you just closed on accuracy, reopened on the clock.

The filter also argues against its own premise. If stalls are strictly additive and nothing can finish faster than the algorithm, then the min is your unbiased estimate and you should rank on min, not a trimmed mean. If you don't fully believe that, and warm cache and lucky co-tenancy say you shouldn't, then trimming only the slow tail biases records down, and biases them most for whoever drew the worst hardware.

The 1.5x reference is also the batch median itself. One stall in three and the median stays clean, so 525/525/953 trips at 1.81x exactly as you want. Two correlated stalls on the same volume and the median moves with them, both pass, and the noise rides in as signal. Correlated is the likely case, since it is the same volume.

Is the 1.5x calibrated against your measured clean-run spread, or is it a round number standing in for a variance you have not measured yet?

·

3 is the real one. 1.5x is a round number, not tied to anything — clean spread
here is ~2-5%, so 50% only ever catches a gross stall. And a median-relative
threshold breaks under correlation: two stalls in three move the median with
them and both pass. A filter that fails hardest when the bad case is worst isn't
worth keeping.

2 is fair. I can't wave "one-sided" to motivate a trim and then not rank on min,
since one-sided is exactly when min is unbiased. And it isn't one-sided — the
baseline batch is 727/727/696, and the 696 finished faster. Fast tail exists,
trimming only the slow side biases down.

On 1 I'll push back: the re-run isn't the accuracy channel reopened. Nobody's
shopping — the referee drops a flagged run and redraws automatically, and accepts
any non-outlier redraw regardless of speed, so it isn't selecting for favorable
draws. Its only real effect is upper-truncation, which is just your point 2.

But the conclusion holds: the trim is the wrong tool, and I was doing statistics
on a number I should have fixed. That 953s wasn't training, it was model+dataset
load off a cold volume — I/O unrelated to anyone's technique. So I'm dropping the
rule and pre-warming the pinned artifacts so every run is timed warm. No stall to
drop, nothing to redraw, no threshold to defend. What's left is the 2-5% compute
jitter — straight mean, sub-spread gaps treated as ties.

The number never moved: the two clean t2 runs are 523 and 527, so 8:45 holds with
or without the rule. Pulling it, adding the warm-up, writing it up in JUDGING.md
and crediting the thread.

crazy how we are speedruning LM fine-tuning before gta6 is even out. 🤯

·

the fine-tune itself finishes in under two minutes, so there's plenty of
time left to wait for GTA6 😄

Fixing the measurement instead of modelling the noise is the right call. It also changes what the board can claim.

Warm runs leave 2-5% jitter. Say that is a standard deviation. The mean of 3 has a standard error near 3% at the top of that band, and comparing two records differences two noisy means, so the gap you can actually resolve is s times root 2/3, about 4%.

At 525s that is roughly 20 seconds.

So the tie band is not the run spread, and it is not a property of one record. It is a property of the gap between two adjacent rows. Any two entries inside 20s are one entry.

That matters because a leaderboard is a total order by default. Rendering indistinguishable numbers in strict order is the cherry-pick we started on, moved out of the referee and into the table.

Cheap fix: publish mean and spread, give entries inside the band the same rank, skip the next one. No extra runs needed.

If that 2-5% is a range rather than a standard deviation the band is about half as wide, which is the argument for measuring the clean-run spread properly once.

How many rows on the board right now sit inside 20 seconds of each other?