Skip to content

v0.6.28 — Qwen3.6 at 32 chat requests level with vLLM; matches or beats it in every Qwen3.6 cell

Choose a tag to compare

@skyrocket2026 skyrocket2026 released this 05 Oct 14:31
· 35 commits to main since this release
0583589

At 32 concurrent chat requests, Qwen3.6 serving is 5% faster and now level with vLLM at 2,366 tok/s each. Its first token comes 45% sooner. sparkinfer now matches or beats vLLM in every Qwen3.6 serving test.

At 32 concurrent requests, AIPerf sends prompts in waves. Each wave opens with about 32 new prompts and nothing decoding yet. On Qwen3.6, sparkinfer used to prefill each of those prompts in a pass of its own: 18.9 prompts/s against vLLM's 37.4. They now share packed passes, and the wave runs at about 30 prompts/s (#1318):

  • The packed prompt path now covers the MoE model (SPARKINFER_PACK_MOE=0 turns this off).
  • Prompts that save a prefix-cache checkpoint now run their linear-attention scan and checkpoint copy on their own streams, not one after another.
  • A checkpoint that falls in a prompt's last 16 tokens moves back one block, so the prompt can stay in the pack.
  • Pinned host buffers for checkpoints are allocated when the prefix cache starts instead of in the middle of a pass (SPARKINFER_SNAPSHOT_POOL_MB, default 4096).

Also in this release, the pipelined routed MoE GEMM takes one barrier per K step instead of two: Qwen3.6 prefill at 1K/2K tokens is 2–3% faster (#1317).

Measured

RTX 5090, AIPerf streaming chat with 1,024-token prompts, 256 output tokens (ignore_eos), and a distinct prompt set per test. Two runs each. vLLM was measured the same day on the same machine. Output tok/s:

Qwen3.6-35B-A3B 0.6.27 0.6.28 vLLM 0.30.0 (nvidia NVFP4)
4 requests 944 973 661
16 requests 1,739 1,749 1,689
32 requests 2,246 2,366 2,366
8K prompts, 4 requests 574 575 451
8K prompts, 16 requests 665 664 652

Time to first token (p50) at 32 requests: 385 → 318 ms (vLLM 580).

Correctness check: pack_ckpt_check gives the same checkpoints whether prompts are prefilled alone or packed, on Qwen3.6 and on Qwen3.8. Qwen3.8 is unchanged.

What's Changed

  • perf(kernels): the pipelined routed MoE GEMM takes one barrier a K step instead of two (Qwen3.6 prefill 1K / 2K +2-3%) by @skyrocket2026 in #1317
  • perf(runtime): a burst of Qwen3.6 prompts is prefilled in packed passes (served c32 2,246 -> 2,366 tok/s, level with vLLM) by @skyrocket2026 in #1318
  • docs: 0.6.28 — Qwen3.6 at 32 chat requests level with vLLM; matches or beats vLLM in every Qwen3.6 cell by @skyrocket2026 in #1319

Full Changelog: v0.6.27...v0.6.28