Skip to content

Add Qwen3.5 FP8 GB300 AgentX DEP16 recipes / 新增 Qwen3.5 FP8 GB300 AgentX DEP16 配方 - #3840

Merged
cquil11 merged 3 commits into
mainfrom
qwen3.5-fp8-gb300-agentx-dep16
Oct 9, 2026
Merged

cquil11 merged 3 commits into
mainfrom
qwen3.5-fp8-gb300-agentx-dep16

Conversation

@RohitNagraj

Copy link
Copy Markdown
Collaborator

Add three Qwen3.5-397B-A17B-FP8 GB300 AgentX configurations pairing one, two, or three PP4 prefill workers with one TP/DP/EP16 decode worker. The shared recipe bundle uses MTP6, HiCache, decode sequence-length splits 1, and max-mamba-cache-size: 1872 for decode.

Two matrix entries select five disaggregated configurations and three existing aggregate configurations on lmsysorg/sglang:nightly-dev-cu13-20260913-fa663e72, retaining Dynamo revision ad6f7d54ce7b99c53576b10482755c93c921fbac. PP4 prefill roles set PYTHONOPTIMIZE=1, which disables Python assertions, to allow MTP with overlap scheduling on this nightly; decode and aggregate roles retain normal assertion behavior.

中文

新增三种 Qwen3.5-397B-A17B-FP8 GB300 AgentX 配置,分别将一、二、三个 PP4 prefill worker 与一个 TP/DP/EP16 decode worker 配对。共享配方使用 MTP6、HiCache、decode sequence-length splits 1,并将 decode 的 max-mamba-cache-size 设为 1872。

两个 matrix 条目选择五种分离式配置和三种已有聚合配置,使用 lmsysorg/sglang:nightly-dev-cu13-20260913-fa663e72,并沿用 Dynamo 固定版本 ad6f7d54ce7b99c53576b10482755c93c921fbac。PP4 prefill 角色设置 PYTHONOPTIMIZE=1,禁用 Python 断言,以便在此 nightly 中同时使用 MTP 和 overlap scheduling;decode 和聚合角色保留正常的断言行为。

AI model disclosure
  • gpt-6.1-sol: prepared the recipe settings and matrix configuration.
  • claude-opus-5-5: reviewed the recipe settings and selected configurations.
  • Codex (exact current model/version could not be verified): consolidated the recipe variants, prepared the configuration and changelog changes, ran local checks, and drafted this PR description.

AI 模型说明:gpt-6.1-sol 编写配方参数和 matrix 配置;claude-opus-5-5 审阅配方参数及所选配置;Codex 整理配方变体、准备配置及变更记录、执行本地检查并起草本说明,当前精确模型及版本无法核实。

新增 Qwen3.5 FP8 GB300 AgentX DEP16 配方及所选配置。
将 Qwen3.5 DEP16 变更记录关联到 PR。
@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

Thanks for the contribution!

  • Review: If this PR changes files owned by someone other than a repository admin or @SemiAnalysisAI/core, ask one eligible CODEOWNER to complete the latest PR_REVIEW_CHECKLIST.md before contacting a core maintainer on Slack. Follow the template exactly, including As a PR reviewer and CODEOWNER, I have reviewed this and have, so sign-off verification triggers.
  • PR verification: Sweeps run only when the PR appends an inferencex-e2e/perf-changelog.yaml entry and carries exactly one primary label: full-sweep-fail-fast (strongly recommended; canary plus per-matrix fail-fast), full-sweep-enabled (canary; matrix jobs continue after a failure), or non-canary-full-sweep-enabled (no canary or fail-fast). The modifiers all-evals, evals-only, and agentx-fast require a primary label. On fork PRs, a maintainer applies the label. See sweep labels and reuse.
  • After merging: PR authors must ensure all GitHub Actions jobs pass. Transient failures often pass on rerun; see how to rerun failed jobs.
中文

感谢你的贡献!

  • **审阅:**如果 PR 修改的文件归属于仓库管理员及 @SemiAnalysisAI/core 之外的 CODEOWNER,请先联系一位有资格的 CODEOWNER 填写最新的 PR_REVIEW_CHECKLIST.md,再通过 Slack 联系核心维护者。必须严格遵循模板,并保留 As a PR reviewer and CODEOWNER, I have reviewed this and have,才能触发签核验证。
  • **PR 验证:**只有当 PR 在 inferencex-e2e/perf-changelog.yaml 末尾追加了条目,并且恰好带有一个主标签时,才会运行扫描:full-sweep-fail-fast(强烈推荐;canary 加逐矩阵 fail-fast)、full-sweep-enabled(有 canary;矩阵任务在失败后继续运行)或 non-canary-full-sweep-enabled(无 canary,也无 fail-fast)。修饰标签 all-evals、evals-only 和 agentx-fast 必须与主标签一起使用。fork PR 的标签由维护者添加。参见扫描标签与复用。
  • **合并后:**PR 作者必须确保所有 GitHub Actions 任务通过。临时性失败通常可以通过重新运行恢复;参见重新运行失败任务的说明。

@RohitNagraj RohitNagraj added the full-sweep-enabled Full sweep with canary gate; matrix jobs run to completion despite failures label Oct 8, 2026

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

I reviewed this PR and didn't find any confirmed bugs. Because it touches CODEOWNER-protected paths (inferencex-e2e/configs/nvidia-master.yaml and the gb300-* srt-slurm recipe tree) with new speculative-decoding (MTP6) and HiCache wiring, a human look from one of the listed owners would still be worthwhile.

What was reviewed: the model.container/image and Dynamo-revision parity between the new recipe and master config (both match); the new agg-midcurve search-space points against the pre-existing agg-pareto sweep (three of them reuse the same CONFIG_FILE/conc-list, which is redundant but not incorrect); the benchmark.use_chat_template: true field against the agentic-replay chat-template env var (AIPERF_APPLY_CHAT_TEMPLATE) it doesn't actually wire up — but no sibling multi-node AgentX MTP recipe sets that env var either, so this isn't a regression this PR introduces; and the perf-changelog.yaml entry (single tail-appended block, English, covering both new config keys).

Extended reasoning...

Pure-addition config/recipe change (449 lines, 3 files): a new GB300 FP8 Qwen3.5 AgentX disaggregated recipe with MTP6 speculative decoding and HiCache offload, its wiring into two new nvidia-master.yaml search-space keys, and one perf-changelog.yaml append. No auth/crypto/data-exposure surface; the main risk is benchmark-config correctness (precision/env settings, search-space duplication) rather than security. Decisive factors for defer over approve: both changed files fall under CODEOWNERS entries (nvidia-master.yaml and gb300-* recipes), and independent checks surfaced a chat-template env-var mismatch and duplicate sweep points that, while judged non-blocking (pre-existing pattern / minor redundancy, not a regression), are worth an owner's confirmation.

This review covers commit 94e50cd, which is no longer the latest commit on this pull request; later commits are not covered by it.

@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

@nvpohanh

nvpohanh commented Oct 9, 2026

Copy link
Copy Markdown
Collaborator

[by Claude Code] The SGLang cookbook integration of this PR's AgentX configs (qwen3.5-fp8-gb300-dynamo-sglang-agentic-agg-midcurve, qwen3.5-fp8-gb300-dynamo-sglang-agentic-pp-midcurve) will happen in sgl-project/sglang#43083, in the Agentic Long-Context Deployment section of the Qwen3.5 cookbook page. This PR has no authorized /use <run_id> comment yet, so the cookbook shows the PR-head recipe as "in progress" until a measured run is pinned.

@nvpohanh

nvpohanh commented Oct 9, 2026

Copy link
Copy Markdown
Collaborator

[by Claude Code] sgl-project/sglang#43083 has been merged. This PR's AgentX configs (qwen3.5-fp8-gb300-dynamo-sglang-agentic-agg-midcurve, qwen3.5-fp8-gb300-dynamo-sglang-agentic-pp-midcurve) are now in the Agentic Long-Context Deployment section of the SGLang Qwen3.5 cookbook: https://docs.sglang.io/cookbook/autoregressive/Qwen/Qwen3.5#agentic-long-context-deployment

This PR has no authorized /use <run_id> comment yet, so the cookbook shows the recipe at this PR's head (5948cad58) as "in progress". It switches to the measured run at the next cookbook sync after a run is pinned or this PR merges.

@nvpohanh

nvpohanh commented Oct 9, 2026

Copy link
Copy Markdown
Collaborator

/use 37833971361

@github-actions

github-actions Bot commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

@nvpohanh staged run 37833971361: https://inferencemax-app-git-staging-semianalysisai.vercel.app/inference?i_dates=2026-10-08~r37833971361

This run remains available across future /stage-results requests. Staging the same run ID again updates its staged data. Staging workflow

@nvpohanh

nvpohanh commented Oct 9, 2026

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.
  • Verified that this PR passes evals. Please link to GitHub Action workflow that shows this.
  • Verified that speculative decoding PRs uses chat templates to align the AL distribution to real world
  • Verified that every draft model and draft head is served as it ships: the draft that ships with the served checkpoint, at its stored precision, through the pinned upstream image's default handling, with the shipped and effective draft precision recorded in the additional detail section. No submission-side quantization, dtype override, checkpoint substitution, or patch may lower draft precision below that default, regardless of eval results or AL. Explicitly verified that SGLANG_NVFP4_CKPT_FP8_NEXTN_MOE is not enabled in the effective recipe, including inherited settings; enabling it is prohibited going forward, and historical runs do not grant an exception. See Draft-model precision for what counts as the default and the MLPerf comparison.
  • 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 infx/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; target/verifier FLOPs at lower precisions is fine, given that the config passes private evals, but this does not permit lowering draft-model or draft-head precision below what ships. 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 affected vLLM/SGLang production serving configuration in this PR, including Dynamo deployments, is documented in the official vLLM recipes and/or the SGLang cookbook, for both single-node and multi-node aggregated and disaggregated serving. The documentation covers production-useful flags, environment variables, and launch commands (including prefill, decode, and router/frontend commands for disaggregation); InferenceX-only benchmark/harness settings are excluded with reasoning in the additional detail section:
    • I linked the corresponding upstream PR in the vLLM recipe repo or SGLang cookbook source 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 this PR uses append-only: true, verified that it only adds generated points or recipe variants inside a selected existing config/scenario and existing same-image visual curve: every previously generated point remains present with the same recipe, no prior point is removed or rerun, and every benchmark-affecting change in the complete diff can affect only the corresponding newly appended points (never an existing point), regardless of which file contains it.
  • If any of the above criteria cannot reasonably be satisfied, I have provided additional reasoning below.
  • Reported measured throughput/E2EL Pareto counts and evidence per affected curve (≥5 points strongly recommended). Below 5 or unverifiable: tag a core maintainer for review; recorded admin bypass required before merge. N/A if no curves are affected. Details.

Additional detail section:

  • Assessed commit: head 5948cad58f35cca9629151255e0be59d913144e7, against main at ddaccac3054c4a090506a0de0e830f02a53fcf5e. The PR changes three files: the new disagg-dep16-mtp6-variants.yaml (a base recipe with override_1p1d/2p1d/3p1d), two new nvidia-master.yaml keys (qwen3.5-fp8-gb300-dynamo-sglang-agentic-pp-midcurve and qwen3.5-fp8-gb300-dynamo-sglang-agentic-agg-midcurve), and one appended perf-changelog.yaml entry. The other five recipes it selects are unchanged from main.
  • PR validation: Run Sweep 37833971361 ran on head 5948cad5 (pull_request event, attempt 1, success) and is pinned with /use 37833971361. Its result artifacts are unexpired (they expire on 2027-01-06).
    • All 8 multi-node agentic / jobs succeeded:
    • The skipped jobs are the empty single-node, fixed-sequence, canary and result-aggregation lanes, which this multi-node AgentX sweep does not use.
  • Evals: all 6 multi-node agentic eval / jobs succeeded. GSM8K em_strict from eval_results_all, with n_eff=1319, infrastructure_success: true and no integration error in each:
    • c180 0.9742, c300 0.9780, c400 0.9742
    • c200 0.9757, c1000 0.9773, TP4 c44 0.9765
    • All clear the qwen3.5 GSM8K threshold of 0.94 in infx/evals/thresholds.yaml, on the PR's image.
    • The two c1 points have no eval job because the generator's default policy evaluates the highest concurrency at or above MIN_EVAL_CONC = 16 per topology.
    • The eval jobs run real MTP verification: no SGLANG_SIMULATE_ACC_* is set in their logs.
  • Image and engine ordering: every point uses upstream lmsysorg/sglang:nightly-dev-cu13-20260913-fa663e72 (SGLang fa663e7297f7c3d5caa991d8b6dbc4fa6d4dadc4). The PR adds only framework: dynamo-sglang entries, so it adds no vendor-framework entry.
  • Chat template: AgentX replay runs aiperf profile --scenario agentx. That scenario fixes endpoint_type: "chat" at the pinned AIPerf submodule (inferencex_agentx_mvp.py#L50). The scraped server metrics in the job logs show every request on chat_completions (Dynamo frontend) or /v1/chat/completions (SGLang router).
  • Draft precision: the draft is the embedded MTP head (mtp.*, one full-attention layer) of Qwen/Qwen3.5-397B-A17B-FP8 at revision ea5b4f81096f3901c91dea97f81324302495781d. There is no separate draft checkpoint and no --speculative-draft-model-path.
    • Shipped, from the config and the safetensors headers:
      • FP8 E4M3 with 128x128 BF16 block scales: the attention q/k/v/o projections, all 512 routed experts and the shared expert.
      • BF16: mtp.fc, the router gate and shared_expert_gate (all three are listed in modules_to_not_convert), and the norms.
      • The draft shares the target's BF16 embedding and lm_head.
    • Effective, with the same precision for every group under the pinned image's default handling:
      • The draft inherits the checkpoint Fp8Config. speculative_draft_model_quantization is unset, so it follows the target's fp8. --quantization fp8 restates the checkpoint's quant_method.
      • qwen3_5_mtp.py passes that config through unchanged, and mtp.fc stays a BF16 nn.Linear.
      • Routed experts run FP8 block-scale through FlashInfer TRT-LLM (flashinfer_trtllm; flashinfer_trtllm_routed on DEP decode, which only moves top-k selection out of the kernel). Activations are dynamic 1x128 FP8, as the checkpoint declares, and the weights are not requantized (fp8.py). The FlashInfer A2A dispatch payload stays BF16.
      • The draft KV cache is FP8 E4M3, inherited from the same global --kv-cache-dtype fp8_e4m3 the target uses. No draft-specific KV dtype is set.
    • No recipe sets a draft quantization, dtype or draft KV override; none substitutes a checkpoint, applies a patch or prunes the draft.
  • SGLANG_NVFP4_CKPT_FP8_NEXTN_MOE: not enabled.
    • It is absent from all 8 effective recipes, the master config, the harness and launcher, the srt-slurm pin 9d65c0ae, the SGLang Dockerfiles at fa663e72, and the logged worker environment of every benchmark and eval job.
    • It defaults to EnvBool(False) (environ.py#L969), and its only read sites are DeepSeek-family / modelopt_fp4 paths.
  • Golden AL: the harness's synthetic_acceptance planner derives the value from the decode or aggregate role's speculative-num-steps and THINKING_MODE=thinking_on. It sets it role-locally with SGLANG_SIMULATE_ACC_METHOD=match-expected and SGLANG_SIMULATE_ACC_TOKEN_MODE=real-draft-token; the job logs show Applied override: --set roles.<role>.env.SGLANG_SIMULATE_ACC_LEN=....
    • The DEP16 points (NEXTN 6/1/7) and the aggregate points (6/1/7) use 4.8.
    • The DEP4 points (5/1/6) use 4.41.
    • Both equal qwen3.5_mtp.yaml thinking_on at draft lengths 6 and 5.
  • MODELS.md: Qwen3.5-397B-A17B (qwen3.5) agentic coding is active for fp8/fp4, with native MTP.
  • No architecture hacks:
    • No --hf-overrides, --json-model-override-args or config edits.
    • SGLANG_PP_LAYER_PARTITION=16,16,16,12 sums to all 60 layers, and SGLang rejects any partition that does not.
    • --enable-linear-replayssm-spec replays the accepted prefix into the GDN state rather than snapshotting per draft step. It is the same recurrence with less memory, and it affects only target GDN layers.
    • mamba-ssm-dtype: bfloat16 (target recurrent state only; the MTP layer has no SSM state) is the same setting the merged Qwen3.5 GB300 FP8 recipes on main use, and the evals above pass.
    • PYTHONOPTIMIZE=1 (prefill only) strips Python asserts and has no numeric effect.
    • publish_events_and_metrics is a TRT-LLM srt-slurm engine field and does not exist on this SGLang path. --enable-metrics is on.
  • No engine patches:
    • No patch files, git apply, heredoc or sed rewrites, site-packages edits, sitecustomize, or engine wheel installs.
    • The srt-slurm harness patch directory is empty, and no host hooks run on gb300-nv.
    • The five disaggregated points install upstream ai-dynamo at the pinned ad6f7d54ce7b99c53576b10482755c93c921fbac as the dynamo-sglang deployment layer, as recipes already on main do. It does not reinstall SGLang. No waiver is needed.
  • Recipe publication (merged): sgl-project/sglang#43083 is MERGED (mergedAt: 2026-10-09T05:55:37Z, merge commit 1fc6b8962c02f8b8413aac33c57ad82a4df3c8b7).
    • Published page: https://docs.sglang.io/cookbook/autoregressive/Qwen/Qwen3.5#agentic-long-context-deployment (source)
    • Data: docs/src/snippets/agentx/Qwen/qwen3.5.jsx. It cites this PR's head 5948cad5 and has seven cells covering all 8 points: agg-midcurve#0 covers TP4 c1 and c44, agg-midcurve#2 covers TP8 c1, and pp-midcurve#0-#4 cover the five disaggregated points.
    • Prefill, every disaggregated point: the full python3 -m dynamo.sglang command with PP4, NEXTN, HiCache (write_back, kernel, page_first_direct, ratio 1.0), breakable prefill CUDA graphs, mamba cache settings and backends, plus PYTHONOPTIMIZE=1, SGLANG_PP_LAYER_PARTITION and the disaggregation/Mooncake environment.
    • Decode, DEP16: TP/DP/EP16 with DP attention and DP LM head on 4 nodes, NEXTN 6/1/7, max-mamba-cache-size 1872, max-running-requests 640 and cuda-graph-max-bs-decode 128.
      • It also covers --moe-a2a-backend flashinfer, --speculative-moe-runner-backend flashinfer_trtllm_routed, --speculative-moe-a2a-backend flashinfer, --enable-linear-replayssm-spec, --linear-replayssm-cache-len 32, --disaggregation-decode-extra-slots 2 and SGLANG_TRTLLM_MHA_DECODE_SEQ_LEN_SPLITS=1.
    • Decode, DEP4: the same coverage with the DEP4 values (SEQ_LEN_SPLITS=4, NEXTN 5/1/6).
    • Frontend/router: the Dynamo frontend (--router-mode kv, --router-session-affinity-ttl-secs 3600, --router-replica-sync, --router-temperature 1.0, two frontends behind nginx with session affinity), etcd/NATS, and the source install of Dynamo at ad6f7d54. The aggregate points use the SGLang router command.
    • Mooncake KV transfer is the SGLang default at fa663e72.
    • I compared every argument and environment variable against the srt-slurm launch commands and worker environments logged by all 8 benchmark jobs. Nothing production-relevant is missing or contradictory. The only difference is --disaggregation-bootstrap-port (31000 in the run, the SGLang default in the cookbook), which is a port.
    • Excluded as InferenceX-only:
      • SGLANG_SIMULATE_ACC_*, the synthetic acceptance control.
      • --enable-metrics, --enable-cache-report and router Prometheus flags, which AIPerf scrapes for result collection.
      • Logging: --enable-request-time-stats-logging, --decode-log-interval, --log-level, DYN_LOG, NO_COLOR, PYTHONUNBUFFERED, MC_TE_METRIC.
      • Cache directory paths: SGLANG_CACHE_DIR, SGLANG_DG_CACHE_DIR, FLASHINFER_WORKSPACE_BASE.
      • srt-slurm placement: hosts, ports, --nccl-port, --dist-init-addr, --node-rank, --dump-config-to, DYN_SYSTEM_PORT, HEAD_NODE_IP, etcd/NATS addresses.
      • PIP_BREAK_SYSTEM_PACKAGES, which only enables the in-container Dynamo build.
      • The crash-dump toggles SGLANG_CUDA_COREDUMP_BEFORE_CRASH=0 and SGLANG_PYSPY_DUMP_BEFORE_CRASH=0.
      • The benchmark, health_check and slurm/sbatch/srun sections.
  • append-only: N/A, because the single new changelog entry does not set append-only: true. The PR's perf-changelog.yaml change is append-only. The current merge conflict with main is limited to that file.
  • Pareto coverage: one affected curve, qwen3.5 / agentic-coding / gb300 dynamo-sglang / fp8 / run 37833971361. I counted it with infx.workflows.pareto_coverage from the 8 bmk_agentic_* artifacts (x = E2EL in seconds, y = per_gpu.total_tput_tps). All 8 points are valid, with no errored requests.
    • P90 E2EL: 5 of 8 frontier points:
      • TP8 c1 (6.50 s, 2,465 tok/s/GPU)
      • TP4 c1 (7.48 s, 4,618)
      • DEP16 3P c400 (17.63 s, 61,359)
      • DEP4 1P1D c200 (35.89 s, 85,310)
      • DEP4 5P3D c1000 (37.57 s, 101,367)
    • P75 E2EL: 5 of 8, the same set.
    • DEP16 1P c180, DEP16 2P c300 and TP4 c44 are dominated. This meets the 5-point recommendation, so no admin exception is needed.
    • Dashboard: https://inferencex.semianalysis.com/inference?unofficialRun=37833971361

Signed: nvpohanh

@github-actions

github-actions Bot commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

✅✅✅ Verdict: PASS ✅✅✅

Passed and not applicable checks

✅ Check 0 (CODEOWNER): PASS — @nvpohanh is a named owner of inferencex-e2e/configs/nvidia-master.yaml and of the /inferencex-e2e/benchmarks/*_node/srt-slurm-recipes/**/gb300-*/ recipes, and perf-changelog.yaml falls under the catch-all.

✅ Check 1 (Passing sweep on in-PR commit): PASS — run 37833971361 ran on head 5948cad5, which is in the PR. All 8 multi-node agentic / jobs and all 6 multi-node agentic eval / jobs finished with success; none were skipped.

✅ Check 2 (Evals): PASS — in eval_results_all, GSM8K em_strict ranges from 0.9742 to 0.9780 across the 6 evaluated points (c180, c300, c400, c200, c1000, TP4 c44). Each has n_eff=1319, infrastructure_success: true and no integration error, all above the qwen3.5 bar of 0.94, on lmsysorg/sglang:nightly-dev-cu13-20260913-fa663e72.

✅ Check 3 (Upstream recipe): PASS — sgl-project/sglang#43083 is MERGED (2026-10-09T05:55:37Z, 1fc6b896). Its docs/src/snippets/agentx/Qwen/qwen3.5.jsx has agg-midcurve#0/#2 and pp-midcurve#0-#4 cells, all citing 5948cad5. Together they reproduce the prefill and decode dynamo.sglang args and env, including the DEP16 diff (TP/DP/EP16, 4 nodes, NEXTN 6/1/7, max-mamba-cache-size 1872, SEQ_LEN_SPLITS=1), the Dynamo frontend/nginx/etcd/NATS commands, and the SGLang router. The exclusions (logging, metrics, paths, ports, simulated acceptance) are justified in the sign-off.

✅ Check 4 (Reuse command): PASS — /use 37833971361 was posted by nvpohanh (COLLABORATOR) in comment 6075325834.

✅ Check 5 (Latest checklist): PASS — every item and sub-item of the current PR_REVIEW_CHECKLIST.md template is present and checked.

✅ Check 6 (Upstream images / engine ordering): PASS — both new entries are framework: dynamo-sglang on upstream lmsysorg/sglang:nightly-dev-cu13-20260913-fa663e72. No vendor-framework entry is added.

✅ Check 7 (Deprecated models): PASS — qwen3.5 agentic coding is active for fp8/fp4 per MODELS.md.

✅ Check 8 (Architecture hacks / event publication): PASS — no --hf-overrides, --json-model-override-args or model-config edits. SGLANG_PP_LAYER_PARTITION=16,16,16,12 covers all 60 layers. publish_events_and_metrics appears only in TRT-LLM recipes and is not a field on this SGLang path or its referenced recipes.

✅ Check 9 (Chat template): PASS — use_chat_template: true is set, and the AgentX AIPerf scenario uses endpoint_type: "chat".

✅ Check 10 (Engine patches): PASS — no patch files, git apply, heredoc or sed rewrites, or engine wheel installs. The only install is upstream Dynamo at ad6f7d54, which is the deployment layer.

✅ Check 11 (Agentic golden AL): PASS — job logs show SGLANG_SIMULATE_ACC_LEN=4.8 with match-expected/real-draft-token for the MTP6 roles (DEP16 and agg). The DEP4 recipes use speculative-num-steps: 5, which maps to 4.41. Both equal qwen3.5_mtp.yaml thinking_on at draft lengths 6 and 5.

➖ Check 12 (Append-only): N/A — the new changelog entry does not set append-only: true.

✅ Check 13 (Draft precision): PASS — the draft is the embedded MTP head of Qwen/Qwen3.5-397B-A17B-FP8, inheriting the checkpoint's FP8 config. No recipe sets a draft quantization, dtype, draft KV override, draft path or patch, and the KV cache is a global fp8_e4m3 shared with the target. SGLANG_NVFP4_CKPT_FP8_NEXTN_MOE is absent from every referenced gb300-fp8 recipe and from the logged environments; it defaults to off.

✅ Check 14 (Pareto coverage): PASS — one curve, qwen3.5 / agentic-coding / gb300 dynamo-sglang / fp8 / run 37833971361, built from the 8 bmk_agentic_* artifacts (per_gpu.total_tput_tps vs E2EL, no errored requests). infx.workflows.pareto_coverage gives P90 5/5 frontier points (TP8 c1, TP4 c1, DEP16 3P c400, DEP4 1P1D c200, DEP4 5P3D c1000) and P75 5/5 with the same set.

✅ Check 15 (PR description): PASS — the body's claims (1/2/3 PP4 prefill with a DEP16 decode, MTP6, HiCache, decode splits 1, decode max-mamba-cache-size: 1872, five disagg plus three existing agg configs, the pinned image and Dynamo revision, PYTHONOPTIMIZE=1 on prefill only) match the code at 5948cad5.

Assessed commit: 5948cad58f35cca9629151255e0be59d913144e7.

@cquil11 cquil11 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Approved for merge with the existing CODEOWNER sign-off and sweep reuse. Audited all eight throughput points in https://github.com/SemiAnalysisAI/InferenceX/actions/runs/37833971361: the actual AIPerf profiles use the 256k dataset, and profiling server-log AL interval means closely match the synthetic targets (4.41 or 4.80).

@cquil11
cquil11 merged commit 33ce22a into main Oct 9, 2026
27 checks passed
@cquil11
cquil11 deleted the qwen3.5-fp8-gb300-agentx-dep16 branch October 9, 2026 16:06
adibarra added a commit that referenced this pull request Oct 9, 2026
…s from the pareto bundles

#3840's midcurve entries rerun two disaggregated and three aggregated points
of the pareto entries by naming those points' standalone recipes, which the
bundles replace. Their rows select the matching pareto overrides, so each
still runs exactly the pareto point's recipe rather than a copy that could
drift; the DEP16 points keep disagg-dep16-mtp6-variants.yaml. RECIPES.md
notes that an entry rerunning another entry's points selects its overrides.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

full-sweep-enabled Full sweep with canary gate; matrix jobs run to completion despite failures

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

3 participants