Qwen2.5-0.5B-Instruct (Q4_K_M) for AMD Loom
A Loom package (.loom programs and a model.json card) for the unmodified GGUF checkpoint bartowski/Qwen2.5-0.5B-Instruct-GGUF (Qwen2.5-0.5B-Instruct-Q4_K_M.gguf), generated on an AMD Ryzen AI Max+ 395 "Strix Halo" with the loom-skills workflow.
Quick start
pip install "hrx-loom[hf]"
loom-fetch https://huggingface.co/loom-fun/bartowski-Qwen2.5-0.5B-Instruct-loom/resolve/main/model.json --materialize=copy --output=Qwen2.5-0.5B-Instruct
loom-serve --model=Qwen2.5-0.5B-Instruct/model.json --device=amdgpu --memory_bytes=5000000000
The server listens on 127.0.0.1:8080 and answers OpenAI-style /v1/chat/completions requests.
Performance vs llama.cpp
| metric | llama.cpp | Loom | margin | roofline | Loom % of roofline | DevLab llama.cpp | DevLab Loom | local ÷ DevLab (llama.cpp, Loom) |
|---|---|---|---|---|---|---|---|---|
| decode tok/s, short prompt | 284.8 | 380.6 | +34 % | 675.8 | 56 % | 263.0 | 312.2 ¹ | 1.08, 1.22 |
| decode tok/s, 2k context | 245.8 | 543.2 | +121 % | 1181.6 | 46 % | 266.1 | 435.9 ¹ | 0.92, 1.25 |
| decode tok/s, 32k context | 225.4 | 249.1 | +11 % | 728.0 | 34 % | 220.8 | 206.7 ¹ | 1.02, 1.21 |
| prefill tok/s, 1k document | 11169.0 | 16879.0 | +51 % | 77768.6 | 22 % | 11575.8 | 17097.2 ¹ | 0.96, 0.99 |
| prefill tok/s, 2k document | 9177.1 | 16644.3 | +81 % | 73596.4 | 23 % | 10537.1 | 17641.3 ¹ | 0.87, 0.94 |
| prefill tok/s, 8k document | 8002.1 | 14605.9 | +83 % | 55675.2 | 26 % | 9015.2 | 16542.5 ¹ | 0.89, 0.88 |
| prefill tok/s, 16k document | 5502.5 | 11529.9 | +110 % | 42029.3 | 27 % | 5803.9 | 12692.8 ¹ | 0.95, 0.91 |
| prefill tok/s, 32k document | 3774.1 | 8008.7 | +112 % | 28203.9 | 28 % | 3932.5 | 7848.4 ¹ | 0.96, 1.02 |
| 4 streams, aggregate decode tok/s | 791.2 | 938.8 | +19 % | 2850.3 | 33 % | 816.6 | 635.6 ¹ | 0.97, 1.48 |
| speculative decoding, drafted tokens accepted | — | 12 % ² | — | n/a | n/a | n/a | n/a | n/a |
- llama.cpp: build
llamacpp-rocm/b1369, server arguments-ngl 99 -cram 0 --spec-type ngram-simple -c 33792 -kvu -np 4. - Loom: speculative decoding on (n-gram prompt lookup, depth 2).
- Same GGUF on both engines, tokens per second. Loom: client-side timing; llama.cpp: server-side timings. Runs per value: decode and prefill 2 (mean), 4 streams 3 (median).
- Measured 2026-11-07; device AMD RYZEN AI MAX+ 395 w/ Radeon 8060S, AMD Radeon 8060S Graphics, Ubuntu 26.04; hrx-loom
0.1.0(hrx-systemd01d1c1); source: local run. - ¹ Measured 2026-11-07; device AMD RYZEN AI MAX+ 395 w/ Radeon 8060S, AMD Radeon 8060S Graphics, Ubuntu 24.04; hrx-loom
0.1.0(hrx-systemd01d1c1); source: DevLab Dispatch run 42342192972. - ² Measured 2026-11-08; device AMD RYZEN AI MAX+ 395 w/ Radeon 8060S, AMD Radeon 8060S Graphics, Ubuntu 24.04; hrx-loom
0.1.0(hrx-systemd01d1c1); source: DevLab Dispatch run 42419939771. - DevLab: the same measurement on an AMD DevLab Dispatch Strix Halo runner; local ÷ DevLab is the local value over the DevLab value of each engine, recorded for comparison, not a verdict.
- Drafted tokens accepted: the share of the drafter's proposed tokens the model accepted during the
specgate's requests. - Roofline: the hardware ceiling for this GGUF on AMD Ryzen AI Max+ 395 "Strix Halo" (gfx1151) at 216 GB/s and 59 TFLOP/s, from loom-roofline
roofline.py(loom-skillsa05730e); decode and 4 streams with speculative decoding: verify passes × (1 + acceptance × depth 2) tokens per pass, the drafter's cost not counted; acceptance measured in the row's own session: decode 11 %, decode at 2k 64 %, decode at 32k 82 %, 4 streams 20 %. - — not measured; n/a not applicable.
Features
| feature | status | detail |
|---|---|---|
| API | ✅ | OpenAI-style /v1/chat/completions |
| tool calling | ✅ | OpenAI-style tools and tool_calls |
| reasoning / thinking | ❌ | not supported |
| reasoning effort | ❌ | not supported |
| speculative decoding | ✅ | n-gram prompt lookup, depth 2, on by default |
| image input | ❌ | not supported |
| audio input / output | ❌ | not supported |
| sampling | ✅ | temperature, top_p, top_k, seed |
| context size | ✅ | 32,768 tokens per request |
| concurrency | ✅ | 4 concurrent requests |
| max output tokens | ✅ | 4,096 (preset max_tokens) |
Correctness
| gate | description | result |
|---|---|---|
kernel_tests |
Unit tests of the generated kernels against reference implementations | ✅ pass (38/38) ¹ |
golden |
llama.cpp reference recorded on the same GGUF: greedy tokens and top-5 log-probs, short prompts and 1k-32k documents | ✅ pass ² |
compare |
Greedy output vs the llama.cpp reference, token by token; every divergence is a near-tie | ✅ pass ² |
vision |
Image input vs llama.cpp with the same projector: identical prompt tokens, replies equal up to near-ties | — not applicable |
consistency |
Concurrent requests give the same output as the same requests run alone | ✅ pass ² |
spec |
Speculative decoding on gives exactly the output of speculative decoding off | ✅ pass ² |
agent |
Multi-turn tool-calling loop: exact prompt rendering, history reuse, valid tool calls, output vs llama.cpp | ✅ pass ² |
agent_think_off |
The tool-calling loop with thinking off | — not applicable |
sampling |
temperature, top_k and seed behave as specified; first-token distribution matches llama.cpp | ✅ pass ² |
needle |
Needle-in-a-haystack prompt at up to half the context, compared with llama.cpp; over-capacity prompt refused | ✅ pass ³ |
needle_full |
Needle-in-a-haystack prompt at the full context is served | ✅ pass ² |
decision |
Decision answers (choice, score, noul probabilities) vs llama.cpp on the same prompts | — not applicable |
- ¹ DevLab Dispatch run 42342192972, 2026-11-07; device AMD RYZEN AI MAX+ 395 w/ Radeon 8060S, AMD Radeon 8060S Graphics, Ubuntu 24.04; hrx-loom
0.1.0(hrx-systemd01d1c1). - ² DevLab Dispatch run 42419939771, LEVEL=full, 2026-11-08; device AMD RYZEN AI MAX+ 395 w/ Radeon 8060S, AMD Radeon 8060S Graphics, Ubuntu 24.04; hrx-loom
0.1.0(hrx-systemd01d1c1). - ³ DevLab Dispatch run 42342192972, LEVEL=full, 2026-11-07; device AMD RYZEN AI MAX+ 395 w/ Radeon 8060S, AMD Radeon 8060S Graphics, Ubuntu 24.04; hrx-loom
0.1.0(hrx-systemd01d1c1). - Gates are the loom-benchmark correctness gates (
gates.sh); a gate without a recorded run shows no evidence.
Files
model.json/model.json.lock: the card and the pinned source files (sha256 checked byloom-fetch).program/*.loom,weights.loom: the generated Loom programs.tokenizer.json: the tokenizer.llm_config.json: the configuration the programs were generated from.info.json: the measurements, gate evidence and versions this card shows; everything else comes from the files above.REPORT.md: how the values above were measured: setup, commands and the value of every run.
Versions: card schema loom-card/2; loom-skills ca6ae88; hrx-loom 0.1.0 (hrx-system d01d1c1); card generator 1c7ab20.
Source files, fetched by loom-fetch from their own repositories:
- checkpoint: bartowski/Qwen2.5-0.5B-Instruct-GGUF @
41ba88d,Qwen2.5-0.5B-Instruct-Q4_K_M.gguf
Next steps
- decode_32k is far from its roofline because the decode attention kernel streams the whole KV cache once per verified token, so a depth-2 verify pass costs about as much as decoding its tokens one by one (7 of 10.6 ms per pass at 32k is attention)
- a span kernel that reads each key block once per verification span (loom-skills PR #134, parked) measured decode_32k 250 -> 343 tok/s locally and 211 -> 261 on DevLab, with all gates passing
- it is not adopted: at short context it costs 4-stream decode 14 % on DevLab (the per-epoch leader list and one indirect launch per layer); it needs a device-side skip when no token is past the long-context threshold before this card is regenerated
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support
Model tree for loom-fun/bartowski-Qwen2.5-0.5B-Instruct-loom
Base model
Qwen/Qwen2.5-0.5B Finetuned
Qwen/Qwen2.5-0.5B-Instruct Quantized
bartowski/Qwen2.5-0.5B-Instruct-GGUF