← All posts
11 min read

Public GPUs trained our served model, and the numbers held up

A model improvement trained by a fleet of ordinary 8GB GPUs has passed a full uncapped evaluation and been promoted into the model qbc.network serves: generalisation up 0.3405 nats, MMLU flat, GSM8K up 2.50 points. What we ran, what we measured, and what we did not overclaim.

The promise behind training an AI on a blockchain is that "the model got better" becomes a claim anyone can check, produced by hardware nobody in particular controls. Today we can report the first end-to-end instance of that promise against the model we actually serve: a candidate trained across a fleet of ordinary 8GB consumer GPUs passed a full, uncapped evaluation and has been promoted into live inference. The base model was left frozen. Only a 2.4MB adapter changed hands, and the previous adapter is preserved so the change is reversible at any time.

This post is the honest version. It includes the mistakes we caught along the way, because the whole point of a provable training loop is that we do not get to quietly delete the runs that embarrassed us.

What "decentralised training" means here, precisely

The served model is a frozen Qwen2.5-7B base with a small Sephirot mixture-of- experts adapter on top: ten low-rank experts, a top-2 router, about 1.18 million trainable parameters. Everything the training loop touches lives in that adapter. The base never moves.

The training method is DiLoCo-style local training with periodic aggregation, which replaced the older federated-averaging approach earlier this month. The part that matters for decentralisation is a durable engineering result: with a vocab-chunked backward pass, a full 7B adapter step fits inside roughly 7.5GB of video memory. That means any 8GB card can train the model that qbc.network serves. Not a toy. The real thing.

We run it as short, payable rounds. Each round is about 35 minutes. A worker draws a fresh, shuffled batch from a large corpus, trains the adapter locally, and produces a candidate. The design goal, set deliberately for a future at scale, is that rounds are short so contributors get paid quickly and can repeat: train, submit, get rewarded, train again.

A round only counts if it earns its place. Every candidate is scored against the last accepted candidate on a fixed held-out subset the model never trains on. If it wins, it is accepted and becomes a payable unit of work. If it does not, it is rejected and the chain of accepted candidates is unchanged. In this run, ten rounds produced seven accepted, payable units.

To be exact about maturity: this is decentralised training with an owner-gated promotion into the served model. It is not yet permissionless model updates. That next stage is designed, not built, and it is gated on three things we are not willing to hand-wave: robust aggregation that survives a malicious contributor, a stake-and-slash economic layer, and honest independent re-derivation of the claimed improvement. We will say "permissionless" when those exist, and not before.

The mistakes we caught

A held-out number is only honest if the model genuinely never saw the data. Three times during this work our own evaluation was wrong in our favour, and three times we stopped and fixed it rather than banking the flattering number.

The first was straightforward memorisation: an early evaluation scored the model on data it had just trained on. Of course it looked brilliant. We threw those numbers out and rebuilt the split so the held-out corpus is genuinely disjoint.

The second was a sampling-window bug that quietly evaluated on a 30-sample slice instead of the full set, making noise look like signal.

The third was subtler and more instructive. We had been gating candidates by comparing scores measured at different evaluation scales, a small subset in one place and the full set in another. Mixed scales in the same comparison chain can false-reject a genuine improvement, which is exactly what happened to one of our better rounds. The fix was to decouple the two jobs: the fast payable gate runs on one fixed subset scale, and the expensive full evaluation runs out of band as an audit, never mixed into the gate.

None of these were adversarial. They were the ordinary ways a training harness flatters itself, and the reason we are comfortable publishing the final numbers is that we went looking for them first.

The numbers

The promoted candidate is the round-8 adapter, content root 0x157a01b9. Every number below was measured on that adapter over a frozen Qwen2.5-7B base. The figures are a snapshot from the promotion evaluation, not a live probe.

Generalisation. On a clean 1000-example held-out corpus the model never trained on, cross-entropy fell from 2.9014 at the starting point to 2.5609. That is a 0.3405 nats improvement in how well the model predicts genuinely unseen text. This is the headline result, and it is a real gain, not a rounding artefact.

MMLU, full and uncapped. Across all 14042 questions, base scored 0.7116 and the trained adapter scored 0.7109. That is a 0.07 point difference, which is flat inside noise. The point of this measurement is what did not happen: broad knowledge did not regress. Training the adapter did not cost the model its general capability.

GSM8K, full and uncapped. Across all 1319 grade-school maths problems, base scored 0.7248 and the trained adapter scored 0.7498. That is a 2.50 point gain in multi-step arithmetic reasoning.

Put together: stronger prediction on unseen text, general knowledge held flat, and a real improvement in maths reasoning, produced by a fleet of 8GB cards at zero cost to the base model.

We are aware the early GSM8K interim looked even better, around 4.8 points, and settled downward as the full set completed. The 2.50 figure is the full-set number. We report the one that survived to the end, not the one that looked best at the halfway mark.

What promotion actually changes

Promotion here is deliberately small and deliberately reversible. The base Qwen2.5-7B is untouched. The only thing that changes in live serving is the adapter file, about 2.4MB, swapped for the round-8 adapter. The previous adapter is preserved, so if anything about the promoted model disappoints in real use, we roll back instantly.

One detail worth stating because it is a real footgun: the promotion targets the round-8 adapter specifically, by its content root, not the "most recently accepted" candidate. A later round was accepted on the fast subset gate but was fractionally worse on the authoritative full held-out set, inside noise. Promoting by content root rather than by recency is the difference between shipping the best measured model and shipping the last one that happened to pass.

Where this sits on the road to permissionless

This is one owner-gated promotion. It is the first time the loop has gone all the way from public hardware to a full evaluation to the live served model, which is a genuine milestone, and it is also only Stage 1 of four.

Stage 0 is shadow training: candidates are produced and scored without ever touching the served model. That has been running. Stage 1, which we reached today, adds an owner-gated promotion of the best measured candidate. Stage 2 replaces the owner's judgement with a committee attestation. Stage 3 is the permissionless target, where anyone can contribute an update and the network itself decides whether to adopt it, protected by robust aggregation and stake-and-slash.

We are being careful to earn each stage rather than announce it. The weights for this release are published openly so the result can be checked independently, and the training loop that produced them is the same one that will, eventually, run without us in the loop at all.

Verify it yourself

The promoted model is published and attested, not just described.

  • Weights: the adapter is public at huggingface.co/QuantumAI-Blockchain/aether-v7.2-unified, with the full evaluation table and the frozen Qwen2.5-7B-Instruct base it loads onto.
  • On chain: the served model's identity is recorded in the QBC model registry as round 2, finalised by a 4-of-5 validator quorum, with weight root 0x3e99b3d2f4e4d5eacbb3fe8d7e2f709dbfc48deb34407035383b3a5263e29e4e. Replacing the served adapter changes that root, so the model you chat with is the model the chain attests.
ShareXLinkedIn

Written by

A
Ash Brown@blockartica
Founder, SusyLabs / QuantumAI Blockchain

Building the post-quantum AI-native L1 with permissionless on-chain training cycles. Writes about consensus, attestation, and the gap between what ships and what's claimed.

Related posts