| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
Checkout v2r13 Co-authored-by: Chansinging<1183520536@qq.com> Co-authored-by: chansinging<chenxingying2@huawei.com> # message auto-generated for no-merge-commit merge: !4923 merge main_sync_20260511 into master Checkout v2r13 Created-by: chansinging Commit-by: Chansinging;chansinging Merged-by: ascend-robot Description: <!-- PR描述模板更新日期:20260203 --> # 【合入来源】 参考社区演进和以往PR记录 - [ ] 需求 - [ ] 问题单 - [x] issue/工单[社区演进](https://gitcode.com/Ascend/op-plugin/issues/77) - [ ] 重构优化 - [ ] 资料更新 # 【修改方案】 参考社区演进和以往PR记录 # 【资料变更】 不涉及 # 【接口变更】 不涉及 # 【功能验证】  # 【CheckList】 > PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x] - [x] 代码注释完备,正确记录错误日志 - [x] 代码实现进行了返回值、空指针等校验 - [x] PR标题正确使用类型标签,如:feat、fix、refactor、docs、test等 - [x] PR持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/op-plugin!4923 | 3 个月前 | |
fix(op-plugin): identity ceil for integer tensors to avoid aclnn dtype errors Co-authored-by: Margaret_wangrui<wangrui178@huawei.com> # message auto-generated for no-merge-commit merge: !4908 merge ceil_op into master fix(op-plugin): identity ceil for integer tensors to avoid aclnn dtype errors Created-by: Margaret_wangrui Commit-by: Margaret_wangrui Merged-by: ascend-robot Description: ## 【合入来源】 如有社区 issue,请关联 issue 链接:**无对应社区 issue 则删除本行或填「无」** 请勿携带内部流程信息(需求链接、问题单、内部 issue 等) https://gitcode.com/Ascend/pytorch/issues/1864 **类型勾选(请按实际保留一项):** - [x] **问题单** - [ ] 需求 - [ ] issue/工单 - [ ] 重构优化 - [ ] 资料更新 ------ ## 【修改方案】 CANN/aclnn 对整数 dtype 不支持或报错,需与 PyTorch 语义对齐 对整数 dtype(如 int32 / int64)的 ceil / ceil_,语义是恒等:没有小数部分可「向上取整」,结果就是原张量(out-of-place 常见实现是 clone(),in-place 等价于不重算)。CPU/主流后端都按这个来。 aclnnInplaceCeil(以及配套的 out-of-place aclnnCeil)面向的是浮点等支持取整的算子实现;对整数输入往往会 dtype 不支持 或直接 报错。 因此若在 op_api 里对整数张量仍调用 EXEC_NPU_CMD(aclnnInplaceCeil, self),就会在运行或测试(例如 transfer_to_npu、meta 相关)里踩雷。 1. ** acl_op 路径(CeilKernelNpu.cpp)** - 增加整数张量判断(at::isIntegralType(..., false),与 CPU 语义一致:ceil 对整数为恒等)。 - ceil_out:整数时通过 copy_ + NPU 格式/连续性处理写回 result,不再调用 OpCommand("Ceil")。 - ceil:整数时返回 self.clone();非整数保持原 CANN 路径。 - ceil_ 仍通过 ceil_out(self, self),自然覆盖整数 inplace。 2. **op_api 路径(代码生成 + YAML)** - 在 op_plugin_functions.yaml 的 ceil.out 的 gen_opapi 中增加 **integral_identity_tensor: self**,由 torchnpugen 在生成体最前插入整数早退分支,直接调用 **acl_op::ceil_out**(及同签名下的 ceil/ceil.out 生成逻辑),避免对整数走 aclnnCeil。 - **ceil_** 的 gen_opapi 由 **exec: aclnnInplaceCeil** 改为 **structured_inherit: ceil.out**,与 abs_ 等一致,生成 **op_api::ceil_out(self, self)**,统一走带整数早退的 ceil_out,避免整数上 aclnnInplaceCeil 报错,并降低与手写 OpApi 重复实现的风险。 3. **代码生成框架(torchnpugen/struct/model.py、struct_codegen.py)** - StructInfo 增加 **integral_identity_tensor** 字段;从 YAML gen_opapi 中 pop 该配置,避免参与 out 结果字段校验。 - struct_codegen 增加 **INTEGRAL_IDENTITY_GUARD** 模板,写入 StructKernelNpuOpApi.cpp 生成内容;在 **ACLNN_EXTENSION** include 分支中补充 **ATen/native/TypeProperties.h**,保证 at::isIntegralType 可见。 **交互关系简述:** 运行时 PyTorch 调度 → op_api(生成代码)或 acl_op;整数 ceil 在 op_api 早退回 acl_op::ceil_out,acl_op 内不再调用 CANN Ceil;YAML ↔ torchnpugen ↔ StructKernelNpuOpApi.cpp 为构建期关系。 ------ ## 【资料变更】 **不涉及**(无对外用户文档/手册变更;若对外发布说明需声明「NPU 上整数 ceil 与 PyTorch 一致为恒等」,可由资料接口人另单跟踪。) ------ ## 【接口变更】 **不涉及** - 未新增/变更 Python API;torch.ceil / tensor.ceil_ 对外签名与行为与 PyTorch 对齐,属实现修正,非跨仓契约变更。 ------ ## 【功能验证】 - **场景** - 整数 dtype(如 int32/int64)张量在 NPU 上执行 ceil、ceil_、ceil.out。 - 浮点 dtype 回归:ceil 仍走 CANN,结果与基线一致。 - **方法** - 运行与 ceil / meta / transfer_to_npu 相关的 PyTorch 测试或最小脚本:整数 tensor x,断言 torch.ceil(x).equal(x)(及 inplace 等价)。 - 对比修改前后:修改前若 CANN 对整数报错或异常,修改后应通过。 - **UT** - 若仓库已有 ceil/dtype 相关用例,应在本 PR 或关联提交中 **适配/补充** 整数 NPU 用例;**自验证截图**:请在 PR 中附上本地/CI 测试通过截图或日志片段。  ------ ## 【CheckList】 (请提交人逐项改为 [x] 并自检) - [x] 代码注释完备,正确记录错误日志(本 PR 以整数语义与 CANN 限制注释为主;无新增复杂错误分支) - [x] 代码实现进行了返回值、空指针等校验(沿用现有 CheckOut/format_contiguous 等路径;整数分支为 copy_,与现有 NPU 写法一致) - [x] PR 标题正确使用类型标签(建议:fix(op-plugin): identity ceil for integer tensors on NPU) - [x] PR 持续集成流水线(CI)执行通过,代码检查无异常 See merge request: Ascend/op-plugin!4908 | 3 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 3 个月前 | ||
| 3 个月前 |