已合并
fix(nn): release resources on init failure in aclnn examples and docs #8693
fix(nn): release resources on init failure in aclnn examples and docs #8693
已合并
苏世创建于 18 天前
苏世
苏世
18 天前

描述

修复 NN/Transformer 类算子调用示例在初始化失败场景下资源释放不完整的问题。

  • aclrtSetDevice 失败时,在返回前调用 aclFinalize,释放已初始化的 ACL 资源。
  • aclrtCreateStream 失败时,在返回前依次调用 aclrtResetDeviceaclFinalize,释放已设置的 Device 及 ACL 资源。
  • 保留原有 CHECK_RET 写法和正常执行路径的资源释放顺序。
  • 同步修改文档示例和对应的可执行示例源码,保证两处代码一致。

本次修改参考仓库内 PR #8603(aclnnSoftmax)的修复方式,仅补齐资源释放逻辑,不涉及算子 Tiling、Kernel 和计算功能变更。

涉及算子

activation(4 个算子,8 个文件)

  • SoftmaxV2:aclnnSoftmax
  • LogSoftmaxV2:aclnnLogSoftmax
  • SoftmaxGrad:aclnnSoftmaxBackward
  • LogSoftmaxGrad:aclnnLogSoftmaxBackward

norm(23 个算子,56 个文件)

  • GroupNormGrad:aclnnGroupNormBackward
  • LpNormV2:aclnnLinalgVectorNorm、aclnnNorm
  • LayerNormV4:aclnnLayerNorm、aclnnFastLayerNorm
  • LayerNormGradV3:aclnnLayerNormBackward
  • AddLayerNorm:aclnnAddLayerNorm
  • AddLayerNormQuant:aclnnAddLayerNormQuant
  • AddRmsNorm:aclnnAddRmsNorm
  • AddRmsNormCast:aclnnAddRmsNormCast
  • AddRmsNormQuant:aclnnAddRmsNormQuant
  • AddRmsNormDynamicQuant:aclnnAddRmsNormDynamicQuant、aclnnAddRmsNormDynamicQuantV2
  • AddRmsNormDynamicMxQuant:aclnnAddRmsNormDynamicMxQuant
  • RmsNormDynamicMxQuant:aclnnRmsNormDynamicMxQuant
  • RmsNormGradQuant:aclnnRmsNormGradQuant
  • RmsNormQuantV3:aclnnRmsNormQuantV3
  • BatchNormV3:aclnnBatchNorm、aclnnBatchNormElemt
  • BatchNormGradV3:aclnnBatchNormBackward、aclnnFastBatchNormBackward
  • RmsNorm:aclnnRmsNorm
  • RmsNormGrad:aclnnRmsNormGrad
  • InplaceAddRmsNorm:aclnnInplaceAddRmsNorm
  • SyncBatchNormBackwardElemt:aclnnBatchNormElemtBackward
  • SyncBatchNormBackwardReduce:aclnnBatchNormReduceBackward
  • SyncBatchNormGatherStats:aclnnSyncBatchNormGatherStats

experimental 镜像(8 个文件)

  • experimental/activation: LogSoftmaxV2
  • experimental/loss: SoftmaxGrad
  • experimental/norm: SyncBatchNormBackwardElemt、SyncBatchNormBackwardReduce、SyncBatchNormGatherStats

关联的 Issue

Issue #4745

测试

  • git diff --check:通过。
  • 本次仅修改调用示例的异常处理逻辑,未执行 NPU 运行测试。

文档更新

  • 更新上述算子 docs/ 目录下的 aclnn*.md 中的调用示例。
  • 同步更新 examples/ 目录下的 test_aclnn_*.cpp 可执行示例源码。

类型标签

AI/Agent生成声明

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 苏世 的贡献)
苏世苏世
18 天前 创建了 pull request,commit c49ffcae
苏世苏世
18 天前 关联了issue:[Bug-Report|缺陷反馈]: aclnnSoftmax示例初始化失败时资源释放不完整
atomgit-bot
atomgit-bot
18 天前 评论:

变更摘要

本 PR 主要修复 NN/Transformer 类算子 aclnn 调用示例在初始化失败场景下资源释放不完整的问题。通过调整 examples/ 下多个 test_aclnn_*.cppInit 函数,在 aclrtSetDevice 失败时补充 aclFinalize(),在 aclrtCreateStream 失败时补充 aclrtResetDevice(deviceId)aclFinalize(),覆盖 activation、norm 及 experimental 镜像下的示例源码,并同步保持文档示例与可执行示例一致。本次改动仅涉及调用示例的异常清理逻辑,不影响算子 Tiling、Kernel 和计算功能。

主要改动

  • aclrtSetDevice 失败分支补充清理: 各示例的 Init 函数中,当 aclrtSetDevice 返回非 ACL_SUCCESS 时,在返回前新增 aclFinalize() 调用,释放已初始化的 ACL 资源。
  • aclrtCreateStream 失败分支补充清理: 当 aclrtCreateStream 返回非 ACL_SUCCESS 时,在返回前依次新增 aclrtResetDevice(deviceId)aclFinalize() 调用,释放已设置的 Device 与 ACL 资源。
  • 统一多类算子示例的异常处理: activation、norm 及 experimental 镜像下的多个 test_aclnn_*.cpp 示例采用相同的 Init 失败清理逻辑,同时保留原有 CHECK_RET 写法与正常执行路径的资源释放顺序。
likedislike
atomgit-bot
atomgit-bot
18 天前 评论:

代码审查

✅ 未发现问题

likedislike
CANN-robotCANN-robot成员
18 天前 添加了label:cann-cla/yes
此处折叠了114条消息 查看更多
CANN-robot
CANN-robot成员
7 天前 评论:

流水线任务触发成功
任务链接 [a3126ef409c14b838098b06da4c7fdda][流水线指导]

任务名称状态日志下载链接
antipoison ✅ SUCCESS >>>>>
codecheck_checkpr ✅ SUCCESS
StaticCheck_codespell ✅ SUCCESS
StaticCheck_link_validity ✅ SUCCESS
StaticCheck_resource_existence ✅ SUCCESS
StaticCheck_tag_closed ✅ SUCCESS
StaticCheck_markdownlint ✅ SUCCESS
codecheck_precommit ✅ SUCCESS >>>>>
SCA ✅ SUCCESS >>>>>

[2026-08-24 17:29:45]    CI执行结束

likedislike
CANN-robotCANN-robot成员
7 天前 添加了label:api-check-pass
CANN-robotCANN-robot成员
7 天前 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
7 天前 添加了label:ci-pipeline-passed
CANN-robotCANN-robot成员
7 天前 合入了pull request