已合并
【feat】: 新增ascir:Rand/Randn #1749
liyuewei创建于 8月15日
【feat】: 新增ascir:Rand/Randn #1749
已合并
Pull Request已成功合入, 合并人@CANN-robot
(感谢 liyuewei 的贡献)8月15日 添加了label:enhancement
atomgit-bot
8月15日 评论:
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 支持。


不准确?
atomgit-bot
8月15日 评论:
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)存在多个相互关联的核心缺陷,风险较高:
- Python API 一调用即崩溃(
y.attrAttributeError),新功能在 Python 入口不可用; - Randn 的 dtype 与 kernel 实现(PhiloxRandom)类型不匹配,可能导致生成的 kernel 编译失败或产生错误数据;
- Randn 语义与名称/文档矛盾(声称正态分布、实际均匀整数);
- 算子注册疑似缺少输出声明,影响算子类/输出 schema 的生成。
建议在合并前修复上述问题,尤其是 Python 入口的崩溃与 Randn 的 dtype/语义一致性,并补充针对 Randn 真实 dtype 与正态语义的编译与数值校验测试。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 2 |
| 🟡 建议 | 0 |
⛔ 需要修改


不准确?
8月15日 添加了label:cann-cla/yes
此处折叠了169条消息 查看更多
8月17日 添加了label:approved
8月17日 合入了pull request
6 天前 关联了issue:RFC:AscendLoopIR(LOOPIR)完备度补齐设计方案
6 天前 删除了label:ci-pipeline-passed
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 的说明。