| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
fix(golden): 规范 AddV2、MulNoNan 和 TensorRedirect 三腿参考 Co-authored-by: raoliang_sac<raoliang4@huawei.com> # message auto-generated for no-merge-commit merge: !6247 merge fix/golden-three-leg-contract-20261012 into master fix(golden): 规范 AddV2、MulNoNan 和 TensorRedirect 三腿参考 Created-by: raoliang_sac Commit-by: raoliang_sac Merged-by: cann-robot Description: ## 描述 修正 AddV2、MulNoNan、TensorRedirect 的 Golden,使其遵循 TTK 三腿比对与 Golden 编写规范。仅修改 3 个 tests/assets/golden.py。 - CPU Promote 不做输入或输出精度转换;AddV2 的 BF16 桥接改为位视图,普通模式及 GPU 标杆的 FP16/BF16 跟随 kernel 在 FP32 计算后窄回。 - MulNoNan kernel/GEIR 的 CPU Golden 使用 TensorFlow 原生浮点 API,int32 使用 TF 乘法与 Select 组合,保留原有溢出和第二输入为零的掩码语义。 - MulNoNan TF E2E 复用 TTK 默认 CPU 原生 TF 通路及框架 Promote,GPU 标杆改为 Torch,并使用 TF API 的 x/y 形参名适配按名绑定。 - 移除三个算子的 TF GPU provider。TensorRedirect 的计算与逐位拷贝逻辑不变,全部 dtype tolerance 和 legacy 注册保留。 - 算子实现、Host、Parser 和 TTK 均无改动。 ## 关联的Issue Closes #3496 https://gitcode.com/cann/ops-math/issues/3496 ## 测试 - Golden CPU 回归 248/248 通过,基线为 f53b52a3e7deaedca104d82c453c99900de60b25。 - 同一固定输入运行主线和整改版,并用独立参考校验整改结果;覆盖全部声明 dtype、Promote FP32/FP64、广播、标量、非连续和空输入、整数溢出、NaN/Inf 与零。 - TensorRedirect 覆盖 11 种 dtype,逐位检查负零、NaN payload 和非规格化数。 - 使用当前工作目录 TTK 的真实 TestSpec loader、参数绑定和 CPU Golden 模块检查注册、完整 dtype tolerance、MulNoNan TF E2E 的普通及 Promote 默认通路。 - pre-commit run --files <本次3个golden.py>、git diff --check 通过。 - Torch GPU 标杆的 Python 组合在 CPU 执行验证;未执行 NPU/远程 GPU、算子性能或算子精度测试。本轮本地 CI 结果见下文。 预期变化:MulNoNan Promote 的 FP64 乘积不再经过 FP32 舍入;TF E2E 普通模式不再无条件升精度。一般浮点算术的 NaN payload 不作为一致性要求,TensorRedirect 仍严格逐位相等。 ## 文档更新 当前工作目录保留整改报告、主线 Golden 快照、可复现脚本和逐项结果;仓库文档未修改。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## 输入输出自查 修复 MulNoNan 在标量输入下返回 NumPy scalar 的兼容问题,使用 np.asarray(output.numpy()) 保持原来的零维 ndarray,不转换 dtype 或改变数值。新增 legacy/Spec 的签名、返回容器、输出数量/顺序/shape/dtype、输入不被改写、Promote 元信息及真实 TTK 服务端 CPU 参数绑定检查。默认 TF E2E 标量输出另经真实 TTK 比对器验证兼容。 两仓累计 Golden CPU 自查 **447/447** 通过,本仓 **248/248**。未执行 NPU/远程 GPU、算子性能或算子精度测试。当前受检 HEAD:2ed0535b23f764e6efbae7ded2d6d5513baa33dc。 ## 本地 CI 统一入口 /workspace/CI-skills/ci_local_check.sh 定向检查通过;pre-commit、隔离 oat-py 1.0.3、Ascend 950 与 A2(ascend910b)定向 package/UT 已通过。构建并行度最多 8,使用任务目录内 CANN_Revise 的 0923 Toolkit/ops。 受测 HEAD:2ed0535b23f764e6efbae7ded2d6d5513baa33dc;rebase 主仓 master:f53b52a3e7deaedca104d82c453c99900de60b25;本轮 CI 基线快照:f53b52a3e7deaedca104d82c453c99900de60b25。每仓相对 rebase 基点仅 1 个提交,squash 前后完整 diff 和 tree 一致,7 个 Golden 内容不变。 覆盖边界:下列定向 UT 阶段未执行用例(0 项或仅构建目标):opapi/ascend950、opgraph/ascend950、opapi/ascend910b、opgraph/ascend910b、opkernel/ascend910b。不将这些阶段的构建通过计为用例覆盖。 线上 CI 触发凭据:https://gitcode.com/cann/ops-math/merge_requests/6247#note_193365306。仅记录已触发请求/现有任务,不表示线上 CI 已通过。 See merge request: cann/ops-math!6247 | 1 个月前 | |
fix: 修复AddV2和TensorRedirect误校验OriginShape Co-authored-by: raoliang_sac<raoliang4@huawei.com> # message auto-generated for no-merge-commit merge: !5884 merge fix/add-v2-scalar-origin-rank into master fix: 修复AddV2和TensorRedirect误校验OriginShape Created-by: raoliang_sac Commit-by: raoliang_sac Merged-by: cann-robot Description: ## 描述 本 PR 修复 Ascend 950PR/Ascend 950DT(arch35)实现中 AddV2 和 TensorRedirect 对 OriginShape 进行 Tiling rank 校验而误拒绝合法输入的问题。 ### 问题场景 - TensorFlow 场景 tf.add(x, 1) 中,常量 1 的框架逻辑形态(OriginShape)是 []、rank 为 0;GE 运行时可将其规整为单元素存储形态(StorageShape)[1]。原实现同时按 [1, 8] 校验 OriginShape 和 StorageShape,导致合法标量广播在进入 Tiling 时失败。 - TensorRedirect 也存在同类问题:OriginShape 描述框架逻辑形态,StorageShape 才是 Tiling 和 Kernel 实际使用的计算形态;对 OriginShape 再做一遍 rank 限制会误伤合法的 shape 转换场景。 - StorageShape 本身为 rank 0 时表示单元素标量,元素个数为 1;原校验将其按 rank 下界 1 拒绝,与同类算子的标量处理不一致。 ### 修复方案 - AddV2、TensorRedirect 均不再在 Tiling 中单独校验 OriginShape,仅校验实际参与切分和计算的 StorageShape。 - 两个算子的 StorageShape rank 范围统一为 [0, 8],保留 rank 上界、负维、shape/广播关系、dtype、元素个数溢出等既有校验。 - AddV2 的 rank-0 StorageShape 在进入 ATVOSS Broadcast 模板后,由 EnsureNotScalar 以等价的 [1] 形态参与合轴和切分;该函数不修改 OriginShape 或 TilingContext 中的原始 StorageShape。 - 补充 origin/storage 不一致、TF 标量、rank-0 storage 标量及标量广播回归用例。该修复由 TensorFlow 标量场景暴露,但校验原则不限定于 TensorFlow。 ### 文件修改 - conversion/tensor_redirect/op_host/arch35/tensor_redirect_tiling_arch35.cpp:删除输入/输出 OriginShape rank 校验;StorageShape 支持 rank 0,继续校验 rank 上界、非负维和输入输出 storage shape 一致性。 - conversion/tensor_redirect/tests/ut/op_host/arch35/test_tensor_redirect_tiling_arch35.cpp:将 rank-0 StorageShape 改为成功用例,补充输入/输出 OriginShape 与 StorageShape rank 不一致的成功回归用例。 - math/add_v2/README.md:将 Ascend 950PR/Ascend 950DT 的 rank 范围更新为 [0, 8],说明 rank 0 表示标量。 - math/add_v2/op_host/arch35/add_v2_tiling_arch35.cpp:删除 x1、x2、y 的 OriginShape rank 校验;StorageShape 支持 rank 0,并继续执行实际 shape、广播及溢出校验。 - math/add_v2/tests/ut/op_host/arch35/test_add_v2_tiling.cpp:补充 TF 标量位于左右输入、标量与标量、rank-0 StorageShape 及其广播、OriginShape 不参与 Tiling rank 校验等用例。 ## 关联的Issue - 历史质量加固 Issue:https://gitcode.com/cann/ops-math/issues/3195。本 PR 修复该轮加固后暴露的标量 shape 校验回归。 ## 测试 - 使用工作目录 CANN:/workspace/July-Changwei-math/Ascend/cann-9.2.0。 - 分支已 rebase 到 cann/ops-math:master@968d685af5c6c5d95f207eb73126cca9b90745ee,并 squash 为 1 个提交:75d3c5deb29740b61560d09125aa05be424a6226。 - 定向 Host UT:AddV2 37 个、TensorRedirect 55 个,共 92/92 通过。 - 最新定向本地 CI(固定上述 master 快照、-j8)全部通过: - pre-commit:PASS; - 隔离 oat-py==1.0.3 一次检查完整 5 个变更文件:PASS; - README Markdown 链接:PASS; - Ascend 950:AddV2、TensorRedirect 定向 package 与 ophost UT:PASS; - Ascend 910B:AddV2、TensorRedirect 定向 package 与 ophost UT:PASS。 ## 文档更新 - 已更新 math/add_v2/README.md 中 Ascend 950PR/Ascend 950DT 的 rank-0 标量说明。 - TensorRedirect 的公开逻辑 rank 规格未在本 PR 中改动;本次只修正 Tiling 对实际 StorageShape 的校验对象与标量处理。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!5884 | 1 个月前 |