Skip to content

[Klaud Cold] kimik2.5-fp4-b300-vllm: nightly image, TP/DEP/TEP sweep / Kimi K2.5 NVFP4 B300 nightly 镜像,TP/DEP/TEP 扫描 - #2513

Merged
functionstackx merged 4 commits into
mainfrom
feat/kimik2.5-fp4-b300-vllm-nightly
Aug 7, 2026
Merged

[Klaud Cold] kimik2.5-fp4-b300-vllm: nightly image, TP/DEP/TEP sweep / Kimi K2.5 NVFP4 B300 nightly 镜像,TP/DEP/TEP 扫描#2513
functionstackx merged 4 commits into
mainfrom
feat/kimik2.5-fp4-b300-vllm-nightly

Conversation

@xinli-sw

@xinli-sw xinli-sw commented Aug 7, 2026

Copy link
Copy Markdown
Collaborator

Summary

Kimi K2.5 NVFP4 B300 vLLM with nightly image: extended sweep space with TP8 (conc-1 only), TP4, TEP8, TEP4, and DEP8 arms.

中文说明

Kimi K2.5 NVFP4 B300 vLLM nightly 镜像:扩展 TP8(仅并发 1)、TP4、TEP8、TEP4 及 DEP8 配置扫描空间。

@github-actions

github-actions Bot commented Aug 7, 2026

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 关于重新运行失败任务的文档

1 similar comment
@github-actions

github-actions Bot commented Aug 7, 2026

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 关于重新运行失败任务的文档

@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Comment on lines 67 to 86

set -x
vllm serve $MODEL_PATH --served-model-name $MODEL --host 0.0.0.0 --port $PORT \
--tensor-parallel-size $TP \
--gpu-memory-utilization 0.90 \
"${PARALLEL_ARGS[@]}" \
"${EP_ARGS[@]}" \
"${PREFILL_SCHEDULE_ARGS[@]}" \
--gpu-memory-utilization "$GMU" \
--max-model-len $MAX_MODEL_LEN \
--max-num-seqs $CONC \
--reasoning-parser kimi_k2 \
--tool-call-parser kimi_k2 \
--compilation_config.pass_config.fuse_allreduce_rms true \
--kv-cache-dtype fp8 \
--max-cudagraph-capture-size "$((CONC * 2))" \
--stream-interval 32 \
--attention-config '{"mla_prefill_backend":"FLASHINFER","use_prefill_query_quantization":true}' \
--linear-backend flashinfer_cutlass \
--no-enable-prefix-caching \
--trust-remote-code > $SERVER_LOG 2>&1 &

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 header comment (lines 3-5) still says this script 'reuses the existing Kimi-K2.5 FP4 B200 vLLM recipe as-is until B300-specific tuning is available,' but this PR adds substantial B300-specific tuning (DP-attention/EP parallel arms, --attention-config, --linear-backend flashinfer_cutlass, CONC-scaled cudagraph capture, new VLLM env vars) that has no counterpart in kimik2.5_fp4_b200.sh. Please update or remove the comment (and the matching NOTE above the kimik2.5-fp4-b300-vllm entry in configs/nvidia-master.yaml) so future readers don'''t assume this is an unmodified B200 clone.

Extended reasoning...

The top-of-file comment in benchmarks/single_node/fixed_seq_len/kimik2.5_fp4_b300.sh (lines 3-5) reads:

# NOTE: At the time of submission, https://docs.vllm.ai/projects/recipes/en/latest/moonshotai/Kimi-K2.5.html
# does not have a B300-specific recipe, so this script reuses the existing
# Kimi-K2.5 FP4 B200 vLLM recipe as-is until B300-specific tuning is available.

That comment predates this PR and was accurate when the B300 script really was a byte-for-byte copy of the B200 recipe. This PR is precisely the 'B300-specific tuning' the comment says is still pending, so its own premise is now false.

Diff against kimik2.5_fp4_b200.sh: I compared the two scripts directly. The B200 script has a fixed --tensor-parallel-size $TP, no DP-attention/EP arm selection, no --attention-config, no --linear-backend, no --prefill-schedule-interval, a fixed --max-cudagraph-capture-size 2048, --stream-interval 20, and none of VLLM_USE_V2_MODEL_RUNNER, VLLM_FLASHINFER_AUTOTUNE_SKIP_OPS, or VLLM_RPC_TIMEOUT. This PR adds all of the following to the B300 script that have no B200 counterpart:

  • PARALLEL_ARGS/GMU/PREFILL_SCHEDULE_ARGS logic that switches between plain TP and DP-attention (TP=1, DP=$TP) with a lower GMU (0.85) and --prefill-schedule-interval 4 (lines 19-25)
  • EP_ARGS toggling --enable-expert-parallel when EP_SIZE > 1 (lines 27-30)
  • Three new env vars: VLLM_USE_V2_MODEL_RUNNER=0, VLLM_FLASHINFER_AUTOTUNE_SKIP_OPS="", VLLM_RPC_TIMEOUT=600000 (lines 55-57)
  • --kv-cache-dtype fp8, --max-cudagraph-capture-size $((CONC * 2)), --stream-interval 32, --attention-config '{"mla_prefill_backend":"FLASHINFER","use_prefill_query_quantization":true}', --linear-backend flashinfer_cutlass (lines 79-83)

Step-by-step proof:

  1. Open kimik2.5_fp4_b300.sh and read lines 3-5: a maintainer unfamiliar with the file's history would conclude the launch command is identical to kimik2.5_fp4_b200.sh.
  2. Open kimik2.5_fp4_b200.sh and grep for attention-config, linear-backend, PARALLEL_ARGS, EP_ARGS, VLLM_RPC_TIMEOUT — none exist.
  3. Diff the two vllm serve invocations: the B300 one has 5+ flags/env-vars absent from B200, plus different values for --max-cudagraph-capture-size and --stream-interval.
  4. Therefore the comment's claim ('reuses ... as-is') is now contradicted by the very file it sits in, and the qualifier 'until B300-specific tuning is available' describes work this PR just completed.

The identical stale wording also appears in the NOTE directly above the kimik2.5-fp4-b300-vllm block in configs/nvidia-master.yaml (around line 1436), so both spots should be updated together.

Impact: none functionally — the sweep script runs correctly regardless of the comment's wording. This is purely a documentation-accuracy issue: a future engineer reading the comment could be misled into thinking any B200-recipe change should be mirrored here without modification, or that this script has no independent tuning worth preserving/reviewing on its own. Fix is trivial: replace the comment with something like 'B300-specific tuning: DP-attention/EP parallel-arm selection, attention-config/linear-backend overrides, and cudagraph/env-var tuning added below' or simply delete the now-inaccurate 'as-is' framing.

Comment on lines 1450 to +1455
search-space:
- { tp: 8, ep: 1, conc-start: 1, conc-end: 4 }
- { tp: 4, ep: 1, conc-start: 1, conc-end: 128 }

- { tp: 8, ep: 1, conc-list: [1] }
- { tp: 4, ep: 1, conc-start: 1, conc-end: 512 }
- { tp: 8, ep: 8, dp-attn: false, conc-list: [1] }
- { tp: 4, ep: 4, dp-attn: false, conc-start: 1, conc-end: 512 }
- { tp: 4, ep: 4, dp-attn: true, conc-start: 128, conc-end: 512 }

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 PR description says a DEP8 arm was added, but the only dp-attn: true entry in the new search-space is { tp: 4, ep: 4, dp-attn: true, ... }, which per this repo's convention (tp = data-parallel size when dp-attn:true, e.g. dsv4-fp4-b200-vllm's tp:8/ep:8 DEP8 arm) is a DEP4 arm, not DEP8. No tp:8/ep:8/dp-attn:true entry exists anywhere in the diff, so the stated sweep coverage (TP8, TP4, TEP8, TEP4, DEP8) doesn't match the 5 arms actually added — worth a quick confirmation on whether the description is stale or a DEP8 arm was meant to be included.

Extended reasoning...

What's mismatched: The PR description states the sweep adds "TP8 (conc-1 only), TP4, TEP8, TEP4, and DEP8 arms," but the actual search-space diff at configs/nvidia-master.yaml:1450-1455 only contains one dp-attn: true entry:

- { tp: 8, ep: 1, conc-list: [1] }                              # TP8
- { tp: 4, ep: 1, conc-start: 1, conc-end: 512 }                 # TP4
- { tp: 8, ep: 8, dp-attn: false, conc-list: [1] }               # TEP8
- { tp: 4, ep: 4, dp-attn: false, conc-start: 1, conc-end: 512 } # TEP4
- { tp: 4, ep: 4, dp-attn: true, conc-start: 128, conc-end: 512 }# labeled DEP8 in the PR body, but tp:4/ep:4

Why this is DEP4, not DEP8: In this repo's convention, when dp-attn: true the benchmark script sets the tensor-parallel size to 1 and the data-parallel size to the tp config value (confirmed in the modified kimik2.5_fp4_b300.sh: PARALLEL_ARGS=(--tensor-parallel-size 1 --data-parallel-size "$TP") under the DP_ATTENTION=true branch). So the "DEPn" naming refers to that data-parallel degree, i.e. the tp field value. This is exactly how dsv4-fp4-b200-vllm names its own DEP8 arm at configs/nvidia-master.yaml:946: { tp: 8, ep: 8, dp-attn: true, ... }. Applying the same rule here, { tp: 4, ep: 4, dp-attn: true } is a DEP4 arm (4-way data-parallel-attention + EP4), not DEP8. There is no { tp: 8, ep: 8, dp-attn: true } entry anywhere in this diff.

Step-by-step proof:

  1. Reference case: dsv4-fp4-b200-vllm has { tp: 8, ep: 8, dp-attn: true } and is documented/named as its DEP8 arm → convention is DEPn where n = tp (used as --data-parallel-size) when dp-attn: true.
  2. This PR's new arms map to the description's list as: arm1 tp:8,ep:1 = TP8, arm2 tp:4,ep:1 = TP4, arm3 tp:8,ep:8,dp-attn:false = TEP8, arm4 tp:4,ep:4,dp-attn:false = TEP4, arm5 tp:4,ep:4,dp-attn:true = (per convention) DEP4.
  3. Applying the same naming rule from step 1 to arm5 yields DEP4, contradicting the PR description's "DEP8" label.
  4. Grepping the full diff for tp: 8 combined with ep: 8 and dp-attn: true on the same line returns zero matches — confirming no DEP8 arm was actually added.

Why nothing prevents this / why it isn't blocking: All 5 arms are valid, well-formed configs and will run correctly regardless of their label — the mismatch is purely between the PR's free-text description and the committed YAML, not a functional defect. The committed perf-changelog.yaml entry for this PR is generic ("TP/DEP/TEP sweep, TP8 conc-1 only, DEP gmu 0.85") and does not claim DEP8 specifically, so no committed artifact makes the incorrect claim — only the ephemeral PR body does. It's also plausible this is intentional: the new DEP4 arm exactly mirrors the new TEP4 arm (tp:4, ep:4) at the same GPU count, giving a clean apples-to-apples dp-attn on/off comparison at 4 GPUs, rather than an accidental omission of a true DEP8 arm.

Suggested fix: Reconcile the PR description with the config — either correct "DEP8" to "DEP4" in the description, or, if full-node (8-GPU) attention-DP throughput data was actually intended, add a { tp: 8, ep: 8, dp-attn: true, ... } arm to the search-space.

Comment thread perf-changelog.yaml Outdated
Comment on lines +5519 to +5523
- config-keys:
- kimik2.5-fp4-b300-vllm
description:
- "Kimi K2.5 NVFP4 B300 vLLM: nightly image, TP/DEP/TEP sweep, TP8 conc-1 only, DEP gmu 0.85"
pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2442

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 The new perf-changelog.yaml entry for kimik2.5-fp4-b300-vllm sets pr-link to PR #2442, but this PR is actually #2513. Every other entry in the file links to its own introducing PR, so this looks like a copy-paste leftover — please update it to https://github.com/SemiAnalysisAI/InferenceX/pull/2513.

Extended reasoning...

The changelog entry appended at the bottom of perf-changelog.yaml for kimik2.5-fp4-b300-vllm sets:

pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2442

but per the PR metadata this PR is actually #2513. Every adjacent entry in the file links to the PR that introduced it (e.g. #2447, #2492, #2390, #2099), and AGENTS.md's changelog template (line 164) explicitly documents the convention: pr-link should point to the PR's own URL (with XXX as the placeholder to fill in). 2442 doesn't match this PR's number and looks like a copy-paste leftover from a different PR.

Step-by-step proof:

  1. pr-metadata for this PR gives pr number="2513".
  2. The diff to perf-changelog.yaml adds pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2442.
  3. 2442 != 2513, and no other PR number appears anywhere else in this diff to justify 2442 — it's simply the wrong value.
  4. Every other entry in the file's tail (2447, 2492, 2390, 2099) follows the "own PR number" convention, confirming 2442 is the odd one out.

Why this isn't caught by CI: The main sweep-validation CI job (utils/validate_perf_changelog.py invoked without --pr-number in run-sweep.yml) only checks that pr-link matches the canonical .../pull/<digits> URL regex, which 2442 satisfies — so this doesn't fail the sweep gate. However, utils/prepare_perf_changelog_merge.py (used for changelog conflict resolution during rebase, per AGENTS.md/KLAUD_DEBUG as the common case for Klaud PRs) and utils/recover_failed_ingest.py both call stricter validation that requires the appended entry's pr-link to match the PR's own number exactly, and will raise ChangelogValidationError if it doesn't. So while this won't block the initial sweep run, it can break the standard rebase/recovery tooling downstream, and in the meantime it misattributes this sweep to the wrong PR in the changelog's human-facing history.

Fix: change pull/2442 to pull/2513 in the new entry at the end of perf-changelog.yaml. This is a trivial one-line fix.

@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

@xinli-sw

xinli-sw commented Aug 7, 2026

Copy link
Copy Markdown
Collaborator Author

/reuse-sweep-run

@Ankur-singh

Copy link
Copy Markdown
Collaborator

/reuse-sweep-run 31148296509

…n:修正 changelog pr-link 2442 -> 2513

The perf-changelog entry pointed at PR 2442 rather than this PR (2513).

perf-changelog.yaml was also drifting: main has gained several entries since
this branch was cut. Resolved by taking main's file verbatim and re-appending
this PR's entry last, so the diff against main stays additions-only (6/0) and no
entry from main can be dropped.
@Ankur-singh

Copy link
Copy Markdown
Collaborator

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

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

Additional detail section:

  • Scope. kimik2.5-fp4-b300-vllm moves to vllm/vllm-openai:nightly-e2fa28594f7baad142a426b0b6a2cfe2c79201c7 and reshapes the search space: TP8/EP1 at conc [1], TP4/EP1 at conc 1–512, and a TP8/EP8 tensor-EP arm at conc [1]. This is the B300 sibling of [Klaud Cold] kimik2.5-fp4-b200-vllm: nightly image, TP/DEP/TEP sweep / Kimi K2.5 NVFP4 B200 nightly 镜像,TP/DEP/TEP 扫描 #2512; the deliberately narrow TP8 arms are the difference. Reviewed at head 7355453bad9bd7e72456d6f9d2c2bb0a0b5268f6.
  • Validation and evals. Run 31148296509 executed at in-PR commit 3b6a21fdc: 24/24 single-node 8k1k and 6/6 eval lanes concluded success, plus canary, collect-results, collect-evals, compare-results and calc-success-rate all green, with zero failures.
  • Why the evidence is linked at an in-PR commit rather than the tip. The head moved after that run because I fixed two things in this PR (below). The benchmark script, the kimik2.5-fp4-b300-vllm entry and the runner change are byte-identical to what run 31148296509 measured; the only later changes are the changelog pr-link correction and a merge of main. /reuse-sweep-run 31148296509 is pinned on this PR, and the resulting head run 31204476685 consumed that authorization (reuse-sweep-gate = success, setup skipped) with check-changelog passing on the corrected file.
  • Two defects I fixed in this PR while reviewing.
    1. The perf-changelog.yaml entry carried pr-link: .../pull/2442 — a different PR. Corrected to 2513.
    2. perf-changelog.yaml had drifted: main gained several entries after this branch was cut, so the file was in conflict. Resolved by taking main's copy verbatim and re-appending this PR's entry last, which keeps the diff against main additions-only (6/0). The PR is now MERGEABLE.
    3. A bare /reuse-sweep-run had been posted. That command is not one-shot — utils/find_reusable_sweep_run.py re-reads it on every synchronize, so it would have set skip-pr-sweep=true for every future push. It is now superseded by the explicit pin above.
  • MODELS.md (unchecked, and the reason stated plainly). This PR submits kimik2.5 Single-turn 8k1k. The current MODELS.md on main still reads "Single-turn 8k1k (until 2026-08-06) — fully retired after 2026-08-06", and today is 2026-08-07. I am told by the maintainers that the kimik2.5 deadline has been extended, and I am signing off on that basis — but the extension has not yet landed in MODELS.md, so I cannot honestly tick a box that says the current document permits this combination. This item should be re-read once the MODELS.md update merges; if the extension is not in fact granted, this submission should not merge.
  • Upstream recipe (unchecked). This is a single-node vLLM recipe, so the requirement applies. The published Kimi-K2.5 vLLM recipe documents the NVFP4-on-Blackwell serving shape including vllm serve nvidia/Kimi-K2.5-NVFP4 with tensor parallelism, --enable-expert-parallel and --data-parallel-size, and it explicitly notes that no B300-specific recipe exists yet (a caveat this config already carries as a comment). It does not document the backend flags this PR introduces — --attention-config '{"mla_prefill_backend":"FLASHINFER",...}', --linear-backend flashinfer_cutlass, VLLM_USE_V2_MODEL_RUNNER=0 — nor a nightly image pin. Those are MAJOR serving arguments, so I am leaving this item unchecked rather than arguing the published page covers them.
  • Speculative decoding and agentic golden AL (unchecked). Both not applicable: there is no speculative decoding anywhere in kimik2.5_fp4_b300.sh, and this is a single-turn fixed-seq-len 8k1k submission, not an agentic workload.
  • Model architecture. No --hf-overrides, model-override arguments, or layer/expert trimming. Changes are parallelism selection, expert parallelism, kernel backends, GPU-memory utilisation (0.85 on the DP-attention arm), CUDA-graph capture sizing and stream interval.
  • Upstream image and framework ordering. vllm/vllm-openai:nightly-e2fa28594f7baad142a426b0b6a2cfe2c79201c7 from the official https://hub.docker.com/u/vllm org — a nightly tag, but not a fork or vendor rebuild. vLLM is the serving engine, so engine-first ordering holds by construction.
  • Runner change. runners/launch_b300-nv.sh gains a kimik2.5 + fp4 branch that resolves MODEL_PATH to WRITABLE_MODELS_DIR ahead of the STAGED_MODELS allow-list check, i.e. this model is read from the writable models directory rather than the pre-staged HF cache mount. That is a deliberate, narrowly-scoped bypass of the staged-model list for one model-precision pair; it costs a fetch on first use but is correct when no staged copy exists. It changes no other launch path.
  • No engine patching. No .patch files, git apply, sed -i rewrites, site-packages edits, monkey-patching, or forked/rebuilt engine wheels; the pinned image runs as shipped and no waiver is needed. The only pip install in the script is datasets pandas for the client-side eval path.

Signed: Ankur-singh

@Klaud-Cold

Copy link
Copy Markdown
Collaborator

❌❌❌ REJECTED ❌❌❌

@Ankur-singh — two blockers: the pinned server args are not covered by merged/published upstream recipe documentation (Check 3), and this PR submits the kimik2.5 Single-turn 8k1k scenario, which MODELS.md retires after 2026-08-06 (review date 2026-08-07; the claimed extension has not landed in MODELS.md) (Check 7).

✅ Check 0 (CODEOWNER): PASS — signer is a listed owner of configs/nvidia-master.yaml; remaining paths fall under the catch-all, which a recognized CODEOWNER satisfies.
✅ Check 1 (sweep on in-PR commit): PASS — in-PR commit 3b6a21fdc has 24/24 single-node 8k1k / and 6/6 eval / check-runs with conclusion success on run 31148296509.
✅ Check 2 (evals pass): PASS — 6/6 gsm8k results at 0.9666–0.9719 vs the 0.90 bar (utils/evals/thresholds.yaml), run on the same vllm/vllm-openai:nightly-e2fa285… image this PR pins.
❌ Check 3 (recipe merged & args match): FAIL — the published Kimi-K2.5 recipe does not document these MAJOR args this PR pins: --kv-cache-dtype fp8, --attention-config '{"mla_prefill_backend":"FLASHINFER","use_prefill_query_quantization":true}', --linear-backend flashinfer_cutlass, VLLM_USE_V2_MODEL_RUNNER=0 (the sign-off left this item unchecked for the same reason). The recipe does cover model, TP4, expert/data parallelism and fuse_allreduce_rms; --stream-interval, --max-cudagraph-capture-size, --prefill-schedule-interval, GMU and the nightly tag are InferenceX-specific tuning and not held against it.
✅ Check 4 (reuse command): PASS — /reuse-sweep-run 31148296509 posted by Ankur-singh (COLLABORATOR).
✅ Check 5 (latest template): PASS — all current-template items present; each unchecked item is explained in the additional detail section.
✅ Check 6 (upstream image & ordering): PASS — vllm/vllm-openai:nightly-e2fa285… is from the upstream vLLM org; the entry is framework: vllm, so engine-first ordering holds by construction.
❌ Check 7 (deprecated models): FAIL — this PR re-enables kimik2.5 Single-turn 8k1k, but current MODELS.md states Single-turn 8k1k is deprecated for kimik2.5 after 2026-08-06 and the model is fully retired after that date; the review date is 2026-08-07. A maintainer-granted extension must merge into MODELS.md first, then this gate can re-run.
✅ Check 8 (no architecture hacks): PASS — no --hf-overrides/model-override args; changes are parallelism, kernel backends, kv-cache precision (with passing evals), and CUDA-graph/scheduler tuning.
➖ Check 9 (spec-decode chat templates): N/A — no speculative-decoding changes in this PR.
✅ Check 10 (no engine patches): PASS — no patch files, heredoc rewrites, site-packages edits, or engine wheel installs; the only pip install is client-side (datasets pandas).
➖ Check 11 (agentic golden AL): N/A — no agentic speculative-decoding changes.

@functionstackx

Copy link
Copy Markdown
Collaborator

/reuse-sweep-run

@functionstackx
functionstackx merged commit 7543fe9 into main Aug 7, 2026
26 checks passed
@functionstackx
functionstackx deleted the feat/kimik2.5-fp4-b300-vllm-nightly branch August 7, 2026 19:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Development

Successfully merging this pull request may close these issues.

4 participants