howtospark
models / Qwen/Qwen3.5-4B

Qwen/Qwen3.5-4B
4.7B paramsbfloat16GQA 16:4262K ctxmultimodalapache-2.0
Sparks
~22 GB
~19 GB
~17 GB
~15 GB
~14 GB
110 usable
Spec decode
Context33K / 262KKV
On the Sparks — 1× · 1-bit GGUF (dynamic) · 33K ctx · FP16 KV~768K ctx fits usable
spark
96 GB free
110 usable
14* / 110 GB
12% of usable
Dense 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
32 layerslinear attention×24full attention×8
in
out
all 32 layers fire per token — 4.7B active
Optimize
Quantized from

Qwen/Qwen3.5-4B-Base

Analyze the original repo for the full architecture picture.

Verdict

5B params, ~9 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 ~29.3 tok/s ceiling; a trained EAGLE-style draft multiplies tokens per weight-read.

Tame the KV cache

At 262144 tokens the KV cache alone is ~34 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.

Qwen/Qwen3.5-4B — How to Spark · How To Spark