Closed
[Bug-Report|缺陷反馈]: MatrixDiagPart Host/Tiling 校验缺失及示例/Golden 问题修复 #4638
吴成文Add on  1 day agoClosed at  1 day ago
吴成文
吴成文
1 day ago Create

一、问题描述

MatrixDiagPart(arch35/ascend950)存在以下已修复问题:

  1. InferShape 未拦截 rank>8:仅校验 rank<2,rank>8 时直接索引最后两维,超出 README 约定的 [2,8]。
  2. Tiling 仅检查最后两维 min,未逐维拒绝未解析/负维度:例如 [-1,-1,3,4] 元素乘积为正,会绕过检查进入分块计算。
  3. Tiling 缺少整数溢出保护:M*n、batchTotal*d、n+1(inputRowStride)在乘法/加法前没有 int64 越界判断;负的 GetShapeSize()(未知维或乘积溢出)未在除法前拒绝。
  4. Tiling 未校验声明输出形状:输出 rank、batch 维、对角线长度与 x.shape[:-2]+[min(M,N)] 不一致时可能越界写输出缓冲区。
  5. Tiling 未校验输出 dtype 与输入一致:输出 dtype 更窄时 kernel 按输入元素宽度写入,可能越界。
  6. 错误日志使用 EnsureNotScalar 归一化后的 rank,0 维标量被报成 rank=1,掩盖真实 rank。
  7. GE 示例 GenOnesData 按 int32 写入但按声明 dtype 构造 Tensor,float16 未填充;GetDataTypeSize 缺 DT_DOUBLE/UINT8/BOOL,DT_DOUBLE 时缓冲区越界;WriteDataToFile 未检查 fwrite 返回值;设备号固定为 0,未读取 DEVICE_ID;正常路径未释放生成缓冲区和 Session。
  8. tests/assets/golden.py 缺少 __spec__/tolerance/third_party,TF E2E api_name 未注册;float16/float32 使用不可用的 cross_check 第三方;许可证头、未用 numpy 导入、日志文本与 spec 形参/返回惯例不一致。
  9. README 未说明动态形状输出传播,调用方式仍写“图模式”。

二、环境信息

• 昇腾硬件型号:Ascend 950PR/950DT
• CANN版本:9.3.0
• 操作系统:Linux
• 其他:ops-math conversion/matrix_diag_part,arch35

三、重现步骤

  1. 构造 rank>8、含未解析 -1/-2 或负 batch 维的输入,或构造输出 dtype/形状与输入不一致的图。
  2. 使用上述输入执行 MatrixDiagPart 的 InferShape/Tiling。
  3. 运行 GE 示例(含非 float32 dtype、设置 DEVICE_ID)或使用仓内 golden 执行 kernel/GEIR/TF E2E。

四、预期结果

上述输入应在 Host/Tiling 阶段被明确拒绝;合法输入应正常执行;示例按声明 dtype 正确填充并释放资源;golden 能按 __spec__/tolerance 正确注册并被 TTK 解析,TF E2E 参考可用。

💡 备注

修复 PR:https://gitcode.com/cann/ops-math/merge_requests/7140

likedislike
吴成文吴成文
1 day ago Modify description of issue
CANN-robotCANN-robotCollaborators
1 day ago Close issue
CANN-robotCANN-robotCollaborators
1 day ago changed custom state from 待办的 to 已完成
CANN-robotCANN-robotCollaborators
1 day ago Added label: resolved