howtospark
models / kimi-linear-48b-a3b
Moonshot logo

49B params~3.5B activebfloat16MoE 256×81.0M ctxmit
Sparks
~107 GB
~82 GB
~57 GB
~33 GB
~22 GB
~22 GB
~21 GB
110 usable
REAP dialno pruning · 256 experts
Spec decode
Context33K / 1.0MKV
On the Sparks — 1× · 2-bit experts + NVFP4 dense · 33K ctx · FP16 KV~11.1M ctx fits usable
spark
89 GB free
Expert planes11.8* GB2-bit
110 usable
21* / 110 GB
19% of usable
Expert planesDense weightsKV cacheActivations + graphsOS reserve

* segment sizes marked with an asterisk are estimates pending a measured run

Estimated per-node footprint, weights + KV sharded across the Spark (tensor parallel). Overhead ~8 GB/node; KV at FP16.

layer map
27 layersMoE FFN
in
out

one MoE layer · 256 experts, 8+1 fire per token

each expert ≈ 7M params

resident: 26 MoE layers × 256 experts × 7M 47.1B

active/token: 26 × 8 × 7M 1.5B experts

+ 2.0B always-on dense (attention, embeddings, shared stack) = 3.5B active

Recipes (all recipes)

Worked deployments that run this model on DGX Spark — each shows how it fills each node's unified memory.

Optimize
Verdict

49B params, ~98 GB at bfloat16 — fits on one Spark as-is.

Make it fit

Get the weights (and headroom for KV) inside the 128 GB pool — the hard gate.

Lossless compression

BF16 weights entropy-code ~30% smaller bit-exact — smaller downloads and less bandwidth per token, no quality question at all.

Make it fast

Once it fits: fewer bytes per token and fewer decode steps against 273 GB/s.

Add a speculative decoder

Decode is bandwidth-bound at ~39.2 tok/s ceiling; a trained EAGLE-style draft multiplies tokens per weight-read.

Prune experts for speed

Fewer experts ⇒ smaller working set ⇒ better cache/page behavior, even when it already fits.

Tame the KV cache

At 1048576 tokens the KV cache alone is ~8 GB at FP16; quantize or evict.

Make it yours

Change what the model does — adapt, edit, or steer it — independent of size.

Fine-tune it

LoRA/QLoRA adapts behavior on one Spark without touching the base weights.