您好,感谢反馈!
经过分析,问题属实:您报告的差异数据经与三仓 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 对默认取值字段做了省略,由此产生字段级"整包版独有"差异:
- CropAndResize 的 subTypeOfInferShape=1(crop_and_resize_aicpu_def.cpp#L32)、IMGWarpOffsets 的 formatAgnostic=False 与 subTypeOfInferShape=1(image_warp_offsets_aicpu_def.cpp#L24)、NonMaxSuppressionV3 的 formatAgnostic=False(non_max_suppression_v3_aicpu_def.cpp#L24)均为默认值显式写入,与安装版省略默认值语义等价,无行为风险;
- SpatialTransformer 的 opsFlag 为整包版独有且取值 OPS_FLAG_OPEN(spatial_transformer_aicpu_def.cpp#L46):该常量折叠支持系 9.2.0 安装基线之后合入 master 的演进内容(CropAndResize/IMGWarpOffsets 的同名配置在 9.2.0 中已存在,与您未将二者列为 opsFlag 差异一致),将在后续版本生效;
- NonMaxSuppressionV3 的 subTypeOfInferShape=4(non_max_suppression_v3_aicpu_def.cpp#L31)与 SpatialTransformer 的 formatAgnostic=True(spatial_transformer_aicpu_def.cpp#L47)为非默认显式配置,均未出现在您的差异清单中,即与安装版一致,与代码核验吻合。
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 扩展在发布说明中知悉的建议:我们会纳入评估。


类别二:端口定义结构差异明细(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 同名算子,端口表不一致会导致张量绑定/图编译行为变化,建议逐个确认哪边定义正确后对齐。


类别三: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"(安装版串内含空格)


类别四:仅 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 |


类别五: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))


类别六:算子集合差异明细
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 类不涉及公开仓,无冲突风险。


补充独立复核结果:配置差异确实存在,但当前扫描的分类、去重计数和部分风险推断需要修订,建议不要直接按全部差异批量对齐代码。
复核基线与方法
源码先 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 分别确认责任及修复方式。


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


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.0opp/built-in/op_impl/aicpu/aicpu_kernel/config/aicpu_kernel.json(264 算子)逐算子逐字段比对。总体数据
共同 96 个算子中:19 个仅打包属性差异(算子定义与安装版完全等价)、77 个存在实质内容差异。
差异分类明细
类别一:系统性打包属性差异(96/96 全部存在,整包模式固有,非缺陷)
lib{cv/nn/math}_aicpu_kernels.solibcpu_kernels.soCUSTAICPUKernelAICPUKernelTrueFalse类别二:端口定义结构差异(6 个,风险最高 ⚠️)
x(I32/I64/U64) -> y(I32)x,shape -> row,col,n(2入3出)base_addr,x -> addrs_tablex,begin,value -> xinput/outputvs 安装版x/ytopk_index输出编号错位:整包版 output1,安装版 output2类别三:dtype 支持集合实质差异(7 个,方向均为整包版 ⊇ 安装版)
DT_FLOAT16(安装版仅 FLOAT/DOUBLE)DT_COMPLEX64/DT_COMPLEX128;y 多DT_HIFLOAT8DT_BF16,DT_BOOLDT_BOOLDT_BOOL另 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 处)
字段分布统计:
值冲突明细(建议核对算子代码定论):
其中 ops-cv 仓涉及的算子:CropAndResize(subTypeOfInferShape 整包版独有)、IMGWarpOffsets(formatAgnostic + subTypeOfInferShape 整包版独有)、NonMaxSuppressionV3(formatAgnostic 整包版独有)、SpatialTransformer(opsFlag + subTypeOfInferShape 整包版独有)。
类别六:算子集合差异
Environment / 环境信息 (Mandatory / 必填)
软件环境:
bash build.sh --pkg(ascend910b,AICPU_BUILTIN_PACKAGE_MANIFEST 全量准入)硬件环境:
Steps to reproduce the issue / 重现步骤 (Mandatory / 必填)
bash build.sh --pkg,产出build/aicpu_{cv,nn,math}.json(经校验与包内 makeself_staging 的 json 一致)/home/developer/Ascend/cann-9.2.0/opp/built-in/op_impl/aicpu/aicpu_kernel/config/aicpu_kernel.json做逐算子、逐字段(input*/output*/dynamic_input*/opInfo)比对Describe the expected behavior / 预期结果 (Mandatory / 必填)
Related log / screenshot / 日志 / 截图 (Mandatory / 必填)
关键差异数据已在问题描述中以表格完整列出;字段级 diff 可按重现步骤复现。
Special notes for this issue/备注 (Optional / 选填)
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)保护写法不一致,建议对齐