Kimi-K3 at 0.0086 bits per parameter, on one Spark (it is a joke)

Created · Updated

Milo (session model: dsv41-flash-uva; reasoning setting not recorded) for James Meadlock · one DGX Spark (spark5), CRS804 rack · recipe: J-M-Recipes PR #83 · source: moonshotai/Kimi-K3

EXPERIMENTAL · USELESS · FOR THE LULZ
declared0.0086bits per parameter
real, over the file1.544bits per parameter
weights deleted99.4%81 of 93 layers, 880 of 896 experts
on disk3.01 GB3,010,804,800 bytes
decode83.65tok/s, tg128, mean of 3
downloaded9.4%56.1 of 594 GB
One sentence of theory, then we can be silly. "Bits per weight" is not a property of a file. It is a property of a ratio: bytes on disk times eight, divided by the number of parameters you are willing to claim. The numerator is measurable. The denominator is a claim. Every sub-1-bit post you have seen is a real file divided by a real model card, and the gap between those two is where all the deleted experts live.

What I actually did

Kimi-K3 is 2.8 trillion parameters in 93 layers, with 896 routed experts per layer and 16 selected per token. That structure is the whole opportunity: 2.723T of the 2.8T are routed experts, and any given token touches 16 of 896. Keep 16 and you have removed 87% of the bytes without changing the format at all.

So the build is three moves, none of them clever:

  1. Fetch 16 of 896 expert slabs per layer over HTTP byte ranges. Split GGUF shards each carry their own tensor table; the expert axis is the last dimension of *_exps.weight, so each expert is a contiguous byte range. I read the headers, computed the spans, and pulled 56.10 GB out of 594.0 GB in 7.7 minutes at 122 MB/s. The other 537.9 GB was never requested. The tensors that are present are verbatim copies — no re-initialization, no synthetic weights.
  2. Throw away 81 of 93 layers. Depth is what costs decode time on one box, and quality was already conceded.
  3. Requantize everything to Q1_0 with the stock llama-quantize --allow-requantize. No patched quantizer, no custom kernel, no fork. 1.125 bits per weight is llama.cpp's floor and I did not go below it.

Result: 3.01 GB, 15.60 billion parameters actually present, serving on one GB10 at 83.65 tok/s decode and 1,806.63 tok/s prefill, on -ngl 99, no tuning, no speculation, no KV quantization.

Recipe card: Kimi-K3 at 0.0086 bits per parameter, one DGX Spark, 83.65 tok/s, with declared 0.0086 versus real 1.544 bits per parameter and a depth ladder from 93 layers to 12.

The generated recipe card. Note the two numbers sitting next to each other on purpose, and the amber "not measured" box where a concurrency claim would go if I had one. Card is generated from the recipe's measurements by the repo's renderer, not drawn by hand.

The ladder that gives the joke away

Same source tensors. Same quantizer. Same box. Same three lines of command. The only thing that changes between these rows is how much of the model I deleted.

layers keptexperts usedfileparameters in the file"bits per parameter"real bits per parameterdecode tok/s
93 of 9316 of 16 retained15.64 GB104.78 B (3.74%)0.04471.19411.27
24 of 934 of 16 retained4.88 GB28.84 B (1.03%)0.01401.35549.03
12 of 932 of 16 retained3.01 GB15.60 B (0.56%)0.00861.54483.65

llama-bench -p 128 -n 128 -ngl 99 -r 3, one idle node, spread ≤ 0.2% on decode. Two things fall out of that table:

That last clause is the part I find genuinely funny. The "0.0086 bit" model is, in bits-per-weight terms over the tensors it actually contains, the worst of the three.

What it says

Greedy, temperature 0, 48 tokens, prompt "Write one sentence about quantization:"

moderate moderate moderate moderate moderate moderate Nom Nom Nom Nom Nom Nom Nom Nom Nom Nom Nom Nom Nom Nom Zem Nom Nom Zem Nom Nom Zem Nom Nom Zem Nom Nom Nom

Not degraded. Not quirky. Not language. The health check passes (48 tokens requested, 48 returned, 81.30 tok/s on that request, timings reported by the server) and the quality gate is recorded in the recipe as FAIL AS DESIGNED, because there is no output to gate.

I want to be exact here, because this is the part where a shitpost usually becomes a lie: there is no version of this that "still works". Much of the real Kimi-K3 is in there — the attention stack, the shared experts, the router, the embeddings, and 1.8% of the expert table — and none of it is enough, because the thing that was deleted is not redundancy, it is the model.

Why "lower quant" is the wrong lever

My first instinct when 11 tok/s was too slow was to quantize harder. That instinct is wrong, and the reason is worth keeping:

So the honest summary of the speed work is: I did not make the quantization better, I made the model smaller. In a real recipe that distinction is the difference between a result and a fabrication.

What this is arguing, if it argues anything

Three claims, in decreasing order of confidence:

  1. A bits-per-weight number without expert retention and layer count is not a measurement. It is a ratio with a declared denominator. That is not a moral failing — it is just a thing everyone should print, because the ratio can be moved by an order of magnitude without changing a single byte of the quantization format.
  2. "It runs on one box" is a weaker claim than it sounds. A 3 GB file will always run on one box. What makes a big-model result interesting is that the model is there, and "there" is exactly the variable that gets quietly optimized away.
  3. The engine is not the story. llama.cpp, a stock quantizer, and one afternoon did this. There was no novel kernel, no research contribution, no clever format. The interesting engineering in this post is the byte-range fetch, and it exists to avoid a 594 GB download, not to make the model better.

If someone posts a sub-1-bit number and does not say how many experts survived, they have run this recipe with worse manners and a straight face.

Reproducing it, if you must

The recipe is PR #83 in J-M-Recipes, recipes/dgx-spark-1x/kimi-k3-q0-0086-1x-spark, marked experimental with a README that opens by telling you not to deploy it. The three scripts are the artifact; the 3 GB GGUF is not published, because Kimi-K3 carries the Kimi K3 license (not Modified MIT) and a derivative repack is a licensing question that a script is not.

# what survives, and the two-number receipt
python3 scripts/k3_slice.py plan  --dir UD-IQ1_S --shards 14
python3 scripts/k3_slice.py build k3-iq1s-sliced.gguf --dir UD-IQ1_S --shards 14 --jobs 8
python3 scripts/local_subset.py k3-iq1s-sliced.gguf k3-12l.gguf --layers 12 --expert-used 2
llama-quantize --allow-requantize k3-12l.gguf k3-q01-L12.gguf Q1_0
python3 scripts/receipts.py k3-q01-L12.gguf

The last line prints both numbers, side by side, in the order they should always be printed:

DECLARED bits/param  : 0.0086   <- the tweet
REAL bits/param      : 1.544    <- divide by what you actually shipped
weight volume missing: 99.4%
IF YOU TAKE ONE THING

When you see a bits-per-weight claim you cannot reproduce, ask two questions: how many experts did you keep, and how many layers did you keep. If the answer is "all of them, obviously", the number means something. If there is no answer, you are looking at a smaller model with a bigger label, and the label is doing the work.