[Klaud Cold][agentic experiment][Variant B] Kimi-K3 B200 agg TP8xPP2 agentic — vLLM tool-call-parser flags / Kimi-K3 B200 聚合式 TP8xPP2 智能体实验——vLLM tool-call-parser 参数 - #2357
Conversation
…ecipe Aggregated TP8 x PP2 across 2 B200 nodes (16 GPUs), plain TP (no expert parallelism) for the agentic-coding trace replay. Dedicated bring-up image vllm/vllm-openai:kimi-k3 with VLLM_ENABLE_K3_LATENT_MOE_TAIL_FUSION=1, fastsafetensors load format, kimi_k3 tool-call/reasoning parsers. Model pre-staged at /lustre/fsw/models/Kimi-K3; launch_b200-dgxc.sh gains the kimik3/fp4 model-path mapping, the agentic recipe overlay, and the agentic cache default_mounts used by the GB200/GB300 agentic paths. 中文:新增 Kimi-K3 MXFP4 B200 聚合式 TP8xPP2 Dynamo-vLLM 智能体编码基准测试配方 (2 节点 / 16 GPU,纯 TP,不启用专家并行(EP))。使用专用 bring-up 镜像 vllm/vllm-openai:kimi-k3(VLLM_ENABLE_K3_LATENT_MOE_TAIL_FUSION=1、 fastsafetensors 加载格式、kimi_k3 工具调用/推理解析器)。模型已预置于 /lustre/fsw/models/Kimi-K3;启动器 launch_b200-dgxc.sh 增加 kimik3/fp4 模型路径映射、智能体配方覆盖及智能体缓存挂载。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
中文:在更新日志条目与 MODELS 表格行中补充 PR #2355 链接。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…oke test The cquil11/srt-slurm-nv cam/sa-submission-q2-2026 fork rejected the recipe (benchmark.aiperf_server_metrics: Unknown field). Switch the b200-dgxc agentic clone to upstream NVIDIA/srt-slurm v1.0.36 (validated in #2302/#2341), drop the aiperf_server_metrics field, pin dynamo wheel/router to 1.2.1 (the combination validated with v1.0.36), and reduce the bring-up to a single conc-8 smoke test. 中文:cquil11/srt-slurm-nv 分支的 srtctl 校验拒绝了配方字段 benchmark.aiperf_server_metrics(Unknown field)。将 b200-dgxc 智能体路径改用 上游 NVIDIA/srt-slurm v1.0.36(已在 #2302/#2341 验证),移除该字段,dynamo wheel/router 固定为 1.2.1,并将 bring-up 缩减为单并发(conc 8)冒烟测试。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The dynamo-vllm worker entrypoint rejected --enable-auto-tool-choice --tool-call-parser kimi_k3 (unrecognized arguments; different arg parser than vllm serve). Chat parsing happens at the dynamo frontend — same convention as the DSv4 GB300 agentic recipes. Keep --reasoning-parser kimi_k3 (accepted by the worker). Also drop the explicit max-model-len and let vLLM derive the native 1M window from the model config, mirroring the agentic recipe convention. 中文:dynamo-vllm worker 入口不接受 --enable-auto-tool-choice 与 --tool-call-parser kimi_k3(unrecognized arguments,与 vllm serve 的参数解析器 不同),聊天解析由 dynamo 前端处理,与 DSv4 GB300 智能体配方约定一致;保留 worker 可接受的 --reasoning-parser kimi_k3。同时移除显式 max-model-len, 由 vLLM 从模型配置推导原生 1M 上下文窗口。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Third sweep attempt: the engine loaded and served (TP8xPP2 healthy in ~14 min), but dynamo 1.2.1's rust frontend tokenizer rejects Kimi-K3's tiktoken model_type 'kimi_k3' (supported: kimi, kimi_k2, kimi_k25, deepseek_v3), so the model never registered and all chat completions returned 404, aborting the AgentX warmup. Switch to the 1.2.0.dev20260426 wheel used by the DSv4 GB300/B200 Dynamo-vLLM recipes. Upstream published v1.4.0-kimi-k3-dev.1 (2026-07-27) as the day-zero K3 build if this wheel also lacks support. 中文:第三次扫描中引擎已成功加载并提供服务(TP8xPP2 约 14 分钟就绪),但 dynamo 1.2.1 的 rust 前端分词器不支持 Kimi-K3 的 tiktoken model_type 'kimi_k3',模型未能注册,所有请求返回 404,AgentX 预热中止。改用 DSv4 GB300/B200 Dynamo-vLLM 配方所用的 1.2.0.dev20260426 wheel;如仍不支持, 上游已于 2026-07-27 发布 day-zero 构建 v1.4.0-kimi-k3-dev.1。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Pin dynamo to ba83080ecd31c1ce918559e576d3c5bc9e092ff1 ("feat: Added
support for Kimi-K3", tag v1.4.0-kimi-k3-dev.1) via srt-slurm's
hash-cached source install: it adds the kimi_k3 tiktoken tokenizer to the
rust frontend (dynamo <=1.2.1 404s every request because the model never
registers) and accepts the kimi_k3 tool-call/reasoning parser worker args,
so restore --enable-auto-tool-choice --tool-call-parser kimi_k3
--reasoning-parser kimi_k3.
中文:将 dynamo 固定到 day-zero Kimi-K3 提交 ba83080("feat: Added support
for Kimi-K3",标签 v1.4.0-kimi-k3-dev.1),通过 srt-slurm 的哈希缓存源码
安装:该提交为 rust 前端新增 kimi_k3 tiktoken 分词器(dynamo <=1.2.1 因模型
无法注册而全部返回 404),worker 亦支持 kimi_k3 解析器参数,故恢复
--enable-auto-tool-choice --tool-call-parser kimi_k3 --reasoning-parser kimi_k3。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Replace the vLLM OpenAI-frontend spellings (--enable-auto-tool-choice / --tool-call-parser) with dynamo's namespaced worker args: --dyn-tool-call-parser kimi_k3 --reasoning-parser kimi_k3 --dyn-reasoning-parser kimi_k3. 中文:将 vLLM OpenAI 前端风格参数(--enable-auto-tool-choice / --tool-call-parser)替换为 dynamo 命名空间的 worker 参数: --dyn-tool-call-parser kimi_k3 --reasoning-parser kimi_k3 --dyn-reasoning-parser kimi_k3。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Variant of the Kimi-K3 B200 agg TP8xPP2 agentic bring-up (#2355) using --tool-call-parser kimi_k3 --reasoning-parser kimi_k3 on the worker. Sibling experiments try dynamo's --dyn-* namespaced args and no parser flags; whichever goes green first merges. 中文:Kimi-K3 B200 聚合式 TP8xPP2 智能体 bring-up(#2355)的解析器参数实验 变体 B:worker 使用 --tool-call-parser kimi_k3 --reasoning-parser kimi_k3。 兄弟实验分别尝试 dynamo --dyn-* 命名空间参数与不带解析器参数;先通过者合并。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
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 For PR verification, add the 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 模板,包括保留英文语句 如需进行 PR 验证,请为此 PR 添加 PR 作者有责任确保合并后所有 GitHub Action 任务完全通过。 很多时候失败只是偶发抖动(flake),重新运行失败的任务即可解决。参见 GitHub 关于重新运行失败任务的文档 |
中文:将更新日志条目与 MODELS 表格行链接指向实验 PR #2357。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
see unofficial run visualizer at https://inferencex.semianalysis.com/inference?unofficialRun=30299707008 |
| health_check: | ||
| interval_seconds: 10 | ||
| max_attempts: 1440 |
There was a problem hiding this comment.
🟡 The recipe deliberately sets health_check.max_attempts: 1440 (4hr window) for the ~1.4TB MXFP4 checkpoint load off shared Lustre, but runners/launch_b200-dgxc.sh's pre-existing multinode-path sed (s/^ max_attempts: [0-9]*/ max_attempts: 720/) unconditionally matches the recipe's 2-space-indented line and silently clamps it back to 720 (2hr). This is the first multinode+agentic recipe on cluster:b200-dgxc to carry max_attempts > 720, so this PR is the first to collide with that override — the author's explicit 4hr intent is currently a dead value; worth scoping the sed (e.g. only bump if the value is below 720) or dropping/correcting the recipe's comment so it doesn't mislead future readers.
Extended reasoning...
The bug: benchmarks/multi_node/srt-slurm-recipes/vllm/kimi-k3/agentic/agg-b200-tp8pp2-agentic.yaml sets:
health_check:
interval_seconds: 10
max_attempts: 1440with an explicit design rationale nearby ("~1.4TB of MXFP4 weights off shared Lustre: keep the engine-ready window generous"), i.e. a deliberate 4-hour health-check window (1440 × 10s).
However, runners/launch_b200-dgxc.sh (unmodified by this PR, but exercised for the first time by this recipe on this runner) contains, in the IS_MULTINODE branch:
sed -i 's/^ max_attempts: [0-9]*/ max_attempts: 720/' "${CONFIG_FILE%%:*}"This runs unconditionally on every multinode job, after the recipe file has been copied into the srt-slurm checkout and referenced via CONFIG_FILE. The pattern ^ max_attempts: [0-9]* (anchored, exactly two leading spaces) matches the recipe's max_attempts: 1440 line exactly, so the sed rewrites it in place to max_attempts: 720 before srtctl apply ever reads the file. The recipe's intended 4-hour window is silently reduced to 2 hours — the 1440 value the author wrote (and commented on) never actually reaches the health-check logic.
Why nothing else in the pipeline prevents this: the sed has no guard for "only bump if lower" — it's a blind overwrite regardless of the file's existing value, so it clamps down just as readily as it bumps up. Nothing in the recipe YAML or configs/nvidia-master.yaml routing opts out of this launcher step, and there's no comment in the recipe warning that max_attempts is moot on this runner — so a reader of the recipe today would reasonably (and incorrectly) believe the 4-hour window is honored.
Why this specific PR is the one that surfaces it: all other recipes with max_attempts: 1440 in the repo are wired to the gb200/gb300 launchers (launch_gb200-nv.sh / launch_gb300-nv.sh), which don't contain this sed. This Kimi-K3 config is the first multinode+agentic recipe on cluster:b200-dgxc (launch_b200-dgxc.sh) to specify a health-check window above 720, so it's the first config to actually collide with the override — it isn't a hypothetical, it directly affects this PR's own recipe.
Step-by-step proof:
configs/nvidia-master.yamlrouteskimik3-fp4-b200-dynamo-vllm-agentictorunner: cluster:b200-dgxc, i.e.launch_b200-dgxc.sh, withadditional-settings: CONFIG_FILE=recipes/vllm/kimi-k3/agentic/agg-b200-tp8pp2-agentic.yaml.IS_AGENTIC=1triggers the overlay step, copyingbenchmarks/multi_node/srt-slurm-recipes/vllm/kimi-k3/agentic/into the srt-slurm clone'srecipes/vllm/kimi-k3/agentic/— this is the actual fileCONFIG_FILEpoints at.- Because
IS_MULTINODE == "true"for this recipe, the script reaches the linesed -i 's/^ max_attempts: [0-9]*/ max_attempts: 720/' "${CONFIG_FILE%%:*}". - The copied file contains
max_attempts: 1440at 2-space indent — matches the anchor exactly — sed rewrites it tomax_attempts: 720. srtctl apply -f "$CONFIG_FILE" ...runs immediately after, reading the now-mutated file: the health check will poll for 720 × 10s = 7200s = 2hr, not the author's intended 14400s = 4hr.
Impact and why it's a nit, not a blocker: the mechanism is real and the author's stated intent is genuinely defeated, but a concrete failure at merge is unlikely for two independent reasons already present in this same PR: (1) the recipe sets VLLM_ENGINE_READY_TIMEOUT_S: "3600" (1hr) in aggregated_environment, so vLLM's own engine-init timeout fires at 1hr regardless of the health-check window — the clamped 2hr window is never actually the binding constraint versus the intended 4hr, since both exceed the 1hr engine timeout; and (2) the PR's own perf-changelog.yaml entry records the observed engine-ready time as "~14 min via fastsafetensors," roughly 8x under even the clamped 720-attempt/2hr window. So the failure mode the recipe's comment is defending against (Lustre contention pushing load past 2hr) is not observed in practice here.
Suggested fix: either scope the launcher's sed to only raise max_attempts when it's below the floor (e.g. compare before overwriting), or update the recipe's max_attempts/comment to reflect that 720 is the effective ceiling on cluster:b200-dgxc until the launcher is changed — as-is, the 1440 value and its accompanying comment are misleading to future readers of this recipe.
|
Variant B is definitively dead: even on the day-zero Kimi-K3 dynamo build (ba83080e / v1.4.0-kimi-k3-dev.1), the dynamo-vllm worker entrypoint rejects the plain vLLM spelling — 中文:变体 B 已确定失败:即使在 day-zero Kimi-K3 dynamo 构建(ba83080e / v1.4.0-kimi-k3-dev.1)上,dynamo-vllm worker 入口仍拒绝 vLLM 原生写法(unrecognized arguments: --tool-call-parser kimi_k3)。存活的实验为变体 A(#2355,dynamo --dyn-* 命名空间参数,worker 可接受)与变体 C(#2358,不带解析器参数)。现关闭本 PR。 |
Summary
Parser-flag experiment (variant B) for the Kimi-K3 MXFP4 B200 aggregated TP8×PP2 agentic bring-up — plain vLLM parser spellings.
Identical to the base bring-up PR in every way (srt-slurm v1.0.36, dynamo hash-pinned to the day-zero Kimi-K3 commit
ba83080e/ tagv1.4.0-kimi-k3-dev.1,vllm/vllm-openai:kimi-k3, conc-8 smoke test) except the worker parser flags:Related experiments
Three sibling PRs race the same recipe with different worker parser flags; whichever goes green first merges and the others close:
--dyn-tool-call-parser kimi_k3 --reasoning-parser kimi_k3 --dyn-reasoning-parser kimi_k3— [Klaud Cold][agentic experiment][Variant A] feat: add Kimi-K3 MXFP4 B200 aggregated TP8xPP2 Dynamo-vLLM agentic bring-up / 新增 Kimi-K3 MXFP4 B200 聚合式 TP8xPP2 Dynamo-vLLM 智能体编码基准测试(bring-up) #2355--tool-call-parser kimi_k3 --reasoning-parser kimi_k3中文说明
Kimi-K3 MXFP4 B200 聚合式 TP8×PP2 智能体 bring-up 的解析器参数实验(变体 B)——vLLM 原生写法。
除 worker 解析器参数外与基础 PR 完全一致(srt-slurm v1.0.36、dynamo 固定到 day-zero Kimi-K3 提交
ba83080e/ 标签v1.4.0-kimi-k3-dev.1、vllm/vllm-openai:kimi-k3镜像、并发 8 冒烟测试):worker 使用--tool-call-parser kimi_k3 --reasoning-parser kimi_k3。相关实验
三个兄弟 PR 以不同的 worker 解析器参数并行竞跑同一配方,先通过者合并、其余关闭:变体 A(基础 PR,dynamo --dyn-* 命名空间参数)#2355;变体 B(本 PR,vLLM 原生写法);变体 C(不带解析器参数)#2358。
🤖 Generated with Claude Code