Skip to content

perf(qwen35): weight-amortized Q4_K tile-GEMM prefill for Qwythos above 64k (5.5x pp @128k)#409

Closed
blinkeye-lcm wants to merge 1 commit into
gittensor-ai-lab:mainfrom
blinkeye-lcm:perf/qwen35-prefill-mmq-128k
Closed

perf(qwen35): weight-amortized Q4_K tile-GEMM prefill for Qwythos above 64k (5.5x pp @128k)#409
blinkeye-lcm wants to merge 1 commit into
gittensor-ai-lab:mainfrom
blinkeye-lcm:perf/qwen35-prefill-mmq-128k

Conversation

@blinkeye-lcm

@blinkeye-lcm blinkeye-lcm commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

Summary

forward_token ingests a prompt one token at a time, so a 128k prompt re-reads the whole Q4_K weight set 131072 times and prefill pp sits flat at ~285 tok/s, pinned to DRAM bandwidth. This PR ingests prompts longer than 64k in token chunks, issuing every projection as one Q4_K x Q8_1 dp4a tile GEMM so each weight superblock is read once per tile of token rows instead of once per token — weights are never dequantized, and 131072 goes 284.80 -> 1575.10 pp (5.5x). Gated to ctx > 65536, so 4k/32k/64k and the whole decode path are untouched.

Proof of speedup

  • Tested on RTX 5090 (sm_120)

Decode tok/s (end-to-end, from bench/scripts/bench.sh — fill if this PR targets decode):

decode tok/s
before (main) 285.42
after (this PR) 286.09

This PR does not target decode and does not modify the decode path or its CUDA graph. The row
above is a no-regression check at ctx=131072, not a claimed gain — the +0.2% is run-to-run
noise. The prefill table below is the actual claim.

Prefill pp tok/s (Qwythos / Qwen3.5 — fill if this PR targets prefill; use --ctx 4096, 32768, 65536, or 131072 and copy the prefill pp line — report your best context):

prefill pp tok/s
before prefill (main) 284.80
after prefill (this PR) 1575.10
# bench/scripts/bench.sh <gguf> --tokens 128 --ctx 131072   (same binary, SPARKINFER_PREFILL_MMQ=0 -> default)

### BEFORE (main: SPARKINFER_PREFILL_MMQ=0)
>> GPU arch: sm_120
>> using local build

=== sparkinfer — decode (n=128, ctx=131072, bs=1) ===
[runtime] NVIDIA GeForce RTX 5090  cc=12.0  SMs=170  BW=1792 GB/s
loading /workspace/models35/Qwythos-9B-Claude-Mythos-5-1M-Q4_K_M.gguf (native GGUF, experts quantized) ...

=== sparkinfer bench (Q4_K_M native) ===
model        : Qwen3.5-9B dense hybrid  (32 layers, 1 experts top-1)
VRAM used    : 16.2 GB
max seq      : 131216
decode tg    : 285.42 tok/s  (3.5 ms/token, n=128, ctx=131072, bs=1)
prefill pp   : 284.80 tok/s  (ctx=131072, sequential KV fill)
GPU          : 76°C · 574 W · 2715 MHz (peak under load)

### AFTER (this PR, default)
>> GPU arch: sm_120
>> using local build

=== sparkinfer — decode (n=128, ctx=131072, bs=1) ===
[runtime] NVIDIA GeForce RTX 5090  cc=12.0  SMs=170  BW=1792 GB/s
loading /workspace/models35/Qwythos-9B-Claude-Mythos-5-1M-Q4_K_M.gguf (native GGUF, experts quantized) ...

=== sparkinfer bench (Q4_K_M native) ===
model        : Qwen3.5-9B dense hybrid  (32 layers, 1 experts top-1)
VRAM used    : 16.2 GB
max seq      : 131216
decode tg    : 286.09 tok/s  (3.5 ms/token, n=128, ctx=131072, bs=1)
prefill pp   : 1575.10 tok/s  (ctx=131072, sequential KV fill)
GPU          : 75°C · 549 W · 2827 MHz (peak under load)

Context sweep — every context at or below the 65536 gate runs main's token loop byte-for-byte, so before/after there are literally the same code path:

# ctx=4096:    main 294.12 -> this PR 293.24    (1.00x — token path, gated off; delta is run-to-run noise)
# ctx=32768:   main 286.85 -> this PR 286.85    (1.00x — token path, gated off)
# ctx=65536:   main 286.95 -> this PR 286.95    (1.00x — token path, gated off)
# ctx=131072:  main 284.80 -> this PR 1575.10   (5.53x)

How. The prompt is walked in 1024-token chunks; every projection (GDN qkv/gate/alpha/beta/ out, full-attention q/k/v/o, dense SwiGLU gate/up/down) is issued as a single Q4_K x Q8_1 dp4a tile GEMM, so a weight superblock is read once per tile of token rows rather than once per token.
Weights stay 4-bit from DRAM into registers — nothing is dequantized — and the arithmetic is the same vec_dot_q4_K_q8_1 the decode GEMV runs. The LM head (248320x4096 Q4_K, 572 MB = 10% of the weight set) runs for the final prompt token only. Scratch is O(chunk), not O(prompt), so 128k allocates what 4k does (VRAM 16.2 GB, unchanged above).

Gated to ctx > 65536 (SPARKINFER_PREFILL_MMQ_MINCTX, default 65536; SPARKINFER_PREFILL_MMQ=0 disables). Everything that is not a weight read stays on the kernels decode already uses: the Gated-DeltaNet conv + recurrence run per token (a serial recurrence over state, not weights, so batching it buys nothing), and the full-attention layers call the same sink + sliding-window sparse-KV kernels (fa_kv_window_select / flash_decode_split_sparse) once per query, under the same depth-adaptive KV-split policy — so prefill attends to exactly the keys decode will later read. That is also why 128k is reachable: past sparse_min_ctx the baseline attends to sink + recent window, so a prefill that respects that window has no O(N^2) wall.

Correctness

The chunked fill must leave the KV cache + Gated-DeltaNet/conv state such that decode continues exactly as the token-by-token fill would. Ingesting the same prompt both ways and comparing the next-token distribution at the prompt boundary (gate: top1 >= 0.90, KL <= 0.20):

prompt=8192    TOP1 MATCH    KL 0.000527
prompt=16384   TOP1 MATCH    KL 0.000374     # sparse-KV window active

Those runs pin SPARKINFER_FAMMA4=0 SPARKINFER_ATTN_GQ8=0. Without them the two paths diverge at ctx >~ 5k for two reasons that are independent of this PR and already have open fixes — #389 (hd256 int8-MMA correctness) and #393 (sparse-KV combine drops the attention output gate). This path computes the gated, correctly-strided result; the token path currently does not, so the two disagree until those land. Both reproduce on the token path alone, without this PR — main's own argmax moves when either is switched off:

# ctx=6144, token path, main's own argmax:  11006 -> 266   with SPARKINFER_FAMMA4=0
# ctx=8192, token path, main's own argmax: 107221 -> 220   with SPARKINFER_ATTN_GQ8=0

The accuracy gate is unaffected either way: it teacher-forces forward_token at 2048 (qwen3_gguf_score), which this path never touches.

Relation to open PRs

#398 (batched prompt prefill for Qwythos) is the only other PR that amortizes prefill weight reads, and it caps at 65536 (SPARKINFER_PREFILL_BATCHED_MAXCTX — its prefill attention is dense causal O(N^2)), falling back to the token path at 131072. That is the one context this PR touches, so the two do not overlap at any measured context, and if #398 merges first this PR still applies as-is.
The implementations differ throughout: #398 dequantizes Q4_K to bf16 and runs cp.async + WMMA tensor-core GEMMs with a one-launch sequential GDN scan and its own dense int8 paged attention; this PR keeps weights 4-bit and runs a dp4a Q4_K x Q8_1 tile GEMM, reuses the in-tree per-token GDN kernels unchanged, and reuses the in-tree sparse-KV attention.

#387 (skip LM head on prefill) keeps prefill token-by-token; skipping the LM head for non-final prompt tokens is inherent to a one-pass ingest here rather than a separable change.

#389 / #393 are the two correctness fixes the A/B above depends on; no code overlap with this PR.

#345 (grid-target KV-split cap for int8-MMA long-context) tunes the KV-split policy this PR mirrors — a trivial rebase if it lands first.

@skyrocket2026 skyrocket2026 added area:runtime subsystem (emission weight 0.26) area:kernels subsystem (emission weight 0.42) test-on-5090 Maintainer-approved to evaluate on RTX 5090 (greenlight) needs-rebase Verified speedup but not the round winner — rebase after merge-first lands labels Jul 14, 2026
@skyrocket2026

Copy link
Copy Markdown
Member

⏸ Merge conflict — rebase before eval

This branch conflicts with main, so the RTX 5090 eval is skipped until you rebase.

Please rebase onto main and push — the bot re-evaluates on the next poll once the PR is cleanly mergeable.

@skyrocket2026 skyrocket2026 removed the test-on-5090 Maintainer-approved to evaluate on RTX 5090 (greenlight) label Jul 15, 2026
@blinkeye-lcm
blinkeye-lcm marked this pull request as draft July 15, 2026 21:51
@skyrocket2026

Copy link
Copy Markdown
Member

The round's merge-first PR was just merged. Please rebase this branch onto main — once you push the rebase the bot re-evaluates it against the new frontier (crediting your marginal gain on top of what merged).

@blinkeye-lcm

Copy link
Copy Markdown
Contributor Author

Drafting this one — it only touches 128k prefill, and #419 took 128k out of the Qwythos eval, so there's no scored context left for it to move.

It's rebased on current main and builds clean, and the ctx > 65536 gate means everything at or below 64k still runs the token loop untouched. The pp table above is stale though: #387 gave the token path the same LM-head skip, so main's prefill baseline went up and my "before" numbers are now too low. I'll re-measure before un-drafting.

Main question: is 128k coming back? "for now" sounds temporary, so I've parked this rather than closed it — if it's staying off, I'll just close it. Worth noting it's the one context no other open prefill PR reaches, since #398 caps at 65536 (its prefill attention is dense O(N²)). And if the reason for dropping it was eval wall-clock, main's 128k prefill run is ~7 minutes on its own — which is the thing this removes.

@skyrocket2026

Copy link
Copy Markdown
Member

The round's merge-first PR was just merged. Please rebase this branch onto main — once you push the rebase the bot re-evaluates it against the new frontier (crediting your marginal gain on top of what merged).

@blinkeye-lcm
blinkeye-lcm marked this pull request as ready for review July 16, 2026 00:05
@blinkeye-lcm
blinkeye-lcm force-pushed the perf/qwen35-prefill-mmq-128k branch from 1be78fd to 44dcad4 Compare July 16, 2026 00:08
@skyrocket2026 skyrocket2026 added test-on-5090 Maintainer-approved to evaluate on RTX 5090 (greenlight) eval:none sparkinfer auto-eval verdict: none eval-qwen35:none eval-qwen36:none 128-context UI-only: strongest measured context in sparkinfer eval re-evaluate Winner merged — rebase onto main; bot re-evaluates on push and removed needs-rebase Verified speedup but not the round winner — rebase after merge-first lands labels Jul 16, 2026
@skyrocket2026

Copy link
Copy Markdown
Member

⚪ sparkinfer auto-eval — 44dcad4

metric value
label eval:none
Qwen3.5 score eval-qwen35:none (pass)
Qwen3.6 score eval-qwen36:none (pass)
Qwen3.5 vs same-box main 283.16 tok/s → -0.0% (-0.1)
Qwen3.5 scored decode (65536 ctx · 64k-context) 283.1 tok/s
Qwen3.5 scored prefill not measured (0 pp tok/s on all contexts)
Qwen3.5 correctness top-1 92.9% · KL 0.0375
Qwen3.5 128-token no-regression gate 294.67 tok/s vs main 295.19 tok/s · pass
Qwen3.5 4k-context no-regression gate 284.58 tok/s vs main 284.95 tok/s · pass
Qwen3.5 32k-context no-regression gate 283.1 tok/s vs main 283.2 tok/s · pass
Qwen3.5 64k-context no-regression gate 283.1 tok/s vs main 283.16 tok/s · pass
Qwen3.5 4k prefill no-regression gate 319.98 pp tok/s vs main 320.45 pp tok/s · pass
Qwen3.5 32k prefill no-regression gate 299.89 pp tok/s vs main 300.16 pp tok/s · pass
Qwen3.5 64k prefill no-regression gate 278.77 pp tok/s vs main 279.01 pp tok/s · pass
Qwen3.5 128k prefill no-regression gate 0.0 pp tok/s · pass
Qwen3.6 vs same-box main 480.19 tok/s → -0.0% (-0.2)
Qwen3.6 scored decode (128 ctx · 128-context) 480.01 tok/s
Qwen3.6 correctness top-1 90.2% · KL 0.0436
Qwen3.6 128-token no-regression gate 480.01 tok/s vs main 480.19 tok/s · pass
Qwen3.6 512-context no-regression gate 472.69 tok/s vs main 472.96 tok/s · pass
Qwen3.6 4k-context no-regression gate 453.2 tok/s vs main 453.43 tok/s · pass
Qwen3.6 16k-context no-regression gate 446.29 tok/s vs main 446.65 tok/s · pass
Qwen3.6 32k-context no-regression gate 425.01 tok/s vs main 425.33 tok/s · pass
Qwen3.5 optimize eval:none · 283.1 tok/s · pass
Qwen3.5 optimize — Qwen3.6-35B-A3B guard accuracy top-1 90.2% · KL 0.0436 · pass
Qwen3.5 optimize — Qwythos-9B (Q4_K_M) 128 294.67 tok/s · pass
Qwen3.5 optimize — Qwythos-9B (Q4_K_M) 4k 284.58 tok/s · pass
Qwen3.5 optimize — Qwythos-9B (Q4_K_M) 32k 283.1 tok/s · pass
Qwen3.5 optimize — Qwythos-9B (Q4_K_M) 64k 283.1 tok/s · pass
Qwen3.6 optimize eval:none · 480.01 tok/s · pass
Qwen3.6 optimize — Qwythos-9B (Q4_K_M) guard accuracy top-1 92.9% · KL 0.0375 · pass
Qwen3.6 optimize — Qwen3.6-35B-A3B 128 480.01 tok/s · pass
Qwen3.6 optimize — Qwen3.6-35B-A3B 512 472.69 tok/s · pass
Qwen3.6 optimize — Qwen3.6-35B-A3B 4k 453.2 tok/s · pass
Qwen3.6 optimize — Qwen3.6-35B-A3B 16k 446.29 tok/s · pass
Qwen3.6 optimize — Qwen3.6-35B-A3B 32k 425.01 tok/s · pass

Within the significance gate — no verified speedup over same-box main.

RTX 5090 (sm_120) · 128/512/4k/16k/32k guarded · Qwen3.5 prefill at 4k/32k/64k · scored vs same-box main · built from source · correctness vs llama.cpp. Automated — not merged; merge manually after review.

@blinkeye-lcm
blinkeye-lcm force-pushed the perf/qwen35-prefill-mmq-128k branch from 44dcad4 to bf0a845 Compare July 16, 2026 04:12
@skyrocket2026 skyrocket2026 added eval:REJECT sparkinfer auto-eval verdict: REJECT eval-qwen35:REJECT eval-qwen36:REJECT 64k-context and removed eval-qwen35:none eval-qwen36:none eval:none sparkinfer auto-eval verdict: none 128-context UI-only: strongest measured context in sparkinfer eval labels Jul 16, 2026
@skyrocket2026

Copy link
Copy Markdown
Member

❌ sparkinfer auto-eval — bf0a845

metric value
label eval:REJECT
Qwen3.5 score eval-qwen35:REJECT (fail)
Qwen3.6 score eval-qwen36:REJECT (fail)
Qwen3.5 vs same-box main 285.35 tok/s → +0.1% (+0.2)
Qwen3.5 scored decode (65536 ctx · 64k-context) 285.56 tok/s
Qwen3.5 scored prefill (32768 ctx · 32k-context) 5129.66 pp tok/s
Qwen3.5 correctness top-1 91.5% · KL 0.0409
Qwen3.5 128-token no-regression gate 296.65 tok/s vs main 296.54 tok/s · pass
Qwen3.5 4k-context no-regression gate 286.71 tok/s vs main 286.56 tok/s · pass
Qwen3.5 32k-context no-regression gate 285.47 tok/s vs main 285.32 tok/s · pass
Qwen3.5 64k-context no-regression gate 285.56 tok/s vs main 285.35 tok/s · pass
Qwen3.5 4k prefill no-regression gate 4879.35 pp tok/s vs main 6311.38 pp tok/s · fail
Qwen3.5 32k prefill no-regression gate 5114.5 pp tok/s vs main 5475.75 pp tok/s · fail
Qwen3.5 64k prefill no-regression gate 5129.66 pp tok/s vs main 5509.77 pp tok/s · fail
Qwen3.5 128k prefill no-regression gate 0.0 pp tok/s · pass
Qwen3.6 vs same-box main 425.37 tok/s → +0.0% (+0.0)
Qwen3.6 scored decode (32768 ctx · 32k-context) 425.69 tok/s
Qwen3.6 correctness top-1 88.0% · KL 0.0836
Qwen3.6 128-token no-regression gate 488.95 tok/s vs main 488.74 tok/s · pass
Qwen3.6 512-context no-regression gate 482.21 tok/s vs main 481.85 tok/s · pass
Qwen3.6 4k-context no-regression gate 462.81 tok/s vs main 462.59 tok/s · pass
Qwen3.6 16k-context no-regression gate 450.48 tok/s vs main 450.44 tok/s · pass
Qwen3.6 32k-context no-regression gate 425.69 tok/s vs main 425.37 tok/s · pass
Qwen3.5 optimize eval:REJECT · 285.56 tok/s · fail
Qwen3.5 optimize — Qwen3.6-35B-A3B guard accuracy top-1 88.0% · KL 0.0836 · FAIL
Qwen3.5 optimize — Qwythos-9B (Q4_K_M) 128 296.65 tok/s · pass
Qwen3.5 optimize — Qwythos-9B (Q4_K_M) 4k 286.71 tok/s · pass
Qwen3.5 optimize — Qwythos-9B (Q4_K_M) 32k 285.47 tok/s · pass
Qwen3.5 optimize — Qwythos-9B (Q4_K_M) 64k 285.56 tok/s · pass
Qwen3.6 optimize eval:REJECT · 425.69 tok/s · fail
Qwen3.6 optimize — Qwythos-9B (Q4_K_M) guard accuracy top-1 91.5% · KL 0.0409 · pass
Qwen3.6 optimize — Qwen3.6-35B-A3B 128 488.95 tok/s · pass
Qwen3.6 optimize — Qwen3.6-35B-A3B 512 482.21 tok/s · pass
Qwen3.6 optimize — Qwen3.6-35B-A3B 4k 462.81 tok/s · pass
Qwen3.6 optimize — Qwen3.6-35B-A3B 16k 450.48 tok/s · pass
Qwen3.6 optimize — Qwen3.6-35B-A3B 32k 425.69 tok/s · pass

No context cleared the 2% significance gate while at least one context regressed. Auto-closing this PR.

RTX 5090 (sm_120) · 128/512/4k/16k/32k guarded · Qwen3.5 prefill at 4k/32k/64k · scored vs same-box main · built from source · correctness vs llama.cpp. Automated — not merged; merge manually after review.

@blinkeye-lcm

blinkeye-lcm commented Jul 16, 2026

Copy link
Copy Markdown
Contributor Author

This one only targets 128k — it's gated to ctx > 65536, so 4k/32k/64k deliberately run main's path untouched.

That's also why the prefill gates show regressions: the branch is behind #422, so the bot built my stale copy (4879 pp @4k) against a main that already has the int8 GEMM (6311 pp). A rebase makes those numbers identical — it isn't something this PR's code does. The 64k-context label is just the bot picking from the scored set; the one context this PR actually touches reports 0.0 pp · pass.

So the real question is 128k coming back? It's still the only prefill context that falls back to the token path, since batched prefill caps at 65536. If it's staying off, I'll close this rather than leave it half-evaluated.

@blinkeye-lcm
blinkeye-lcm force-pushed the perf/qwen35-prefill-mmq-128k branch from bf0a845 to 2a5705c Compare July 16, 2026 13:57
@skyrocket2026 skyrocket2026 added eval:REJECT sparkinfer auto-eval verdict: REJECT eval-qwen35:REJECT eval-qwen36:none 32k-context UI-only: strongest measured context in sparkinfer eval and removed eval-qwen36:REJECT eval:REJECT sparkinfer auto-eval verdict: REJECT eval-qwen35:REJECT 64k-context labels Jul 16, 2026
@skyrocket2026

Copy link
Copy Markdown
Member

❌ sparkinfer auto-eval — 2a5705c

metric value
label eval:REJECT
Qwen3.5 score eval-qwen35:REJECT (fail)
Qwen3.6 score eval-qwen36:none (pass)
Qwen3.5 vs same-box main 285.38 tok/s → +0.0% (+0.0)
Qwen3.5 scored decode (32768 ctx · 32k-context) 285.42 tok/s
Qwen3.5 scored prefill (4096 ctx · 4k-context) 6311.1 pp tok/s
Qwen3.5 correctness top-1 90.4% · KL 0.0378
Qwen3.5 128-token no-regression gate 296.34 tok/s vs main 296.7 tok/s · pass
Qwen3.5 4k-context no-regression gate 286.73 tok/s vs main 286.72 tok/s · pass
Qwen3.5 32k-context no-regression gate 285.42 tok/s vs main 285.38 tok/s · pass
Qwen3.5 64k-context no-regression gate 285.45 tok/s vs main 285.44 tok/s · pass
Qwen3.5 4k prefill no-regression gate 6311.1 pp tok/s vs main 7792.88 pp tok/s · fail
Qwen3.5 32k prefill no-regression gate 5475.44 pp tok/s vs main 7662.72 pp tok/s · fail
Qwen3.5 64k prefill no-regression gate 5510.17 pp tok/s vs main 7825.4 pp tok/s · fail
Qwen3.5 128k prefill no-regression gate 0.0 pp tok/s · pass
Qwen3.6 vs same-box main 462.2 tok/s → +0.1% (+0.4)
Qwen3.6 scored decode (4096 ctx · 4k-context) 462.63 tok/s
Qwen3.6 correctness top-1 95.4% · KL 0.0363
Qwen3.6 128-token no-regression gate 488.72 tok/s vs main 488.75 tok/s · pass
Qwen3.6 512-context no-regression gate 482.03 tok/s vs main 481.93 tok/s · pass
Qwen3.6 4k-context no-regression gate 462.63 tok/s vs main 462.2 tok/s · pass
Qwen3.6 16k-context no-regression gate 450.3 tok/s vs main 450.27 tok/s · pass
Qwen3.6 32k-context no-regression gate 425.35 tok/s vs main 425.36 tok/s · pass
Qwen3.5 optimize eval:REJECT · 285.42 tok/s · fail
Qwen3.5 optimize — Qwen3.6-35B-A3B guard accuracy top-1 95.4% · KL 0.0363 · pass
Qwen3.5 optimize — Qwythos-9B (Q4_K_M) 128 296.34 tok/s · pass
Qwen3.5 optimize — Qwythos-9B (Q4_K_M) 4k 286.73 tok/s · pass
Qwen3.5 optimize — Qwythos-9B (Q4_K_M) 32k 285.42 tok/s · pass
Qwen3.5 optimize — Qwythos-9B (Q4_K_M) 64k 285.45 tok/s · pass
Qwen3.6 optimize eval:none · 462.63 tok/s · pass
Qwen3.6 optimize — Qwythos-9B (Q4_K_M) guard accuracy top-1 90.4% · KL 0.0378 · pass
Qwen3.6 optimize — Qwen3.6-35B-A3B 128 488.72 tok/s · pass
Qwen3.6 optimize — Qwen3.6-35B-A3B 512 482.03 tok/s · pass
Qwen3.6 optimize — Qwen3.6-35B-A3B 4k 462.63 tok/s · pass
Qwen3.6 optimize — Qwen3.6-35B-A3B 16k 450.3 tok/s · pass
Qwen3.6 optimize — Qwen3.6-35B-A3B 32k 425.35 tok/s · pass

No context cleared the 2% significance gate while at least one context regressed. Auto-closing this PR.

RTX 5090 (sm_120) · 128/512/4k/16k/32k guarded · Qwen3.5 prefill at 4k/32k/64k · scored vs same-box main · built from source · correctness vs llama.cpp. Automated — not merged; merge manually after review.

@skyrocket2026

Copy link
Copy Markdown
Member

Closed: 3 evaluations with no verified speedup or rejection

This PR received 3 completed sparkinfer auto-evaluations labeled eval:none or eval:REJECT (limit: more than 2).

Open a fresh PR if you have a new optimization to try.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

32k-context UI-only: strongest measured context in sparkinfer eval area:kernels subsystem (emission weight 0.42) area:runtime subsystem (emission weight 0.26) eval:REJECT sparkinfer auto-eval verdict: REJECT eval-qwen35:REJECT eval-qwen36:none re-evaluate Winner merged — rebase onto main; bot re-evaluates on push test-on-5090 Maintainer-approved to evaluate on RTX 5090 (greenlight)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants