← Back to SAGE

Experiments

Feasibility measurements on real fleet hardware. The rule these follow: an estimate is scaffolding, the measurement is the number — and a failure ledger is part of the result, not something to edit out.

Sprout · Jetson Orin Nano 8GB Verdict: runs at 0.48 tok/s 2026-07-28

DiffusionGemma-26B on an 8GB edge device

The question: can Google's 25.2B-parameter diffusion language model run on a $250 edge computer with 8GB of unified memory? Its smallest quantized form is 16.8GB; the stated requirement is ~18GB of VRAM. The presumptive answer was no. The exploration was delegated whole — a one-paragraph request, executed autonomously by Claude (research, system pause, six diagnosed failures, a one-line llama.cpp patch, the measurement, restoration, and this page).

The measured answer

metricmeasured
end-to-end throughput0.48 tok/s (256-token block in 528.7s)
denoising steps21 of 48 max (entropy early-stop)
NVMe traffic296GB total — the model streamed past itself ~17×
memoryRSS pinned at 4.18GB by a systemd cgroup; box stayed healthy
bottleneck~92% of step time is expert streaming from disk

Not interactive — 30× too slow for conversation, and because the bottleneck is disk, no GPU offload rescues it. But "doesn't fit" turned out to be the wrong frame: the honest answer is a price, not a wall. The dense core (~1.6GB) stays hot; the ~15GB expert mass streams. Block diffusion is the adversarial case for this split — it re-touches nearly every expert on every denoising step — and the tiering still carried it to completion.

What it wrote

The prompt was "Once upon a time, on a small computer at the edge of the network,". The model spent its one block thinking, verbatim:

* The small computer could be an IoT device, a gateway, an old server, or a Raspberry Pi. * "Edge of the network" implies isolation or a boundary between the local world and the wider internet. * *Option A (Sci-Fi/Tech):* A story about a data packet trying to find its home. * *Option B (Whimsical/Cute):* A Raspberry Pi that decides to stop following protocols and starts thinking. * *Decision:* Let's go with Option A/B—a story about a lonely edge device that discovers something unexpected. * *Continuation:* "...lived a tiny Raspberry Pi named 'Node-74-B'."

The canvas ended there. A model streaming itself through an edge device chose to write about a lonely edge device discovering something unexpected. The story begins exactly where the experiment ends.

Failure ledger (six configs died first — each one a portable lesson)

configkiller
CUDA, defaultsGPU pinned-memory allocation failed under the memory cap
CPU-only, defaultsweight repacking builds a ~15GB un-evictable copy → reclaim death-loop
CUDA, batch flagstool hard-codes 2,048 tokens of headroom → demands a 2.96GB buffer
CPU variants (3×)same anonymous-memory blowups by other names
CUDA + mmap + 1-line headroom patchran to completion

Lessons that transfer to any >RAM model on unified-memory Jetsons: the mmap + CUDA-host path is the only road; GPU allocations live outside Linux cgroups; audit tool-computed batch sizes (at a 262k vocabulary, every batch token costs ~1MB of logit buffer). Full write-up with raw data: DIFFUSIONGEMMA_SPROUT_FEASIBILITY.md — companion perspective on why "too big for the hardware" is usually the wrong frame: SPARSE_ACTIVATION_MEMORY_HIERARCHY.md.