已合并
【feat】: 新增ascir:Rand/Randn #1749
【feat】: 新增ascir:Rand/Randn #1749
已合并
liyuewei创建于 8月15日
liyuewei
liyuewei成员
8月15日

Pull Request

描述

主要改动

新增 Rand/Randn 算子常量与注册: 在 att_const_values.h 中新增 kRand、kRandn 常量,并在 pyascir.h 的算子宏列表中加入 OP(Rand)、OP(Randn),使两个算子进入统一的算子枚举体系。
新增算子实现与类型约束: 在 ascir_builtin_ops_v2.cpp 中注册 Rand(支持 DT_FLOAT)与 Randn(支持 DT_UINT32、DT_INT32),同时在 v2_ascir_att_impl.h 中定义对应的 Att 实现类。
新增 Codegen 与性能注册实现: 在 v2_ascir_codegen_impl.h 中新增 RandAscIrCodegenImplV2、RandnAscIrCodegenImplV2(二者 API 名均为 Rand,加载 random_reg_base.h),并在 ascir_api_perf_v2.cpp 中以 kUnitVector 为单位注册性能信息。
新增 Python 前端接口: 在 ascir_api.py 中新增 Rand、Randn 函数,负责创建对应算子、设置 dtype、axis、size、stride 并返回输出节点。
新增底层随机数封装与测试: 新增 random.h,封装 AscendC::PhiloxRandom<10> 并以固定 philoxKey/philoxCounter 实现 Rand;同时注册 random_reg_base.h 字符串,并新增 test_codegen_rand_reg_api_call.cpp 覆盖 Rand/Randn 的 API 名称、头文件加载及 dtype 支持。

变更类型

请选择本次引入的变更类型:

关联的Issue

如何测试

描述测试此变更的步骤和前提条件:
NA

核对清单

其他信息

在此添加任何其他关于本次 PR 的说明。

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 liyuewei 的贡献)
liyueweiliyuewei成员
8月15日 添加了label:enhancement
liyueweiliyuewei成员
8月15日 创建了 pull request,commit d789cb1b
atomgit-bot
atomgit-bot
8月15日 评论:

变更摘要

本 PR 新增了 ascir 算子 Rand 与 Randn,用于基于 AscendC PhiloxRandom 算法生成随机数。改动贯穿算子注册、类型校验、代码生成、Python 前端接口、AscendC 底层封装与性能注册,并补充了对应的 Codegen 单元测试。

主要改动

  • 新增 Rand/Randn 算子常量与注册: 在 att_const_values.h 中新增 kRand、kRandn 常量,并在 pyascir.h 的算子宏列表中加入 OP(Rand)、OP(Randn),使两个算子进入统一的算子枚举体系。
  • 新增算子实现与类型约束: 在 ascir_builtin_ops_v2.cpp 中注册 Rand(支持 DT_FLOAT)与 Randn(支持 DT_UINT32、DT_INT32),同时在 v2_ascir_att_impl.h 中定义对应的 Att 实现类。
  • 新增 Codegen 与性能注册实现: 在 v2_ascir_codegen_impl.h 中新增 RandAscIrCodegenImplV2、RandnAscIrCodegenImplV2(二者 API 名均为 Rand,加载 random_reg_base.h),并在 ascir_api_perf_v2.cpp 中以 kUnitVector 为单位注册性能信息。
  • 新增 Python 前端接口: 在 ascir_api.py 中新增 Rand、Randn 函数,负责创建对应算子、设置 dtype、axis、size、stride 并返回输出节点。
  • 新增底层随机数封装与测试: 新增 random.h,封装 AscendC::PhiloxRandom<10> 并以固定 philoxKey/philoxCounter 实现 Rand;同时注册 random_reg_base.h 字符串,并新增 test_codegen_rand_reg_api_call.cpp 覆盖 Rand/Randn 的 API 名称、头文件加载及 dtype 支持。
likedislike
不准确?
atomgit-bot
atomgit-bot
8月15日 评论:

代码审查

I have reviewed all 11 changed files and reported the issues I'm confident about. Here is the closing summary.

审查结论

按优先级统计的发现:

  • P1:2 个
  • P2:2 个
  • P3:0 个

各变更文件审查结果:

文件 结论
autofuse/att/base/att_const_values.h 无问题(新增 kRand/kRandn 常量,与 perf 注册处引用一致)
autofuse/compiler/py_module/pyascir.h 无问题(OP(Rand)/OP(Randn) 加入注册列表,与 REGISTERED_OPS 机制一致)
autofuse/compiler/python/ascir_api.py 2 个问题:rand_op.y.attr.* AttributeError(P1);Randn 文档/命名声称正态分布但实现为均匀(P2)
autofuse/tests/v35/ut/codegen/reg_api_call/test_codegen_rand_reg_api_call.cpp 无独立问题(依赖 af::ops::Rand.y,受下方缺少 .Output 的发现影响)
autofuse/v35/ascendc/api_regbase/CMakeLists.txt 无问题(random.h 加入生成列表,random_reg_base.h 生成逻辑正确)
autofuse/v35/ascendc/api_regbase/random.h 无独立问题(const LocalTensor<T>& 与其它 kernel 一致;类型支持问题归入 dtype 发现)
autofuse/v35/ascir/generator/ascir_builtin_ops_v2.cpp 2 个问题:Randn 整数 dtype 与 PhiloxRandom 浮点接口不匹配(P1);Rand/Randn 缺少 .Output("y","T") 声明(P2)
autofuse/v35/ascir/generator/v2_ascir_att_impl.h 无问题(REG_ASC_IR_ATT_V2_CLASS_DEFINE(Rand/Randn) 生成的类与注册处引用一致)
autofuse/v35/ascir/generator/v2_ascir_codegen_impl.h 无独立问题(Randn 的 GetApiName 返回 "Rand" 属语义问题,已归入 Randn 发现)
autofuse/v35/att/api_perf_register/ascir_api_perf_v2.cpp 无问题(ApiPerfRegisterV2 追加 "V2",与 ATT 的 GetApiPerf 名称匹配)
autofuse/v35/codegen/ascendc_reg_base_api_register.cpp 无问题(random_reg_base.h 字符串与映射条目正确插入)

整体风险判断:

本次变更(新增 ascir Rand/Randn)存在多个相互关联的核心缺陷,风险较高:

  1. Python API 一调用即崩溃(y.attr AttributeError),新功能在 Python 入口不可用;
  2. Randn 的 dtype 与 kernel 实现(PhiloxRandom)类型不匹配,可能导致生成的 kernel 编译失败或产生错误数据;
  3. Randn 语义与名称/文档矛盾(声称正态分布、实际均匀整数);
  4. 算子注册疑似缺少输出声明,影响算子类/输出 schema 的生成。

建议在合并前修复上述问题,尤其是 Python 入口的崩溃与 Randn 的 dtype/语义一致性,并补充针对 Randn 真实 dtype 与正态语义的编译与数值校验测试。

类型 数量
🔴 阻塞 2
🟡 建议 0

⛔ 需要修改

likedislike
不准确?
CANN-robotCANN-robot成员
8月15日 添加了label:cann-cla/yes
此处折叠了169条消息 查看更多
张德鹏成员
8月17日 评论:

/approve

likedislike
CANN-robotCANN-robot成员
8月17日 添加了label:approved
CANN-robotCANN-robot成员
8月17日 合入了pull request
liyueweiliyuewei成员
6 天前 关联了issue:RFC:AscendLoopIR(LOOPIR)完备度补齐设计方案
CANN-robotCANN-robot成员
6 天前 删除了label:ci-pipeline-passed