Qwen3.5-9B for Krafla
INT4 and INT8 conversions of Qwen/Qwen3.5-9B for Krafla, a dependency-free C11 runtime for CPU-only inference on x86-64 (SSE2 up to AVX-512 VNNI) and ARM (ARMv7 NEON up to i8mm and SVE).
Files
| File | Weights | Size | Perplexity | Prefill | Decode | SHA-256 |
|---|---|---|---|---|---|---|
Qwen3.5-9B-Q4_0.mlb |
Q4_0, every matrix 4-bit | 4810 MiB | 10.68 | 37 tok/s | 10.1 tok/s | 8d4432b40f87a7f6… |
Qwen3.5-9B-Q4_0-mixed.mlb |
Q4_0 with v,o,down in Q8_0 |
6042 MiB | 10.49 | 31 tok/s | 7.9 tok/s | 9385dec4b4834975… |
Qwen3.5-9B-Q8_0.mlb |
Q8_0, every matrix 8-bit | 9076 MiB | 10.14 | 24 tok/s | 5.5 tok/s | 4749f5e9920b9dbd… |
tokenizer.mlt |
tokenizer | 5913 KiB | bcffb6878389aec6… |
Measured on a GitHub runner (AMD EPYC 9V45 96-Core Processor, 4 threads) with Krafla's avx2 build. Perplexity is measured on the wikitext-2 test set, 4 chunks of 512 tokens (tools/perplexity.py --ctx 512 --chunks 4). Lower is better, and it is only comparable between files of the same model. Speed comes from ml_bench -n 128 (128 prompt tokens, then 128 decoded tokens). The full hashes are in SHA256SUMS.
Run
Download a release of Krafla (version 0.9.0 or later; Linux x86-64, AArch64 and ARMv7, Windows x86-64) and two files from here:
curl -LO https://huggingface.co/jonpark0/Qwen3.5-9B-krafla/resolve/main/Qwen3.5-9B-Q4_0.mlb
curl -LO https://huggingface.co/jonpark0/Qwen3.5-9B-krafla/resolve/main/tokenizer.mlt
./ml_run Qwen3.5-9B-Q4_0.mlb -z tokenizer.mlt --chat qwen3.5-nothink -t 4
# or serve it with the OpenAI API at http://127.0.0.1:8080/v1
./ml_server Qwen3.5-9B-Q4_0.mlb -z tokenizer.mlt --chat qwen3.5-nothink -t 4
The files record the model's 262144-position context. ml_run and ml_server use 4096 positions of it unless you pass --ctx N, which sets the size of the KV cache.
The release's ml_run runs the most capable build your CPU supports. A greedy one-turn reply from Qwen3.5-9B-Q4_0.mlb to "What is the capital of France? Answer in one sentence.":
The capital of France is Paris.
How these files were made
With Krafla 0.9.0 (commit 872960d) on 2026-11-03, from the safetensors of Qwen/Qwen3.5-9B:
python3 tools/convert_tokenizer.py Qwen3.5-9B/tokenizer.json tokenizer.mlt
python3 tools/convert.py hf Qwen3.5-9B Qwen3.5-9B-Q4_0.mlb --wtype q4
python3 tools/convert.py hf Qwen3.5-9B Qwen3.5-9B-Q4_0-mixed.mlb --wtype q4 --q8 v,o,down
python3 tools/convert.py hf Qwen3.5-9B Qwen3.5-9B-Q8_0.mlb --wtype q8
Q4_0 and Q8_0 keep one scale per block of 32 weights (f16 scales: 4.5 and 8.5 bits per weight). See the user guide for the formats and the comparison with llama.cpp.
License
The license of the original model, apache-2.0, applies (copied in this repository).