Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
1ba07d1
pplx-decider: serve the pinned checkpoint and document Public231 C1
cursoragent Oct 24, 2026
b6fa9d0
pplx-decider: omit all-ones full-attention masks
cursoragent Oct 25, 2026
778609f
pplx-decider: admit thinking.enabled=false
cursoragent Oct 25, 2026
7233620
pplx-decider: require causal_conv1d before the Qwen conv fallback
cursoragent Oct 25, 2026
87fbd5d
pplx-decider: keep the sm_90 cubin in the causal-conv1d build
cursoragent Oct 25, 2026
353d61c
pplx-decider: bind FLA chunk and SM90 FlashInfer GDN prefill
cursoragent Oct 25, 2026
8fc4af4
pplx-decider: insert the sm_89 cubin next to upstream sm_90
cursoragent Oct 25, 2026
0b20933
pplx-decider: report FLA chunk as the linear-attention bind
cursoragent Oct 25, 2026
2d375ae
pplx-decider: keep sm_90 and sm_89 cubins for the L20X-labeled GPU
cursoragent Oct 25, 2026
f52b39e
pplx-decider: bind FlashInfer on capability 9.0 and keep FLA chunk ready
cursoragent Oct 25, 2026
f968e57
pplx-decider: document the dual ready bind without a latency claim
cursoragent Oct 25, 2026
be872f7
pplx-decider: record the verified f968e576 Public231 C1
cursoragent Oct 25, 2026
3c72f02
pplx-decider: report why FlashInfer stayed unbound on capability 9.0
cursoragent Oct 25, 2026
5a85f45
pplx-decider: record the f968e576 remeasure as the new primary
cursoragent Oct 25, 2026
a50b9aa
pplx-decider: use FlashInfer only for one short sequence
cursoragent Oct 25, 2026
dc644ab
pplx-decider: record the FlashInfer gate failure and keep f968e576
cursoragent Oct 25, 2026
0f1982f
pplx-decider: describe short-sequence dispatch in the architecture note
cursoragent Oct 25, 2026
a4022e3
pplx-decider: hold FlashInfer and prefer cuDNN SDPA
cursoragent Oct 25, 2026
0dcaa0a
pplx-decider: record the a50b9aa gate failure
cursoragent Oct 25, 2026
88e7702
pplx-decider: fuse the text MLP gate and up GEMMs
cursoragent Oct 25, 2026
8b4ee32
pplx-decider: record the cuDNN-first gate failure
cursoragent Oct 25, 2026
fbabbb4
pplx-decider: compile the language-model forward
cursoragent Oct 25, 2026
e36b32e
pplx-decider: record the fused gate-up gate failure
cursoragent Oct 25, 2026
7e3b1be
pplx-decider: compile only sequences longer than 512 tokens
cursoragent Oct 25, 2026
7d43e59
pplx-decider: isolate the median forward from compile residue
cursoragent Oct 25, 2026
34ba5de
pplx-decider: report compile_median=eager on CPU
cursoragent Oct 25, 2026
ffae182
pplx-decider: reuse FlashInfer cu_seqlens and leave compile off
cursoragent Oct 25, 2026
4b99b73
pplx-decider: keep one cu_seqlens buffer per linear layer
cursoragent Oct 25, 2026
17a7b12
pplx-decider: reuse the FlashInfer recurrent-state workspace
cursoragent Oct 25, 2026
3afb472
pplx-decider: fuse residual RMSNorm and drop the state ring
cursoragent Oct 25, 2026
705ae08
pplx-decider: fuse residual RMSNorm only above 512 tokens
cursoragent Oct 25, 2026
a6f4d9a
pplx-decider: let FlashInfer choose the low-parallelism GDN kernel
cursoragent Oct 25, 2026
3ecdf5a
pplx-decider: skip the q/k repeat on FlashInfer GVA
cursoragent Oct 25, 2026
fcf5e2b
pplx-decider: pack unrepeated q/k before the L2-norm view
cursoragent Oct 25, 2026
801ef7b
pplx-decider: fuse the linear gated RMSNorm
cursoragent Oct 25, 2026
2bbbe4e
pplx-decider: fuse silu(gate)*up with FLA swiglu_fwd
cursoragent Oct 25, 2026
509bdd2
pplx-decider: fail closed on review comments and drop rejected SwiGLU
cursoragent Oct 25, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,10 @@ Python screenshot worker, Valen-Preview-0923 has a Python reference worker for
text and one-image state, CLM has a stub-encoder contract recipe, and OmniJev-4B
v1.1 has its checkpoint export and CPU contract, with no worker yet. D3
(Decision 3.0) has a Python reference worker that runs the checkpoint's own
pinned runtime for text, image and video state:
pinned runtime for text, image and video state. pplx-decider-v1.1-27b has a
Python reference worker for the pinned Perplexity checkpoint. Public231
concurrency-1 latency for heads `1ba07d1`, `f968e576`, `ffae182`, `4b99b73`, and `fcf5e2b` is recorded in
the recipe:

| Model | Status |
| --- | --- |
Expand All @@ -181,6 +184,7 @@ pinned runtime for text, image and video state:
| LFM2.5-350M | [Transformers worker](recipe/lfm2/README.md); text state and independent choice questions |
| OmniJev-4B v1.1 | [Checkpoint export and CPU contract](recipe/omnijev/README.md) only; the native worker is in progress ([#114](https://github.com/ThinkFlowLab/system1-omni/issues/114)) |
| D3 (Decision 3.0) | [Python reference worker](recipe/d3/reference.md) on the checkpoint's pinned runtime; `choice`/`noul`/`score` over text, image and video state; author-run on A100 for text and media serving (see the integration and media PRs) |
| pplx-decider-v1.1-27b | [Python reference worker](recipe/pplx_decider/README.md) on the pinned checkpoint; `choice`/`noul`/`score` text plus up to four images. Lab L20X-labeled GPUs are the H200 target. Kept Public231 primary is `fcf5e2b`: 231/231, p50 87.782 ms, p95 291.183 ms, grouped-value FlashInfer with q and k packed before the L2 view (p50 −1.30%, p95 −1.56% versus `4b99b73` 88.942 / 295.797). `4b99b73` was p50 −4.20%, p95 −0.22% versus `ffae182` 92.844 / 296.458. Uncached all-sequence FlashInfer `3c72f02` is not the primary (p50 88.808 ms, p95 300.751 ms). Short-sequence FlashInfer `a50b9aa` missed its gate (p50 95.446 ms, p95 300.871 ms). cuDNN-first SDPA `0dcaa0ac` missed its gate (p50 138.501 ms, p95 332.859 ms). Fused gate-up `8b4ee326` missed its gate (p50 102.437 ms, p95 304.970 ms). Always-on dynamic compile `e36b32ed` missed the both-percentiles gate (p50 97.751 ms, p95 263.124 ms; p95 improved). The 512-token split `7e3b1be` missed its gate (p50 100.037 ms, p95 257.084 ms). Isolated-median compile `34ba5de` missed its gate (p50 97.084 ms, p95 256.679 ms; the 136-token probe was eager). The FlashInfer state-workspace ring `17a7b120` missed its gate (p50 89.165 ms, p95 295.723 ms). Always-on FLA residual RMSNorm `3afb472` missed its gate (p50 93.935 ms, p95 274.902 ms). Length-gated FLA residual RMSNorm `705ae089` missed its gate (p50 94.604 ms, p95 274.835 ms). `use_cp=auto` `a6f4d9a` missed its gate (p50 112.294 ms, p95 299.419 ms). Grouped-value `3ecdf5a` crashed in warmup (0/231, no p50 or p95). FLA fused gated RMSNorm `801ef7b` missed its gate (p50 89.172 ms, p95 274.790 ms). FLA `swiglu_fwd` `2bbbe4e` missed its gate (owner closeout p50 97.613 ms, p95 292.795 ms) and is not installed |

[Supported models and hardware](docs/supported-models.md) lists the devices
and where each worker has been run.
Expand Down
76 changes: 75 additions & 1 deletion benchmarks/latency-leaderboard.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,5 +82,79 @@ boundaries, and ticket episode duration is not request latency.
Append a dated campaign and auditable evidence without replacing prior results.
Compare new deployments with a reference measured in the same campaign. Different
hardware, workloads, precision, concurrency, clocks or quantile methods need
separate groups. Image replacement, repeated-image/cache workloads and higher
separate groups. The [pplx-decider recipe](../recipe/pplx_decider/README.md)
records a Public231 concurrency-1 run on 1× lab L20X (sm_89) at head
`1ba07d1`: stripped no-thinking twin, warmup 5, concurrency 1, clock
`successful_latency` / `post_to_body_json_and_schema_validation`. Primary
run1 was 231/231, p50 98.777 ms, p95 341.202 ms. The prior primary is the
remeasure of head `f968e576` on a lab GPU labeled L20X: warmup 5, concurrency
1, stock Public231 with `thinking.enabled=false`, metric `successful_latency`,
231/231, p50 94.077 ms, p95 300.200 ms. `/health` reported
`causal_conv1d=1.7.0`, `fla=0.5.2`, `flashinfer=null`,
`linear_attention=fla-chunk`, and `compute_capability=9.0`. Against run1,
p50 is −4.700 ms (−4.76%) and p95 is −41.002 ms (−12.02%). An earlier paste
of 98.037 / 302.569 is not a primary. `ffae182` measured 231/231, p50
92.844 ms, p95 296.458 ms, p50 −1.31% and p95 −1.25% versus `f968e576`.
`4b99b73` measured 231/231, p50 88.942 ms, p95 295.797 ms,
p50 −4.20% (−3.902 ms) and p95 −0.22% (−0.661 ms) versus `ffae182`.
The kept primary is `fcf5e2b`: 231/231, p50 87.782 ms, p95 291.183 ms,
p50 −1.30% (−1.160 ms) and p95 −1.56% (−4.614 ms) versus `4b99b73`.
`/health` reported `gdn_layout=gva`, `gva_layers=48`,
`gdn_qk_contiguous` true, `gdn_use_cp` false, `gdn_cp_heuristic` null,
`rms_norm=eager`, `fused_rms_norm_layers=0`, `cu_seqlens_slots=48`,
`flashinfer_status=bound`, `flashinfer=0.6.16.post3`, `compile=default`,
and `compile_median=eager`. Quality: `choice_acc=0.9065` (139),
`noul_acc=0.8784` (74), `score_mae=0.2035` (18). Warmup, concurrency,
the latency metric, and compute capability were not restated in that
paste. The `4b99b73` paste reported `/health` `compile=default`,
`compile_median=eager`, `sdpa=default`, `mlp=default`,
`fused_gate_up_layers=0`, `linear_attention=flashinfer+fla+causal_conv1d`,
`flashinfer_status=bound`, `flashinfer=0.6.16.post3`, and
`cu_seqlens_slots=48`, with the same quality digits. Uncached
all-sequence FlashInfer `3c72f02` measured 231/231, p50 88.808 ms, p95
300.751 ms (p50 −5.60%, p95 +0.18% versus `f968e576`) and failed the gate
that both percentiles must improve. It is not the primary. Short-sequence
FlashInfer `a50b9aa` measured 231/231, p50 95.446 ms, p95 300.871 ms
(p50 +1.46%, p95 +0.22% versus `f968e576`) and failed the same gate. It is
not the primary. cuDNN-first SDPA `0dcaa0ac` measured 231/231, p50
138.501 ms, p95 332.859 ms (p50 +47.22%, p95 +10.88%) and failed the same
gate. It is not the primary. Fused gate-up `8b4ee326` measured 231/231,
p50 102.437 ms, p95 304.970 ms (p50 +8.89%, p95 +1.59%) and failed the
same gate. It is not the primary. Always-on dynamic compile `e36b32ed`
measured 231/231, p50 97.751 ms, p95 263.124 ms (p50 +3.91%, p95 −12.35%)
and failed the same gate because p50 rose. It is not the primary. The
512-token compile split `7e3b1be` measured 231/231, p50 100.037 ms, p95
257.084 ms (p50 +6.34%, p95 −14.36%) and failed the same gate. p95
improved further and p50 was worse than always-on. It is not the primary.
Isolated-median compile `34ba5de` measured 231/231, p50 97.084 ms, p95
256.679 ms (p50 +3.20%, p95 −14.50%) and failed the same gate. The
136-token probe was eager and added no compiled frames. It is not the
primary. The FlashInfer state-workspace ring `17a7b120` measured
231/231, p50 89.165 ms, p95 295.723 ms (p50 +0.25%, p95 −0.02%) and
failed the same gate. Quality: `choice_acc=0.906` (139),
`noul_acc=0.878` (74), `score_mae=0.203` (18). It is not the primary.
Always-on FLA residual RMSNorm `3afb472` measured 231/231, p50
93.935 ms, p95 274.902 ms (p50 +5.61%, p95 −7.06%) and failed the
same gate. Quality: `choice_acc=0.9065` (139), `noul_acc=0.8784` (74),
`score_mae=0.2052` (18). It is not the primary. Length-gated FLA
residual RMSNorm `705ae089` measured 231/231, p50 94.604 ms, p95
274.835 ms (p50 +6.37%, p95 −7.09%) and failed the same gate.
Quality: `choice_acc=0.906` (139), `noul_acc=0.878` (74),
`score_mae=0.205` (18). It is not the primary. `use_cp=auto`
`a6f4d9a` measured 231/231, p50 112.294 ms, p95 299.419 ms
(p50 +26.26%, p95 +1.22%) and failed the same gate. Quality:
`choice_acc=0.906` (139), `noul_acc=0.878` (74),
`score_mae=0.204` (18). It is not the primary. Grouped-value
`3ecdf5a` returned 0/231, `stop_reason=warmup_failed`, with no p50
or p95. Quality was N/A. It is not a latency result. FLA fused gated RMSNorm `801ef7b` measured 231/231, p50 89.172 ms,
p95 274.790 ms (p50 +1.58%, p95 −5.63%) and failed the same gate.
Quality: `choice_acc=0.9065` (139), `noul_acc=0.8784` (74),
`score_mae=0.1992` (18). It is not the primary. FLA `swiglu_fwd`
`2bbbe4e` is not the primary: the owner closeout records p50 97.613 ms
and p95 292.795 ms. Success count, quality, and `/health` were not
restated. The engine does not install it.
These L20X measurements stay in this group and do not enter the H800
table above. Ready is not limited to capability 9.0.

Image replacement, repeated-image/cache workloads and higher
concurrency have not been measured here; add their own frozen inputs before ranking.
33 changes: 33 additions & 0 deletions docs/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,39 @@ per loaded executor. The [Decider native worker](../recipe/decider/README.md)
also uses this runtime and can opt into outstanding-request and processed-token
budgets plus HTTP request deadlines. Shared processing orchestration,
cross-request batch assembly, compatibility grouping and dynamic batching are planned.
The pplx-decider reference worker runs the checkpoint's own loader instead of
this shared Qwen executor: the checkpoint's full-attention layers are
noncausal, and the language kernels in `src/backends/cuda/qwen3_5/attention.cu`
are causal. Its readout is a separate 255-row tensor. After that load, the
worker marks those full-attention modules noncausal and omits the explicit
SDPA mask when the padding mask is all true. Linear-attention chunk prefill
on the lab L20X-labeled GPU uses FLA 0.5.2 plus causal_conv1d, including
when that GPU reports capability 8.9. Capability 9.0 uses all-sequence FlashInfer when
`flashinfer-python` 0.6.16.post3 imports. The kept primary rotates 48
`cu_seqlens` buffers per device and length, passes `use_cp` false,
skips the q/k repeat, and packs q and k before FLA's L2-norm view.
`3ecdf5a` crashed in warmup on the unpacked view. `801ef7b` fused
the 48 linear gated RMSNorms and missed the median, so that kernel
stays off. `2bbbe4e` replaced `silu(gate) * up` with FLA `swiglu_fwd`
and the owner closeout rejected it (p50 97.613 ms, p95 292.795 ms),
so that kernel stays off. Gate and up GEMMs stay separate. Residual
RMSNorm and the gated output norm stay eager. An unknown
`PPLX_GDN_PREFILL` fails closed on every device, including capability
8.9.
`use_cp=auto` on `a6f4d9a` missed both percentiles.
Always-on fusion `3afb472` and the 512-token
gate `705ae089` both missed the median.
FlashInfer allocates its own state workspace. The 48-slot state
ring `17a7b120` missed the gate.
`PPLX_GDN_PREFILL=fla` reproduces the prior `f968e576` chunk.
`PPLX_GDN_PREFILL=short` is the rejected one-sequence ≤256
dispatch. Capability 8.9, and capability 9.0 without that package, stay
ready on FLA chunk. SDPA stays on the checkpoint order.
`PPLX_SDPA=cudnn-first` and `PPLX_MLP=fused-gate-up` are refused.
The forward stays eager. `PPLX_COMPILE=dynamic` and
`PPLX_COMPILE=dynamic-tail` are rejected opt-ins. Ready accepts the
FLA chunk and either FlashInfer dispatch. CuteDSL and CUDA graphs are
not selected.

Cua-S1 and Open-Jev compute their decision heads on the CPU after downloading
the final hidden state. Decider projects its selected LM-head rows on CUDA.
Expand Down
17 changes: 17 additions & 0 deletions docs/supported-models.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ Models that are being added are also tracked in issues labeled [new model](https
| CLM-v0.1-8B | [Native Rust engine](../src/models/clm/README.md), `clm-run`, in front of a Qwen3-8B `/v1/embeddings` server | Engine-only agreement **4.5e-06** on identical vectors ([#29](https://github.com/ThinkFlowLab/system1-omni/pull/29), [validation](../recipe/clm/native/VALIDATION.md)); contract checks documented ([#23](https://github.com/ThinkFlowLab/system1-omni/pull/23)) | **Validated on compute capability 8.9** ([#29](https://github.com/ThinkFlowLab/system1-omni/pull/29), [validation](../recipe/clm/native/VALIDATION.md)) | Unverified | Rust to build and a separate Qwen3-8B `/v1/embeddings` server for the encoder; the engine itself has no device-specific code |
| OmniJev-4B v1.1 | None yet: [checkpoint export and CPU contract](../recipe/omnijev/README.md); the native worker is in progress ([#114](https://github.com/ThinkFlowLab/system1-omni/issues/114)) | Request contract, preparation, heads and finishing checked against the reference ([#120](https://github.com/ThinkFlowLab/system1-omni/pull/120)); no inference | Not yet | Not supported | Python 3.10 reference environment for the export and fixtures |
| D3 (Decision 3.0) | [Python reference worker](../recipe/d3/reference.md) on the checkpoint's pinned runtime — text, image and video state over `choice`/`noul`/`score`, with the deliberate transport differences documented in the recipe; the native worker is in progress ([#136](https://github.com/ThinkFlowLab/system1-omni/issues/136)) | Unverified | Author-run on NVIDIA A100 (sm_80): serving smoke and reference parity for text and media (exact decisions, max delta 0.0); evidence in the integration and media PRs. Owner: @MrDongsls. | Unverified | Python 3.12, the [pinned runtime requirements](../recipe/d3/requirements.txt), the [pinned package](https://huggingface.co/vllm-sr/d3) (~52 GB); [media budgets and the 64 MiB total request cap](../recipe/d3/reference.md) |
| pplx-decider-v1.1-27b | [Python reference worker](../recipe/pplx_decider/README.md) on the checkpoint's own runtime. Text and up to four images; `choice`/`noul`/`score`. Native CUDA executor is not this worker. Lab L20X-labeled GPUs are the H200 target. The causal-conv1d build keeps sm_90 and sm_89. Capability 8.9 is ready on FLA chunk. Capability 9.0 uses all-sequence FlashInfer. The kept primary rotates 48 `cu_seqlens` buffers per device and length, passes `use_cp` false, skips the q/k repeat, and packs q and k before the L2-norm view. `801ef7b` fused the 48 linear gated RMSNorms and missed the median (p50 89.172 ms, p95 274.790 ms), so that kernel stays off. `2bbbe4e` replaced `silu(gate) * up` with FLA `swiglu_fwd` and the owner closeout rejected it (p50 97.613 ms, p95 292.795 ms), so that kernel stays off. Gate and up GEMMs stay separate. Residual RMSNorm and the gated output norm stay eager. An unknown `PPLX_GDN_PREFILL` fails closed on every device, including capability 8.9. `3ecdf5a` crashed in warmup (0/231). Always-on fusion `3afb472` and the 512-token gate `705ae089` missed the median. The 48-slot FlashInfer state ring `17a7b120` missed the gate. `PPLX_GDN_PREFILL=fla` reproduces the prior `f968e576` chunk. `PPLX_GDN_PREFILL=short` is the rejected ≤256 dispatch. SDPA stays on the checkpoint order. The fused gate-up GEMM is refused. The forward stays eager. `PPLX_COMPILE=dynamic` and `PPLX_COMPILE=dynamic-tail` are rejected opt-ins | Contract checks only; no inference | Reported load on 1× lab L20X (sm_89, ~140 GiB) at head `1ba07d1`: BF16 resident ~50333 MiB, no OOM. Historical primary: 231/231, p50 98.777 ms, p95 341.202 ms. Prior primary is the `f968e576` remeasure on the lab L20X-labeled GPU, `compute_capability=9.0`, `fla-chunk`, `flashinfer` null: 231/231, p50 94.077 ms, p95 300.200 ms (p50 −4.76%, p95 −12.02%). Prior primary `ffae182`: 231/231, p50 92.844 ms, p95 296.458 ms (p50 −1.31%, p95 −1.25%). Prior primary `4b99b73`: 231/231, p50 88.942 ms, p95 295.797 ms (p50 −4.20%, p95 −0.22%), 48-slot `cu_seqlens`, quality `choice_acc=0.9065` (139), `noul_acc=0.8784` (74), `score_mae=0.2035` (18). Kept primary is `fcf5e2b`: 231/231, p50 87.782 ms, p95 291.183 ms (p50 −1.30%, p95 −1.56%), grouped-value FlashInfer with q and k packed, same quality digits. Uncached all-sequence FlashInfer `3c72f02`: p50 88.808 ms, p95 300.751 ms, gate failed. Short-sequence FlashInfer `a50b9aa`: p50 95.446 ms, p95 300.871 ms, gate failed. cuDNN-first SDPA `0dcaa0ac`: p50 138.501 ms, p95 332.859 ms, gate failed. Fused gate-up `8b4ee326`: p50 102.437 ms, p95 304.970 ms, gate failed. Always-on dynamic compile `e36b32ed`: p50 97.751 ms, p95 263.124 ms, gate failed (p95 improved). 512-token compile `7e3b1be`: p50 100.037 ms, p95 257.084 ms, gate failed. Isolated-median compile `34ba5de`: p50 97.084 ms, p95 256.679 ms, gate failed (median probe was eager). FlashInfer state-workspace ring `17a7b120`: p50 89.165 ms, p95 295.723 ms, gate failed. Always-on FLA residual RMSNorm `3afb472`: p50 93.935 ms, p95 274.902 ms, gate failed. Length-gated FLA residual RMSNorm `705ae089`: p50 94.604 ms, p95 274.835 ms, gate failed. `use_cp=auto` `a6f4d9a`: p50 112.294 ms, p95 299.419 ms, gate failed. Grouped-value `3ecdf5a` crashed in warmup (0/231, no p50 or p95). The fused linear gated-norm candidate has no sample. Does not enter the H800 board | Not supported | Python 3.12, pinned checkpoint revision `14c9d90137962d300f3de95633f7b6535e80c5ce`, checkpoint `requirements.txt`, `causal-conv1d` 1.7.0, `flash-linear-attention` 0.5.2, optional `flashinfer-python` 0.6.16.post3. Shard sizes in the release manifest sum with the readout to about 48.6 GiB before activations |

- **Validated:** covered by the recipe on `main` or by the checks in the linked merged pull request.
- **Author-run:** recorded by the recipe author on the stated hardware and not independently reproduced; the row names its owner.
Expand All @@ -38,6 +39,22 @@ LAYA's English worker, Open-Jev and CLM support `choice`, `score`, and `noul` te
D3's reference worker serves the same three kinds for text, image and video
state (inline base64 media under the pinned runtime's per-item budgets);
its media serving evidence is author-run on the A100 above.
pplx-decider's reference worker admits those three kinds for text and up to
four images. The checked path is the CPU contract. The kept Public231
primary is `fcf5e2b` in the table: p50 87.782 ms, p95 291.183 ms,
grouped-value FlashInfer with q and k packed and a 48-slot `cu_seqlens` ring. The prior
primary `4b99b73` is p50 88.942 ms, p95 295.797 ms. `ffae182` is p50 92.844 ms, p95 296.458 ms. `f968e576` is p50
94.077 ms, p95 300.200 ms, `fla-chunk` at compute capability 9.0.
Uncached all-sequence FlashInfer, the ≤256 FlashInfer
dispatch, cuDNN-first SDPA, the fused gate-up GEMM, and the three
compile tips missed the gate and are not the primary. Compile improved
p95 and raised p50, including after the median route proved eager. The
FlashInfer state-workspace ring `17a7b120` missed the gate (p50 89.165
ms, p95 295.723 ms) and is not the primary. Always-on FLA residual
RMSNorm `3afb472` missed the gate (p50 93.935 ms, p95 274.902 ms) and
is not the primary. Length-gated FLA residual RMSNorm `705ae089`
missed the gate (p50 94.604 ms, p95 274.835 ms) and is not the primary.
`use_cp=auto` `a6f4d9a` missed the gate (p50 112.294 ms, p95 299.419 ms) and is not the primary. Grouped-value `3ecdf5a` crashed in warmup (0/231) and is not a latency result. FLA fused gated RMSNorm `801ef7b` missed the gate (p50 89.172 ms, p95 274.790 ms) and is not the primary. FLA `swiglu_fwd` `2bbbe4e` missed the gate (owner closeout p50 97.613 ms, p95 292.795 ms) and is not installed.
CLM has a row per path: the merged `clm-serve` recipe exercises those answer shapes with stub
embeddings and says nothing about decision quality, while the native engine's CUDA row is the
path through a real Qwen3-8B encoder. Its engine-only figure comes from the same comparison run
Expand Down
1 change: 1 addition & 0 deletions mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -81,4 +81,5 @@ nav:
- CLM stub-encoder contract: recipe/clm/README.md
- LFM2.5-350M choice worker: recipe/lfm2/README.md
- D3 reference worker: recipe/d3/reference.md
- pplx-decider reference worker: recipe/pplx_decider/README.md
- Contributing: CONTRIBUTING.md
Loading
Loading