Skip to content

[NV] Add gb300 nvfp4 qwen3.5 MTP 8k1k recipes - #2218

Merged
adibarra merged 7 commits into
mainfrom
dynamo-trtllm-gb300-qwen3.5-nvfp4-mtp
Aug 6, 2026
Merged

[NV] Add gb300 nvfp4 qwen3.5 MTP 8k1k recipes #2218
adibarra merged 7 commits into
mainfrom
dynamo-trtllm-gb300-qwen3.5-nvfp4-mtp

Conversation

@richardhuo-nv

@richardhuo-nv richardhuo-nv commented Jul 15, 2026

Copy link
Copy Markdown
Collaborator

Add Qwen3.5-397B-A17B-NVFP4 GB300 disaggregated TensorRT-LLM + Dynamo MTP benchmarks (8k1k)

Summary

This PR adds multi-token prediction (MTP, 3 speculative tokens) benchmark recipes for Qwen3.5-397B-A17B-NVFP4 on GB300 in a disaggregated TensorRT-LLM + Dynamo setup, covering the 8k1k (ISL 8192 / OSL 1024) scenario.

Runner and master config changes follow the same pattern as PR #2206 (STP recipes), which must be merged (or the runner branch must be compatible) before CI jobs launched from this PR will succeed.

Changes

9 MTP recipe configsbenchmarks/multi_node/srt-slurm-recipes/trtllm/qwen3.5/gb300-fp4/disagg/8k1k/mtp/

All configs use:

  • Image: nvcr.io/nvidia/tensorrt-llm/release:1.3.0rc18
  • Dynamo installed at runtime: 1.3.0.dev20260708, TCP request plane
  • Model alias: qwen3.5-fp4/scratch/models/Qwen3.5-397B-A17B-NVFP4
  • Prefill always DEP2 (2 GPUs, 1 node); decode topologies vary
  • 3 MTP speculative tokens (mtp3 in filename)
Config Prefill Decode Concurrency
ctx1dep2_gen1tep16_mtp3_c48 1P DEP2 1D TEP16 48
ctx1dep2_gen4tp16_mtp3_c4 1P DEP2 4D TP16 4
ctx1dep2_gen7tep8_mtp3_c42 1P DEP2 7D TEP8 42
ctx2dep2_gen15tp4_mtp3_c90 2P DEP2 15D TP4 90
ctx3dep2_gen4tep8_mtp3_c192 3P DEP2 4D TEP8 192
ctx3dep2_gen7tep8_mtp3_c168 3P DEP2 7D TEP8 168
ctx4dep2_gen1dep16_mtp3_c384 4P DEP2 1D DEP16 384
ctx6dep2_gen5tep8_mtp3_c480 6P DEP2 5D TEP8 480
ctx9dep2_gen1dep16_mtp3_c1536 9P DEP2 1D DEP16 1536

runners/launch_gb300-nv.sh

  • Added elif branch for dynamo-trt + qwen3.5 + fp4: clones NVIDIA/srt-slurm@sa-submission-q2-2026 and overlays benchmarks/multi_node/srt-slurm-recipes/trtllm/qwen3.5/gb300-fp4/disagg/ (covers both stp/ and mtp/ subdirs)
  • Added --no-preflight for this path — model lives on compute-node /scratch/ NVMe, not visible from the GHA runner pod

configs/nvidia-master.yaml

  • New entry qwen3.5-fp4-gb300-dynamo-trt-mtp: 9 search-space points, all spec-decoding: "mtp", disagg: true, kv-p2p-transfer: nixl

perf-changelog.yaml

  • New entry for qwen3.5-fp4-gb300-dynamo-trt-mtp

@github-actions

Copy link
Copy Markdown
Contributor

Thanks for the contribution! Please reach out to respective companies' CODEOWNER to fill in the latest PR_REVIEW_CHECKLIST.md before pinging core maintainer on Slack for review. In order for the signoff PR check bot to trigger, you must follow the PR_REVIEW_CHECKLIST.md template correctly, including the phrase As a PR reviewer and CODEOWNER, I have reviewed this and have.

For PR verification, add the full-sweep-fail-fast label (strongly recommended) to this PR — the benchmark sweep only runs on labeled PRs. Use full-sweep-enabled only if you need matrix jobs to keep running past a failure.

PR authors are responsible for ensuring that after merging, all GitHub Action jobs fully pass. A lot of the time, failures are just flakes and simply re-running the failed jobs will fix it. See GitHub's docs on re-running failed jobs


感谢你的贡献!请联系相应公司的 CODEOWNER 填写最新的 PR_REVIEW_CHECKLIST.md,然后再在 Slack 上联系核心维护者进行审阅。为了触发 signoff PR 检查机器人,你必须正确遵循 PR_REVIEW_CHECKLIST.md 模板,包括保留英文语句 As a PR reviewer and CODEOWNER, I have reviewed this and have

如需进行 PR 验证,请为此 PR 添加 full-sweep-fail-fast 标签(强烈推荐)— 基准测试 sweep 仅在带有标签的 PR 上运行。仅当需要矩阵任务在失败后继续运行时才使用 full-sweep-enabled

PR 作者有责任确保合并后所有 GitHub Action 任务完全通过。 很多时候失败只是偶发抖动(flake),重新运行失败的任务即可解决。参见 GitHub 关于重新运行失败任务的文档

@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.

Not approving — the pr-link: TBD issue flagged inline is real and will hard-fail the standard merge_with_reuse.sh canonicalization step (verified against utils/validate_perf_changelog.py and utils/prepare_perf_changelog_merge.py), so this needs a fix before merge.

Extended reasoning...

Overview

This PR adds 9 new MTP (multi-token prediction) benchmark recipe YAMLs for Qwen3.5-397B-A17B-NVFP4 on GB300, plus a corresponding configs/nvidia-master.yaml entry, a perf-changelog.yaml entry, and a new elif branch in runners/launch_gb300-nv.sh to route this model/precision/framework combination to the correct srt-slurm checkout and recipe overlay directory.

Security risks

None. This is benchmark configuration and a shell-script routing branch for an internal CI runner; no user input, auth, or secrets handling is involved.

Level of scrutiny

This falls into the repo's standard recipe-addition pattern (new YAML configs + master-config entry + changelog + runner routing), which is normally simple and mechanical. However, I independently verified the inline bug report's core claim by reading utils/validate_perf_changelog.py and utils/prepare_perf_changelog_merge.py: PR_LINK_PLACEHOLDERS is exactly {"XXX", ".../pull/XXX"}, and validate_added_pr_link/canonicalize_appended_links raise ChangelogValidationError for any pr-link value that isn't the canonical URL or one of those placeholders. The new changelog entry uses the literal string TBD, which matches neither, so the standard merge_with_reuse.sh path used by the merge-prs skill would hard-fail on this PR. That's a legitimate blocker for the standard merge tooling, even though it doesn't show up in PR-time CI checks (which don't invoke this validator).

Other factors

This is a one-line, easy fix (swap TBD for XXX or the real PR link), and the nit about mislabeling the recipes as "STP" instead of "MTP" in the changelog description is cosmetic. Neither issue affects the correctness of the recipe YAMLs, master-config entries, or runner routing logic themselves. Given the merge-blocking nature of the pr-link issue, I'm deferring rather than approving so a human/author can land the fix.

Comment thread perf-changelog.yaml Outdated
- "Image: nvcr.io/nvidia/tensorrt-llm/release:1.3.0rc18 with Dynamo installed at runtime (version 1.3.0.dev20260708, TCP request plane)."
- "9 STP configs: 1P1D DEP2+1D TEP16 (conc 48), 1P4D DEP2+4D TP16 (conc 24), 1P7D DEP2+7D TEP8 (conc 42), 2P15D DEP2+15D TP4 (conc 90), 3P4D DEP2+4D TEP8 (conc 192), 3P7D DEP2+7D TEP8 (conc 168), 4P1D DEP2+1D DEP16 (conc 384), 6P5D DEP2+5D TEP8 (conc 480), 9P1D DEP2+1D DEP16 (conc 1536)."
- "Runner: launch_gb300-nv.sh updated to clone NVIDIA/srt-slurm@sa-submission-q2-2026 and overlay local recipes from benchmarks/multi_node/srt-slurm-recipes/trtllm/qwen3.5/gb300-fp4/disagg/ for the dynamo-trt+qwen3.5+fp4 path; --no-preflight added for model on compute-node /scratch."
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 new perf-changelog.yaml entry (line 4792) sets pr-link: TBD, but the standard merge tooling (utils/merge_with_reuse.shprepare_perf_changelog_merge.py canonicalize) only accepts the canonical .../pull/2218 URL or the literal XXX placeholder — TBD matches neither and will raise ChangelogValidationError, hard-failing the merge step even though PR-time checks stay green. Fix by changing it to https://github.com/SemiAnalysisAI/InferenceX/pull/2218 (or XXX, which the tooling auto-replaces at merge time).

Extended reasoning...

What the bug is: Every other entry in perf-changelog.yaml fills pr-link with either a concrete https://github.com/SemiAnalysisAI/InferenceX/pull/<n> URL or the sanctioned XXX placeholder that merge tooling auto-fills. This PR's new entry (appended at line 4792) instead uses the literal string TBD, which is not a value the changelog tooling recognizes.

Where it breaks: utils/validate_perf_changelog.py defines PR_LINK_PLACEHOLDERS = {"XXX", "https://github.com/SemiAnalysisAI/InferenceX/pull/XXX"}. Its validate_added_pr_link(link, pr_number) function checks: if a PR number is known, the link must equal the expected canonical URL or be one of PR_LINK_PLACEHOLDERS — otherwise it raises ChangelogValidationError("new PR entry must use '<url>' or an XXX placeholder; found '<link>'"). TBD satisfies neither condition.

Why PR-time checks don't catch it: The sweep-gate path (run-sweep.ymlvalidate_perf_changelog.py main → process_changelog.py) does not call validate_added_pr_link at all — and separately, ChangelogEntry.pr_link in matrix_logic/validation.py is an unconstrained str, so any string passes Pydantic validation. This is exactly why the issue is invisible in the PR's green checks.

Where it does fire: utils/merge_with_reuse.sh, the repository's standard reuse-assisted merge path (used by the merge-prs skill), unconditionally runs prepare_perf_changelog_merge.py canonicalize --pr-number <PR> after merging main (line 181), regardless of whether a conflict occurred. canonicalize_appended_links() calls compare_entries(base, head, pr_number), which for every appended entry calls validate_added_pr_link(entry['pr-link'], pr_number). With pr_number=2218 and link='TBD', this raises ChangelogValidationError: new PR entry must use 'https://github.com/SemiAnalysisAI/InferenceX/pull/2218' or an XXX placeholder; found 'TBD'.

Step-by-step proof:

  1. PR [NV] Add gb300 nvfp4 qwen3.5 MTP 8k1k recipes  #2218 is merged/rebased via merge_with_reuse.sh.
  2. After the main-merge step, the script calls prepare_perf_changelog_merge.py canonicalize --changelog-file perf-changelog.yaml --base-ref origin/main --pr-number 2218 --repo SemiAnalysisAI/InferenceX.
  3. canonicalize_appended_links parses base vs. head, finds one appended entry (qwen3.5-fp4-gb300-dynamo-trt-mtp), and calls validate_added_pr_link('TBD', 2218).
  4. expected = 'https://github.com/SemiAnalysisAI/InferenceX/pull/2218'; 'TBD' not in PR_LINK_PLACEHOLDERS and 'TBD' != expectedChangelogValidationError is raised.
  5. merge_with_reuse.sh exits non-zero at that step, blocking the automated merge until someone manually fixes the changelog entry.

Impact and fix: Had the author used the sanctioned XXX placeholder, canonicalize_appended_links would have auto-rewritten it to the real /pull/2218 link and the merge would proceed silently. Using TBD instead turns what should be a no-op auto-fix into a hard failure of the standard merge tooling. The fix is a one-line change: replace TBD with either XXX or the literal https://github.com/SemiAnalysisAI/InferenceX/pull/2218.

Comment thread perf-changelog.yaml Outdated
Comment on lines +4784 to +4792

- config-keys:
- qwen3.5-fp4-gb300-dynamo-trt-mtp
description:
- "Add Qwen3.5-397B-A17B-NVFP4 GB300 disaggregated TensorRT-LLM+Dynamo MTP (3-token) benchmarks for 8k1k."
- "Image: nvcr.io/nvidia/tensorrt-llm/release:1.3.0rc18 with Dynamo installed at runtime (version 1.3.0.dev20260708, TCP request plane)."
- "9 STP configs: 1P1D DEP2+1D TEP16 (conc 48), 1P4D DEP2+4D TP16 (conc 24), 1P7D DEP2+7D TEP8 (conc 42), 2P15D DEP2+15D TP4 (conc 90), 3P4D DEP2+4D TEP8 (conc 192), 3P7D DEP2+7D TEP8 (conc 168), 4P1D DEP2+1D DEP16 (conc 384), 6P5D DEP2+5D TEP8 (conc 480), 9P1D DEP2+1D DEP16 (conc 1536)."
- "Runner: launch_gb300-nv.sh updated to clone NVIDIA/srt-slurm@sa-submission-q2-2026 and overlay local recipes from benchmarks/multi_node/srt-slurm-recipes/trtllm/qwen3.5/gb300-fp4/disagg/ for the dynamo-trt+qwen3.5+fp4 path; --no-preflight added for model on compute-node /scratch."
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 new perf-changelog.yaml entry for qwen3.5-fp4-gb300-dynamo-trt-mtp mislabels the 9 new recipes as "9 STP configs" (line ~4790), but this PR adds MTP (multi-token prediction) recipes, not STP — likely a copy-paste leftover from the sibling STP PR #2206. Should read "9 MTP configs" for accuracy.

Extended reasoning...

The new perf-changelog.yaml entry for qwen3.5-fp4-gb300-dynamo-trt-mtp is internally self-contradictory. The first description bullet correctly states "Add Qwen3.5-397B-A17B-NVFP4 GB300 disaggregated TensorRT-LLM+Dynamo MTP (3-token) benchmarks for 8k1k," but the third bullet begins "9 STP configs: 1P1D DEP2+1D TEP16 (conc 48), ...". STP (single-token prediction, i.e. no speculative decoding) and MTP (multi-token prediction, 3 speculative draft tokens) are different decoding modes, and this entry unambiguously documents the latter.

Every piece of evidence in this PR confirms these are MTP recipes: the master-config key is qwen3.5-fp4-gb300-dynamo-trt-mtp with every search-space point set to spec-decoding: "mtp"; all 9 new recipe filenames under benchmarks/multi_node/srt-slurm-recipes/trtllm/qwen3.5/gb300-fp4/disagg/8k1k/mtp/ contain mtp3; and every recipe's speculative_config block sets decoding_type: MTP with max_draft_len: 3. There is no STP recipe anywhere in this diff.

The likely root cause is that this changelog entry was drafted by copying the changelog entry from the sibling STP recipes PR (#2206), which does add STP configs, and the "STP" wording in the count line was never updated to match the MTP content being described here — while the first bullet was correctly edited to say "MTP."

Step-by-step proof:

  1. Read perf-changelog.yaml lines 4784-4792 (new entry): bullet 1 says "...MTP (3-token) benchmarks..."; bullet 3 says "9 STP configs: ...".
  2. Read configs/nvidia-master.yaml, new key qwen3.5-fp4-gb300-dynamo-trt-mtp: every one of the 9 search-space entries sets spec-decoding: "mtp".
  3. Read any of the 9 new recipe YAMLs, e.g. ctx1dep2_gen1tep16_mtp3_c48.yaml: both prefill.speculative_config.decoding_type and decode.speculative_config.decoding_type are MTP with max_draft_len: 3.
  4. Filenames themselves encode mtp3 (3-token MTP), not stp.
  5. Therefore "STP" in bullet 3 is factually wrong for the content it describes and contradicts bullet 1 of the same entry.

This is purely a documentation string in a changelog file with no functional/runtime impact — it doesn't affect recipe execution, CI, or the master config — so it does not block merge. The fix is a one-word edit: change "9 STP configs" to "9 MTP configs" on line 4790.

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

3 similar comments
@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@Ankur-singh

Copy link
Copy Markdown
Collaborator

As a PR reviewer and CODEOWNER, I have reviewed this and have:

  • Verified that as of the moment of typing this, this is the latest version of PR_REVIEW_CHECKLIST.md
  • Verified that the general code quality meets the InferenceX standard and does not make the code quality any worse.
  • Verified that this PR has passed PR validation. Please link to GitHub Action workflow that shows this. https://github.com/SemiAnalysisAI/InferenceX/actions/runs/29391306858
  • Verified that this PR passes evals. Please link to GitHub Action workflow that shows this. https://github.com/SemiAnalysisAI/InferenceX/actions/runs/29391306858
  • Verified that speculative decoding PRs uses chat templates to align the AL distribution to real world
  • For agentic workloads: verified that speculative-decoding configs (EAGLE / MTP / draft models) run with simulated synthetic acceptance, with the acceptance-length value taken from the committed golden AL curve in golden_al_distribution/ for that model, thinking mode, and draft length. A submission may choose any supported draft length, but it may not substitute a different acceptance target.
  • Verified that the model architecture isn't changed with benchmark hacks like using --hf-overrides to skipping indexer for every x layers on models that don't natively support this. As a general rule, we won't accept optimizations that reduces the number of model architecture FLOPs. Anything that makes that same computation run faster is fair game; FLOPs at lower precisions is fine, given that the config passes private evals. As an general north star princple, we should only use optimizations which is used in production by customers that care about accuracy
  • If an company claims that they support vLLM/SGLang as first class LLM inference engines on their hardware, I have verified that the respective vLLM submission made using upstream https://hub.docker.com/u/vllm docker repo, upstream SGLang https://hub.docker.com/u/lmsysorg docker repo. The only exceptions are for new hardware, such as MI455X UALoE72, Vera Rubin NVL72, Rubin NVL8, etc., and for new model architectures where there is an actual reason why vLLM/SGLang does not fundamentally support them yet as supported by vLLM/SGLang community maintainers
  • If an company claims that they support vLLM/SGLang as first class upstream in-tree LLM inference engines on their hardware, I have have verified that the respective vLLM/SGLang submission has been made before additional frameworks (TRT-LLM, ATOM, etc.). The only exceptions are for new hardware, such as MI455X UALoE72, Vera Rubin NVL72, Rubin NVL8, etc., and for new model architectures where there is an actual reason why vLLM/SGLang does not fundamentally support them yet.
  • Verified that every single-node vLLM/SGLang recipe in this PR is documented in the official vLLM recipes and/or the SGLang cookbook:
    • I linked the corresponding upstream PR in the vLLM recipe repo or SGLang repo and verified that it is MERGED before this InferenceX PR merges. An opened, draft, or closed-without-merge upstream PR does not satisfy this requirement. If the matching recipe was already published, I linked the published recipe/cookbook page in the additional detail section below.
  • Verified that this PR does not patch the inference engine or serving stack — the pinned image must run as shipped. This covers .patch files / git apply / patch, inline patches embedded in benchmark scripts (e.g. a python3/sed heredoc that rewrites installed engine sources before serving), in-place edits of site-packages, monkey-patching, overwriting container files, and installing forked/rebuilt engine wheels on top of the pinned image. The only exception is a patch covered by a filled-out waiver at docs/waiver/<PR_NUMBER>.md — named after the PR that introduces the patch and filed in that same PR, stating what is patched, why the unmodified upstream image cannot run this benchmark, the upstream PR/issue link, and the removal plan — which I have linked below in the additional detail section.
  • If any of the above criteria cannot reasonably be satisfied, I have provided additional reasoning below.

Additional detail section:

Scope. Additive-only submission: 9 new TensorRT-LLM + Dynamo disaggregated MTP recipes for nvidia/Qwen3.5-397B-A17B-NVFP4 on GB300 at 8k1k (ISL 8192 / OSL 1024), a new qwen3.5-fp4-gb300-dynamo-trt-mtp block in configs/nvidia-master.yaml, one perf-changelog.yaml entry, and an elif branch plus --no-preflight condition in runners/launch_gb300-nv.sh. No existing config, recipe, or benchmark script is modified (12 files, 1664 insertions, 1 deletion). Reviewed at head SHA 9b45dd5b66447b30820c19b4f35e279a55bc4609; every value cited below was read from the file contents at that exact SHA, not from an intermediate commit.

Validation evidence. Run Sweep https://github.com/SemiAnalysisAI/InferenceX/actions/runs/29391306858, triggered on head SHA 9b45dd5b66447b30820c19b4f35e279a55bc4609. This is a genuine fresh run, not a reuse-gated no-op: setup = success and reuse-ingest-artifacts = skipped. Exact non-skipped job counts:

  • multi-node 8k1k / benchmark jobs: 9 / 9 success — one per search-space point (c4, c42, c48, c90, c168, c192, c384, c480, c1536). No benchmark job failed, was cancelled, or was skipped.
  • multi-node eval / jobs: 8 / 8 success (c42, c48, c90, c168, c192, c384, c480, c1536).
  • Skipped lanes are structurally inapplicable, not gated away: single-node 8k1k /, single-node 1k1k /, eval /, canary / (single-node lanes — this config has no single-node points), multi-node 1k1k / (no 1k1k scenario), multi-node agentic / and agentic / (not an agentic workload).
  • The c4 point has no eval job by design, not by omission: utils/matrix_logic/generate_sweep_configs.py:25 sets MIN_EVAL_CONC = 16, and mark_eval_entries ignores multi-node entries whose concurrency values are all below it. All 8 eval-eligible points (conc >= 16) were evaluated and passed.
  • Eval results are real, not a vacuous collect-evals pass. Example from the c1536 eval job: PASS: gsm8k exact_match,strict-match = 0.9697 (>= 0.94 from models.qwen3.5) and PASS: gsm8k exact_match,flexible-extract = 0.9621 (>= 0.94 from models.qwen3.5), gated by utils/evals/validate_scores.py.
  • The only other Run Sweep on this branch is 29378593024 at the earlier SHA b00d740d, which was cancelled and therefore contributes no evidence. The qualifying run is at head, so no cross-SHA byte-identity argument is needed.

Chat template (speculative decoding item). This is a real MTP submission (speculative_config.decoding_type: MTP, max_draft_len: 3 on both prefill and decode in all 9 recipes), so the chat-template requirement applies. The 9 recipes do not carry an explicit benchmark.use_chat_template key, so I traced the default rather than assuming it. The dynamo-trt + qwen3.5 + fp4 branch at runners/launch_gb300-nv.sh:232-238 (head) checks out NVIDIA/srt-slurm at tag v1.0.29, and I confirmed that tag was actually used at runtime from the sweep log (+ git checkout v1.0.29). At v1.0.29:

  • src/srtctl/core/schema.py:709use_chat_template: bool = True # Pass --use-chat-template to benchmark (default: true)
  • src/srtctl/benchmarks/sa_bench.py:116str(b.use_chat_template).lower() is passed as positional arg 16 to the sa-bench driver
  • src/srtctl/benchmarks/scripts/sa-bench/bench.sh:66,79-80USE_CHAT_TEMPLATE=${16:-true}; when true, CHAT_TEMPLATE_ARGS=(--use-chat-template)

So the chat template is applied on this path; omitting the key selects true, it does not silently disable it. This is the inverse of the vLLM single-node run_benchmark_serving path, where --use-chat-template is opt-in and defaults off. The passing gsm8k scores above are corroborating evidence — a mis-templated Qwen3.5 run would not clear 0.94. Nothing in this repo overrides the value: no use_chat_template override exists in runners/, run_sweep.sh, or the workflow templates. Note for consistency, though: the already-merged TRT-LLM + Dynamo recipes under benchmarks/multi_node/srt-slurm-recipes/trtllm/glm5/ set benchmark.use_chat_template: true explicitly. Setting it explicitly here too would make the guarantee local to the recipe instead of dependent on an srt-slurm default that could change under a future tag bump. Recommended, not blocking.

Golden AL curve (agentic item). Left unchecked as not applicable. This PR is a fixed-seq-len 8k1k submission, not an agentic workload — configs/nvidia-master.yaml declares only scenarios: fixed-seq-len, and both agentic lanes were skipped in the sweep. It also uses real MTP rather than simulated acceptance: I grepped the full effective diff and all 9 recipes at head for SGLANG_SIMULATE_ACC_LEN, synthetic_acceptance_length, synthetic-acceptance, and acceptance_length and found zero matches, so there is no acceptance target to compare against a golden curve. For reference, golden_al_distribution/qwen3.5_mtp.yaml under key qwen3.5-397b-a17b-nvfp4 gives AL at MTP level 3 as 3.39 (thinking_on) / 3.33 (thinking_off); these recipes measure AL on real hardware rather than injecting it, so no substitution of the acceptance target is possible here.

Model architecture. No FLOP-reducing hacks. I grepped the effective diff and all 9 recipe files at head for --hf-overrides / hf_overrides: zero matches. The recipes change only parallelism (TP/EP/DP-attn), batching, CUDA-graph batch sizes, KV-cache fraction, MoE backend selection (CUTEDSL / TRTLLM), NVFP4 GEMM backend allow-lists, scheduler policy, and cache_transceiver_config. All of these make the same computation run faster or change numeric precision; none removes layers, skips an indexer, or reduces architecture FLOPs. kv_cache_config.dtype: fp8 is a precision choice, and the config clears the gsm8k eval gate.

Image / framework. The image at head — nvcr.io/nvidia/tensorrt-llm/release:1.3.0rc18 — is identical in configs/nvidia-master.yaml, in all 9 recipes (both identity.container.image and model.container), and in the image string embedded in every sweep job name, so the config and the jobs that produced the evidence ran the same image. This PR is a TRT-LLM submission, and the checklist's Docker-repo item is about the respective vLLM/SGLang submission: that is qwen3.5-fp4-gb300-dynamo-sglang, which is already merged on main (configs/nvidia-master.yaml:6586 at main) and pins lmsysorg/sglang:nightly-dev-cu13-20260624-b2c8f7a2 — the upstream https://hub.docker.com/u/lmsysorg repository, not a fork or a vendor rebuild. That merged SGLang entry also satisfies the ordering requirement: the SGLang submission for Qwen3.5 NVFP4 on GB300 landed before this additional-framework TRT-LLM submission.

Recipe documentation item. Left unchecked as not applicable, and the upstream-PR sub-item with it. The requirement is scoped to single-node vLLM/SGLang recipes. All 9 recipes in this PR live under benchmarks/multi_node/srt-slurm-recipes/trtllm/qwen3.5/gb300-fp4/disagg/8k1k/mtp/, are multi-node disaggregated, and target TensorRT-LLM rather than vLLM or SGLang. There are zero single-node recipes and zero vLLM/SGLang recipes in this PR, so there is no vLLM recipes / SGLang cookbook page to publish and no upstream PR to require merged.

Patch / waiver item — full disclosure. I grepped every added line in the effective diff for git apply, .patch, patch -p, sed -i, site-packages, monkey-patching, heredoc rewrites of engine sources, and forked or rebuilt engine wheel installs: zero matches. No docs/waiver/2218.md is needed. Three things are patch-adjacent and I am disclosing them rather than leaving them implicit:

  1. Runtime Dynamo install. All 9 recipes carry dynamo: {install: true, version: 1.3.0.dev20260708, request_plane: tcp}, so srtctl installs the Dynamo frontend/router into the pinned TRT-LLM container at runtime (backed by the persistent hash-cached source-build cache at runners/launch_gb300-nv.sh:23-32, which is pre-existing and untouched by this PR). Dynamo is a separate serving frontend/router component, not TensorRT-LLM itself: nothing rewrites, overwrites, or rebuilds the TRT-LLM engine, which runs as shipped in nvcr.io/nvidia/tensorrt-llm/release:1.3.0rc18. This is the same mechanism as the already-merged glm5 and dsv4 dynamo-trt submissions. A reviewer who considers a runtime frontend source build to fall inside "serving stack" should say so, since that reading would retroactively affect those merged configs too.
  2. Recipe overlay. runners/launch_gb300-nv.sh:236-238 copies this repo's recipe YAMLs over the srt-slurm checkout's recipes/ tree. That is configuration overlay onto a config directory, not modification of engine or serving code, and it mirrors the existing dynamo-sglang + qwen3.5 branch at lines 207-208.
  3. Pre-existing sed -i in the launcher rewrites only the recipe YAML's name: field to gb300-nv_0 before srtctl apply. It is not introduced by this PR and touches no installed sources.

Why the code-quality item is unchecked. One concrete, fixable defect, in a line this PR adds. perf-changelog.yaml states: "Runner: launch_gb300-nv.sh updated to clone NVIDIA/srt-slurm@sa-submission-q2-2026 ...", and the PR description repeats it. The code at head does not do that — runners/launch_gb300-nv.sh:235 checks out tag v1.0.29, and the sweep log confirms + git checkout v1.0.29 is what actually ran. perf-changelog.yaml is a permanent record, so an incorrect srt-slurm ref in it is worth correcting rather than merging. Relatedly, the pre-existing comment at runners/launch_gb300-nv.sh:337-339 ("qwen3.5 fp4 runs on sa-submission-q2-2026, which has none") becomes stale once this branch lands and should be updated in the same pass. Everything else about the change reads clean: additive, consistent with the established dynamo-trt patterns, recipes provenance-commented, and the --no-preflight addition correctly justified by the model living on compute-node /scratch NVMe. Correct the changelog line (and ideally that comment) and I will check this box.

Other notes for the record. PR #2206 (the Qwen3.5 NVFP4 STP submission) is still OPEN / not merged; its runners/launch_gb300-nv.sh diff is byte-identical to this one (same 1381bd5db7..494b6500ee blob transition), so the two will not conflict in a meaningful way whichever merges first. This PR's own sweep passed end-to-end without #2206, so it is not actually blocked on it despite what the PR description suggests.

Signed: Ankur-singh

@Klaud-Cold

Copy link
Copy Markdown
Collaborator

❌❌❌ REJECTED ❌❌❌

@Ankur-singh — two blockers: no authorized /reuse-sweep-run command has been posted on this PR, and your sign-off itself leaves the code-quality item unchecked pending a fix (the perf-changelog.yaml defect is real — the entry claims sa-submission-q2-2026 but runners/launch_gb300-nv.sh checks out v1.0.29). Fix the changelog line, re-sign, and have an authorized maintainer comment /reuse-sweep-run.

✅ Check 0 (CODEOWNER): PASS — Ankur-singh owns configs/nvidia-master.yaml (CODEOWNERS line 7); remaining paths are catch-all only.
✅ Check 1 (sweep on in-PR commit): PASS — head 9b45dd5 has executed green multi-node 8k1k / (9/9) and multi-node eval / (8/8) check-runs from run 29391306858 (fresh run, reuse-ingest-artifacts skipped; single-node lanes structurally inapplicable for this multi-node-only config).
✅ Check 2 (evals pass): PASS — downloaded agg_eval_all.json from that run: 8/8 points, gsm8k em_strict 0.9651–0.9712, all ≥ 0.94 bar (utils/evals/thresholds.yaml); benchmark and eval jobs ran the PR's exact image nvcr.io/nvidia/tensorrt-llm/release:1.3.0rc18.
➖ Check 3 (recipe link): N/A — disaggregated/multi-node submission (multinode: true, disagg: true, all recipes under benchmarks/multi_node/srt-slurm-recipes/**); the recipe-link requirement applies to single-node recipes only.
❌ Check 4 (reuse command): FAIL — no authorized /reuse-sweep-run command has been posted on this PR (no comment contains it at all). An authorized maintainer must comment /reuse-sweep-run before this PR can merge via reuse.
❌ Check 5 (latest checklist): FAIL — all current-template items are present, but the code-quality item is unchecked with the reviewer's own explanation that the PR is not merge-ready: perf-changelog.yaml states the launcher clones NVIDIA/srt-slurm@sa-submission-q2-2026 while the code at head checks out v1.0.29 (independently confirmed in the diff). The sign-off says "Correct the changelog line … and I will check this box" — a conditional sign-off does not mark the PR ready to merge.
✅ Check 6 (upstream images / ordering): PASS — this PR adds only a dynamo-trt entry (image rule targets vLLM/SGLang entries); engine-first ordering satisfied by merged qwen3.5-fp4-gb300-dynamo-sglang (configs/nvidia-master.yaml:6586 on main, upstream lmsysorg/sglang:nightly-dev-cu13-20260624-b2c8f7a2).
✅ Check 7 (no architecture hacks): PASS — no --hf-overrides/override knobs anywhere in the diff; changes are parallelism, batching, backend selection, and kv-cache fp8 precision (evals pass).
✅ Check 8 (spec-decode chat template): PASS — MTP configs benchmark through srt-slurm sa-bench, which defaults use_chat_template: true at the pinned v1.0.29 (schema.py:709, bench.sh:66,79-80 verified upstream); no recipe overrides it.
✅ Check 9 (no engine patches): PASS — no .patch/git apply/sed -i/site-packages edits/forked wheels in the diff; runtime Dynamo install is the separate frontend/router (same mechanism as merged glm5/dsv4 dynamo-trt configs), TRT-LLM runs as shipped.
➖ Check 10 (agentic golden AL): N/A — not an agentic workload (scenarios: fixed-seq-len only, agentic lanes skipped); real MTP with no synthetic-acceptance knobs on this non-agentic config, which is the correct standard here.

… / 修复:更正 changelog 中的 srt-slurm 引用及过期注释

The perf-changelog entry for this PR states the runner clones
NVIDIA/srt-slurm@sa-submission-q2-2026, but the code this PR adds checks out
v1.0.29 (runners/launch_gb300-nv.sh:235), confirmed by the sweep log
(`+ git checkout v1.0.29`). perf-changelog.yaml is a permanent published
record, so correct the ref rather than merge a line that misstates the PR.

Also refresh the launch_gb300-nv.sh preflight comment, which still said
"qwen3.5 fp4 runs on sa-submission-q2-2026" -- made stale by this same PR.

Comment-and-prose only; no behaviour change.

中文:本 PR 的 perf-changelog 条目称 runner 克隆
NVIDIA/srt-slurm@sa-submission-q2-2026,但实际代码检出的是 v1.0.29(已由扫描
日志确认)。perf-changelog.yaml 为永久发布记录,故更正该引用;同时更新
launch_gb300-nv.sh 中因本 PR 而过期的注释。仅涉及注释与文案,无行为变更。
@Ankur-singh

Copy link
Copy Markdown
Collaborator

Withdrawing my `/reuse-sweep-run 29391306858` from 00:13 — it is no longer defensible at the current head.

When I posted it, head was 9b45dd5b, the evidence SHA, so reuse was trivially valid. It then carried across three pushes, two of which merged ~115 main commits. The gate does not diff files, so it could not notice.

Two of those shared changes are on this config's execution path:

The PR's own artifacts are clean — all 9 recipes byte-identical, and the qwen3.5-fp4-gb300-dynamo-trt-mtp config block semantically identical. It is the merged-in shared code that invalidates reuse.

Re-authorize with an explicit run ID once a fresh sweep lands.

@github-actions

Copy link
Copy Markdown
Contributor

1 similar comment
@github-actions

Copy link
Copy Markdown
Contributor

@Ankur-singh

Copy link
Copy Markdown
Collaborator

/reuse-sweep-run 30506361321

@Ankur-singh

Copy link
Copy Markdown
Collaborator

As a PR reviewer and CODEOWNER, I have reviewed this and have:

  • Verified that as of the moment of typing this, this is the latest version of PR_REVIEW_CHECKLIST.md
  • Verified that the general code quality meets the InferenceX standard and does not make the code quality any worse.
  • Verified that this PR has passed PR validation. Please link to GitHub Action workflow that shows this. Run Sweep 30506361321
  • Verified that this PR passes evals. Please link to GitHub Action workflow that shows this. Run Sweep 30506361321
  • Verified that speculative decoding PRs uses chat templates to align the AL distribution to real world
  • For agentic workloads: verified that speculative-decoding configs (EAGLE / MTP / draft models) run with simulated synthetic acceptance, with the acceptance-length value taken from the committed golden AL curve in golden_al_distribution/ for that model, thinking mode, and draft length. A submission may choose any supported draft length, but it may not substitute a different acceptance target.
  • Verified against the current MODELS.md that this PR does not submit a deprecated model, scenario, or model-scenario combination.
  • Verified that the model architecture isn't changed with benchmark hacks like using --hf-overrides to skipping indexer for every x layers on models that don't natively support this. As a general rule, we won't accept optimizations that reduces the number of model architecture FLOPs. Anything that makes that same computation run faster is fair game; FLOPs at lower precisions is fine, given that the config passes private evals. As an general north star princple, we should only use optimizations which is used in production by customers that care about accuracy
  • If an company claims that they support vLLM/SGLang as first class LLM inference engines on their hardware, I have verified that the respective vLLM submission made using upstream https://hub.docker.com/u/vllm docker repo, upstream SGLang https://hub.docker.com/u/lmsysorg docker repo. The only exceptions are for new hardware, such as MI455X UALoE72, Vera Rubin NVL72, Rubin NVL8, etc., and for new model architectures where there is an actual reason why vLLM/SGLang does not fundamentally support them yet as supported by vLLM/SGLang community maintainers
  • If an company claims that they support vLLM/SGLang as first class upstream in-tree LLM inference engines on their hardware, I have have verified that the respective vLLM/SGLang submission has been made before additional frameworks (TRT-LLM, ATOM, etc.). The only exceptions are for new hardware, such as MI455X UALoE72, Vera Rubin NVL72, Rubin NVL8, etc., and for new model architectures where there is an actual reason why vLLM/SGLang does not fundamentally support them yet.
  • Verified that every single-node vLLM/SGLang recipe in this PR is documented in the official vLLM recipes and/or the SGLang cookbook:
    • I linked the corresponding upstream PR in the vLLM recipe repo or SGLang repo and verified that it is MERGED before this InferenceX PR merges. An opened, draft, or closed-without-merge upstream PR does not satisfy this requirement. If the matching recipe was already published, I linked the published recipe/cookbook page in the additional detail section below.
  • Verified that this PR does not patch the inference engine or serving stack — the pinned image must run as shipped. This covers .patch files / git apply / patch, inline patches embedded in benchmark scripts (e.g. a python3/sed heredoc that rewrites installed engine sources before serving), in-place edits of site-packages, monkey-patching, overwriting container files, and installing forked/rebuilt engine wheels on top of the pinned image. The only exception is a patch covered by a filled-out waiver at docs/waiver/<PR_NUMBER>.md — named after the PR that introduces the patch and filed in that same PR, stating what is patched, why the unmodified upstream image cannot run this benchmark, the upstream PR/issue link, and the removal plan — which I have linked below in the additional detail section.
  • If any of the above criteria cannot reasonably be satisfied, I have provided additional reasoning below.

Additional detail section:

  • Head reviewed: 8c7d969c2f60f21c793737076bad31018d76307a. This supersedes my earlier approval at 9b45dd5b, which is stale.
  • Disclosure: commits 384197d7 and the head merge 8c7d969c on this branch were pushed by me, not by the PR author richardhuo-nv. 384197d7 corrects the changelog's srt-slurm reference from sa-submission-q2-2026 to the v1.0.29 the launcher actually checks out — the defect that left the code-quality box unchecked on my previous sign-off. That box is checked here because the defect is fixed at this head.
  • Validation (item 3): run 30506361321 is a pull_request sweep pinned to this exact head and concluded success. All 9 multi-node 8k1k / lanes and all 8 multi-node eval / lanes executed non-skipped and succeeded (concurrencies 4, 42, 48, 90, 168, 192, 384, 480, 1536), with zero failed or cancelled lanes; collect-results, compare-results, and calc-success-rate all succeeded. The remaining lane types are skipped because this config declares no matching search-space points. The c4 arm has a benchmark lane but no eval lane by design: MIN_EVAL_CONC = 16 in utils/matrix_logic/generate_sweep_configs.py drops multi-node eval entries below concurrency 16.
  • Evals (item 4): agg_eval_all.json from that run has 8 GSM8K rows for Qwen3.5-397B-A17B-NVFP4 on dynamo-trt/GB300, em_strict 0.9666-0.9719 at n_eff 1319, against the qwen3.5 override bar of 0.94. Smallest margin +0.0266.
  • Item 5 (spec-decode chat templates) — verified at the pinned harness. These recipes do not set use_chat_template in their benchmark: blocks. That is not a gap on this path: the launcher pins NVIDIA/srt-slurm to tag v1.0.29, and src/srtctl/core/schema.py:709 at that exact tag declares use_chat_template: bool = True, so the sa-bench harness passes --use-chat-template unless a recipe opts out. None of the 9 recipes opts out. Note this is the inverse of the in-repo single-node path, where the flag is opt-in and defaults off.
  • Item 6 (agentic golden AL) — not applicable: this is a fixed-seq-len 8k1k submission, not an agentic workload. Separately worth recording: these recipes run real MTP-3 (decoding_type: MTP, max_draft_len: 3) and inject no synthetic acceptance length, so there is no substituted acceptance target to reconcile against golden_al_distribution/qwen3.5_mtp.yaml.
  • Item 7 (MODELS.md) — verified: MODELS.md lists Qwen3.5 active scenarios as "Single-turn 8k1k, Agentic coding (MTP only from 2026-08-03); fp8/fp4 only". This config is fp4, fixed-seq-len 8192/1024, MTP — an active model, an active scenario, a retained precision, and the published spec-decode arm. The non-MTP retirement is scoped to Agentic coding, which this config does not declare.
  • Items 11 / 11a (single-node recipe documentation) — not applicable: multi-node disaggregated submission (multinode: true, disagg: true, all recipes under benchmarks/multi_node/srt-slurm-recipes/**).
  • Item 12 (no engine patches) — verified: none of the 9 added recipes declares setup_script or any patch key, and the diff contains no .patch files, git apply/patch calls, sed or heredoc rewrites, site-packages edits, or forked engine wheels. The launcher pins srt-slurm to the immutable tag v1.0.29 (refs/tags/v1.0.29 = c1b6b5c9), not a moving branch. The pinned TRT-LLM image runs as shipped; the runtime Dynamo install is the standing convention for dynamo-* entries. No waiver required and none filed.
  • Items 9 / 10 (image and engine-first ordering): the image is nvcr.io/nvidia/tensorrt-llm/release:1.3.0rc18, the official NGC TRT-LLM release, so the upstream vLLM/SGLang Docker-org rule does not bind a TRT-LLM entry. Engine-first ordering is satisfied: qwen3.5-fp4-gb300-dynamo-sglang — same model, same fp4 precision, same GB300 SKU, on an upstream lmsysorg/sglang image — is already merged on main, alongside four further Qwen3.5 GB300 SGLang entries.
  • Item 8 (architecture): no --hf-overrides, no layer or expert trimming; only precision and kernel-backend knobs, which the passing evals cover.
  • CODEOWNER scope: evaluated all 12 changed paths against the live .github/CODEOWNERS with last-match-wins. configs/nvidia-master.yaml is the only specifically owned path and lists @ankur-singh; the 9 recipes, perf-changelog.yaml, and runners/launch_gb300-nv.sh match only the catch-all * @InferenceX/core.
  • Operational: the PR is CONFLICTING with main on perf-changelog.yaml only; configs/nvidia-master.yaml and the launcher auto-merge cleanly. A rebase will move the head and require a fresh sign-off.

Signed: Ankur-singh

@Ankur-singh

Copy link
Copy Markdown
Collaborator

@Klaud-Cold still waiting for the verdict

@Klaud-Cold

Klaud-Cold commented Aug 6, 2026

Copy link
Copy Markdown
Collaborator

Claude finished @Ankur-singh's task in 3m 34s —— View job


✅✅✅ PASS — MERGE-READY ✅✅✅

@Ankur-singh — verdict rendered at head 8c7d969c2f60f21c793737076bad31018d76307a. Both blockers from my 2026-07-29 rejection are cleared: an authorized /reuse-sweep-run 30506361321 is now on record, and the sign-off at this head checks the code-quality box with the underlying perf-changelog.yaml defect actually fixed. Every value below was re-verified against the current head and the run's artifacts, not carried over from the previous review.

Check 0 (CODEOWNER): PASS — Ankur-singh is a listed owner of configs/nvidia-master.yaml (.github/CODEOWNERS: @ankur-singh @kedarpotdar-nv @InferenceX/core); the other 11 changed paths match only the catch-all.

Check 1 (sweep on in-PR commit): PASS — run 30506361321 is a pull_request sweep whose headSha equals the current PR head 8c7d969c2 (no pushes since — the invalidation that killed the previous reuse authorization cannot recur here). Conclusion success; job-level: 9/9 multi-node 8k1k / and 8/8 multi-node eval / completed successfully, zero failed or cancelled; collect-results, collect-evals, compare-results, calc-success-rate all green. Skipped lanes (single-node *, multi-node 1k1k, agentic *, eval /, canary /) are structurally inapplicable to this multi-node-only 8k1k config. The c4 point has no eval lane by design (MIN_EVAL_CONC = 16 in utils/matrix_logic/generate_sweep_configs.py).

Check 2 (evals real and passing): PASS — downloaded eval_results_all/agg_eval_all.json from the run: 8 gsm8k rows for Qwen3.5-397B-A17B-NVFP4 / dynamo-trt / GB300 / mtp, em_strict 0.9666–0.9719 at n_eff 1319, all ≥ the 0.94 qwen3.5 bar in utils/evals/thresholds.yaml (smallest margin +0.0266). Job names embed the PR's exact image nvcr.io/nvidia/tensorrt-llm/release:1.3.0rc18.

Check 3 (recipe link): N/A — multi-node disaggregated TRT-LLM submission; the documentation requirement binds single-node vLLM/SGLang recipes only.

Check 4 (reuse command): PASS — /reuse-sweep-run 30506361321 posted 2026-08-06T17:24:15Z by Ankur-singh, author_association: COLLABORATOR (authorized per the OWNER/MEMBER/COLLABORATOR rule), pinning the exact run that executed at the current head.

Check 5 (latest checklist): PASS — the 2026-08-06 sign-off contains all 13 items of the current docs/PR_REVIEW_CHECKLIST.md template, including the newly added MODELS.md item. The two unchecked items (agentic golden AL; single-node recipe docs + upstream-PR sub-item) are N/A with explicit reasoning in the detail section. The previously-blocking defect is fixed at this head: perf-changelog.yaml:5291 now reads NVIDIA/srt-slurm@v1.0.29, matching the actual git checkout v1.0.29 at runners/launch_gb300-nv.sh:248, with the canonical pr-link: …/pull/2218; the formerly stale preflight comment now correctly says "qwen3.5 fp4 runs on v1.0.29".

Check 6 (upstream images / engine-first ordering): PASS — TRT-LLM entry on the official NGC release image (vLLM/SGLang Docker-org rule doesn't bind it); ordering satisfied by the already-merged qwen3.5-fp4-gb300-dynamo-sglang on upstream lmsysorg/sglang.

Check 7 (MODELS.md): PASS — Qwen3.5 active scenarios at main are "Single-turn 8k1k, Agentic coding; fp8/fp4 only"; this is fp4, fixed-seq-len 8k1k, MTP. The non-MTP retirement is scoped to agentic coding and not enacted regardless.

Check 8 (spec-decode chat template): PASS — no recipe sets use_chat_template; the pinned srt-slurm v1.0.29 defaults it to true (schema.py:709 → sa-bench --use-chat-template), so all 9 MTP recipes benchmark through the chat template.

Check 9 (no engine patches): PASS — no .patch/git apply/sed-heredoc/site-packages edits/forked wheels in the diff; runtime Dynamo install is the standing dynamo-* convention (separate frontend/router; TRT-LLM runs as shipped). No waiver needed.

Check 10 (agentic golden AL): N/A — scenarios: fixed-seq-len only; real MTP-3 with no synthetic-acceptance injection.

Operational note (not a gate failure)

The PR is currently CONFLICTING with main (mergeStateStatus: DIRTY) — expected on the append-only perf-changelog.yaml. This is exactly what the supported merge path handles: utils/merge_with_reuse.sh 2218 auto-resolves the changelog conflict, pushes a synchronization commit, and the resulting PR run consumes the standing reuse authorization instead of re-running benchmarks. Do not rebase or resolve manually outside that tooling — a manual head move without the reuse path would strand the evidence again, as happened last time.

Todo

  • Gather context (trigger, prior verdict, new sign-off + /reuse-sweep-run)
  • Verify head SHA matches the sign-off's reviewed head (8c7d969c2)
  • Verify the perf-changelog defect is fixed at head
  • Verify run 30506361321: SHA, conclusion, job counts, evals
  • Verify sign-off matches the latest PR_REVIEW_CHECKLIST.md template
  • Verify CODEOWNER authorization for the /reuse-sweep-run command
  • Check PR mergeable state
  • Render verdict

(Note: I can't formally approve PRs — this verdict is the bot-check assessment; merging proceeds via utils/merge_with_reuse.sh.)

@Klaud-Cold

Copy link
Copy Markdown
Collaborator

✅✅✅ Verdict: PASS ✅✅✅

✅ Check 0 (CODEOWNER): PASS — Ankur-singh is a listed owner of configs/nvidia-master.yaml (@ankur-singh @kedarpotdar-nv @InferenceX/core); the other 11 changed paths match only the catch-all, which any recognized CODEOWNER satisfies.
✅ Check 1 (passing sweep on in-PR commit): PASS — run 30506361321 is a pull_request sweep at the current head 8c7d969c; all 9 multi-node 8k1k / and all 8 multi-node eval / check-runs concluded success (executed, not skipped).
✅ Check 2 (evals real and passing): PASS — agg_eval_all.json from that run: 8 GSM8K rows for Qwen3.5-397B-A17B-NVFP4 / dynamo-trt / GB300 / mtp, em_strict 0.9666–0.9719 at n_eff 1319, all above the 0.94 qwen3.5 bar; jobs ran the PR's exact image nvcr.io/nvidia/tensorrt-llm/release:1.3.0rc18.
➖ Check 3 (recipe link): N/A — disaggregated/multi-node submission (multinode: true, disagg: true, all recipes under benchmarks/multi_node/srt-slurm-recipes/**); the recipe-link requirement applies to single-node recipes only.
✅ Check 4 (reuse command): PASS — /reuse-sweep-run 30506361321 posted by Ankur-singh (COLLABORATOR), pinning the run that executed at this head; the earlier withdrawn command is superseded.
✅ Check 5 (latest checklist): PASS — sign-off matches the current docs/PR_REVIEW_CHECKLIST.md item-for-item; the two unchecked items (agentic golden AL, single-node recipe docs) are explained as N/A in the additional detail section.
✅ Check 6 (upstream images / engine-first): PASS — framework: dynamo-trt on the official NGC image nvcr.io/nvidia/tensorrt-llm/release:1.3.0rc18 (the vLLM/SGLang Docker-org rule doesn't bind a TRT-LLM entry); ordering satisfied by qwen3.5-fp4-gb300-dynamo-sglang already on main with upstream lmsysorg/sglang for the same model and GB300 SKU.
✅ Check 7 (MODELS.md): PASS — Qwen3.5 active scenarios are "Single-turn 8k1k, Agentic coding; fp8/fp4 only"; this is fp4, fixed-seq-len 8k1k, MTP — active on the 2026-08-06 review date.
✅ Check 8 (no architecture hacks): PASS — no --hf-overrides, model-override args, or layer/expert trimming in the diff; only precision, parallelism, and kernel-env knobs.
✅ Check 9 (spec-decode chat template): PASS — the launcher pins NVIDIA/srt-slurm@v1.0.29, whose src/srtctl/core/schema.py:709 defaults use_chat_template: bool = True for sa-bench; none of the 9 MTP recipes opts out.
✅ Check 10 (no engine patches): PASS — no .patch/git apply/sed-heredoc/site-packages rewrites/forked engine wheels; the dynamo: install block installs the Dynamo frontend/request-plane (standing dynamo-* convention), and the pinned TRT-LLM image runs as shipped. No waiver needed.
➖ Check 11 (agentic golden AL): N/A — fixed-seq-len 8k1k only, not agentic; recipes run real MTP-3 with no synthetic-acceptance knobs, as required on a non-agentic config.

@adibarra
adibarra merged commit b82b2e9 into main Aug 6, 2026
3 checks passed
@adibarra
adibarra deleted the dynamo-trtllm-gb300-qwen3.5-nvfp4-mtp branch August 6, 2026 19:38
Ankur-singh added a commit that referenced this pull request Aug 6, 2026
…og last / 合并 origin/main:保留两个 GB300 TRT 配置键并将 changelog 条目追加到末尾

check-changelog rejected the previous head because perf-changelog.yaml showed a
deleted line (- qwen3.5-fp4-gb300-dynamo-trt-mtp): main had since gained the
#2218 and #2438 entries, which this branch did not carry. Deletions are never
permitted in perf-changelog.yaml.

Resolution keeps main's entries intact and re-appends this PR's entry at the
very end, so the diff against main is additions-only. configs/nvidia-master.yaml
was an add/add conflict between this branch's qwen3.5-fp4-gb300-dynamo-trt and
main's qwen3.5-fp4-gb300-dynamo-trt-mtp (#2218); both keys are kept, each with
its own trailing dp-attn line.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Development

Successfully merging this pull request may close these issues.

4 participants