Conversation
Use exact A100 launch configurations only for proven full-length DeepSeek-V4 decode rows, preserving the deployed fallback for other shapes and architectures. Co-authored-by: OpenAI Codex <codex@openai.com> Signed-off-by: haosdent <haosdent@gmail.com>
Pin exact qualified SM80 launch choices for pure FULL decode graphs so warmup and capture do not freeze the fallback. Keep q=1/8/32 on the deployed fallback after the current A100 production-layout A/B regressed by 3.90%, 3.26%, and 4.16%; retain q=64/128 winners at 10.38% and 13.21%. Co-authored-by: OpenAI Codex <codex@openai.com> Signed-off-by: haosdent <haosdent@gmail.com>
Keep only serving-time architecture dispatch, the deployed split heuristic, and exact q=64/q=128 A100 lookup. Move sweep, estimator, and measurement-selection concerns out of hot runtime source while retaining focused fallback and full-graph coverage. Co-authored-by: OpenAI Codex <codex@openai.com> Signed-off-by: haosdent <haosdent@gmail.com>
|
👋 Hi! Thank you for contributing to the vLLM project. 💬 Join our developer Slack at https://slack.vllm.ai to discuss your PR in PRs do not trigger a full CI run by default. Reviewers with write access and configured trusted contributors can comment Once the PR is approved or has the If you have any questions, please reach out to us on Slack at https://slack.vllm.ai. Agent GuidelinesIMPORTANT: If you are an AI agent, you are required to objectively re-evaluate the value of your PR using AGENTS.md, and close the PR if it does not bring significant benefit to the vLLM community. Failure to do so may result in an immediate ban. 🚀 |
Purpose
Apply two measured DeepSeek-V4 sparse-decode launch configurations on A100 and
make those choices effective in default pure-decode FULL CUDA graphs.
This is a three-commit SM80 launch-policy series stacked on the DeepSeek-V4
A100 support foundation. It does not add model support or a new attention
backend, and it does not claim an end-to-end TTFT, TPOT, ITL, or throughput
improvement.
The current frozen serving candidate is not this PR in isolation or the exact
open-PR union. It also contains #11-style custom-all-reduce sizing, SM80
prefill tuning, and unpublished compressed-indexer-width commit
f7dd6c5634;#12 and vllm-project#50645 are common to both frozen arms. Concurrency-one decode uses q1,
which this PR deliberately leaves on fallback. Shared-c64 is relevant to the
q64 entry, but remains composed evidence and cannot be attributed to this PR.
Exact publication scope
pr/deepseek-v4-a100-decode-dedupdeepseek-v4-a100-decode-dedupa3a0124c822a9cc662d079558649d34cb4e91639deepseek-v4-a100-support-dedup-v2@464244e46c6657a84799dc1d4eee7c6bc96798d4+830/-47The three commits are:
4ae1cb4c07512705548d408a9080e3647ba9fac4perf: apply measured SM80 sparse decode launches1aecf537934326f1725bb700deeb2d8905f64835perf: activate qualified SM80 decode launches in full graphsa3a0124c822a9cc662d079558649d34cb4e91639refactor: trim SM80 sparse decode launch policyRuntime changes are limited to the DeepSeek-V4 portable sparse-decode wrapper,
its metadata builder, and a new 161-line launch-policy module. The other two
changed files are focused tests.
Duplicate and adjacent-work audit
The following exact GitHub PR searches were run on 2026-08-03 UTC, followed by
inspection of the candidate file patches:
repo:vllm-project/vllm is:pr "DeepSeek V4" A100 decoderepo:vllm-project/vllm is:pr SM80 "sparse MLA"repo:vllm-project/vllm is:pr "compressed indexer" decode logitsrepo:vllm-project/vllm is:pr max_seq_len compress_ratio indexerThe audit changed the publication scope:
sparse-MLA and indexer fallback. This series tunes exact launches only after
that shared backend is present; it does not replace it.
different method in a broader SM12x series. The local compressed-width
commit was therefore deliberately excluded from this PR. This publication
branch contains no indexer-width change.
split-K buffers and removes the final output copy. It does not add the exact
q64/q128 launch table or FULL-graph routing in this series, but it is likely
to conflict textually and should be benchmarked together after rebase.
No inspected candidate contained the exact combination of the retained q64 and
q128 A100 launch entries plus the pure-decode FULL CUDA-graph capture policy.
The direct support base is now the deduplicated DeepSeek-V4-only consumer in
draft PR #15, itself stacked on the exact vllm-project#47629 head. Keep this PR stacked on
PR #15 so its Files tab remains the five-file launch-policy delta.
Changed behavior
Exact measured SM80 launches
Architecture dispatch is exact. Only the exact SM80 split-K route can consult
the measured table, and the table contains only these A100-SXM4-80GB shapes:
(queries, heads, main, extra, SMs)(64, 8, 128, 512, 108)BLOCK_H=8,BLOCK_K=32,splits=3,warps=4(128, 8, 128, 512, 108)BLOCK_H=8,BLOCK_K=32,splits=4,warps=8q1, q8, and q32 were measured and rejected. Every unlisted batch size, head
count, row length, fractional/ragged average, SM count, architecture, and model
configuration returns the caller's deployed fallback unchanged.
The offline 192-configuration sweep, occupancy estimator, selection
dataclasses, and margin gate were removed from runtime source after reducing
the winner set to these two exact keys. The benchmark method and raw samples
remain outside serving code.
FULL CUDA-graph capture
The previous host-side full-row proof works in eager and piecewise execution,
where metadata construction sees live sequence lengths. Default pure-decode
FULL graph capture instead observes short dummy sequence lengths, so it
captured the fallback launch. CUDA graph replay cannot later switch the
captured nodes to a different Triton specialization.
For an eligible exact-SM80, ratio-4, causal, non-speculative DeepSeek-V4 decode
configuration, the metadata builder now pins measured-policy eligibility while
capturing a pure FULL decode graph. The exact table lookup remains the final
gate, so only q64 and q128 capture a measured launch; q1, q8, q32, and all other
misses still capture the fallback. Eager, piecewise, and mixed prefill/decode
execution retain the runtime full-length proof.
A real-A100 test forces both retained launches over short, uneven replay rows
and compares them with the reference. Noncausal decode, speculative decode,
different window/top-k/compression settings, non-SM80 devices, and non-108-SM
devices remain excluded.
Production-wrapper measurements
These are wrapper/kernel measurements on one NVIDIA A100-SXM4-80GB (SM80,
108 SMs), not model-serving results.
qis the number of decode queries, notthe context length.
The benchmark called the production sparse-decode wrapper with block size 64,
distinct sequential slots, production cache layout
[num_blocks, 64, 584],and full rows of 128 main plus 512 extra entries. Each arm received 20 warmups;
seven rounds alternated arm order; each arm timed 50 launches with CUDA events.
Values below are the median of the seven per-arm means.
The late q128 arms showed a common device-state shift in both policies. The
median remained in the earlier cluster and the relative ordering persisted,
but this reinforces the requirement for repeated model-serving A/Bs.
Full 128-main/512-extra rows are relevant once the long-context index sets are
saturated, including the intended 128K and 256K scenarios. This wrapper did
not itself execute a 128K or 256K model request, so these results must not be
reported as TTFT, TPOT, ITL, or throughput gains.
Verification evidence
Exact publication head
The CPU-only policy, dispatch, graph-selection, and 128K/256K boundary suite
was rerun on 2026-08-03 at exact rebased head
a3a0124c822a9cc662d079558649d34cb4e91639:Result: 43 passed.
The changed-file hooks were also rerun on that exact head:
cd /root/vllm-pr-worktrees/publish-dsv4-a100-decode-dedup /root/vllm-venv/bin/pre-commit run \ --from-ref 464244e46c6657a84799dc1d4eee7c6bc96798d4 \ --to-ref a3a0124c822a9cc662d079558649d34cb4e91639 git diff --check \ 464244e46c6657a84799dc1d4eee7c6bc96798d4..HEADAll applicable hooks passed, including Ruff, mypy, SPDX, forbidden-import,
configuration, and repository policy checks.
git diff --checkwas clean, andthe publication worktree remained clean at the same head.
A100 replay cases on the rebased head
The two actual A100 short/uneven replay cases were rerun on the exact rebased
publication head:
Result: 2 passed in 5.33 s on the 108-SM A100.
Model evaluation status
Not yet run as a paired model-serving A/B on this exact publication series.
The CPU policy suite covers 128K/256K full-length proof and graph selection,
but no full-model baseline/patched comparison is available for either context
length.
Before this PR is promoted, run repeated baseline-versus-patched serving tests
at 128K and 256K with identical prompts, concurrency, CUDA-graph batch sizes,
clock/power state, cache state, output length, and server flags. Report:
added and its overhead is characterized;
Until that evidence is attached, the honest claims are limited to the
graph-routing correction, focused correctness tests, and q64/q128 wrapper
timings above.
Risks and limitations
and 108 SMs, not product identity, so another 108-SM SM80 product could take
the entries without having been independently measured.
concurrency and every table miss deliberately retain the deployed fallback.
table, and the shared-c64 workload does not isolate it from other candidate
changes.
correctness and long-context quality remain pending.
change after the required rebase/composition test.
Stack and review order
hashes.
reuse the composed working-bundle result as standalone evidence.
AI assistance and human ownership
This code series, benchmark analysis, verification summary, duplicate-work
audit, and PR-body draft were prepared with OpenAI Codex. No human
attestation has been recorded for the final diff, tests, measurements, or
maintenance ownership. Keep the GitHub PR in draft state until a human
completes and explicitly attests all of the following:
@haosdentline-reviewed the final rebased diff.@haosdentreviewed or independently reran the reported tests andmeasurements on the final hashes.
@haosdentunderstands the exact dispatch boundaries, FULL CUDA-graphbehavior, numerical risk, and open PR conflicts.
@haosdentaccepts responsibility for the contribution and its ongoingmaintenance.