Repository navigation
feat(speedbench): add MiMo-V2.6-Flash vLLM DFlash AL collector and golden curve / feat(speedbench):新增 MiMo-V2.6-Flash vLLM DFlash AL 采集脚本与黄金曲线 - #4331
Conversation
…speedbench):新增 MiMo-V2.6-Flash SGLang MTP AL 采集脚本 Measures SPEED-Bench coding acceptance length for MiMo-V2.6-Flash's bundled MTP layers (SGLang multi-layer EAGLE, topk 1, depths 1-3) on B300, thinking on, for the golden AL curve mimov2.6flash_mtp.yaml. 在 B300 上测量 MiMo-V2.6-Flash 自带 MTP 层(SGLang 多层 EAGLE, topk 1,深度 1-3)在 SPEED-Bench coding 类别上的接受长度(开启思考), 用于生成 golden AL 曲线 mimov2.6flash_mtp.yaml。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Thanks for the contribution!
中文感谢你的贡献!
|
| echo "# dataset: $CATEGORY | temperature: $TEMPERATURE | top_p: $TOP_P | output_len: $SPEEDBENCH_OUTPUT_LEN" | ||
| echo "# thinking_on: chat template default" | ||
| echo "# draft: bundled MTP layers (multi-layer EAGLE, topk 1)" | ||
| echo "# Measured on $MODEL_KEY ($GPU_NAME, SGLang MTP), per num_speculative_tokens." | ||
| echo "# Auto-generated by benchmarks/single_node/speedbench/mimov2.6flash_fp4_b300_sglang.sh (speedbench-al.yml)." | ||
| echo "#" | ||
| echo "# key = num_speculative_tokens (MTP steps); value = golden AL" | ||
| echo "${MODEL_KEY}:" | ||
| echo " thinking_on:" | ||
| for mtp in $MTP_LIST; do | ||
| echo " $mtp: ${AL_RESULT[on_${mtp}]}" | ||
| done | ||
| } > "$OUT_YAML" | ||
|
|
||
| echo "" |
There was a problem hiding this comment.
🔴 AgentX may get a golden curve labelled thinking_on that was measured with thinking off, if MiMo's chat template defaults enable_thinking to false. The script never checks the mode it serves. It writes every cell under thinking_on: (line 219), on the unchecked assumption at line 19 that the template default is thinking on. Fix: before writing thinking_on, confirm that the rendered prompt opens a thinking block, or that the model's chat_template defaults enable_thinking to true. Fail with CRITICAL if not, as is already done for THINKING_MODES.
Why this was flagged
The trigger is MiMo-V2.6-Flash-RL's chat_template leaving thinking off unless enable_thinking is passed. Earlier MiMo-V2 model cards enable thinking through chat_template_kwargs, so this case is realistic, and it cannot be checked from this checkout. The PR says SGLang's speed-bench loader applies the template client-side with no kwargs, so each cell (run_cell at lines 136-203) uses the template's default mode. The THINKING_MODES guard at line 33 only checks the caller's string, never what the model produces. The YAML block at lines 209-223 then writes the measured AL under thinking_on:, and the header at line 212 says "thinking_on: chat template default". That file becomes infx/golden_al_distribution/mimov2.6flash_mtp.yaml, which AgentX reads for thinking_on. Non-thinking AL usually differs from reasoning-trace AL, so synthetic acceptance in MiMo speculative recipes would be wrong and nothing would flag it. No golden curve exists on the base branch, so nothing is mislabelled there.
Verification: The guard at lines 27-30 (if [[ "$THINKING_MODES" != "on" ]]) only checks the caller's string. No chat_template_kwargs or enable_thinking is passed anywhere. The YAML block writes echo " thinking_on:" (line ~219) without checking anything. If the template defaults to non-thinking, the golden curve is recorded under thinking_on but measured with thinking off.
| if [[ ! -d "$MODEL_PATH" || -z "$(ls -A "$MODEL_PATH" 2>/dev/null)" ]]; then | ||
| if [[ ! -w "$(dirname "$MODEL_PATH")" ]]; then | ||
| echo "CRITICAL: $MODEL_PATH is empty and $(dirname "$MODEL_PATH") is not writable." | ||
| echo "The cluster's models.entries names this checkpoint but the weights were never staged." | ||
| exit 1 | ||
| fi | ||
| echo "=== $MODEL_PATH is empty; downloading $MODEL (first run only) ===" | ||
| hf download "$MODEL" --local-dir "$MODEL_PATH" | ||
| fi |
There was a problem hiding this comment.
🟡 (optional) If the first MiMo checkpoint download is interrupted, every later collection run reuses the partial checkpoint and fails, and no run ever retries the download. Lines 47-55 run hf download only when $MODEL_PATH is missing or empty. They also ignore its exit status. Once hf download starts, its .cache/huggingface metadata makes the directory non-empty, so later runs skip the download. Fix: when the checkpoint is not staged, always run hf download (it resumes and skips finished files) and exit when it fails. That way a partial checkpoint is never served.
Why this was flagged
MiMo-V2.6-Flash-RL is not in the b300-dsxe models.entries (configs/runners.yaml:515-535). resolve_model (infx/launch/drivers/script.py:47-53) therefore points MODEL_PATH at writable-models/, and the guard at mimov2.6flash_fp4_b300_sglang.sh:47 is the only thing that fills it. A first run whose hf download (line 54) stops early leaves files behind. Its exit status is never checked, and the script has no set -e. Once hf download --local-dir starts, it writes .cache/huggingface/download/ inside the directory. From then on ls -A is non-empty and every later run skips the download. If config.json is missing, the python at lines 57-60 fails and MTP_LAYERS is empty. If config.json is present but shards are missing, each sglang.launch_server fails. Either way the state persists until someone deletes /data/home/sa-gha-runner/models/ by hand.
Verification: The trigger is a first-run hf download that stops partway while it fills the persistent writable-models directory. Line 54 ignores its exit status, and line 21 is only set -o pipefail, with no -e. After an interrupted run ls -A is non-empty and every later run skips the download. Every run then fails until someone deletes the directory by hand.
| # MiMo-V2.6-Flash B300 SGLang SPEED-Bench AL matrix collector for the checkpoint's native MTP. | ||
| # | ||
| # For each MTP depth, measure the REAL acceptance length (AL) on one SPEED-Bench category and | ||
| # emit a YAML matrix in the golden_al_distribution shape. The server matches the AgentX | ||
| # serving setup (TP4, fa4, text-only, mimo parsers). | ||
| # | ||
| # SGLang serves MiMoV2 MTP as multi-layer EAGLE: one bundled MTP layer per draft step, linear | ||
| # chain (topk 1), so MTP_LIST level N runs N steps with N + 1 draft tokens and stops at the | ||
| # checkpoint's num_nextn_predict_layers. | ||
| # SGLang's speed-bench loader applies the chat template client-side without kwargs, so every | ||
| # cell runs the template default (thinking on), which is the mode AgentX selects. | ||
| # | ||
| # AL is SGLang's accept_length (accepted tokens per verify step, bonus token included, | ||
| # cumulative since server start), the same quantity as vLLM's 1 + accepted/drafts. Each cell | ||
| # restarts the server, so it covers one cell only. | ||
| # | ||
| # Dispatch this collector through speedbench-al.yml with framework=sglang. |
There was a problem hiding this comment.
🟡 (optional) Maintainers get a new script that opens with a 17-line descriptive header, which AGENTS.md's mandatory comment rules forbid. Lines 3-19 describe what the file does, how SGLang serves MiMoV2 MTP, what AL means, and how to dispatch the script. Fix: delete the header block. Move any technical reason that a line needs, such as why --speculative-num-draft-tokens is mtp + 1 or why only thinking_on is accepted, into one short comment on that line.
Why this was flagged
The diff adds the new file inferencex-e2e/benchmarks/single_node/speedbench/mimov2.6flash_fp4_b300_sglang.sh with a block comment at lines 3-19. That block summarises the collector, the SGLang MTP mapping, the AL definition and the dispatch path. AGENTS.md lines 60-66 ("Code comments (mandatory)") say "Never add broad, overarching comments at the top of a file" and "Do not describe what the file, topology, or config is". Comments may only explain a specific line. The sibling musespark_fp4_b300_sglang.sh carries the same kind of header. That shows earlier drift, not permission, and the rule applies to every new file. Without a fix, the merged file breaks the repo's mandatory convention and adds descriptive prose that will go stale as the flags change.
Verification: Lines 3-19 of inferencex-e2e/benchmarks/single_node/speedbench/mimov2.6flash_fp4_b300_sglang.sh are a 17-line comment block placed before any code. AGENTS.md line 64 says: "No header comments. Do not describe what the file, topology, or config is." This block does what the rule forbids. Nothing breaks at runtime; the only effect is that a repository rule is broken.
…/ feat(speedbench):MiMo-V2.6-Flash AL 采集改用 vLLM DFlash Replaces the SGLang MTP collector with a vLLM v0.31.0 collector for the checkpoint's BF16 dflash/ drafter: draft lengths 1-7, thinking off and on via enable_thinking, for the golden curve mimov2.6flash_dflash.yaml. 用 vLLM v0.31.0 采集脚本替换 SGLang MTP 采集脚本,测量检查点自带的 BF16 dflash/ 草稿模型:草稿长度 1-7,通过 enable_thinking 分别关闭和 开启思考,用于 golden 曲线 mimov2.6flash_dflash.yaml。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
c06b5f6 to
f211636
Compare
…eat/mimov2.6flash-speedbench-collector Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BGggnGqhy9dML7NM9ow3Fm
…peedbench):加固 MiMo-V2.6-Flash vLLM AL 采集脚本 Run the benchmark client through vLLM's Python entrypoint so the Rust client delegation cannot reject --speed-bench-output-len, --save-detailed or --chat-template-kwargs, preflight those flags before any server start, log a failing client exit per cell, and fail the job when no cell yields an AL value. Mirrors the MiniMax-M3.1-Flash collector. 中文:基准客户端改走 vLLM 的 Python 入口,避免 Rust 客户端拒绝 --speed-bench-output-len、--save-detailed 与 --chat-template-kwargs; 在启动任何服务前预检这些参数,逐单元记录客户端异常退出,并在没有任何 单元得到 AL 值时让作业失败。做法与 MiniMax-M3.1-Flash 采集脚本一致。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BGggnGqhy9dML7NM9ow3Fm
… is taken / fix(speedbench):8888 被占用时 MiMo AL 采集改用空闲端口 Run 41345416194 lost every cell to "Address already in use" on dsxe-sa-b300-prd0-gpu-00: a process outside the Slurm job held port 8888 in the shared network namespace. Report the holder and fall back to a free port before the first server start. 中文:运行 41345416194 在 dsxe-sa-b300-prd0-gpu-00 上所有单元都因 "Address already in use" 失败:Slurm 作业之外的进程在共享网络命名空间中 占用了 8888 端口。现在在首次启动服务前报告占用者,并改用空闲端口。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BGggnGqhy9dML7NM9ow3Fm
…t(golden-al):新增 MiMo-V2.6-Flash DFlash 黄金 AL 曲线 Commit infx/golden_al_distribution/mimov2.6flash_dflash.yaml from SPEED-Bench coding run 41346734342 (B300, vLLM v0.31.0, BF16 dflash/ drafter, TP4, temperature 1.0, top_p 0.95, output_len 4096). Every one of the 14 cells completed 80/80 requests with no failures; thinking-on outputs all carry reasoning tags and thinking-off outputs none. Register the curve in both READMEs and the curve-name test. 中文:根据 SPEED-Bench coding 运行 41346734342(B300、vLLM v0.31.0、 BF16 dflash/ 草稿模型、TP4、temperature 1.0、top_p 0.95、output_len 4096) 提交 infx/golden_al_distribution/mimov2.6flash_dflash.yaml。14 个单元均 完成 80/80 请求且无失败;thinking-on 输出全部带推理标签,thinking-off 输出均不带。同时在中英文 README 与曲线名测试中登记该曲线。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BGggnGqhy9dML7NM9ow3Fm
|
Generally most InferenceX submissions don't need to add changes to the infx package. On the off chance they do, generally the diff is small. Please prompt your agent to clean your PR to keep your diff to only necessary & minimal changes too. We have an increased code quality bar for changes to the infx package. 中文大多数 InferenceX 提交通常不需要修改 infx 包。即使确实需要,改动通常也很小。请让你的 agent 清理 PR,使改动只包含必要且最小的内容。infx 包的改动有更高的代码质量要求。 |
Summary
Adds a SPEED-Bench acceptance-length collector for XiaomiMiMo/MiMo-V2.6-Flash-RL's DFlash drafter on vLLM, and commits the golden curve it measured,
infx/golden_al_distribution/mimov2.6flash_dflash.yaml. AgentX needs this curve before any MiMo DFlash recipe (#4330 adds the non-speculative SGLang and vLLM keys) can launch.What it measures:
benchmarks/single_node/speedbench/mimov2.6flash_fp4_b300_vllm.sh, dispatched throughspeedbench-al.ymlwithframework=vllm.dflash/subfolder (5 layers, BF16), served as shipped through--speculative-config '{"method": "dflash", ...}'with greedy drafting. This is the speculative path in vLLM's MiMo-V2.6-Flash-RL recipe.block_sizeis 8. The script rejects any other value before starting a server.--chat-template-kwargs(enable_thinking: false/true). The script refuses thinking-on kwargs that do not setenable_thinking: true, since the workflow default targets other models.vllm/vllm-openai:v0.31.0, TP4,mimoparsers,FULL_DECODE_ONLYCUDA graphs as in vLLM's DFlash recipe, prefix caching off.vllm bench serveto a Rust client that lacks the SPEED-Bench flags. Those flags are checked once before any server starts, and a run where no cell yields an AL fails instead of passing with an empty table. All three guards match the MiniMax-M3.1-Flash collector.Address already in useondsxe-sa-b300-prd0-gpu-00, where a process outside the Slurm job holds 8888.Why DFlash rather than the native MTP layers: vLLM v0.31.0 loads only the first of the checkpoint's 3 MTP layers and reuses it at every draft step, so an MTP curve would understate the model. DFlash is the drafter vLLM documents for this checkpoint.
No perf-changelog entry: no benchmark point changes.
Golden curve: from run 41346734342 on B300. All 14 cells completed 80/80 requests with no failures or empty outputs. Every thinking-on output carries reasoning tags and no thinking-off output does, so the mode switch took effect.
The curve is registered in both golden-curve READMEs and in the curve-name test. It sits close to the other DFlash-family curve, Muse Spark Open DFlash2 (thinking-on 1.85 to 4.05).
To re-collect, dispatch from this branch:
The checkpoint, including
dflash/, is now staged inb300-dsxe's writable model root.AI model disclosure
claude-opus-5-5), via Claude Code. One Claude Haiku subagent extracted lines from a CI log.PR checklist and change type
Type of Change
Checklist
python -m infx.matrix.changed --base origin/mainlists affected config keys, I have appended one new entry covering them to the physical end ofinferencex-e2e/perf-changelog.yaml; if it lists none, I have added none. I have not edited historical entriesinferencex-e2e/perf-changelog.yamlentry, it carries exactly one primary sweep label (a maintainer applies it on fork PRs):full-sweep-fail-fast(recommended),full-sweep-enabled, ornon-canary-full-sweep-enabled. Optional modifiersall-evals,evals-only, andagentx-fastrequire a primary label; the last two block reuse while applied.OWNER/MEMBER/COLLABORATOR) has commented/use <run_id>(or the legacy/reuse-sweep-run) on this PR. Do this only once there is a final full sweep that is all green with evals passing, since after this comment the primary sweep label will no longer automatically kick off new sweeps. Remove and re-add the primary sweep label to force a new sweep.中文
为 XiaomiMiMo/MiMo-V2.6-Flash-RL 自带的 DFlash 草稿模型新增基于 vLLM 的 SPEED-Bench 接受长度(AL)采集脚本,并提交实测得到的 golden 曲线
infx/golden_al_distribution/mimov2.6flash_dflash.yaml。MiMo 的 DFlash AgentX 配方必须先有这条曲线才能启动(#4330 新增了不带投机解码的 SGLang 与 vLLM 配置)。测量内容:
benchmarks/single_node/speedbench/mimov2.6flash_fp4_b300_vllm.sh,通过speedbench-al.yml(framework=vllm)调度。dflash/子目录(5 层,BF16),按原样通过--speculative-config '{"method": "dflash", ...}'加载,采用贪心草稿采样。这正是 vLLM 的 MiMo-V2.6-Flash-RL 配方 中的投机解码方式。block_size为 8。脚本会在启动服务前拒绝其他值。--chat-template-kwargs传入(enable_thinking: false/true)。若开启思考的 kwargs 未设置enable_thinking: true,脚本会拒绝运行,因为工作流的默认值面向其他模型。vllm/vllm-openai:v0.31.0、TP4、mimo解析器、与 vLLM DFlash 配方一致的FULL_DECODE_ONLYCUDA graph,关闭前缀缓存。vllm bench serve交给缺少 SPEED-Bench 参数的 Rust 客户端。这些参数会在启动任何服务前预检一次;若没有任何单元得到 AL,作业会失败,而不是以空表通过。三项防护均与 MiniMax-M3.1-Flash 采集脚本一致。dsxe-sa-b300-prd0-gpu-00上所有单元都因Address already in use失败,该节点上有 Slurm 作业之外的进程占用 8888。为何选 DFlash 而非自带 MTP 层: vLLM v0.31.0 只加载检查点 3 层 MTP 中的第一层,并在每个草稿步骤重复使用,因此 MTP 曲线会低估模型能力。DFlash 是 vLLM 为该检查点给出的草稿模型。
无需 perf-changelog 条目: 不改变任何基准测试点。
黄金曲线: 来自 B300 上的运行 41346734342。14 个单元均完成 80/80 请求,无失败、无空输出。thinking-on 输出全部带推理标签,thinking-off 输出均不带,说明思考开关生效。
该曲线已登记在中英文 golden 曲线 README 与曲线名测试中,与另一条 DFlash 系曲线 Muse Spark Open DFlash2(thinking-on 1.85 至 4.05)接近。如需重新采集,可用上方英文部分的命令直接从本分支调度。检查点(含
dflash/)现已存放在b300-dsxe的可写模型目录中。AI 模型使用说明: Claude Opus 5.5(
claude-opus-5-5),通过 Claude Code 使用,另有一个 Claude Haiku 子 agent 从 CI 日志中提取行;负责 SGLang 与 vLLM 源码审阅、采集脚本编写、本地验证、CI 监控与修复以及 PR 准备。改动类型: 新功能。
🤖 Generated with Claude Code
https://claude.ai/code/session_01BGggnGqhy9dML7NM9ow3Fm