The same weights, the same prompts, the same GPU

Every engine here loads the very same model file and answers the very same requests, alone on the GPU. We report medians, not best runs, and we report the rows we lose.

VEYMEER
60.9 tok/s
with a draft model; 44.1 without
llama.cpp
42.5 tok/s
with the same draft model; 33.5 without
Ollama
24.6 tok/s
defaults, repeat penalty off
Answers checked
52 of 52
identical to plain decoding

A prompt the engine has never seen

The headline measurement: how fast the answer is written, by kind of work. Nothing is remembered from an earlier run.

Writing speed on a prompt the engine has never seen

tokens per second
VEYMEERwith a draft modelVEYMEERno draft modelllama.cppsame draft modelllama.cppOllama
Code editing241.4241.655.033.424.6
Code explaining61.646.943.033.424.4
Answering from a document64.052.144.533.424.0
Summarising46.936.438.933.524.4
Chat49.534.434.133.725.3
Code generation59.337.344.733.825.3
All prompts60.944.142.533.524.6

Median over the prompts of each kind; every prompt's first run. 26 prompts, 256 tokens each, greedy decoding, context 2048.

Code editing
VEYMEER with a draft model241.4
VEYMEER no draft model241.6
llama.cpp same draft model55.0
llama.cpp33.4
Ollama24.6
Code explaining
VEYMEER with a draft model61.6
VEYMEER no draft model46.9
llama.cpp same draft model43.0
llama.cpp33.4
Ollama24.4
Answering from a document
VEYMEER with a draft model64.0
VEYMEER no draft model52.1
llama.cpp same draft model44.5
llama.cpp33.4
Ollama24.0
Summarising
VEYMEER with a draft model46.9
VEYMEER no draft model36.4
llama.cpp same draft model38.9
llama.cpp33.5
Ollama24.4
Chat
VEYMEER with a draft model49.5
VEYMEER no draft model34.4
llama.cpp same draft model34.1
llama.cpp33.7
Ollama25.3
Code generation
VEYMEER with a draft model59.3
VEYMEER no draft model37.3
llama.cpp same draft model44.7
llama.cpp33.8
Ollama25.3
All prompts
VEYMEER with a draft model60.9
VEYMEER no draft model44.1
llama.cpp same draft model42.5
llama.cpp33.5
Ollama24.6
Reading the table. A draft model is a second, much smaller model that writes ahead for the large one; both engines can use one, and the fair comparison is like with like: column one against three, two against four. In every engine's row the answer is the large model's. Emerald marks the fastest cell of a row.

Where VEYMEER is behind, and what it does about it

Reading a prompt nobody has seen is the one measurement llama.cpp wins on this GPU.

Time to the first word

seconds, less is better
VEYMEERllama.cppOllama
A prompt it has never seen0.890.550.64
The same, with precision = fast0.74––
A prompt it has seen before0.060.10–
A prompt read ahead with /prime0.11––

Median over all prompts, including the time to read the prompt.

Why. llama.cpp and Ollama round the model's intermediate values to 8 bits while reading; VEYMEER keeps them exact, which costs about a third of a second on these prompts. precision = fast gives part of it back for those who prefer the time.
What it does about it. It does not read the same thing twice. A conversation's history, a file sent again, or anything an application sends ahead with /prime is already read when the question arrives, and the first word comes in about a tenth of a second.

JSON, schemas and tool calls

Three schemas, three tool calls and one request in JSON mode, timed whole, prompt included.

Answers held to a form

seconds for the whole request, less is better
VEYMEERwith a draft modelVEYMEERno draft modelllama.cppsame draft modelllama.cpp
A record (JSON schema)1.061.143.293.58
An invoice extracted from text1.832.396.446.57
A review analysed into fields2.302.634.985.00
Tool call: read a file0.190.320.760.75
Tool call: search0.330.451.081.10
Tool call: run a command0.300.341.031.02
JSON mode0.661.241.701.69
All seven6.688.5119.2819.71

Seven requests at temperature 0, best of two, wall clock including the prompt. Every answer fits its schema in every engine.

When the model does not fit the GPU

The same 7B model, with the GPU limited to 2.4 GB so that most of it has to live elsewhere.

A model larger than the GPU's memory

tokens per second
VEYMEERwith a draft modelVEYMEERno draft modelllama.cpp
Writing speed27.612.59.9

The 7B model with 2.4 GB of GPU memory left to it, so 17 of its 28 layers do not fit. Mean of three prompts. llama.cpp with 12 layers on the GPU, the most that fit.

No GPU at all

tokens per second
VEYMEERprecision = balancedVEYMEERprecision = highllama.cpp
Writing speed7.874.588.44

The 7B model on the processor alone (Intel Core i5-13420H, 32 GB DDR4).

On the processor alone, llama.cpp is ahead: 8.44 tokens a second against 7.87, and against 4.58 at VEYMEER's exact default. VEYMEER's work has gone into GPUs first.

The same question a second time

Kept apart from the headline on purpose: what an engine remembers between requests makes a repeated prompt a different measurement.

The same prompt, asked again

tokens per second
VEYMEERmemory on (the default)VEYMEERmemory offllama.cppn-gram speculationllama.cppOllama
All prompts545.242.680.433.424.5

Median of each prompt's second and third run. This measures answering a question again, not general speed.

Speed is only worth reporting if the answer is the same

Compared
52

answers, with and without a draft model, each compared token by token with the same model decoding one word at a time.

Identical
52

Not close: the same tokens, in the same order, to the end.

Same text every run
26 of 26

prompts gave the same text on every run.

Engines written independently round differently, so at temperature 0 llama.cpp's and Ollama's text parts from ours, and from each other's, wherever the model is undecided between two words. That is expected and is not an error in any of them; it is why each engine is checked against its own plain decoding and not against another engine.

Gemma 4 on the same GPU

Google's Gemma 4 E2B and E4B on the RTX 3050, run on 18 October 2026. No other engine was run on these models here, so the last row compares the engine with what the GPU's memory speed allows instead.

Gemma 4 on the same 6 GB laptop GPU

tokens per second
Gemma 4 E2BGemma 4 E4B
Writing new text76.042.6
Editing code253.0123.0
What the GPU's memory speed allows a model reading every weight once a token106.952.4

Gemma 4 E2B and E4B, Q4_K_M, on the RTX 3050 6 GB laptop GPU, 18 October 2026. Greedy decoding. Not compared with another engine: none was run on these models here.

Context lengths and the WebGPU run →

How it was measured

  • GPU. NVIDIA GeForce RTX 3050 6GB Laptop GPU.
  • Machine. Intel Core i5-13420H, 32 GB, Windows 11, on mains power.
  • Model. Qwen2.5 7B, Q4_K_M: 4.68 GB GGUF, the same file loaded by every engine.
  • Requests. 26 prompts in six kinds of work, 256 tokens each, context 2048.
  • Decoding. Greedy (temperature 0), raw prompts, no repeat penalty in any engine. Ollama applies one by default; it is turned off, because it changes the text.
  • One engine at a time. Each alone on the GPU, after two warm-up requests that are not counted.
  • Medians. A kind of work's figure is the median over its prompts. No best run is picked.
  • First runs. The headline is each prompt's first run. Repeats are reported separately.
  • Nothing remembered. VEYMEER's memory of earlier answers is off in the headline rows, although it is on by default.
  • Cross-checked. Speeds are measured by the client and agree with each engine's own report; GPU power, clock and temperature are recorded for every run.
When. VEYMEER: 2 October 2026. llama.cpp: 1 October 2026 (llama.cpp build 11213); with a draft model and with n-gram speculation: 30 September 2026 (llama.cpp build 11213). Ollama: 27 September 2026 (Ollama 0.34.4). All on the same machine with the same model file and prompts.
What is not here. One GPU and one model family so far. We have not yet measured other NVIDIA generations, AMD, Intel or Apple GPUs, several GPUs, or real clusters, and we do not publish numbers we have not measured. We intend to publish the harness with the release, so that anyone can run it and check us.

Measure it on your own machine

veymeer bench runs three kinds of work on any installed model and prints the speed of each.