Local models on NVIDIA RTX PRO 6000 — which one should write your code?

NVIDIA RTX PRO 6000 — Ryzen 9 9950X3D, 16-core · RTX PRO 6000 Blackwell, 96 GB · CUDA sm_120 · 185 GB RAM + 96 GB VRAM · llama.cpp CUDA, vLLM, SGLang, Ollama. 21 models in this tree. A row appears only when the run used the shared profile (temperature 0 on every trial, seed 42, one 16384-token slot, C compiled -std=gnu11). Aya-23 clamps that context to 8192. Older sweeps used different stacks, context sizes, and a 0.7-temperature retry, so they are not in this table. Their raw JSON is still on disk. Click any column header to sort. Generated 2026-10-01 17:21.

Where to look: this page ranks the models and prices them by what a working answer costs. Analysis covers behaviour under load, whether the code they write is fast, whether the wording of the prompt changes the answer, and self-repair. The failing samples are split by technology — C, Python, Bash, research — and models shows how to reproduce every number. Charts is the same data as pictures.

How many times does each test run? Coding suites (C, Python, Bash — easy, hard and brutal) and the research paper: 3 trials per task, all at temperature 0 with seed 42, so a miss is the same answer again. Framing, from the older sweep: 20 trials per wording. Decode speed: median of 3 repeated 2048-token generations — the tok/s column shows ±1 std across those runs (hover a cell for the exact count), as does the dot plot on the analysis page. Quality: 6 probes × 3 trials (temp 0, then 0.7×2). Concurrency: one pass per stream level (no repeats). Self-repair: one initial attempt, then up to 5 rounds of compiler feedback. Two writing tasks that are easy to confuse: tok/s is measured on a 1500-word essay about MIT (speed only, content not graded — each model's essay is on its detail page), while the research column is a different test: extracting NFS facts from RHEL 10 documentation. All raw data is downloadable as CSV files.

most accurate
117/126 coding tasks
model type coding total flaky ↓ tok/s ± RAM GB quality ppl-w ↓ ppl-t ↓ C Py Bash C-hard Py-hard Sh-hard C-brutal Py-brutal Sh-brutal research
qwen3.8-flash-next 125B llama.cpp CUDAMoE117/1260————3.6048/4824/2418/249/99/96/9———3/3
gpt-oss-120b llama.cpp CUDAMoE111/1264—————45/4824/2418/248/99/94/9———3/3
laguna-s 2.1 117B llama.cpp CUDAMoE108/1260————8.5148/4824/2418/246/99/93/9———0/3
gemma-4-26b llama.cpp CUDAMoE105/1260————14,93142/4824/2415/249/99/93/9———3/3
qwen3.5-35b llama.cpp CUDAMoE105/1260————6.2042/4824/2418/246/99/93/9———3/3
laguna-xs.2 llama.cpp CUDAMoE105/1263————13.0638/4824/2421/246/99/95/9———2/3
nemotron-3-super 120B llama.cpp CUDAMoE105/1260————4.0845/4824/2418/243/99/93/9———3/3
gpt-oss-20b llama.cpp CUDAMoE102/1268————121.3144/4823/2418/246/97/94/9———0/3
qwen3.8-27b llama.cpp CUDAdense102/1260————6.2842/4824/2415/246/99/93/9———3/3
qwen3-coder-next 80B llama.cpp CUDAMoE99/1260————7.0639/4821/2418/246/96/96/9———3/3
qwen3.6-27b llama.cpp CUDAdense99/1260————6.5036/4824/2421/246/99/93/9———0/3
devstral-2 24b llama.cpp CUDAdense96/1260————4.8236/4824/2418/243/96/96/9———3/3
qwen3.6-35b llama.cpp CUDAMoE96/1260————6.3539/4821/2418/246/99/93/9———0/3
glm-4.7-flash llama.cpp CUDAMoE94/1261————16.0845/4824/2415/243/93/91/9———3/3
qwen3-coder-30b llama.cpp CUDAMoE93/1260————9.0536/4824/2412/246/99/93/9———3/3
qwen3.5-122b-a10b llama.cpp CUDAMoE93/1260————4.8736/4824/2418/243/99/93/9———0/3
qwen3.5-27b llama.cpp CUDAdense93/1260————6.3630/4824/2415/246/99/96/9———3/3
k2-horizon 36B-A4B llama.cpp CUDAMoE91/1265————7.8937/4821/2415/244/96/95/9———3/3
mistral-small-4 119B llama.cpp CUDAMoE87/1264—————35/4822/2415/247/93/93/9———2/3
seed-oss 36b llama.cpp CUDAdense82/12610————8.9129/4824/2417/243/94/92/9———3/3
aya-23 35b llama.cpp CUDAdense61/1261————6.1225/4821/2412/240/93/90/9———0/3

Dense vs mixture-of-experts

A dense model runs every parameter on every token; a mixture-of-experts model routes each token to a few of its experts, so only the active column does compute. That is why the 125B flash-next decodes like a 6B model and the whole top of the table is MoE — on memory-bandwidth-bound Apple silicon, active parameters are what you pay per token, and MoE buys a large total capacity at a small active cost. The last column, tok/s per active billion, is the efficiency of that trade; dense models are 1x by definition and omitted.

modeltypetotalactiveexpertscodingtok/stok/s per act-B
qwen3.8-flash-next 125BMoE125B6B512, top-10 +193%0—
gpt-oss-120bMoE117B5.1B128, top-488%0—
laguna-s 2.1 117BMoE117B3B256, top-10 +1 shared86%0—
gemma-4-26bMoE25.2B3.8B128, top-8 +183%0—
qwen3.5-35bMoE35B3B256, top-8 +183%0—
laguna-xs.2MoE33.4B3B256 +1 shared83%0—
nemotron-3-super 120BMoE120B12B512, top-22 +183%0—
gpt-oss-20bMoE21B3.6B32, top-481%0—
qwen3.8-27bdense27B27B—81%0—
qwen3-coder-next 80BMoE80B3B512, top-10 +179%0—
qwen3.6-27bdense27B27B—79%0—
devstral-2 24bdense24B24B—76%0—
qwen3.6-35bMoE35B3B256, top-8 +176%0—
glm-4.7-flashMoE30B3B64, top-4 +175%0—
qwen3-coder-30bMoE30B3B128, top-874%0—
qwen3.5-122b-a10bMoE122B10B256, top-8 +174%0—
qwen3.5-27bdense27B27B—74%0—
k2-horizon 36B-A4BMoE36B4B—72%0—
mistral-small-4 119BMoE119B6B128, top-469%0—
seed-oss 36bdense36B36B—65%0—
aya-23 35bdense35B35B—48%0—
harness check — not a contestant
kimi-k3 (referee) solved 44/44
A cloud model was given the same tasks to confirm they're all solvable and that no failure below is a harness artifact. It's kept out of the ranking because it got one attempt per task rather than 3 trials (44 samples vs 126), ran no research task, and authored the harness. Read it as a ceiling, not a score.

Green cells are strong, red weak — shaded by percentage so a column can be scanned without reading every number. Perplexity is llama-perplexity on WikiText-2 (50 chunks). It is not comparable to the MLX numbers on the other machine. Gemma's absurd PPL is a tokenizer artifact — trust the coding score.

What it costs to get working code

Correctness alone picks a model that is right and unusably slow; tok/s alone picks one that is fast and wrong. The number that decides it is the two divided: seconds of wall clock per solution that passes. Across the 41 coding tasks (research excluded), 3 trials each at temperature 0 — timed end to end, failures included, because a wrong answer costs you its generation time too.

modeltypeC minPython minBash mintotal minper attempt
qwen3-coder-30bMoE0.50.20.20.90.4
laguna-xs.2MoE0.50.20.21.00.5
qwen3-coder-next 80BMoE0.70.30.31.20.6
mistral-small-4 119BMoE0.70.30.31.30.6
qwen3.5-35bMoE0.80.30.31.40.7
qwen3.6-35bMoE0.80.30.31.40.7
glm-4.7-flashMoE0.80.30.41.50.7
k2-horizon 36B-A4BMoE0.90.30.31.60.8
gemma-4-26bMoE0.90.40.41.70.8
laguna-s 2.1 117BMoE1.10.40.41.80.9
devstral-2 24bdense1.50.60.42.61.3
nemotron-3-super 120BMoE1.40.60.62.61.3
qwen3.8-flash-next 125BMoE1.70.70.63.01.5
qwen3.5-122b-a10bMoE1.70.60.83.11.5
gpt-oss-120bMoE1.60.71.23.51.7
aya-23 35bdense2.10.90.93.91.9
qwen3.8-27bdense2.31.10.94.42.1
qwen3.6-27bdense2.71.01.04.62.3
qwen3.5-27bdense3.21.10.95.22.5
gpt-oss-20bMoE2.21.11.95.22.6
seed-oss 36bdense36.917.019.773.535.8

Those totals are everything the model spent, right or wrong. Dividing by the answers that actually worked gives the figure below. first try is trial 1 alone, the honest number if you paste the first thing you get. with retry re-asks only when the previous attempt failed and stops at the first pass, so unused retries cost nothing — what a loop around the model really costs.

modeltypefirst trysec/solutionwith retrysec/solutionretry gainrank
qwen3.8-flash-next 125BMoE38/411.6s38/411.9s+01 frontier
laguna-s 2.1 117BMoE36/411.0s36/411.3s+02 frontier
laguna-xs.2MoE33/410.6s35/410.8s+23 frontier
gpt-oss-120bMoE37/411.9s38/412.4s+14 beaten
gpt-oss-20bMoE34/412.9s38/414.0s+45 beaten
qwen3.5-35bMoE34/410.8s34/411.1s+06 beaten
gemma-4-26bMoE34/411.1s34/411.4s+07 beaten
nemotron-3-super 120BMoE34/411.6s34/412.2s+08 beaten
qwen3.8-27bdense33/412.6s33/414.1s+09 beaten
qwen3.6-27bdense33/412.8s33/414.6s+010 beaten
qwen3-coder-next 80BMoE32/410.8s32/411.3s+011 beaten
qwen3.6-35bMoE32/410.9s32/411.4s+012 beaten
k2-horizon 36B-A4BMoE30/411.0s32/411.6s+213 beaten
seed-oss 36bdense29/4150.4s32/4178.3s+314 beaten
glm-4.7-flashMoE31/411.0s31/411.7s+015 beaten
devstral-2 24bdense31/411.7s31/413.0s+016 beaten
qwen3.5-122b-a10bMoE31/412.0s31/413.5s+017 beaten
qwen3-coder-30bMoE30/410.6s30/411.0s+018 beaten
mistral-small-4 119BMoE29/410.9s30/411.5s+119 beaten
qwen3.5-27bdense30/413.5s30/416.4s+020 beaten
aya-23 35bdense21/413.7s21/418.6s+021 beaten

Rank is the frontier first (most solutions, then cheapest), then everyone else. beaten means another model is at least as accurate and cheaper — drop it.

kimi-k3 (referee) is not in these tables: the cost here is generation wall-clock, and the referee is a hosted cloud model whose solutions were written in-session, not generated through the harness — there is no timing to report.