Ttimms's picture
Document shard layout, serving kernel, and add fp4/4-bit tags
0c556f6 verified
|
Raw
History Blame Contribute Delete
9.18 kB
---
base_model:
- Kwaipilot/KAT-Coder-V2.5-Dev
base_model_relation: quantized
license: apache-2.0
library_name: transformers
datasets:
- theblackcat102/evol-codealpaca-v1
tags:
- reap
- pruning
- nvfp4
- nvfp4a16
- fp4
- 4-bit
- compressed-tensors
- quantization
- vllm
- blackwell
- moe
- agentic-coding
- swe-bench
pipeline_tag: text-generation
---
# KAT-Coder-V2.5-Dev REAP-50 NVFP4A16 (16 GB)
**REAP expert-pruned (50%) + NVFP4A16 quantized build of `Kwaipilot/KAT-Coder-V2.5-Dev`
(69.40 SWE-bench Verified claimed), sized and served to run as a local agentic
coding model inside 16 GB of consumer VRAM** — 12.45 GiB, RTX 5070 Ti (SM120),
vLLM. Built with a router-renormalization fix for this architecture (contributed
upstream) and a vision tower stripped of its untrained weights.
**SWE-bench Verified: 20/50 = 40.0% resolved**, via `mini-swe-agent`'s official
bash-only scaffold — below the 56.4% bar set by Devstral Small (2512) under the
same scaffold. 27 of 50 instances produced no usable patch; 18 of those hit the
32K context ceiling this card's VRAM budget imposes, and the run must be read
as context/step-limited, not as an unconditional capability measurement. See
"SWE-bench Verified" below before citing the headline number without that
context.
## Highlights
| Result | Detail |
|---|---|
| **12.45 GiB** | REAP 50% expert pruning + NVFP4A16 (weight-only, data-free), vision tower stripped |
| **149.5 tok/s** median, n=5 | Benchmark config: 512 in / 256 out, batch 1, CUDA graphs (FULL_AND_PIECEWISE), 14,672-token context ceiling |
| **89.0% / 90.5%** | HumanEval+ [83.3, 92.9] / MBPP+ [87.1, 93.0], greedy, instruct framing |
| **40.0%** (20/50) | SWE-bench Verified, `mini-swe-agent` bash-only — see caveats below |
| **28.9 s load** | CUDA graphs enabled, no CPU offload |
## Why 50 percent
Forced by arithmetic on a 16 GB card, not a tuning choice:
| variant | size | fits 16 GB |
|---|---:|:---:|
| bf16 base | 69.3 GB | no |
| NVFP4, unpruned | 21.9 GB | no |
| REAP 25% + NVFP4 | ~16–17 GB | no — not once KV cache is counted |
| **REAP 50% + NVFP4** | **12.45 GiB** | **yes** |
Supporting evidence: [Half the Experts, All the Code](https://arxiv.org/html/2607.16721)
pruned Qwen3.6-35B-A3B, this model's own base, at 50% with no statistically
detectable loss on its primary code benchmark.
## SWE-bench Verified — read before citing the 40.0% figure alone
| metric | value |
|---|---:|
| resolved | **20/50 = 40.0%** |
| resolved of completed (valid patch produced) | 20/22 = **90.9%** |
| ContextWindowExceeded | 18 (32K ceiling) |
| LimitsExceeded | 9 |
| garbage/invalid patch | 1 of 23 generated |
The scaffold is capped at a 32K-token context window — the safe ceiling this
card's VRAM budget supports, not a property of the model. Devstral Small
averages 86.9 LM calls/instance under the same scaffold; many KAT-Coder
instances hit the context limit before finishing. **90.9% of instances where
the model actually produced a patch had that patch resolve the issue** — most
of the gap to the 56.4% competitive bar is instances that never got to submit
a patch at all, not patches that were wrong. This is disclosed as a real
result, not an excuse: the 40.0% headline number is the correct number to
cite; the breakdown above is the correct context for interpreting it.
## Prior art and scope of claims
Verified against the Hugging Face Hub on 2026-08-17:
- REAP combined with NVFP4 on `qwen3_5_moe` already exists
([`rene98c/Qwen3.5-397B-A17B-REAP-28-NVFP4`](https://huggingface.co/rene98c/Qwen3.5-397B-A17B-REAP-28-NVFP4),
March 2026, 23.1K downloads).
- REAP on this specific model exists as GGUF
([`gbuzhf/KAT-Coder-V2.5-Dev-REAP-205E-MTP-GGUF`](https://huggingface.co/gbuzhf/KAT-Coder-V2.5-Dev-REAP-205E-MTP-GGUF)).
What is distinct, and all that is claimed: a **vLLM-servable KAT-Coder that is
genuinely usable in 16 GB**, with published SWE-bench Verified, HumanEval+, and
MBPP+ numbers and their confidence intervals — none of which the prior art
above publishes.
## Quantization and pruning details
| Field | Value |
|---|---|
| Base model | `Kwaipilot/KAT-Coder-V2.5-Dev` |
| Pruning | REAP, expert-level, 50% compression ratio, seed 42 |
| Pruning calibration | `theblackcat102/evol-codealpaca-v1`, 64 batches/category, 2048 max length |
| Router renormalization | Fixed (was silently disabled by the upstream REAP adapter for this architecture; committed for upstreaming) |
| Quantization method | compressed-tensors / llm-compressor, `QuantizationModifier` (PTQ) |
| Quantization scheme | NVFP4A16 — weight-only, data-free, 82 s |
| Quantization calibration | `evol-codealpaca` (deliberately not the Magicoder set used for evaluation) |
| Ignored / kept unquantized | `lm_head`, routers, shared expert gates, embeddings, DeltaNet conv1d + linear-attention projections, MTP module |
| Vision tower | Removed. The base model declares one and ships no weights for it; this checkpoint contains neither the declaration nor the 333 untrained tensors (0.83 GiB) transformers would otherwise materialise. |
| Files | 3 safetensors shards of ~5 GiB plus `model.safetensors.index.json`, matching the base model's layout, so an interrupted download resumes at shard granularity |
| Built on | RTX 5070 Ti, 16 GB VRAM, SM120 (compute capability 12.0) |
| Serving kernel | vLLM selects `MarlinNvFp4LinearKernel` on this card: 4-bit weights are decoded and the GEMM runs in bf16. NVFP4A16 is weight-only, so no FP4 arithmetic is required. A native FP4 path for SM120 exists via FlashInfer CuTeDSL but is not used here and is unmeasured. |
## Usage
Requires vLLM with SM120 support (CUDA graphs are correct on this card for
this model, despite past reports of SM120 CUDA-graph issues on other
architectures) and native tool calling for agentic use:
```bash
vllm serve Ttimms/KAT-Coder-V2.5-Dev-REAP-50-NVFP4A16 \
--served-model-name kat-16gb \
--max-model-len 32768 --max-num-seqs 8 \
--gpu-memory-utilization 0.92 --kv-cache-dtype fp8 \
--reasoning-parser qwen3 \
--enable-auto-tool-choice --tool-call-parser qwen3_xml \
--enable-prefix-caching --max-num-batched-tokens 4096 \
--compilation-config '{"cudagraph_capture_sizes":[1,2],"cudagraph_mode":"PIECEWISE"}' \
--language-model-only
```
`--language-model-only` is required: the model declares a vision tower it has
no trained weights for, and without this flag vLLM profiles a 16K-token image
budget through it. `--enable-prefix-caching` is the single largest agentic
lever measured on this model — 45x on replayed history (0.21 s vs 30.74 s for
a 13,130-token history). Never set `--max-model-len` near a measured ceiling:
available KV cache swings 0.49–1.41 GiB with host desktop VRAM use, and higher
values fail intermittently rather than at startup.
## Evaluation
HumanEval+ and MBPP+ via lm-eval-harness / EvalPlus, greedy decoding, instruct
framing, Wilson confidence intervals:
| benchmark | score | 95% CI | n |
|---|---:|---:|---:|
| HumanEval+ | 89.0% | [83.3, 92.9] | 164 |
| MBPP+ | 90.5% | [87.1, 93.0] | 378 |
`KAT-Coder-V2.5-Dev` publishes no HumanEval/MBPP/EvalPlus numbers, so there is
no published upstream figure to compare these against.
Both figures were re-measured on the released checkpoint itself and reproduced
inside their intervals: HumanEval+ 90.9% [85.5, 94.4] and MBPP+ 89.9%
[86.5, 92.6], same problem counts, same greedy decoding. The table reports the
original measurement. The two differences run in opposite directions
(+1.9 pp and -0.6 pp), which is greedy-decoding nondeterminism under vLLM's
batching rather than a difference in weights. Reproduce with
`bash scripts/eval/eval_suite.sh`.
SWE-bench Verified via the official `swebench.harness.run_evaluation` harness
against `mini-swe-agent` bash-only rollouts (scaffold: SWE-bench/experiments
v1.17.2 configuration) — see the dedicated section above for the full
breakdown and required caveats.
## Known limitations
- **32K context window** is a hardware-forced ceiling, not a design choice —
this card's KV-cache budget cannot safely support more. SWE-bench results
must be read as context/step-limited.
- **No pruning-ablation baseline measured.** The unpruned model is 69.3 GB
bf16 and does not fit this hardware; the accuracy cost of pruning itself
(independent of quantization) is not isolated here.
- SWE-bench Verified no longer accepts leaderboard submissions outside
academia — these numbers are self-reported and independently reproducible
from the released evaluation scripts, not a leaderboard entry.
## License
Apache 2.0, inherited from the base model `Kwaipilot/KAT-Coder-V2.5-Dev` and
matching the `reap` and `llm-compressor` toolchains used to build this checkpoint.
## Citation
This checkpoint is derived from `Kwaipilot/KAT-Coder-V2.5-Dev`. If you use it,
please cite the upstream technical report:
```bibtex
@misc{katcoder_v25_2026,
title={{KAT-Coder-V2.5 Technical Report}},
author={{KwaiKAT Team}},
year={2026},
month={July},
eprint={2607.05471},
archivePrefix={arXiv},
primaryClass={cs.AI},
url={https://arxiv.org/pdf/2607.05471}
}
```