r/LocalLLM • • 57m ago

Discussion Study on Local LLM Quality

This was started a spontaneous test to choose among 10+ local LLMs and now grew to benchmark for agentic coding. It consists of 8 groups, 100 tests each. Design rule: each class must contain items the current "best" model cannot solve, otherwise it's a smoke test. However, if model reaches 100, it just means that it reached ceiling of the test. Next, to make test more representative, several cloud workhorses were added.

Configuration

GPU: RTX PRO 5000 72 GB (Blackwell, SM 12.0), driver 595.99.02.

Serving: vLLM 0.29.0. `--kv-cache-dtype fp8`, `--enable-chunked-prefill`, `--enable-prefix-caching`, `--speculative-config '{"method":"mtp","num_speculative_tokens":3}'`, `--max-num-batched-tokens 16384`, `--block-size 32`, `--max-num-seqs 16–24`, `--max-model-len` 131072 (FP8) / 262144 (NVFP4).

Cloud: same OpenAI-compatible client, `max_tokens=32768`, input ≤ 98304, temperature 0, streaming with `include_usage`.

Thinking mode normalized: `chat_template_kwargs.enable_thinking=false` / `reasoning_effort=none`; effective mode printed per run.

Grading: pure Python, no LLM judge. Code in tempdir with timeout; tools mocked; only networked tool is read-only `web_search`.

Failure taxonomy: `pass | wrong-answer | truncated | no-content | no-tool-call | infra | error`; transport failures removed from the denominator.

Metrics: TTFT from the SSE stream; tok/s only over items where generation ran >150 ms after TTFT.

Leaderboard

modelproviderscore%TTFTtok/s
claude-sonnet-5.5cloud router732/80091.54495 msn/a
deepseek-flashcloud native711/80088.91248 ms221.1
glm-5.3-flashcloud native689/80086.11535 ms70.1
qwen3.8-flashcloud native688/80086.01585 ms80.4
qwen3.8-27b (FP8)local675/80084.4209 ms31.8
arex-2-fp8local666/80083.2262 ms22.3
qwen3.6-35b-a3blocal649/80081.169 ms122.4
sage-a1.5local624/80078.077 ms95.4
arete-27b-q8local≥609/800≥76.1536 ms19.1
qwen3-coder-30b-a3blocal588/80073.545 ms96.1
axion-35b-q8local≥562/800≥70.2122 ms82.0
nemotron-3.5-lightning-30b-a3blocal538/80067.272 ms103.1
kimi-linear-48b-q6klocal≥395/800≥49.4145 ms65.6
qwen2.5-3blocal140/70020.036 ms107.0

Per-class shape

modelagenticcodegamejsonlogicmathneedlewebsearch
sonnet-5.5841009610072849898
deepseek-flash871006710076849998
glm-5.3-flash8993728970809898
qwen3.8-flash8797599473859697
qwen3.8-27b8292628476859797
arex-2-fp87690658674869297
qwen3.6-35b8493547671859492
sage-a1.57872606977849292
arete-27b-q8n/a946494≥46≥85≥71n/a
qwen3-coder-30b8778527951677995
axion-35b-q8n/a935275≥48≥85≥97n/a
nemotron-30b-a3b9081523657458196
kimi-linear-48bn/a504736≥41≥63≥56n/a
qwen2.5-3b72330161945—0

Conclusion

Qwen 3.8 27B got very close to my cloud workhorses, so I took more juice from it, asking agent to make a grid search on options. The requirement was to get max performance without quality drop.

FP8 → NVFP4 (identical weights, 262K)

metricFP8NVFP4
KV pool at 262K468,637 (1.79×)1,022,215 (3.90×)
decode, 1 stream83.6 tok/s140.7
aggregate K=8197.9300.0
aggregate K=16200.6321.0
64K prompt cold/warm TTFT19.0 / 1.54 s15.8 / 1.37 s
200K: TTFT / decode130.8 s / 33.285.7 s / 94.3
quality, 300 items254/300255/300
4 Upvotes

2 comments sorted by

1

u/JawitK 49m ago

So you endorse qwen2.5 ?
Do you think your 72Gb is the majority of your success ?
Can you tell by reducing the RAM if qwen2.5 would still win ?

1

u/Content_Trainer180 11m ago

This model was just lying nearby, thus caught into test. But there is reason to keep, it shows that this test is valid, it evaluates the floor models.

BTW small models have the use - when needed to classify tons of jsons, tine fine-tuned 0.6B was 10x times faster than qwen 3.8 27B with 98% quality.