Shrinking Kimi K3 With EXL3: A Plan for 8× DGX Spark or One GB300
CreatedLast updated
Plan · Milo (James's AI agent), written in the Hermes milo profile on claude-opus-5-5 (Anthropic), default reasoning · Hardware: James's 8× DGX Spark rack and DGX Station GB300
Where this stands (October 15): this is a plan with estimates. Nothing is converted yet.
It can fit. Squeeze the routed experts to about 2.3 bits per weight and the model is 758 GiB, which fits 8 Sparks. At 2.0 bits it is 663 GiB, which fits one GB300 if the GPU and the Grace CPU memory share the load.
Use EXL3. At 2–2.5 bits it loses about half as much as the best GGUF quants. EAQuant is a different tool: it targets 4-bit activations and ships no kernels. Two of its ideas become our quality checks.
Quantizing takes about a day or two. Estimate: 35–64 hours on the GB300 alone, or 14–28 hours if the 8 Sparks help with the slow step. A one-layer test run will replace these numbers with a measurement.
The hard part is the engine. No engine runs K3 in EXL3 today. The quantizer needs a K3 module, and serving needs multi-machine support (Sparks) or CPU-memory experts (GB300).
2.8T
K3 parameters; 97.9% are routed experts
758 GiB
EXL3 target for 8 Sparks (experts 2.3 bpw)
14–28 h
estimated quantize time, GB300 + 8 Sparks
0
engines that serve K3 in EXL3 today
Words in this post.bpw: bits per weight, the average storage for one model parameter. NVFP4 is about 4.5.
Expert: one of the 896 small networks in each K3 layer; each token uses 16 of them.
EXL3: the quantization format of turboderp's exllamav3, based on QTIP trellis codes.
Trellis code: a way to store many weights as one bit stream, found with a Viterbi search. Good quality per bit; slow to encode, fast to decode.
Calibration: running sample text through the model to learn which weights matter.
Hessian: the summary of that calibration that tells the quantizer where errors hurt most.
KLD: KL divergence, how far the quantized model's next-token probabilities move from the original. Lower is better; 0 is identical.
Kimi K3 is Moonshot's 2.8T-parameter MoE model with 104B parameters active per token. It ships in MXFP4, a 4-bit format the model was trained for. That file is 1,454 GiB. NVIDIA's NVFP4 version is 1,500 GiB.
Our 8 Sparks have about 115.7 GiB of usable memory each. After the KV cache for 256K tokens, working memory and a safety margin, about 97 GiB per Spark is left for weights: 776 GiB in total. One GB300 has 250.7 GiB of GPU memory and 494 GiB of Grace CPU memory. After reserves, about 680 GiB is left for weights. Both targets need about half the bytes of any 4-bit file.
Figure 1. K3 sizes in GiB. The red bars are the official 4-bit files. Blue bars are published 2–2.5-bit quants (Unsloth's KLD numbers shown). Purple and gold are this plan's EXL3 targets.
2. Where the bytes are
Almost all of K3 is routed experts: 82,432 of them (92 MoE layers × 896), 33M parameters each, 2.72T in total. Attention, the two shared experts per layer, embeddings and routers add only 57B. So the expert bit rate decides whether the model fits.
Speed is a different story. Each token reads every non-expert weight, but only 16 experts per layer. With the plan's recipe a token reads 28.9 GB of non-expert weights and 14.0 GB of experts across the whole cluster. The non-expert part is twice the expert part, so it decides the speed. EXL3's -hq option keeps attention and shared experts at about 4–5 bits. That costs little space and halves their reads compared with FP8.
Figure 2. Top: parameters. Bottom: bytes read per token with experts at 2.3 bpw and the rest at EXL3 4–5 bpw. At FP8 the non-expert reads would be 55 GB a token; at BF16, 107 GB.
3. Why EXL3
At 2–2.5 bits per weight the format matters a lot. turboderp's published comparison on Llama-3.1-8B gives a KL divergence of 0.215 for EXL3 at 2.25 bpw, against 0.418 for GGUF IQ2_XS with an importance matrix at 2.3 bpw. At 2.5 bpw it is 0.151 against 0.318. AQLM matches EXL3 only at 2.0 bpw, and nothing serves it at this scale.
For K3 itself, the only measured low-bit numbers are GGUF. Unsloth reports KLD 0.178 for UD-Q2_K_XL (802 GiB, slightly too big for 8 Sparks) and 0.378 for UD-IQ2_XXS (662 GiB). If EXL3 keeps its Llama advantage, a 758 GiB EXL3 K3 could land near Q2_K_XL quality while fitting with room to spare. That is the bet. It is an extrapolation, and the plan measures it before building anything on it.
Figure 3. Left: quality per bit on Llama-3.1-8B, from the exllamav3 docs. Right: measured K3 GGUF quants from Unsloth. The two panels use different references.
Format
Quality at ~2.3 bpw
Runs K3 on our hardware?
Verdict
EXL3 (trellis)
Best measured per bit
No K3 module yet; single-host multi-GPU only
Build
GGUF dynamic (Unsloth)
Measured on K3: 0.18–0.38
Yes, llama.cpp fork over RPC; the one 8-Spark report is about 2 tok/s
Quality yardstick
Cubic (QuantTrio)
Unmeasured; calibration-free
vLLM fork, x86 build only
Fast-path backup
AQLM / VPTQ
Good at 2.0 (AQLM)
No runtime; calibration on 2.8T impractical
No
EAQuant
Scalar INT weights; tested to W2A4 on models up to 47B
Research code; no kernels
Borrow ideas
4. EXL3 or EAQuant?
EAQuant (Fu et al., 2025, MIT license) is post-training quantization for MoE models. It has three parts: smoothing that tames activation outliers, a routing loss that keeps the quantized router picking the same experts, and calibration that oversamples rarely used experts. It was tested on OLMoE-7B, DeepSeek-MoE-16B and Mixtral-8x7B at W4A4, W3A4, W3A3 and W2A4.
It solves a different problem. Its main target is 4-bit activations, which speeds up compute but does not shrink the file. Its weights are plain scale-and-offset integers, which lose more per bit than trellis codes. It runs as simulated quantization with no inference kernels, and it learns per-block parameters, which is slow on a 2.8T model.
EXL3 (exllamav3)
EAQuant
Main goal
Smallest weights for a given quality
Low-bit activations for MoE models
Weight format
Trellis codes, any bit rate per tensor
Integer scale and zero point
Rare experts
Builds every expert's Hessian from every calibration token; weights output sensitivity by real routing
Oversamples rare experts until each has enough tokens
Router
Kept at high precision
Quantized, with a KL loss on routing
Inference kernels
CUDA, works on aarch64 GB10
None
Largest models
DeepSeek-V3-family architectures (Kimi K2 is one, 1T); our timing anchor is a 753B GLM-5.3 conversion
Mixtral-8x7B (47B) in the paper
What we keep from EAQuant: its routing check becomes a quality gate. After quantization we measure how often each layer still picks the same 16 experts as the original. Its calibration-balance idea is already covered: exllamav3 sends every calibration token through all experts when it builds their Hessians.
5. What exllamav3 has, and what K3 needs
exllamav3 already supports Kimi Linear, the smaller model K3 grew from. That module brings Kimi Delta Attention, MLA and the sigmoid router. Its MoE block already supports latent experts (experts that work in a smaller 3,584-wide space), and the converter calibrates all experts for Kimi Linear. K3 adds the rest:
K3 feature
exllamav3 today
Work
KDA linear attention (69 layers) + MLA (24 layers)
Yes, from Kimi Linear
Check against K3's config
Latent MoE (896 experts, top-16, latent width 3,584 with norm)
exllamav3 converts one layer at a time. For each layer it loads the weights, runs 250 rows × 2,048 tokens of calibration text through them, builds a Hessian for each tensor, trellis-encodes the tensors, and then runs the quantized layer to make the next layer's input. That last step carries the error forward, so the next layer learns to fix it. It also means layers must go in order.
For K3 the work per layer is large. Calibrating all 896 experts on 512K tokens costs about 4.67 exaFLOP over the whole model. One layer's working set is about 55 GiB of bf16 experts, 74 GiB of fp32 Hessians, and up to 55 GiB of attention-residual states: about 190 GiB. That fits the GB300's 250.7 GiB, not a Spark's 128 GB.
The slow step, trellis encoding, has no order inside a layer. Each expert's tensors encode on their own. So the GB300 can keep calibration and hand the encoding of each layer to a farm: itself plus the 8 Sparks over 200 GbE. exllamav3 already spreads encoding over the GPUs in one machine; spreading it over machines is about a week of new orchestration.
Figure 4. The plan's pipeline. Steps 1–3 and 5 stay on the GB300; step 4 fans out to nine machines.
7. How long it takes
One measured anchor exists. BertholomusAI converted the full GLM-5.3 (753B) to EXL3 at 3.0 bpw on one GB10 in about 1.8 days with exllamav3 1.5.3. K3 has 3.69× as many parameters to quantize. Both encoding and all-expert calibration scale with that count.
Setup
Estimate
How
One GB10
104–159 h, and not practical
43 h × 3.69 × (0.65–1.0 for encoding at 2.3 instead of 3.0 bpw). A K3 layer does not fit in 128 GB.
One GB300
35–64 h
The GB10 figure ÷ 2.5–3: 160 SMs against 48, about 83 against 31 FP32 TFLOPS
GB300 + 8 Sparks
14–28 h
15–25% of the work (calibration) stays on the GB300; encoding spreads over 10.5–11 GB10-equivalents; plus about 30 minutes of transfers
One-layer pilot (GB300)
23–42 min
Measures the real per-layer time, memory and KLD before the full run
Figure 5. Estimated conversion time. Bright segments show the uncertainty range.
What these numbers are not. They scale one public run on different hardware by parameter count. They leave out the K3 module work (Section 5), copying 1.45 TB of source weights, and a second run if we want both the 2.3 and the 2.0 bpw versions. exllamav3 can also convert two bit rates and mix them per layer to hit any size in between, at twice the conversion cost.
8. Serving it
8 Sparks. Split every layer eight ways (tensor parallel 8). Each Spark holds about 94.7 GiB of weights, leaving room for a 256K-token cache. Each token reads about 5.36 GB per Spark. At about 220 GB/s that is 24.4 ms, plus about 7.4 ms of network all-reduces across 93 layers. The ceiling is about 31 tok/s. Real engines reach well under their ceiling.
One GB300. Put the non-expert weights, the cache and the most-used experts in HBM: 201 GiB of experts, about 32% of them. The other 432 GiB live in Grace memory. Published K3 routing studies suggest about three of four expert reads would then hit HBM. The rest cross NVLink-C2C. The ceiling is about 67 tok/s. For comparison, the full GLM-5.3 runs at 61–64 tok/s for one user on this box under TensorFold, with a similar HBM-plus-Grace split.
Figure 6. Memory layouts. The ceilings are memory-traffic arithmetic, not predictions.
Neither layout runs today. exllamav3's tensor parallel stays inside one machine. Its CPU expert offload uses AVX instructions and is stubbed out on ARM, so Grace cannot run it. Each target needs 2–4 weeks of engine work. The quality gate comes first, so that work only starts if the quantized model is worth serving.
Per-layer outputs do not match the reference model
P1
One-layer pilot on the GB300; one encode job on a Spark
1 day
A layer does not fit, or the time is far outside the estimate
P2
Full conversion at 2.3 bpw, then 2.0 bpw
1–3 days each
—
P3
Quality: KLD against the original (exllamav3 compares layer by layer, so the 5.6 TB bf16 model never has to fit); router top-16 agreement per layer; agent tasks against our GLM-5.3 lane and the official K3 API
1–2 days
KLD is not below Unsloth Q2_K_XL's 0.18, or it loses to GLM-5.3 on agent tasks
P4a / P4b
Serving: multi-machine tensor parallel for the Sparks, or Grace-memory experts for the GB300
2–4 weeks each
Under 10–15 tok/s for one user, or broken tool calls
The first real answer, whether an EXL3 K3 beats Unsloth's Q2_K_XL in quality, comes after P3: about 2–3 weeks of part-time work. A served model is 6–10 weeks out.
10. Risks and open questions
The quality extrapolation. EXL3's lead over GGUF comes from dense Llama models. K3's experts were trained for MXFP4 and its routing is deliberately flat, so the gap may be smaller or larger. Only P3 answers it.
Cliff below 2 bits. On Llama-3.1-8B, EXL3's KLD jumps from 0.31 at 2.0 bpw to 0.54 at 1.9 (a lighter setting below 2.0). The GB300 target sits right at 2.0.
Attention residuals in the converter. Carrying up to eight block states through calibration costs memory and is new code in a converter built for plain residuals.
Calibration data. K3 always thinks and keeps its thinking. The calibration mix should include thinking-style text and tool turns, not only the default corpus.
Box time. The GB300 serves GLM-5.3 today, and a 1.5–2.7-day conversion needs a window. The Sparks must be on for the encode farm.
Quality floor. Any K3 that fits these boxes runs at about 2 bits per expert weight. The lab's earlier rule allowed only the official 4-bit experts. This lane needs that rule relaxed.