LLM Serving

llama-modchip runs 284B DeepSeek-V4-Flash in 64GB RAM at 9.1-14.7 tok/s, no GPU

A patched llama.cpp build fits a 284.33B MoE into 57.61-58.9 GiB of RAM on a 16-core Zen 5. It gets there with custom compression and a custom tensor format, and its quality is benchmarked only against an IQ2_XXS quant.

Published
November 8, 2026
Read
6 min
Published by
Samir Sengupta
llama-modchip running the 284B DeepSeek-V4-Flash in 64GB of RAM on a CPU-only Zen 5 machine at up to 14.7 tok/s
Note 134 / 134Daily note · Written from 2 sources

How this was madeDrafted with Claude, Anthropic’s model, from 2 cited sources, then checked against them in a second editing pass. Editorial policy

the short version

  • llama-modchip v2.4.0 fits DeepSeek-V4-Flash (284.33B total, 13.17B active) into 57.61-58.9 GiB of resident memory at 256K context on a 64 GB Zen 5 machine with no GPU.
  • Pure CPU decode on the default lossless profile is 9.06-9.95 tok/s. The 11.5-14.7 tok/s headline figure depends on the Stockfish-PVS speculative drafter.
  • Every DeepSeek quality figure in the README uses an IQ2_XXS quant as its 1.00000 reference, so none of them say how the model compares to full precision.
  • The Fractal-64 files use a custom GGML_TYPE_Q2_0 (type ID 40) that unpatched llama.cpp, Ollama and LM Studio cannot open.

llama-modchip v2.4.0 runs the 284.33B-parameter DeepSeek-V4-Flash, with 13.17B parameters active, on a 64 GB CPU-only machine. It shrinks the checkpoint to 56.56 GiB on disk, and peak VmRSS is 57.61-58.9 GiB at 256K context. On a 16-core AMD Ryzen 9 9955HX with no GPU, the README reports 44.36 tok/s prefill and 9.06-9.95 tok/s pure decode. With its speculative drafter, decode rises to 11.5-14.7 tok/s. Everything stays in RAM, so the requirement that matters is memory capacity and DRAM bandwidth rather than storage bandwidth.

The repository is synchopate/llama-modchip on GitHub. It is a patched llama.cpp stack bundled with prebuilt binaries, Hugging Face GGUFs and a ./modchip wrapper. It also targets 30B MoEs: the README claims Nemotron-3.5-30B-A3B runs in 14.35 GiB at 25.0-60.4 tok/s on the same 16-core Zen 5 part. For anyone evaluating it, the open question is whether a 284B model compressed this far does useful work at about 10 tokens a second. The sources answer the speed half and leave the quality half largely unmeasured.

How llama-modchip fits 284B in 56.56 GiB

The README's starting point is a 76.87 GiB IQ2_XXS file that it says crashes with OOM on 64 GB Linux. Two techniques bring that down. The first is an analytical second-order SwiGLU-H2 Hessian compression of the MoE layers, which the project says shaves 20.31 GiB. The second is Fractal-64 transcoding of the MLA layers into a block-64, BF16-scaled, Gray-coded format called Q2_0 at 3.75 bpw. On top of this, the README lists L2-quadrature MoE pruning and an exact SVD of wo_b * wo_a at 25% lower rank, reported at 99.82% cosine similarity.

The baseline row is internally inconsistent. The README marks the unpatched IQ2_XXS as OOM on 64 GB, yet lists it at 5.91 tok/s decode (169.3 ms). It also marks speculative decoding on that baseline as N/A because of a rollback bug, which the project says it fixed. The sources do not explain on what machine the 5.91 tok/s figure was measured, and they do not give an overall bits-per-weight for the final 56.56 GiB file.

Commenters on Hacker News questioned the baseline itself. One noted that unsloth's IQ2_XXS GGUF of this model is 91GB and its smallest IQ1_S is 82.5GB. That commenter asked which model or quant the 76.87 GiB figure refers to, and the README does not say. The same commenter read "compression" and "MoE pruning" as signs of a model degraded further than unsloth's IQ1 quants. The quality section below covers what the README does and does not measure.

Decode runs at 9.06 to 14.7 tok/s on Zen 5

The README breaks out four profiles, all measured on the Ryzen 9 9955HX with 0 GPUs. They share a prefill (pp512) of 43.16-44.36 tok/s. The project credits the 77% gain over 25.0 tok/s to tiling across four levels: ZMM AVX-512BW registers, a 32 KB L1D, a 1 MB L2 and a 64 MB L3. It also cites a register-stationary AVX-512 MQA8 FlashAttention kernel, reported at 2.0x.

  • Lossless, Top-6 all layers (default): 9.06-9.95 tok/s decode, 11.5-14.7 tok/s with Stockfish-PVS.
  • Sweet-Spot, Top-5 on layers 3 and up with L2 quadrature: 9.68-9.87 tok/s, 12.2-15.1 tok/s with PVS.
  • Top-5 L2 plus Gate-First SwiGLU (80/128 L2): 10.15 tok/s (98.5 ms per token), 12.8-15.6 tok/s with PVS.
  • Turbo 10+, Top-4 L2 plus Gate-First SwiGLU: 10.12-10.74 tok/s (93.2 ms), 13.0-16.0 tok/s with PVS.

Speculative decoding accounts for the gap between the 9-10 tok/s pure decode and the 14.7 headline, and its speedup depends on acceptance rate. The README gives 96.4% acceptance for the Nemotron drafter but no acceptance figure for DeepSeek, so the PVS range should be expected to vary by workload. Prefill is the larger cost for agent use. At 44.36 tok/s, a cold 10,000-token prompt would take roughly 225 seconds to ingest before the first output token. That figure comes from pp512, and the sources do not report prefill speed at longer prompt lengths.

Quality is measured against an IQ2_XXS baseline

The benchmark table gives probability cosine similarity, KL divergence and top-1/top-3 match for each profile. The reference row, scored 1.00000 and 0.0000 nats, is the standard IQ2_XXS quant. The default profile's "Bit-Exact" label therefore means bit-exact against that IQ2_XXS quantization, not against the released weights. The other profiles drift further from that reference.

  • Sweet-Spot: 0.99714 cosine similarity, 0.0042 nats (+0.42% PPL), 95.8% top-1, 100% top-3.
  • Top-5 L2 plus Gate-First: 0.99385 cosine similarity, 0.0531 nats, 100% top-1 and top-3.
  • Turbo 10+: 0.99126 cosine similarity, 0.0281-0.0694 nats, 100% top-1 and top-3.

The sources report no comparison against BF16 or FP8 DeepSeek-V4-Flash and no task benchmark for the 284B model. The README reports its 100-point quality gate only for the Nemotron 30B profiles. Commenters on Hacker News were skeptical. One said that even a 97GB Q2XS of this model shows very significant divergence from full precision, and that it needs something like 150GB of RAM to run properly with an unquantized KV cache.

Another commenter cited a TUM paper, "Reliability Scaling Laws for Quantized Large Language Models", as evidence that the size-to-performance ratio generally peaks at 4-bit. A reply pointed out that the paper treats quantization-aware training as out of scope. The same reply added that it saw no evidence this project uses QAT, so the paper's findings may still apply here.

DRAM bandwidth, not storage, sets the ceiling

The design keeps everything resident: the README states "100% in RAM, zero NVMe swap." No weights are read from SSD during inference, so storage bandwidth affects only load time. The sources give no load time or required read rate. Decode depends on DRAM bandwidth and cache behavior instead. On Zen 5, the project uses _MM_HINT_NTA for victim-L3 isolation of the 64 MB L3, plus 2MB transparent huge pages.

On an 8-channel DDR5 Threadripper PRO 7985WX (Zen 4, 64 cores, 8 CCDs, 256 MB L3), the README reports 111.6 tok/s for the 30B model. It says AVX-512BW register tiling saturates the 8-channel bandwidth there. It recommends -t 32 with a 4-cores-per-CCD stride, which it measured at 54% faster than -t 64 because it avoids Infinity Fabric saturation. That machine is listed with DeepSeek-284B as a recommended model, but no 284B speed is given for it, and no GB/s figures are given for any machine.

Headroom is tight. 58.9 GiB of RSS on a 64 GB box leaves little room for anything else running alongside it. The DeepSeek quickstart command also uses -c 32768, not the advertised 256K context. A separate Tom's Hardware headline describes a homelabber running a 2.8-trillion-parameter model on CPU alone using second-generation Optane memory sticks, with blower fans to keep Optane's heat from burning out nearby DRAM. That is a different memory tier, and only the headline was available.

Custom tensor type 40 breaks llama.cpp and Ollama

The Fractal-64 GGUFs use GGML_TYPE_Q2_0 with type ID 40, plus custom deepseek4 and Stockfish-PVS kernels. The README warns that unpatched llama.cpp, Ollama or LM Studio will fail with "unknown tensor type 40". To run them, you need either the ./modchip wrapper or the standalone llama-server-modchip-linux-x86_64 binary, which has zero .so dependencies and ships in the Hugging Face repos and GitHub Release v2.4.0.

bash
hf download Synchopate/DeepSeek-V4-Flash-0731-Fractal-64GB-CPU-GGUF --local-dir ./dsv4
chmod +x ./dsv4/llama-server-modchip-linux-x86_64
./dsv4/llama-server-modchip-linux-x86_64 -m ./dsv4/DeepSeek-V4-Flash-0731-Fractal-00001-of-00003.gguf -c 32768 -t 16 -fa on --port 8080

This creates a dependency on one project's binary and file format, and the sources give no upstream path. The 284B kernel optimizations the README lists are AVX-512BW. AVX2, Apple Silicon and ARM64 paths are listed for other models and platforms. The verified 284B numbers come from a single Ryzen 9 9955HX. One Hacker News commenter said the README makes it unclear what platform assumptions the stack depends on.

Warm KV restore cuts Claude Code turns to 13.1 ms

The README targets the prefill problem for agents directly. ./modchip claude points the Claude Code CLI, with all 40 tools active, at the local server. It uses a /dev/shm Slot-0 KV warm restore, so a returning turn restores state instead of re-evaluating the prompt. The project reports 13.1-32.6 ms restores on DeepSeek-284B and 18.9 ms on Nemotron-30B, which it describes as about 6,800x faster warm turns for Nemotron. It frames this as eliminating a 45-second CPU prompt re-evaluation bottleneck.

Warm restore helps only when the prefix is unchanged. New file contents, tool outputs and long diffs still go through prefill at about 44 tok/s, and the sources give no end-to-end agent task timings. For teams considering coding agents on this setup, the measured profile is a box that answers slowly but restores context quickly. The quality of its answers has not been measured against the full-precision model.

Questions this raises

How fast does llama-modchip run DeepSeek-V4-Flash without a GPU?

On a 16-core AMD Ryzen 9 9955HX, the README reports 9.06-9.95 tok/s pure decode with the default lossless profile and 11.5-14.7 tok/s with the Stockfish-PVS speculative drafter. Prefill runs at 43.16-44.36 tok/s, and no acceptance rate is given for the DeepSeek drafter.

Is llama-modchip's DeepSeek-V4-Flash quality compared to full precision?

No. Every quality metric uses the standard IQ2_XXS quant as its reference, so the "Bit-Exact" label means bit-exact against IQ2_XXS. The sources report no comparison against BF16 or FP8 weights and no task benchmark for the 284B model.

Can I load llama-modchip GGUFs in regular llama.cpp or Ollama?

No. The Fractal-64 GGUFs use a custom Q2_0 tensor type with ID 40 plus custom deepseek4 and Stockfish-PVS kernels. The README warns that unpatched llama.cpp and Ollama will not run them.

Spotted an error? Email samir.s.sengupta@gmail.com and I will correct it and date the change at the top of the note. How these notes are researched, drafted and checked is in the editorial policy.

More notes

Building something on this?

I ship production LLM, RAG and agentic systems for a living - the infrastructure behind the things these notes are about. Open to roles, contract work and research collaboration.