Kimi-K3-pruned75
This is a calibration-free, safetensors-only expert-pruned checkpoint derived
from
moonshotai/Kimi-K3. It
removes 75% of the routed experts and is intended for vLLM serving and
evaluation smoke tests while accurate calibration-based pruning, such as
REAP support in llm-compressor,
is under development.
This is an experimental prototype, not a REAP-pruned checkpoint. Expect a
large quality regression relative to the source model.
Pruning
- Source experts per MoE layer: 896
- Retained experts per MoE layer: 224 (25% retained, 75% removed)
- MoE layers: 92
- Ranking: descending signed
sum(router.weight[i]), independently per layer
- Removed data: pruned expert tensors and their corresponding router rows
- Router and expert indices were compacted, and the config was updated to 224
experts
- Calibration data: none
- Retained expert count is divisible by TP=4 (56 experts per rank)
- Tensor payload: 475,131,719,168 bytes (442.50 GiB)
- Indexed weights: 126,276 across 96 safetensors shards
pruning_manifest.json records the source hashes, exact per-layer expert
remap, pruning method, and output statistics. The checkpoint was validated
against every shard keyset and payload size, router and bias permutation,
sampled expert tensors in all layers, and auxiliary-file hashes. Each retained
224-expert set is the exact prefix of the corresponding ranking used for
mgoin/Kimi-K3-pruned50.
Validated vLLM run
The checkpoint loaded and served successfully with the default vLLM loader
(no --load-format) on one node with four NVIDIA GB300 GPUs:
- vLLM:
0.26.1rc1.dev142+g30b4e7f47
- vLLM commit:
30b4e7f479674a9c4d8889d4857294d3bd5e6849
- FlashInfer:
0.6.16rc5
- Hardware: 4x NVIDIA GB300, 284208 MiB each
- Parallelism: TP=4 on one node
- Weight load time: 210.80 seconds
- Model memory: 119.06 GiB per GPU
- Available KV cache: 132.14 GiB per GPU
- KV-cache capacity: 7,615,283 tokens
- Steady GPU allocation: approximately 262.90 GiB per GPU
1vllm serve mgoin/Kimi-K3-pruned75 \
2 --served-model-name kimi-k3-pruned-75pct \
3 --host 0.0.0.0 \
4 --port 18082 \
5 --tensor-parallel-size 4 \
6 --trust-remote-code \
7 --moe-backend auto \
8 --gpu-memory-utilization 0.95 \
9 --max-model-len 32768 \
10 --kv-cache-dtype fp8 \
11 --attention-backend FLASHINFER_MLA \
12 --attention-config '{"mla_prefill_backend":"FLASHINFER","use_prefill_query_quantization":true}' \
13 --enable-prefix-caching \
14 --no-enable-flashinfer-autotune \
15 --max-num-seqs 8 \
16 --max-num-batched-tokens 8192 \
17 --max-cudagraph-capture-size 8
The health endpoint returned HTTP 200 and an arithmetic smoke test passed.
Kimi K3 latent-MoE tail fusion reported that TP=4 is unsupported and
automatically used the default path; serving remained healthy.
GSM8K
The evaluation used vLLM's standalone GSM8K harness against the
/v1/completions endpoint with the full test split:
1.venv/bin/python tests/evals/gsm8k/gsm8k_eval.py \
2 --host http://${HEAD_NODE} \
3 --port 18082 \
4 --num-questions 1319 \
5 --num-shots 5 \
6 --max-tokens 256 \
7 --temperature 0 \
8 --seed 42
| Checkpoint | Accuracy | Correct | Invalid | Latency | Questions/s |
|---|
| Kimi-K3-pruned75 | 34.4200% | 454/1319 | 4/1319 | 536.326 s | 2.459 |
| Kimi-K3-pruned50 | 68.2335% | 900/1319 | 3/1319 | 481.863 s | 2.737 |
| Source Kimi-K3 | 95.5269% | 1260/1319 | 1/1319 | 530.362 s | 2.487 |
The pruned75 checkpoint regressed by 61.1069 percentage points relative to
the source model and 33.8135 points relative to pruned50. All runs used the
same 1,319-question test set, 5-shot prompt builder, 256-token limit,
temperature, seed, vLLM checkout, and GB300 hardware.
License
This derivative is distributed under the upstream
Kimi K3 License.
See
LICENSE in this repository.