已关闭
[Requirement|需求建议]: 新增接口:aclrtCacheLastTaskExtendInfo #377
guo-yanjun创建于  4月17日关闭于  4月17日
guo-yanjun成员
4月17日 创建

Thanks for sending an requirement! Please fill in the following template to help quickly solve your problem.

Backgroud(背景信息)

当前 Runtime 在模型捕获或模型运行实例构建场景下,缺少一个标准接口,用于将用户自定义的补充信息与“当前线程最近一次下发的任务”建立关联。

开发者在进行图调试、运行实例分析和 tracing 排查时,通常不仅需要看到 Runtime 默认输出的 task 基础信息,还需要知道该 task 对应的业务语义、阶段标识、调试标签或上下文说明。例如:

  1. 某个 task 属于哪一类业务阶段或算子阶段。
  2. 某个 task 是否是用户重点关注的关键路径任务。
  3. 某个 task 是否需要在后续调试 JSON 中携带额外说明信息,辅助问题复现和定位。

在没有统一接口的情况下,用户无法把这些自定义信息和 task 本身建立直接关联,只能依赖外部日志、额外标记或人工对照 tracing 结果进行分析。

因此,需要新增接口 aclrtCacheLastTaskExtendInfo,用于将用户传入的扩展信息缓存到当前线程最后下发的 task 上,并在后续通过 aclmdlRIDebugJsonPrint 导出调试信息时一并输出。

Origin(信息来源)

runtime

Benefit / Necessity (价值/作用)

  1. 提升运行时可观测性
    应用程序可在 task 下发后立即补充扩展信息,使 Runtime 导出的调试信息不仅包含系统字段,也包含业务侧关心的上下文内容。

  2. 提升问题定位效率
    在图执行链路较长、task 数量较多的场景下,开发者可基于扩展信息快速识别目标 task,减少 tracing 和 Debug JSON 的分析成本。

  3. 支持调试信息自描述
    用户可为关键 task 写入业务标签、阶段说明、调试标识等信息,使导出的 task 信息具备更好的自解释能力。

  4. 便于工具链联动
    扩展信息随 aclmdlRIDebugJsonPrint 一起导出后,可被 tracing 工具、自动分析脚本和可视化平台进一步消费,增强调试链路一致性。

  5. 满足运行实例场景的精细化标注需求
    在模型捕获或模型运行实例构建场景下,用户可以对关键 task 做细粒度标记,为后续性能分析、异常排查和业务关联提供依据。

典型场景包括:图捕获过程中为关键 task 打业务标签、模型运行实例构建时记录阶段说明信息、tracing 分析时关联业务事件与 Runtime task、导出 Debug JSON 辅助复杂问题定位等。

Design(设计方案)

1. 用户调用层

用户调用:

  • aclrtCacheLastTaskExtendInfo

接口用于将用户传入的扩展信息绑定到当前线程最近一次下发的 task。用户无需额外传入 task 句柄,也无需自行维护 task 与扩展信息的映射关系。

2. 参数校验层(api_error.cc)

在 ApiErrorDecorator::CacheLastTaskExtendInfo 中统一完成参数校验与裁剪处理:

  1. 校验 extendInfoPtr 非空。
  2. 校验 infoSize 大于 0。
  3. 当 infoSize 大于 4K 时,记录告警日志,并仅保留前 4K 字节作为有效缓存内容。

该层只负责接口输入合法性控制,不承担 task 定位和缓存逻辑。

3. API 实现层(ApiImpl)

在 ApiImpl::CacheLastTaskExtendInfo 中完成最近 task 的定位和扩展信息写入,核心流程如下:

  1. 获取当前线程记录的最近一次下发 stream 标识 lastStreamId。
  2. 获取当前 Context,并基于 Context 查询对应 stream。
  3. 校验 stream 与当前 Context 的归属关系,避免跨上下文误写。
  4. 通过 stream 获取所属 model。
  5. 将扩展信息缓存到该 model 下最近一次下发的 task 上。

该设计确保扩展信息与“当前线程最后下发 task”天然对齐,避免额外暴露复杂的 task 标识管理接口。

4. Task 扩展信息缓存层

在 model / task 相关对象中增加扩展信息缓存能力,用于保存最近 task 对应的 ExtendInfo。缓存内容用于后续 Debug JSON 导出,不影响 task 的调度与执行语义。

5. Debug JSON 导出层

在 graph dump / Debug JSON 导出路径中,若目标 task 上存在扩展信息,则新增 ExtendInfo 字段输出。

该层需要完成以下处理:

  1. 判断目标 task 是否存在已缓存扩展信息。
  2. 若存在,则在 JSON 中追加 ExtendInfo 字段。
  3. 对扩展信息中的引号、换行、反斜杠等特殊字符进行转义,保证导出的 JSON 格式合法。

这样可以保证用户通过 aclmdlRIDebugJsonPrint 导出结果时,能够直接看到与 task 对应的业务扩展信息。

6. 调用流程图

flowchart TD
    A[用户调用 aclrtCacheLastTaskExtendInfo] --> B[ACL封装层透传]
    B --> C[Runtime C API: rtCacheLastTaskExtendInfo]
    C --> D[ApiErrorDecorator 参数校验]
    D --> E[空指针检查 / infoSize检查 / 4K裁剪]
    E --> F[ApiImpl 获取当前 Context]
    F --> G[获取线程最近下发的 lastStreamId]
    G --> H[根据 Context 和 StreamId 定位目标 Stream]
    H --> I[校验 Stream 与 Context 归属关系]
    I --> J[获取目标 Model]
    J --> K[缓存 ExtendInfo 到最近 Task]
    K --> L[DebugJsonPrint 导出 ExtendInfo 字段]
    K --> M[rtModelTaskDisable / 模型清理]
    M --> N[清理缓存的 ExtendInfo]
likedislike
Gguo-yanjun成员
4月17日 添加了label:requirement
guo-yanjun成员
4月17日 评论:

/assign

likedislike
CANN-robotCANN-robot成员
4月17日 将 guo-yanjun 设为负责人
CANN-robotCANN-robot成员
4月17日 关闭了 issue
CANN-robotCANN-robot成员
4月17日 添加了label:resolved