Closed
[Bug-Report|缺陷反馈]: AICPU整包json与安装版json 算子定义差异梳理 #1276
liu-weiAdd on  25 days agoClosed at  14 days ago
liu-wei
liu-weiCollaborators
25 days ago Create

Describe the current behavior / 问题描述 (Mandatory / 必填)

背景

三仓(ops-cv / ops-nn / ops-math)master 代码以 AICPU built-in 整包模式(manifest 全量准入)构建产出 aicpu_cv.json(6) / aicpu_nn.json(23) / aicpu_math.json(76),与本机安装的 CANN 9.2.0 opp/built-in/op_impl/aicpu/aicpu_kernel/config/aicpu_kernel.json(264 算子)逐算子逐字段比对。

总体数据

维度 数量
三仓整包合计(无重叠) 105
安装版 264
共同算子 96
仅整包有 9
仅安装版有 168

共同 96 个算子中:19 个仅打包属性差异(算子定义与安装版完全等价)、77 个存在实质内容差异。

差异分类明细

类别一:系统性打包属性差异(96/96 全部存在,整包模式固有,非缺陷)

字段 整包版 安装版
kernelSo lib{cv/nn/math}_aicpu_kernels.so libcpu_kernels.so
opKernelLib CUSTAICPUKernel AICPUKernel
userDefined True False
workspaceSize 有 无

类别二:端口定义结构差异(6 个,风险最高 ⚠️)

算子 [仓] 差异
CaseCondition [math] 安装版无任何端口定义;整包版有 x(I32/I64/U64) -> y(I32)
Coordinates1DTo2D [math] 安装版无端口定义;整包版有 x,shape -> row,col,n(2入3出)
IndexToAddr [nn] 安装版无端口定义;整包版有 base_addr,x -> addrs_table
SliceWrite [math] 安装版无端口定义;整包版有 x,begin,value -> x
Conj [math] 端口名不同:整包版 input/output vs 安装版 x/y
TopKPQDistanceV2 [math] topk_index 输出编号错位:整包版 output1,安装版 output2

类别三:dtype 支持集合实质差异(7 个,方向均为整包版 ⊇ 安装版)

算子 [仓] 差异
Asin [math] x/y 整包版多 DT_FLOAT16(安装版仅 FLOAT/DOUBLE)
Cast [math] x 多 DT_COMPLEX64/DT_COMPLEX128;y 多 DT_HIFLOAT8
Expand [math] x/y 多 DT_BF16,DT_BOOL
SelectV2 [math] then/else/result 多 DT_BOOL
SparseToDense [nn] values/default_value/y 多 DT_BOOL
TopKV2D [math] x/values 整包版支持 11 种 dtype,安装版仅 DT_FLOAT16
TransData [math] src/dst 整包版 13 种,安装版仅 6 种(F/F16/I64/I32/I8/BF16)

另 TopKPQDistance [math] 安装版 dtype 串含空格("DT_FLOAT16, DT_FLOAT"),属格式瑕疵。

类别四:仅 dtype 顺序差异(16 个,集合相同,无实质影响)

AvgPool1DAvgMatrix[nn]、Bucketize[nn]、ConjugateTranspose[math]、OnesLike[math]、ProdEnvMatACalcRij[math]、ReduceSum[math]、Rsqrt[math]、ScatterNdMax[nn]、ScatterNdMin[nn]、SoftmaxV2[nn]、SparseSegmentMean[nn]、SparseSegmentSum[nn]、Sqrt[math]、Sub[math]、TileWithAxis[math]、TopK[math]

类别五:opInfo 元数据差异(47 个 + 值冲突 3 处)

字段分布统计:

字段 分布
formatAgnostic 整包版独有 33 + 安装版独有 5 + 值不同 2
subTypeOfInferShape 整包版独有 28 + 安装版独有 3 + 值不同 1
slicePattern 安装版独有 24
opsFlag 整包版独有 5 + 安装版独有 3
implementType 安装版独有 4(Add/Mul/Cast/Sub)
noTiling 安装版独有 2(NonZeroWithValueShape/V2)

值冲突明细(建议核对算子代码定论):

算子 [仓] 字段 整包版 安装版
GreaterEqual [math] formatAgnostic False True
AvgPool1DAvgMatrix [nn] formatAgnostic False True
SparseSegmentMean [nn] subTypeOfInferShape 1 2

其中 ops-cv 仓涉及的算子:CropAndResize(subTypeOfInferShape 整包版独有)、IMGWarpOffsets(formatAgnostic + subTypeOfInferShape 整包版独有)、NonMaxSuppressionV3(formatAgnostic 整包版独有)、SpatialTransformer(opsFlag + subTypeOfInferShape 整包版独有)。

类别六:算子集合差异

  • 仅整包有(9 个,安装版 9.2.0 无):math 7 个(AddN、Div、Reshape、Sinh、SplitD、Unpack、UnfoldGrad)+ cv 2 个(AdjustSaturation、ScaleAndTranslate)
  • 仅安装版有(168 个):其中 61 个在四仓有同名 AICore 实现(cv 12:GridSampler2D/2DGrad/3DGrad、Resize 系列 8 个、UpsampleNearest3d(Grad)、RotatedNMS;math 28;nn 17;math+nn 2(Pack/Sort);transformer 2);其余 107 个公开仓均无注册(GetNext、HcclAicpuOp、InitData、SilentCheckV1-3、Crypto、Obfuscation 系列、Cache 系列、OCR 系列、各类 Metadata 等,属 CANN 内部/私有算子)

Environment / 环境信息 (Mandatory / 必填)

软件环境:

  • CANN 版本: cann-9.2.0(aarch64,安装路径 /home/developer/Ascend/cann-9.2.0)
  • 三仓代码: ops-cv @ 7684e048 / ops-nn @ b437a1441 / ops-math @ a110241fd(均为 2026-10-16 upstream/master)
  • 构建方式: bash build.sh --pkg(ascend910b,AICPU_BUILTIN_PACKAGE_MANIFEST 全量准入)

硬件环境:

  • NPU 型号: Ascend910_9362(910B)

Steps to reproduce the issue / 重现步骤 (Mandatory / 必填)

  1. 三仓 master checkout,manifest 配置全量准入后执行 bash build.sh --pkg,产出 build/aicpu_{cv,nn,math}.json(经校验与包内 makeself_staging 的 json 一致)
  2. 与安装版 /home/developer/Ascend/cann-9.2.0/opp/built-in/op_impl/aicpu/aicpu_kernel/config/aicpu_kernel.json 做逐算子、逐字段(input*/output*/dynamic_input*/opInfo)比对
  3. 剔除 kernelSo/opKernelLib/userDefined/workspaceSize 四项整包模式固有差异后,输出上述分类结果

Describe the expected behavior / 预期结果 (Mandatory / 必填)

  1. 类别一(打包属性)为 CUSTAICPUKernel 自有 so 注册方式的预期行为,无需处理
  2. 类别二(端口结构差异):整包算子若以 CUSTAICPUKernel 覆盖安装版同名 AICPUKernel,CaseCondition/Coordinates1DTo2D/IndexToAddr/SliceWrite/Conj/TopKPQDistanceV2 的端口绑定与图编译行为可能不一致,建议逐个确认哪边定义正确并对齐
  3. 类别三(dtype 扩展):方向均为整包版超集,属版本演进,建议在发布说明中知悉;TopKV2D/TransData 差异幅度较大需重点评审
  4. 类别五值冲突 3 处(GreaterEqual/AvgPool1DAvgMatrix 的 formatAgnostic、SparseSegmentMean 的 subTypeOfInferShape):两边语义不同,建议对照算子实现代码定论并统一
  5. 类别四(顺序差异)与类别六(集合差异)无行为风险

关键差异数据已在问题描述中以表格完整列出;字段级 diff 可按重现步骤复现。

Special notes for this issue/备注 (Optional / 选填)

  • 本比对基于 9.2.0 安装版与三仓 2026-10-16 master,版本基线差异(dtype 扩展、新增算子)属正常演进
  • 附带发现:ops-math master 的 cmake/config/aicpu_builtin_package_manifest.cmake 中 set(AICPU_BUILTIN_PACKAGE_FORCE_ALL OFF) 为无条件赋值,会覆盖 -DAICPU_BUILTIN_PACKAGE_FORCE_ALL=ON 命令行参数,与 ops-cv/ops-nn 的 if(NOT DEFINED) 保护写法不一致,建议对齐
likedislike
liu-weiliu-weiCollaborators
25 days ago Added label: bug-report
liu-weiliu-weiCollaborators
25 days ago Change title to "[Bug-Report|缺陷反馈]: AICPU整包json与安装版json 算子定义差异梳理", originally titled "[Bug-Report|缺陷反馈]: AICPU整包 aicpu_cv/nn/math.json 与安装版 aicpu_kernel.json 算子定义差异梳理(77个共同算子有实质差异,含端口结构风险项)".
liu-weiliu-weiCollaborators
25 days ago changed custom state from 进行中 to 挂起
liu-weiliu-weiCollaborators
25 days ago Assign liu-wei as responsible person
liu-wei
liu-weiCollaborators
25 days ago Comments:

您好,感谢反馈!

经过分析,问题属实:您报告的差异数据经与三仓 master 代码核验一致。其中 ops-cv 仓涉及的差异项均可从代码机制上解释,属整包注册方式固有行为、默认值显式写入或版本演进,本仓无需缺陷修复;类别二/类别三及值冲突等高风险项涉及 ops-math/ops-nn 仓算子,需在对应仓逐项确认。

问题分析

1. 整包算子数与类别一(打包属性差异)机制确认

ops-cv master 的 AICPU 算子共 6 个:CropAndResize、IMGWarpOffsets、NonMaxSuppressionV3、SpatialTransformer、AdjustSaturation、ScaleAndTranslate,与您比对的 aicpu_cv.json(6) 一致。kernelSo/opKernelLib/userDefined/workspaceSize 四项系统性差异源于整包统一注册配置 ApplyCvAicpuDefaultCfg(common/inc/aicpu/aicpu_op_def.h#L34):全部算子统一注册为 libcv_aicpu_kernels.so 的 CUSTAICPUKernel 并写入 workspaceSize=100,属该注册方式的固有行为,与您"非缺陷"的判断一致。

2. 类别五中 ops-cv 四算子"整包版独有"字段的机制

ApplyCvAicpuDefaultCfg 会为所有算子显式写入 formatAgnostic=False、opsFlag=OPS_FLAG_CLOSE、subTypeOfInferShape=1 三项默认值,而安装版 json 对默认取值字段做了省略,由此产生字段级"整包版独有"差异:

3. 类别六(算子集合差异)

AdjustSaturation(adjust_saturation_aicpu_def.cpp#L20)、ScaleAndTranslate(scale_and_translate_aicpu_def.cpp#L20)确为 ops-cv master 的 AICPU 算子,按您的比对数据 9.2.0 安装版不含,属版本演进;"仅安装版有"的 61 个四仓同名 AICore 实现算子中 cv 侧 12 个(GridSampler2D/2DGrad/3DGrad、Resize 系列、UpsampleNearest3d(Grad)、RotatedNMS)确在本仓以 AICore 实现存在,与您的梳理一致。

4. 附带发现(manifest 写法不一致)属实

ops-cv 采用 if(NOT DEFINED) 保护命令行参数(aicpu_builtin_package_manifest.cmake#L17);按您给出的 ops-math 基线核验,其 aicpu_builtin_package_manifest.cmake#L15 为无条件 set(AICPU_BUILTIN_PACKAGE_FORCE_ALL OFF),确会覆盖 -DAICPU_BUILTIN_PACKAGE_FORCE_ALL=ON 命令行参数,与 ops-cv/ops-nn 的保护写法不一致。

5. 类别二/类别三的仓范围

端口结构差异 6 项(CaseCondition、Coordinates1DTo2D、SliceWrite、Conj、TopKPQDistanceV2 属 ops-math,IndexToAddr 属 ops-nn)与 dtype 集合差异 7 项(Asin、Cast、Expand、SelectV2、TopKV2D、TransData 属 ops-math,SparseToDense 属 ops-nn)涉及的算子均不在 ops-cv 仓,本仓无对应 AICPU 定义,无法在此定论,需在对应仓逐项确认。

后续计划

  • ops-cv 侧:本次核验未发现需要修复的缺陷,涉及本仓四算子的字段差异均有明确机制解释;SpatialTransformer 常量折叠属既定演进内容,将随后续版本发布。
  • 类别二端口结构差异(含 TopKPQDistanceV2 输出编号错位)、类别三 TopKV2D/TransData dtype 差异与 TopKPQDistance dtype 串空格瑕疵、类别五值冲突 3 处(GreaterEqual/AvgPool1DAvgMatrix 的 formatAgnostic、SparseSegmentMean 的 subTypeOfInferShape):属 ops-math/ops-nn 修复范围,我们将在对应仓跟进确认并走评审流程处理;您也可在对应仓分别提 issue 以便跟踪。
  • ops-math manifest 的 if(NOT DEFINED) 保护对齐:属 ops-math 修复范围,将一并跟进。
  • 类别三 dtype 扩展在发布说明中知悉的建议:我们会纳入评估。
likedislike
liu-wei
liu-weiCollaborators
25 days ago Comments:

类别二:端口定义结构差异明细(6 个,风险最高 ⚠️)

"端口"指 aicpu json 中算子的 input*/output*/dynamic_input* 接口声明(端口名 + dtype),图编译/运行时按其绑定张量。三种差异形态:

形态 1:安装版无任何端口定义(4 个) —— 安装版条目仅有 opInfo 调度信息(端口定义来自别处),整包版带完整端口:

算子 [仓] 整包版端口 安装版
CaseCondition [math] input0=x(I32/I64/U64), output0=y(I32) 无端口定义
Coordinates1DTo2D [math] input0=x, input1=shape, output0=row, output1=col, output2=n(均 I32/I64/U64) 无端口定义
IndexToAddr [nn] input0=base_addr(I64/U64), input1=x(I64/U64), output0=addrs_table(I64/U64) 无端口定义
SliceWrite [math] input0=x, input2=value(F16/F/F64/I32/I64), input1=begin(I32/I64), output0=x 无端口定义

形态 2:端口名不同(1 个)

  • Conj [math]:整包版 input0=input / output0=output,安装版 input0=x / output0=y(dtype 均为 COMPLEX64/COMPLEX128,仅命名不同)

形态 3:端口编号错位(1 个,最危险)

  • TopKPQDistanceV2 [math]:topk_index 整包版挂 output1,安装版挂 output2(output1 空缺)。运行时按序号绑定张量,覆盖后存在错绑风险

风险说明:整包算子以 CUSTAICPUKernel 注册后若覆盖内置 AICPUKernel 同名算子,端口表不一致会导致张量绑定/图编译行为变化,建议逐个确认哪边定义正确后对齐。

likedislike
liu-wei
liu-weiCollaborators
25 days ago Comments:

类别三:dtype 支持集合实质差异明细(7 个 + 1 个格式瑕疵)

方向均为整包版 ⊇ 安装版(能力增强,属版本演进),逐端口全量 dtype 对照:

Asin [math]

  • x / y:整包=F16,F,F64,安装=F,F64(整包多 F16)

Cast [math]

  • x:整包 15 种(含 COMPLEX64/128),安装 15 种(集合同)
  • y:整包 16 种,安装 15 种 → 整包多 DT_HIFLOAT8

Expand [math]

  • x / y:整包=BOOL,F,F16,I8,I32,I64,U8,BF16,安装=I8,I32,I64,U8,F,F16 → 整包多 BOOL、BF16

SelectV2 [math]

  • then / else / result:整包 14 种,安装 13 种 → 整包多 DT_BOOL

SparseToDense [nn]

  • values / default_value / y:整包 10 种,安装 9 种 → 整包多 DT_BOOL

TopKV2D [math](差异幅度最大)

  • x / values:整包 11 种(F16,F,F64,U8,I8,U16,I16,U32,I32,U64,I64),安装仅 DT_FLOAT16

TransData [math]

  • src / dst:整包 13 种,安装 6 种(F,F16,I64,I32,I8,BF16)→ 整包多 BOOL/DOUBLE/I16/U16/U32/U64/U8 共 7 种

TopKPQDistance [math](格式瑕疵,集合相同)

  • dynamic_input1/2、output0:整包=F,F16,安装="F16, F"(安装版串内含空格)
likedislike
liu-wei
liu-weiCollaborators
25 days ago Comments:

类别四:仅 dtype 顺序差异明细(16 个,集合相同,无实质影响)

以下算子两端 dtype 集合完全一致,仅排列顺序不同(例:Sub input0 整包=F,F16,F64,... vs 安装=F,F64,F16,...):

算子 [仓] 涉及端口
AvgPool1DAvgMatrix [nn] x, y
Bucketize [nn] x
ConjugateTranspose [math] x, y
OnesLike [math] x, y
ProdEnvMatACalcRij [math] coord, box, rij, distance, rij_x, rij_y, rij_z
ReduceSum [math] x, y
Rsqrt [math] x, y
ScatterNdMax [nn] var, updates, var
ScatterNdMin [nn] var, updates, var
SoftmaxV2 [nn] x, y
SparseSegmentMean [nn] x, y
SparseSegmentSum [nn] x, y
Sqrt [math] x, y
Sub [math] x1, x2, y
TileWithAxis [math] x, y
TopK [math] x, values
likedislike
liu-wei
liu-weiCollaborators
25 days ago Comments:

类别五:opInfo 元数据差异全量明细(47+10 个算子,3 处值冲突)

字段方向统计:formatAgnostic 整包独有 33 + 安装独有 5 + 值不同 2;subTypeOfInferShape 整包独有 28 + 安装独有 3 + 值不同 1;slicePattern 安装独有 24;opsFlag 整包独有 5 + 安装独有 3;implementType 安装独有 4;noTiling 安装独有 2。

⚠️ 值冲突 3 处(建议对照算子代码定论):

  • GreaterEqual [math].formatAgnostic:整包=False,安装=True
  • AvgPool1DAvgMatrix [nn].formatAgnostic:整包=False,安装=True
  • SparseSegmentMean [nn].subTypeOfInferShape:整包=1,安装=2

逐算子明细("安装独有/整包独有"指该字段仅在该版本存在):

  • Acos/Acosh/Asinh/Atan/Atanh/Cosh/Round/Square/Tan/TanhGrad [math]:slicePattern=安装独有(elemwise)
  • Equal/Less/NotEqual/SquaredDifference [math]:slicePattern=安装独有(elemwiseBroadcast)
  • Add/Mul [math]:implementType=安装独有(1);slicePattern=安装独有
  • AdaptiveMaxPool2d [nn]:subTypeOfInferShape=整包独有(1)
  • CalcBucketsLimitAndOffset [math]:formatAgnostic=整包独有(False);subTypeOfInferShape=整包独有(1)
  • CaseCondition [math]:formatAgnostic=整包独有(False);subTypeOfInferShape=整包独有(1)
  • Cast [math]:formatAgnostic=整包独有(False);implementType=安装独有(1);slicePattern=安装独有(elemwise);subTypeOfInferShape=整包独有(1)
  • Ceil [math]:slicePattern=安装独有(elemwise);subTypeOfInferShape=整包独有(1)
  • ClipByValueV2/GetDynamicDims/LinSpace/Log/ReduceMean/SearchSorted [math]:formatAgnostic=整包独有(False)
  • ConcatV2/Cumsum/Greater/SplitV [math]:formatAgnostic=整包独有(False);subTypeOfInferShape=整包独有(1)
  • Coordinates1DTo2D [math]:formatAgnostic=整包独有(True);subTypeOfInferShape=整包独有(1)
  • CropAndResize [cv]:subTypeOfInferShape=整包独有(1)
  • Elu [nn]:formatAgnostic=整包独有(False)
  • Expand [math]:formatAgnostic=整包独有(False);subTypeOfInferShape=整包独有(1)
  • GatherV2 [nn]:formatAgnostic=整包独有(False);subTypeOfInferShape=整包独有(1)
  • IMGWarpOffsets [cv]:formatAgnostic=整包独有(False);subTypeOfInferShape=整包独有(1)
  • Identity [math]:formatAgnostic=安装独有(True);opsFlag=安装独有(OPS_FLAG_OPEN);subTypeOfInferShape=安装独有(1)
  • IndexToAddr [nn]:formatAgnostic=整包独有(False);subTypeOfInferShape=整包独有(1)
  • LogSoftmaxV2 [nn]:formatAgnostic=整包独有(False);subTypeOfInferShape=整包独有(1)
  • Neg [math]:formatAgnostic=整包独有(False);slicePattern=安装独有(elemwise);subTypeOfInferShape=整包独有(1)
  • NonMaxSuppressionV3 [cv]:formatAgnostic=整包独有(False)
  • NonZeroWithValueShape/V2 [nn]:formatAgnostic=整包独有(False);opsFlag=整包独有(OPS_FLAG_OPEN);noTiling=安装独有(True)
  • OnesLike [math]:formatAgnostic=整包独有(True);subTypeOfInferShape=整包独有(1)
  • Pow [math]:formatAgnostic=安装独有(False);opsFlag=安装独有(OPS_FLAG_CLOSE);subTypeOfInferShape=安装独有(1)
  • RealDiv [math]:slicePattern=安装独有(elemwiseBroadcast);subTypeOfInferShape=整包独有(1)
  • ReverseSequence [nn] / SqrtGrad [math]:subTypeOfInferShape=整包独有(1)
  • Rsqrt [math] / Sqrt [math]:formatAgnostic=安装独有(True);slicePattern=安装独有(elemwise)
  • ScatterElements [nn]:formatAgnostic=整包独有(False);opsFlag=整包独有(OPS_FLAG_OPEN);subTypeOfInferShape=整包独有(1)
  • SliceWrite [math]:formatAgnostic=整包独有(False);subTypeOfInferShape=整包独有(1)
  • SparseToDense [nn]:formatAgnostic=整包独有(False);subTypeOfInferShape=整包独有(1)
  • SpatialTransformer [cv]:opsFlag=整包独有(OPS_FLAG_OPEN);subTypeOfInferShape=整包独有(1)
  • Sub [math]:formatAgnostic=整包独有(False);implementType=安装独有(1);slicePattern=安装独有(elemwiseBroadcast);subTypeOfInferShape=整包独有(1)
  • Tile [math]:formatAgnostic=安装独有(False);opsFlag=安装独有(OPS_FLAG_OPEN);subTypeOfInferShape=安装独有(1)
  • TileWithAxis [math]:formatAgnostic=整包独有(False);opsFlag=整包独有(OPS_FLAG_OPEN)
  • TopK [math] / TopKV2D [math] / TransData [math]:formatAgnostic=整包独有(False);(TopK/TopKV2D 另有 subTypeOfInferShape=整包独有(1))
likedislike
liu-wei
liu-weiCollaborators
25 days ago Comments:

类别六:算子集合差异明细

A. 仅整包有(9 个,安装版 9.2.0 无)

  • math 7 个:AddN、Div、Reshape、Sinh、SplitD、Unpack、UnfoldGrad
  • cv 2 个:AdjustSaturation、ScaleAndTranslate

B. 仅安装版有(168 个),按归属分两类:

B1. 四仓有同名 AICore 注册(61 个)——同名算子在仓里以 AICore 形态提供,安装版走 AICPU:

  • cv 12 个:GridSampler2D、GridSampler2DGrad、GridSampler3DGrad、Resize、ResizeBilinearV2、ResizeBilinearV2Grad、ResizeGrad、ResizeNearestNeighborV2、ResizeTrilinear、RotatedNMS、UpsampleNearest3d、UpsampleNearest3dGrad
  • math 28 个:Addcdiv、Addcmul、DataCompare、Fills、Floor、Histogram、IsClose、IsFinite、LeftShift、MaskedFill、MirrorPad、Pad、PadV3、PadV3Grad、RandomChoiceWithMask、RandomStandardNormal、RandomUniform、STFT、StatelessBernoulli、StatelessDropOutGenMask、StatelessRandomUniformV2、StatelessRandperm、TensorEqual、TopKV2、Trace、Tril、Triu、ViewCopy
  • math+nn 2 个:Pack、Sort
  • nn 17 个:AvgPoolV2、BatchMatMulV2、CTCLossV2、CTCLossV2Grad、GatherElements、Index、IndexPutV2、InplaceIndexAdd、MaskedScatter、MaskedSelect、NLLLoss、NLLLossGrad、NonZero、ScatterNdAdd、Sigmoid、UniqueConsecutive、UniqueWithCountsAndSorting
  • transformer 2 个:AttentionWorkerScheduler、FfnWorkerScheduler

B2. 四仓均无注册(107 个)——CANN 内部/私有算子:
ActiveRotatedFilter、ActiveRotatedFilterGrad、AdaptiveAvgPool2dAssistMatrix、AdaptiveAvgPoolAssistMatrix、AffineGrid、AicpuPathwayVerification、AssistHelp、BatchDilatePolys、BatchEnqueue、CTCGreedyDecoder、CTCLoss、CacheSwapHashmap、CacheSwapTable、CacheUpdate、CacheVerification、Combinations、Crypto、Cummax、Cummin、DecodeJpegPre、DeinitEmbeddingHashmapV2、DenseLightningIndexerKLLossGradMetadata、DenseLightningIndexerSoftmaxLseV2Metadata、Dequeue、DropOutGenMask、EditDistance、EmbeddingHashmapSize、EmbeddingLookup、EndOfSequence、Exponential、FaultInjection、FillDiagonal、FlashAttnMetadata、FrequencyRegulator、GatherD、GenericBlockSparseAttentionGradMetadata、GenericBlockSparseAttentionMetadata、Geometric、GetNext、GridSampler3D、HcclAicpuOp、IndexPut、IndexPutV3、InitData、InitEmbeddingHashmapV2、LDPCDecode、LightningIndexerV2Metadata、Meshgrid、MinAreaPolygons、MirrorPadGrad、MixedQuantSparseFlashMlaMetadata、MultinomialAliasDraw、MultinomialAliasSetup、MultinomialWithReplacement、Normal、OCRDetectionPostHandle、OCRDetectionPreHandle、OCRFindContours、OCRIdentifyPreHandle、OCRRecognitionPreHandle、ObfuscationCalculate、ObfuscationSetup、PSAMask、PSAMaskGrad、PeekData、Pinverse、Poisson、Print、PyPto、QuantFlashAttnMetadata、QuantLightningIndexerV2Metadata、QuantSparseFlashMlaMetadata、RNNTLoss、Random、RandomCategorical、Randperm、ResizeAndClipPolys、ResizeV2、RoiPoolingWithArgMax、ScatterAddWithAxis、SearchCacheIdx、ShmemSdmaStarsQuery、SilentCheck、SilentCheckV2、SilentCheckV3、SparseFlashMlaGradMetadata、SparseFlashMlaMetadata、SparseFlashMlaSoftmaxL1NormMetadata、SparseLightningIndexerKLLossGradMetadata、StandardLaplace、StandardNormal、StringNormalizer、TableToResourceV2、TfIdfVectorizer、ThreeNN、Uniform、UniqueWithCountsExt2、UniqueWithPad、UpdateCache、UpsampleNearest1d、UpsampleNearest1dGrad、UpsampleTrilinear3d、UpsampleTrilinear3dGrad、VoltageRegulator、Voxelization、WarpAffine、WarpAffineV2

风险说明:B1 类若整包 AICore 版本与安装版 AICPU 版本同名共存,算子选择策略需明确优先级;B2 类不涉及公开仓,无冲突风险。

likedislike
liu-weiliu-weiCollaborators
22 days ago Added label: feature; Removed label: bug-report
Ding_Jing
Ding_JingCollaborators
22 days ago Comments:

补充独立复核结果:配置差异确实存在,但当前扫描的分类、去重计数和部分风险推断需要修订,建议不要直接按全部差异批量对齐代码。

复核基线与方法

源码先 fetch 后固定为 2026-10-19 上午(UTC+8)的 master 快照:ops-cv 4fd6eae0、ops-nn 0c33f6373c、ops-math 0ea82828d、ops-transformer e714fd3a2。参与三仓 JSON 生成的 8 / 25 / 78 个文件分别与本 Issue 指定提交逐字节相同,以下主要分类问题不能归因于最近几天的源码更新。

重新下载并校验了官方最新 CANN 9.2.0 正式版 Toolkit 和 910B/aarch64 Ops 包,实际安装 Toolkit,组件构建时间为 20261015_201912253。用真实头文件、库及 op_build --aicpu 重建 JSON,并与各仓原生解析、合并脚本核对:cv=6、nn=23、math=76,合计 105,互不重叠。

本次是 JSON 真实生成及源码审视;Ops 比较输入来自官方包解出的配置。未执行完整 build.sh --pkg、NPU 运行或端到端图编译,因此以下静态风险不等于已复现故障。

1. 最新正式包的集合统计已变化,应单独标记版本差异

指标 Issue 原统计 最新正式包复算
三仓生成侧 105 105
安装侧 264 264
共同算子 96 97
仅生成侧 9 8
仅安装侧 168 167
剔除四项打包字段后无其他差异 19 19
剔除四项打包字段后有原始字段差异 77 78

新版包含 UnfoldGrad;其生成侧 input1.type 为三个重复的 DT_INT64,安装侧为一个,按 dtype 集合等价。与原“仅安装”明细相比,新版少了 Pad,未增加其他名字。仅生成侧现为 AddN、Div、Reshape、Sinh、SplitD、Unpack、AdjustSaturation、ScaleAndTranslate。

这部分应作为版本差异记录,不能反推作者旧包的数据一定错误。建议补充原始安装 JSON 的构建时间、SHA256 和扫描脚本,明确比较对象。本次使用的官方 Ops 包中,aicpu_kernel.json 的 SHA256 为:

e54346e96289aa98aeffcbeb9ab7ef0c152f9b1c20ab6a64616dbf57c2c40ce7

2. B2“107 个公开四仓均无注册、属内部/私有算子”存在明确漏检

至少 16 个名字在 Issue 发布前的公开代码中已有同名注册:

  • 14 个 Metadata 算子在 ops-transformer 的 op_kernel_aicpu/*.json 中注册为 CUSTAICPUKernel。例如 FlashAttnMetadata。这里已同时核实早于 Issue 创建时间的历史快照,排除了发布后新增的可能。
  • RoiPoolingWithArgMax 和 Cummin 有 AICore OpDef;这两项针对 ascend950,证明的是“公开存在注册”,不代表扫描所用 ascend910b 可用。

14 个 Metadata 名称为:DenseLightningIndexerKLLossGradMetadata、DenseLightningIndexerSoftmaxLseV2Metadata、FlashAttnMetadata、GenericBlockSparseAttentionGradMetadata、GenericBlockSparseAttentionMetadata、LightningIndexerV2Metadata、MixedQuantSparseFlashMlaMetadata、QuantFlashAttnMetadata、QuantLightningIndexerV2Metadata、QuantSparseFlashMlaMetadata、SparseFlashMlaGradMetadata、SparseFlashMlaMetadata、SparseFlashMlaSoftmaxL1NormMetadata、SparseLightningIndexerKLLossGradMetadata。两项在 experimental 下有副本,按名字去重后仍是 14 个。

其余未检出的条目也只能写“未定位同名注册”,不能仅凭搜索未命中推断为私有实现,或据此断言无冲突风险。

3. B1“61 个同名 AICore 注册”包含后端误分类

AttentionWorkerScheduler 和 FfnWorkerScheduler 实际调用 ApplyTransformerAicpuDefaultCfg,走 AICPU,不能归入该 AICore 清单。

此外,BatchMatMulV2、Histogram、LeftShift、MaskedSelect、RandomChoiceWithMask、RandomStandardNormal、RandomUniform、Resize、ResizeTrilinear、RotatedNMS 这 10 个名字,本次只定位到图原型声明,未定位同名直接 AICore OpDef。REG_OP 不能单独证明存在同名 AICore 实现;若存在转换或复用实现,需要补相应证据。本次直接确认了原清单中 49 个名字的 .AICore() 注册,不能据此断言另外 10 个绝无实现。

4. “77 个实质差异”混入了顺序差异和默认值等价项

按 Issue 自己的分类明细,Bucketize、ConjugateTranspose、ProdEnvMatACalcRij、ReduceSum、ScatterNdMax、ScatterNdMin、SoftmaxV2、SparseSegmentSum 至少这 8 个只有 dtype 顺序差异,不能同时称为“实质差异”。

公开 GE 的普通 dtype 支持检查按集合处理;formatAgnostic 缺省 False、subTypeOfInferShape 缺省 1、noTiling 缺省 False。按这些已确认规则作有限归一化,最新版 78 个原始差异条目中,30 个不再有字段差异,48 个仍需核查。48 不是已证明缺陷数;也没有将所有缺失字段一律等价,例如 opsFlag 缺失不能直接当成 CLOSE。默认值处理源码

对 ops-cv 自身,CropAndResize、IMGWarpOffsets、NonMaxSuppressionV3 所列元数据差异可按上述默认值归一化;SpatialTransformer 的 opsFlag 差异仍需保留核查,不能将四项统一认定为行为缺陷。

5. 元数据计数和 Cast 明细需更正

类别五正文写 47,评论标题写“47+10”,但评论展开并去重后实际列出 64 个名字。最新原件实算为 65 个,明细漏列了 Asin 的 slicePattern。各字段方向次数则与 Issue 一致:formatAgnostic 为 33/5/2,subTypeOfInferShape 为 28/3/1,slicePattern 为 24,opsFlag 为 5/3,implementType 为 4,noTiling 为 2;不能把字段次数与去重算子数混用。

Cast 正文与补充评论也不一致。最新官方包输入为 13 种 dtype,生成侧 15 种,确实新增 COMPLEX64/COMPLEX128;输出另新增 HIFLOAT8。因此正文的输入复数扩展在当前基线成立,补充评论“输入两边均 15 种、集合同”不适用于当前正式包;旧包情况仍需原件确认。

6. 六个端口差异属实,但不能由 output 编号直接推导运行时错绑

最新版确认了四项从无端口到补齐端口、Conj 端口名不同,以及 TopKPQDistanceV2 的 output1/output2 差异。Conj 的新名称与同仓图原型一致;TopKPQDistanceV2 新的 topk_index=output1 与第二输出及 kernel 下标 1一致,不能为了对齐旧 JSON 改成 output2。

公开 GE 将真实端口名映射到 inputN/outputN 键用于 dtype 查询;构造 AICPU NodeDef 时则按 OpDesc 输出序号遍历,不读取该 JSON 后缀来重排张量。因此“编号错位导致输出错绑、风险最高”缺充分依据,应改成需要验证的配置兼容性问题。dtype 检查、NodeDef 输出构建

7. 两项被过滤或低估的疑点

  • Identity 的 kernelSo 异常:ops-math identity.json 实际指向 libnn_aicpu_kernels.so,生成结果亦如此。其 kernel 源码及构建接线在 math,不能一概作为“切换为本仓 so”的正常打包差异过滤。应核对包内符号及加载行为,目前未复现运行失败。
  • TopKPQDistance 的 dtype 空格:官方原件确实有 DT_FLOAT16, DT_FLOAT。公开 GE SplitSequence/GetDataType 不 trim, DT_FLOAT 不会被精确识别为 DT_FLOAT。不能由扫描脚本 trim 后直接判为无害;具体动态端口执行路径仍需验证。

确认可继续保留的核查项:7 个 dtype 集合扩展、6 个端口配置差异本身均可复算;GreaterEqual/AvgPool1DAvgMatrix 的 formatAgnostic 值冲突及 SparseSegmentMean 的 subtype 值冲突均属实。FORCE_ALL 问题也已用 CMake 实测:命令行传 ON,cv/nn 保持 ON,math 被无条件赋值为 OFF。

建议先修订注册归属、去重计数、Cast 评论和“实质差异/错绑”表述,再针对 Identity、空格解析、三项值冲突和 FORCE_ALL 分别确认责任及修复方式。

likedislike
liu-wei
liu-weiCollaborators
14 days ago Comments:

需求已梳理清楚,该issue关闭。

likedislike
liu-weiliu-weiCollaborators
14 days ago changed custom state from 挂起 to 已完成
liu-weiliu-weiCollaborators
14 days ago Close issue
CANN-robotCANN-robotCollaborators
13 days ago Added label: resolved