Skip to content

Product updates

What shipped.

Rendered from CHANGELOG.md in the repository on every build. Kernel level wins, defaults that changed, and fixes, in the words of the engineers who landed them.

Releases

Generated from CHANGELOG.md at 951109f7d1 · 2026-09-18

On main, unreleased

Added

  • spark benchmark <list|run|history> — the dashboard's benchmark suite as a headless subcommand, driving the same executor. Machine-readable output on stdout, progress on stderr; exit codes separate a broken harness (1) from a failed gate (2).
  • --version, sourced from the packaged version so a build cannot report a version it was not packaged as.
  • Six Hopper-owned decode kernels under kernels/hopper/common, declared in that target's [kernels] overrides. Three REPLACE their GB10 namesakes — the W8A16 M=1 decode GEMV family, which on an H100 is 71% of the single-stream decode step and was LSU-bound on a shared-memory E4M3 LUT gather rather than bandwidth-bound. The override decodes with cvt.rn.f16x2.e4m3x2 and keeps four chunk loads in flight: C=1 TPOT 17.87 → 14.14 ms (−20.9%) on 1×H100 80 GB with Qwen/Qwen3.8-27B-FP8, 1.66–2.05× per shape, 2,689 GB/s on the fused gate+up — and bit-identical, unequal=0 on all seven production shapes. GB10's own sources are untouched and still compiled by gb10, b200, strix and strix-hip. Three are ADDITIONS with new stems: w8a16_gemm_m16.cu, dense_gemm_m16_bf16.cu and w8a16_gemv_ncol.cu, the m16n8k16 tensor-core tiers for 5..32-row decode. They are not in kernels/gb10, so a GB10 build does not compile a kernel it has no receipt for.
  • DeepSeek-V4-Flash support on GB10: native MXFP4 (E8M0) routed-expert loading (transcode-free — no MXFP4→BF16→NVFP4 double-quant) plus the Phase-K E8M0 GEMM kernels, end-to-end. (#293)
  • /v1/completions legacy-API parity: echo, integer logprobs (four parallel-array CompletionLogprobs block), n, stream_options, and accepted-but-ignored user/suffix/best_of; prompt-position logprob collection during prefill. (#291)
  • Native U8 NVFP4 loading for pre-quantized checkpoints. (#257)
  • Holo-3.1-35B-A3B / Holo-3.1-0.8B / Ornith-1.0-9B model support on GB10 (sm_121): hybrid Gated-DeltaNet + full-attention + (256-expert MoE | dense FFN) + Qwen3-VL vision tower. Brings CUTLASS Sm120 NVFP4 grouped MoE, FLA chunked-scan GDN prefill + wmma DV-block decode, cuBLASLt/CUTLASS attention projections, kernel-batched co-dispatch prefill, radix-KV + Marconi SSM-snapshot prefix caching, and self-relative auto KV budget. (#203)
  • GEMM-based Qwen3-VL ViT attention kernel (tensor-core SDPA replacing the warp-per-query kernel) + tensor-core ViT block GEMMs + batched multi-image forward — ~2× image-request TTFT on GB10. (#202)
  • Pure-Rust runtime — no Python, no PyTorch — for hybrid Attention + SSM/GDN/Mamba-2 architectures with NVFP4 / FP8 / BF16 quantization.
  • 35 hyperoptimized CUDA kernels per target, compiled to PTX and embedded in the binary at build time. Multi-model image dispatches the right kernel set at startup from config.json.
  • OpenAI- and Anthropic-compatible HTTP API (/v1/chat/completions, /v1/responses, /v1/messages, /v1/models, /v1/conversations, /tokenize, /detokenize, /health, /metrics).
  • Tool calling with grammar-constrained decoding (Hermes, Qwen3-Coder, Mistral, MiniMax-XML formats).

Fixed

  • Benchmark runs no longer overwrite each other. History files were named by whole seconds, so two runs of the same benchmark within the same second silently destroyed the first. Records are now keyed by nanosecond with an explicit collision guard.
  • Run history records the parameters, target, source and version alongside the result. Previously only the result was stored, so a number could not be attributed to a configuration or reproduced. Pre-existing files still load.
  • SSM snapshot eviction is now recency-only: the hit-weighted score was pinning fossil anchors and inflating warm TTFT; the pure-LRU/winner-only policy restores warm-TTFT parity with llama.cpp. (3d8130d0)
  • 35B agentic-wall recipe: SSM tail-protect brings webserver_ok Σ(wall_time) from 2765s to 1364s (<1500s gate). (#278)
  • Weight-only NVFP4 (W4A16) checkpoints now load. llm-compressor nvfp4-pack-quantized with input_activations: None ships no static activation scale; the loader previously required input_global_scale and failed (e.g. AEON-7/Ornith-1.0-35B-AEON-Ultimate-Uncensored-NVFP4). The field is loaded-but-unused (activations are quantized dynamically), so it is now optional. W4A4/W4A8 checkpoints are unaffected. (#203)
  • --gpu-memory-utilization now enforces a hard ceiling on total GPU memory (weights + buffers + KV cache + reserves), matching the vLLM / sparkrun convention. Previously the fraction was applied only to post-weight free memory, causing the KV cache to over-allocate by 20-27 GB when values below the ~0.88 default were used. This blocked multi-service co-residency on shared-memory systems (e.g. DGX Spark GB10). The flag now behaves as documented: 0.50 on a 120 GB device caps Atlas at ~60 GB total. (#180)

Changed

  • Five [defaults] rows for those tiers, and they do not all say yes. attn_m16_tc and lm_head_m16_tc are ON for Hopper (+5.3% and +4.1% C=16 aggregate), ffn_m16_tc is OFF on a measured LOSS (−5.2%) from the same kernel on a different projection family, and attn_ncol_gemv is OFF because no serving A/B exists for it on any target. Hopper's lm_head_batchm_max widens 8 → 16, in the same commit as the arm it was measured beside. Every row is off (or the frozen baseline) on GB10 and B200, so neither target's serve changes.
  • The tensor-core GDN chunked-prefill family is ON by default on Hopper. kernels/hopper/HARDWARE.toml [defaults] gdn_prefill_tc = true — the state spine and both Hopper prefill remnant twins. H100 round 13 measured it on one binary against a same-round control: C=1 TTFT 269.1 → 162.4 ms on 1193/256 and 889.3 → 491.5 ms on 4593/512, C=16 aggregate +21.5% / +31.4%, coherency 4/4, determinism 8/8 identical over three runs, and nsys pricing the two twins at 4.28× (chunk_fwd_o_hopper) and 1.60× (recompute_wu_hopper) with the shared spine kernel unchanged at 0.99× as the internal control. kernels/gb10 and kernels/b200 keep false — this is an H100 receipt. AVAROK_GDN_PREFILL_TC=0 turns the whole family off and AVAROK_NO_GDN_PREFILL_TC_REMNANTS=1 keeps the spine while pinning the twins to their parents; both print on the serve's target defaults (hopper): … line. Numbers: GDN-PREFILL-ATTRIBUTION.md.
  • Serving defaults are now per-hardware-target and live in the repository. kernels/<hw>/HARDWARE.toml gained a [defaults] table, baked into the binary by build.rs as avarok_kernels::TARGET_DEFAULTS. A kernel-path lever that differs between one target and another resolves from that declaration FIRST and the environment second, so a serve reproduces its measured configuration with no AVAROK_* prefix at all, and prints one target defaults (<hw>): … line naming every resolved value and which of them came from the environment. GB10's declaration restates the previous hardcoded defaults exactly, asserted as an equality in avarok-kernels/tests/target_defaults.rs, so GB10 behaviour is unchanged. The first lever to differ is ssm_batched_recurrent, which kernels/hopper declares ON.
  • AVAROK_SSM_BATCHED_RECURRENT=0 now means OFF. It was read as == "1", so =0 was indistinguishable from absent — which cannot express "off" once a target's default can be ON, leaving an operator no way to turn a lever off without editing a launch script. VAR=1 is unchanged, and the AVAROK_NO_* kill switches stay presence-gated. AVAROK_GDN_PREFILL_TC joins it as [defaults] gdn_prefill_tc: it was presence-gated, so =0 used to mean ON and now means OFF. Every A/B recipe for it set =1 and is unaffected.
  • kernels/<hw>/HARDWARE.toml also gained [hardware] sm_count, cross-checked at boot against the driver's CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT; a mismatch logs one warning naming both numbers and serving continues.

Engineering

Next step

Want the next one on your fleet?

Every release passes the serve matrix before it ships. Enterprise customers pin a channel and get the receipt with the upgrade.