Views
No views yet
moonshotai/Kimi-K2.5, combining paired-4:8 structured sparsity with NVFP4 weight + activation quantization on MoE expert weights — targeting NVIDIA Blackwell sparse tensor cores.Preview status. This is an early checkpoint release for community evaluation. Benchmark numbers below may move before the final release.
Why this release? Most production LLM compression today picks one axis: either pure quantization (NVFP4, FP8, INT4) or pure sparsity (2:4), and rarely both at once on frontier-scale MoE models. This release goes one step further and demonstrates that sparsity + W4A4 quantization is viable on a trillion-parameter MoE, with end-to-end NVFP4×NVFP4 grouped GEMMs via FlashInfer's MoE FP4 kernels. We hope it motivates more open work (i.e., kernels, recipes, and tooling) on combined sparse–quantized compression.
| Field | Value |
|---|---|
| Weight dtype | NVFP4 (E2M1) |
| Weight group size | 16 |
| Weight scale dtype | FP8 E4M3, per-group |
| Weight global scale | FP32, per-tensor |
| Activation dtype | NVFP4 (E2M1), dynamic: "local" |
| Activation group size | 16 |
| Activation group scale dtype | FP8 E4M3, per-group (computed per batch at runtime) |
| Activation global scale | FP32, per-tensor (stored in checkpoint, per expert linear) |
| Sparsity | Paired 4:8 (NVIDIA Blackwell) |
| Quantized + sparsified layers | Non-shared MoE experts (gate_proj, up_proj, down_proj) |
| Uncompressed | lm_head, self_attn.*, shared_experts.*, router, embeddings |
| Format | compressed-tensors (NVFP4PackedCompressor) |
weight_packed, so the sparsity structure is implicit — there is no separate bitmask tensor in the file.weight_packed — FP4 values, full K dimensionweight_scale — FP8 E4M3 per-16 group weight scalesweight_global_scale — FP32 per-tensor weight global scaleinput_global_scale — FP32 per-tensor activation global scalecompressed-tensors NVFP4 support loads it directly. The vLLM flags below cover Kimi-K2.5-specific runtime needs (custom model code, chat-template parsers).1uv pip install -U vllm --torch-backend=auto
2
3VLLM_USE_FLASHINFER_MOE_FP4=1 vllm serve ISTA-DASLab/Kimi-K2.5-P48-NVFP4-W4A4-Preview \
4 --tensor-parallel-size 4 \
5 --mm-encoder-tp-mode data \
6 --trust-remote-code \
7 --tool-call-parser kimi_k2 \
8 --reasoning-parser kimi_k2VLLM_USE_FLASHINFER_MOE_FP4=1 — enables FlashInfer's NVFP4×NVFP4 grouped GEMM path for MoE experts.http://localhost:8000/v1.v0.4.11 against a vLLM 0.21.0 server on 4× B200 with VLLM_USE_FLASHINFER_MOE_FP4=1.| Benchmark | Setup | Base (BF16) | SparseGPT + GPTQ one-shot | Ours | Δ vs base |
|---|---|---|---|---|---|
| ARC-Challenge | acc_norm, 25-shot | 74.23 | 62.54 | 68.43 | −5.80 |
| HellaSwag | acc_norm, 10-shot | 91.86 | 84.90 | 88.70 | −3.16 |
| MMLU | acc, 5-shot | 89.57 | 81.83 | 85.45 | −4.12 |
| TruthfulQA | mc2, 0-shot | 62.54 | 55.83 | 60.33 | −2.21 |
| Winogrande | acc, 5-shot | 82.48 | 79.95 | 83.35 | +0.87 |
| GSM8K | exact_match, 5-shot | 94.39 | 79.98 | 87.79 | −6.60 |
| Average | 82.51 | 74.17 | 79.01 | −3.50 |
compressed-tensors and vLLM loaders out of the box, but leaves two opportunities on the table:ElementE) that CUTLASS / cuSPARSELt sparse-NVFP4 kernels expect. This cuts the on-disk and HBM footprint of the expert weights roughly in half. The paired-4:8 mask is structurally preserved in the current dense FP4 codes, so the conversion can run as an offline post-processing step on top of the released checkpoint.