[Ingest] guard against coverage regressions when a narrow sweep supersedes a published curve / 防止窄矩阵 sweep 替换已发布曲线导致覆盖面退化
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 50/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bastante claro
- Estado de actividad
- Activo
- Stack tecnológico
- typescript
Línea de trabajo
Start by tracing the ingest pre-commit path and the published-curve data in the database; packages/db/src/etl/run-overrides.ts shows the current post-publication remedy. Define the coverage comparison for arms, per-arm concurrency spans, and point counts, then validate it against the H200 example so narrower incoming coverage is surfaced before publication.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Summary
A sweep run that validates a code change is usually deliberately narrow. When such a run is ingested
it becomes the latest date for its hardware, and the dashboard renders the latest date — so a narrow
validation sweep can silently replace a denser published curve. Nothing in the pipeline compares the
incoming coverage against what is already published, so every automated signal stays green.
This happened three times on 2026-09-19, from three PRs merged the same morning by sweep-reuse:
| PR | run | hardware |
|---|---|---|
| SemiAnalysisAI/InferenceX#3206 | 35165441471 |
GB300 aggregated |
| SemiAnalysisAI/InferenceX#3047 | 34819564154 |
GB300 disaggregated |
| SemiAnalysisAI/InferenceX#3053 | 34819578354 |
H200 |
It was first reported externally — someone at a lab asked why the GB300 Kimi-K3 numbers looked
wrong.
Worked example (fully measured)
H200 Kimi-K3, before and after the 34819578354 ingest:
| date | arms | points |
|---|---|---|
| 2026-09-13 | TP16/EP32 offload=off c1–c12; TP8/EP32 offload=off c1–c16; TP8/EP32 offload=on c8–c32 |
35 |
| 2026-09-19 | TP8/EP32 offload=off c1–c16 |
12 |
The published curve lost two arms and the pareto front was truncated at c16 instead of c32. The
surviving arm's values match the 2026-09-13 arm it duplicates to within ±6% at every shared
concurrency, so this was purely a coverage regression, not a measurement problem. Purged in #1183.
Why nothing caught it
- The check exists only as prose. The InferenceX PR policy says to compare a candidate's points
and interactivity span against the prior curve and establish replace-versus-append intent before
merging. There is no gate, so skipping it is silent. - Every automated signal was green. The sweeps concluded
success, the reuse gate passed, merge
checks passed. The pipeline only asks whether the declared matrix passed — never whether the
incoming coverage is narrower than what it supersedes. - Narrow was correct for those PRs. All three were recipe/code changes enabling measured power.
A small matrix is the right way to validate that cheaply. The problem is that ingest treats a
validation sweep identically to a data-refresh sweep. - The consequence is invisible from the PR. Nothing in the InferenceX PR shows what the
published curve currently looks like, so catching this requires manually opening the dashboard
before and after — for each merge. - Latest-date-per-hardware rendering. This display rule is what converts "a small new date" into
"the denser curve disappears". Nobody is thinking about it at merge time.
Proposed check
Before ingest commits a run, compare its coverage against the currently published set for the same
(model, hardware):
- arms — the set of distinct configurations (tp/ep/dp-attention/offload/disagg topology)
- concurrency span — min and max concurrency per arm
- point count per arm
If the incoming set covers fewer arms, or narrows an arm's concurrency span, treat it as a
coverage regression. Surface it rather than silently publishing: fail the ingest with a clear
diff, or ingest but flag the run and require an explicit replaces-published-curve acknowledgement
on the PR.
A point-count floor alone is not sufficient. The proposal circulating in Slack is "at least 5 points
on the pareto"; the H200 case had 12 points and still hid a 35-point set. The quantity that matters
is coverage relative to what is already published, not an absolute count.
Notes
- The comparison should be computable entirely from data already in the DB plus the incoming run, so
it can run pre-commit inside ingest rather than as a post-hoc dashboard check. PURGED_RUNSinpackages/db/src/etl/run-overrides.tsis the current remedy and it works, but it
is applied after the regression has been published and noticed by a reader.
中文说明
用于验证代码改动的 sweep 通常是有意收窄的。这类运行一旦导入,就会成为对应硬件的最新日期,而
仪表板按最新日期渲染 —— 于是一个窄的验证性 sweep 会无声地替换掉更密的已发布曲线。流水线中没有
任何环节会把即将导入的覆盖面与已发布的曲线作比较,因此所有自动信号都是绿的。
2026-09-19 当天发生了三次,来自同一个上午通过 sweep-reuse 合并的三个 PR(见上表)。问题最先由
外部反馈发现 —— 有实验室的人询问 GB300 的 Kimi-K3 数据为何异常。
实测案例: H200 Kimi-K3 在 34819578354 导入前后,已发布曲线从三条支路共 35 个点缩减为一条
支路 12 个点,pareto 前沿从 c32 被截断到 c16。存活支路与它重复的 2026-09-13 支路在每个共享并发
点上数值差异均在 ±6% 以内,因此这纯粹是覆盖面退化,而非测量问题。已在 #1183 中清除。
为何没被发现: 该检查只存在于策略文档的散文里,没有对应闸门;所有自动信号均为绿色,流水线
只检查"声明的矩阵是否跑通",从不比较覆盖面;窄矩阵对那三个 PR 而言是正确且经济的做法,问题在于
导入环节把验证性 sweep 与数据刷新 sweep 一视同仁;后果在 PR 页面上完全不可见,发现它需要人工在
每次合并前后打开仪表板对比;而"每个硬件取最新日期"的渲染规则,正是把"多了一个小日期"变成"更密
的曲线消失"的那一环。
建议的检查: 在导入落库前,将该运行的覆盖面与同一 (model, hardware) 当前已发布的集合作
比较 —— 支路集合(tp/ep/dp-attention/offload/分离拓扑)、每条支路的并发跨度、以及每条支路的点数。
若支路变少或某条支路的并发跨度收窄,即判定为覆盖面退化,应当显式暴露而非静默发布:或让导入
失败并给出清晰的差异,或允许导入但标记该运行,并要求 PR 上给出明确的"替换已发布曲线"确认。
仅设点数下限并不足够。Slack 中流传的方案是"pareto 上至少 5 个点",而 H200 那条有 12 个点,照样
遮蔽了 35 个点的集合。真正重要的量是相对于已发布内容的覆盖面,而不是绝对点数。
- Lenguaje dominante
- TypeScript
- Estrellas
- 49
- Forks
- 22
- Merge medio
- 7 h 50 min
- PR fusionados (30 d)
- 243
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Sin guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de SemiAnalysisAI/InferenceX-app
-
Dificultad 3/5 1-2 días Aptitud para principiantes 52/100
SemiAnalysisAI/InferenceX-app#1500 ·
Los mantenedores suelen responder en 1 día
-
Historical view redesign / 历史数据视图重新设计Posiblemente ocupada @functionstackx la tomó hace 180 días. Abiertodiff/hard p1
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
SemiAnalysisAI/InferenceX-app#273 · 5 comentarios ·
Los mantenedores suelen responder en 1 día
-
Reproduce drawer / 复现抽屉Abiertodiff/hard p2
Dificultad 5/5 Más de una semana Aptitud para principiantes 45/100
SemiAnalysisAI/InferenceX-app#270 · 5 comentarios ·
Los mantenedores suelen responder en 1 día
Todos los issues de SemiAnalysisAI/InferenceX-app
Issues similares
-
Report: Mooz Dance SDAbiertocheck:passed streams:remove
Dificultad 1/5 Menos de una hora Aptitud para principiantes 62/100
Los mantenedores suelen responder en 1 día
-
bug needs triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
actions/setup-node#1659 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
vercel-labs/wterm#267 ·
Los mantenedores suelen responder en 2 días
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
microsoft/AI-Engineering-Coach#355 · 1 reacción ·
Los mantenedores suelen responder en 4 días
-
level1 nsoc26
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
GauravKarakoti/SecureFlow#1501 ·
Los mantenedores suelen responder en 1 día