Skip to content

Add Kimi K2.6 NVFP4 B300 EAGLE3 AgentX benchmark / 新增 Kimi K2.6 NVFP4 B300 EAGLE3 AgentX 基准测试#2228

Open
cquil11 wants to merge 9 commits into
mainfrom
agent/reopen-pr-2158
Open

Add Kimi K2.6 NVFP4 B300 EAGLE3 AgentX benchmark / 新增 Kimi K2.6 NVFP4 B300 EAGLE3 AgentX 基准测试#2228
cquil11 wants to merge 9 commits into
mainfrom
agent/reopen-pr-2158

Conversation

@cquil11

@cquil11 cquil11 commented Jul 15, 2026

Copy link
Copy Markdown
Collaborator

Adds an EAGLE3 speculative-decoding AgentX (agentic-coding) benchmark for Kimi K2.6 NVFP4 on B300, served with upstream vLLM (vllm/vllm-openai:nightly-94c0ef30…).

Changes

  • New config kimik2.5-fp4-b300-vllm-agentic-mtp (configs/nvidia-master.yaml), runner cluster:b300-nv. Search space: TP8, TP4, TP4 + native CPU KV offload (SimpleCPUOffloadConnector, dram-utilization: 0.80), and TP4/DCP4 with and without offload at high concurrency.
  • New script benchmarks/single_node/agentic/kimik2.5_fp4_b300_mtp.sh: EAGLE3 draft lightseekorg/kimi-k2.6-eagle3.1-mla with simulated synthetic acceptance — non-DCP arms use num_speculative_tokens=4 / AL 3.24; DCP4 arms use num_speculative_tokens=3 / AL 2.88. TOKENSPEED_MLA attention backend, TRTLLM_RAGGED MLA prefill (non-DCP), fp8 KV cache.
  • Launcher: add Kimi-K2.6-NVFP4 to the b300-nv model allowlist.
  • Changelog tooling: process_changelog.py now emits JSON with exclude_none=True; perf-changelog entry added.

Validation


为 B300 上的 Kimi K2.6 NVFP4 新增 EAGLE3 投机解码 AgentX(agentic-coding)基准测试,使用上游 vLLM 镜像。新增 kimik2.5-fp4-b300-vllm-agentic-mtp 配置(TP8 / TP4 / TP4+CPU KV offload / TP4+DCP4 组合)、基准脚本(EAGLE3 草稿模型 lightseekorg/kimi-k2.6-eagle3.1-mla,非 DCP 使用 spec4/AL 3.24,DCP4 使用 spec3/AL 2.88)、b300-nv 模型白名单及 perf-changelog 条目。


Original PR: #2158

… Kimi K2.6 NVFP4 B300 EAGLE3 AgentX 基准测试 (#2158)" (#2227)"

This reverts commit bae2753.
@cquil11 cquil11 added NVIDIA full-sweep-enabled agentx AgentX benchmarks, recipes, and infrastructure labels Jul 15, 2026
@cquil11 cquil11 added the agentx AgentX benchmarks, recipes, and infrastructure label Jul 15, 2026
@github-actions

Copy link
Copy Markdown
Contributor

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

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

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


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

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

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

@cquil11 cquil11 marked this pull request as ready for review July 15, 2026 19:23
@cquil11 cquil11 requested a review from a team July 15, 2026 19:23
@claude

claude Bot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Claude finished @cquil11's task in 4m 43s —— View job


Review of PR #2228

  • Gather context (diff, changed files)
  • Review benchmark script kimik2.5_fp4_b300_mtp.sh
  • Review configs/nvidia-master.yaml (image accessibility, model prefix, changelog pairing)
  • Review perf-changelog.yaml (entry appended at end)
  • Review launcher and process_changelog.py changes
  • Post findings

Summary

One blocking issue found (see inline comment): the new perf-changelog.yaml entry is inserted in the middle of the file instead of appended to the end, and it duplicates the identical entry already at the bottom of the file from #2222 — an artifact of the revert-of-revert re-applying #2158's diff at its old position. Please move the entry to the end of the file (and consider pointing pr-link at this PR, as #2222 did).

Everything else checks out: the image is a public Docker Hub reference, Kimi-K2.6-NVFP4 is in the b300-nv pre-staged model list so MODEL_PATH resolves on the cluster, KV-offload env validation is handled by the benchmark_lib.sh agentic preamble, the enroot import pattern is already present in the launcher, and --use-chat-template does not apply here since agentic benchmarks use the aiperf trace-replay client rather than benchmark_client. The exclude_none=True change in process_changelog.py is covered by the changelog-gate test suite.

Fix this →

Comment thread perf-changelog.yaml Outdated
Comment on lines +4785 to +4790
- config-keys:
- kimik2.5-fp4-b300-vllm-agentic-mtp
description:
- "Add EAGLE3 speculative-decoding arm for the Kimi K2.6 NVFP4 B300 AgentX recipe (draft lightseekorg/kimi-k2.6-eagle3-mla, TOKENSPEED_MLA attention backend with TRT-LLM ragged MLA kernel)."
- "Add EAGLE3 speculative-decoding arm for the Kimi K2.6 NVFP4 B300 AgentX recipe (draft lightseekorg/kimi-k2.6-eagle3.1-mla, TOKENSPEED_MLA attention backend with TRT-LLM ragged MLA kernel)."
- "TP8/TP4 GPU-only KV points plus a TP4 native CPU-offload ladder via SimpleCPUOffloadConnector with lazy_offload off; TP4/DCP4 high-concurrency points (conc 32/64) using num_speculative_tokens=3 and synthetic_acceptance_length=2.88."
pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2158

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.

🔴 BLOCKING: New perf-changelog.yaml entry is inserted in the middle of the file, not appended to the end — and it is character-for-character identical to the entry that already sits at the end of the file (pr-link #2222).

Why it matters: The file is read chronologically (oldest at top, newest at bottom); inserting above existing entries breaks the append-only ordering convention. This happened mechanically because the revert-of-revert re-applied #2158's diff at its original position, while main has since gained the #2222 entry below it.

Fix: Move this entry to the very bottom of the file (below the #2222 entry). Since it re-lands the config, also consider pointing pr-link at this PR (#2228) rather than the original #2158 — that matches what #2222 did — and fixing the stale "(conc 32/64)" in the description, since the DCP4 arms now sweep conc 32–160.

Suggested change
- config-keys:
- kimik2.5-fp4-b300-vllm-agentic-mtp
description:
- "Add EAGLE3 speculative-decoding arm for the Kimi K2.6 NVFP4 B300 AgentX recipe (draft lightseekorg/kimi-k2.6-eagle3-mla, TOKENSPEED_MLA attention backend with TRT-LLM ragged MLA kernel)."
- "Add EAGLE3 speculative-decoding arm for the Kimi K2.6 NVFP4 B300 AgentX recipe (draft lightseekorg/kimi-k2.6-eagle3.1-mla, TOKENSPEED_MLA attention backend with TRT-LLM ragged MLA kernel)."
- "TP8/TP4 GPU-only KV points plus a TP4 native CPU-offload ladder via SimpleCPUOffloadConnector with lazy_offload off; TP4/DCP4 high-concurrency points (conc 32/64) using num_speculative_tokens=3 and synthetic_acceptance_length=2.88."
pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2158

cquil11 commented Jul 15, 2026

Copy link
Copy Markdown
Collaborator Author

Comment on lines +87 to +107
echo "Starting vllm server..."
export PYTHONNOUSERSITE=1

export VLLM_FLASHINFER_ALLREDUCE_BACKEND=trtllm

{ set +x; } 2>/dev/null
VLLM_CMD=(
vllm serve "$MODEL_PATH" --served-model-name "$MODEL"
--host 0.0.0.0
--port "$PORT"
--kv-cache-dtype fp8
--trust-remote-code
--block-size 64
--language-model-only
--gpu-memory-utilization 0.90
--max-num-seqs "$CONC"
"${ATTN_BACKEND_ARGS[@]}"
--attention-config "$ATTN_CONFIG"
--compilation-config "$COMPILATION_CONFIG"
--max-cudagraph-capture-size 2048
--max-num-batched-tokens 16384

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔴 The new EAGLE3 MTP agentic script (kimik2.5_fp4_b300_mtp.sh) sets --language-model-only but never passes --tool-call-parser kimi_k2 or --reasoning-parser kimi_k2, unlike every other agentic vLLM script for this model family (e.g. kimik2.5_fp4_b300.sh:65-66, kimik2.5_fp4_b200.sh:175-176). Since this is a tool-calling AgentX benchmark, vLLM won't parse tool calls/reasoning content from the model's output during replay, which can break or invalidate the benchmark.

Extended reasoning...

The bug: benchmarks/single_node/agentic/kimik2.5_fp4_b300_mtp.sh builds its VLLM_CMD array (lines 87-107) with --language-model-only but omits --tool-call-parser kimi_k2 and --reasoning-parser kimi_k2. This script serves the model for an agentic-coding (tool-use) AgentX replay via build_replay_cmd / run_agentic_replay_and_write_outputs, which drives /v1/chat/completions requests against the inferencex-agentx-mvp tool-calling trace corpus.

Established pattern this diverges from: every sibling agentic vLLM script for a tool-calling model sets both parser flags. The closest sibling, kimik2.5_fp4_b300.sh:65-66 (same Kimi K2 family, same B300 SKU, same agentic-coding scenario, non-speculative variant of this exact recipe), sets --reasoning-parser kimi_k2 --tool-call-parser kimi_k2. kimik2.5_fp4_b200.sh:175-176 and the int4 Kimi variants do the same. Critically, minimaxm3_fp8_h100.sh:106,109-110 combines --language-model-only WITH --tool-call-parser minimax_m3 --reasoning-parser minimax_m3 (plus --enable-auto-tool-choice) — proving --language-model-only (which disables the vision tower / non-LM submodules) does not replace or preclude the tool-call/reasoning parser flags. The new MTP script appears to be a derivative of kimik2.5_fp4_b300.sh that dropped these two flags during the EAGLE3/DCP rework.

Why nothing else catches this: the script has no validation that parser flags are set when the scenario is agentic-coding; check_env_vars only checks that required env vars exist, not that the constructed VLLM_CMD includes tool/reasoning parsing. The server will start successfully and pass wait_for_server_ready regardless, so the omission is silent until requests carrying tools/tool_choice are replayed.

Impact: without --tool-call-parser kimi_k2, vLLM either (a) rejects tool_choice-bearing chat-completions requests outright, or (b) accepts them but never structures the model's tool-call text into tool_calls, degrading the trace replay into plain text completion. Since benchmark_lib.sh enforces a 10% failed-request threshold for the sweep, case (a) would push a tool-calling-heavy trace over that threshold and fail the run; case (b) would silently produce throughput numbers for a benchmark that no longer measures actual tool-calling behavior, defeating the purpose of the AgentX agentic-coding scenario this PR is adding.

Proof walkthrough:

  1. configs/nvidia-master.yaml registers kimik2.5-fp4-b300-vllm-agentic-mtp under the agentic-coding scenario.
  2. The sweep runner invokes kimik2.5_fp4_b300_mtp.sh, which launches vllm serve with the VLLM_CMD array shown in the diff — no --tool-call-parser/--reasoning-parser present, only --language-model-only.
  3. resolve_trace_source / build_replay_cmd configure aiperf to replay the inferencex-agentx-mvp corpus, which contains tool-definition-bearing chat-completions requests (this is what makes the scenario "agentic-coding" rather than plain chat).
  4. When aiperf sends a request with tools/tool_choice to a vLLM server started without a tool-call parser, vLLM either 400s the request or returns unparsed tool-call text as plain content, instead of populating tool_calls.
  5. Compare with kimik2.5_fp4_b300.sh (same model family, same replay path) which explicitly sets --reasoning-parser kimi_k2 --tool-call-parser kimi_k2 at lines 65-66 — confirming this is the required, intentional configuration for this exact benchmark type, not an optional flag that only some scripts happen to add.

Fix: add --tool-call-parser kimi_k2 and --reasoning-parser kimi_k2 to the VLLM_CMD array in kimik2.5_fp4_b300_mtp.sh, matching kimik2.5_fp4_b300.sh:65-66.

@github-actions

Copy link
Copy Markdown
Contributor

1 similar comment
@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

1 similar comment
@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

4 similar comments
@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

1 similar comment
@github-actions

Copy link
Copy Markdown
Contributor

@xinli-sw

Copy link
Copy Markdown
Collaborator

/reuse-sweep-run

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

Labels

agentx AgentX benchmarks, recipes, and infrastructure full-sweep-enabled NVIDIA

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

2 participants