Skip to content

[AMD] MiniMax-M3.1-Flash MI355X vLLM: latest nightly image and merged optimization flags / [AMD] MiniMax-M3.1-Flash MI355X vLLM:最新 nightly 镜像与已合入优化的开关 - #4866

Merged
chunfangamd merged 7 commits into
mainfrom
m31-mi355x-vllm-nightly-stack
Nov 11, 2026
Merged

chunfangamd merged 7 commits into
mainfrom
m31-mi355x-vllm-nightly-stack

Conversation

@Fangzhou-Ai

@Fangzhou-Ai Fangzhou-Ai commented Nov 6, 2026 •

Copy link
Copy Markdown
Collaborator

MiniMax-M3.1-Flash on MI355X (vLLM, TP4, Quark MXFP4) still runs the day-zero image minimax-m31-flash, which predates the ROCm work merged since. This PR moves it to the latest nightly and turns on the optimizations that need an opt-in switch, so the recipe actually uses them.

What changes (minimaxm31flash-fp4-mi355x-vllm-agentic-dspark, all 7 points regenerate)

  • Image: vllm/vllm-openai-rocm:nightly-4fab5a07475822c6eaa971dceb2e2220d0446808@sha256:6f126f27… (vLLM main of 2026-11-05). It contains decode CP (#64448), qkv/FFN norm+quant fusions (#63637, #65478), four-wave decode top-k (#65087), local DSpark 7 indexer scoring (#65432), per-XCD sparse-decode splits (#65481), the MXFP8 tile retune (#65530) and the drafter monokernel (#65386), so those apply automatically.
  • Env at every point: VLLM_ROCM_MINIMAX_M3_MONO_DRAFTER=1 (#65386), VLLM_ROCM_PARALLEL_INDEX_TOPK=1 (#65267, NVFP4 indexer points), VLLM_USE_RUST_FRONTEND=1, VLLM_ROCM_USE_SKINNY_GEMM=0 (removes the draft LM head's 5-request skinny-GEMM cliff, 0.28 vs 0.05 ms per call).
  • c16/c32: breakable CUDA graphs (VLLM_USE_BREAKABLE_CUDAGRAPH=1, FULL_AND_PIECEWISE, multiple-of-8 capture list).
  • DBO removed at c16/c32/c64. This is a deliberate trade, not an "enable everything" choice: the validated stack ran without DBO (decode steps never split, and it cost 0.9-2.2 ms per decode step at N>=4 in a decode profile), and I have not measured DBO on versus off in isolation on the new image. Say if you would rather keep DBO and drop the graphs.
  • Unchanged: c1-c8 (DSpark 7, mono decode, FP8 KV and indexer), c64 (DSpark 3, NVFP4 KV, CPU KV offload), memory utilization, max-num-seqs, prefill budgets.

INT4 quick all-reduce is not enabled here, and is a problem for #4485 on this image. The first CI run of this PR failed at worker startup with AttributeError: 'QuickAllReduceInt4' object has no attribute 'compile': the nightly's vLLM (#59478) calls .compile on AITER's FlyDSL INT4 object, and the AITER built into the image (0.1.28.post1) does not have it. Any recipe on this image that sets VLLM_ROCM_QUICK_REDUCE_QUANTIZATION=INT4 will fail the same way (#4485 included, if its image is bumped to a nightly of this age).

Validation

Run 42224368840 on ce4079c passed all seven points and the c8, c32 and c64 GSM8K evals (strict 0.9606, 0.9629 and 0.9598), and /use 42224368840 is posted. The concurrency 16 job ran twice: the second attempt (28,686 tok/s/GPU at 8.40 s p90 E2EL) is the one used, and the first (26,846 at 12.72 s) stays in results_bmk. The first CI run (c1, on 6aec58e) failed at startup on the INT4 setting above, which this revision removes. Before opening, I started the c16 variant (rendered from this recipe) on 4x MI355X with the nightly-commit vLLM code: healthy, drafter kernels on, 45 prefill + 32 decode graphs captured, no errors, mean acceptance length 4.5-4.65, GSM8K 0.945 (200 questions, c16), 22K-token prefill served. Not covered locally: the Rust frontend (no matching binary), the c1-c8 mono points (this container's AITER 0.1.27 fails the mono kernel; the image builds AITER 0.1.28.post1) and c64. The local test also ran with INT4 on and passed, because the local AITER has the method the image lacks, so a local pass did not predict the CI failure.

Validation details
  • Local AgentX sweeps (4x MI355X, earlier build with the same stack plus then-open PRs, real workload, single runs) at the same flags: c16 P90 interactivity 223.7 vs 168.3 tok/s/user for the day-zero CI run, c32 149.7 vs 115.1; Rust frontend plus breakable graphs added +5.1% / +5.5% P90 over Rust alone at c16 / c32. DSpark 7 at c64 was used there, not this recipe's DSpark 3.
  • DBO off was never isolated end to end: knobs-only (DBO off, skinny GEMM off, INT4) on an unpatched build was within noise of the recipe config at c16/c32.
  • The capture list is a deprecated alias on the V2 runner (startup warns); it sets both prefill token sizes and decode request sizes, so it is kept.
  • Draft data types are unchanged: the dspark/ draft keeps its MXFP8 config and an FP8 draft KV cache. The drafter kernels replace the draft layers' MXFP8 linear, norm and attention ops; vLLM's tests/models/minimax_m3/test_dspark_drafter.py holds them to the stock layers' own numerical spread. At c64 (3 draft tokens) they refuse and the stock layers run.
中文

MiniMax-M3.1-Flash 在 MI355X 上的 vLLM 配方仍使用首日镜像 minimax-m31-flash,不含此后合入的 ROCm 优化。本 PR 将镜像升级到最新 nightly(按 digest 固定),并打开需要显式开关的优化。

  • 镜像:nightly-4fab5a07475822c6eaa971dceb2e2220d0446808,已包含 decode CP、norm+quant 融合、四波 decode top-k、按 XCD 的稀疏解码切分、MXFP8 tile 重调、drafter monokernel 等。
  • 所有点新增环境变量:VLLM_ROCM_MINIMAX_M3_MONO_DRAFTER=1、VLLM_ROCM_PARALLEL_INDEX_TOPK=1、VLLM_USE_RUST_FRONTEND=1、VLLM_ROCM_USE_SKINNY_GEMM=0。
  • c16/c32:启用 breakable CUDA graph。
  • c16/c32/c64 移除 DBO(已验证的方案不含 DBO;未在新镜像上单独对比 DBO 开关)。
  • c1-c8 与 c64 的投机解码、KV、卸载设置不变。
  • 不启用 INT4 quick all-reduce:该镜像的 AITER 缺少 vLLM 调用的 QuickAllReduceInt4.compile,worker 启动即失败(首次 CI 的 c1 即因此失败);Enable INT4 QuickReduce for MiniMax M3.1 MI355X vLLM / 为 MiniMax M3.1 MI355X vLLM 启用 INT4 QuickReduce #4485 若升级到同龄 nightly 也会遇到同样问题。
  • InferenceX 运行 42224368840(ce4079c)七个点与 c8、c32、c64 的 GSM8K 评测全部通过(strict 0.9606、0.9629、0.9598),/use 42224368840 已发布;c16 运行了两次,使用第 2 次结果(28,686 tok/s/GPU,p90 E2EL 8.40 s),第 1 次(26,846,12.72 s)保留在 results_bmk 中。开 PR 前已在本地用 nightly 提交的代码验证 c16 变体可启动、GSM8K 0.945(200 题)。Rust 前端、c1-c8 mono 点与 c64 未能在本地验证。
AI model disclosure

Claude Sonnet 5.5 (claude-sonnet-5-5[1m]) through Claude Code prepared the recipe, config and changelog edits, ran the local checks and the c16 smoke test, and wrote this description. No delegated models contributed. Claude Opus 5.5 (Cursor agent) later updated the Validation section, at the reviewer's request, to cite run 42224368840.

Type of change
  • Configuration change

… optimization flags

Pin vllm/vllm-openai-rocm nightly-4fab5a07 (2026-11-06) by digest and enable the
MiniMax-M3.1 ROCm optimizations merged since the day-zero image: drafter
monokernel, parallel decode top-k, Rust frontend, INT4 quick all-reduce, skinny
GEMM off, and breakable CUDA graphs at c16/c32. DBO is removed from c16-c64.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Nov 6, 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 任务通过。临时性失败通常可以通过重新运行恢复;参见重新运行失败任务的说明。

@Fangzhou-Ai Fangzhou-Ai added the full-sweep-enabled Full sweep with canary gate; matrix jobs run to completion despite failures label Nov 6, 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.

Findings marked 🟡 are optional suggestions and need no follow-up push.

Comment thread inferencex-e2e/perf-changelog.yaml Resolved
Comment on lines +111 to +116
# c16-c32: DSpark 7 on the NVFP4 KV cache. Breakable CUDA graphs capture the
# prefill and mixed steps too. The capture list (every multiple of 8 up to 256,
# then 384-8192; a coarse list makes decode about 10% slower) is a deprecated
# alias on the V2 runner that sets both the prefill token sizes and the decode
# request sizes (1-32 at c16); the new per-kind fields would change the decode
# graphs. Admission is 2x CONC.

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.

🟡 nit (optional): The rewritten c16-c32 section comment is a header describing an override, which AGENTS.md's comment rules forbid. It also cites a past result ("a coarse list makes decode about 10% slower"). Separately, line 90 is left as an orphaned fragment: "8192-token prefill steps on the V1 runner." Fix: cut the header to a one-line reason on the compilation-config line, and delete or complete the line 90 fragment.

Why this was flagged

AGENTS.md:56-58 says: no header comments describing an override or section, no past results, and only short technical reasons tied to a specific line. The diff rewrites the comment above zip_override_tp4_dspark7 (agentic.yaml:111-116) into a six-line override description. That description includes the measured "about 10% slower" result and narrates the alias behaviour. The DBO edit at agentic.yaml:90 left the sentence fragment "8192-token prefill steps on the V1 runner.", which no longer explains anything. This is not a runtime issue; it is a convention violation the diff introduces.

Verification: AGENTS.md:54-58 says "No header comments describing a file, topology, config, recipe, override, or section" and "No history: ... or past results". The diff rewrites the section comment at agentic.yaml:111-116 into a six-line description of the override. At agentic.yaml:90 it leaves a sentence fragment with no subject. It does not change how anything runs.

@github-actions

github-actions Bot commented Nov 6, 2026 •

Copy link
Copy Markdown
Contributor

…educeInt4.compile

Workers failed in init_device at every point (first CI run, c1).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Fangzhou-Ai added a commit to Fangzhou-Ai/vllm that referenced this pull request Nov 6, 2026
…e opt-in optimizations

Update the mi355x_agentx preset to the InferenceX lane that passed on the latest
nightly (SemiAnalysisAI/InferenceX#4866): pin vllm-openai-rocm nightly-4fab5a07,
enable parallel index top-k and the Rust frontend, turn the skinny GEMM off, and
run concurrency 16 and 32 on breakable CUDA graphs. Dual-batch overlap is removed
from the 16-64 points. Refresh the runbook table and notes.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Signed-off-by: Fangzhou Ai <fangzhou.ai@amd.com>
@chunfangamd

Copy link
Copy Markdown
Collaborator

/use 42224368840

@github-actions

github-actions Bot commented Nov 7, 2026 •

Copy link
Copy Markdown
Contributor

@chunfangamd staged run 42224368840.

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

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

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

Checklist items
  • 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/42224368840
  • Verified that this PR passes evals. Please link to GitHub Action workflow that shows this. https://github.com/SemiAnalysisAI/InferenceX/actions/runs/42224368840
  • 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
  • Verified that new models disable integer all-reduce, with SGLang ROCm explicitly setting ROCM_QUICK_REDUCE_QUANTIZATION=NONE. Existing models are grandfathered per MODELS.md.
  • For affected Dynamo TRT-LLM benchmarks, verified that iteration/KV-cache metrics are collected and published under the pinned Dynamo implementation and effective engine settings. Resolve the installed Dynamo version separately from the container tag; use supported metrics controls without requiring KV events. Record the version and configuration evidence in the additional detail section. See verifier Check 17. N/A for unaffected serving paths or frameworks without these Dynamo settings.
  • 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
  • For official InferenceX (non-preview), verified that established models use upstream engine images built from master (or the equivalent default development branch), with new models transitioning within a reasonable time after release. See MODELS.md.
  • 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:

Draft data types: no change. The checkpoint is unchanged: amd/MiniMax-M3.1-Flash-Quark-MXFP4 (HF 8f274761).

  • Draft model. The DSpark draft in dspark/ is a standalone 5-layer DSparkMiniMaxDraftModel with quant_method: mxfp8 and weight_block_size: [1, 32].
    • The attention q/k/v/o projections and the dense FFN gate/up/down are MXFP8: FP8 E4M3 with 1×32 UE8M0 scales and dynamic activations.
    • fc, the Markov head, the confidence head and the norms are BF16.
  • Loading. At the image's vLLM 4fab5a07 (0.33.0rc1.dev910+g4fab5a074), _get_minimax_m3_dspark_draft still resolves the draft to that dspark/ subfolder. DFlashQwen3Model builds the draft's quant config from it through get_draft_quant_config, not from the target's Quark config.
  • Recipe. It sets no draft quantization or dtype. speculative-config keeps the FP8 draft KV cache and TRITON_ATTN, as on base.
  • The one draft-side change is VLLM_ROCM_MINIMAX_M3_MONO_DRAFTER=1.
    • It runs seven-token draft steps of up to 10 requests (c1–c32) as fused FlyDSL kernels. c64's three-token draft refuses them (drafter kernels off: 7 speculative tokens required) and runs the stock layers.
    • The kernels keep the stock precisions:
      • MXFP8 GEMVs on the stored MXFP8 weights;
      • activations quantized to MXFP8 before QKV, o_proj, gate/up and down, as the stock path's kMxfp8Dynamic does;
      • FP8 attention on the FP8 draft KV with an FP8 query, as the stock FP8-KV path does;
      • BF16 norms, residuals and partial sums.
  • Acceptance. The AL gate on the eval servers measured the real draft at 4.0467 (c8) and 4.0234 (c32) against the 4.04 golden value, and at 2.8576 (c64) against 2.88.

Sign-off evidence (PR review checklist)

Swept at ce4079c; assessed at the head f54e244. The later commits 19a9961 and f54e244 only merge main. The recipe, the master entry and this PR's changelog entry are unchanged, infx.matrix.plan generates the same 10 entries (seven points and three evals), and no main commit in between touches the launch, benchmark or eval code.

Item Status Evidence
PR validation ✅ Run 42224368840 on ce4079c: all seven points passed (TP4 c1, c2, c4, c8, c16 and c32 without offload; c64 with dram / vllm-simple). c16 ran twice with the same effective configuration on clean GPUs: drafter kernels on, breakable graphs, Rust frontend and synthetic AL 4.04. Attempt 1 (mia1-p01-g11) measured 26,846 tok/s/GPU at 12.72 s p90 E2EL with a 5.64 ms median TPOT. Attempt 2 (mia1-p01-g16) measured 28,686 tok/s/GPU at 8.40 s with 3.19 ms; the cause of the gap is not identified. This sign-off and the upstream runbook use attempt 2, and results_bmk keeps both rows.
Evals ✅ Same run, agentic eval, gsm8k (1319 questions), one eval per engine-env group: c8 strict 0.9606 / flexible 0.9598, c32 0.9629 / 0.9621, c64 0.9598 / 0.9591. All are within 2σ of the exact MI355X vLLM cohort (0.9568–0.9666; worst gap 0.0068 vs 0.0146). The eval server logs quoted under Eval server-log evidence below show the changed paths ran: mono decode and drafter kernels at c8, and drafter kernels and breakable CUDA graphs at c32. All three servers served the GSM8K requests through the Rust frontend, with VLLM_ROCM_PARALLEL_INDEX_TOPK=1 and VLLM_ROCM_USE_SKINNY_GEMM=0 in the worker env; c8's FP8 indexer bypasses the parallel top-k.
Chat templates ✅ AgentX replays the traces through /v1/chat/completions, so the served chat template applies. The Rust frontend applies the model's chat template and has a minimax_m3 tool parser; it treats --enable-auto-tool-choice as a no-op. Prompts did not shrink: server prompt tokens per request are 162.6K at c8 and 178.7K at c32, against 158.3K and 173.2K in run 41003224750.
Draft precision ✅ Above: the DSpark draft runs as shipped (MXFP8 projections and FFN; BF16 fc, heads and norms) with an FP8 draft KV cache, and the drafter kernels keep those precisions. There is no draft quantization or dtype override. SGLANG_NVFP4_CKPT_FP8_NEXTN_MOE does not apply (vLLM path).
Golden AL ✅ Throughput jobs inject synthetic acceptance 4.04 at k=7 (c1–c32) and 2.88 at k=3 (c64): the c16 config sets synthetic_acceptance_length: 4.04, and the c64 server reports mean acceptance length 2.88. On current main, signoff_facts golden-al selects minimax-m3.1-flash__dspark__native__probabilistic-block.yaml (thinking_on, probabilistic drafting, block verification) and matches both values.
MODELS.md ✅ minimaxm31flash (released 2026-10-23) agentic coding (vLLM DSpark) is active.
Architecture hacks ✅ No --hf-overrides or layer skipping. The parallel index top-k orders blocks by the same score-then-index key as the serial FlyDSL top-k, and vLLM tests it against that path, so it selects the same blocks. The drafter kernels, breakable CUDA graphs, the Rust frontend and the DBO removal change only how the same computation runs.
Integer all-reduce ✅ Disabled. ce4079c dropped VLLM_ROCM_QUICK_REDUCE_QUANTIZATION=INT4, and neither the recipe nor the image sets *QUICK_REDUCE_QUANTIZATION. vLLM 4fab5a07 defaults it to NONE, and the servers use AITER_CUSTOM and PYNCCL for the TP all-reduce.
Dynamo TRT-LLM metrics N/A Direct vLLM serving; no Dynamo.
Upstream image / engine-first ✅ vllm/vllm-openai-rocm:nightly-4fab5a07475822c6eaa971dceb2e2220d0446808@sha256:6f126f27…, from the upstream vLLM org. vLLM is the engine itself, so the ordering rule does not apply.
Main provenance ✅ The image's vLLM 4fab5a07 is on vLLM main (0 ahead, 81 behind). It replaces the day-zero image that #4671 ran under the new-model window.
Upstream recipe ✅ vllm-project/vllm#66188 merged on 2026-11-07 (80e0cd68). Its mi355x_agentx preset on the published recipe cites this PR at ce4079c and pins the same image and digest on the mxfp4 (Quark) variant at TP4. It sets the same values per point as this recipe: c1–c8 DSpark 7 with mono decode (FP8 KV and indexer caches, FULL_DECODE_ONLY, shuffled KV layout, 0.85, 8192-token steps); c16/c32 DSpark 7 on the NVFP4 KV cache with breakable CUDA graphs (FULL_AND_PIECEWISE, the same capture list, V2 runner, DEBUG_HIP_DYNAMIC_QUEUES=0) at 0.85 with 32768-token steps; c64 DSpark 3 at 0.90 with SimpleCPUOffloadConnector (1349 GB eager) and PYTHONHASHSEED=42. Every point has --max-num-seqs at 2× concurrency, block verification, prefix caching, VLLM_HTTP_TIMEOUT_KEEP_ALIVE=900 and the four new switches (VLLM_ROCM_MINIMAX_M3_MONO_DRAFTER, VLLM_ROCM_PARALLEL_INDEX_TOPK, VLLM_USE_RUST_FRONTEND, VLLM_ROCM_USE_SKINNY_GEMM=0). Shared settings come from the mxfp4 variant (--moe-backend aiter, no shared-expert fusion) and the AMD override (NVFP4 KV, indexer_decode_cp). Excluded as InferenceX-only or inert: served-model-name and max-model-len (the model id and its default 1M context); trust-remote-code (vLLM serves MiniMaxM3SparseForConditionalGeneration natively); disable-uvicorn-access-log, PYTHONNOUSERSITE, PYTHONUNBUFFERED, VLLM_ENGINE_READY_TIMEOUT_S and the benchmark env; and c64's VLLM_ROCM_MINIMAX_M3_SP_PREFILL=1, which vLLM 4fab5a07 never reads (the server logs it as an unknown variable).
Engine patches ✅ No patches, setup scripts, overlays or waivers; the pinned image runs as shipped.
Append-only N/A The changelog block does not set append-only: true.
Re-tune deltas ℹ️ Against the published run 41003224750 (day-zero image, DBO at c16–c64), throughput per GPU changes by +12.6%, +9.7%, +2.2%, +4.5%, +5.2%, +7.1% and +20.0% at c1, c2, c4, c8, c16, c32 and c64. Mean interactivity changes by +2.9%, +6.4%, +5.1%, +16.1%, +23.4%, +18.1% and +28.5%. With c16's first attempt, c16 is −1.6% and −20.0%.
Pareto counts ⚠️ 4 One curve: minimaxm31flash / agentic-coding / MI355X vLLM / fp4 / p90, run 42224368840 results_bmk. pareto_coverage gives 7 measured, 0 invalid and 4 on the frontier: c8 (16,104 tok/s/GPU, 7.00 s), c16 (28,686, 8.40 s), c32 (58,024, 13.22 s) and c64 (90,495, 27.17 s). c1, c2 and c4 are dominated by c8, whose p90 E2EL is now below c4's. c16's first attempt gives the same count. With fewer than 5, core maintainer review and a recorded admin bypass are needed before merge. cc @functionstackx

Eval server-log evidence (Check 2)

Quoted verbatim from the eval_server_logs_* artifacts of run 42224368840; each file is inside the artifact's srt-single-node-logs.tar.gz.

  • The drafter runner is built at the first eligible draft step outside CUDA-graph capture, which here is the startup warm-up, so the graphs captured afterwards include its kernels.

  • It stays on: neither the c8 log nor the c32 log shows a later drafter kernels off warning. Every draft step of up to 10 requests (seven query rows each) then runs on the kernels.

  • The RustFrontend stats lines show the Rust frontend serving the GSM8K requests.

  • Uncompressed, byte-identical copies of the c8 and c32 worker logs and fingerprints are attached in this comment, so the quoted lines can be read without opening the archives:

    • c8: c8_eval_server_mia1-p01-g37_agg_w0.log (sha256 a7ecdd917bfcaedd72917e13b1507f302495c10d56c05814527795431279cbdf) and c8_eval_fingerprint_agg_w0.json (sha256 6c0bd01252494fe7a18e38ce927c0103bcc73e42ec41f294a1687ccf30ba4cf9).
    • c32: c32_eval_server_mia1-p01-g16_agg_w0.log (sha256 6d8fa87dac3547cfc29c0cc9f7310b49a59f79dcba3d4987c5cff7a878b93451) and c32_eval_fingerprint_agg_w0.json (sha256 a52a5ced91844d9ddfa0b5232b1e63409253b3d9fbaf4adb05e8d893192d64ce).
    • SHA256SUMS.txt traces each file to its artifact. Each artifact zip hashes to its GitHub API digest (artifact 13526599200: sha256:a47e70382e9946828536432f732fd8fcfed7418f242939c3f818ec89a0b4b87d; artifact 13524284855: sha256:aed6a1031a1117fe207e41eda183e59d3407fc6d3203c0f0c514ac980c4c419c), and the srt-single-node-logs.tar.gz inside hashes to 7061b523bf0765f9e7c4e3754861c647a4d1943de94f4e0c9d30ccc6ddddc14f (c8) and 93e941d4e9e2d53f866deb856960687745ddaca65adc7de1e47b67744c35023a (c32).
  • c8: artifact eval_server_logs_minimaxm31flash_tp4_conc8_kvnone_spec-mtp_fp4_vllm_tp4-pp1-dcp1-pcp1-ep1-dpafalse_disagg-false_spec-3d7d19171a8f415fc5f5_lm-eval, file logs/mia1-p01-g37_agg_w0.out

    L27: (MainProcess pid=828225) INFO 11-06 17:47:03 [utils.py:372] Launching Rust frontend: /usr/local/lib/python3.12/dist-packages/vllm/vllm-rs frontend ...
    L424: (Worker_TP0 pid=831568) INFO 11-06 17:52:36 [dispatch.py:90] MiniMax-M3 DSpark drafter kernels on   [TP1-TP3: L425-L427]
    L432: (Worker_TP0 pid=831568) INFO 11-06 17:52:42 [dispatch.py:174] MiniMax-M3 mono decode on: shared expert separate MXFP8 (0.77 GiB tiled copy per rank)   [TP1-TP3: L433-L435]
    L683: (RustFrontend pid=831493) INFO 11-06 17:55:10 [log_stats.rs:300] Avg prompt tput: 411.7 toks/s, Avg generation tput: 595.2 toks/s, Reqs Running: 16, Waiting: 48, GPU KV cache used: 0.1%, Prefix cache hit rate: 32.0%   [first non-zero stats]
    L3935: (RustFrontend pid=831493) INFO 11-06 18:00:20 [log_stats.rs:300] Avg prompt tput: 6102.1 toks/s, Avg generation tput: 1004.4 toks/s, Reqs Running: 0, Waiting: 0, GPU KV cache used: 0.0%, Prefix cache hit rate: 13.0%   [last stats before shutdown]
    

    logs/fingerprint_agg_w0.json: L43 "VLLM_ROCM_MINIMAX_M3_MONO": "1", L44 "VLLM_ROCM_MINIMAX_M3_MONO_DRAFTER": "1", L45 "VLLM_ROCM_PARALLEL_INDEX_TOPK": "1", L50 "VLLM_ROCM_USE_SKINNY_GEMM": "0", L52 "VLLM_USE_RUST_FRONTEND": "1"

  • c32: artifact eval_server_logs_minimaxm31flash_tp4_conc32_kvnone_spec-mtp_fp4_vllm_tp4-pp1-dcp1-pcp1-ep1-dpafalse_disagg-false_spe-bed462d9dd7d18709199_lm-eval, file logs/mia1-p01-g16_agg_w0.out

    L27: (MainProcess pid=1010486) INFO 11-06 17:17:32 [utils.py:372] Launching Rust frontend: /usr/local/lib/python3.12/dist-packages/vllm/vllm-rs frontend ...
    L352: (Worker_TP0 pid=1013684) INFO 11-06 17:22:44 [dispatch.py:90] MiniMax-M3 DSpark drafter kernels on   [TP1-TP3: L351, L353, L354]
    L407: (Worker_TP0 pid=1013684) INFO 11-06 17:23:03 [breakable_cudagraph.py:303] Breakable CUDA graph enabled
    L765: (Worker_TP0 pid=1013684) INFO 11-06 17:23:45 [model_runner.py:1226] Graph capturing finished in 43 secs, took 9.99 GiB   [TP1-TP3: L756, L759, L762]
    L866: (RustFrontend pid=1013608) INFO 11-06 17:25:38 [log_stats.rs:300] Avg prompt tput: 2194.0 toks/s, Avg generation tput: 4230.2 toks/s, Reqs Running: 64, Waiting: 0, GPU KV cache used: 0.5%, Prefix cache hit rate: 30.9%   [first non-zero stats]
    L3758: (RustFrontend pid=1013608) INFO 11-06 17:29:58 [log_stats.rs:300] Avg prompt tput: 0.0 toks/s, Avg generation tput: 9.7 toks/s, Reqs Running: 0, Waiting: 0, GPU KV cache used: 0.0%, Prefix cache hit rate: 0.0%   [last stats before shutdown]
    

    logs/fingerprint_agg_w0.json: L43 "VLLM_ROCM_MINIMAX_M3_MONO_DRAFTER": "1", L44 "VLLM_ROCM_PARALLEL_INDEX_TOPK": "1", L48 "VLLM_ROCM_USE_SKINNY_GEMM": "0", L50 "VLLM_USE_BREAKABLE_CUDAGRAPH": "1", L51 "VLLM_USE_RUST_FRONTEND": "1"

  • c64: artifact eval_server_logs_minimaxm31flash_tp4_conc64_kvdram-vllm-simple_spec-mtp_fp4_vllm_tp4-pp1-dcp1-pcp1-ep1-dpafalse_disa-8f774035eb494bc32911_lm-eval, file logs/mia1-p01-g09_agg_w0.out

    L27: (MainProcess pid=1332952) INFO 11-06 17:51:32 [utils.py:372] Launching Rust frontend: /usr/local/lib/python3.12/dist-packages/vllm/vllm-rs frontend ...
    L232: (Worker_TP0 pid=1338875) INFO 11-06 17:56:00 [dispatch.py:65] MiniMax-M3 DSpark drafter kernels off: 7 speculative tokens required   [TP1-TP3: L230, L241, L245; expected for the 3-token draft]
    L1061: (RustFrontend pid=1338796) INFO 11-06 18:00:06 [log_stats.rs:300] Avg prompt tput: 2150.1 toks/s, Avg generation tput: 3752.1 toks/s, Reqs Running: 64, Waiting: 0, GPU KV cache used: 0.4%, Prefix cache hit rate: 30.6%, External prefix cache hit rate: 0.0%   [first non-zero stats]
    

    logs/fingerprint_agg_w0.json: L43 "VLLM_ROCM_MINIMAX_M3_MONO_DRAFTER": "1", L45 "VLLM_ROCM_PARALLEL_INDEX_TOPK": "1", L49 "VLLM_ROCM_USE_SKINNY_GEMM": "0", L51 "VLLM_USE_RUST_FRONTEND": "1"

Signed: @chunfangamd

@github-actions

github-actions Bot commented Nov 7, 2026 •

Copy link
Copy Markdown
Contributor

⚠️ Verdict: WARN ⚠️

⚠️ Pareto coverage needs additional review. At least 5 points per affected throughput-versus-E2EL frontier are highly recommended. Below 5, or when coverage cannot be verified, merge only with an explicit, recorded admin bypass for the assessed commit; this advisory comment does not grant or enforce a bypass.

⚠️ Check 14 (Pareto coverage): WARN — minimaxm31flash / agentic-coding / MI355X vLLM / fp4 / p90 E2EL: 4/5 frontier points (8 measured incl. both c16 attempts, 0 invalid; frontier c8 16,104 tok/s/GPU @ 7.00 s, c16 28,686 @ 8.40 s, c32 58,024 @ 13.22 s, c64 90,495 @ 27.17 s; c1/c2/c4 dominated by c8) from results_bmk of run 42224368840 on ce4079c, reproduced with pareto_coverage; no admin-bypass comment found on the PR (admin bypass not verified), so an explicit admin exception for f54e244 and this curve is needed before merge.

Passed and not applicable checks

✅ Check 0 (CODEOWNER): PASS — @chunfangamd is a named owner of inferencex-e2e/configs/amd-master.yaml and of **/mi355x-*/ srt-slurm recipes; perf-changelog.yaml falls under the catch-all.

✅ Check 1 (In-PR sweep + evals): PASS — ce4079c (in PR) has all six agentic / points, the canary / c1 point and the three agentic eval / jobs (c8, c32, c64) at success in run 42224368840 (head_sha ce4079c); the later commits 19a9961 and f54e244 are main merges, and compare ce4079c...f54e244 leaves the minimaxm31flash recipe, its master entry and this PR's changelog entry unchanged and touches no launcher, benchmark or eval code.

✅ Check 2 (Eval accuracy): PASS — eval_results_all of run 42224368840 has GSM8K strict 0.9606 (c8), 0.9629 (c32), 0.9598 (c64), n=1319, all on the PR's pinned nightly-4fab5a07 image; every sibling and exact-cohort gap is ok (worst gap 0.0030 vs threshold 0.0150; cohort run 41003224750 0.9591); the c32 eval server log shows vLLM 0.33.0rc1.dev910+g4fab5a074, the Rust frontend launching and AITER_CUSTOM/PYNCCL all-reduce; for the drafter-kernel, mono and breakable-graph lines the verifier relied on the sign-off's verbatim quotes, which it hash-traces to the run's eval_server_logs_* artifacts (the verifier could fetch the archives but its sandbox could not extract them).

✅ Check 3 (Upstream recipe): PASS — vllm-project/vllm#66188 is MERGED (2026-11-07, 80e0cd68); its mi355x_agentx preset on the published recipe pins the same image/digest and mxfp4 TP4 variant and covers every point's production settings (mono decode FP8 KV/indexer + FULL_DECODE_ONLY at c1-c8; NVFP4 KV + indexer_decode_cp, breakable graphs, the same FULL_AND_PIECEWISE capture list, V2 runner and DEBUG_HIP_DYNAMIC_QUEUES=0 at c16/c32; DSpark 3, 0.90 and the 1349 GB SimpleCPUOffloadConnector at c64; DSpark 7 block verification, --max-num-seqs 2x conc, prefix caching, AITER MoE without shared-expert fusion, and the four new env switches); the excluded settings are explained in the sign-off.

✅ Check 4 (Reuse command): PASS — chunfangamd (COLLABORATOR) posted /use 42224368840 on its own line, matching the Check 1 run.

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

✅ Check 6 (Upstream image / provenance): PASS — vllm/vllm-openai-rocm:nightly-4fab5a07…@sha256:6f126f27… comes from the upstream vLLM org; vLLM commit 4fab5a07 is on vLLM main (0 ahead, 99 behind), which the server's version string g4fab5a074 confirms; the engine-first rule does not apply to a vLLM entry.

✅ Check 7 (Deprecated models): PASS — MODELS.md lists minimaxm31flash (added 2026-10-23) with Agentic coding (vLLM DSpark) active.

✅ Check 8 (Architecture hacks): PASS — no --hf-overrides, model-config edits or layer/indexer skipping; no *QUICK_REDUCE_QUANTIZATION is set in the recipe at f54e244, and the c32 eval server picks the AITER_CUSTOM and PYNCCL all-reduce backends, not QUICK_REDUCE; the new switches (drafter monokernel, parallel top-k, Rust frontend, skinny GEMM off, breakable graphs) change how the same computation runs.

✅ Check 9 (Chat templates): PASS — AgentX replays the traces through the /v1/chat/completions client, and the Rust frontend applies the model's chat template with the minimax_m3 parsers.

✅ Check 10 (Engine patches): PASS — no patches, setup scripts, overlays or wheel installs are reachable from this recipe; the pinned image runs as shipped.

✅ Check 11 (Golden AL): PASS — the committed minimax-m3.1-flash__dspark__native__probabilistic-block.yaml gives thinking_on AL 4.04 at k=7 and 2.88 at k=3, matching the synthetic acceptance the harness injects (infx/srt_slurm/synthetic_acceptance.py) for the k=7 (c1-c32) and k=3 (c64) points; the recipe's rejection_sample_method: block is the evals' real path.

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

✅ Check 13 (Draft precision): PASS — the shipped dspark/ draft of amd/MiniMax-M3.1-Flash-Quark-MXFP4 is MXFP8 (dynamic activations, 1x32 blocks, BF16 base dtype), and the recipe sets no draft quantization or dtype; the draft kv_cache_dtype: fp8 does not lower precision, since vLLM 4fab5a07 defaults the draft KV to the target's KV (FP8 at c1-c8, NVFP4 at c16-c64); the drafter monokernel (vllm#65386, an ancestor of 4fab5a07) keeps MXFP8 weights and activations; SGLANG_NVFP4_CKPT_FP8_NEXTN_MOE is not applicable on this vLLM path.

✅ Check 15 (PR description): PASS — the body's claims (image, new env switches, breakable graphs at c16/c32, DBO removed at c16-c64, unchanged c1-c8/c64 settings, run 42224368840 on ce4079c, evals 0.9606/0.9629/0.9598, /use posted) match the code at f54e244 and the run evidence.

➖ Check 16 (NVIDIA overview): N/A — the only affected configuration runs on AMD MI355X.

➖ Check 17 (Metrics publication): N/A — direct vLLM serving with no Dynamo TRT-LLM path.

✅ Check 18 (Recipe/image/sweep consistency): PASS — the config generates at head with no errors (7 points, TP4, conc 1-32 from agentic.yaml zips and c64 from override_tp4_dspark3_c64_offload, matching the master search-space); the new image resolves by digest; no external orchestration or dispatch change; the changelog accurately describes the image, the env/CLI changes, breakable graphs and DBO removal, with no quantization/KV/model/spec-method change omitted; all 7 removed old-image points are dominated by their re-tuned head points (undominated_removed empty); re-tune deltas tput/intvty: c1 +12.6%/+3.0%, c2 +9.7%/+6.7%, c4 +2.2%/+5.5%, c8 +4.5%/+16.3%, c16 +5.2%/+23.7%, c32 +7.1%/+18.5%, c64 +20.0%/+28.8%; evals are flat against the cohort.

Assessed commit: f54e244f7a11ba88ab637885c5d9a2d02e151ede.

@chunfangamd

chunfangamd commented Nov 7, 2026 •

Copy link
Copy Markdown
Collaborator

Uncompressed copies of the c8 and c32 eval server logs from run 42224368840, for the verifier (Check 2). They are byte-identical to the tar members (only the file names changed); SHA256SUMS.txt traces each file to its artifact (zip sha256 = GitHub API digest) and the srt-single-node-logs.tar.gz inside it.

c8_eval_fingerprint_agg_w0.json
c8_eval_server_mia1-p01-g37_agg_w0.log
c32_eval_fingerprint_agg_w0.json
c32_eval_server_mia1-p01-g16_agg_w0.log
SHA256SUMS.txt

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

Doesn't minimax use nvfp4 kvcache? I see an PR in upstream vllm working on supporting nvfp4 kvcache for gfx950

Do u have tb4.0 or DeepSWE benchmark on how mxfp4 vsnvfpR kvcache would affect accuracy?

Comment thread inferencex-e2e/perf-changelog.yaml Outdated
- "At concurrency 80 the overall prefix cache hit rate is flat: 93.5% of prompt tokens on the previous image and policy (run 36743632401) against 94.0% here (run 39763900198). What moves is the tier split -- the HiCache host tier serves 49.1% of prompt tokens instead of 43.3%, and the GPU tier 44.9% instead of 50.2%. Per-GPU throughput goes from 59,233 to 60,839 tok/s (+2.7%), p90 end-to-end latency from 50.9 s to 47.9 s, and mean TTFT from 3.12 s to 2.68 s."
- "That concurrency 80 comparison is not a single-variable A/B: the 36743632401 baseline ran hicache-size 400 on lmsysorg/sglang-rocm:v0.5.20-rocm720-mi35x-20260929, while this point runs hicache-size 374 on the v0.5.22 image, so the image, the write policy and the host pool size all differ."
pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/4374
- "Keep the batch-8 cap on running requests and decode gr

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.

The merge cut the file here dropping #4180–#4374 and this PR's own entry, so check-changelog fails. Restore main's file and re-append only this PR's block from ce4079c

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

thanks! hi @chunfangamd can you help me to do that, I don't want to accidentally trigger another repeated perf sweep here.

@functionstackx

Copy link
Copy Markdown
Collaborator

here is the mono kernel for MI355 on the OG ckpt vllm-project/vllm#65638

@Fangzhou-Ai

Copy link
Copy Markdown
Collaborator Author

Doesn't minimax use nvfp4 kvcache? I see an PR in upstream vllm working on supporting nvfp4 kvcache for gfx950

Do u have tb4.0 or DeepSWE benchmark on how mxfp4 vsnvfpR kvcache would affect accuracy?

Hi @functionstackx we are not using mxfp4 kv cache anywhere, we cast some of them back to fp8 under some cases, so I see no potential precision regression here.
image

@functionstackx

Copy link
Copy Markdown
Collaborator

hi @Fangzhou-Ai ur right, i just dismissed my request change

@functionstackx
functionstackx self-requested a review November 11, 2026 02:43
Restore main's perf-changelog.yaml, which the previous merge truncated, and re-append this PR's entry from ce4079c.
@functionstackx
functionstackx requested review from functionstackx and removed request for functionstackx November 11, 2026 03:53
@chunfangamd
chunfangamd merged commit 817e2d5 into main Nov 11, 2026
35 checks passed
@chunfangamd
chunfangamd deleted the m31-mi355x-vllm-nightly-stack branch November 11, 2026 04:05
@github-actions

Copy link
Copy Markdown
Contributor

Ingest report — ✅ Results ingested into the production database.

Ingest workflow · Merge Ingest run · Benchmark source run

Category new duplicate skipped unmapped failed
benchmark 7 0 8 0 0
eval 3 3 3 0 0
trace 7 0 0 0 0
power 7 0 0 0 0

benchmarkFiles 8, rawBenchmarkRows 15, coveredByPerJobFiles 8, purgedPoints 0, failedRunRows 0, runStatsNew 0, runStatsDuplicate 0, evalSamplesNew 3957, gpuMetricSamplesNew 126728, powerPublicationPoints 7, changelogEntriesWritten 1

Counts cover only this run. Rows: benchmark_results, eval_results, agentic rows linked to a trace, gpu_metrics series. This comment updates if the ingest is rerun.

中文

Ingest 报告 — ✅ 结果已写入 production 数据库。

上表仅统计本次运行写入的数据,各行单位依次为 benchmark_results 行、eval_results 行、已关联 trace 的 agentic 行和 gpu_metrics 序列。重新运行 ingest 时本评论会原地更新。

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.

4 participants