已关闭
[Requirement|需求建议]: 支持 Kernel Launch 和模型执行的阻塞调试模式 #921
jiaxingru创建于  5 天前关闭于  1 天前
jiaxingru
jiaxingru成员
5 天前 创建

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

Backgroud(背景信息)

当前 Kernel Launch 和模型执行接口默认采用异步下发。算子执行发生异常时,错误通常在后续流同步或其他 Runtime 接口中返回,难以直接定位到实际失败的 Launch 接口。
需要提供 Launch Blocking 调试能力:开启后,受支持的 Kernel Launch 和模型执行接口在任务执行完成后再返回,使设备侧执行错误能够在对应接口处及时返回。
同时,部分复合算子存在任务依赖,强制逐次同步可能阻止后续任务下发并导致死锁。因此还需要提供流级模式控制和可嵌套的临时非阻塞区间。

Origin(信息来源)

runtime

Benefit / Necessity (价值/作用)

  • 将设备侧算子错误定位到对应的 Kernel Launch 或模型执行接口。
  • 提升算子开发、调试和问题定界效率。
  • 支持全局、流级和局部区间三级控制。
  • 为存在任务依赖的复合算子提供临时关闭阻塞的机制。
  • 默认关闭,不改变现有业务的异步执行行为。

Design(设计方案)

  1. 新增环境变量 ASCEND_RT_LAUNCH_BLOCKING:
  • 未配置、配置为空、配置为 0 或其他值:保持异步。
  • 配置为 1:受支持的 Kernel Launch 和模型执行接口等待任务完成后返回。
  • 环境变量在 Runtime 初始化时读取,不支持运行期间动态修改。
  • 开启时打印 EVENT 日志,提示性能和潜在死锁风险。
  1. 覆盖以下 ACL 接口:
  • aclrtLaunchKernel
  • aclrtLaunchKernelV2
  • aclrtLaunchKernelWithConfig
  • aclrtLaunchKernelWithHostArgs
  • aclrtLaunchKernelWithArgsArray
  • aclrtLaunchSIMTKernelWithHostArgs
  • aclrtLaunchSIMTKernelWithArgsArray
  • aclmdlRIExecuteAsync
    普通模型和 CaptureModel 均需在完整执行流程结束后,根据有效策略决定是否同步。Launch 提交失败时直接返回原始错
    误,不再执行同步。
  1. 扩展流属性 ACL_STREAM_LAUNCH_BLOCKING_MODE,支持三种模式:

    模式 行为
    ━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    CTRL_BY_ENV 由 ASCEND_RT_LAUNCH_BLOCKING 控制
    ───────────── ───────────────────────────────────
    NO_BLOCKING 当前流保持异步,覆盖环境变量
    ───────────── ───────────────────────────────────
    BLOCKING 当前流强制阻塞,覆盖环境变量
    默认流支持通过 aclrtSetStreamAttribute 和 aclrtGetStreamAttribute 设置、查询该属性。

  2. 新增临时非阻塞区间接口:

  • aclrtNoBlockingLaunchBegin(stream, 0)
  • aclrtNoBlockingLaunchEnd(stream, 0)
    要求:
  • 区间允许嵌套。
  • 非阻塞区间优先级高于流属性和环境变量。
  • 内层 End 不结束外层区间。
  • 最外层 End 退出区间后,如果流的有效策略为 blocking,则同步该流。
  • 未 Begin 直接 End 返回调用顺序错误。
  • flag 为保留参数,必须为 0。
    最终优先级为:
    Begin/End 非阻塞区间

    流级 NO_BLOCKING/BLOCKING
    ASCEND_RT_LAUNCH_BLOCKING

  1. 特殊流与兼容性约束:
  • 模型流不支持设置、查询 launch blocking 属性或调用 Begin/End,返回 FEATURE_NOT_SUPPORT。
  • Capture 期间的流不支持上述控制接口,返回 STREAM_CAPTURED。
  • Kernel Launch 和 Model Execute 遇到不支持 blocking 的特殊流时,不因本需求新增显式错误,仅不追加同步。
  • 非 Kernel 异步接口,如 memcpy、memset、event record/wait,不受该功能影响。
  • 不支持该特性的芯片形态返回 FEATURE_NOT_SUPPORT。
  • Tiny 形态采用最小桩实现,避免增加 runtime_v100.so 代码体积。
  1. 验收标准:
  • 环境变量关闭或未配置时,原有异步路径行为不变。
  • 环境变量开启时,目标接口阻塞到任务完成并正确返回执行错误。
  • 三种流属性模式及其覆盖关系符合规格。
  • Begin/End 支持嵌套、异常调用检查和最外层恢复同步。
  • 普通模型和 CaptureModel 的 blocking 行为正确。
  • Launch 提交错误不会被同步错误覆盖。
  • 多流、多线程操作时状态不串扰,流销毁后状态不泄漏。
  • 开启环境变量时存在对应 EVENT 日志。
  • 普通 Kernel、模型及并发场景完成回归;SIMT 接口在 David 环境单独验证。
likedislike
jiaxingrujiaxingru成员
5 天前 添加了label:requirement
CANN-robotCANN-robot成员
1 天前 关闭了 issue
CANN-robotCANN-robot成员
1 天前 添加了label:resolved
jiaxingrujiaxingru成员
1 天前 关联了pull request:feat: backport launch blocking to 9.2.0