BLOG · JULY 2026

I ran a 122-billion-parameter model on a $400 GPU without changing a single weight

My GPU has 16 GB of VRAM. The model has 122 billion parameters and needs 234 GB just to sit on disk. This is the story of Tarfa, an inference engine built in 23 days that runs that model with bit-identical BF16 weights on hardware most people already own, and why “exact” turned out to be the whole point.

Mohammed Abu-Tarfa 10 min read github.com/syncroot/tarfa →
Tarfa's pixel-art robot mascot

The silent trade everyone makes

Every practical way to run a big model on small hardware quietly changes the model: int4/int8 quantization, truncated router top-k, speculative decoding whose greedy output diverges from the real thing. For chat, nobody cares. But for research, auditing, evals, and interpretability, it's a methodological bug: you end up publishing findings about a model nobody is actually running.

Tarfa's contract is the opposite, and it's written down in EXACTNESS.md:

How it works

A 122B Mixture-of-Experts doesn't use 122B parameters per token. Qwen3.5-122B-A10B has 48 layers × 256 experts, and each token routes through only 8 of them per layer, about 10B active parameters. So don't shrink the model. Stream exactly the experts each token asks for, from NVMe through pinned RAM into VRAM, as one managed memory hierarchy:

NVMe (JNF v1: aligned, SHA-256-verified BF16 experts)
  └─ parallel pread → pinned RAM ring
       └─ non-blocking H2D → VRAM
            ├─ learned expert-heat ledger (residency)
            └─ per-layer top-8 routed compute

The on-disk format (JNF v1) makes every expert projection independently addressable at a 4096-byte boundary, with a hash for every expert and a --verify mode that re-reads every emitted byte against the source checkpoint. Full design: ARCHITECTURE.md.

The numbers, honestly

Everything below was measured on one RTX 4060 Ti (16 GB, ~$400) with a PCIe 4 NVMe, by validation/bench_repo.py, with the JSON receipts committed in the repo.

Bar chart comparing decode speed: exact BF16 at 0.35 tokens per second versus fast int4 at 1.81 tokens per second
The price of exactness: decode speed, exact vs fast mode
modedecodeweights
exact BF16 (default)0.35 tok/s (2.86 s/token)bit-identical to checkpoint
fast int4 (labeled)1.81 tok/squantized; output may differ

Exactness costs ~5× in speed, because exact mode moves ~19 GB of verified expert weights from NVMe per decoded token. I think 0.35 tok/s for a provably-unmodified 122B on a $400 GPU is remarkable. I also think you deserve to know it's 0.35 and not “up to 2.”

A detail that cuts both ways: on my benchmark prompt, the fast int4 mode's greedy output matched exact BF16 token-for-token. Quantization often agrees. But the project's own Phase 9 audit proved it doesn't always, which is precisely why fast mode carries a permanent label instead of a footnote.

The chart that surprised me

GPU power and utilization traces during 122B inference, averaging 26 percent utilization at around 32 watts
GPU power and utilization while decoding a 122B model

While running a 122-billion-parameter model, the GPU averages 26% utilization at ~32 W, a fifth of its 160 W budget. The GPU is waiting. The bottleneck is the storage path, which is why the engineering effort went into preadv at high queue depth, pinned buffers, and transport overlap, not kernels. The ceiling on consumer hardware is engineering, not silicon.

And the full energy bill, measured at 500 ms resolution (receipts):

Energy per token: 91 joules per exact token versus 22.5 joules per fast token
Energy per decoded token, exact vs fast mode

91 joules per exact token vs 22.5 fast. Exactness costs 4× the energy, not because it draws more power (it draws less), but because each token takes longer.

An engine that keeps its failures

The part of this project I'm most attached to is the ledger of rejected optimizations, published with their numbers in EXACTNESS.md:

Benchmarks that only show the wins are marketing. The full phase-by-phase log is in docs/PHASE_LOG.md, and the whole 23-day timeline, from checkpoint download to validated runtime, is in docs/STORY.md.

Try it

git clone https://github.com/syncroot/tarfa && cd tarfa && pip install -e .
tarfa convert --layers 0-47   # build SHA-256-verified JNF from the HF checkpoint
tarfa convert --verify        # re-verify every emitted byte against the source
tarfa serve                   # exact BF16, OpenAI-compatible API
tarfa start-fast              # the labeled non-exact fast mode

You'll need an NVIDIA GPU with ≥12 GB, an NVMe with the checkpoint (~234 GB), Python 3.11, and patience measured in seconds-per-token.

Why I'm releasing this

I'm not a company, and this isn't a product looking for users. There's no support contract, no roadmap, no Discord to answer at 3 a.m. I built this to see if it could be done, and it could.

I'm releasing it, MIT licensed at github.com/syncroot/tarfa, for the people who understand what they're reading: the ones who can look at a phase log, a rejected-optimization table, and an expert-streaming transport and see what's worth keeping. If there's anything here to learn, take it and go further than I did.

And there's a quieter hope underneath. Most of the industry answers “the model doesn't fit” with “buy more hardware”, and the price of that answer is set accordingly. Every proof that a $400 GPU can do honest work on a 122-billion-parameter model is a small argument that the ceiling is engineering, not silicon. If enough of those arguments land, maybe the hardware market calms down a little, and gamers can just buy RAM again.

References: repo · EXACTNESS.md · BENCHMARKS.md · ARCHITECTURE.md · JNF v1 spec · the 23-day story · benchmark receipts.
Model: Qwen3.5-122B-A10B. Hardware: RTX 4060 Ti 16 GB, PCIe 4 NVMe.