| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
fix(dilation2_d): 长尾算子加固——整型溢出防护、CALCULATED语义对齐与配套资产修复 Co-authored-by: CherryRanH<ranhe2@huawei.com> # message auto-generated for no-merge-commit merge: !12619 merge long_tail into master fix(dilation2_d): 长尾算子加固——整型溢出防护、CALCULATED语义对齐与配套资产修复 Created-by: CherryRanH Commit-by: CherryRanH Merged-by: cann-robot Description: ## 描述 本 PR 针对 Dilation2D 长尾算子做 host 侧加固与配套资产修复,共五项: 1. **TilingData 域校验与整型溢出防护** - dilation2_d_tiling.cpp 引入 INT32_POSITIVE_MAX 与 checkDim,对 x/filter 各维及 strides/rates/pads 做取值域校验 - Dilation2DTilingCtx 尺寸字段统一 int64_t;FillTilingData 先校验 N/C/oH/oW 与 totalElements 不越 int32、不溢出,再显式 static_cast<int32_t> 写入,杜绝静默窄化导致的 kernel 越界写 2. **CALCULATED 输出尺寸语义对齐 golden** - tiling 与 infershape 新增 FloorDiv/CeilDiv,CALCULATED 分支改为数学 floor/ceil 语义(hNum<0 直接输出 0),修正 C++ 整数除法向零截断把 (−strideH, 0) 区间算成 1 行的问题 3. **Tiling 与 InferShape 输出形状交叉校验** - 新增 CrossCheckOutputShape:params 计算的 N/oH/oW/C 与 InferShape 的 y 形状不一致即拒绝,防止按 Tiling 数量越界写 - infershape 侧补充维度 [0, 2147483647](零维为合法空输出边界)与 pads 非负校验 4. **dtype 声明与使能分层** - proto.h(GE IR 建图层)声明 9 种实数类型(f16/f32/f64/i32/i64/u8/i16/i8/u16,对齐 canndev GEIR 与 req_analysis §7.2.2);def.cpp(OpDef 图编译层)声明使能口径仅 DT_FLOAT16;InferDataType/tiling CheckInputDtype 运行时过滤 - 注释补全 NHWC/NCHW 下 strides/rates 的维度顺序、padding_mode 的 CALCULATED 模式及 pads 的 [H_top, H_bottom, W_left, W_right] 四元非负语义 5. **TF 插件与 golden/样例资产** - dilation2d_tf_plugin.cpp 改为从源算子 op_src 读取 padding 写入 padding_mode,并对部分 TF 版本的 dilations 属性兜底映射到 rates - golden.py 新增 Dilation2DKernelSpec、_Dilation2DTorchCompose(torch 第三方参考)与 cross_check 容差配置,tensorflow 改为按需惰性导入 - 样例 test_geir_dilation2_d.cpp 与 UT 同步改用 FORMAT_ND/DT_FLOAT16,数据生成按 uint64 计算字节数并写入 half 表示,补参数校验与资源释放,新增 tiling 边界用例 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/7324 ## 测试 **UT(op_host,本机实际执行: nn_op_host_ut --gtest_filter='Dilation2D*')—— 36/36 通过(infershape 17 + tiling 19)** - CALCULATED floor/ceil 负分子回归:tiling_calculated_negative_hnum_empty_output(hNum∈(−strideH,0),stride=3:旧实现截断得 1 行、新实现空输出)、tiling_calculated_ceil_negative_hnum(hNum=−2、ceil_mode=true:数学 ceil 得 0 行)——均 PASS - 大 rate 导致 pad 超界回归:tiling_same_pad_top_exceeds_int32_rejected(rate=2³¹−1 → padTop≈3.22e9,显式拒绝)、tiling_rate_exceeds_int32_rejected、tiling_stride_exceeds_int32_rejected、tiling_negative_pads_rejected——均 PASS - FLOAT16 类型限制回归(四道门禁):inferDataType(FLOAT16 通过)、inferDataType_reject_non_float16(DT_FLOAT/DT_INT32 在 InferDataType 拒绝)、tiling_invalid_dtype/tiling_dtype_mismatch(tiling 输入门禁)、tiling_output_dtype_mismatch_rejected(y desc dtype 门禁,防直调通路 1B/2B 越界写)——均 PASS - InferShape 动态维度回归(6 例):unknown_rank_x、unknown_rank_filter、unknown_shape_nhwc_partial_known、unknown_shape_nchw_h_unknown、unknown_shape_nhwc_calculated_filter_unknown、unknown_shape_valid_mode——未知维正确传递为 -1,均 PASS - 新增 tiling 用例(累计 8 例);零维镜像用例 5 例(:zero_dim_h/c_nchw_same、zero_dim_h/w/c_nhwc_same——GRAPH_SUCCESS 且 y 形状与 golden 公式一致 **golden 数值互证(本机实际执行)** - 有限值 70 例:修复前后 golden 逐位一致;NaN/±inf 108 例:修复后与 kernel 语义参考(严格 > 丢弃 NaN、越界跳过)全一致,修复前失配 11 例(与 L1 精度失败数吻合);third_party torch 组合同步修复后 8 例特殊值全部一致 **Ascend 950 设备实测(修复后重新出包安装,全量)** - kernel L0:93/93 通过 - kernel L1:515/515 通过 - kernel L2:39 例 = 34 FAIL + 5 PASS,全部符合预期(负向用例语义:FAIL=在正确阶段被正确拒绝,PASS=合法边界正确放行) - GEIR L0:93/93 通过 ## 文档更新 更新了README.md文件。 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!12619 | 3 天前 | |
fix(dilation2_d): 长尾算子加固——整型溢出防护、CALCULATED语义对齐与配套资产修复 Co-authored-by: CherryRanH<ranhe2@huawei.com> # message auto-generated for no-merge-commit merge: !12619 merge long_tail into master fix(dilation2_d): 长尾算子加固——整型溢出防护、CALCULATED语义对齐与配套资产修复 Created-by: CherryRanH Commit-by: CherryRanH Merged-by: cann-robot Description: ## 描述 本 PR 针对 Dilation2D 长尾算子做 host 侧加固与配套资产修复,共五项: 1. **TilingData 域校验与整型溢出防护** - dilation2_d_tiling.cpp 引入 INT32_POSITIVE_MAX 与 checkDim,对 x/filter 各维及 strides/rates/pads 做取值域校验 - Dilation2DTilingCtx 尺寸字段统一 int64_t;FillTilingData 先校验 N/C/oH/oW 与 totalElements 不越 int32、不溢出,再显式 static_cast<int32_t> 写入,杜绝静默窄化导致的 kernel 越界写 2. **CALCULATED 输出尺寸语义对齐 golden** - tiling 与 infershape 新增 FloorDiv/CeilDiv,CALCULATED 分支改为数学 floor/ceil 语义(hNum<0 直接输出 0),修正 C++ 整数除法向零截断把 (−strideH, 0) 区间算成 1 行的问题 3. **Tiling 与 InferShape 输出形状交叉校验** - 新增 CrossCheckOutputShape:params 计算的 N/oH/oW/C 与 InferShape 的 y 形状不一致即拒绝,防止按 Tiling 数量越界写 - infershape 侧补充维度 [0, 2147483647](零维为合法空输出边界)与 pads 非负校验 4. **dtype 声明与使能分层** - proto.h(GE IR 建图层)声明 9 种实数类型(f16/f32/f64/i32/i64/u8/i16/i8/u16,对齐 canndev GEIR 与 req_analysis §7.2.2);def.cpp(OpDef 图编译层)声明使能口径仅 DT_FLOAT16;InferDataType/tiling CheckInputDtype 运行时过滤 - 注释补全 NHWC/NCHW 下 strides/rates 的维度顺序、padding_mode 的 CALCULATED 模式及 pads 的 [H_top, H_bottom, W_left, W_right] 四元非负语义 5. **TF 插件与 golden/样例资产** - dilation2d_tf_plugin.cpp 改为从源算子 op_src 读取 padding 写入 padding_mode,并对部分 TF 版本的 dilations 属性兜底映射到 rates - golden.py 新增 Dilation2DKernelSpec、_Dilation2DTorchCompose(torch 第三方参考)与 cross_check 容差配置,tensorflow 改为按需惰性导入 - 样例 test_geir_dilation2_d.cpp 与 UT 同步改用 FORMAT_ND/DT_FLOAT16,数据生成按 uint64 计算字节数并写入 half 表示,补参数校验与资源释放,新增 tiling 边界用例 ## 关联的Issue https://gitcode.com/cann/ops-nn/issues/7324 ## 测试 **UT(op_host,本机实际执行: nn_op_host_ut --gtest_filter='Dilation2D*')—— 36/36 通过(infershape 17 + tiling 19)** - CALCULATED floor/ceil 负分子回归:tiling_calculated_negative_hnum_empty_output(hNum∈(−strideH,0),stride=3:旧实现截断得 1 行、新实现空输出)、tiling_calculated_ceil_negative_hnum(hNum=−2、ceil_mode=true:数学 ceil 得 0 行)——均 PASS - 大 rate 导致 pad 超界回归:tiling_same_pad_top_exceeds_int32_rejected(rate=2³¹−1 → padTop≈3.22e9,显式拒绝)、tiling_rate_exceeds_int32_rejected、tiling_stride_exceeds_int32_rejected、tiling_negative_pads_rejected——均 PASS - FLOAT16 类型限制回归(四道门禁):inferDataType(FLOAT16 通过)、inferDataType_reject_non_float16(DT_FLOAT/DT_INT32 在 InferDataType 拒绝)、tiling_invalid_dtype/tiling_dtype_mismatch(tiling 输入门禁)、tiling_output_dtype_mismatch_rejected(y desc dtype 门禁,防直调通路 1B/2B 越界写)——均 PASS - InferShape 动态维度回归(6 例):unknown_rank_x、unknown_rank_filter、unknown_shape_nhwc_partial_known、unknown_shape_nchw_h_unknown、unknown_shape_nhwc_calculated_filter_unknown、unknown_shape_valid_mode——未知维正确传递为 -1,均 PASS - 新增 tiling 用例(累计 8 例);零维镜像用例 5 例(:zero_dim_h/c_nchw_same、zero_dim_h/w/c_nhwc_same——GRAPH_SUCCESS 且 y 形状与 golden 公式一致 **golden 数值互证(本机实际执行)** - 有限值 70 例:修复前后 golden 逐位一致;NaN/±inf 108 例:修复后与 kernel 语义参考(严格 > 丢弃 NaN、越界跳过)全一致,修复前失配 11 例(与 L1 精度失败数吻合);third_party torch 组合同步修复后 8 例特殊值全部一致 **Ascend 950 设备实测(修复后重新出包安装,全量)** - kernel L0:93/93 通过 - kernel L1:515/515 通过 - kernel L2:39 例 = 34 FAIL + 5 PASS,全部符合预期(负向用例语义:FAIL=在正确阶段被正确拒绝,PASS=合法边界正确放行) - GEIR L0:93/93 通过 ## 文档更新 更新了README.md文件。 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!12619 | 3 天前 | |
[CANNBot] 增加 Dilation2D 支持 Ascend950 实现 SIMT Co-authored-by: wang-shilong32<wangshilong23@huawei.com> # message auto-generated for no-merge-commit merge: !7792 merge simt_dilation2d into master [CANNBot] 增加 Dilation2D 支持 Ascend950 实现 SIMT Created-by: wang-shilong32 Commit-by: wang-shilong32 Merged-by: cann-robot Description: ## 描述 增加 Dilation2D 支持 Ascend950 实现 SIMT <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/4410 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> 本地出包验证算子、geir,通过二级冒烟、david冒烟。 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [x] AI辅助编写 See merge request: cann/ops-nn!7792 | 3 个月前 |