Spark-X2.6-4B (Q4_K_M) for AMD Loom
A Loom package (.loom programs and a model.json card) for the unmodified GGUF checkpoint bartowski/Spark-X2.6-4B-GGUF (Spark-X2.6-4B-Q4_K_M.gguf), generated on an AMD Ryzen AI Max+ 395 "Strix Halo" with the loom-skills workflow. Learn more on the Loom ecosystem website.
Quick start
pip install "hrx-loom[hf]==0.1.0"
loom-fetch https://huggingface.co/loom-fun/bartowski-Spark-X2.6-4B-loom/resolve/main/model.json --materialize=copy --output=Spark-X2.6-4B
loom-serve --model=Spark-X2.6-4B/model.json '--device=amdgpu://?completion_spin_ns=4294967295' --memory_bytes=55000000000
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 | llama.cpp Vulkan |
|---|---|---|---|---|---|---|
| decode tok/s, short prompt | 61.5 | 72.6 | +18 % | 82.6 | 88 % | 61.9 |
| decode tok/s, 2k context | 55.9 | 68.6 | +23 % | 78.7 | 87 % | 57.9 |
| decode tok/s, 32k context | 42.2 | 48.0 | +14 % | 56.1 | 86 % | 42.6 |
| prefill tok/s, 1k document | 1750.6 | 2807.3 | +60 % | 7518.2 | 37 % | 1478.8 |
| prefill tok/s, 2k document | 1851.2 | 2820.8 | +52 % | 7443.3 | 38 % | 1563.4 |
| prefill tok/s, 8k document | 1804.3 | 2599.3 | +44 % | 7049.8 | 37 % | 1575.6 |
| prefill tok/s, 16k document | 1632.4 | 2444.2 | +50 % | 6585.7 | 37 % | 1411.3 |
| prefill tok/s, 32k document | 1339.9 | 2112.6 | +58 % | 5819.4 | 36 % | 1158.7 |
| 4 streams, aggregate decode tok/s | 155.6 | 251.6 | +62 % | 294.8 | 85 % | 164.9 |
| speculative decoding, drafted tokens accepted | n/a | n/a | n/a | n/a | n/a | n/a |
Methodology
- Compared: Loom against llama.cpp ROCm
llamacpp-rocm/b1374, llama.cpp Vulkanllamacpp-vulkan/b12211; the same GGUF, the same DevLab runner and job, the same prompts; Loom served with the active wait. Values are the mean of 3 rounds (4 streams: median of 3); Loom is timed by the client, llama.cpp by its server. - Drafting, 1-stream rows (decode, decode_2k, decode_32k, prefill): no drafting on either engine (no MTP head in the GGUF and no drafter published for this exact model). Each engine is loaded once for all these rows.
- 4 streams: both engines loaded with drafting off, 4 parallel requests, aggregate tokens per second.
- Rows: decode = short-context decode; decode_2k / decode_32k = decode after a ~2k / ~32k-token context; prefill_Nk = prompt processing of an N k-token prompt; streams4 = 4-stream aggregate decode. A margin within +-3 % (the measured same-runner noise) is a tie.
- llama.cpp ROCm server arguments:
1-stream rows: -ngl 99 -cram 0 -c 65536 -np 1; 4 streams: -ngl 99 -cram 0 -c 65536 -kvu -np 4. - llama.cpp Vulkan server arguments:
1-stream rows: -ngl 99 -cram 0 -c 36864 -np 1; 4 streams: -ngl 99 -cram 0 -c 147456 -np 4. - Measured on AMD DevLab Dispatch Strix Halo runners (
devlab-perfjobs); runners differ between sessions. - Measured 2026-11-13; device AMD Strix Halo (DevLab Dispatch runner X2-LA03-S04-D04), Linux; hrx-loom
0.1.0(hrx-systemd01d1c1, recovered); source: DevLab Dispatch run 43390795404. - llama.cpp Vulkan: measured 2026-11-13; source: DevLab Dispatch run 43390795404. Archive sha256
9759acd. - 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-skillsacd9ac7). - β 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 | β | on by default; chat_template_kwargs: {"enable_thinking": false} turns it off |
| reasoning effort | β | reasoning_effort: low, high (default high) |
| speculative decoding | β | not applicable |
| image input | β | not applicable |
| audio input / output | β | not applicable |
| sampling | β | temperature, top_p, top_k, seed |
| context size | β | 262,144 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 (78/78) ΒΉ |
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 | β not applicable |
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 | β pass Β² |
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 | ? not re-run on this package (the last pass was on a previous build, sha256 d262555; the nightly gates re-run it) |
decision |
Decision answers (choice, score, noul probabilities) vs llama.cpp on the same prompts | β not applicable |
- ΒΉ DevLab Dispatch run 43377116500, 2026-11-13; 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 43377116500, LEVEL=full, 2026-11-13; 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 1364b4e; hrx-loom 0.1.0 (hrx-system d01d1c1); card generator acd9ac7.
Source files, fetched by loom-fetch from their own repositories:
- checkpoint: bartowski/Spark-X2.6-4B-GGUF @
17682e3,Spark-X2.6-4B-Q4_K_M.gguf
Inference Providers NEW
This model isn't deployed by any Inference Provider. π Ask for provider support
Model tree for loom-fun/bartowski-Spark-X2.6-4B-loom
Base model
XHToken/Spark-X2.6-4B-Base Finetuned
XHToken/Spark-X2.6-4B Quantized
bartowski/Spark-X2.6-4B-GGUF