| Files | Last commit | Last update |
|---|---|---|
fix(aclnn_batch_norm_stats): 使用 AddInplace 减少 workspace 占用 Co-authored-by: andong_hw<andong2@huawei.com> # message auto-generated for no-merge-commit merge: !6982 merge fix-aclnn-bn-stats-workspace into master fix(aclnn_batch_norm_stats): 使用 AddInplace 减少 workspace 占用 Created-by: andong_hw Commit-by: andong_hw Merged-by: cann-robot Description: ## 描述 将 aclnnBatchNormStatsImplUnify 中的 l0op::Add 改为 l0op::AddInplace(eps, var),原地写回 ReduceVar 的 var 输出,去掉一块 [C] fp32 的临时 buffer。 以输入 [1, 51200000, 1]、fp16 为例: - workspaceSize:614401536 B → 426378752 B - mean / invstd 与 golden 比对通过 同时补充 aclnnBatchNormStats 的 TTK TestSpec golden(tests/assets/golden.py),便于用 TTK 验证该接口。 ## 关联的Issue Closes #4394 ## 测试 - bash build.sh --pkg --ops=reduce_std_with_mean --soc=ascend950 -j32 编译通过 - TTK ACLNN 用例(fp16 [1,51200000,1]):GOLD: PASS,PASS,PassRate 100% - pre-commit 全部通过 ## 文档更新 无 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [x] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!6982 | 10 days ago | |
feat(ReduceStdWithMean): 支持 Ascend 950 AscendC 实现(L0 双路径 + arch35 kernel) Co-authored-by: handsomeRobot_SK<suke13@huawei.com> # message auto-generated for no-merge-commit merge: !5851 merge feat/reduce_std_with_mean into master feat(ReduceStdWithMean): 支持 Ascend 950 AscendC 实现(L0 双路径 + arch35 kernel) Created-by: handsomeRobot_SK Commit-by: handsomeRobot_SK Merged-by: cann-robot Description: ## 描述 为 ReduceStdWithMean 贡献 **Ascend 950PR/950DT(arch35,dav-3510)AscendC Kernel 实现**。 ReduceStdWithMean 为 CANN 内部 L0 算子(给定外部预计算均值,沿指定维度计算 std / invstd),由 aclnnStd / aclnnStdMeanCorrection / aclnnBatchNormStats 三个上层接口组合调用;此前 950 平台经 Unify 路径绕行(ReduceStdV2 / ReduceVar+Add+Pow 组合),本 PR 使其可原生执行。 **变更规模**:23 个文件(+5030 / -91),其中新增 15 个文件;交付形态对齐已合入的 ReduceStdV2Update。 ### Kernel 设计要点 - **模板体系**(TilingKey 3 bool × def 驱动 dtype,3 dtype × 5 组合 = 15 份 binary): - normal:尾 R(AR)/ 尾 A(RA)两型,双切分(aSplit/aUbFactor → 剩余 UB 反解 rSplit/rUbFactor),R 全载时回头扩 A; - group:A 用不满核且 R 有并行度时触发,A×R 2D 分核 + 两阶段确定性归约(Phase1 局部归约写 workspace → SyncAll → Phase2 跨核合并),**全程禁用 AtomicAdd**; - empty:EMPTY_A(输出空 tensor 零操作)/ EMPTY_R(N=0 → 输出 NaN,对齐 numpy golden); - 归约轴标记缓存树 + DataCopyPad + LoopMode 多维搬运 + AscendC::Reg 向量寄存器计算(fp16/bf16 经 DIST_UNPACK_B16 装载后提升 fp32 计算)。 - **dtype 组合校验**:tiling 必经路径拦截 mean.dtype == x.dtype 与 mean.shape == x.shape;y.dtype 由 InferDataType 派生(y=x),非法组合在 def 级放行后由 tiling 兜底拒绝。 - **def 驱动 dtype 设计**:def.cpp 声明 3 dtype → 构建系统按 -DDTYPE_X 逐 dtype 实例化入口;TilingKey 仅编码算法维度(templateType/isEmptyTensor/isTailR),不重复编码 dtype。 ### L0 双路径(兼容性关键设计) ReduceStdWithMean(self, mean, dim, correction, keepdim, invert, eps, executor) ├─ DAV_3510 + fp16/fp32/bf16 → ReduceStdWithMeanAiCore ← 950:本交付 AscendC kernel └─ 其余平台 → ReduceStdWithMeanGeneric ← INFER_SHAPE + ADD_TO_LAUNCHER_LIST_AICORE (基线行为,框架按平台解析到内置实现) 950 走新 kernel;910b / A2 / A3 等平台保持基线通用路径,行为不变 —— 与 README"其余产品由 CANN 内置算子库支持"一致(修复过程中曾出现 950-only 硬门禁导致 910b UT 失败的回归,已通过双路径修复并有 ut_acc.log 佐证)。 ### 原型迁移说明(针对"算子兼容性"检查项) 检查报告显示 common/inc/op_graph/op_math_proto_extend.h "删除 25 个算子",实为**原型迁移的比对副作用**: - REG_OP(ReduceStdWithMean) 从公共头**迁移**至算子目录 op_graph/reduce_std_with_mean_proto.h(本 PR"文件新增"项已列出,内容与 6 属性 OpDef 一致),消除 GEIR 示例的重复注册; - 其余 24 个(InTopK/Pdist/Cumprod 等)为主线内置算子,由主包注册提供;基线因旧原型寄放公共头被整文件带入(merge_graph_headers 整文件并入机制),属**过度注册**,本单算子交付不注册无关内置算子,为正确收敛,主包未受影响。 ### 其他说明 - **tests 范围**:仅 ut/op_host(infershape 13 用例 + arch35 tiling 16 用例,仓内标准框架 InfershapeContextPara/ExecuteTestCase 写法),对齐 fresnel_cos / ReduceStdV2Update 交付形态; - **不引入新公开 API**:L0 内部算子,无独立 aclnn 接口(曾误含手写 L2,已按需求移除); - ACLNNTYPE aclnn_exclude 禁止 autogen 生成 L2,与 v2_update 一致; - kernel 头命名 reduce_std_with_mean_kernel.h(fresnel_cos 模式),避免与 op_api/reduce_std_with_mean.h 包内重名。 ## 关联的Issue close #<issue编号> ## 测试 1. **GEIR 真机验证(Ascend 950)**:静态 + 动态实跑通过 —— - 静态:6 属性构图 + RunGraph,精度对齐 golden(y=1.290994 / 2.581989,Precision is ok); - 动态:unknown dim(-1) 3/3、unknown rank(-2) 3/3 场景全过(Shape/dtype/values PASSED),custom kernel launch 证据齐全(custom_op_file_path → vendor、UpdateSingleOpModule → reduce_std_with_mean_apt、6 次 kernel launch); 2. **UT**:ut/op_host 29 用例(infershape 13 + arch35 tiling 16),fresnel_cos 同款标准框架写法; 3. **包构建**:bash build.sh --soc=ascend950 --pkg --ops=reduce_std_with_mean -j256 通过(产物 cann-ops-math-custom_linux-x86_64.run); 4. **兼容性**:非 950 平台(910b)opapi UT 回归通过(L0 双路径修复后,aclnnBatchNormStats 3 个曾失败用例恢复); 5. **静态检查**:pre-commit 全套(whitespace/clang-format 18.1.8/codespell/大文件/私钥等)+ OAT 合规(单次全量 23 文件)通过。 ## 文档更新 - math/reduce_std_with_mean/README.md 重写:产品支持情况(950 由本包提供 kernel、其余产品由内置算子库支持)、双模式计算公式、上层三接口区别表、参数说明(x/mean/y + 6 属性)、约束说明(dtype 一致性 / rank≤8 / mean 全等 / dim 去重 / out shape 一致性 / correction 非负 / 边界值)、调用说明(GEIR 示例 + 上层接口示例索引)。 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!5851 | 1 month ago | |
fix(reduce): 修改 StdMeanCorrection 错误码并归一 ReduceSum 负轴 Co-authored-by: zhouyuanhang30083383<zhouyuanhang4@h-partners.com> # message auto-generated for no-merge-commit merge: !6953 merge fix/reduce-std-shape-and-reduce-sum-neg-dim into master fix(reduce): 修改 StdMeanCorrection 错误码并归一 ReduceSum 负轴 Created-by: m0_55003149 Commit-by: zhouyuanhang30083383 Merged-by: cann-robot Description: ## 描述 aclnnStdMeanCorrection:保持原有 shape 推导/校验逻辑不变,仅将 meanOut 拷贝失败时的返回码从 561103(ACLNN_ERR_INNER_NULLPTR)改为 161002 aclnnReduceSum:在 BOOL→INT64 的 promoteType 判断中先归一负轴,再乘归约维度,避免负索引越界导致误选 FLOAT。 ## 关联的Issue https://gitcode.com/cann/ops-math/issues/4298 https://gitcode.com/cann/ops-math/issues/4249 ## 测试 ## 文档更新 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!6953 | 11 days ago | |
feat(ReduceStdWithMean): 支持 Ascend 950 AscendC 实现(L0 双路径 + arch35 kernel) Co-authored-by: handsomeRobot_SK<suke13@huawei.com> # message auto-generated for no-merge-commit merge: !5851 merge feat/reduce_std_with_mean into master feat(ReduceStdWithMean): 支持 Ascend 950 AscendC 实现(L0 双路径 + arch35 kernel) Created-by: handsomeRobot_SK Commit-by: handsomeRobot_SK Merged-by: cann-robot Description: ## 描述 为 ReduceStdWithMean 贡献 **Ascend 950PR/950DT(arch35,dav-3510)AscendC Kernel 实现**。 ReduceStdWithMean 为 CANN 内部 L0 算子(给定外部预计算均值,沿指定维度计算 std / invstd),由 aclnnStd / aclnnStdMeanCorrection / aclnnBatchNormStats 三个上层接口组合调用;此前 950 平台经 Unify 路径绕行(ReduceStdV2 / ReduceVar+Add+Pow 组合),本 PR 使其可原生执行。 **变更规模**:23 个文件(+5030 / -91),其中新增 15 个文件;交付形态对齐已合入的 ReduceStdV2Update。 ### Kernel 设计要点 - **模板体系**(TilingKey 3 bool × def 驱动 dtype,3 dtype × 5 组合 = 15 份 binary): - normal:尾 R(AR)/ 尾 A(RA)两型,双切分(aSplit/aUbFactor → 剩余 UB 反解 rSplit/rUbFactor),R 全载时回头扩 A; - group:A 用不满核且 R 有并行度时触发,A×R 2D 分核 + 两阶段确定性归约(Phase1 局部归约写 workspace → SyncAll → Phase2 跨核合并),**全程禁用 AtomicAdd**; - empty:EMPTY_A(输出空 tensor 零操作)/ EMPTY_R(N=0 → 输出 NaN,对齐 numpy golden); - 归约轴标记缓存树 + DataCopyPad + LoopMode 多维搬运 + AscendC::Reg 向量寄存器计算(fp16/bf16 经 DIST_UNPACK_B16 装载后提升 fp32 计算)。 - **dtype 组合校验**:tiling 必经路径拦截 mean.dtype == x.dtype 与 mean.shape == x.shape;y.dtype 由 InferDataType 派生(y=x),非法组合在 def 级放行后由 tiling 兜底拒绝。 - **def 驱动 dtype 设计**:def.cpp 声明 3 dtype → 构建系统按 -DDTYPE_X 逐 dtype 实例化入口;TilingKey 仅编码算法维度(templateType/isEmptyTensor/isTailR),不重复编码 dtype。 ### L0 双路径(兼容性关键设计) ReduceStdWithMean(self, mean, dim, correction, keepdim, invert, eps, executor) ├─ DAV_3510 + fp16/fp32/bf16 → ReduceStdWithMeanAiCore ← 950:本交付 AscendC kernel └─ 其余平台 → ReduceStdWithMeanGeneric ← INFER_SHAPE + ADD_TO_LAUNCHER_LIST_AICORE (基线行为,框架按平台解析到内置实现) 950 走新 kernel;910b / A2 / A3 等平台保持基线通用路径,行为不变 —— 与 README"其余产品由 CANN 内置算子库支持"一致(修复过程中曾出现 950-only 硬门禁导致 910b UT 失败的回归,已通过双路径修复并有 ut_acc.log 佐证)。 ### 原型迁移说明(针对"算子兼容性"检查项) 检查报告显示 common/inc/op_graph/op_math_proto_extend.h "删除 25 个算子",实为**原型迁移的比对副作用**: - REG_OP(ReduceStdWithMean) 从公共头**迁移**至算子目录 op_graph/reduce_std_with_mean_proto.h(本 PR"文件新增"项已列出,内容与 6 属性 OpDef 一致),消除 GEIR 示例的重复注册; - 其余 24 个(InTopK/Pdist/Cumprod 等)为主线内置算子,由主包注册提供;基线因旧原型寄放公共头被整文件带入(merge_graph_headers 整文件并入机制),属**过度注册**,本单算子交付不注册无关内置算子,为正确收敛,主包未受影响。 ### 其他说明 - **tests 范围**:仅 ut/op_host(infershape 13 用例 + arch35 tiling 16 用例,仓内标准框架 InfershapeContextPara/ExecuteTestCase 写法),对齐 fresnel_cos / ReduceStdV2Update 交付形态; - **不引入新公开 API**:L0 内部算子,无独立 aclnn 接口(曾误含手写 L2,已按需求移除); - ACLNNTYPE aclnn_exclude 禁止 autogen 生成 L2,与 v2_update 一致; - kernel 头命名 reduce_std_with_mean_kernel.h(fresnel_cos 模式),避免与 op_api/reduce_std_with_mean.h 包内重名。 ## 关联的Issue close #<issue编号> ## 测试 1. **GEIR 真机验证(Ascend 950)**:静态 + 动态实跑通过 —— - 静态:6 属性构图 + RunGraph,精度对齐 golden(y=1.290994 / 2.581989,Precision is ok); - 动态:unknown dim(-1) 3/3、unknown rank(-2) 3/3 场景全过(Shape/dtype/values PASSED),custom kernel launch 证据齐全(custom_op_file_path → vendor、UpdateSingleOpModule → reduce_std_with_mean_apt、6 次 kernel launch); 2. **UT**:ut/op_host 29 用例(infershape 13 + arch35 tiling 16),fresnel_cos 同款标准框架写法; 3. **包构建**:bash build.sh --soc=ascend950 --pkg --ops=reduce_std_with_mean -j256 通过(产物 cann-ops-math-custom_linux-x86_64.run); 4. **兼容性**:非 950 平台(910b)opapi UT 回归通过(L0 双路径修复后,aclnnBatchNormStats 3 个曾失败用例恢复); 5. **静态检查**:pre-commit 全套(whitespace/clang-format 18.1.8/codespell/大文件/私钥等)+ OAT 合规(单次全量 23 文件)通过。 ## 文档更新 - math/reduce_std_with_mean/README.md 重写:产品支持情况(950 由本包提供 kernel、其余产品由内置算子库支持)、双模式计算公式、上层三接口区别表、参数说明(x/mean/y + 6 属性)、约束说明(dtype 一致性 / rank≤8 / mean 全等 / dim 去重 / out shape 一致性 / correction 非负 / 边界值)、调用说明(GEIR 示例 + 上层接口示例索引)。 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!5851 | 1 month ago | |
feat: ReduceStdV2Update 和 ReduceStdWithMean 适配 ascend960 Co-authored-by: wkyan<yanwenkai@huawei.com> # message auto-generated for no-merge-commit merge: !6555 merge 1020_reduce into master feat: ReduceStdV2Update 和 ReduceStdWithMean 适配 ascend960 Created-by: wkyan Commit-by: wkyan Merged-by: cann-robot Description: ## 描述 为 ReduceStdV2Update 和 ReduceStdWithMean 增加 ascend960dt 平台支持,并补充对应的 RegBase 路径与系统 workspace 配置。 ### 改动原因 两个算子原有构建配置和 AICore 注册仅包含 ascend950、ascend350,无法按当前算子实现配置在 ascend960dt 平台使用。 ### 改动方法 1. math/reduce_std_v2_update/CMakeLists.txt:将 ascend960dt 加入 SUPPORT_COMPUTE_UNIT,并复用 arch35 tiling 目录。 2. math/reduce_std_v2_update/op_host/reduce_std_v2_update_def.cpp:为 ReduceStdV2Update 增加 ascend960dt AICore 配置。 3. math/reduce_std_v2_update/op_kernel/arch35/reduce_std_v2_update.h:将 SetLoopModePara / ResetLoopModePara 的可用架构扩展为 __NPU_ARCH__ == 3510 || __NPU_ARCH__ == 9201,并同步更新不支持平台的编译错误信息。 4. math/reduce_std_with_mean/CMakeLists.txt:将 ascend960dt 加入 SUPPORT_COMPUTE_UNIT,并复用 arch35 tiling 目录。 5. math/reduce_std_with_mean/op_host/reduce_std_with_mean_def.cpp:为 ReduceStdWithMean 增加 ascend960dt AICore 配置。 6. math/reduce_std_with_mean/op_api/reduce_std_with_mean.cpp:引入 op_api/aclnn_check.h,使用 IsRegBase() 判断 AICore 路径,并更新 950/960DT 平台说明。 ## 关联的Issue https://gitcode.com/cann/ops-math/issues/4014 ## 测试 本次 PR diff 未包含测试文件或可核验的测试结果;变更涉及 ascend960dt 编译平台注册、LoopMode 架构条件及系统 workspace 配置,需在对应平台完成编译、精度和算子泛化验证。 ## 文档更新 无 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!6555 | 16 days ago | |
剥离math下op_host/op_api到op_api Co-authored-by: yue-ma<mayue54@huawei.com> # message auto-generated for no-merge-commit merge: !4246 merge master into master 剥离math下op_host/op_api到op_api Created-by: yue-ma Commit-by: yue-ma Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 本次变更主要对 math 目录下多个算子的目录结构进行扁平化整理:将原先嵌套在 op_host/op_api/ 中的 API 实现文件直接提升到 op_api/ 层级 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-math/issues/2392 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> UT/ST通过 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!4246 | 3 months ago |
| Files | Last commit | Last update |
|---|---|---|
| 10 days ago | ||
| 1 month ago | ||
| 11 days ago | ||
| 1 month ago | ||
| 16 days ago | ||
| 3 months ago |