Skip to content

sm12x: add tuned FP8 W8A8 block config for N=4096,K=12288 - #37

Merged
jasl merged 1 commit into
jasl:codex/ds4-sm120-min-enablefrom
alexbi29:sm12x/tuned-fp8-config-n4096-k12288
Aug 3, 2026
Merged

sm12x: add tuned FP8 W8A8 block config for N=4096,K=12288#37
jasl merged 1 commit into
jasl:codex/ds4-sm120-min-enablefrom
alexbi29:sm12x/tuned-fp8-config-n4096-k12288

Conversation

@alexbi29

@alexbi29 alexbi29 commented Aug 3, 2026

Copy link
Copy Markdown

Adds the one dense FP8 block-GEMM shape DeepSeek-V4-Flash uses that has no tuned config for RTX PRO 6000 Blackwell, so every boot logs Using default W8A8 Block FP8 kernel config. Performance might be sub-optimal!.

Tuned with benchmarks/kernels/benchmark_w8a8_block_fp8.py on 2x RTX PRO 6000 Blackwell Max-Q Workstation Edition (SM120), full default sweep M = 1..4096 (18 entries).

Filed under the non-Max-Q device name to match the configs added in e8b14e236d and the aliases in _SM12X_TUNED_CONFIG_DEVICE_ALIASES — same silicon and memory bandwidth, so one config serves the family.

Measured honestly: no throughput gain

A same-session A/B, order-controlled:

Arm Order Decode median avg
tuned 1st 304.0 303.1
baseline 2nd 287.0 286.3
tuned (re-run) 3rd 285.2 285.5

The tuned re-run matches baseline — the apparent +5.9% was first-benchmark-of-session drift, not the config. Prefill carries the same confound and I did not control for it, so I don't claim those numbers either.

So this is submitted as completeness for the config set (removes the warning, replaces a heuristic tile choice with measured ones, correctness verified), not as a performance improvement. Happy to drop it if you'd rather only carry configs with a demonstrated win.

Context: found while root-causing the DSv4 illegal-memory-access reported in vllm-project#41834 (comment).

DeepSeek-V4-Flash uses an N=4096, K=12288 dense FP8 block GEMM that has no
tuned config for RTX PRO 6000 Blackwell, so every boot logs:

    Using default W8A8 Block FP8 kernel config. Performance might be
    sub-optimal! Config files not found at [...N=4096,K=12288,
    device_name=NVIDIA_RTX_PRO_6000_Blackwell_Workstation_Edition...]

Tuned with benchmarks/kernels/benchmark_w8a8_block_fp8.py on 2x RTX PRO 6000
Blackwell Max-Q Workstation Edition (SM120), covering the full default batch
sweep M = 1..4096. Filed under the non-Max-Q device name to match the existing
configs from e8b14e2 and the Max-Q/Server aliases in
_SM12X_TUNED_CONFIG_DEVICE_ALIASES -- same silicon and memory bandwidth, so one
config serves the family.

Measured honestly: this removes the warning and replaces a heuristic tile choice
with measured ones, but a same-session A/B showed NO throughput gain beyond
run-to-run drift (decode: tuned 285.5 avg, baseline 286.3 avg, first-run-of-
session 303.1 -- the apparent win was ordering drift). This shape is evidently
not hot enough in the step time to matter. Submitted as correctness/tidiness for
the config set, not as a performance improvement.

Signed-off-by: Alex Bilichenko <abilichenko@gmail.com>
@jasl
jasl merged commit de114f4 into jasl:codex/ds4-sm120-min-enable Aug 3, 2026
3 of 4 checks passed
@jasl

jasl commented Aug 3, 2026

Copy link
Copy Markdown
Owner

Merged as de114f4 — thank you.

Verified before merging: 18 entries spanning M=1..4096, full key set on every
entry, BLOCK_SIZE_K=128 throughout matching the [128,128] block shape,
num_stages 3–5, no shared-memory overflow, and N=4096 is the model's
hidden_size so the shape is one DSv4-Flash actually hits.

To be explicit about what this merge does and does not vouch for: correctness
and completeness of the config set for RTX PRO 6000, not a speedup. Our CI
hardware is GB10, which is not in _SM12X_TUNED_CONFIG_DEVICE_ALIASES, so the
file is inert here and we have no way to measure it. That is a limitation on our
side, not a reservation about the work.

The part worth calling out is that you caught your own result. A +5.9% that
survives into a PR description is the normal outcome; running the arm a third
time and reporting that it fell back to baseline is not. That first-benchmark-of-
session drift is a trap this branch keeps walking into — we published a
performance table two days ago that had to be corrected for the same class of
error, and earlier today a stale serve on one node skewed a kernel benchmark I
was running. Submitting a config with "measured honestly: no throughput gain" in
the description is worth more to us than the config.

Also picked up your DSv4 illegal-memory-access report on
vllm-project#41834 — that one turned out to be considerably more serious for
this branch than the sampler chain you traced, and I am replying there separately
with what we found.

NTillmann added a commit to NTillmann/dgx-spark-deepseek-v4-flash-kernel-configs that referenced this pull request Aug 8, 2026
…esult

jasl/vllm#37 (alexbi29, merged 2026-08-03) added the same N=4096,K=12288 shape
for RTX PRO 6000 Blackwell (SM120), five days before this work, using the same
upstream tuner and the same 18-point grid.

It does not make this repo redundant: vLLM's _SM12X_TUNED_CONFIG_DEVICE_ALIASES
maps only the RTX PRO 6000 Max-Q and Server editions onto the Workstation name,
and NVIDIA_GB10 is absent, so GB10 resolves to its own filename and finds
nothing. Verified against the loader in the build this repo targets.

Their result independently corroborates the headline finding: an
order-controlled A/B on different SM12x silicon also measured no throughput
gain, tracing an apparent +5.9% to first-benchmark-of-session drift -- the same
confound encountered here. Two parties, two devices, same conclusion.
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