Repository navigation
Description
现象
PR #319 合并后,在真实 Ascend NPU 优化任务中部署 Dashboard,原生页面的概览、候选详情、性能趋势、时间轴、技术事件和优化过程复盘仍全部显示“未记录”,六个工作流程阶段全部显示“不适用”。用户无法判断是任务没有执行、数据未接入,还是该后端不受支持。
核对版本:e843b9d31cb86e1fd12d00890c89798b0bedd1fe(#319 合并提交)。真实任务使用自定义四档并发 TPOT、两轮独立候选服务和独立 GSM8K 精度验证协议;已有性能、精度、候选提交和服务状态证据。
这不是已经证明的原生渲染器回归。 当前部署由调用方额外添加一个读取真实 NPU JSON 的展示区,但没有将这些记录映射进原生 campaign/run/事件数据模型。重新部署合并版本没有改变这一事实。
已核实的直接原因与产品边界
-
调用方接入未完成:原生 Dashboard 使用的 campaign 只有以下配置,没有 candidates、rounds 或优化日志;额外 NPU 区域的数据不会自动进入原生视图。
{"schema_version":1,"campaign_id":"DSV41-live-native-evidence","synthetic":false,"stages_declared":[]} -
调用方阶段配置错误:显式空的
stages_declared使全部阶段按照现有契约显示not_applicable。这不代表真实任务的诊断、知识检索、执行和验证不适用。不能把该配置错误归因于 NPU 不支持。 -
确实存在的后端支持边界:
src/inferrsi/harness/dashboard_data.py::_environment_signature对backend != "cuda"返回None;docs/dashboard.md明确说明其他设备后端暂不参与跨 run 比较。Ascend 的可比性判定及本任务四档、两轮协议尚未接入原生汇总图。该限制不等于候选列表、事件和知识记录等通用区域不能展示。
实际 /api/state 的关键字段:
{
"candidates": [],
"rounds": null,
"rounds_state": "missing",
"overview": {
"comparison_state": "comparable",
"best_improvement_pct": null,
"target_improvement_pct": null,
"target_gap_pct": null
},
"stages": [
{"name":"diagnosis","state":"not_applicable"},
{"name":"knowledge","state":"not_applicable"},
{"name":"search","state":"not_applicable"},
{"name":"execution","state":"not_applicable"},
{"name":"validation","state":"not_applicable"},
{"name":"review","state":"not_applicable"}
],
"story": {"state":"not_recorded","versions":[]},
"chart_note": "No measured candidate results recorded.",
"temporal_note": "No timestamped events recorded; a time axis cannot be drawn."
}期望行为与建议范围
- 明确区分“数据源未接入/空 campaign”“字段缺失”“阶段明确不适用”“后端比较不支持”,给出可操作的接入提示,避免整页空白被误解为任务没有结果。
- 为已有外部实验记录提供明确的导入或适配契约,并给出 Ascend 真实记录示例:候选、轮次、服务状态、指标、精度、时间事件和已有知识检索记录进入原生视图。
- 通用候选/事件/证据视图可独立展示;不能因跨 run 性能比较暂不支持就隐藏全部可用记录。
- 评估并实现 Ascend 环境身份与可比性验证,保留硬件、软件、模型、工作负载和源版本边界;不要伪装为 CUDA 或直接绕过检查。
- 支持明确展示 C1/C4/C16/C32 独立指标和两轮候选结果,区分单轮值、两轮聚合、性能 verdict 与精度 verdict;不能混合不同协议或未经验证地沿用通用 improvement 判据。
- 正确接入已有阶段记录;未知显示未知,不通过空阶段列表将实际工作标成不适用。未保存的历史上下文或推理过程不得补造。
- 增加空 campaign、阶段声明缺失/显式为空、后端不支持、部分证据和正在写入记录的测试;验证页面清楚指出原因。
- 在完整接入前明确标注“适配未完成”,不能将独立附加展示区描述为完整原生任务看板交付。
复现方式
- 使用上述版本,创建只包含上方
campaign.json的目录。 - 执行
inferrsi dashboard --input <CAMPAIGN> --live --port 8765。 - 查看原生界面和
/api/state:候选与轮次缺失,所有阶段为不适用。其他目录中存在真实实验 JSON,或调用方另设展示区,都不会自动补全原生数据。 - 独立检查
_environment_signature的非 CUDA 分支,可确认跨 run 汇总的后端限制。该检查与步骤 1–3 的空输入原因应分别记录。
关联与授权
关联 #314(Dashboard 总体)、#319(已合并实现)、#345(workflow/耗时/测试进度)、#344(知识命中归因)。
本 issue 聚焦真实外部 NPU 任务的原生数据接入、支持边界和空状态解释,避免重复承担 #344/#345 的全部范围。用户明确要求提交此现象;本次仅创建 issue,未指定实现负责人,也未授权合并或关闭。
Activity
amy-why-3459 commentedon Nov 5, 2026
感谢整理,现象、直接原因和产品边界分得很清楚。我对照 main 上的
src/inferrsi/harness/dashboard_data.py核对了一下,补充几点供实现时参考:阶段状态的来源已确认:
load_dashboard末尾(约 L895–L910)的逻辑是:有事件的阶段为recorded;stages_declared是列表且阶段不在其中时为not_applicable;否则为stage_not_recorded。所以显式写"stages_declared": []会把六个阶段全部标成不适用,省略该字段则会显示stage_not_recorded。建议在文档和页面提示里明确这个区别,并考虑对“显式空列表 + 实际存在事件/候选”的情况给出告警,而不是静默标成不适用。一个额外的误导点:同一函数里
comparison_state默认是"comparable",只有在至少两个带improvement_pct的 run 时才会被改成unverified/incompatible(约 L851–L856)。因此在candidates: []的空 campaign 下,/api/state仍返回comparison_state: "comparable",这和你贴出的输出一致。建议把“没有可比较的数据”单独作为一个状态(例如no_data),否则概览会给人“已核验可比”的印象。非 CUDA 后端:
_environment_signature(约 L490–L492)在backend != "cuda"时直接返回None,进入比较后会让comparison_state变成unverified,最佳提升被清空。这正好对应 issue 里的“后端比较不支持”,建议在 UI 上把它和“数据未接入”分开展示,同时保留候选、事件、证据等通用区域的正常显示。关于外部记录导入:建议先定义一个最小适配契约(campaign / candidate / run 目录结构,以及
rounds、事件、状态文件各自需要的字段),再用这次 Ascend 任务的真实记录做示例和测试夹具。C1/C4/C16/C32 多档并发和两轮协议,可能需要在 run 级别显式记录协议标识,避免和通用的improvement_pct判据混用。另外想确认一下:这次真实任务的候选和轮次数据,目前是什么格式(例如每个候选一个 JSON,还是一个汇总文件)?方便的话贴一份脱敏样例,这样适配契约更容易对齐。