已合并
test: 新增AddLayerNormQuant算子aclnn调用测试示例 #7978
test: 新增AddLayerNormQuant算子aclnn调用测试示例 #7978
已合并
rk创建于 7月27日
rk成员
7月27日

描述

为 AddLayerNormQuant 算子补充 aclnn 接口调用方式的测试示例。算子 README(norm/add_layer_norm_quant/README.md)调用说明中 aclnn 接口的样例代码列原为空("-"),仅有图模式(geir)测试示例,本 PR 填补 aclnn 调用示例的缺失。

新增文件 norm/add_layer_norm_quant/examples/test_aclnn_add_layer_norm_quant.cpp,内容包括:

  • 资源初始化(aclInit/aclrtSetDevice/aclrtCreateStream)
  • 构造输入与属性:x1/x2(shape {8,16},ACL_FLOAT)、gamma/beta/bias/s1/s2(shape {16},ACL_FLOAT);eps=1e-6、additionalOut=true、divMode=true、quantMode="static"
  • 两段式 aclnn 接口调用:aclnnAddLayerNormQuantGetWorkspaceSize 计算 workspace 并创建 executor,aclnnAddLayerNormQuant 执行计算
  • 输出验证:将 y1/y2(ACL_INT8)、x/outScales1/outScales2(ACL_FLOAT)从 device 拷回 host 并打印
  • 资源释放:销毁所有 aclTensor 并释放 device 内存

关联的Issue

测试

编译并运行 test_aclnn_add_layer_norm_quant.cpp,验证:

  • aclnnAddLayerNormQuantGetWorkspaceSize 返回 ACL_SUCCESS
  • aclnnAddLayerNormQuant 执行成功,aclrtSynchronizeStream 正常返回
  • y1/y2/x/outScales1/outScales2 输出可正确拷回 host 并打印,无内存/资源泄漏

文档更新

无。

类型标签

AI/Agent生成声明

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 rk 的贡献)
Rrk成员
7月27日 创建了 pull request,commit e207f308
atomgit-bot
atomgit-bot
7月27日 评论:

变更摘要

此 PR 新增了 add_layer_norm_quant 算子的 aclnn 测试示例文件 test_aclnn_add_layer_norm_quant.cpp,用于演示如何通过 CANN 算子库 API 调用 aclnnAddLayerNormQuant 算子。该示例完整覆盖了 ACL 设备初始化、输入输出张量构造、算子 workspace 查询与执行、结果回拷打印以及资源释放的全流程。

主要改动

  • 新增 test_aclnn_add_layer_norm_quant.cpp 测试示例文件:位于 norm/add_layer_norm_quant/examples/ 目录下,共 294 行,作为 aclnnAddLayerNormQuant 算子的参考用法示例。
  • 实现通用辅助函数 GetShapeSize 和 CreateAclTensor:GetShapeSize 用于计算 shape 张量元素总数,CreateAclTensor 模板函数封装了 aclrtMalloc、aclrtMemcpy 以及 strides 计算与 aclCreateTensor 调用逻辑,简化了多次张量创建的重复代码。
  • 演示完整的算子调用流程:在 main 函数中依次初始化 ACL 设备与 stream,分别创建 7 个 float 类型输入张量(x1、x2、gamma、beta、bias、s1、s2)和 4 个输出张量(y1/y2 为 ACL_INT8 类型,x/outScales1/outScales2 为 ACL_FLOAT 类型),然后调用 aclnnAddLayerNormQuantGetWorkspaceSize 和 aclnnAddLayerNormQuant 两段式接口执行计算。
  • 包含输出结果验证与资源清理:通过 aclrtMemcpy 将 5 路输出从 device 侧回拷到 host 侧并逐元素打印,最后依次释放所有 aclTensor、device 内存、workspace、stream 以及 ACL 资源,形成完整的端到端示例。
likedislike
不准确?
atomgit-bot
atomgit-bot
7月27日 评论:

代码审查

审查结束总结

本次审查针对 norm/add_layer_norm_quant/examples/test_aclnn_add_layer_norm_quant.cpp(新增 294 行),共发现 4 个问题:

优先级 数量 说明
P1 1 CreateAclTensor 未检查 aclCreateTensor 返回值,空指针传入算子 API 将导致崩溃
P2 2 ① CreateAclTensor 中 aclrtMemcpy 失败时泄露 device 内存;② main 函数中任意错误提前返回时泄露所有已分配的 device 内存、tensor 及 stream
P3 1 第165行注释"创建不带 bias 的 aclTensor"存在误导

整体风险判断:该文件为算子测试示例,逻辑主体与官方文档示例一致,核心 API 调用参数顺序正确。主要风险集中在错误路径的资源管理上——缺少 aclCreateTensor 返回值校验和 device 内存释放,可能在异常场景下导致崩溃或 NPU device 内存泄漏。建议在合入前至少修复 P1 的空指针问题,P2 的资源泄漏可后续统一改进。

已审查文件:

  • norm/add_layer_norm_quant/examples/test_aclnn_add_layer_norm_quant.cpp — 发现 4 个问题(见上表)
类型 数量
🔴 阻塞 1
🟡 建议 2

⛔ 需要修改

likedislike
不准确?
CANN-robotCANN-robot成员
7月27日 添加了label:cann-cla/yes
CANN-robot
CANN-robot成员
7月27日 评论:

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


PR Approval Progress

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

Module Approval Details

module lgtm status approve status
norm ✅ 陈昊文, 陈琦 (2/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

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

likedislike
此处折叠了80条消息 查看更多
Chen_HaoWen成员
7月31日 评论:

/approve

likedislike
CANN-robotCANN-robot成员
7月31日 添加了label:lgtmapproved
CANN-robotCANN-robot成员
7月31日 关闭了关联的issue
CANN-robotCANN-robot成员
7月31日 合入了pull request
CANN-robot
CANN-robot成员
7月31日 评论:

Pull Request 已合并或已关闭。

If you want to solve this problem, you can click here to do it in the FAQs.

likedislike