Skip to content

row/QUANT-CT-MXFP4-C8-DIFF: first same-tool c8 node-trace — residual is MARLIN-structural (58%) - #52

Closed
localai-bot wants to merge 1 commit into
mainfrom
row/QUANT-CT-MXFP4-C8-DIFF
Closed

row/QUANT-CT-MXFP4-C8-DIFF: first same-tool c8 node-trace — residual is MARLIN-structural (58%)#52
localai-bot wants to merge 1 commit into
mainfrom
row/QUANT-CT-MXFP4-C8-DIFF

Conversation

@localai-bot

Copy link
Copy Markdown
Collaborator

Records-only. First same-tool nsys node-trace both engines at c8 (vLLM captured offline in-process; identical prompts, matched M=8). Fair graphed-vs-graphed decomposition of the ~3ms TPOT gap: MARLIN +1,377us (58%) — STRUCTURAL: 5 grouped-E1 GEMMs/layer (gate+up unfused, 144 CTAs) vs vLLM 4 dense fused (48 CTAs), +25% GEMM count/step (settles #50: the isolated-shape ubench was blind to count+CTA structure); flash +658us (28%, +11%/call at IDENTICAL grid, params diff unresolved); glue +290us (12%, portable-fusion class). BONUS: the binding ran EAGER — the classic-dense decode graph is opt-in default-OFF; enabling = byte-coherent +1.3% TPOT (gap 1184->305us, = vLLM's), needs its SACRED gate. Next: (1) decode-graph gate+flip, (2) the dense-direct marlin + gate_up fusion port (now per-step-justified), (3) flash params diff.

🤖 Generated with Claude Code

https://claude.ai/code/session_014fZAcg1WcU8V629k6HWKys

… dominant; eager gap graph-closeable; #50 settled (QUANT-CT-MXFP4-C8-DIFF)

Fresh same-tool (nsys --cuda-graph-trace=node BOTH sides) c8 decode-window
per-step diff on the POST-SLIVER binary (box d3b412f == main 4dd4e20/#51).
vLLM captured via offline LLM() + VLLM_ENABLE_V1_MULTIPROCESSING=0 (the online
EngineCore subprocess is not nsys-capturable at c8), same 8 corpus prompts,
matched M=8 (flash gridZ=64 both).

Per-step (median, ours EAGER vs vLLM graphed): SPAN 31.21 vs 28.49 ms/step
(+2.72; measured TPOT +2.98, GPU 91%). Terms: marlin +897us (180 vs 144 GEMM),
inter-kernel GAP +880us (ours 2us/launch eager vs vLLM 0.5us graph-replay),
flash +621us (IDENTICAL grid 1x3x64, +11% per-call), glue +256us.

VERDICT (a): dominant term = MARLIN — ours routes 5 grouped-MoE-E1 GEMM/layer
(gate_up UNFUSED, 144-CTA) vs vLLM 4 dense (gate_up FUSED, 48-CTA), +5.5%
eager/+8.5% graphed per step. SETTLES #50: the ubench grouped==dense parity was
vLLM-op-vs-vLLM-op at one isolated shape, blind to our kernel's +36 GEMM/step.
Fix = grouped->dense-direct + gate_up fuse (delicate ~2000-line port, scoped).
Secondary: the eager launch-gap is closed by the existing default-OFF decode
graph (VLLM_CPP_QWEN3_DENSE_DECODE_GRAPH), tested byte-coherent, but nets only
-334us (bandwidth contention reclaims +547) = +1.3% TPOT; SACRED gate owed.
No code shipped. Docs: STATUS (shrink -6, ratchet lowered), BENCHMARKS row,
benchmark-record + state (full tables), NOW.

FOLLOWING_AGENTS_PROTOCOL
Assisted-by: Claude Code:claude-opus-4-8 [ClaudeCode]
mudler added a commit that referenced this pull request Aug 6, 2026
…l 58% (#52)

row/QUANT-CT-MXFP4-C8-DIFF squash, records-only. First same-tool nsys
both engines at c8 (vLLM offline in-process, identical prompts, M=8).
Fair decomposition of the ~3ms TPOT gap: MARLIN +1,377us (58%) =
STRUCTURAL - 5 grouped-E1 GEMMs/layer (gate+up unfused, 144 CTAs) vs
vLLM's 4 dense fused (48 CTAs), +25% GEMM count/step; settles #50 (the
isolated-shape ubench was blind to count+CTA structure). Flash +658us
(28%, +11%/call at IDENTICAL grid, unresolved params diff). Glue +290us
(12%, portable-fusion class). The #51 binding ran EAGER: classic-dense
decode graph is opt-in OFF; graph-ON = byte-coherent, gap 1184->305us
(=vLLM), TPOT -1.3%, SACRED gate owed before flip. STATUS ratchet
lowered 287838->287832.

FOLLOWING_AGENTS_PROTOCOL
Assisted-by: Claude Code:claude-opus-4-8 [ClaudeCode]
@localai-bot

Copy link
Copy Markdown
Collaborator Author

Landed on main as the squash (mudler authorship).

🤖 Generated with Claude Code

https://claude.ai/code/session_014fZAcg1WcU8V629k6HWKys

@localai-bot localai-bot closed this Aug 6, 2026
mudler added a commit that referenced this pull request Aug 6, 2026
… handoff latency (#58)

row/SERVE-FRONTEND-SLICE squash, records-only. perf on the production
server at sustained c8: frontend cores ~0.8% busy; the ~0.26ms/step
residual (#52 same-tool; the 0.7ms was the superseded cross-tool figure)
is thread-handoff/syscall latency, not compute. We SAVE vLLM's ZMQ IPC.
Detok invisible (~2us/step at 128-tok); SSE JSON (nlohmann map churn)
is the only our-code hotspot on a nearly-idle core. Slow-vs-Fast detok
+ pydantic-vs-nlohmann recorded as general-serving levers, not parity
levers. MXFP4 verdict unchanged: c1 1.020 PASS / c2-c8 0.962-0.969,
GPU-intrinsic; final residual = num_splits cap + glue fusion.

FOLLOWING_AGENTS_PROTOCOL
Assisted-by: Claude Code:claude-opus-4-8 [ClaudeCode]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants