Skip to content

[None][fix] Use 128-token DSpark draft pages only where the dynamic-page kernels are verified (SM100/SM103) - #23

Closed
zheyuf wants to merge 1 commit into
brb-nv:user/brb/m3.1-flash-gb300-initialfrom
zheyuf:zheyuf/brb-dspark-page128-sm-gate
Closed

zheyuf wants to merge 1 commit into
brb-nv:user/brb/m3.1-flash-gb300-initialfrom
zheyuf:zheyuf/brb-dspark-page128-sm-gate

Conversation

@zheyuf

@zheyuf zheyuf commented Oct 28, 2026

Copy link
Copy Markdown
Collaborator

Description

#22 lets the standalone DSpark drafter's draft pool take the target's 128-token pages when the DFlash TRTLLM ops serve them (dflash_trtllm_supports_page_size). That rule did not depend on the GPU. The DFlash TRTLLM ops run on SM100-SM109 (is_sm_100f, tensorrt_llm/_utils.py:742-745), so on Rubin (SM107) the draft pool also became 128-token and paired with the target for joint block reuse (the default whenever block reuse is on).

The SM107 MiniMax-M3.1 targets opt into the disaggregated draft-window transfer (RuntimeHooks.disagg_draft_kv=True), which refuses a paired draft pool:

  • tensorrt_llm/_torch/disaggregation/draft_kv.py:86-91: select_disagg_draft_kv_cache_manager raises ValueError;
  • tensorrt_llm/_torch/disaggregation/transceiver.py:308-312: the transceiver raises the same.

The selector runs at executor creation on every disaggregated worker (tensorrt_llm/_torch/pyexecutor/_util.py:4609-4615). After #22, SM107 disaggregated serving with block reuse therefore fails to start. Separately, flashinfer's dynamic page-size trtllm-gen kernels, which serve the 128-token pages, were verified on SM100/SM103 only.

This PR allows the dynamic page sizes (power-of-two pages from 128 tokens) only on SM100 and SM103. Elsewhere the draft pool keeps the static sizes, as before #22 (64 tokens, unpaired). SM107 returns exactly to its pre-#22 behavior; GB300 (SM103) does not change.

Test Coverage

  • test_trtllm_page_size_capability: with the SM version patched, 128-token pages without the context kernel are allowed on SM103 and refused on SM107. TestDraftPoolPageSize: 16 passed.
  • Pre-commit hooks pass on the changed files; bandit finds no issue in them.
  • GPU checks on GB300 are in progress.
  • Not run on SM107: no Rubin hardware was available.

🤖 Generated with Claude Code

…age kernels are verified (SM100/SM103)

dflash_trtllm_supports_page_size allowed power-of-two pages from 128
tokens wherever the DFlash TRTLLM ops run (SM100-SM109). On SM107 the
DSpark draft pool therefore took the target's 128-token pages and paired
with it for joint block reuse, which the disaggregated draft-window
transfer refuses at executor creation; flashinfer's dynamic page-size
kernels are also verified on SM100/SM103 only. Allow the dynamic sizes
there only; elsewhere the pool keeps the static sizes (64 tokens,
unpaired) as before.

Signed-off-by: Zheyu Fu <zheyuf@nvidia.com>
@zheyuf

zheyuf commented Oct 29, 2026

Copy link
Copy Markdown
Collaborator Author

Superseded by #24.

@zheyuf zheyuf closed this Oct 29, 2026
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.

1 participant