Prhub

#46870 fix: remove stray duplicate from serving benchmark config

原始 PR 作者 cmiyai 合并时间 2026-08-03 16:34 文件变更 1 提交数 3 评论 3 代码增减 +5 / -0

执行摘要

修复 serving 基准配置 JSON 并加校验 hook

Issue #43537 指出 .buildkite/performance-benchmarks/tests/serving-tests.json 在 main 上是无效 JSON,jq . 报错 parse error: Objects must consist of key:value pairs at line 35, column 5,Python json.load 同样失败,导致默认 serving benchmark 配置无法被 run-performance-benchmarks.sh 读取。git blame 定位该问题由 PR #43262 引入。PR body 明确说明需要移除重复对象并增加校验守卫,确保未来配置变更能快速失败。

该 PR 值得快速阅读,是一个典型的 CI 防御性改进案例。重点在于:pre-commit hook 的作用域设计(files 正则限定目录)以及将 rev 固定为 commit hash 的做法,对于其他类似配置校验场景有参考价值。

讨论亮点

Review 中主要有两个讨论点:

  • hook 版本固定:维护者 hmellor 在评论中要求将 rev 由 tag v5.0.0 改为 commit hash,并给出建议值 3e8a8703264a2f4a69428a0aa4dcb512790b2c8c。该建议已被采纳,最终提交中已使用 commit hash。
  • PR 价值确认:reviewer wjabbour 在批准时指出「serving-tests 已在 PR 打开后修复,但 pre-commit 添加仍然有价值」,同时说明自己不是 maintainer,需要 maintainer 推动合入。

实现拆解

实现分为两个层面:

  1. 修复根源数据:在 .buildkite/performance-benchmarks/tests/serving-tests.json 中移除 serving_llama8B_tp1_sharegpt 后的重复 client_parameters 对象。该文件在最终合并时未出现在 diff 中,因为根据 reviewer wjabbour 的评论,此问题在 PR 打开后已被其他路径修复。

  2. 增加防御性校验:在 .pre-commit-config.yaml 中新增 pre-commit-hooks 仓库的 check-json hook,并通过 files 正则 ^\.buildkite/.*\.json$ 将检查范围限定在 .buildkite 目录下的 JSON 文件。提交时若这些文件存在语法错误,pre-commit 会直接失败,避免无效配置进入 main。

  3. 版本固定:根据维护者 hmellor 的 review 意见,将 hook 的 revv5.0.0 改为具体 commit hash 3e8a8703264a2f4a69428a0aa4dcb512790b2c8c,防止 tag 漂移导致行为不一致。

  4. 验证:PR body 中提及 jq .pre-commit run check-json --all-files 均通过。

文件 模块 状态 重要度
.pre-commit-config.yaml 配置校验 modified 3.31

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

评论区精华

pre-commit hook 的 rev 应使用 commit hash 而非 tag style

维护者 hmellor 评论要求将 rev 从 v5.0.0 改为具体 commit hash,并给出建议值 3e8a8703264a2f4a69428a0aa4dcb512790b2c8c。

结论:已采纳建议,最终提交中 rev 使用 commit hash。 · 已解决

PR 价值与 serving-tests 修复状态 other

reviewer wjabbour 指出 serving-tests 已在 PR 打开后修复,但 pre-commit 添加仍然有价值,并说明自己不是 maintainer。

结论:PR 被批准,hook 部分合入。 · 已解决

风险与影响

风险主要集中在配置层面:

  • pre-commit 行为变更:新增的 check-json hook 会在所有开发者本地提交时运行,若 .buildkite 下存在无效 JSON,会阻塞提交。但作用域被严格限定在 .buildkite/.*\.json$,且这些文件通常由 CI/Perf 团队维护,影响面可控。
  • 外部依赖版本固定rev 固定为 commit hash 而非 tag,避免了上游 hook 更新带来的不可控变化,但若该 commit 从上游仓库移除,可能导致 hook 拉取失败。不过 pre-commit-hooks 是主流仓库,该风险极低。
  • 无源码逻辑变更:不涉及运行时路径,回归风险几乎为零。

影响范围限定在 CI 与开发流程:

  • 对 CI:防止无效 JSON 基准配置进入 main,避免下游 benchmark 脚本解析失败。
  • 对开发者:提交涉及 .buildkite 下 JSON 文件时需要保证其合法性,但正常开发基本不受影响。
  • 对系统:无运行时影响,仅配置与流程改进。
CI 配置变更 依赖外部 hook 版本

关联 Issue

#43537 [CI/Perf] Invalid JSON in serving benchmark config

完整报告

参与讨论