Skip to content

[Klaud Cold][K3.1-Pro] vLLM B300: low-latency decode and SGLang draft depths / [Klaud Cold][K3.1-Pro] vLLM B300:启用低延迟 decode 并对齐 SGLang 草稿深度 - #4838

Closed
functionstackx wants to merge 3 commits into
mainfrom
klaud/dup-4833-kimik31-vllm-b300-latency-decode
Closed

functionstackx wants to merge 3 commits into
mainfrom
klaud/dup-4833-kimik31-vllm-b300-latency-decode

Conversation

@functionstackx

Copy link
Copy Markdown
Collaborator

Duplicate of #4833 (ZJY0516, branch kimik31-vllm-b300-latency-decode) rebuilt on current main so a same-repository sweep runs; #4833 is conflicting against main. Recipe, master-config and changelog content are unchanged apart from the changelog entry's position and pr-link.

Tunes kimik3.1-fp4-b300-vllm-agentic-dspark (Kimi-K3.1-Pro, B300, vLLM, DSpark):

  • Low-latency decode: --additional-config '{"decode_backend":"latency_specialized"}' at every point (the vLLM K3.1 recipe's fused CuTe DSL decode path).
  • c1-c2 at plain TP8 instead of TP8 x DCP8; c4 and up keep DCP8.
  • Draft depths update: DSpark 7 tokens through c8, 6 at c16, 5 at c24-c40, 4 from c48. Each decode graph cap covers max-num-seqs x (1 + drafts).
  • Startup timeout: VLLM_ENGINE_READY_TIMEOUT_S and the health check go to 7200 s, because the specialized path adds an autotune pass.

Local A/B on GB300 (TP8 over two trays, 20 min per point, previous draft depths):

conc ITL p50 (main / this PR) interactivity p50 (main / this PR)
1 5.32 / 2.77 ms 188 / 361 tok/s
32 17.86 / 15.16 ms 56 / 66 tok/s
70 37.09 / 33.09 ms 27 / 30 tok/s

All 11 points started and finished with the previous draft depths. The new draft depths are still being checked locally (c8, c56, c70).

中文

调整 kimik3.1-fp4-b300-vllm-agentic-dspark(Kimi-K3.1-Pro,B300,vLLM,DSpark):

  • **低延迟 decode:**所有点启用 --additional-config '{"decode_backend":"latency_specialized"}',即 vLLM K3.1 recipe 的融合 CuTe DSL decode 路径。
  • c1-c2 改用纯 TP8,不再用 TP8 x DCP8;c4 及以上保留 DCP8。
  • **草稿深度与 SGLang recipe 对齐:**DSpark 在 c8 及以下为 7 个 token,c16 为 6,c24-c40 为 5,c48 起为 4。每个 decode graph 上限覆盖 max-num-seqs x (1 + drafts)。
  • **启动超时:**specialized 路径多一轮 autotune,VLLM_ENGINE_READY_TIMEOUT_S 和 health check 提高到 7200 秒。

本地 GB300 A/B(两个 tray 组成 TP8,每点 20 分钟,旧草稿深度)见上表:c1 的 ITL p50 从 5.32 ms 降到 2.77 ms,c32 从 17.86 ms 降到 15.16 ms,c70 从 37.09 ms 降到 33.09 ms。

旧草稿深度下 11 个点都能正常启动并跑完;新草稿深度仍在本地验证(c8、c56、c70)。

AI model disclosure

🤖 Generated with Claude Code

… depths / [Klaud Cold][K3.1-Pro] vLLM B300:启用低延迟 decode 并对齐 SGLang 草稿深度

Duplicate of #4833 (kimik31-vllm-b300-latency-decode) rebuilt on current
main. The perf-changelog entry is appended after main's newest entries.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

@claude claude Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Besides the inline finding, I checked two other things and found no problem with either:

  • Splitting the matrix row: infx/srt_slurm/single_node.py picks the recipe variant by CONC and by decode-context-parallel-size against DCP_SIZE, not by override name. So the conc 1-2 row with no dcp-size gets exactly one match (override_tp8_c1/c2), and the conc 4-70 dcp-size 8 rows each get exactly one override_dcp8_*.
  • Decode graph caps: each new max-cudagraph-capture-size is at least max-num-seqs x (1 + num_speculative_tokens). For example, c70 needs 140 x 5 = 700, and the cap is 704.
Extended reasoning...

This is a config-only change to one vLLM AgentX recipe, its nvidia-master search-space row and a perf-changelog entry. It touches no security-sensitive code. The checks above cover how a recipe variant is chosen and how the CUDA-graph caps are sized. The pr-link problem is covered separately in the inline comment.

Comment thread inferencex-e2e/perf-changelog.yaml Outdated
description:
- "Kimi-K3.1-Pro B300 vLLM: enable the recipe's low-latency decode (decode_backend=latency_specialized) at every point and run c1-c2 at plain TP8 instead of TP8 x DCP8."
- "Match the SGLang recipe's draft depths (DSpark 7 tokens through c8, 6 at c16, 5 at c24-c40, 4 from c48), size each decode graph cap to max-num-seqs x (1 + drafts), and raise the engine-ready timeout and health check to 7200 s."
pr-link: TBD

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔴 The changelog check will fail on this PR, and the merge-prep step will refuse it. pr-link: TBD is not a value either tool accepts. validate_added_pr_link only takes the PR's own URL or a value in PR_LINK_PLACEHOLDERS ("XXX" or ".../pull/XXX"). Fix: set the appended entry's pr-link to this PR's canonical URL, or to https://github.com/SemiAnalysisAI/InferenceX/pull/XXX so the merge step can fill it in.

Why this was flagged

The PR appends a new entry ending in pr-link: TBD at perf-changelog.yaml:12087. On a PR run, inferencex-e2e/infx/workflows/validate_perf_changelog.py:113 rejects any link that is neither in PR_LINK_PLACEHOLDERS (lines 21-24: "XXX" and "https://github.com/SemiAnalysisAI/InferenceX/pull/XXX") nor the expected PR URL. It raises "new PR entry must use ... or an XXX placeholder; found 'TBD'". prepare_perf_changelog_merge.py:108 also raises "appended entry ... has unexpected pr-link 'TBD'", so the reuse-assisted merge cannot canonicalize the link. Before this PR, the base changelog passes both checks. The TBD value matches the guidance in .claude/commands/add-model-hardware.md:144, but neither validator accepts it.

Verification: The diff appends a new block that ends in pr-link: TBD (perf-changelog.yaml, new last line). compare_entries in inferencex-e2e/infx/workflows/validate_perf_changelog.py:158-159 calls validate_added_pr_link on every appended entry. The changelog check fails and the merge-prep step will not proceed until pr-link is set to this PR's URL or an XXX placeholder.

…1-vllm-b300-latency-decode

# Conflicts:
#	inferencex-e2e/perf-changelog.yaml
@functionstackx functionstackx added the full-sweep-fail-fast Full sweep with canary gate; first failure cancels the rest of that matrix (recommended) label Nov 5, 2026
@github-actions

github-actions Bot commented Nov 5, 2026

Copy link
Copy Markdown
Contributor

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

full-sweep-fail-fast Full sweep with canary gate; first failure cancels the rest of that matrix (recommended)

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

2 participants