Tested in this article: Spark-X2.5-1.7B, MiniCPM5-2B, LFM2.5-2.6B, Nanbeige4.2-3B, Spark-X2.5-4B, Ling-3.0-tiny, LFM2.5-8B-A1B, Qwen3.8-9B-Distill Hardware: RTX 6000 Blackwell ยท 96 GB VRAM, 96 GB DDR4 OS: Debian 13 Engine: llama.cpp, vLLM Benchmarks: BFCL v4, MMLU-Pro, IFEval, Arena-Hard, HumanEval+, MBPP+, (+ Pelican)
๐Ÿ“Š Expand Model llama-server Config
  Spark-X2.5-1.7B:
    ttl: 3000
    healthCheckTimeout: 600
    concurrencyLimit: 16
    env:
      - CUDA_VISIBLE_DEVICES=0
    cmd: >
      vllm serve /models/Spark-X2.5/1.7B
      --chat-template /models/Spark-X2.5/1.7B/chat_template.jinja
      --served-model-name Spark-X2.5-1.7B
      --port ${PORT}
      --max-model-len 128000
      --max-num-seqs 16
      --gpu-memory-utilization 0.6
      --enable-prefix-caching
      --trust-remote-code
      --enable-auto-tool-choice
      --tool-call-parser spark25
      --reasoning-parser qwen3
  LFM2.5-2.6B:
    ttl: 300
    cmd: >
      /usr/local/bin/llama-server
      --port ${PORT}
      --model /models/LFM2.5-2.6B/LFM2.5-2.6B-BF16.gguf
      --ctx-size 131072
      -ngl 99
      --main-gpu 0
      --split-mode none
      --fit off
      --flash-attn on
      --temp 0.2 --top-k 80 --repeat-penalty 1.05
      --jinja
      --parallel 1
      --batch-size 4096
      --ubatch-size 2048
  Spark-X2.5-4B:
    ttl: 3000
    healthCheckTimeout: 600
    concurrencyLimit: 16
    env:
      - CUDA_VISIBLE_DEVICES=0
    cmd: >
      vllm serve /models/Spark-X2.5/4B
      --chat-template /models/Spark-X2.5/4B/chat_template.jinja
      --served-model-name Spark-X2.5-4B
      --port ${PORT}
      --max-model-len 128000
      --max-num-seqs 16
      --gpu-memory-utilization 0.6
      --enable-prefix-caching
      --trust-remote-code
      --enable-auto-tool-choice
      --tool-call-parser spark25
      --reasoning-parser qwen3
  MiniCPM5-2B:
    ttl: 300
    cmd: >
      /usr/local/bin/llama-server
      --port ${PORT}
      --model /models/MiniCPM5-2B/MiniCPM5-2B-BF16.gguf
      --ctx-size 131072
      -ngl 99
      --main-gpu 0
      --split-mode none
      --fit off
      --flash-attn on
      --temp 0.9 --top-p 0.95
      --jinja
      --parallel 1
      --batch-size 4096
      --ubatch-size 2048
  Ling-3.0-tiny:
    ttl: 300
    cmd: >
      /usr/local/bin/llama-server
      --port ${PORT}
      --model /models/ling3.0-tiny/Ling-3.0-tiny-bf16.gguf
      --ctx-size 262144
      -ngl 99
      --main-gpu 0
      --split-mode none
      --fit off
      --flash-attn on
      --temp 1.0 --top-p 0.95 --top-k 20
      --jinja
      --parallel 1
      --batch-size 4096
      --ubatch-size 2048
  Nanbeige4.2-3B:
    ttl: 3000
    healthCheckTimeout: 600
    concurrencyLimit: 4
    env:
      - CUDA_VISIBLE_DEVICES=0
    cmd: >
      /usr/local/bin/llama-server
      --model /models/nanbeige4.2-3B/Nanbeige_Nanbeige4.2-3B-bf16.gguf
      --port ${PORT}
      -ngl 99
      --fit off
      --main-gpu 0
      --split-mode none
      --ctx-size 262144
      --parallel 1
      --flash-attn on
      --cache-reuse 256
      --jinja
      --temp 0.6 --top-p 0.95 --top-k 20
      --batch-size 4096
      --ubatch-size 2048
  LFM2.5-8B-A1B:
    ttl: 300
    cmd: >
      /usr/local/bin/llama-server
      --port ${PORT}
      --model /models/LFM2.5-8B-A1B/LFM2.5-8B-A1B-BF16.gguf
      --ctx-size 131072
      -ngl 99
      --main-gpu 0
      --split-mode none
      --fit off
      --flash-attn on
      --temp 0.2 --top-k 80 --repeat-penalty 1.05
      --jinja
      --parallel 1
      --batch-size 4096
      --ubatch-size 2048
  Qwen3.8-9B-Distill:
    ttl: 300
    cmd: >
      /usr/local/bin/llama-server
      --port ${PORT}
      --model /models/qwen3.8-9B-Distill/Qwen3.8-9B-BF16.gguf
      --ctx-size 131072
      -ngl 99
      --main-gpu 0
      --split-mode none
      --fit off
      --flash-attn on
      --temp 0.6 --top-p 0.95 --top-k 20
      --jinja
      --parallel 1
      --batch-size 4096
      --ubatch-size 2048

Intro

I’ve recently started looking into the best options for a simple task model I could run on my secondary GPU (along with an embedding model and some TTS). I basically hadn’t considered models smaller than 27b since Gemma4-12b dropped. I found it lackluster in tool calling and sys prompt adherence in my harness and ended up scrapping it. I heard good things about Spark X2.5 4B, so I figured I should check in on the state of small models. Maybe some of the recently released models could suffice for title generation, media recommendations, document editing, calorie tracking, light chat, and any other tiny fast tasks.

The models I found with some good anecdotal buzz were Spark-X2.5-1.7B, MiniCPM5-2B, LFM2.5-2.6B, Nanbeige4.2-3B, Spark-X2.5-4B, Ling-3.0-tiny, and LFM2.5-8B-A1B. I also added the quirky Qwen3.8-9B that is actually Qwen3.5-9B distilled from Qwen3.8 2.4T A95B. It is a lot bigger than the others but seemed like a novel, worthwhile addition. I pulled BF16 GGUFs for each to load in Llama.cpp for some benchmarks. The only exception was Spark-X2.5, that wasn’t in Llama.cpp main at the time of benchmarking so I ran that in vLLM. I didn’t bother with quantization on the models or KV cache. They were all small enough to fit in VRAM and I figured I would isolate my top 3 before determining the best quant.

Speed

Model speed isn’t super important at this size. Every model will prefill faster than any task requires, and decode speed is in 100-300tok/s range. Regardless I figured I should take a look:

ModelDecode (tok/s)Prefill (tok/s)
Spark-X2.5-1.7B (1.7B)~295~75k
MiniCPM5-2B (2B)~260~31k
LFM2.5-2.6B (2.6B)~231~36k
Nanbeige4.2-3B (3B)~103~12k
Spark-X2.5-4B (4B)~148~35k
Ling-3.0-tiny (7.9B MoE, 1.3B active)~285~8.7k
LFM2.5-8B-A1B (8B MoE, 1B active)~303~26k
Qwen3.8-9B-Distill (9B)~90~12k
๐Ÿ“Š Speed Test Config
vllm bench serve \
  --backend openai \
  --base-url http://127.0.0.1:8500 \
  --endpoint /v1/completions \
  --model {model} \
  --tokenizer {tokenizer} \
  --trust-remote-code \
  --dataset-name random \
  --random-input-len 8192 \
  --random-output-len 128 \
  --random-prefix-len 0 \
  --num-prompts 20 \
  --max-concurrency 1 \
  --ignore-eos \
  --percentile-metrics ttft,tpot,itl

The Spark-X2.5 models once again were on vLLM, so their numbers arent perfectly comparable to the others. Taken with a grain of salt, speed standouts with the upcoming results in consideration were Spark-X2.5-4B with its great prefill and Ling-3.0-tiny with its great decode.

Traditional Benchmarks

note these are not comparable to leaderboards - different sample size, different Arena Hard judge.

BFCL v4 - Tool Calling

Details: 50 samples, 6 test subsets โ†’ 300 samples total

BFCL v4 โ€” Overall Accuracy

๐Ÿ“Š Expand Data Tables

Overall Accuracy

ModelScoreSamplesLatency (s)
Spark-X2.5-1.7B (1.7B)61.0%3005.09
MiniCPM5-2B (2B)81.0%3004.99
LFM2.5-2.6B (2.6B)80.3%3001.93
Nanbeige4.2-3B (3B)83.0%3003.78
Spark-X2.5-4B (4B)82.3%3004.68
Ling-3.0-tiny (7.9B MoE, 1.3B active)77.7%3002.42
LFM2.5-8B-A1B (8B MoE, 1B active)83.7%3002.89
Qwen3.8-9B-Distill (9B)83.0%3002.65

By Subset

BFCL v4 โ€” By Subset

SubsetSpark-X2.5-1.7BMiniCPM5-2BLFM2.5-2.6BNanbeige4.2-3BSpark-X2.5-4BLing-3.0-tinyLFM2.5-8B-A1BQwen3.8-9B-Distill
Simple Python58.0%96.0%96.0%96.0%96.0%94.0%96.0%96.0%
Multiple84.0%98.0%94.0%88.0%90.0%92.0%94.0%96.0%
Parallel64.0%88.0%82.0%90.0%90.0%88.0%86.0%86.0%
Multi-Turn Base24.0%48.0%50.0%70.0%58.0%44.0%50.0%56.0%
Live Multiple50.0%76.0%82.0%78.0%74.0%74.0%86.0%86.0%
Irrelevance86.0%80.0%78.0%76.0%86.0%74.0%90.0%78.0%

IFEval - Instruction-Following

Details: 250 samples

IFEval โ€” Instruction Following

๐Ÿ“Š Expand Data Tables
ModelPrompt-level (strict)Instruction-level (strict)Prompt-level (loose)Instruction-level (loose)Samples
Spark-X2.5-1.7B (1.7B)71.6%82.1%75.2%84.5%250
MiniCPM5-2B (2B)86.0%90.3%88.0%92.2%250
LFM2.5-2.6B (2.6B)93.2%95.5%94.0%96.1%250
Nanbeige4.2-3B (3B)78.0%83.6%82.4%87.1%250
Spark-X2.5-4B (4B)75.2%83.9%78.8%86.3%250
Ling-3.0-tiny (7.9B MoE, 1.3B active)75.6%84.8%76.4%85.3%250
LFM2.5-8B-A1B (8B MoE, 1B active)90.8%94.1%91.6%94.7%250
Qwen3.8-9B-Distill (9B)84.4%89.1%86.4%90.4%250

MMLU-Pro - Reasoning

Details: 30 samples, 14 categories โ†’ 420 samples total

MMLU-Pro โ€” Overall Accuracy

๐Ÿ“Š Expand Data Tables

Overall Scores

ModelScoreSamplesLatency (s)
Spark-X2.5-1.7B (1.7B)47.4%42011.50
MiniCPM5-2B (2B)58.8%4204.86
LFM2.5-2.6B (2.6B)61.2%42013.67
Nanbeige4.2-3B (3B)69.8%4209.70
Spark-X2.5-4B (4B)64.8%42010.56
Ling-3.0-tiny (7.9B MoE, 1.3B active)55.7%42021.25
LFM2.5-8B-A1B (8B MoE, 1B active)60.2%42010.35
Qwen3.8-9B-Distill (9B)71.4%4209.66

By Category

MMLU-Pro โ€” By Category

CategorySpark-X2.5-1.7BMiniCPM5-2BLFM2.5-2.6BNanbeige4.2-3BSpark-X2.5-4BLing-3.0-tinyLFM2.5-8B-A1BQwen3.8-9B-Distill
Computer Science70.0%76.7%76.7%86.7%83.3%56.7%70.0%80.0%
Math70.0%80.0%90.0%80.0%90.0%80.0%80.0%96.7%
Chemistry73.3%80.0%80.0%80.0%86.7%70.0%80.0%90.0%
Engineering40.0%66.7%60.0%70.0%70.0%46.7%50.0%86.7%
Law36.7%26.7%23.3%43.3%33.3%26.7%20.0%43.3%
Biology60.0%76.7%83.3%83.3%86.7%76.7%83.3%90.0%
Health33.3%50.0%56.7%60.0%50.0%60.0%60.0%73.3%
Physics50.0%73.3%80.0%90.0%86.7%70.0%83.3%83.3%
Business56.7%63.3%76.7%66.7%70.0%66.7%60.0%76.7%
Philosophy30.0%53.3%50.0%60.0%50.0%33.3%40.0%50.0%
Economics43.3%46.7%50.0%73.3%73.3%56.7%60.0%76.7%
Other33.3%30.0%33.3%56.7%46.7%43.3%40.0%46.7%
Psychology43.3%53.3%50.0%76.7%46.7%60.0%66.7%66.7%
History23.3%46.7%46.7%50.0%33.3%33.3%50.0%40.0%

Arena-Hard - Reasoning

Details: 75 samples, run with --repeat-penalty 1.1 --min-p 0.05, judged by Deepseek V4 Flash 0731

Arena-Hard โ€” Win Rate

๐Ÿ“Š Expand Data Tables
ModelWin RateSamplesAvg Output Tokens
Spark-X2.5-1.7B (1.7B)24.1%7529,398.1
MiniCPM5-2B (2B)33.9%7530,553.4
LFM2.5-2.6B (2.6B)41.9%756,640.0
Nanbeige4.2-3B (3B)81.2%756,071.7
Spark-X2.5-4B (4B)57.8%7517,259.1
Ling-3.0-tiny (7.9B MoE, 1.3B active)48.7%7519,133.7
LFM2.5-8B-A1B (8B MoE, 1B active)40.5%754,336.4
Qwen3.8-9B-Distill (9B)68.5%756,379.0

HumanEval+ & MBPP+ - Coding

Details: One pass each

  • HumanEval+: 164 problems
  • MBPP+: 378 problems

HumanEval+ โ€” pass@1 (164 problems)

MBPP+ โ€” pass@1 (378 problems)

๐Ÿ“Š Expand Data Tables

Combined Comparison

ModelHumanEval+ pass@1MBPP+ pass@1
Spark-X2.5-1.7B (1.7B)42.1%64.5%
MiniCPM5-2B (2B)81.1%83.9%
LFM2.5-2.6B (2.6B)88.4%81.5%
Nanbeige4.2-3B (3B)75.0%85.5%
Spark-X2.5-4B (4B)74.4%83.1%
Ling-3.0-tiny (7.9B MoE, 1.3B active)79.3%84.1%
LFM2.5-8B-A1B (8B MoE, 1B active)76.2%85.5%
Qwen3.8-9B-Distill (9B)81.1%85.2%

HumanEval+ โ€” pass@1 (164 problems)

Modelpass@1SamplesLatency (s)Avg Output TokensOutput (tok/s)
Spark-X2.5-1.7B (1.7B)42.1%1642.86499.7174.8
MiniCPM5-2B (2B)81.1%1642.18421.5192.9
LFM2.5-2.6B (2.6B)88.4%1648.391,582.5188.6
Nanbeige4.2-3B (3B)75.0%1646.88480.269.8
Spark-X2.5-4B (4B)74.4%1641.88266.6141.6
Ling-3.0-tiny (7.9B MoE, 1.3B active)79.3%1642.72272.0100.0
LFM2.5-8B-A1B (8B MoE, 1B active)76.2%1648.551,775.6207.8
Qwen3.8-9B-Distill (9B)81.1%1642.76213.677.2

MBPP+ โ€” pass@1 (378 problems)

Modelpass@1SamplesLatency (s)Avg Output TokensOutput (tok/s)
Spark-X2.5-1.7B (1.7B)64.5%3783.67950.9258.9
MiniCPM5-2B (2B)83.9%3781.89358.0189.1
LFM2.5-2.6B (2.6B)81.5%37814.162,605.5184.0
Nanbeige4.2-3B (3B)85.5%37811.32842.674.5
Spark-X2.5-4B (4B)83.1%3788.021,085.3135.3
Ling-3.0-tiny (7.9B MoE, 1.3B active)84.1%3785.04394.878.3
LFM2.5-8B-A1B (8B MoE, 1B active)85.5%3789.381,923.8205.0
Qwen3.8-9B-Distill (9B)85.2%3784.04310.276.7

Unstructured / Personal Tests

Open-WebUI Chat - Search, Reasoning, Function Calling

I primarily use Open-Webui for my LLM chat needs. This test is set up to see how well the model fares in my harness. Can it obey the system prompt and follow the user prompt? Can it properly assess available tools, format the calls, and handle errors?

  1. Can you find a few recently released unified memory systems with 128gb+ ram and compare their prices/availability/pros and cons?
  2. Can you format that information into a single page pdf so i can share it?

I’m expecting to see information about Nvidia RTX/DGX spark, existing and upcoming M# Ultra Mac Studios, and some of the various Ryzen AI Max 395 mini pcs. I’m expecting to see MSRP, but would love to see a model identify how much prices have increased. I’m also expecting to see pros and cons discussing availability, memory size, memory bandwidth, and compute. Lastly I’m expecting these models to be able to find and call the PDF creation tools present in the harness easily.

Results

Perfect search, fetch calls. Only included new Mac studios and DGX/RTX Spark, could have had more info and diversity in systems covered. Pros and cons look good. Report generated simply and quickly, layout has some text overlap but works.

Only Spark-X2.5-4B & Nanbeige4.2-3B respected my sys prompt’s instructions to specify how many search results to request (N=1-3). Ling has the objectively best result I think, but the sacrifice is hitting ~80 sources for what is a really simple question. The models I’m most impressed with here are Spark-X2.5-4B, Nanbeige4.2-3B, and Ling-3.0-tiny. Nanbeige being the only model that TECHNICALLY followed ALL provided instructions in sys prompt and user prompt. This kinda lines up with the benchmark results, Nanbeige really eatin.

Pelican on a Bicycle

Let’s yet again end on the classic silly “pelican on a bicycle” prompt.

Generate an SVG of a pelican riding a bicycle

Successful file generation.

SVG generated by Spark-X2.5-1.7B

Obviously none of these are ‘good’ but at least LFM2.5-2.6B, Nanbeige4.2-3B, Ling-3.0-tiny, and Qwen3.8-9B-Distill generated a form that can extremely abstractly be determined to contain a bird and some form of 2 wheeled vehicle. I would personally make the claim the Qwen3.8-9B-Distill’s was the best. The bird is most identifiably a pelican with the thick bill and the bicycle is pretty interpretable. Runner up would be Nanbeige4.2-3B. The spokes were impressive, but the bird is jumbled and the single triangle bike frame is hilarious. I’ll let you draw your own conclusions though.

Conclusion

  • I’m honestly most impressed with Nanbeige4.2-3B. It didn’t score near the top on IFEval and was gapped by LFM2.5-2.6B in Humaneval+, but in every other benchmark (even pelican) it landed near the top or far above others. The most important benchmark win was the notable dominance in Arena Hard, and with the shortest outputs. And when it came to my real world use case it did a great job. It obeyed all instructions, found solid information (even though it could have been more diverse), and generated the report (even though theres a formatting/color issue in the 2nd table).
  • LFM2.5-8B-A1B shocked me with the BFCL dominance, but it fell apart in my harness
  • LFM2.5-2.6B took IFEval and HumanEval+ notably, but it simply couldn’t generate a functional PDF output, and didn’t fare well against arena hard. It may be worth a second look/investigation.

My next step will be to grab the Q8/FP8 for Nanbeige4.2-3B, Spark-X2.5-4B, and Ling-3.0-tiny to see which fares best at the quant I’d run them at.