Skip to content

[Dashboard] 外部 Ascend 任务原生视图全为空:补齐数据接入并区分未接入与后端不支持 #356

Closed

Description

@jiangkuaixue123

现象

PR #319 合并后,在真实 Ascend NPU 优化任务中部署 Dashboard,原生页面的概览、候选详情、性能趋势、时间轴、技术事件和优化过程复盘仍全部显示“未记录”,六个工作流程阶段全部显示“不适用”。用户无法判断是任务没有执行、数据未接入,还是该后端不受支持。

核对版本:e843b9d31cb86e1fd12d00890c89798b0bedd1fe(#319 合并提交)。真实任务使用自定义四档并发 TPOT、两轮独立候选服务和独立 GSM8K 精度验证协议;已有性能、精度、候选提交和服务状态证据。

这不是已经证明的原生渲染器回归。 当前部署由调用方额外添加一个读取真实 NPU JSON 的展示区,但没有将这些记录映射进原生 campaign/run/事件数据模型。重新部署合并版本没有改变这一事实。

已核实的直接原因与产品边界

  1. 调用方接入未完成:原生 Dashboard 使用的 campaign 只有以下配置,没有 candidates、rounds 或优化日志;额外 NPU 区域的数据不会自动进入原生视图。

    {"schema_version":1,"campaign_id":"DSV41-live-native-evidence","synthetic":false,"stages_declared":[]}
  2. 调用方阶段配置错误:显式空的 stages_declared 使全部阶段按照现有契约显示 not_applicable。这不代表真实任务的诊断、知识检索、执行和验证不适用。不能把该配置错误归因于 NPU 不支持。

  3. 确实存在的后端支持边界: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、阶段声明缺失/显式为空、后端不支持、部分证据和正在写入记录的测试;验证页面清楚指出原因。
  • 在完整接入前明确标注“适配未完成”,不能将独立附加展示区描述为完整原生任务看板交付。

复现方式

  1. 使用上述版本,创建只包含上方 campaign.json 的目录。
  2. 执行 inferrsi dashboard --input <CAMPAIGN> --live --port 8765。
  3. 查看原生界面和 /api/state:候选与轮次缺失,所有阶段为不适用。其他目录中存在真实实验 JSON,或调用方另设展示区,都不会自动补全原生数据。
  4. 独立检查 _environment_signature 的非 CUDA 分支,可确认跨 run 汇总的后端限制。该检查与步骤 1–3 的空输入原因应分别记录。

关联与授权

关联 #314(Dashboard 总体)、#319(已合并实现)、#345(workflow/耗时/测试进度)、#344(知识命中归因)。

本 issue 聚焦真实外部 NPU 任务的原生数据接入、支持边界和空状态解释,避免重复承担 #344/#345 的全部范围。用户明确要求提交此现象;本次仅创建 issue,未指定实现负责人,也未授权合并或关闭。

Activity

  1. amy-why-3459 commented on Nov 5, 2026

    @amy-why-3459
    Collaborator

    感谢整理,现象、直接原因和产品边界分得很清楚。我对照 main 上的 src/inferrsi/harness/dashboard_data.py 核对了一下,补充几点供实现时参考:

    1. 阶段状态的来源已确认:load_dashboard 末尾(约 L895–L910)的逻辑是:有事件的阶段为 recorded;stages_declared 是列表且阶段不在其中时为 not_applicable;否则为 stage_not_recorded。所以显式写 "stages_declared": [] 会把六个阶段全部标成不适用,省略该字段则会显示 stage_not_recorded。建议在文档和页面提示里明确这个区别,并考虑对“显式空列表 + 实际存在事件/候选”的情况给出告警,而不是静默标成不适用。

    2. 一个额外的误导点:同一函数里 comparison_state 默认是 "comparable",只有在至少两个带 improvement_pct 的 run 时才会被改成 unverified / incompatible(约 L851–L856)。因此在 candidates: [] 的空 campaign 下,/api/state 仍返回 comparison_state: "comparable",这和你贴出的输出一致。建议把“没有可比较的数据”单独作为一个状态(例如 no_data),否则概览会给人“已核验可比”的印象。

    3. 非 CUDA 后端:_environment_signature(约 L490–L492)在 backend != "cuda" 时直接返回 None,进入比较后会让 comparison_state 变成 unverified,最佳提升被清空。这正好对应 issue 里的“后端比较不支持”,建议在 UI 上把它和“数据未接入”分开展示,同时保留候选、事件、证据等通用区域的正常显示。

    4. 关于外部记录导入:建议先定义一个最小适配契约(campaign / candidate / run 目录结构,以及 rounds、事件、状态文件各自需要的字段),再用这次 Ascend 任务的真实记录做示例和测试夹具。C1/C4/C16/C32 多档并发和两轮协议,可能需要在 run 级别显式记录协议标识,避免和通用的 improvement_pct 判据混用。

    另外想确认一下:这次真实任务的候选和轮次数据,目前是什么格式(例如每个候选一个 JSON,还是一个汇总文件)?方便的话贴一份脱敏样例,这样适配契约更容易对齐。

  2. added
    area:workbenchCLI workbench: profile, A/B loop, quality gates, evidence reports
    kind:bugDefect report: an observable symptom that differs from expected behavior
    on Nov 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:workbenchCLI workbench: profile, A/B loop, quality gates, evidence reportskind:bugDefect report: an observable symptom that differs from expected behavior

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions