已合并
fix(aclnn): RT2执行前设置确定性配置 #4456
ClarkXie创建于 17 天前
fix(aclnn): RT2执行前设置确定性配置 #4456
已合并
ClarkXie创建于 17 天前
ClarkXie成员
17 天前

Pull Request

描述

修复 RT2 ACLNN 离线模型确定性配置的设置时机,避免在 lowering 阶段或 Init 图中修改全局状态。

  1. 在 lowering 阶段仅解析并保存模型的 DETERMINISTIC / DETERMINISTIC_LEVEL 配置,不再产生全局配置副作用。
  2. ModelV2ExecutorBuilder 从根图读取配置,由 ModelV2Executor::Execute() 在主执行图调度前设置全局确定性配置,确保设置发生在多线程执行器启动算子任务之前。
  3. Init 图不新增 SetAclnnGlobalDeterministicConfig kernel;ACLNN FwkData 仍保留原始配置,供算子级执行逻辑使用。
  4. 当 deterministic 开启但 level 未显式设置时,使用默认有效 level 1。同步更新相关参数说明和测试断言。

变更类型

关联的Issue

无。

如何测试

CI ut_fast_runtime2_test 暴露的两个失败用例均为对 Init kernel 调用次数的过期断言;修正测试期望后,按单模型、非并发调用 ModelV2Executor::Execute() 的 RT2 ACLNN 场景进行验证。

本次修改未重新编译或运行 UT/ST。

核对清单

其他信息

ModelV2Executor 不支持并发 Execute 调用;本方案假设单个 model executor 按既有串行调用约束使用。

确定性配置约束

当模型 deterministic=0 且未携带 deterministicLevel 时,按默认关闭确定性处理,ModelV2Executor::Execute() 不刷新全局确定性配置。

本方案不覆盖用户先调用 torch_npu.npu.set_deterministic_level(),再调用 torch.use_deterministic_algorithms() 修改确定性状态的混用场景。torch_npuset_deterministic_level() 后已提示不要继续调用 torch.use_deterministic_algorithms(),因此该组合不在支持范围内。若 deterministic 开启但 level 未设置,则按有效 level 1 处理。

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 ClarkXie 的贡献)
CClarkXie成员
17 天前 创建了 pull request,commit 2839bc26
atomgit-bot
atomgit-bot
17 天前 评论:

变更摘要

该 PR 将 ACLNN 离线模型的全局确定性配置设置从 lowering 阶段迁移到 init 图 kernel:lowering 时不再调用 optiling::SetGlobalDeterministicConfig,改为在 CreateAclnnOriginalDeterministicConfig 中于 init 根图创建 SetAclnnGlobalDeterministicConfig void kernel 节点,模型加载阶段统一设置一次,避免每个 ACLNN 算子重复修改全局配置;同时保留 SingleStage/DualStage ACLNN FwkData 对原始确定性配置的引用以支持算子级配置恢复,并补充了 ATC --deterministic--deterministic_level 的资料约束说明。

主要改动

  • lowering 阶段移除全局确定性配置设置: aclnn_node_converter.ccBuildAclnnOriginalDeterministicConfig 不再调用 optiling::SetGlobalDeterministicConfig,改为直接返回 ge::GRAPH_SUCCESS
  • init 图新增配置设置 kernel 节点: CreateAclnnOriginalDeterministicConfig 通过 bg::ValueHolder::CreateVoid<bg::ValueHolder> 创建 "SetAclnnGlobalDeterministicConfig" 节点并携带确定性配置常量,随 init 图在模型加载时执行。
  • 新增 SetAclnnGlobalDeterministicConfig kernel 实现: aclnn_op_execute_kernel.cc/.h 中实现并注册该 kernel,从输入读取 AclnnOriginalDeterministicConfig 后调用 optiling::SetGlobalDeterministicConfig 设置全局确定性配置。
  • 测试适配与新增用例: lowering 相关单测/系统测试改为断言 init 图中恰好存在一个 SetAclnnGlobalDeterministicConfig 节点且不再产生 aclrtSetSysParamOpt 记录;执行测试在 stub 中注册该 kernel 并断言模型加载时恰好调用一次;aclnn_op_execute_kernel_unittest.cc 新增该 kernel 成功、运行时失败、空输入三种用例。
  • 文档更新: 补充 ATC --deterministic--deterministic_level 的资料约束,说明离线推理建议在模型转换阶段完成确定性配置,不建议通过 RTS 接口在运行时修改,以避免运行时配置与模型转换配置不一致。
likedislike
atomgit-bot
atomgit-bot
17 天前 评论:

代码审查

✅ 未发现问题

likedislike
CANN-robotCANN-robot成员
17 天前 添加了label:cann-cla/yes
CANN-robot
CANN-robot成员
17 天前 评论:

Thanks for your pull-request.
The full list of commands accepted by me can be found at here.
You can get sig-info at here.
You can self-configure the PR merge rules for this repository. For more details, please refer to Here.
For more, you also can visit HICANN.


PR Approval Progress

Congratulations! All modules have met the lgtm and approve requirements.

Module Approval Details

module lgtm status approve status
repo-cann/ge 张德鹏, yangyongqiang0606, kobemini (3/2) 张德鹏 (1/1)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)

CLA Signature Pass

ClarkXie, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
此处折叠了171条消息 查看更多
yangyongqiang
yangyongqiang成员
12 天前 评论:

/lgtm

likedislike
CANN-robotCANN-robot成员
12 天前 添加了label:lgtm
张德鹏成员
12 天前 评论:

/approve

likedislike
CANN-robotCANN-robot成员
12 天前 添加了label:approved
CANN-robotCANN-robot成员
12 天前 合入了pull request