Tested hardware and models¶
Everything yonga's documentation claims about devices, models and speed was measured on one machine. This page lists that machine, the model families verified on it, the highlights of the profile measurements, and what is known not to work. Read it as a record of what was run, not as a promise about other hardware: no other CPU, GPU, NPU, distribution or OpenVINO release has been tested.
The reference machine¶
| CPU / platform | Intel Core Ultra 7 268V (Lunar Lake) |
| GPU | Intel Arc iGPU (Intel(R) Arc(TM) Graphics (iGPU), GPU: vendor=0x8086 arch=v20.4.4) |
| NPU | Intel AI Boost, /dev/accel/accel0, intel_vpu kernel module, compiler-in-plugin |
| OS | Ubuntu 26.04.1 LTS, kernel 7.2.6 |
| Python | 3.14.4 (the test suite also passes on 3.11) |
| OpenVINO | 2026.4.0 |
| OpenVINO GenAI | 2026.4.0.0 |
| OpenVINO Tokenizers | 2026.4.0.0 |
| optimum-intel | 2.2.0 |
| nncf | 3.4.0 |
| transformers | 5.5.4 on the host; Qwen3.5 exports used 5.2.0, the version the registry pins for that architecture |
| huggingface_hub | 1.21.0 |
Ubuntu 24.04 is an intended target but has not been tested yet. To compare your own machine with
this one, run yonga doctor; Installation covers drivers and permissions.
Model families verified on that machine¶
One small model per family was prepared and probed with a generation smoke test on the GPU and on the NPU, and benchmarked on the CPU:
| Family | Model | CPU | GPU | NPU |
|---|---|---|---|---|
| qwen3 | Qwen/Qwen3-0.6B |
✓ | ✓ | ✓ 67.3 tok/s |
| qwen2 | Qwen/Qwen2.5-0.5B-Instruct |
✓ 23.8 tok/s | ✓ | ✓ |
| llama | unsloth/Llama-3.2-1B-Instruct |
✓ 12.6 tok/s | ✓ | ✓ |
| gemma3 (text) | unsloth/gemma-3-1b-it |
✓ 15.3 tok/s | ✓ | ✓ |
| gemma2 | unsloth/gemma-2-2b-it |
✓ 7.2 tok/s | ✓ | ✓ |
| olmo2 | allenai/OLMo-2-0425-1B-Instruct |
✓ 13.9 tok/s | ✓ | ✓ |
| granite | ibm-granite/granite-3.3-2b-instruct |
✓ 7.6 tok/s | ✓ | ✓ |
| smollm3 | HuggingFaceTB/SmolLM3-3B |
✓ 6.2 tok/s | ✓ | ✓ |
| lfm2 | LiquidAI/LFM2-350M |
✓ 21.8 tok/s | ✓ | ✓ |
| qwen2.5-vl | Qwen/Qwen2.5-VL-3B-Instruct |
✓ 6.2 tok/s | ✓ | ✗ compiler refuses the graph |
| qwen3.5 | the reference 9B VLM | ✓ | ✓ | ✗ compiler refuses the graph |
| phi3 | microsoft/Phi-4-mini-instruct |
✓ prepared and evaluated | — not tried | ✓ 21.9 tok/s (group-wise) |
CPU figures are single-run INT4 throughput on the short prompt. The "reference 9B VLM" is
HauhauCS/Qwen3.5-9B-Uncensored-HauhauCS-Aggressive, a GGUF-only repository, prepared through
its declared safetensors derivative. Gemma, LFM2 and Qwen2.5-VL need an older Transformers than
the one installed; prepare exported them in managed export environments.
What "tested" means¶
In the registry, these families' device claims carry the evidence level tested because of the
runs above: on this machine, with these package versions, the model prepared, compiled and
generated on that device. It is evidence, not a guarantee:
- It is not a support matrix. Another model of the same family, another size, another Intel generation or another OpenVINO release may behave differently.
- A family that is not in the table can still work. It is then rated
inferredorunknown, and the probe at the end ofpreparedecides. How yonga works explains the evidence levels. - The tok/s figures are single runs of small models, given as an illustration. They are not a performance claim.
For a model you care about, yonga inspect MODEL shows what the registry knows about it on your
host.
A real NPU run¶
This is a benchmark of Qwen/Qwen3-0.6B with the npu-int4-sym-g128 profile, run with yonga
0.5.0 on the reference machine (trimmed):
Model Qwen/Qwen3-0.6B
Artifact cc24636a2f49356a
Device NPU
Profile npu-int4-sym-g128
Suite standard (3 runs, 1 warmup)
Max new tokens 256
Compile 858 ms
Prompt In tok Out tok TTFT tok/s TPOT Wall
──────────────────────────────────────────────────────────────────────────
short-instruction 31 256 164.4 ms 68.2 14.7 ms 3.9 s
medium-explanation 104 256 164.7 ms 67.7 14.8 ms 3.9 s
long-context 623 256 165.0 ms 67.7 14.8 ms 3.9 s
Chat, probe, bench and eval explains how to run your own.
Profile measurements¶
The defaults described in Profiles rest on measurements made on the
reference machine with yonga eval and yonga bench. eval measures how far a quantized
artifact's next-token predictions move from a higher-precision reference of the same weights
(mean KL divergence, top-1 agreement and perplexity change). Lower divergence means less damage
from quantization; it is not a measure of answer quality on real tasks. The full tables and
caveats are in
PROFILE_COMPARISON.md.
Keeping a fifth of the layers at INT8 below 5B¶
Twelve models from 0.35B to 8.19B parameters were measured with INT4 at ratio 1.0 and at ratio 0.8, against an INT8 reference:
- Ratio 0.8 is closer to the reference on every model, by 16-42 % in KL and 2-6 points of top-1 agreement, for 9-18 % more disk.
- Below 5B, ratio 1.0 often raises perplexity by 20-33 %, and ratio 0.8 removes a fifth to two thirds of that increase. At 8B, ratio 1.0 costs +7.2 % and ratio 0.8 +6.8 %.
- In speed, ratio 0.8 costs 10-18 % of the GPU's tokens per second below 5B, 22 % at 8B, and up to 12 % of the CPU's. Read that as "up to about a fifth": the host's run-to-run spread was about 20 %.
That is why the -r08 profiles are the CPU and GPU defaults below 5B parameters.
The NPU's two INT4 formats¶
- Channel-wise INT4 (
npu-int4-sym-cw) diverges from the reference roughly two to five times as much as group-wise (npu-int4-sym-g128), on every model measured and at every size. Every group-wise artifact compiled and generated on the NPU. - Group-wise is slower: for Qwen3 it costs 14 % at 0.6B, nothing at 1.7B, and a third at 4B with twice the time to first token. For the other families it costs a tenth to a third of the NPU's tokens per second.
- At 8B, channel-wise is a third faster and far less accurate: perplexity +42.7 % against +9.4 %.
So the NPU default is group-wise below 5B and channel-wise from 5B up. --profile
npu-int4-sym-cw is the fast choice on a small model, and --profile npu-int4-sym-g128 the
quality choice on a large one.
Qwen3 speed with yonga bench --suite standard, tokens per second with the time to first token
in brackets. The GPU columns use the CPU profiles' artifacts, so they run without the GPU
profiles' ATTENTION_BACKEND=SDPA setting:
| Qwen3 | GPU r1.0 | GPU r0.8 | CPU r1.0 | CPU r0.8 | NPU cw | NPU g128 |
|---|---|---|---|---|---|---|
| 0.6B | 152.5 (27 ms) | 125.5 (49 ms) | 85.6 (41 ms) | 82.6 (41 ms) | 77.4 (123 ms) | 66.9 (168 ms) |
| 1.7B | 74.4 (47 ms) | 67.1 (56 ms) | 44.4 (101 ms) | 39.9 (109 ms) | 35.2 (319 ms) | 36.9 (431 ms) |
| 4B | 34.7 (60 ms) | 30.4 (74 ms) | 19.2 (276 ms) | 17.0 (292 ms) | 24.6 (832 ms) | 16.5 (1651 ms) |
| 8B | 16.6 (96 ms) | 13.0 (128 ms) | 10.0 (625 ms) | 9.7 (547 ms) | 13.9 (1785 ms) | 10.6 (2842 ms) |
A 9B VLM on the GPU¶
Two INT4 quantizations of the same Qwen3.5-9B weights were compared on the GPU:
gpu-int4-asym-g128 and the NPU's channel-wise npu-int4-sym-cw.
- The channel-wise artifact is 2.17 % smaller, and the speed difference between the two was within run-to-run noise.
- The group-wise asymmetric artifact stays much closer to an INT8 reference: mean KL 0.080 against 0.197, top-1 agreement 86.8 % against 81.8 %, and perplexity +7.1 % against +22.4 %, on every one of eight passages and on both CPU and GPU.
- Both lose most on Turkish text and least on Python code, so an evaluation on English prose alone would understate the cost of quantization.
GGUF imports¶
For Qwen/Qwen2.5-0.5B-Instruct, imported GGUF files have a divergence floor of about 0.03 nats
even unquantized, where an optimum INT8 export reaches 0.006; Q8_0 and Q6_K sit on that floor.
The GGUF Q4_0 file was closer to the reference than yonga's ratio-1.0 INT4 export (KL 0.199
against 0.290).
Note
All of these numbers come from one laptop, one driver, one OpenVINO release and one thermal state. They explain why the defaults are what they are; they do not predict what your machine will measure.
Known not to work¶
Vision-language models on the NPU¶
The NPU compiler refuses the graphs of both VLM families tested: Qwen3.5 (the 9B reference model)
and Qwen2.5-VL (Qwen/Qwen2.5-VL-3B-Instruct). The driver and compiler are healthy; the graph is
what this NPU compiler cannot take. The registry records the NPU as unsupported for both with
tested evidence, so:
--device autonever picks the NPU for them;- an explicit
--device npuis refused before the download, with exit 50 and the commands that prepare the model for the GPU or the CPU instead.
Use the GPU or the CPU for these models.
phi3 and mistral exports on Python 3.14¶
optimum 2.3.0 and earlier cannot build the export configuration of some architectures on Python 3.14, phi3 (Phi-4-mini) and mistral among them. The fix exists upstream (optimum pull request 2496) but no release carries it yet. Python 3.11, 3.12 and 3.13 are not affected.
yonga knows this. When it can tell that the export will run on Python 3.14 with an affected
optimum, it refuses before the download; otherwise it classifies the failure. Either way the code
is export.optimum.normalized_config and the exit code is 10. The AppImage bundles Python 3.14 and builds its
managed export environments on it, so it cannot export these models. Install yonga with pip into
a virtual environment on Python 3.11-3.13 instead:
The phi3 results in the family table, like the phi3 and mistral rows in PROFILE_COMPARISON.md, come from an export on Python 3.14 with optimum 2.3.0 plus that unreleased fix. A released yonga cannot patch optimum for you.
Granite on the NPU¶
ibm-granite/granite-3.3-2b-instruct works on the NPU but is slow there in both INT4 formats:
about 4.5 tok/s, where models of its size reach 25-40. The cause has not been isolated.
Windows¶
Windows is not supported yet. yonga runs on Linux x86_64 only: every device, driver and path probe is written and tested against Linux.