Running Gemma 4 26B at 5 tokens/sec on a 13-year-old Xeon with no GPU
A resourceful engineer resurrected a 13-year-old dual Xeon server to run Google's Gemma 4 26B model, achieving a reading-speed output of 5 tokens/second without a GPU. The surprising twist? An AI (Claude) was instrumental in diagnosing and fixing the complex C++ instruction set mismatches and silent code failures. This feat highlights the value of deep technical understanding and creative problem-solving over simply acquiring the latest hardware or cloud subscriptions, resonating with HN's appreciation for technical ingenuity and leveraging legacy systems.
The Lowdown
Inspired by a previous Hacker News post about running Gemma 4 on a 10-year-old Xeon, the author embarked on a similar challenge: making Google's Gemma 4 26B mixture-of-experts model run on a 13-year-old repurposed HP StoreVirtual server. This server, equipped with dual Ivy Bridge Xeons and no GPU, lacked modern instruction sets like AVX2 and FMA3, leading to unexpected compilation and runtime issues.
- The Initial Hurdle: The
ik_llama.cppfork, optimized for newer CPUs, failed to build due to assumed AVX2/FMA3 instructions not present on the older Ivy Bridge Xeons. - AI as a Collaborator: Instead of traditional debugging, the author fed the build failures and subsequent experimental results to Claude, an AI agent. Claude successfully diagnosed the issue: specific MoE graph operations (
MOE_FUSED_UP_GATEandFUSED_UP_GATE) had no dispatch case for non-AVX2 builds, causing them to silently use uninitialized memory. - The 'Silent Bug': This led to "fluent-looking multilingual gibberish" output, characterized by uniformly spread token IDs and a flat softmax due to a hidden state being consistently corrupted. The determinism of this corruption (temperature 0, byte-identical runs) helped Claude identify the bias.
- The Fix: Claude generated three commits: compile fixes for scalar fallback paths, a runtime fix redirecting unsupported ops to working non-IQK implementations via
ggml_mul_mat_idandggml_fused_mul_unary, and updates to CI stubs. - Performance: With these fixes, the 26B MoE model achieves approximately 5.2 tokens/second for decoding and 16 tokens/second for prompt evaluation.
- Broader Implications: The author emphasizes that the real skill lies not in subscribing to AI services, but in understanding models deeply enough to adapt them to challenging, non-standard environments, and leveraging AI as a powerful diagnostic and problem-solving tool rather than a mere 'fix-it' button.
This story powerfully illustrates that powerful AI models can be made accessible on surprisingly modest hardware with enough ingenuity and, increasingly, with the help of other AIs. It serves as a compelling example of pushing the boundaries of what's possible with legacy systems and highlights the evolving human-AI collaborative workflow in complex engineering tasks.
The Gossip
Hardware Hacking & Performance Ponderings
Commenters were keenly interested in the specifics of the hardware, particularly RAM capacity, and engaged in spirited discussions comparing their own LLM performance on various CPU-only or M-series setups. Some shared their own impressive token-per-second figures on older Xeons, sometimes surpassing the author's, sparking a friendly competition and further inquiry into optimal configurations and NUMA penalties.
AI-Assisted Alchemy
A significant thread of discussion revolved around the author's use of Claude to diagnose and fix the complex C++ bug. Many found this application of AI 'amazing' and a glimpse into the future of engineering. However, some skepticism emerged regarding whether parts of the blog post itself might be AI-generated, prompting the author and others to clarify the distinction between AI's role in code generation and human authorship of the narrative.
Contextual Connections
Commenters and the author himself provided valuable context by linking to the original 'A 10 year old Xeon is all you need' post that inspired this project, as well as the open Pull Request on GitHub detailing the specific code changes made. This helped ground the discussion and allowed others to potentially reproduce the results or examine the technical solution more closely.