howtospark
models / baidu/Unlimited-OCR
?

baidu/Unlimited-OCR
3.3B params~1.1B activebfloat16MoE 64×633K ctxmultimodalmit
Sparks
~17 GB
~15 GB
~13 GB
~12 GB
~11 GB
~12 GB
~11 GB
110 usable
REAP dialno pruning · 64 experts
Spec decode
Context33K / 33KKV
On the Sparks — 1× · 1-bit GGUF (dynamic) · 33K ctx · FP16 KV~1.6M ctx fits usable
spark
99 GB free
110 usable
11* / 110 GB
10% 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
12 layersMoE FFN
in
out

one MoE layer · 64 experts, 6+2 fire per token

each expert ≈ 3M params

resident: 11 MoE layers × 64 experts × 3M 2.4B

active/token: 11 × 6 × 3M 227M experts

+ 914M always-on dense (attention, embeddings, shared stack) = 1.1B active

Optimize
Verdict

3B params, ~7 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 ~119.6 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.

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.