⚡ d3-lite on the NPU

Accuracy and latency of d3:lite (vllm-sr/d3-lite v3.1.3, package D3-Lite-NPU2) served by FastFlowLM 1.0.11.

Note:

  • AMD Ryzen AI MAX+ PRO 395 (Strix Halo, XDNA 2 NPU), 128 GB, Ubuntu 24.04, XRT, FLM’s default NPU power mode (Performance).
  • Latency is per request at the engine (no HTTP), median of 20 runs after warm-up; HTTP adds about a millisecond.

Accuracy against the upstream BF16 model

Set Questions Upstream BF16 NPU (FLM)
Decision Index public suite, stratified subset (gold accuracy) 6,824 61.2% 60.5%
Same questions, top-1 agreement with BF16 7,226 – 90.5%
Hand-built contract set, top-1 agreement with BF16 311 – 93.2%

Paired gold accuracy, upstream BF16 minus NPU: +0.69 pt (95% CI [+0.10, +1.28] pt). Prompts, token ids and answer objects are byte-identical to the upstream runtime.

Latency

Request Median (ms)
1 question, 128 tokens 109
1 question, 330 tokens 151
1 question, 1,024 tokens 430
1 question, 2,048 tokens 765
1 question, 4,096 tokens 1587
1 question, 8,192 tokens 3690
1 question, 16,384 tokens 8425
1 question, 32,768 tokens 22696
4 questions, 330 tokens each 536
16 questions, 330 tokens each 2067

First request after flm serve is ready: 191 ms (steady state 168 ms over HTTP).

Rows of 2,048 tokens and more: median of 15 runs (32,768: 3). From 1,536 tokens attention runs on the NPU (below that the CPU is faster); the first such request also loads the attention kernel (about 0.1 s) and from then on the decision model holds two NPU hardware contexts instead of one.

Images

Accuracy on the Decision Index public vision suite (the 10 benchmarks that can be rebuilt without gated data; 60 questions each, images capped at 1.6 MP as the suite’s decide engine sends them):

Benchmark Upstream BF16 NPU (FLM) Same answer
CV-Bench 81.7% 85.0% 91.7%
BLINK 51.7% 58.3% 78.3%
RealWorldQA 68.3% 71.7% 88.3%
CharXiv 65.0% 70.0% 90.0%
InfographicVQA 78.3% 80.0% 90.0%
Mind2Web 61.7% 63.3% 83.3%
KIE (CORD + FUNSD) 91.7% 93.3% 98.3%
Moderation (Hateful Memes) 55.0% 53.3% 95.0%
R-Bench-M 31.7% 26.7% 71.7%
MMMU-Pro vision 16.7% 15.0% 58.3%
All 600 60.2% 61.7% 84.5%

Paired gold accuracy, NPU minus upstream BF16: +1.50 pt (95% CI [−0.92, +3.92] pt). Image grids and input token counts equal upstream’s on every question; the processor’s pixels are within 2 grey levels of upstream’s.

Latency with and without an image, at the same total input length (one question, over HTTP, median of 5; 8,192 tokens: 3 runs; 16,384 and 32,000: 1):

Input tokens Text only (ms) Text + one image (ms) Image
516 266 483 640 × 480 (300 tokens)
1,028 448 658 640 × 480 (300 tokens)
2,052 830 1,651 1.6 MP (1,600 tokens)
4,100 1,803 2,641 1.6 MP
8,196 3,798 4,641 1.6 MP
16,386 8,733 9,560 1.6 MP
31,994 21,466 22,477 1.6 MP

An image costs a fixed amount on top of its tokens (decoding, resizing and the vision tower): about 0.2 s at 640 × 480 and 0.8 s at 1.6 MP. All questions of a request share one image encoding: a 1.6 MP image with 8 questions takes 6.4 s, not 8 × 1.5 s. The first request with images loads the vision tower (about 40 ms) and two more NPU hardware contexts.

⚡ d3-nano on the NPU

Accuracy and latency of d3:nano (vllm-sr/d3-nano v3.1.3, package D3-Nano-NPU2), same machine and settings as above.

Note:

  • Latency is per request at the engine (no HTTP), median of 3 runs in each of 2 processes; the NPU is bimodal per process (about ±15%).
  • Prompts are token ids of the given length. Rows of 7,869 tokens and more are real documentation text, median of 3 requests (32,768: 1 request).

Accuracy against the upstream BF16 model

Set Questions NPU (FLM)
Hand-built request set (up to 4,096 tokens), top-1 agreement with BF16 725 95.7%
Same set, final hidden state cosine to BF16 (median) 725 0.998
Long prompts, 845 to 31,491 tokens, top-1 agreement with BF16 30 90.0%
Long prompts, final hidden state cosine to BF16 (min over lengths) 30 0.992
Decision Index public suite, seeded round-robin sample (3,240 requests, 42 benchmarks): mean benchmark score 3,240 55.5% (BF16: 56.7%)
Same requests, top-1 agreement with BF16 (choice answers) 24,956 96.5%
Decision Index public vision suite, 60 seeded questions from each of 10 benchmarks: accuracy 600 64.0% (BF16: 64.3%)
Same image questions, top-1 agreement with BF16 600 84.3%

Prompts, token ids and answer objects follow the upstream runtime. On the Decision Index sample the mean benchmark score is 1.25 points below the upstream BF16 model (standard error 0.58; about 65 to 80 requests per benchmark, so a single benchmark is noisy). This is a sample, not the full suite, and a different one from the d3-lite subset. The vision subset leaves out Winoground (gated), as for d3-lite; paired accuracy, BF16 minus d3-nano, is +0.3 points (95% CI -2.3 to +2.8). The GPTQ calibration prompts (300 synthetic questions) contain no Decision Index data.

Images (d3-nano)

Image requests agree with the upstream BF16 model on 56 of 60 answers (93.3%; 31 hand-built requests with 64 × 64 to 2000 × 1500 images, one to several images each; median probability difference 0.026). Latency over HTTP, one question, median of 3: 1.3 s with a 1,024 × 768 image (876 input tokens), 2.4 s with two images, 3.0 s with a 2000 × 1500 image (downscaled to the 1.6 MP budget). A request with 8 questions about one image takes 5.0 s (one image encoding). PNG, JPEG and WebP data URLs are accepted; web addresses, file paths, corrupt images and videos are refused with HTTP 422.

Latency

Request Median (ms)
1 question, 128 tokens 210
1 question, 330 tokens 252
1 question, 1,024 tokens 584
1 question, 2,048 tokens 1162
1 question, 4,096 tokens 2470
1 question, 7,869 tokens 5262
1 question, 15,854 tokens 11431
1 question, 31,491 tokens 27084
1 question, 32,768 tokens 28429
4 questions, 330 tokens each 796
16 questions, 330 tokens each 2889

Attention runs on the NPU from 1,536 tokens, as for d3-lite (measured break-even for d3-nano: about 1,550 tokens). At 31,491 tokens that is 3.3× faster than attention on the CPU (27 s against 91 s) with no measurable change in accuracy. A prompt of 32,769 tokens is refused.

⚡ d3-mini on the NPU

Accuracy and latency of d3:mini (vllm-sr/d3-mini v3.1.3, package D3-Mini-NPU2), same machine and settings as above.

Note:

  • Latency is per request at the engine (no HTTP), median of 3 runs in each of 2 processes; the NPU is bimodal per process (about ±15%). Rows of 16,116 tokens and more are real documentation text, one request each.

Accuracy against the upstream BF16 model

Set Questions NPU (FLM)
Hand-built request set (up to 4,096 tokens), top-1 agreement with BF16 725 97.0%
Same set, final hidden state cosine to BF16 (median) 725 0.9994
Long prompts, 835 to 31,545 tokens, top-1 agreement with BF16 30 96.7%
Long prompts, final hidden state cosine to BF16 (min over lengths) 30 0.988
Decision Index public suite, seeded round-robin sample (1,600 requests, 42 benchmarks): mean benchmark score 1,600 62.8% (BF16: 63.8%)
Same requests, top-1 agreement with BF16 (choice answers) 12,656 97.0%
Decision Index public vision suite, 60 seeded questions from each of 10 benchmarks: accuracy 600 69.2% (BF16: 71.7%)
Same image questions, top-1 agreement with BF16 600 89.8%

Prompts, token ids and answer objects follow the upstream runtime. On the Decision Index sample the mean benchmark score is 0.99 points below the upstream BF16 model (standard error 0.57; about 37 requests per benchmark, so a single benchmark is noisy). This is a sample, not the full suite, and the same sampling as for d3-nano, not the d3-lite subset. The vision subset leaves out Winoground (gated), as for d3-lite and d3-nano; paired accuracy, BF16 minus d3-mini, is +2.5 points (95% CI +0.5 to +4.5): images cost a little accuracy (largest gaps on Mind2Web, MMMU-Pro, CV-Bench and CharXiv, about 60 questions each), while the answers agree with BF16 on 89.8% of the questions. The GPTQ calibration prompts (300 synthetic questions) contain no Decision Index data.

Images (d3-mini)

Image requests agree with the upstream BF16 model on 58 of 60 answers (96.7%; 31 hand-built requests with 64 × 64 to 2000 × 1500 images, one to several images each; median probability difference 0.024). Latency over HTTP, one question, median of 3: 2.1 s with a 1,024 × 768 image (876 input tokens), 3.8 s with two images, 4.4 s with a 2000 × 1500 image (downscaled to the 1.6 MP budget). A request with 8 questions about one image takes 10.8 s (one image encoding). PNG, JPEG and WebP data URLs are accepted; web addresses, file paths, corrupt images and videos are refused with HTTP 422.

Latency

Request Median (ms)
1 question, 128 tokens 473
1 question, 330 tokens 536
1 question, 1,024 tokens 1315
1 question, 2,048 tokens 2597
1 question, 4,096 tokens 5280
1 question, 16,116 tokens 25900
1 question, 31,545 tokens 62900
1 question, 32,768 tokens 66500
4 questions, 330 tokens each 1767
16 questions, 330 tokens each 6575

Attention runs on the NPU from 1,536 tokens, as for d3-lite (measured break-even for d3-mini: about 1,536 tokens; at 4,096 tokens the NPU attention makes a request 17% faster, 5.3 s against 6.3 s). A prompt of 32,769 tokens is refused.