CoolFace
Modelpublic

ThakiCloud/Qwen3-Coder-30B-A3B-Prune3-W4A16

sourceHugging Faceapache-2.0updated 20d agoView on Hugging Face
0likes336downloads
Model Card

Qwen3-Coder-30B-A3B-Prune3-W4A16

3.1% expert pruning (124 of 128 experts kept per layer) plus W4A16 quantization of Qwen3-Coder-30B-A3B-Instruct. 61.1 GB → 16.2 GB (3.76×), with no detectable loss on HumanEval.

Its sibling Qwen3-Coder-30B-A3B-W4A16 is the same recipe with no pruning, at 16.69 GB. The 3.1% prune buys 0.46 GB — about 2.8% — on top of what quantization already gave. We are publishing both so that number is visible, because the interesting part of this release is not either checkpoint. It is where the pruning stops being free.

Measured results

Single B200, vLLM, lm-eval, 150 questions per task, humaneval_instruct via local-chat-completions with --gen_kwargs continue_final_message=True,add_generation_prompt=False.

modelsizeHumanEvalIFEval (prompt strict)GSM8K (strict)
base bf1661.1 GB0.9267——
W4A16, no pruning16.69 GB0.9400——
this model (3.1% pruned + W4A16)16.2 GB0.94670.840.8867

stderr is roughly 2 points at 150 questions, so 0.9467 is not better than the 0.9267 base — it is no detectable loss. GSM8K sits slightly low (0.8867 against a base in the 0.93–0.94 range); it is within or near noise but consistently on the low side, and we report it rather than drop it.

The cliff — why 3.1% and not more

Expert pruning on this model degrades as a steep slope, not a gentle curve. Swept in bf16 with no quantization involved, so the numbers isolate pruning alone:

experts removedHumanEval pass@1
0% (base)0.9267
3.1% (this model)0.9400
6.25%0.7733
7.8%0.7000
8.6%0.4467
10.16%0.3667

The sharpest segment is between 7.8% and 8.6%: 0.8 percentage points more pruning costs 25 points of pass@1. Below about 6% the loss is modest; past about 8.6% it is catastrophic. 3.1% is the operating point that survives it.

An earlier internal checkpoint at 10.16% scored 0.28 on HumanEval — and its IFEval (0.79) and GSM8K (0.93) looked fine. Instruction-following and grade-school math apparently route through a redundant subset of experts; code generation does not. If you prune a MoE and only watch general benchmarks, this failure is invisible.

What this costs you: throughput

Nothing, relative to the unpruned 4-bit sibling — and that is the point. Single B200, vLLM, random dataset, input 512 / output 256, --ignore-eos:

concurrencythis model6.25%-prunedFP8 baseline (29 GB)
1206.97 tok/s206.99 tok/s284.66 tok/s
101346.8 tok/s1368.17 tok/s1704.2 tok/s
504169.99 tok/s4401.59 tok/s5974.8 tok/s
Size note (added 2026-08-14). The FP8 baseline is recorded here as 29 GB from the 2026-08-06 run. The FP8 checkpoint currently in our registry measures 31.20 GB on disk. We have not confirmed the two are the same build, so both figures are left standing rather than one being quietly overwritten. Treat the FP8 size as approximate; the throughput ratios were measured against whichever build ran that day.

Two readings. First, the two prune ratios are throughput-identical, so pruning itself contributes essentially nothing to serving speed — what costs speed is the W4A16 format, whose 4-bit weights are dequantized at compute time while FP8 has native Blackwell tensor-core support. Second, FP8 leads by 1.27×–1.43× at every concurrency measured and holds better tail latency at concurrency 50 (322 ms vs 475 ms p99).

This is a capacity tool, not a throughput tool. Use it to fit a 61 GB model onto smaller or fewer GPUs. If it already fits and you want speed, use FP8, unless your hardware is Blackwell, in which case read on.

Speed versus NVFP4: this question is now answered

Earlier versions of this card said we had not tuned the W4A16 serving path and that an optimized kernel might narrow the gap to FP8. That hedge is now resolved, and not in W4A16's favor. A four-way comparison of bf16, FP8, W4A16, and NVFP4 — all on the same base model, same single B200, same workload (input 1746 tokens, output 256, vLLM 0.27.1, measured 2026-08-13) — found that the gap to FP8 does not close by tuning the W4A16 serving path. Kernel selection was not the missing piece.

It closes by switching quantization formats. NVFP4 quantizes activations as well as weights and runs directly on the Blackwell FP4 tensor cores, while W4A16 stores 4-bit weights and must dequantize them at compute time before every matmul. That is a structural difference between the two formats, not a tuning gap in this checkpoint or in the pruning applied to it.

concurrencyfp8w4a16 (unpruned, same format as this checkpoint)nvfp4nvfp4 / fp8
1257.6 tok/s215.9 tok/s303.3 tok/s1.18x
323978.8 tok/s3013.3 tok/s5099.2 tok/s1.28x
1288130.3 tok/s5427.7 tok/s9941.8 tok/s1.22x
5126302.0 tok/s4103.3 tok/s6925.4 tok/s1.10x

The four-way ledger was run against the unpruned W4A16 checkpoint, not this pruned one, but as noted above the two are throughput-identical in our measurements — pruning at this level does not move serving speed, only the quantization format does. NVFP4 beats FP8 at every concurrency measured in the full sweep (1.07x to 1.32x) and beats W4A16 by 1.40x to 1.83x. The full sweep, tokens-per-joule numbers, and a HumanEval comparison across all four formats are on the NVFP4 sibling card: Qwen3-Coder-30B-A3B-NVFP4.

That does not make this checkpoint obsolete. This pruned-and-quantized checkpoint still wins on two things NVFP4 does not touch: it is the smallest of the family (16.2 GB against NVFP4's 18.11 GB), and it runs on Hopper (H200, H100), where NVFP4 has no native tensor-core path and falls back to Marlin emulation, measured at 0.85x of the equivalent FP8 throughput on that hardware. If you need the smallest possible footprint, or your target is Hopper and NVFP4 is therefore not an option, this is the format to use. It is not a speed recommendation: see the Hopper note below. If your target is Blackwell and you want speed as well as a smaller footprint than bf16 or FP8, use the NVFP4 sibling instead.

On Hopper it is still a memory play (added 2026-08-15)

We had inferred the Hopper case rather than measured it. It is measured now, on a single H200 NVL with the unpruned sibling of this checkpoint (input 1746 / output 256, vLLM 0.27.1), and 4-bit weight-only storage loses to FP8 at every concurrency there too:

concurrencyFP8W4A16W4A16 / FP8
322986.3 tok/s2521.9 tok/s0.84x
644441.2 tok/s3616.6 tok/s0.81x
1285596.7 tok/s4648.3 tok/s0.83x

The picture is therefore consistent across both GPU generations: this format buys memory, never throughput. On Blackwell the penalty is worse and grows with load (0.76x falling to 0.67x across the same band), because the faster the low-precision tensor cores are, the further a dequantize-before-you-compute path falls behind.

Measured on the unpruned sibling; pruning is orthogonal to the format's kernel path and we did not re-sweep this checkpoint separately. Ledger: 2026-08-15-per-hardware-quant-matrix.json.

Caveats

  • —One model family, one code benchmark, 150 questions per task (stderr ~1.8–4 pp).
  • —The FP8 baseline is 29 GB against 16.2 GB — a speed comparison, not an equal-memory one.
  • —No attempt was made to tune the W4A16 serving path (e.g. Marlin kernel selection); an optimized 4-bit kernel could narrow the gap.
  • —Router-KD recovery was tested and found inapplicable to removed-expert damage, so there is no recovery step in this recipe.

Provenance

Pruned and quantized by ThakiCloud with llm-compressor. Base model Qwen/Qwen3-Coder-30B-A3B-Instruct is Apache-2.0 and not gated; this derivative inherits that license. Prune budget and quantization recipe are in recipe.yaml.