| Files | Last commit | Last update |
|---|---|---|
fix(slice_last_dim): 修复 tiling 除零崩溃/空转、补推导校验族、srcStride 去窄化、对齐 proto 与交付规范并补 22 例 UT 看护 Co-authored-by: xuejinghui<xuejinghui@huawei.com> # message auto-generated for no-merge-commit merge: !7179 merge fix/slicelastdim-fix-1+2+3+4+5+6+7+8+9+10+11+12+13+14 into master fix(slice_last_dim): 修复 tiling 除零崩溃/空转、补推导校验族、srcStride 去窄化、对齐 proto 与交付规范并补 22 例 UT 看护 Created-by: xuejinghui Commit-by: xuejinghui Merged-by: cann-robot Description: ## 描述 修复 SliceLastDim(conversion/slice_last_dim)多类缺陷(现象清单见关联 Issue):按域概括—— **Host Tiling**(op_host/arch35/slice_last_dim_tiling_arch35.cpp) - 退化输出(outerSize_==0 或 lastDimOut_==0)单一早退快捷路径:消除非末维 0 时搜索裸除法 0/0 的 Host SIGFPE(empty_036/037 上板崩溃)与空输出因子循环 O(outerSize) 空转(10^7 规模实测 49.4ms → 145µs O(1));早退设置极简合法 tiling、BlockDim=1,与 kernel 既有早退字段一致。 - start_/end_ 双侧夹取至 [0, lastDimIn_](先比较后加减),消除有符号溢出(SIGABRT/回绕双形态);stride ≥ 2^40 受控拒绝(仅非退化输出,空输出 stride 惰性放行);GetParams 补七 dtype 白名单(bool/complex128 拒绝,EZ0020)。 **InferShape/InferDataType** - 补 stride≥1(EZ0026)、rank∈[1,8](EZ0012)校验;未知 rank [-2] 受控拒绝(IsUnknownRank → GRAPH_FAILED),[-1] 动态维传播保留;start/end 双侧截断 + 长度改用共享 CeilDiv 防溢出。 - InferDataType 实现与 IMPL_OP 注册迁移至 op_graph/slice_last_dim_graph_infer.cpp(按仓交付指南交付件2 形态,op_host 仅保留 InferShape 注册);补七 dtype 白名单(EZ0020)。 **Kernel** - 入口 slice_last_dim_apt.cpp 改名 slice_last_dim.cpp 并同步 def.cpp opFile.value(标准结构交付;安装包绑定链四环重建,_apt 零残留)。 - DoCopyIn 连续拷贝分支 srcStride 去 static_cast<uint32_t> 窄化、int64 直传(arch35 SDK DataCopyExtParams::srcStride 原生 64 位),消除行距 ≥2^32 字节丢高位导致的静默错误数据。 **docs**:README 参数表按定义序重排与角色列规范化;补空轴行为/容量上限/[-1][-2] 语义声明;新增异常校验表(EZ0012×2/EZ0026/EZ0020 + 框架层 E80012/EZ3004 分层)。 **格式**:4 个点名文件按仓 pinned clang-format v18.1.8 收尾(纯格式,编译产物哈希不变)。 **测试**:新增 tiling 12 + infershape 10 共 22 例防御分支 UT 看护(存量 7 例 token 级零删改)。 ## 不在本 PR 范围(按维护方裁决保留现状) 以下两项经维护方裁决不在本 PR 修复范围,相关现状保留: - **proto TensorType dtype 集合**(op_graph/slice_last_dim_proto.h):proto 与 OpDef baseDataType 的 dtype 声明差异(proto 含 DT_DOUBLE 不含 DT_BF16)保留现状,不在本 PR 对齐——dtype 校验以 OpDef/ops-info 域为准(运行期按 ops-info 校验,BF16 上板全过;DT_DOUBLE 由 InferDataType 白名单在图推导层受控拒绝 EZ0020)。 - **README 产品支持表与跨芯片迁移说明**:产品支持度声明维持仓内原状(不改口径);跨芯片切片轴语义差异说明不随本 PR 提交。 ## 关联的Issue Fixes #4577 ## 测试 - **Host UT**: 29/29 全过(存量 7 + 新增看护 22;静态 29 == gtest_list 29 == 执行 29,无静默缺失);覆盖率 tiling 91.1%→98.2%、infershape 86.0%→100%,8 个新增防御分支靶点全 COVERED;函数覆盖 97.7% ≥ 基线 95.6%,行覆盖命中数不倒退。 - **TTK 全量回归**(Ascend950PR,修复前后对账): kernel L0 68/68 PASS(BINARY_MATCH×68;empty_036/037 **FAIL→PASS** 直证:block_dim=1 早退、空输出 binary_equal);kernel L2 17 例预期拒绝同形(dtype_001 bool 拒绝兑现 EZ0020、dimval_012 垃圾 tiling→干净早退 FAIL→PASS);sanitizer 四工具 8/8 "No error detected";GEIR 推导层 68 例 E19999 零命中 + 端到端 40 例构图/推导/剪枝/执行/golden 全链 PASS。 - **溢出双形态**: 85 个 kernel 执行日志 SIGABRT/回绕签名 0 命中;极值探针 10^5/10^6/10^7 计时 155/160/148µs 平坦(空转消除)。 - **四分类对账**(确定性脚本 compare_results): FAIL→PASS 11 / PASS→FAIL 0(未放行)/ FAIL→FAIL 16(预期保持)/ PASS→PASS 115;26 个 GEIR 跨安装形态差异与 1 个 dtype_001 拒绝兑现均显式登记放行(E20001 系外部 vendor 装载形态限制,非退化:E19999=0 + 40 例端到端 + 新入口绑定链三重证明)。 - **范围收缩后重验**(revision 终态): 重建+隔离安装三层核验 PASS(产物哈希 10 项对照:9 项不变、仅 opsproto 库随 proto 恢复变化——kernel/tiling/api 面零变化);kernel bf16/fp32 连续拷贝/int8/empty_036 共 4 例 PASS(binary_equal 双模式+BINARY_MATCH,empty block_dim=1 早退保持);GEIR bf16 端到端 PASS;DT_DOUBLE/bool 构图仍图推导层 EZ0020 受控拒绝(InferDataType 白名单,先于 FE 预编译);UT 29/29;冻结资产校验 PASS。 - **pre-commit/OAT**: 仓 pinned 钩子全量 Passed(clang-format 18.1.8/ruff/codespell/OAT license header 强制重扫 0 违规)。 - 大规格(≥1GiB)用例按测试侧既定阈值排除,未纳入本次回归。 ## 文档更新 - conversion/slice_last_dim/README.md: 参数表规范化与约束声明/异常校验表修订(本 PR 内含;产品支持表与迁移说明不在范围,见上节)。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## 决策与权衡 - **[-2] 未知 rank 处置**:选"补受控拒绝分支 + README 澄清"(保留 DynamicRankSupport/动态 Shape 声明),不选"撤声明"——后者须同时补 rank 校验才闭合(撤声明不消除 rank=0 放行路径),且改变公开契约需发布说明;拒绝分支无论 GE 是否调用算子 InferShape 均不劣于现状。 - **stride 上界为条件拒绝(仅非退化输出)**:空输出走早退后 stride 不参与搬运,无条件拒绝会误伤 end≤start 空输出+大 stride 的合法既有用例(归档基线 2 例翻红);条件拒绝语义与 kernel 早退逐字段一致。 - **srcStride 大规格验证口径**:触发需 ≥4GiB 行距张量(超出常规回归 1GiB 阈值),验证=SDK 字段 64 位类型核验 + 补码模拟反例(修复后偏移=真值)+ 常规规格 68/68 BINARY_MATCH 行为不变性。 - **clang-format 收尾范围**:仅 Issue 点名 4 文件 + 本批触达文件终态复核,不做全仓 sweep(其余算子存量格式债不属本修复面)。 - 已知遗留(变更面外存量,登记待后续迭代):DoTiling wrapper 对根因层失败再包装上报(多一条杂音日志)、kernel 头文件 using 导入、早退 if 无大括号;均与基线逐字节一致未触碰。 See merge request: cann/ops-math!7179 | 1 day ago | |
fix(slice_last_dim): 修复 tiling 除零崩溃/空转、补推导校验族、srcStride 去窄化、对齐 proto 与交付规范并补 22 例 UT 看护 Co-authored-by: xuejinghui<xuejinghui@huawei.com> # message auto-generated for no-merge-commit merge: !7179 merge fix/slicelastdim-fix-1+2+3+4+5+6+7+8+9+10+11+12+13+14 into master fix(slice_last_dim): 修复 tiling 除零崩溃/空转、补推导校验族、srcStride 去窄化、对齐 proto 与交付规范并补 22 例 UT 看护 Created-by: xuejinghui Commit-by: xuejinghui Merged-by: cann-robot Description: ## 描述 修复 SliceLastDim(conversion/slice_last_dim)多类缺陷(现象清单见关联 Issue):按域概括—— **Host Tiling**(op_host/arch35/slice_last_dim_tiling_arch35.cpp) - 退化输出(outerSize_==0 或 lastDimOut_==0)单一早退快捷路径:消除非末维 0 时搜索裸除法 0/0 的 Host SIGFPE(empty_036/037 上板崩溃)与空输出因子循环 O(outerSize) 空转(10^7 规模实测 49.4ms → 145µs O(1));早退设置极简合法 tiling、BlockDim=1,与 kernel 既有早退字段一致。 - start_/end_ 双侧夹取至 [0, lastDimIn_](先比较后加减),消除有符号溢出(SIGABRT/回绕双形态);stride ≥ 2^40 受控拒绝(仅非退化输出,空输出 stride 惰性放行);GetParams 补七 dtype 白名单(bool/complex128 拒绝,EZ0020)。 **InferShape/InferDataType** - 补 stride≥1(EZ0026)、rank∈[1,8](EZ0012)校验;未知 rank [-2] 受控拒绝(IsUnknownRank → GRAPH_FAILED),[-1] 动态维传播保留;start/end 双侧截断 + 长度改用共享 CeilDiv 防溢出。 - InferDataType 实现与 IMPL_OP 注册迁移至 op_graph/slice_last_dim_graph_infer.cpp(按仓交付指南交付件2 形态,op_host 仅保留 InferShape 注册);补七 dtype 白名单(EZ0020)。 **Kernel** - 入口 slice_last_dim_apt.cpp 改名 slice_last_dim.cpp 并同步 def.cpp opFile.value(标准结构交付;安装包绑定链四环重建,_apt 零残留)。 - DoCopyIn 连续拷贝分支 srcStride 去 static_cast<uint32_t> 窄化、int64 直传(arch35 SDK DataCopyExtParams::srcStride 原生 64 位),消除行距 ≥2^32 字节丢高位导致的静默错误数据。 **docs**:README 参数表按定义序重排与角色列规范化;补空轴行为/容量上限/[-1][-2] 语义声明;新增异常校验表(EZ0012×2/EZ0026/EZ0020 + 框架层 E80012/EZ3004 分层)。 **格式**:4 个点名文件按仓 pinned clang-format v18.1.8 收尾(纯格式,编译产物哈希不变)。 **测试**:新增 tiling 12 + infershape 10 共 22 例防御分支 UT 看护(存量 7 例 token 级零删改)。 ## 不在本 PR 范围(按维护方裁决保留现状) 以下两项经维护方裁决不在本 PR 修复范围,相关现状保留: - **proto TensorType dtype 集合**(op_graph/slice_last_dim_proto.h):proto 与 OpDef baseDataType 的 dtype 声明差异(proto 含 DT_DOUBLE 不含 DT_BF16)保留现状,不在本 PR 对齐——dtype 校验以 OpDef/ops-info 域为准(运行期按 ops-info 校验,BF16 上板全过;DT_DOUBLE 由 InferDataType 白名单在图推导层受控拒绝 EZ0020)。 - **README 产品支持表与跨芯片迁移说明**:产品支持度声明维持仓内原状(不改口径);跨芯片切片轴语义差异说明不随本 PR 提交。 ## 关联的Issue Fixes #4577 ## 测试 - **Host UT**: 29/29 全过(存量 7 + 新增看护 22;静态 29 == gtest_list 29 == 执行 29,无静默缺失);覆盖率 tiling 91.1%→98.2%、infershape 86.0%→100%,8 个新增防御分支靶点全 COVERED;函数覆盖 97.7% ≥ 基线 95.6%,行覆盖命中数不倒退。 - **TTK 全量回归**(Ascend950PR,修复前后对账): kernel L0 68/68 PASS(BINARY_MATCH×68;empty_036/037 **FAIL→PASS** 直证:block_dim=1 早退、空输出 binary_equal);kernel L2 17 例预期拒绝同形(dtype_001 bool 拒绝兑现 EZ0020、dimval_012 垃圾 tiling→干净早退 FAIL→PASS);sanitizer 四工具 8/8 "No error detected";GEIR 推导层 68 例 E19999 零命中 + 端到端 40 例构图/推导/剪枝/执行/golden 全链 PASS。 - **溢出双形态**: 85 个 kernel 执行日志 SIGABRT/回绕签名 0 命中;极值探针 10^5/10^6/10^7 计时 155/160/148µs 平坦(空转消除)。 - **四分类对账**(确定性脚本 compare_results): FAIL→PASS 11 / PASS→FAIL 0(未放行)/ FAIL→FAIL 16(预期保持)/ PASS→PASS 115;26 个 GEIR 跨安装形态差异与 1 个 dtype_001 拒绝兑现均显式登记放行(E20001 系外部 vendor 装载形态限制,非退化:E19999=0 + 40 例端到端 + 新入口绑定链三重证明)。 - **范围收缩后重验**(revision 终态): 重建+隔离安装三层核验 PASS(产物哈希 10 项对照:9 项不变、仅 opsproto 库随 proto 恢复变化——kernel/tiling/api 面零变化);kernel bf16/fp32 连续拷贝/int8/empty_036 共 4 例 PASS(binary_equal 双模式+BINARY_MATCH,empty block_dim=1 早退保持);GEIR bf16 端到端 PASS;DT_DOUBLE/bool 构图仍图推导层 EZ0020 受控拒绝(InferDataType 白名单,先于 FE 预编译);UT 29/29;冻结资产校验 PASS。 - **pre-commit/OAT**: 仓 pinned 钩子全量 Passed(clang-format 18.1.8/ruff/codespell/OAT license header 强制重扫 0 违规)。 - 大规格(≥1GiB)用例按测试侧既定阈值排除,未纳入本次回归。 ## 文档更新 - conversion/slice_last_dim/README.md: 参数表规范化与约束声明/异常校验表修订(本 PR 内含;产品支持表与迁移说明不在范围,见上节)。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: ## 决策与权衡 - **[-2] 未知 rank 处置**:选"补受控拒绝分支 + README 澄清"(保留 DynamicRankSupport/动态 Shape 声明),不选"撤声明"——后者须同时补 rank 校验才闭合(撤声明不消除 rank=0 放行路径),且改变公开契约需发布说明;拒绝分支无论 GE 是否调用算子 InferShape 均不劣于现状。 - **stride 上界为条件拒绝(仅非退化输出)**:空输出走早退后 stride 不参与搬运,无条件拒绝会误伤 end≤start 空输出+大 stride 的合法既有用例(归档基线 2 例翻红);条件拒绝语义与 kernel 早退逐字段一致。 - **srcStride 大规格验证口径**:触发需 ≥4GiB 行距张量(超出常规回归 1GiB 阈值),验证=SDK 字段 64 位类型核验 + 补码模拟反例(修复后偏移=真值)+ 常规规格 68/68 BINARY_MATCH 行为不变性。 - **clang-format 收尾范围**:仅 Issue 点名 4 文件 + 本批触达文件终态复核,不做全仓 sweep(其余算子存量格式债不属本修复面)。 - 已知遗留(变更面外存量,登记待后续迭代):DoTiling wrapper 对根因层失败再包装上报(多一条杂音日志)、kernel 头文件 using 导入、早退 if 无大括号;均与基线逐字节一致未触碰。 See merge request: cann/ops-math!7179 | 1 day ago |
| Files | Last commit | Last update |
|---|---|---|
| 1 day ago | ||
| 1 day ago |