Skip to content

perf(amd): Kimi-K3.1 MI355X vLLM agentic: per-conc max-num-seqs, conc 1 DCP1, conc 4 seven draft tokens / perf(amd): Kimi-K3.1 MI355X vLLM agentic:按并发调整 max-num-seqs,并发 1 改为 DCP1,并发 4 使用 7 个草稿 token - #4887

Merged
seungrokj merged 6 commits into
mainfrom
hyukjlee/kimik3.1-mi355x-vllm-mns
Nov 8, 2026

Conversation

@hyukjlee

@hyukjlee hyukjlee commented Nov 7, 2026 •

Copy link
Copy Markdown
Collaborator

Kimi-K3.1-Pro MI355X vLLM AgentX: per-concurrency retune on the same image as #4806 (vllm/vllm-openai-rocm:kimi-k31@sha256:5f47cc10…). Concurrency 48 is unchanged.

The PR's own sweep regresses concurrency 10 by about 8 % in throughput (run 42371416815, both c10 jobs), although the local A/B below showed +1.3 %. All other points are flat or better. See the table under Validation.

Changes

conc #4806 This PR
1 TP8 × DCP8 TP8 × DCP1 (dcp-size: 1; the c1 override drops the DCP args)
4 5 draft tokens, decode capture 6, 12 7 draft tokens (golden AL 3.41 → 3.69), decode capture 8, 16
10 max-num-seqs 6 7; capture size 42 added
16 max-num-seqs 10 8
24 max-num-seqs 16 13
32 max-num-seqs 24 20

Draft data types: no change. Inferact/Kimi-K3.1-Pro-DSpark-preview (revision 6a2ef20a) ships all-BF16 weights with no quantization_config. The recipe sets no quantization, so the draft runs as shipped: BF16 weights and activations, the target's BF16 embedding and LM head, and an FP8 KV cache, the same as the target's. Evidence is in the PR comment.

Validation

PR sweep run 42371416815 at e9a33875 (same recipe and master config as the head): every benchmark and eval job passed. Compared with #4806's sweep (run 42193891273); interactivity is 1 / P90 TPOT:

conc tok/s/GPU #4806 tok/s/GPU this PR Δ interactivity #4806 this PR Δ
1 1,792.2 1,839.1 +2.6 % 194.6 201.6 +3.6 %
4 2,851.3 2,839.1 −0.4 % 134.4 140.1 +4.2 %
10 6,599.2 6,056.6 / 6,048.4 −8.2 % / −8.3 % 84.8 71.0 / 70.8 −16.3 % / −16.6 %
16 9,094.9 9,367.9 +3.0 % 61.9 73.3 +18.3 %
24 13,304.4 13,724.0 +3.2 % 47.8 57.2 +19.6 %
32 15,958.2 17,168.4 +7.6 % 36.4 42.4 +16.5 %
48 (unchanged) 16,849.1 / 18,715.6 18,638.4 — 22.1 / 22.6 22.6 —
Validation details: local A/B (no run links)

Local MI355X, 3600 s AgentX, synthetic golden AL, against #4806's sweep:

conc tok/s/GPU (#4806) P90 interactivity (#4806) Δ tput Δ P90
1 1,843.7 (1,792.2) 202.18 (194.36) +2.9 % +4.0 %
4 2,856.4 (2,851.3) 139.87 (134.46) +0.2 % +4.0 %
10 6,687.4 (6,599.2) 87.68 (84.85) +1.3 % +3.3 %
16 9,340.9 (9,094.9) 73.47 (61.94) +2.7 % +18.6 %
24 13,704.9 (13,304.4) 56.91 (47.81) +3.0 % +19.0 %
32 17,003.7 (15,958.2) 42.04 (36.42) +6.6 % +15.4 %

Each change first won a same-node 1800 s A/B against the #4806 config. At conc 48, max-num-seqs 40 was neutral over 3600 s (−0.4 % tput / +2.1 % P90), so conc 48 is unchanged.

中文

Kimi-K3.1-Pro MI355X vLLM AgentX:在与 #4806 相同的镜像(vllm/vllm-openai-rocm:kimi-k31@sha256:5f47cc10…)上按并发度重新调优。并发 48 不变。

本 PR 自身的 sweep 中,并发 10 的吞吐下降约 8 %(run 42371416815,两个 c10 作业均如此),而下方本地 A/B 显示为 +1.3 %。其余各点持平或提升,见"验证"中的表格。

变更

并发 #4806 本 PR
1 TP8 × DCP8 TP8 × DCP1(dcp-size: 1;c1 override 去掉 DCP 参数)
4 5 个草稿 token,decode capture 6、12 7 个草稿 token(golden AL 3.41 → 3.69),decode capture 8、16
10 max-num-seqs 6 7;新增 capture size 42
16 max-num-seqs 10 8
24 max-num-seqs 16 13
32 max-num-seqs 24 20

草稿数据类型:无变化。 Inferact/Kimi-K3.1-Pro-DSpark-preview(revision 6a2ef20a)发布的权重全部为 BF16,且没有 quantization_config。本 recipe 未设置任何量化,因此草稿按发布形式运行:BF16 权重和激活,使用目标模型的 BF16 embedding 和 LM head,KV cache 为 FP8,与目标模型相同。证据见 PR 评论。

验证

PR sweep run 42371416815 在 e9a33875(recipe 和 master config 与 head 相同)上运行,所有 benchmark 和 eval 作业均通过。与 #4806 的 sweep(run 42193891273)对比;interactivity 为 1 / P90 TPOT:

并发 tok/s/GPU #4806 tok/s/GPU 本 PR Δ interactivity #4806 本 PR Δ
1 1,792.2 1,839.1 +2.6 % 194.6 201.6 +3.6 %
4 2,851.3 2,839.1 −0.4 % 134.4 140.1 +4.2 %
10 6,599.2 6,056.6 / 6,048.4 −8.2 % / −8.3 % 84.8 71.0 / 70.8 −16.3 % / −16.6 %
16 9,094.9 9,367.9 +3.0 % 61.9 73.3 +18.3 %
24 13,304.4 13,724.0 +3.2 % 47.8 57.2 +19.6 %
32 15,958.2 17,168.4 +7.6 % 36.4 42.4 +16.5 %
48(不变) 16,849.1 / 18,715.6 18,638.4 — 22.1 / 22.6 22.6 —

本地 A/B(无运行链接):本地 MI355X、3600 s AgentX、synthetic golden AL,与 #4806 的 sweep 对比:

并发 tok/s/GPU(#4806) P90 interactivity(#4806) 吞吐 Δ P90 Δ
1 1,843.7 (1,792.2) 202.18 (194.36) +2.9 % +4.0 %
4 2,856.4 (2,851.3) 139.87 (134.46) +0.2 % +4.0 %
10 6,687.4 (6,599.2) 87.68 (84.85) +1.3 % +3.3 %
16 9,340.9 (9,094.9) 73.47 (61.94) +2.7 % +18.6 %
24 13,704.9 (13,304.4) 56.91 (47.81) +3.0 % +19.0 %
32 17,003.7 (15,958.2) 42.04 (36.42) +6.6 % +15.4 %

每项变更都先在同一节点上以 1800 s A/B 胜过 #4806 的配置。在并发 48,max-num-seqs 40 在 3600 s 下持平(吞吐 −0.4 % / P90 +2.1 %),因此并发 48 保持不变。

AI model disclosure
  • Original PR description: generated with Claude Code (footer below); the exact model identifier could not be verified.
  • claude-opus-5-5 (Claude Code): rewrote the perf-changelog block from the diff, verified the draft data types at vLLM 14d1ec23363a and in the draft's safetensors header, added the sweep comparison, and revised this description.

🤖 Generated with Claude Code

… 1 DCP1, conc 4 seven draft tokens

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

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

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

Beyond the inline finding, I checked two other things and both are fine. The DSpark probabilistic-block golden AL file has a 7-token entry (3.69), which matches the changelog. The null values in override_gpu_kv_c1 do remove the DCP args, because the srtctl merge in infx/srt_slurm/variants.py deletes keys set to null.

Extended reasoning...

The PR changes the Kimi-K3.1 MI355X vLLM agentic recipe overrides, the matching conc 1 dcp-size row in amd-master.yaml, and adds a changelog entry; it touches no security-sensitive code. The note records two checks beyond the inline finding: the golden AL curve covers 7 draft tokens, and null overrides delete the DCP keys.

Comment thread inferencex-e2e/perf-changelog.yaml Resolved
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@hyukjlee hyukjlee added the non-canary-full-sweep-enabled Run the full sweep without the canary gate (full search space, no trim) label Nov 7, 2026
@github-actions

github-actions Bot commented Nov 7, 2026

Copy link
Copy Markdown
Contributor

@seungrokj

Copy link
Copy Markdown
Collaborator

/reuse-sweep-run 42371416815

seungrokj and others added 2 commits November 8, 2026 11:07
- The image stays vllm/vllm-openai-rocm:kimi-k31@sha256:5f47cc1004d9a7ac65f8a913725edb20c62c99a07e31cbf4ba21741bd0b4f9b1 (vLLM 0.0.0+mum.14d1ec2336).
- Concurrency 1 moves from TP8 x DCP8 to TP8 x DCP1 (master config dcp-size 8 -> 1; the recipe's c1 override drops decode-context-parallel-size, dcp-comm-backend and cp-kv-cache-interleave-size). It keeps GPU-resident KV, 7 draft tokens and the latency_specialized decode backend. Concurrency 4-48 stay TP8 x DCP8 with DRAM offload.
- Concurrency 4: DSpark draft tokens 5 -> 7, so throughput runs use golden acceptance length 3.69 instead of 3.41. The decode capture sizes change from 6, 12 to 8, 16 to match max-num-seqs 2 x (1 + 7).
- max-num-seqs at concurrency 10/16/24/32 changes from 6/10/16/24 to 7/8/13/20. Concurrency 10 adds capture size 42 (7 x (1 + 5)). Otherwise the draft lengths, capture lists, max-num-batched-tokens and gpu-memory-utilization at these points, and every setting at concurrency 48, are unchanged.
- No change to the DSpark draft's precision: Inferact/Kimi-K3.1-Pro-DSpark-preview (revision 6a2ef20a) ships all-BF16 weights with no quantization_config, the speculative config names the draft and sets no quantization, so get_draft_quant_config() returns None and K3DSparkModel loads its layers in BF16 with the target's BF16 embedding and LM head. Its KV cache stays FP8, the same as the target's. DCP1 at concurrency 1 and 7 draft tokens at concurrency 4 do not change these types.

- 镜像保持为 vllm/vllm-openai-rocm:kimi-k31@sha256:5f47cc1004d9a7ac65f8a913725edb20c62c99a07e31cbf4ba21741bd0b4f9b1(vLLM 0.0.0+mum.14d1ec2336)。
- 并发 1 从 TP8 x DCP8 改为 TP8 x DCP1(master config 的 dcp-size 8 -> 1;recipe 的 c1 override 去掉 decode-context-parallel-size、dcp-comm-backend 和 cp-kv-cache-interleave-size)。它仍使用 GPU 常驻 KV、7 个草稿 token 和 latency_specialized decode 后端。并发 4-48 仍为 TP8 x DCP8 并使用 DRAM offload。
- 并发 4:DSpark 草稿 token 数 5 -> 7,因此吞吐测试使用 golden acceptance length 3.69 而不是 3.41。decode capture sizes 从 6、12 改为 8、16,以匹配 max-num-seqs 2 x (1 + 7)。
- 并发 10/16/24/32 的 max-num-seqs 从 6/10/16/24 改为 7/8/13/20。并发 10 新增 capture size 42(7 x (1 + 5))。除此之外,这些点的草稿长度、capture 列表、max-num-batched-tokens 和 gpu-memory-utilization,以及并发 48 的所有设置均不变。
- DSpark 草稿精度无变化:Inferact/Kimi-K3.1-Pro-DSpark-preview(revision 6a2ef20a)发布的权重全部为 BF16 且没有 quantization_config,speculative config 指定了草稿且未设置量化,因此 get_draft_quant_config() 返回 None,K3DSparkModel 以 BF16 加载各层,并使用目标模型的 BF16 embedding 和 LM head。其 KV cache 保持 FP8,与目标模型相同。并发 1 的 DCP1 和并发 4 的 7 个草稿 token 都不改变这些类型。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

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

@seungrokj update vllm recipes plz and then merge it

@seungrokj seungrokj changed the title perf(amd): Kimi-K3.1 MI355X vLLM agentic: per-conc max-num-seqs, conc 1 DCP1, conc 4 seven draft tokens perf(amd): Kimi-K3.1 MI355X vLLM agentic: per-conc max-num-seqs, conc 1 DCP1, conc 4 seven draft tokens / perf(amd): Kimi-K3.1 MI355X vLLM agentic:按并发调整 max-num-seqs,并发 1 改为 DCP1,并发 4 使用 7 个草稿 token Nov 8, 2026
@seungrokj

Copy link
Copy Markdown
Collaborator

Draft data types: no change. The DSpark draft Inferact/Kimi-K3.1-Pro-DSpark-preview (revision 6a2ef20a, the current main and the revision of the golden AL curve) is a standalone 5-layer K3DSparkModel checkpoint with no quantization_config. All 67 tensors in its safetensors header are BF16:

Part Data type
Attention projections (q_a_proj, q_b_proj, kv_a_proj_with_mqa, kv_b_proj, o_proj) BF16
Dense MLP (gate_proj, up_proj, down_proj) BF16
context_proj, Markov head, confidence head BF16
Norms BF16
Embedding and LM head not in the draft checkpoint; shared from the target, whose lm_head is on the compressed-tensors ignore list and stays BF16
KV cache FP8, from speculative-config kv_cache_dtype: fp8, the same as the target's kv-cache-dtype: fp8

The image is unchanged from #4806, so the framework is the same: vLLM 14d1ec23363ae7495b7734d88983a478375d3ff8 (vllm-0.0.0+mum.14d1ec2336). That commit lives in a non-public repository, not vllm-project/vllm, so there are no public permalinks. Paths are at that commit:

  • vllm/config/speculative.py:1308-1345: the draft inherits the target's quantization only when speculative-config gives no model. Every point names the draft repo, so quantization stays unset. :1495 builds the draft ModelConfig with it, and :1620 keeps K3DSparkModel out of the DeepSeek DSpark branch that copies the target's quantization (:1636).
  • vllm/config/vllm.py:937: with no quantization, the quantization config is None, so get_draft_quant_config() (vllm/model_executor/models/utils.py:1062-1084) returns None.
  • vllm/models/kimi_k3/nvidia/dspark_mla.py:72,145: every draft linear layer takes that None config and loads in BF16. :434-443 drops embed_tokens and lm_head from the draft and shares the target's. vllm/model_executor/models/registry.py:702-705 maps K3DSparkModel to this class on ROCm too.
  • vllm/config/speculative.py:423-430: only speculative-config's own attention_backend (ROCM_AITER_MLA) and kv_cache_dtype (fp8) override the draft's attention backend and KV dtype.

The recipe sets no quantization-config, --quantization or draft quantization at any point, so the draft runs as shipped: BF16 weights and activations with an FP8 KV cache matching the target's. This PR's changes (DCP1 at c1, 7 draft tokens at c4, max-num-seqs and capture sizes at c10-c32) change the parallel layout, draft length and batching, not any draft data type. The c1 latency_specialized decode backend (vllm/models/kimi_k3/amd/specialized_decode/, which supports DCP 1 and 8) replaces only the target's decoder layers on verify steps and does not touch the draft.

中文

草稿数据类型:无变化。 DSpark 草稿 Inferact/Kimi-K3.1-Pro-DSpark-preview(revision 6a2ef20a,即当前 main,也是 golden AL 曲线所用的 revision)是独立的 5 层 K3DSparkModel checkpoint,没有 quantization_config。其 safetensors header 中的 67 个张量全部为 BF16:

部分 数据类型
注意力投影(q_a_proj、q_b_proj、kv_a_proj_with_mqa、kv_b_proj、o_proj) BF16
Dense MLP(gate_proj、up_proj、down_proj) BF16
context_proj、Markov head、confidence head BF16
Norm BF16
Embedding 和 LM head 不在草稿 checkpoint 中;与目标模型共享,目标模型的 lm_head 在 compressed-tensors 的 ignore 列表中,保持 BF16
KV cache FP8,来自 speculative-config 的 kv_cache_dtype: fp8,与目标模型的 kv-cache-dtype: fp8 相同

镜像与 #4806 相同,因此框架也相同:vLLM 14d1ec23363ae7495b7734d88983a478375d3ff8(vllm-0.0.0+mum.14d1ec2336)。该 commit 位于非公开仓库,不在 vllm-project/vllm 中,因此没有公开的永久链接。以下路径均基于该 commit:

  • vllm/config/speculative.py:1308-1345:只有在 speculative-config 未指定 model 时,草稿才会继承目标模型的量化。每个点都指定了草稿仓库,因此 quantization 保持未设置。:1495 用它构建草稿的 ModelConfig,:1620 将 K3DSparkModel 排除在会复制目标模型量化的 DeepSeek DSpark 分支(:1636)之外。
  • vllm/config/vllm.py:937:没有量化时量化配置为 None,因此 get_draft_quant_config()(vllm/model_executor/models/utils.py:1062-1084)返回 None。
  • vllm/models/kimi_k3/nvidia/dspark_mla.py:72,145:草稿的每个线性层都使用这个 None 配置,以 BF16 加载。:434-443 从草稿中丢弃 embed_tokens 和 lm_head,改为共享目标模型的。vllm/model_executor/models/registry.py:702-705 在 ROCm 上同样将 K3DSparkModel 映射到这个类。
  • vllm/config/speculative.py:423-430:只有 speculative-config 自身的 attention_backend(ROCM_AITER_MLA)和 kv_cache_dtype(fp8)会覆盖草稿的注意力后端和 KV dtype。

本 recipe 在任何点都没有设置 quantization-config、--quantization 或草稿量化,因此草稿按发布形式运行:BF16 权重和激活,FP8 KV cache 与目标模型一致。本 PR 的改动(c1 改为 DCP1、c4 使用 7 个草稿 token、c10-c32 的 max-num-seqs 和 capture sizes)改变的是并行布局、草稿长度和批处理,不改变任何草稿数据类型。c1 的 latency_specialized decode 后端(vllm/models/kimi_k3/amd/specialized_decode/,支持 DCP 1 和 8)只在验证步骤中替换目标模型的 decoder 层,不涉及草稿。

@seungrokj seungrokj 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.
  • 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
  • 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:

Signed: seungrokj

@github-actions

github-actions Bot commented Nov 8, 2026

Copy link
Copy Markdown
Contributor

❌❌❌ REJECTED ❌❌❌

⚠️ 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.

@seungrokj Blocking: the linked upstream recipe change is not merged, so Check 3 fails. Merge it (or link an already-published recipe page that covers every affected setting) before this PR merges.

❌ Check 3 (Upstream recipe): FAIL — Linked upstream recipe is not merged: vllm-project/vllm#66343 is OPEN (mergedAt: null). It adds the new mi355x_agentx_c1 preset (TP8 without DCP, 7 draft tokens, latency_specialized decode) and realigns mi355x_agentx, so the c1 DCP1 point and the retuned settings are not yet in any published recipe. The sign-off links no published recipes.vllm.ai page.

⚠️ Check 13 (Draft precision): WARN — Draft precision could not be verified. The draft checkpoint Inferact/Kimi-K3.1-Pro-DSpark-preview@6a2ef20a is confirmed as K3DSparkModel with torch_dtype: bfloat16 and no quantization_config, and the recipe sets no draft quantization or dtype override (SGLANG_NVFP4_CKPT_FP8_NEXTN_MOE is not applicable: this is vLLM, and it is unset). However, the default draft handling of the pinned image vllm/vllm-openai-rocm:kimi-k31@sha256:5f47cc10… (vLLM 14d1ec23363a) lives in a non-public repository. The cited speculative.py/dspark_mla.py lines (evidence comment) could not be inspected, and no draft-load log line was checked. Human review needed.

⚠️ Check 14 (Pareto coverage): WARN — Curve kimik3.1 / agentic-coding / mi355x_vllm / fp4 / P90 E2EL has 4/5 frontier points (c16, c24, c32, c48), out of 8 measured points in run 42371416815 at e9a33875 (bmk_agentic_* artifacts). c1, c4 and both c10 points are dominated by c16 (26.8 s, 9,368 tok/s/GPU). No admin bypass found.

Passed and not applicable checks

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

✅ Check 1 (In-PR sweep + evals): PASS — In-PR commit e9a33875 has all 7 agentic / and both agentic eval / (c1, c48) check-runs at success (run 42371416815). The later merge 5432f7ab brings only TileRT, video-scenario, CollectiveX and ubenchX changes that do not reach this vLLM config; its recipe is byte-identical. 336f1212 edits only the changelog text.

✅ Check 2 (Eval accuracy): PASS — gsm8k em_strict is 0.9795 at c1 (TP8/DCP1, the changed latency-specialized path) and 0.9826 at c48, both on the PR image. The gap to the sibling is 0.003 (threshold 0.011) and to the #4806 cohort (run 42193891273) is 0.0008/−0.002, so neither row is materially weaker.

✅ Check 4 (Reuse command): PASS — /reuse-sweep-run 42371416815 was posted by seungrokj (COLLABORATOR) on its own line.

✅ Check 5 (Checklist template): PASS — All 19 current template items are present and checked.

✅ Check 6 (Upstream images): PASS — vllm/vllm-openai-rocm is from the upstream vLLM org, and engine ordering does not apply to a vllm entry. The image is built from a non-public model-enablement vLLM commit; this is allowed temporarily for Kimi-K3.1, a new model added 2026-11-04.

✅ Check 7 (Deprecated models): PASS — kimik3.1 agentic coding is active in MODELS.md as of 2026-11-08.

✅ Check 8 (No arch hacks): PASS — There are no --hf-overrides or architecture overrides, and no accuracy-trading levers. Kimi-K3.1 is not grandfathered, and the base env sets VLLM_ROCM_QUICK_REDUCE_QUANTIZATION: NONE for every point. No override re-enables it.

✅ Check 9 (Chat template): PASS — DSpark points run the AgentX chat-trace replay (semianalysis_cc_traces_weka_062126), not raw completions.

✅ Check 10 (No engine patches): PASS — The recipe and diff have no patches, setup scripts, source edits or wheel installs.

✅ Check 11 (Golden AL): PASS — 7 draft tokens (c1, c4) map to golden AL 3.69 on curve kimi-k3.1-pro__dspark__…probabilistic-block. The c1 and c4 runs used synthetic_acceptance_length: 3.69; c10–c48 draft lengths are unchanged.

➖ Check 12 (Append-only): N/A — The new changelog entry is not append-only.

➖ Check 15 (PR description): N/A — The body's technical claims (per-conc changes, image, run 42371416815 at e9a33875, c10 regression) match the pinned code and artifacts, so there is nothing to flag.

➖ Check 16 (NVIDIA overview): N/A — The only affected hardware is AMD MI355X.

➖ Check 17 (Metrics publication): N/A — This is a vLLM aggregated path with no Dynamo TRT-LLM settings.

✅ Check 18 (Recipe consistency): PASS — Master dcp-size: 1 at c1 matches the recipe override that nulls the DCP args, and no generation errors were reported. No new images. The changelog matches the diff. All 6 re-tuned points are covered by the head curve (none undominated removed). Deltas (tput/intvty): c1 +2.6%/+4.1%, c4 −0.4%/+2.9%, c10 −8.4%/−17.0%, c16 +3.0%/+15.2%, c24 +3.2%/+18.2%, c32 +7.6%/+15.9%.

Assessed commit: 336f12129e47f5ca5bf6c2888c75227eb96fbb6a.

@seungrokj
seungrokj merged commit 6d26209 into main Nov 8, 2026
33 checks passed
@seungrokj
seungrokj deleted the hyukjlee/kimik3.1-mi355x-vllm-mns branch November 8, 2026 04:41
@github-actions

github-actions Bot commented Nov 8, 2026

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 0 0 0
eval 2 2 2 0 0
trace 7 0 0 0 0
power 7 0 0 0 0

benchmarkFiles 7, rawBenchmarkRows 7, coveredByPerJobFiles 0, purgedPoints 0, failedRunRows 0, runStatsNew 0, runStatsDuplicate 0, evalSamplesNew 2638, gpuMetricSamplesNew 321080, 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

non-canary-full-sweep-enabled Run the full sweep without the canary gate (full search space, no trim)

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

3 participants