Skip to content

fix(evals): preserve single-node DP attention metadata / 修复单节点评测的 DP attention 元数据 - #2854

Open
Oseltamivir wants to merge 1 commit into
mainfrom
fix/preserve-single-node-eval-dpa
Open

fix(evals): preserve single-node DP attention metadata / 修复单节点评测的 DP attention 元数据#2854
Oseltamivir wants to merge 1 commit into
mainfrom
fix/preserve-single-node-eval-dpa

Conversation

@Oseltamivir

@Oseltamivir Oseltamivir commented Sep 7, 2026

Copy link
Copy Markdown
Collaborator

Problem / 问题

Single-node evals with DP_ATTENTION=true were recorded as false in meta_env.json and the collected eval rows. _write_lm_eval_meta_json unconditionally called the disaggregated-topology bridge, whose missing prefill/decode DP variables default to false and overwrite the single-node setting. In #2821, the eval server and matching AgentX throughput artifact report DP attention enabled, while eval_results_all reports it disabled. The app uses these metadata fields to identify the evaluated configuration.

启用 DP_ATTENTION=true 的单节点评测,在 meta_env.json 和聚合评测记录中被错误标记为 false_write_lm_eval_meta_json 无条件调用分离式拓扑转换函数;缺失的 prefill/decode DP 变量默认为 false,覆盖了单节点设置。在 #2821 中,评测服务端和对应的 AgentX 吞吐工件都表明 DP attention 已启用,但 eval_results_all 却标记为禁用。应用会使用这些元数据字段确定评测对应的配置。

Change / 修改

Only bridge prefill/decode topology when IS_MULTINODE=true. Single-node eval metadata preserves DP_ATTENTION, including the existing defaults for the prefill/decode fields. Add regression coverage through the real summary writer for enabled/disabled single-node DP attention and asymmetric multinode DP attention, and run the dispatch tests in CI. Update the English and Chinese ingestion guide.

仅在 IS_MULTINODE=true 时转换 prefill/decode 拓扑。单节点评测元数据保留 DP_ATTENTION,包括 prefill/decode 字段原有的默认取值。通过真实的摘要写入函数,覆盖单节点 DP attention 启用/禁用及多节点两侧设置不同的回归场景,并将评测调度测试加入 CI。同步更新中英文摄取指南。

Validation / 验证

  • The enabled-DP regression fails against the original writer (False is True) and passes with the fix.

  • All 340 tests in the updated Test Changelog Gate workflow command pass locally, including eval dispatch, batching, collection, reuse, and changelog validation.

  • Bash syntax, workflow YAML parsing, and git diff --check pass.

  • This changes metadata serialization after evaluation; no recipe, serving command, or performance setting changes. No GPU sweep was run.

  • 启用 DP 的回归测试在原始写入器上失败(False is True),修复后通过。

  • 更新后的 Test Changelog Gate 工作流命令中的全部 340 项测试在本地通过,涵盖评测调度、批量评测、收集、复用和 changelog 校验。

  • Bash 语法、工作流 YAML 解析和 git diff --check 均通过。

  • 本次仅修复评测后的元数据序列化,不修改 recipe、服务启动命令或性能参数;未运行 GPU sweep。

Historical results / 历史结果

The faulty bridge was introduced in #2309 and predates #2821. This fix affects future metadata generation; it does not repair previously uploaded artifacts or persisted database rows. A separate repair must verify original job/server evidence, correct affected metadata, regenerate aggregates, and re-ingest the results. Do not treat #2821's existing eval configuration metadata as repaired by this PR.

错误的转换逻辑由 #2309 引入,早于 #2821。本修复作用于后续元数据生成,不会修复已经上传的工件或已有数据库记录。历史数据需要单独核实原始任务与服务端证据,更正受影响的元数据、重新生成聚合结果并重新摄取。本 PR 不代表 #2821 现有评测配置元数据已经修复。


Note

Low Risk
Metadata serialization only after eval runs; no serving, recipe, or runtime behavior changes. Wrong topology labels in old uploads remain until a separate re-ingest.

Overview
Fixes incorrect dp_attention (and matching prefill/decode fields) on single-node evals when DP_ATTENTION=true. _write_lm_eval_meta_json in benchmark_lib.sh no longer always runs bridge_disagg_eval_metadata; that bridge runs only when IS_MULTINODE=true, so missing per-phase DP env vars no longer default to false and overwrite the single-node setting in meta_env.json and downstream eval_results_all rows.

Adds regression tests via the real summary writer (single-node on/off, asymmetric multinode) in test_run_eval_dispatch.py, wires that module into the Test Changelog Gate workflow, and documents the writer behavior plus that historical artifacts and DB rows are not backfilled in the English and Chinese ingestion guides.

Reviewed by Cursor Bugbot for commit 56ba986. Bugbot is set up for automated code reviews on this repo. Configure here.

修复单节点评测元数据中的 DP attention:仅对多节点任务执行 prefill/decode 拓扑转换,补充回归测试、CI 覆盖和中英文历史数据修复说明。
@github-actions

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

@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 reported findings, I also checked whether the AMD disaggregated pipeline (submit.sh, job.slurm) fails to set IS_MULTINODE before this gate runs — it does export IS_MULTINODE (defaulting to false) in both places, so that path is not silently skipped by the new guard.

Extended reasoning...

This is a narrow, well-tested fix to benchmarks/benchmark_lib.sh that gates bridge_disagg_eval_metadata behind IS_MULTINODE=="true" so single-node jobs' real DP_ATTENTION value isn't overwritten by the disagg bridge's false defaults. No bugs were reported by the bug hunter. I independently verified the ruled-out concern about the AMD disagg pipeline: benchmarks/multi_node/amd_utils/submit.sh:164 and job.slurm:335 both export IS_MULTINODE (with a false default) unconditionally, so the new guard does not silently skip the bridge for that pipeline the way the ruled-out note worried about. Given no findings, no unresolved third-party objections in the timeline, and my own confirmation of the one substantive edge case, I'm using the narrow ruled-out-note exception to add this one concrete piece of information beyond the inline (empty) findings list, rather than a full approve/defer verdict body.

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

Labels

None yet

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

1 participant