Qwen3.5-2B on AX8860 (llama.cpp + ggml-axera, 2026-11-05)

ๅœจ็ˆฑ่Šฏ AX8860 ็š„ NPU๏ผˆ4 ๆ ธ๏ผ‰ไธŠ็”จ llama.cpp ่ฟ่กŒ Qwen3.5-2B๏ผŒๆ”ฏๆŒๆ–‡ๆœฌๅ’Œๅ›พๅƒ่พ“ๅ…ฅ๏ผ›ๆ•ดไธชๆจกๅž‹็š„ prefill ๆ˜ฏไธ€ไธช kernelใ€decode ๆ˜ฏๆฏ 16 ๅฑ‚ไธ€ไธช kernel๏ผŒๆƒ้‡ๅœจ NPU ๅ†…ๅญ˜้‡Œๅชๆ”พไธ€ไปฝใ€‚ Qwen3.5-2B with text and image input on the 4-core NPU of the Axera AX8860, with llama.cpp; the whole model's prefill is one kernel, decode one kernel per 16 layers, one copy of the weights in NPU memory.

ๆ–‡ไปถ / Files

ๆ–‡ไปถ / File ่ฏดๆ˜Ž / Description
qwen3.5-2b-mxfp4.gguf ๆจกๅž‹ๆƒ้‡๏ผˆGGUF๏ผŒๆŠ•ๅฝฑๅฑ‚ MXFP4ใ€embedding / ่พ“ๅ‡บๅคด Q8_0๏ผŒ1.3 GB๏ผŒmd5 4a494ba48e2904a7925fb4fed6cc628f๏ผ‰/ weights (projections MXFP4, embedding / output head Q8_0)
mmproj-Qwen3.5-2B-BF16.gguf ่ง†่ง‰็ผ–็ ๅ™จๆƒ้‡๏ผˆBF16๏ผŒ0.8 GB๏ผŒmd5 47c5b21dc254ba4f0d4bd34454442e31๏ผ‰/ vision encoder weights
bin/ llama.cpp ๆฟ็ซฏ็จ‹ๅบ๏ผˆ้™ๆ€้“พๆŽฅ๏ผŒๅชไพ่ต–็ณป็ปŸ /opt/lib ไธŽ libc๏ผ‰/ the board programs (static; need only the system /opt/lib and libc)
kernels/ NPU kernel๏ผšprefill๏ผˆๆ•ดๆจกๅž‹๏ผ‰ใ€decode๏ผˆ16 ๅฑ‚ไธ€็ป„๏ผ‰ใ€ViTใ€่พ“ๅ‡บๅคด + manifest.json๏ผˆไธŠไธ‹ๆ–‡ 16384๏ผ‰/ prefill (whole model), decode (16-layer groups), ViT, output head + manifest.json (context 16384)
run.sh ่ฟ่กŒ่„šๆœฌ / run script

ๆƒ้‡ๅชๆฅ่‡ช GGUF๏ผškernel ไธๅซๆƒ้‡๏ผŒๅŠ ่ฝฝๆ—ถไปŽ GGUF ่ฝฌๆขๅˆฐ NPU๏ผˆ2.7 s๏ผ‰๏ผ›NPU ๅ†…ๅญ˜้‡Œๅชๆ”พไธ€ไปฝๆƒ้‡๏ผˆprefill ๅ’Œ decode ๅ…ฑ็”จ๏ผ‰ใ€‚ The weights come only from the GGUFs: the kernels hold none; they are converted from the GGUF at load (2.7 s); one copy of the weights in NPU memory (shared by prefill and decode).

่ฟ่กŒ / Run

็Žฏๅขƒ / Requirements๏ผšAX8860๏ผŒSDK V0.5.0 ๆˆ–ๆ›ดๆ–ฐ๏ผˆcat /proc/ax_proc/version๏ผ‰/ SDK V0.5.0 or newer.

./run.sh "The capital of France is" 64                 # ๆ–‡ๆœฌ่กฅๅ…จ / text completion
./run.sh -i bus.jpg "Describe this image." 256         # ๅ›พๅƒๆ่ฟฐ / describe an image
./run.sh -c                                            # ๅ‘ฝไปค่กŒๅคš่ฝฎๅฏน่ฏ / multi-turn chat in the terminal
./run.sh -s 8080                                       # OpenAI ๅ…ผๅฎนๆœๅŠก / OpenAI-compatible server
curl http://<board>:8080/v1/chat/completions -H 'Content-Type: application/json' \
  -d '{"messages":[{"role":"user","content":"ไฝ ๅฅฝ"}]}'

็›ดๆŽฅ่ฐƒ็”จ็จ‹ๅบๆ—ถ่ฎพ็ฝฎ / When calling the programs directly: LD_LIBRARY_PATH=/opt/lib GGML_AXERA_KERNEL_DIR=<repo>/kernels๏ผŒ-ngl 99๏ผŒไธŠไธ‹ๆ–‡ -c ๆœ€ๅคง 16384๏ผŒๆœๅŠก็ซฏ -np 1๏ผ›prompt ็”จ -ub 4096 -b 4096 ๆœ€ๅฟซ / -ub 4096 -b 4096 for the fastest prompt processingใ€‚GGML_AXERA_PROF=1 ้€€ๅ‡บๆ—ถๆ‰“ๅฐๅ„้˜ถๆฎต่€—ๆ—ถ / prints per-stage times at exit

ๆ€ง่ƒฝ / Performance

AX8860๏ผŒSDK V0.5.1๏ผŒNPU 4 ๆ ธ / 4 cores๏ผš

้กน / Item ็ป“ๆžœ / Result
4k prompt๏ผˆ4000 token๏ผ‰prefill 16000 tokens/s๏ผˆๆฏ 256 token ไธ€้กต 15 ms๏ผ›้ฆ–ๆฌก prompt ๅฆๅŠ  2.7 s ๆƒ้‡่ฝฌๆข / plus a one-time 2.7 s weight conversion on the first prompt๏ผ‰
decode๏ผˆ็ŸญไธŠไธ‹ๆ–‡ / short context๏ผ‰ 121.5 tokens/s
ๅ›พๅƒ็ผ–็  / image encoding 204 ms๏ผˆๆ•ดไธช ViT ไธ€ไธช kernel / the whole ViT in one kernel๏ผ‰+ 20 ms CPU ้ข„ๅค„็† / preprocessing๏ผ›่พ“ๅ…ฅ็ผฉๆ”พๅˆฐ็บฆ 1024 x 768๏ผˆๆœ€ๅคš 768 ไธชๅ›พๅƒ token = 3072 ไธช 16 x 16 patch๏ผŒ--image-max-tokens 768๏ผ›ๆ›ดๅคง็š„ๅ›พ็ผฉๅฐใ€ๆ›ดๅฐ็š„ๅ›พๆ”พๅคงๅˆฐ่ฟ™ไธช้ข็งฏ๏ผ‰/ the image is scaled to ~1024 x 768 (up to 768 image tokens = 3072 patches of 16 x 16; larger images are scaled down, smaller ones up)
ๅŠ ่ฝฝ / load 5.5 s๏ผˆ็ƒญ๏ผ‰/ 30 s๏ผˆๅ†ท๏ผ‰
NPU ๅ†…ๅญ˜๏ผˆCMM๏ผ‰/ NPU memory ๅŠ ่ฝฝๅŽ / after load 2.05 GB๏ผŒๅณฐๅ€ผ / peak 2.05 GB
็ณป็ปŸๅ†…ๅญ˜ๅณฐๅ€ผ / host memory peak 0.8 GB

ๆญฃ็กฎๆ€ง / Correctness

  • "The capital of France is" โ†’ "Paris. โ€ฆ"๏ผ›ๅ›พๅƒๆ่ฟฐๆญฃ็กฎ๏ผˆ่ฝฆ่พ†ใ€ๆ–‡ๅญ—ใ€ไบบ็‰ฉ๏ผ‰/ image descriptions correct.
  • ไธญๆ–‡ PPL๏ผˆๅ†…้ƒจๆต‹่ฏ•้›†๏ผŒ-c 512๏ผ‰๏ผšNPU 38.85๏ผŒๅŒไธ€ GGUF ๅœจ CPU ไธŠ 38.00๏ผˆ+2.2%๏ผ‰/ Chinese PPL on an internal set: NPU 38.85 vs 38.00 for the same GGUF on the CPU (+2.2%).
  • ๅŒไธ€่พ“ๅ…ฅๅคšๆฌก่ฟ่กŒ๏ผŒ็ป“ๆžœๅถๆœ‰ๆžๅฐๅทฎๅผ‚๏ผˆNPU ไธŠ็ดฏๅŠ ้กบๅบไธๅ›บๅฎš๏ผ‰๏ผŒไธๅฝฑๅ“่พ“ๅ‡บ่ดจ้‡ใ€‚ Repeated runs of one input may differ slightly (the NPU's accumulation order varies); the output quality is the same.

ๅทฒ็Ÿฅ้™ๅˆถ / Known limits

  • ่ฟ่กŒๆ—ถ็‹ฌๅ  NPU 4 ๆ ธ๏ผŒๅŒๆ—ถ่ฟ่กŒๅ…ถไป– NPU ็จ‹ๅบไผšๅ‡บ้”™ / takes all 4 NPU cores; do not run other NPU programs alongside.
  • ๅ•ๅบๅˆ—๏ผšๆœๅŠก็ซฏ้กป -np 1 / one sequence: the server needs -np 1.
  • ไธŠไธ‹ๆ–‡ๆœ€ๅคง 16384๏ผˆ้•ฟไธŠไธ‹ๆ–‡็‰ˆๆœฌ้šๅŽ๏ผ‰/ context up to 16384 (longer contexts to follow).
  • ๆฒกๆœ‰ๆŠ•ๆœบ่งฃ็ ๏ผˆ่ฟ™ไธชๅฐบๅฏธ็š„ๆจกๅž‹ๆฒกๆœ‰ MTP ๅคด๏ผ‰/ no speculative decoding (no MTP head at this size).

ๆบ็  / Sources

Downloads last month
243
GGUF
Model size
2B params
Architecture
qwen35
Hardware compatibility
Log In to add your hardware

4-bit

Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for AXERA-TECH/Qwen3.5-2B-AX8860-llama.cpp

Finetuned
Qwen/Qwen3.5-2B
Quantized
(308)
this model

Collection including AXERA-TECH/Qwen3.5-2B-AX8860-llama.cpp