Model datasheet · MiniCPM5
MiniCPM5 2B
The smallest model here that is not a compromise: 1.6GB at Q4_K_M, and OpenBMB's table puts it ahead of every 2B-class rival and level with several 4B ones on coding, math and tool use. A plain Llama-shaped dense transformer, so every runtime already handles it. The gap it cannot close is stored knowledge — 2.5B parameters hold what 2.5B parameters hold.
- Vendor
- OpenBMB
- Architecture
- Dense · 2.5B
- Context
- 131,072 tokens
- License
- Apache-2.0
- Released
- 2026-09-05
- Vision
- No
→ GGUF (llama.cpp / LM Studio / Ollama) → MLX (Apple Silicon)
Architecture, from its own config.json
42 layers · 42 full attention
16 attention heads over 2 KV heads (GQA 8:1), head dim 128 · dense feed-forward · vocabulary 130,560
Where the memory goes: weights by band above, plus a KV cache of 336MB at 8K · 1.3GB at 32K · 5.3GB at 128K, plus the runtime's own working memory — dominated by the output projection over that vocabulary.
Inside one layer, from its own tensors
42 × full-attention layer
The green line down the right of each half is the residual: it leaves the spine above the norm, skips the operation entirely and rejoins at the +. Where attention is drawn open, q, k and v are scaled to their real output widths — a model that shares key and value heads across many query heads shows one wide box beside two narrow ones.
Around the stack: an embedding of 130,560 × 2,048, a final norm, and a separate output projection.
On the norm names: despite what it is called, post_attention_layernorm is drawn after the residual add here, which is where this family applies it — it normalises the input to the feed-forward, not the output of attention. Models that carry a separate pre_feedforward_layernorm use it the other way, and are drawn that way.
§1 Characteristics by quantization band
data checked Sep 2026
- quant-degradation-community — editorial band derivation @ Q3_K_M · aggregated · 2026-09-12
Editorial derivation: two points down, and only 0.3GB smaller than Q4_K_M — a bad trade at this size.
data checked Sep 2026
- quant-degradation-community — editorial band derivation @ Q3_K_M · aggregated · 2026-09-12
Editorial derivation: two points down.
data checked Sep 2026
- quant-degradation-community — editorial band derivation @ Q3_K_M · aggregated · 2026-09-12
Editorial derivation: two points down; structured output degrades fastest of all at 3-bit on a small dense model.
Q4–Q5 — 4–5 bit
1.6GB weights · e.g. Q4_K_M , mlx-4bit + KV: 336MB at 8K · 1.3GB at 32K · 5.3GB at 128Kdata checked Sep 2026
- quant-degradation-community — editorial band derivation @ Q4_K_M · aggregated · 2026-09-12
Editorial derivation: one point down. Small dense models have the least redundancy to spend, and math goes first.
data checked Sep 2026
- quant-degradation-community — editorial band derivation @ Q4_K_M · aggregated · 2026-09-12
Editorial derivation: one point down.
data checked Sep 2026
- quant-degradation-community — editorial band derivation @ Q4_K_M · aggregated · 2026-09-12
Editorial derivation: one point down.
data checked Sep 2026
- quant-degradation-community — editorial band derivation @ Q4_K_M · aggregated · 2026-09-12
Editorial derivation: carried.
data checked Sep 2026
- quant-degradation-community — editorial band derivation @ Q4_K_M · aggregated · 2026-09-12
Editorial derivation: carried; format compliance survives 4-bit better than arithmetic does.
Q6–Q8 — 6–8 bit
2.7GB weights · e.g. Q8_0 , mlx-8bit + KV: 336MB at 8K · 1.3GB at 32K · 5.3GB at 128Kdata checked Sep 2026
- quant-degradation-community — editorial band derivation @ Q8_0 · aggregated · 2026-09-12
Editorial derivation: carried from full precision. At 2.7GB this is the band to run if you have 8GB.
data checked Sep 2026
- quant-degradation-community — editorial band derivation @ Q8_0 · aggregated · 2026-09-12
Editorial derivation: carried from full precision.
data checked Sep 2026
- quant-degradation-community — editorial band derivation @ Q8_0 · aggregated · 2026-09-12
Editorial derivation: carried from full precision.
data checked Sep 2026
- quant-degradation-community — editorial band derivation @ Q8_0 · aggregated · 2026-09-12
Editorial derivation: carried; long context is not quant-sensitive here, but the cache is: 42 full-attention layers cost 43KB per token, so 128K of context is 5.5GB — more than three times the weights.
data checked Sep 2026
- quant-degradation-community — editorial band derivation @ Q8_0 · aggregated · 2026-09-12
Editorial derivation: carried from full precision.
FP16 — full precision (fp16/bf16)
5GB weights · e.g. fp16 + KV: 336MB at 8K · 1.3GB at 32K · 5.3GB at 128Kdata checked Sep 2026
- vendor-model-card — AIME 2026 = 86.5 @ bf16 · vendor-reported · 2026-09-12
Vendor-reported, thinking mode. The 4B-class models in OpenBMB's own comparison set post 82.7 (Qwen3.5-4B) and 45.0 (Gemma-4-E4B); this is the strongest math result per gigabyte on this site.
- vendor-model-card — MATH-500 = 94.6 @ bf16 · vendor-reported · 2026-09-12
Secondary math check on the same table.
data checked Sep 2026
- vendor-model-card — LiveCodeBench v6 = 69.1 @ bf16 · vendor-reported · 2026-09-12
Ahead of every 2B and 4B model in OpenBMB's comparison set.
- vendor-model-card — SWE-bench Verified = 46.4 @ bf16 · vendor-reported · 2026-09-12
Agentic repository work. Held below the 27B-class models here — granite-4.2-30b posts 57.0 and scores 6 — but extraordinary for 2.5B parameters.
data checked Sep 2026
- vendor-model-card — BFCL v4 = 66.6 @ bf16 · vendor-reported · 2026-09-12
Function calling, vendor-reported. Comparable to Phi-4-mini's 70.3 on the older BFCL.
- vendor-model-card — τ²-Bench Telecom = 97.1 @ bf16 · vendor-reported · 2026-09-12
Multi-turn tool use in one narrow domain; the banking variant on the same table is 20.8, so read this as a ceiling rather than a typical result.
data checked Sep 2026
- vendor-model-card — IFBench = 66.3 @ bf16 · vendor-reported · 2026-09-12
Vendor-reported.
- vendor-model-card — Multi-IF = 71.8 @ bf16 · vendor-reported · 2026-09-12
Multi-turn instruction following on the same table.
data checked Sep 2026
- vendor-model-card — NoLiMa = 68.1 @ bf16 · vendor-reported · 2026-09-12
Long-context retrieval without lexical overlap — the hard version. Every other model in OpenBMB's comparison set scores under 44, several under 6.
- vendor-model-card — LongBench v2 = 43.7 @ bf16 · vendor-reported · 2026-09-12
Second long-context check on the same table.
data checked Sep 2026
- vendor-model-card — MMLU-Redux = 84.7 @ bf16 · vendor-reported · 2026-09-12
Knowledge proxy only — no hallucination benchmark lists this model. 2.5B parameters is a hard ceiling on stored facts, and MMLU-Pro on the same table is 70.8.
§2 Known issues & what fixes them
Two separate things, and an earlier version of this entry conflated them. llama.cpp needs no MiniCPM5-specific template support: the chat template ships inside the GGUF (a PR adding one, #28595, was closed unmerged on 2026-09-08 by its author for that reason). The XML-flavoured tool calls do need the minicpm5 parser, merged in June. The real defect was in the template itself: a <tool_sep> branch could drop assistant text that followed a tool call (OpenBMB/MiniCPM#379, still open). OpenBMB fixed the template in the original-weights repo on 2026-09-29 (HF discussion #19, opened 2026-09-21). The official GGUF repo was last changed on 2026-09-12, so the template embedded in those files probably predates the fix — inferred from dates, not checked inside the file.
Use a llama.cpp build with the minicpm5 tool-call parser (merged 2026-06-28). For tool use, override the embedded template with the fixed chat_template.jinja from openbmb/MiniCPM5-2B (--chat-template-file) until the GGUFs are re-uploaded.
Evidence · 4 sources · community-consensus
- chat : add the MiniCPM5-2B chat template (closed unmerged 2026-09-08; template ships in the GGUF) (github, 2026-10-04)
- chat : implement minicpm5 parser (merged 2026-06-28) (github, 2026-10-04)
- Remove the dead <tool_sep> branch from chat_template.jinja (merged 2026-09-29) (vendor, 2026-10-04)
- MiniCPM5 chat template may lose text after <tool_sep> due to loop-local assignments (github, 2026-10-04)
Can fall into repetition loops in llama.cpp — one user reported an infinite loop on the official Q8_0 GGUF. OpenBMB's GGUF README (updated 2026-09-12) attributes this to llama.cpp's default min_p=0.05, which can discard exactly the low-probability tokens needed to break out of a loop; other runtimes such as SGLang default to 0.
Set the sampler explicitly, as OpenBMB recommends: temperature 1.0, top_p 0.95, min_p 0.0 (--min-p 0 in llama.cpp). If repetition persists, add repetition_penalty 1.05.
Evidence · 2 sources · community-consensus
- MiniCPM5-2B-GGUF README: recommended sampling, min_p=0.0 note for llama.cpp (vendor, 2026-10-04)
- Infinite loop on official Q8_0 GGUF, with the min_p explanation in reply (other, 2026-10-04)
2.5B parameters cannot hold much world knowledge, and the benchmark suite the vendor publishes is all reasoning and agentic work — no hallucination benchmark lists this model. The scores that make it remarkable are the ones where a tool or a retrieved document does the remembering.
Ground it in retrieved documents. Its long-context scores (NoLiMa 68.1) say it can actually use what you give it, which is the harder half.
Let it look things up rather than recall them.
Evidence · 1 source · anecdotal
- MiniCPM5-2B model card (benchmark table, MMLU-Redux 84.7 / MMLU-Pro 70.8) (vendor, 2026-09-12)
Released 2026-09-05. Every score here is OpenBMB's own, and their table marks several rows as reproduced internally rather than taken from the benchmark's own leaderboard. No independent listing exists yet.
Not a defect — a caveat. Revisit when independent numbers land.
Evidence · 1 source · anecdotal
- MiniCPM5-2B model card (footnote: scores reproduced internally except where marked) (vendor, 2026-09-12)
Q3_K_M saves 0.3GB over Q4_K_M and costs about two points everywhere that matters. A 2.5B dense model has no spare capacity for 3-bit to take: this is the clearest case on the site of a band not worth running.
Run Q4_K_M at 1.6GB, or Q8_0 at 2.7GB. Both fit machines that could hold the 3-bit file, so there is nothing to gain.
If arithmetic is what broke, hand it to a tool — though tool calling is also down at this band, so this helps less than usual.
Evidence · 2 sources · community-consensus
- llama.cpp quantization quality discussions (small-model KLD tables) (github, 2026-09-12)
- MiniCPM5-2B quant sizes: Q3_K_M 1.29GB against Q4_K_M 1.56GB (other, 2026-09-12)