| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
产品名变更 Co-authored-by: gitcode-chenjiao<chenjiao31@huawei.com> # message auto-generated for no-merge-commit merge: !5912 merge master into master 产品名变更 Created-by: gitcode-chenjiao Commit-by: gitcode-chenjiao Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> AI处理器对应的产品型号名称更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> [#3258](https://gitcode.com/cann/ops-math/issues/3258) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ok ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> *.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!5912 | 23 天前 | |
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 | 23 天前 | |
fix: 消除 histogram_v2 魔法数字并修正 reduce_std_with_mean 函数头注释 Co-authored-by: xiafengkou<luojiangtao4@huawei.com> # message auto-generated for no-merge-commit merge: !5943 merge master into master fix: 消除 histogram_v2 魔法数字并修正 reduce_std_with_mean 函数头注释 Created-by: xiafengkou Commit-by: xiafengkou Merged-by: cann-robot Description: ## 描述 本次改动为纯代码规范整改,修复 2 类静态扫描告警,不涉及任何逻辑变更: 1. **G.CNS.02(魔法数字)**: math/histogram_v2/op_kernel/arch35/histogram_v2_simd_full_load_det_fp32out.h - 将 TQue<TPosition::VECIN, 2> xQue_ 与 InitBuffer(xQue_, 2, ...) 中的字面量 2 提取为具名常量 HIST_SIMD_X_QUE_DEPTH = 2(语义为 x 输入队列的双缓冲深度),两处引用同一常量,编译期展开结果与原代码完全一致。 2. **G.CMT.04(空格式函数头注释)**:math/reduce_std_with_mean/op_api/reduce_std_with_mean.cpp - GetReduceOutputShape 函数头注释存在断行残留的空格式行(行尾以冒号结尾、无实质内容),改写为完整句子并入完整描述,仅调整注释文字,代码逻辑与注释语义不变。 ## 关联的Issue https://gitcode.com/cann/ops-math/issues/3290 ## 测试 - 改动仅涉及命名与注释,HIST_SIMD_X_QUE_DEPTH 与原字面量 2 等值,无编译期/运行期行为变化,既有 UT/ST 用例不受影响。 - 本地 pre-commit 静态检查通过(提交成功),推送时远端 git hooks 校验 PASSED。 ## 文档更新 无 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:代码规范问题整改(G.CNS.02 魔法数字 / G.CMT.04 空格式函数头注释) See merge request: cann/ops-math!5943 | 22 天前 | |
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 | 23 天前 | |
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 | 23 天前 | |
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 | 23 天前 | |
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 | 23 天前 | |
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 | 23 天前 | |
产品名变更 Co-authored-by: gitcode-chenjiao<chenjiao31@huawei.com> # message auto-generated for no-merge-commit merge: !5912 merge master into master 产品名变更 Created-by: gitcode-chenjiao Commit-by: gitcode-chenjiao Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> AI处理器对应的产品型号名称更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> [#3258](https://gitcode.com/cann/ops-math/issues/3258) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ok ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> *.md ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!5912 | 23 天前 |
ReduceStdWithMean
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR&950DT系列产品 | √ |
| Atlas A3系列产品 | √ |
| Atlas A2系列产品 | √ |
| Atlas 200I/500 A2推理产品 | √ |
| Atlas推理系列产品 | √ |
| Atlas训练系列产品 | √ |
Ascend 950PR/950DT 由本自定义算子包提供 kernel 实现(arch35);其余产品由 CANN 内置算子库支持。Ascend 950PR/950DT、Atlas A3、Atlas A2 支持 float16 / float32 / bfloat16;其余产品支持 float16 / float32。
功能说明
给定外部预计算的均值 mean,沿指定维度 dim 计算输入 x 的标准差(invert=false)或其倒数(invert=true)。是 BatchNorm/LayerNorm/GroupNorm 归一化层统计量计算的关键子步骤,以及 PyTorch torch.std/torch.std_mean/torch.batch_norm_stats 在 NPU 上的底层实现。
标准差模式(invert=false,correction 生效):
y=∑j=0N−1(xj−meanj)2max(0, N−correction)y = \sqrt{\frac{\sum_{j=0}^{N-1}(x_j - mean_j)^2}{\max(0,\; N - correction)}} y=max(0,N−correction)∑j=0N−1(xj−meanj)2
标准差倒数模式(invert=true,固定除以 N、加 epsilon,忽略 correction):
y=11N∑j=0N−1(xj−meanj)2+ϵy = \frac{1}{\sqrt{\dfrac{1}{N}\sum_{j=0}^{N-1}(x_j - mean_j)^2 + \epsilon}} y=N1∑j=0N−1(xj−meanj)2+ϵ1
其中 N=∏d∈dimshape[d]N=\prod_{d \in dim}\text{shape}[d]N=∏d∈dimshape[d] 为归约维度元素总数,correctioncorrectioncorrection 为 Bessel 校正因子(0=总体、1=样本),ϵ\epsilonϵ 为数值稳定小量。
ReduceStdWithMean 为 CANN 内部 L0 算子,被 aclnnStd、aclnnStdMeanCorrection、aclnnBatchNormStats 三个上层 aclnn 接口组合调用,不直接暴露独立 aclnn 接口。
| 上层接口 | 功能 | correction | invert | eps |
|---|---|---|---|---|
| aclnnStd | 独立标准差 | 用户传入 | false | — |
| aclnnStdMeanCorrection | 同时输出 (std, mean) | 用户传入 | false | 0.001(固定) |
| aclnnBatchNormStats | 输出 (mean, invstd) | 0(固定) | true | 用户传入 |
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| x | 输入 | 待计算标准差的张量。 | FLOAT16、FLOAT、BFLOAT16 | ND |
| mean | 输入 | 外部预计算均值(已广播到 x 形状),dtype 与 x 一致。 | 与 x 一致 | ND |
| y | 输出 | 输出张量,dtype 与 x 一致;shape 由 dim + keepdim 推导。 | 与 x 一致 | ND |
| dim | 可选属性 | 归约维度,范围 [-rank(x), rank(x)-1],空表示全部维度。默认 {}。 | ListInt | - |
| unbiased | 可选属性 | Bessel 校正(legacy 字段)。默认 true。 | Bool | - |
| keepdim | 可选属性 | 是否保留归约维为 size 1。默认 false。 | Bool | - |
| invert | 可选属性 | true 返回 1/sqrt(var+eps),false 返回 sqrt(var)。默认 false。 | Bool | - |
| epsilon | 可选属性 | 数值稳定项(仅 invert=true 使用)。默认 0.001。 | Float | - |
| correction | 可选属性 | 校正因子:0=总体,1=样本。默认 1。 | Int | - |
约束说明
- x 与 mean 数据类型须一致,仅支持 float16 / float32 / bfloat16;输出 dtype 与 x 一致。
- x 的 shape 维度不超过 8 维。
- mean 的 shape 须与 x 完全一致(mean 须已广播到 x 形状)。
- dim 取值范围 [-rank(x), rank(x)-1],空表示全部维度归约,且不能包含重复轴(负数轴归一化后判重)。
- 输出 y 的 shape 须与 dim + keepdim 推导结果一致。
- correction 仅支持非负整数;invert=true 时忽略 correction,固定除以 N。
- 空张量(N=0)输出 NaN;N<=correction(invert=false)输出 +Inf 或 NaN。
调用说明
| 调用方式 | 样例代码 | 说明 |
|---|---|---|
| GE图模式 | test_geir_reduce_std_with_mean.cpp | 通过 GE IR 构图调用,算子 IR 定义见 op_host/reduce_std_with_mean_def.cpp |
| aclnn API | test_aclnn_batch_norm_stats.cpp | 通过 aclnnBatchNormStats 接口方式调用ReduceStdWithMean算子。 |
| aclnn API | test_aclnn_std_mean_correction.cpp | 通过 aclnnStdMeanCorrection 接口方式调用ReduceStdWithMean算子。 |