| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
fix(add_v2,tensor_redirect,mul_no_nan): 修复推导校验并规范测试参考 Co-authored-by: raoliang_sac<raoliang4@huawei.com> # message auto-generated for no-merge-commit merge: !6947 merge fix/add-v2-tensor-redirect-validation-20261031 into master fix(add_v2,tensor_redirect,mul_no_nan): 修复推导校验并规范测试参考 Created-by: raoliang_sac Commit-by: raoliang_sac Merged-by: cann-robot Description: ## 描述 统一修复AddV2、TensorRedirect和MulNoNan的推导/参数校验,完善GEIR示例、测试参考及仓内小型ST。共27个变更文件、1个提交, experimental相对目标主线无改动。 - AddV2/TensorRedirect:修复合法rank0标量storage []/[1]等价表示被Tiling误拒绝的问题,保留非法shape/dtype校验,补InferShape rank8上限并透传首报诊断。TensorRedirect尾核仅计算实际分支长度,避免无用满块乘积溢出。 - 两份GEIR示例核对真实输出、修正节点名及Session所有权,完善失败诊断;对应Host/CPU Kernel UT保留。 - 完整引入[原PR !6971](https://gitcode.com/cann/ops-math/pull/6971)的MulNoNan提交6f1e0471275f6f1f7d08232dd823636b4a1a5279,8个文件内容与源提交逐字节一致:InferShape独立检查两个输入的rank上限,InferDataType检查四种合法dtype及同类型关系;保留广播、标量、动态shape/rank和空Tensor语义,新增负向UT。 - MulNoNan golden使用Torch完成物理dtype舍入,TensorFlow TestSpec增加FP64组合数学参考,覆盖TF CPU不支持的合法六维广播及CANN原有INT32输入域;示例支持--device-id=N,新增8条小shape仓内ST。 - 仓内ST合计4份CSV、24条,三个算子各8条。不同表头分开,相同表头在所属算子内合并;最大单Tensor约112KiB,未把GiB压力shape放入默认ST。外部测例仓库未改。 原AddV2/TensorRedirect的19个文件保持原内容,MulNoNan的8个文件完整导入,无冲突。AddV2看板中旧A2实验材料继续按来源分类,不混作A5修复;MulNoNan保留原A2/A3产品支持,不新增平台适配。 ## 关联的Issue - https://gitcode.com/cann/ops-math/issues/4378 - https://gitcode.com/cann/ops-math/issues/4387 ## 测试 先cherry-pick源提交,再squash为1提交;同一原始基点的完整binary diff及Git tree均不变。随后一次rebase到当次从官方主仓获取的master 58e411acd306ae5d391301bf2e21d25d1bf4fae5,27个文件内容均保持,相关算子/公共依赖无主线增量。最终受测提交为af1eeea72c5c773ed3fb136d9ea75d3228b9d90d。 | 验证 | 本轮结果 | |---|---| | 指定本地CI | /workspace/CI-skills/ci_local_check.sh完整通过;A5 ascend950,并发2;27文件pre-commit、隔离OAT、链接/SKIP契约及golden语法检查PASS | | 构建/UT | 三份GEIR示例syntax-only、三算子定向包及package/Host loader GE依赖检查PASS;Host UT 151/151、Graph UT 6/6、TensorRedirect CPU Kernel UT 2/2。API阶段0例,不计实际UT通过 | | 运行包来源 | 安装本轮CI生成的标准.run,177个payload文件SHA256全部一致,含17个预编译对象及三个算子注册信息;未使用旧包冒充本轮构建 | | 组合仓内ST | 三算子24/24 binary Kernel通过,全部BINARY_MATCH;MulNoNan另8/8 static Kernel及8/8 GEIR数值通过,共40次执行 | | 原修复证据 | AddV2/TensorRedirect前期128条NPU正向、两份C++示例实机完整输出/文件失败路径分别保留,不与本轮执行次数直接累加;MulNoNan原PR更广的历史验证在源PR记录,本轮不冒称重跑 | 实机Ascend950PR_9579/device0,使用当前任务独立CANN_Revise 9.3.0和干净的任务TTK 5a7337679b3a4a1cf8a1346392adc9a65cfd378f;每次TTK显式--pc=1,golden来自各算子代码仓。 本地缺GPU/XPU端点,命令显式--compare binary比较导入后的CPU golden;有限值按binary_equal核对,TTK对双方NaN位置一致的元素判相等,不宣称NaN payload逐位一致或默认GPU cross_check已通过。GEIR是数值验证,不当作独立运行时rank元数据dump或全部清理故障路径验证。本轮仅A5实机/CI,源PR已有其他产品证据不作为本轮新增测试。MulNoNan直接Kernel 0D在线编译问题、性能、完整L0/L1及全部资源故障均不在此次合并的通过结论中。已向同一受测SHA提交[compile触发线上CI](https://gitcode.com/cann/ops-math/merge_requests/6947#note_197811371);[线上流水线](https://gitcode.com/CANN/ops-math/actions/runs/42aadc4ec89646c2888de81d318470cb)已启动,结果待出,不由本地通过推断。 ## 文档更新 - AddV2/TensorRedirect继续保留所有原产品能力,按用户指引保留格式整改和删除冗余范围声明;没有重新添加当前源码/实测平台范围提示。 - MulNoNan README完整保留源PR内容:全局rank8及动态rank运行时上限表述、产品差异列表和必要设备选择参数;保留原A2/A3支持,不因内部TestSpec增加用户接口声明。 - 组合提交的来源、测试范围及限制写入本PR与任务独立验证记录。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [x] 其他,请描述:合并MulNoNan测试参考/负向UT及小型ST See merge request: cann/ops-math!6947 | 10 天前 | |
迁移开源TF插件--math Co-authored-by: yaochen<yaochen15@huawei.com> # message auto-generated for no-merge-commit merge: !4308 merge transfer-math into master 迁移开源TF插件--math Created-by: nextyale Commit-by: yaochen Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:迁移TF插件 See merge request: cann/ops-math!4308 | 3 个月前 | |
fix(add_v2,tensor_redirect,mul_no_nan): 修复推导校验并规范测试参考 Co-authored-by: raoliang_sac<raoliang4@huawei.com> # message auto-generated for no-merge-commit merge: !6947 merge fix/add-v2-tensor-redirect-validation-20261031 into master fix(add_v2,tensor_redirect,mul_no_nan): 修复推导校验并规范测试参考 Created-by: raoliang_sac Commit-by: raoliang_sac Merged-by: cann-robot Description: ## 描述 统一修复AddV2、TensorRedirect和MulNoNan的推导/参数校验,完善GEIR示例、测试参考及仓内小型ST。共27个变更文件、1个提交, experimental相对目标主线无改动。 - AddV2/TensorRedirect:修复合法rank0标量storage []/[1]等价表示被Tiling误拒绝的问题,保留非法shape/dtype校验,补InferShape rank8上限并透传首报诊断。TensorRedirect尾核仅计算实际分支长度,避免无用满块乘积溢出。 - 两份GEIR示例核对真实输出、修正节点名及Session所有权,完善失败诊断;对应Host/CPU Kernel UT保留。 - 完整引入[原PR !6971](https://gitcode.com/cann/ops-math/pull/6971)的MulNoNan提交6f1e0471275f6f1f7d08232dd823636b4a1a5279,8个文件内容与源提交逐字节一致:InferShape独立检查两个输入的rank上限,InferDataType检查四种合法dtype及同类型关系;保留广播、标量、动态shape/rank和空Tensor语义,新增负向UT。 - MulNoNan golden使用Torch完成物理dtype舍入,TensorFlow TestSpec增加FP64组合数学参考,覆盖TF CPU不支持的合法六维广播及CANN原有INT32输入域;示例支持--device-id=N,新增8条小shape仓内ST。 - 仓内ST合计4份CSV、24条,三个算子各8条。不同表头分开,相同表头在所属算子内合并;最大单Tensor约112KiB,未把GiB压力shape放入默认ST。外部测例仓库未改。 原AddV2/TensorRedirect的19个文件保持原内容,MulNoNan的8个文件完整导入,无冲突。AddV2看板中旧A2实验材料继续按来源分类,不混作A5修复;MulNoNan保留原A2/A3产品支持,不新增平台适配。 ## 关联的Issue - https://gitcode.com/cann/ops-math/issues/4378 - https://gitcode.com/cann/ops-math/issues/4387 ## 测试 先cherry-pick源提交,再squash为1提交;同一原始基点的完整binary diff及Git tree均不变。随后一次rebase到当次从官方主仓获取的master 58e411acd306ae5d391301bf2e21d25d1bf4fae5,27个文件内容均保持,相关算子/公共依赖无主线增量。最终受测提交为af1eeea72c5c773ed3fb136d9ea75d3228b9d90d。 | 验证 | 本轮结果 | |---|---| | 指定本地CI | /workspace/CI-skills/ci_local_check.sh完整通过;A5 ascend950,并发2;27文件pre-commit、隔离OAT、链接/SKIP契约及golden语法检查PASS | | 构建/UT | 三份GEIR示例syntax-only、三算子定向包及package/Host loader GE依赖检查PASS;Host UT 151/151、Graph UT 6/6、TensorRedirect CPU Kernel UT 2/2。API阶段0例,不计实际UT通过 | | 运行包来源 | 安装本轮CI生成的标准.run,177个payload文件SHA256全部一致,含17个预编译对象及三个算子注册信息;未使用旧包冒充本轮构建 | | 组合仓内ST | 三算子24/24 binary Kernel通过,全部BINARY_MATCH;MulNoNan另8/8 static Kernel及8/8 GEIR数值通过,共40次执行 | | 原修复证据 | AddV2/TensorRedirect前期128条NPU正向、两份C++示例实机完整输出/文件失败路径分别保留,不与本轮执行次数直接累加;MulNoNan原PR更广的历史验证在源PR记录,本轮不冒称重跑 | 实机Ascend950PR_9579/device0,使用当前任务独立CANN_Revise 9.3.0和干净的任务TTK 5a7337679b3a4a1cf8a1346392adc9a65cfd378f;每次TTK显式--pc=1,golden来自各算子代码仓。 本地缺GPU/XPU端点,命令显式--compare binary比较导入后的CPU golden;有限值按binary_equal核对,TTK对双方NaN位置一致的元素判相等,不宣称NaN payload逐位一致或默认GPU cross_check已通过。GEIR是数值验证,不当作独立运行时rank元数据dump或全部清理故障路径验证。本轮仅A5实机/CI,源PR已有其他产品证据不作为本轮新增测试。MulNoNan直接Kernel 0D在线编译问题、性能、完整L0/L1及全部资源故障均不在此次合并的通过结论中。已向同一受测SHA提交[compile触发线上CI](https://gitcode.com/cann/ops-math/merge_requests/6947#note_197811371);[线上流水线](https://gitcode.com/CANN/ops-math/actions/runs/42aadc4ec89646c2888de81d318470cb)已启动,结果待出,不由本地通过推断。 ## 文档更新 - AddV2/TensorRedirect继续保留所有原产品能力,按用户指引保留格式整改和删除冗余范围声明;没有重新添加当前源码/实测平台范围提示。 - MulNoNan README完整保留源PR内容:全局rank8及动态rank运行时上限表述、产品差异列表和必要设备选择参数;保留原A2/A3支持,不因内部TestSpec增加用户接口声明。 - 组合提交的来源、测试范围及限制写入本PR与任务独立验证记录。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [x] 其他,请描述:合并MulNoNan测试参考/负向UT及小型ST See merge request: cann/ops-math!6947 | 10 天前 | |
fix(add_v2,tensor_redirect,mul_no_nan): 修复推导校验并规范测试参考 Co-authored-by: raoliang_sac<raoliang4@huawei.com> # message auto-generated for no-merge-commit merge: !6947 merge fix/add-v2-tensor-redirect-validation-20261031 into master fix(add_v2,tensor_redirect,mul_no_nan): 修复推导校验并规范测试参考 Created-by: raoliang_sac Commit-by: raoliang_sac Merged-by: cann-robot Description: ## 描述 统一修复AddV2、TensorRedirect和MulNoNan的推导/参数校验,完善GEIR示例、测试参考及仓内小型ST。共27个变更文件、1个提交, experimental相对目标主线无改动。 - AddV2/TensorRedirect:修复合法rank0标量storage []/[1]等价表示被Tiling误拒绝的问题,保留非法shape/dtype校验,补InferShape rank8上限并透传首报诊断。TensorRedirect尾核仅计算实际分支长度,避免无用满块乘积溢出。 - 两份GEIR示例核对真实输出、修正节点名及Session所有权,完善失败诊断;对应Host/CPU Kernel UT保留。 - 完整引入[原PR !6971](https://gitcode.com/cann/ops-math/pull/6971)的MulNoNan提交6f1e0471275f6f1f7d08232dd823636b4a1a5279,8个文件内容与源提交逐字节一致:InferShape独立检查两个输入的rank上限,InferDataType检查四种合法dtype及同类型关系;保留广播、标量、动态shape/rank和空Tensor语义,新增负向UT。 - MulNoNan golden使用Torch完成物理dtype舍入,TensorFlow TestSpec增加FP64组合数学参考,覆盖TF CPU不支持的合法六维广播及CANN原有INT32输入域;示例支持--device-id=N,新增8条小shape仓内ST。 - 仓内ST合计4份CSV、24条,三个算子各8条。不同表头分开,相同表头在所属算子内合并;最大单Tensor约112KiB,未把GiB压力shape放入默认ST。外部测例仓库未改。 原AddV2/TensorRedirect的19个文件保持原内容,MulNoNan的8个文件完整导入,无冲突。AddV2看板中旧A2实验材料继续按来源分类,不混作A5修复;MulNoNan保留原A2/A3产品支持,不新增平台适配。 ## 关联的Issue - https://gitcode.com/cann/ops-math/issues/4378 - https://gitcode.com/cann/ops-math/issues/4387 ## 测试 先cherry-pick源提交,再squash为1提交;同一原始基点的完整binary diff及Git tree均不变。随后一次rebase到当次从官方主仓获取的master 58e411acd306ae5d391301bf2e21d25d1bf4fae5,27个文件内容均保持,相关算子/公共依赖无主线增量。最终受测提交为af1eeea72c5c773ed3fb136d9ea75d3228b9d90d。 | 验证 | 本轮结果 | |---|---| | 指定本地CI | /workspace/CI-skills/ci_local_check.sh完整通过;A5 ascend950,并发2;27文件pre-commit、隔离OAT、链接/SKIP契约及golden语法检查PASS | | 构建/UT | 三份GEIR示例syntax-only、三算子定向包及package/Host loader GE依赖检查PASS;Host UT 151/151、Graph UT 6/6、TensorRedirect CPU Kernel UT 2/2。API阶段0例,不计实际UT通过 | | 运行包来源 | 安装本轮CI生成的标准.run,177个payload文件SHA256全部一致,含17个预编译对象及三个算子注册信息;未使用旧包冒充本轮构建 | | 组合仓内ST | 三算子24/24 binary Kernel通过,全部BINARY_MATCH;MulNoNan另8/8 static Kernel及8/8 GEIR数值通过,共40次执行 | | 原修复证据 | AddV2/TensorRedirect前期128条NPU正向、两份C++示例实机完整输出/文件失败路径分别保留,不与本轮执行次数直接累加;MulNoNan原PR更广的历史验证在源PR记录,本轮不冒称重跑 | 实机Ascend950PR_9579/device0,使用当前任务独立CANN_Revise 9.3.0和干净的任务TTK 5a7337679b3a4a1cf8a1346392adc9a65cfd378f;每次TTK显式--pc=1,golden来自各算子代码仓。 本地缺GPU/XPU端点,命令显式--compare binary比较导入后的CPU golden;有限值按binary_equal核对,TTK对双方NaN位置一致的元素判相等,不宣称NaN payload逐位一致或默认GPU cross_check已通过。GEIR是数值验证,不当作独立运行时rank元数据dump或全部清理故障路径验证。本轮仅A5实机/CI,源PR已有其他产品证据不作为本轮新增测试。MulNoNan直接Kernel 0D在线编译问题、性能、完整L0/L1及全部资源故障均不在此次合并的通过结论中。已向同一受测SHA提交[compile触发线上CI](https://gitcode.com/cann/ops-math/merge_requests/6947#note_197811371);[线上流水线](https://gitcode.com/CANN/ops-math/actions/runs/42aadc4ec89646c2888de81d318470cb)已启动,结果待出,不由本地通过推断。 ## 文档更新 - AddV2/TensorRedirect继续保留所有原产品能力,按用户指引保留格式整改和删除冗余范围声明;没有重新添加当前源码/实测平台范围提示。 - MulNoNan README完整保留源PR内容:全局rank8及动态rank运行时上限表述、产品差异列表和必要设备选择参数;保留原A2/A3支持,不因内部TestSpec增加用户接口声明。 - 组合提交的来源、测试范围及限制写入本PR与任务独立验证记录。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [x] 其他,请描述:合并MulNoNan测试参考/负向UT及小型ST See merge request: cann/ops-math!6947 | 10 天前 | |
feat: 新增 MulNoNan/FusedMulAdd/FusedMulAddAdd 三个 element-wise 算子(Ascend 950) Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !3022 merge feat/mul-fused-ops into master feat: 新增 MulNoNan/FusedMulAdd/FusedMulAddAdd 三个 element-wise 算子(Ascend 950) Created-by: pingchuantang Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 本 PR 在 math/ 下新增三个面向 Ascend 950(dav-3510 / Atlas 350 加速卡)的 element-wise 算子,均为纯新增(42 个文件,+4198),不修改任何既有算子。 ### MulNoNan(二元安全乘法) - 功能:屏蔽 Mul 中 0·inf=NaN、0·NaN=NaN 两类异常为 0,仅判 x2 一侧(x2==0 输出 0,-0 同样进零臂);等价 TensorFlow tf.math.multiply_no_nans。 - dtype:FLOAT16 / FLOAT / INT32 / BFLOAT16;fp16/bf16 提升 fp32 中间精度做 Compare(NE)+Select,末端 CAST_MODE_RINT 回退。 ### FusedMulAdd(三元融合 y = x1*x2 + x3) - 功能:将 Mul→Add 子图融合为单次 kernel 启动,减少一次 GM 中间数据搬运。 - dtype:FLOAT16 / FLOAT / INT32;浮点通路在 fp32 中间精度下用 Vec::Mul + Vec::Add(刻意不使用 Vec::FusedMulAdd,因其底层 in-place 写回 src2 buffer,在 broadcast 大 tensor 跨 tile 复用输入 UB 时会污染下一 tile 输入导致精度错误)。 ### FusedMulAddAdd(四元融合 y = x1*x2 + x3 + x4) - 功能:将 Mul→Add→Add 子图融合为单次 kernel 启动,减少两次 GM 中间数据搬运,常用于 BatchMatmul + bias + residual 模式。 - dtype:FLOAT16 / FLOAT / INT32(不支持 bf16);浮点通路 fp32 中间精度 Vec::Mul + Vec::Add + Vec::Add,计算顺序 ((x1*x2)+x3)+x4 固定不可交换。 三者共性:仅 Ascend 950 实现,kernel 为 AIV_ONLY;InferShape 复用 Ops::Base::InferShape4Broadcast,Tiling 复用 Ops::Base::BroadcastBaseTiling;支持任意 NumPy 广播、动态 shape / 动态 rank;各输入与输出须为同一 dtype(不支持 mix-dtype)。 ## 关联的Issue - #1733 https://gitcode.com/cann/ops-math/issues/1733 ## 测试 - InferShape UT:tests/ut/op_host/test_*_infershape.cpp(每算子一份) - Tiling UT:tests/ut/op_host/arch35/test_*_tiling.cpp(每算子一份) - 图模式样例:examples/test_geir_*.cpp,覆盖 fp32/fp16/bf16/int32 基础用例;MulNoNan 另覆盖 0·inf、0·NaN、-0、广播等特殊值 - golden 对标:tests/assets/golden.py ## 文档更新 - 每个算子新增 README.md(功能说明、参数、约束、实现方案、调用样例) ## 类型标签 - [x] 新特性 See merge request: cann/ops-math!3022 | 5 个月前 | |
fix(add_v2,tensor_redirect,mul_no_nan): 修复推导校验并规范测试参考 Co-authored-by: raoliang_sac<raoliang4@huawei.com> # message auto-generated for no-merge-commit merge: !6947 merge fix/add-v2-tensor-redirect-validation-20261031 into master fix(add_v2,tensor_redirect,mul_no_nan): 修复推导校验并规范测试参考 Created-by: raoliang_sac Commit-by: raoliang_sac Merged-by: cann-robot Description: ## 描述 统一修复AddV2、TensorRedirect和MulNoNan的推导/参数校验,完善GEIR示例、测试参考及仓内小型ST。共27个变更文件、1个提交, experimental相对目标主线无改动。 - AddV2/TensorRedirect:修复合法rank0标量storage []/[1]等价表示被Tiling误拒绝的问题,保留非法shape/dtype校验,补InferShape rank8上限并透传首报诊断。TensorRedirect尾核仅计算实际分支长度,避免无用满块乘积溢出。 - 两份GEIR示例核对真实输出、修正节点名及Session所有权,完善失败诊断;对应Host/CPU Kernel UT保留。 - 完整引入[原PR !6971](https://gitcode.com/cann/ops-math/pull/6971)的MulNoNan提交6f1e0471275f6f1f7d08232dd823636b4a1a5279,8个文件内容与源提交逐字节一致:InferShape独立检查两个输入的rank上限,InferDataType检查四种合法dtype及同类型关系;保留广播、标量、动态shape/rank和空Tensor语义,新增负向UT。 - MulNoNan golden使用Torch完成物理dtype舍入,TensorFlow TestSpec增加FP64组合数学参考,覆盖TF CPU不支持的合法六维广播及CANN原有INT32输入域;示例支持--device-id=N,新增8条小shape仓内ST。 - 仓内ST合计4份CSV、24条,三个算子各8条。不同表头分开,相同表头在所属算子内合并;最大单Tensor约112KiB,未把GiB压力shape放入默认ST。外部测例仓库未改。 原AddV2/TensorRedirect的19个文件保持原内容,MulNoNan的8个文件完整导入,无冲突。AddV2看板中旧A2实验材料继续按来源分类,不混作A5修复;MulNoNan保留原A2/A3产品支持,不新增平台适配。 ## 关联的Issue - https://gitcode.com/cann/ops-math/issues/4378 - https://gitcode.com/cann/ops-math/issues/4387 ## 测试 先cherry-pick源提交,再squash为1提交;同一原始基点的完整binary diff及Git tree均不变。随后一次rebase到当次从官方主仓获取的master 58e411acd306ae5d391301bf2e21d25d1bf4fae5,27个文件内容均保持,相关算子/公共依赖无主线增量。最终受测提交为af1eeea72c5c773ed3fb136d9ea75d3228b9d90d。 | 验证 | 本轮结果 | |---|---| | 指定本地CI | /workspace/CI-skills/ci_local_check.sh完整通过;A5 ascend950,并发2;27文件pre-commit、隔离OAT、链接/SKIP契约及golden语法检查PASS | | 构建/UT | 三份GEIR示例syntax-only、三算子定向包及package/Host loader GE依赖检查PASS;Host UT 151/151、Graph UT 6/6、TensorRedirect CPU Kernel UT 2/2。API阶段0例,不计实际UT通过 | | 运行包来源 | 安装本轮CI生成的标准.run,177个payload文件SHA256全部一致,含17个预编译对象及三个算子注册信息;未使用旧包冒充本轮构建 | | 组合仓内ST | 三算子24/24 binary Kernel通过,全部BINARY_MATCH;MulNoNan另8/8 static Kernel及8/8 GEIR数值通过,共40次执行 | | 原修复证据 | AddV2/TensorRedirect前期128条NPU正向、两份C++示例实机完整输出/文件失败路径分别保留,不与本轮执行次数直接累加;MulNoNan原PR更广的历史验证在源PR记录,本轮不冒称重跑 | 实机Ascend950PR_9579/device0,使用当前任务独立CANN_Revise 9.3.0和干净的任务TTK 5a7337679b3a4a1cf8a1346392adc9a65cfd378f;每次TTK显式--pc=1,golden来自各算子代码仓。 本地缺GPU/XPU端点,命令显式--compare binary比较导入后的CPU golden;有限值按binary_equal核对,TTK对双方NaN位置一致的元素判相等,不宣称NaN payload逐位一致或默认GPU cross_check已通过。GEIR是数值验证,不当作独立运行时rank元数据dump或全部清理故障路径验证。本轮仅A5实机/CI,源PR已有其他产品证据不作为本轮新增测试。MulNoNan直接Kernel 0D在线编译问题、性能、完整L0/L1及全部资源故障均不在此次合并的通过结论中。已向同一受测SHA提交[compile触发线上CI](https://gitcode.com/cann/ops-math/merge_requests/6947#note_197811371);[线上流水线](https://gitcode.com/CANN/ops-math/actions/runs/42aadc4ec89646c2888de81d318470cb)已启动,结果待出,不由本地通过推断。 ## 文档更新 - AddV2/TensorRedirect继续保留所有原产品能力,按用户指引保留格式整改和删除冗余范围声明;没有重新添加当前源码/实测平台范围提示。 - MulNoNan README完整保留源PR内容:全局rank8及动态rank运行时上限表述、产品差异列表和必要设备选择参数;保留原A2/A3支持,不因内部TestSpec增加用户接口声明。 - 组合提交的来源、测试范围及限制写入本PR与任务独立验证记录。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [x] 其他,请描述:合并MulNoNan测试参考/负向UT及小型ST See merge request: cann/ops-math!6947 | 10 天前 | |
feat: 新增 MulNoNan/FusedMulAdd/FusedMulAddAdd 三个 element-wise 算子(Ascend 950) Co-authored-by: tangpingchuan<tangpingchuan@huawei.com> # message auto-generated for no-merge-commit merge: !3022 merge feat/mul-fused-ops into master feat: 新增 MulNoNan/FusedMulAdd/FusedMulAddAdd 三个 element-wise 算子(Ascend 950) Created-by: pingchuantang Commit-by: tangpingchuan Merged-by: cann-robot Description: ## 描述 本 PR 在 math/ 下新增三个面向 Ascend 950(dav-3510 / Atlas 350 加速卡)的 element-wise 算子,均为纯新增(42 个文件,+4198),不修改任何既有算子。 ### MulNoNan(二元安全乘法) - 功能:屏蔽 Mul 中 0·inf=NaN、0·NaN=NaN 两类异常为 0,仅判 x2 一侧(x2==0 输出 0,-0 同样进零臂);等价 TensorFlow tf.math.multiply_no_nans。 - dtype:FLOAT16 / FLOAT / INT32 / BFLOAT16;fp16/bf16 提升 fp32 中间精度做 Compare(NE)+Select,末端 CAST_MODE_RINT 回退。 ### FusedMulAdd(三元融合 y = x1*x2 + x3) - 功能:将 Mul→Add 子图融合为单次 kernel 启动,减少一次 GM 中间数据搬运。 - dtype:FLOAT16 / FLOAT / INT32;浮点通路在 fp32 中间精度下用 Vec::Mul + Vec::Add(刻意不使用 Vec::FusedMulAdd,因其底层 in-place 写回 src2 buffer,在 broadcast 大 tensor 跨 tile 复用输入 UB 时会污染下一 tile 输入导致精度错误)。 ### FusedMulAddAdd(四元融合 y = x1*x2 + x3 + x4) - 功能:将 Mul→Add→Add 子图融合为单次 kernel 启动,减少两次 GM 中间数据搬运,常用于 BatchMatmul + bias + residual 模式。 - dtype:FLOAT16 / FLOAT / INT32(不支持 bf16);浮点通路 fp32 中间精度 Vec::Mul + Vec::Add + Vec::Add,计算顺序 ((x1*x2)+x3)+x4 固定不可交换。 三者共性:仅 Ascend 950 实现,kernel 为 AIV_ONLY;InferShape 复用 Ops::Base::InferShape4Broadcast,Tiling 复用 Ops::Base::BroadcastBaseTiling;支持任意 NumPy 广播、动态 shape / 动态 rank;各输入与输出须为同一 dtype(不支持 mix-dtype)。 ## 关联的Issue - #1733 https://gitcode.com/cann/ops-math/issues/1733 ## 测试 - InferShape UT:tests/ut/op_host/test_*_infershape.cpp(每算子一份) - Tiling UT:tests/ut/op_host/arch35/test_*_tiling.cpp(每算子一份) - 图模式样例:examples/test_geir_*.cpp,覆盖 fp32/fp16/bf16/int32 基础用例;MulNoNan 另覆盖 0·inf、0·NaN、-0、广播等特殊值 - golden 对标:tests/assets/golden.py ## 文档更新 - 每个算子新增 README.md(功能说明、参数、约束、实现方案、调用样例) ## 类型标签 - [x] 新特性 See merge request: cann/ops-math!3022 | 5 个月前 | |
fix(add_v2,tensor_redirect,mul_no_nan): 修复推导校验并规范测试参考 Co-authored-by: raoliang_sac<raoliang4@huawei.com> # message auto-generated for no-merge-commit merge: !6947 merge fix/add-v2-tensor-redirect-validation-20261031 into master fix(add_v2,tensor_redirect,mul_no_nan): 修复推导校验并规范测试参考 Created-by: raoliang_sac Commit-by: raoliang_sac Merged-by: cann-robot Description: ## 描述 统一修复AddV2、TensorRedirect和MulNoNan的推导/参数校验,完善GEIR示例、测试参考及仓内小型ST。共27个变更文件、1个提交, experimental相对目标主线无改动。 - AddV2/TensorRedirect:修复合法rank0标量storage []/[1]等价表示被Tiling误拒绝的问题,保留非法shape/dtype校验,补InferShape rank8上限并透传首报诊断。TensorRedirect尾核仅计算实际分支长度,避免无用满块乘积溢出。 - 两份GEIR示例核对真实输出、修正节点名及Session所有权,完善失败诊断;对应Host/CPU Kernel UT保留。 - 完整引入[原PR !6971](https://gitcode.com/cann/ops-math/pull/6971)的MulNoNan提交6f1e0471275f6f1f7d08232dd823636b4a1a5279,8个文件内容与源提交逐字节一致:InferShape独立检查两个输入的rank上限,InferDataType检查四种合法dtype及同类型关系;保留广播、标量、动态shape/rank和空Tensor语义,新增负向UT。 - MulNoNan golden使用Torch完成物理dtype舍入,TensorFlow TestSpec增加FP64组合数学参考,覆盖TF CPU不支持的合法六维广播及CANN原有INT32输入域;示例支持--device-id=N,新增8条小shape仓内ST。 - 仓内ST合计4份CSV、24条,三个算子各8条。不同表头分开,相同表头在所属算子内合并;最大单Tensor约112KiB,未把GiB压力shape放入默认ST。外部测例仓库未改。 原AddV2/TensorRedirect的19个文件保持原内容,MulNoNan的8个文件完整导入,无冲突。AddV2看板中旧A2实验材料继续按来源分类,不混作A5修复;MulNoNan保留原A2/A3产品支持,不新增平台适配。 ## 关联的Issue - https://gitcode.com/cann/ops-math/issues/4378 - https://gitcode.com/cann/ops-math/issues/4387 ## 测试 先cherry-pick源提交,再squash为1提交;同一原始基点的完整binary diff及Git tree均不变。随后一次rebase到当次从官方主仓获取的master 58e411acd306ae5d391301bf2e21d25d1bf4fae5,27个文件内容均保持,相关算子/公共依赖无主线增量。最终受测提交为af1eeea72c5c773ed3fb136d9ea75d3228b9d90d。 | 验证 | 本轮结果 | |---|---| | 指定本地CI | /workspace/CI-skills/ci_local_check.sh完整通过;A5 ascend950,并发2;27文件pre-commit、隔离OAT、链接/SKIP契约及golden语法检查PASS | | 构建/UT | 三份GEIR示例syntax-only、三算子定向包及package/Host loader GE依赖检查PASS;Host UT 151/151、Graph UT 6/6、TensorRedirect CPU Kernel UT 2/2。API阶段0例,不计实际UT通过 | | 运行包来源 | 安装本轮CI生成的标准.run,177个payload文件SHA256全部一致,含17个预编译对象及三个算子注册信息;未使用旧包冒充本轮构建 | | 组合仓内ST | 三算子24/24 binary Kernel通过,全部BINARY_MATCH;MulNoNan另8/8 static Kernel及8/8 GEIR数值通过,共40次执行 | | 原修复证据 | AddV2/TensorRedirect前期128条NPU正向、两份C++示例实机完整输出/文件失败路径分别保留,不与本轮执行次数直接累加;MulNoNan原PR更广的历史验证在源PR记录,本轮不冒称重跑 | 实机Ascend950PR_9579/device0,使用当前任务独立CANN_Revise 9.3.0和干净的任务TTK 5a7337679b3a4a1cf8a1346392adc9a65cfd378f;每次TTK显式--pc=1,golden来自各算子代码仓。 本地缺GPU/XPU端点,命令显式--compare binary比较导入后的CPU golden;有限值按binary_equal核对,TTK对双方NaN位置一致的元素判相等,不宣称NaN payload逐位一致或默认GPU cross_check已通过。GEIR是数值验证,不当作独立运行时rank元数据dump或全部清理故障路径验证。本轮仅A5实机/CI,源PR已有其他产品证据不作为本轮新增测试。MulNoNan直接Kernel 0D在线编译问题、性能、完整L0/L1及全部资源故障均不在此次合并的通过结论中。已向同一受测SHA提交[compile触发线上CI](https://gitcode.com/cann/ops-math/merge_requests/6947#note_197811371);[线上流水线](https://gitcode.com/CANN/ops-math/actions/runs/42aadc4ec89646c2888de81d318470cb)已启动,结果待出,不由本地通过推断。 ## 文档更新 - AddV2/TensorRedirect继续保留所有原产品能力,按用户指引保留格式整改和删除冗余范围声明;没有重新添加当前源码/实测平台范围提示。 - MulNoNan README完整保留源PR内容:全局rank8及动态rank运行时上限表述、产品差异列表和必要设备选择参数;保留原A2/A3支持,不因内部TestSpec增加用户接口声明。 - 组合提交的来源、测试范围及限制写入本PR与任务独立验证记录。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [x] 其他,请描述:合并MulNoNan测试参考/负向UT及小型ST See merge request: cann/ops-math!6947 | 10 天前 |
MulNoNan
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR&950DT系列产品 | √ |
| Atlas A3系列产品 | √ |
| Atlas A2系列产品 | √ |
| Atlas 200I/500 A2推理产品 | × |
| Atlas推理系列产品 | × |
| Atlas训练系列产品 | × |
功能说明
-
算子功能:完成安全乘法计算,当x2为0时返回0,从而屏蔽
0 * inf = NaN、0 * NaN = NaN两类异常。浮点类型的语义对应TensorFlow的tf.math.multiply_no_nan,INT32按相同判零规则计算。 -
计算公式:
y={0,if x2=0x1×x2,if x2≠0y = \begin{cases} 0, & \text{if } x2 = 0 \\ x1 \times x2, & \text{if } x2 \neq 0 \end{cases} y={0,x1×x2,if x2=0if x2=0
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| x1 | 输入 | 公式中的乘法输入张量x1。 | FLOAT16、FLOAT、INT32、BFLOAT16 | ND |
| x2 | 输入 | 公式中的乘法输入张量x2,作为判0主体,shape需与x1可广播。 | 同x1 | ND |
| y | 输出 | 公式中的输出张量y,shape为x1、x2广播后的统一形状。 | 同x1 | ND |
约束说明
- x1、x2、y必须为同一种数据类型,不支持混合数据类型。
- 仅判x2一侧,
x2 = -0同样进入零臂(IEEE-754-0 == 0);x2 != 0时所有IEEE行为按普通乘法保留(NaN / Inf正常传播)。 - x1、x2的维度数均不超过8。在该范围内支持NumPy广播(含标量、单维broadcast、跨rank broadcast),支持动态shape与动态rank;运行时确定的维度数也须满足上述上限。
- Ascend 950PR&950DT系列产品:
- GE图模式支持满足广播关系的空Tensor,输出保持广播后的shape,元素数为0。
实现方案
| 层 | 文件 | 说明 |
|---|---|---|
| 计算图原型 | op_graph/mul_no_nan_proto.h |
REG_OP(MulNoNan),二输入一输出 |
| 算子定义 | op_host/mul_no_nan_def.cpp |
OpDef::AddConfig("ascend950", ...) |
| InferShape | op_host/mul_no_nan_infershape.cpp |
复用Ops::Base::InferShape4Broadcast |
| Tiling | op_host/arch35/mul_no_nan_tiling_arch35.{h,cpp} |
按dtype分支调用Ops::Base::BroadcastBaseTiling<OpDag> |
| DAG | op_kernel/arch35/mul_no_nan_dag.h |
fp32/int32通路原生计算;fp16/bf16通路提升fp32中间精度 |
| Struct | op_kernel/arch35/mul_no_nan_struct.h |
BRC_TEMP_SCH_MODE_KEY_DECL/SEL |
| Kernel入口 | op_kernel/mul_no_nan_apt.cpp |
KERNEL_TASK_TYPE_DEFAULT(KERNEL_TYPE_AIV_ONLY) + BroadcastSch<schMode, OpDag> |
fp32 / int32通路
In0/In1 -- CopyInBrc --+
+-- Mul(x1,x2) --+
+-- Select(mask, MulRes, Zero) -- CopyOut -- Out0
Const(0) -- Duplicate -- Zero --+
|
+-- Compare(NE, x2, Zero) -- mask
Vec::Compare<u8, T, NE>输出位掩码,Vec::Select<u8, T, TENSOR_TENSOR>按
mask ? MulRes : Zero逐元素选择。x2 == 0时即使MulRes是NaN(0 · inf
/ 0 · NaN)也被Select丢弃,输出0。
fp16 / bf16通路
In0/In1 -- CopyInBrc -- Cast(->fp32) --+
+-- Mul --+
+-- Select -- Cast(->T,RINT) -- CopyOut -- Out0
Const(0,fp32) -- Duplicate -- Zero --+
|
+-- Compare(NE) -- mask
把fp16 / bf16整体提升到fp32做cmp/sel/mul,末端用CAST_MODE_RINT
(round-to-nearest-even)回退。原因:
- 与DSL
mul_no_nan.py在fp16vcmpsel不可用时fallback到fp32的行为一致; - 避免fp16中间溢出(如
3e4 · 3e4在fp16中先inf再被select处理会 引入额外的saturation不确定性),fp32中间有充足动态范围。
调用说明
| 调用方式 | 样例代码 | 说明 |
|---|---|---|
| GE图模式 | test_geir_mul_no_nan | 通过算子IR构图方式调用MulNoNan算子,样例可通过--device-id=N选择设备。 |