已合并
fix(arch35): scatter 类补 AutoContiguous;LambApplyOptimizerAssign infershape 与 tiling 对齐;foreach inplace 与 ScatterList 资料订正 #8767
fix(arch35): scatter 类补 AutoContiguous;LambApplyOptimizerAssign infershape 与 tiling 对齐;foreach inplace 与 ScatterList 资料订正 #8767
已合并
zl_hw创建于 8月17日
共 19 个文件变更+187-59
@@ -235,7 +235,7 @@
235| [aclnnForeachSubScalarInplace](../../foreach/foreach_sub_scalar_inplace/docs/aclnnForeachSubScalarInplace.md) | 对输入张量列表中的每个张量逐元素减去同一标量,结果原地更新。 | - | 默认确定性实现 |235| [aclnnForeachSubScalarInplace](../../foreach/foreach_sub_scalar_inplace/docs/aclnnForeachSubScalarInplace.md) | 对输入张量列表中的每个张量逐元素减去同一标量,结果原地更新。 | - | 默认确定性实现 |
236| [aclnnForeachTan](../../foreach/foreach_tan/docs/aclnnForeachTan.md) | 对输入张量列表的每个张量进行正切函数运算。 | 默认确定性实现 | 默认确定性实现 |236| [aclnnForeachTan](../../foreach/foreach_tan/docs/aclnnForeachTan.md) | 对输入张量列表的每个张量进行正切函数运算。 | 默认确定性实现 | 默认确定性实现 |
237| [aclnnForeachTanh](../../foreach/foreach_tanh/docs/aclnnForeachTanh.md) | 对输入张量列表的每个张量进行双曲正切函数运算。 | 默认确定性实现 | 默认确定性实现 |237| [aclnnForeachTanh](../../foreach/foreach_tanh/docs/aclnnForeachTanh.md) | 对输入张量列表的每个张量进行双曲正切函数运算。 | 默认确定性实现 | 默认确定性实现 |
238-| [aclnnForeachZeroInplace](../../foreach/foreach_zero_inplace/docs/aclnnForeachZeroInplace.md) | 原地更新输入张量列表,输入张量列表的每个张量置为0。 | 默认确定性实现 | - |238+| [aclnnForeachZeroInplace](../../foreach/foreach_zero_inplace/docs/aclnnForeachZeroInplace.md) | 原地更新输入张量列表,输入张量列表的每个张量置为0。 | 默认确定性实现 | 默认确定性实现 |
239| [aclnnFusedCrossEntropyLossWithMaxSum](../../loss/fused_cross_entropy_loss_with_max_sum/docs/aclnnFusedCrossEntropyLossWithMaxSum.md) | 词汇表并行场景下交叉熵计算模块的一部分,解决超大规模词汇表下的显存和计算效率问题,当前部分为计算loss与softMax的结果。 | 默认确定性实现 | 默认确定性实现 |239| [aclnnFusedCrossEntropyLossWithMaxSum](../../loss/fused_cross_entropy_loss_with_max_sum/docs/aclnnFusedCrossEntropyLossWithMaxSum.md) | 词汇表并行场景下交叉熵计算模块的一部分,解决超大规模词汇表下的显存和计算效率问题,当前部分为计算loss与softMax的结果。 | 默认确定性实现 | 默认确定性实现 |
240| [aclnnFusedLinearOnlineMaxSum](../../matmul/fused_linear_online_max_sum/docs/aclnnFusedLinearOnlineMaxSum.md) | 功能等价Megatron的matmul与fused\_vocab\_parallel\_cross\_entropy的实现,支持vocabulary\_size维度切卡融合matmul与cross-entropy loss。 | 默认确定性实现 | - |240| [aclnnFusedLinearOnlineMaxSum](../../matmul/fused_linear_online_max_sum/docs/aclnnFusedLinearOnlineMaxSum.md) | 功能等价Megatron的matmul与fused\_vocab\_parallel\_cross\_entropy的实现,支持vocabulary\_size维度切卡融合matmul与cross-entropy loss。 | 默认确定性实现 | - |
241| [aclnnFusedLinearCrossEntropyLossGrad](../../matmul/fused_linear_cross_entropy_loss_grad/docs/aclnnFusedLinearCrossEntropyLossGrad.md) | 是词汇表并行场景下交叉熵损失计算模块中的一部分,解决超大规模词汇表下的显存和计算效率问题,当前部分为梯度计算实现,用于计算叶子节点`input`和`weight`的梯度。 | 默认确定性实现 | - |241| [aclnnFusedLinearCrossEntropyLossGrad](../../matmul/fused_linear_cross_entropy_loss_grad/docs/aclnnFusedLinearCrossEntropyLossGrad.md) | 是词汇表并行场景下交叉熵损失计算模块中的一部分,解决超大规模词汇表下的显存和计算效率问题,当前部分为梯度计算实现,用于计算叶子节点`input`和`weight`的梯度。 | 默认确定性实现 | - |
@@ -5,8 +5,8 @@
5|产品 | 是否支持 |5|产品 | 是否支持 |
6|:-------------------------|:----------:|6|:-------------------------|:----------:|
7| <term>Ascend 950PR/Ascend 950DT</term> | √ |7| <term>Ascend 950PR/Ascend 950DT</term> | √ |
8-| <term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term> | × |8+| <term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term> | √ |
9-| <term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term> | × |9+| <term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term> | √ |
10| <term>Atlas 200I/500 A2 推理产品</term> | × |10| <term>Atlas 200I/500 A2 推理产品</term> | × |
11| <term>Atlas 推理系列产品</term> | × |11| <term>Atlas 推理系列产品</term> | × |
12| <term>Atlas 训练系列产品</term> | × |12| <term>Atlas 训练系列产品</term> | × |
@@ -5,8 +5,8 @@
5|产品 | 是否支持 |5|产品 | 是否支持 |
6|:-------------------------|:----------:|6|:-------------------------|:----------:|
7| <term>Ascend 950PR/Ascend 950DT</term> | √ |7| <term>Ascend 950PR/Ascend 950DT</term> | √ |
8-| <term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term> | × |8+| <term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term> | √ |
9-| <term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term> | × |9+| <term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term> | √ |
10| <term>Atlas 200I/500 A2 推理产品</term> | × |10| <term>Atlas 200I/500 A2 推理产品</term> | × |
11| <term>Atlas 推理系列产品</term> | × |11| <term>Atlas 推理系列产品</term> | × |
12| <term>Atlas 训练系列产品</term> | × |12| <term>Atlas 训练系列产品</term> | × |
@@ -5,8 +5,8 @@
5|产品 | 是否支持 |5|产品 | 是否支持 |
6|:-------------------------|:----------:|6|:-------------------------|:----------:|
7| <term>Ascend 950PR/Ascend 950DT</term> | √ |7| <term>Ascend 950PR/Ascend 950DT</term> | √ |
8-| <term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term> | × |8+| <term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term> | √ |
9-| <term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term> | × |9+| <term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term> | √ |
10| <term>Atlas 200I/500 A2 推理产品</term> | × |10| <term>Atlas 200I/500 A2 推理产品</term> | × |
11| <term>Atlas 推理系列产品</term> | × |11| <term>Atlas 推理系列产品</term> | × |
12| <term>Atlas 训练系列产品</term> | × |12| <term>Atlas 训练系列产品</term> | × |
@@ -5,8 +5,8 @@
5|产品 | 是否支持 |5|产品 | 是否支持 |
6|:-------------------------|:----------:|6|:-------------------------|:----------:|
7| <term>Ascend 950PR/Ascend 950DT</term> | √ |7| <term>Ascend 950PR/Ascend 950DT</term> | √ |
8-| <term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term> | × |8+| <term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term> | √ |
9-| <term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term> | × |9+| <term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term> | √ |
10| <term>Atlas 200I/500 A2 推理产品</term> | × |10| <term>Atlas 200I/500 A2 推理产品</term> | × |
11| <term>Atlas 推理系列产品</term> | × |11| <term>Atlas 推理系列产品</term> | × |
12| <term>Atlas 训练系列产品</term> | × |12| <term>Atlas 训练系列产品</term> | × |
@@ -5,8 +5,8 @@
5|产品 | 是否支持 |5|产品 | 是否支持 |
6|:-------------------------|:----------:|6|:-------------------------|:----------:|
7| <term>Ascend 950PR/Ascend 950DT</term> | √ |7| <term>Ascend 950PR/Ascend 950DT</term> | √ |
8-| <term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term> | × |8+| <term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term> | √ |
9-| <term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term> | × |9+| <term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term> | √ |
10| <term>Atlas 200I/500 A2 推理产品</term> | × |10| <term>Atlas 200I/500 A2 推理产品</term> | × |
11| <term>Atlas 推理系列产品</term> | × |11| <term>Atlas 推理系列产品</term> | × |
12| <term>Atlas 训练系列产品</term> | × |12| <term>Atlas 训练系列产品</term> | × |
@@ -5,8 +5,8 @@
5|产品 | 是否支持 |5|产品 | 是否支持 |
6|:-------------------------|:----------:|6|:-------------------------|:----------:|
7| <term>Ascend 950PR/Ascend 950DT</term> | √ |7| <term>Ascend 950PR/Ascend 950DT</term> | √ |
8-| <term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term> | × |8+| <term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term> | √ |
9-| <term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term> | × |9+| <term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term> | √ |
10| <term>Atlas 200I/500 A2 推理产品</term> | × |10| <term>Atlas 200I/500 A2 推理产品</term> | × |
11| <term>Atlas 推理系列产品</term> | × |11| <term>Atlas 推理系列产品</term> | × |
12| <term>Atlas 训练系列产品</term> | × |12| <term>Atlas 训练系列产品</term> | × |
@@ -5,8 +5,8 @@
5|产品 | 是否支持 |5|产品 | 是否支持 |
6|:-------------------------|:----------:|6|:-------------------------|:----------:|
7| <term>Ascend 950PR/Ascend 950DT</term> | √ |7| <term>Ascend 950PR/Ascend 950DT</term> | √ |
8-| <term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term> | × |8+| <term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term> | √ |
9-| <term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term> | × |9+| <term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term> | √ |
10| <term>Atlas 200I/500 A2 推理产品</term> | × |10| <term>Atlas 200I/500 A2 推理产品</term> | × |
11| <term>Atlas 推理系列产品</term> | × |11| <term>Atlas 推理系列产品</term> | × |
12| <term>Atlas 训练系列产品</term> | × |12| <term>Atlas 训练系列产品</term> | × |
@@ -5,8 +5,8 @@
5|产品 | 是否支持 |5|产品 | 是否支持 |
6|:-------------------------|:----------:|6|:-------------------------|:----------:|
7| <term>Ascend 950PR/Ascend 950DT</term> | √ |7| <term>Ascend 950PR/Ascend 950DT</term> | √ |
8-| <term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term> | × |8+| <term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term> | √ |
9-| <term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term> | × |9+| <term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term> | √ |
10| <term>Atlas 200I/500 A2 推理产品</term> | × |10| <term>Atlas 200I/500 A2 推理产品</term> | × |
11| <term>Atlas 推理系列产品</term> | × |11| <term>Atlas 推理系列产品</term> | × |
12| <term>Atlas 训练系列产品</term> | × |12| <term>Atlas 训练系列产品</term> | × |
@@ -4,7 +4,7 @@
4 4 
5|产品 | 是否支持 |5|产品 | 是否支持 |
6|:-------------------------|:----------:|6|:-------------------------|:----------:|
7-| <term>Ascend 950PR/Ascend 950DT</term> | × |7+| <term>Ascend 950PR/Ascend 950DT</term> | √ |
8| <term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term> | √ |8| <term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term> | √ |
9| <term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term> | √ |9| <term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term> | √ |
10| <term>Atlas 200I/500 A2 推理产品</term> | × |10| <term>Atlas 200I/500 A2 推理产品</term> | × |
@@ -5,7 +5,7 @@
5## 产品支持情况5## 产品支持情况
6 6 
7<!-- npu="950" id1 -->7<!-- npu="950" id1 -->
8-- <term>Ascend 950PR/Ascend 950DT</term>:不支持8+- <term>Ascend 950PR/Ascend 950DT</term>:支持
9<!-- end id1 -->9<!-- end id1 -->
10<!-- npu="A3" id2 -->10<!-- npu="A3" id2 -->
11- <term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term>:支持11- <term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term>:支持
@@ -27,7 +27,8 @@ public:
27 .Format({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,27 .Format({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,
28 ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})28 ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})
29 .UnknownShapeFormat({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,29 .UnknownShapeFormat({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,
30- ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND});30+ ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})
31+ .AutoContiguous();
31 this->Input("indices")32 this->Input("indices")
32 .ParamType(REQUIRED)33 .ParamType(REQUIRED)
33 .DataType({ge::DT_INT32, ge::DT_INT32, ge::DT_INT32, ge::DT_INT32, ge::DT_INT32, ge::DT_INT64, ge::DT_INT64,34 .DataType({ge::DT_INT32, ge::DT_INT32, ge::DT_INT32, ge::DT_INT32, ge::DT_INT32, ge::DT_INT64, ge::DT_INT64,
@@ -35,7 +36,8 @@ public:
35 .Format({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,36 .Format({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,
36 ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})37 ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})
37 .UnknownShapeFormat({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,38 .UnknownShapeFormat({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,
38- ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND});39+ ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})
40+ .AutoContiguous();
39 this->Input("updates")41 this->Input("updates")
40 .ParamType(REQUIRED)42 .ParamType(REQUIRED)
41 .DataType({ge::DT_FLOAT16, ge::DT_FLOAT, ge::DT_INT32, ge::DT_INT8, ge::DT_UINT8, ge::DT_FLOAT16,43 .DataType({ge::DT_FLOAT16, ge::DT_FLOAT, ge::DT_INT32, ge::DT_INT8, ge::DT_UINT8, ge::DT_FLOAT16,
@@ -43,7 +45,8 @@ public:
43 .Format({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,45 .Format({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,
44 ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})46 ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})
45 .UnknownShapeFormat({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,47 .UnknownShapeFormat({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,
46- ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND});48+ ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})
49+ .AutoContiguous();
47 this->Output("var")50 this->Output("var")
48 .ParamType(REQUIRED)51 .ParamType(REQUIRED)
49 .DataType({ge::DT_FLOAT16, ge::DT_FLOAT, ge::DT_INT32, ge::DT_INT8, ge::DT_UINT8, ge::DT_FLOAT16,52 .DataType({ge::DT_FLOAT16, ge::DT_FLOAT, ge::DT_INT32, ge::DT_INT8, ge::DT_UINT8, ge::DT_FLOAT16,
@@ -51,7 +54,8 @@ public:
51 .Format({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,54 .Format({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,
52 ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})55 ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})
53 .UnknownShapeFormat({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,56 .UnknownShapeFormat({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,
54- ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND});57+ ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})
58+ .AutoContiguous();
55 this->Attr("use_locking").AttrType(OPTIONAL).Bool(false);59 this->Attr("use_locking").AttrType(OPTIONAL).Bool(false);
56 60 
57 OpAICoreConfig aicoreConfig;61 OpAICoreConfig aicoreConfig;
@@ -253,6 +253,13 @@ aclnnStatus aclnnScatterList(
253- 确定性计算:253- 确定性计算:
254 - aclnnScatterList默认非确定性实现,支持通过aclrtCtxSetSysParamOpt开启确定性。254 - aclnnScatterList默认非确定性实现,支持通过aclrtCtxSetSysParamOpt开启确定性。
255 255 
256+- <term>Ascend 950PR/Ascend 950DT</term>:各输入的shape需满足以下关系,不满足时第一段接口返回561002。记varRef列表中的张量个数为B。
257+ - varRef:列表中每个张量的shape需相同,每个张量的维度数需大于等于1。
258+ - updates:维度数等于varRef中单个张量的维度数加1;第一维大小等于B;axis轴的大小不大于varRef对应轴;其余维度与varRef一致。
259+ - indice:shape支持1~2维;第一维大小等于B;为2维时,第二维大小必须为2。
260+ - maskOptional:shape支持1维,第一维大小等于B。
261+ - axis:归一化(负数按updates的维度数折算)后的取值必须落在开区间(0, updates的维度数)内,即不能指向第0维,也不能越界。默认值-2要求updates的维度数大于等于3。
262+ 
256## 调用示例263## 调用示例
257 264 
258示例代码如下,仅供参考,具体编译和执行过程请参考[编译与运行样例](../../../docs/zh/context/compile_and_run_sample.md)。265示例代码如下,仅供参考,具体编译和执行过程请参考[编译与运行样例](../../../docs/zh/context/compile_and_run_sample.md)。
@@ -64,27 +64,32 @@ public:
64 .ParamType(DYNAMIC)64 .ParamType(DYNAMIC)
65 .DataType(varDataType910b)65 .DataType(varDataType910b)
66 .Format(format910b)66 .Format(format910b)
67- .UnknownShapeFormat(format910b);67+ .UnknownShapeFormat(format910b)
68+ .AutoContiguous();
68 this->Input("indice")69 this->Input("indice")
69 .ParamType(REQUIRED)70 .ParamType(REQUIRED)
70 .DataType(indiceDataType910b)71 .DataType(indiceDataType910b)
71 .Format(format910b)72 .Format(format910b)
72- .UnknownShapeFormat(format910b);73+ .UnknownShapeFormat(format910b)
74+ .AutoContiguous();
73 this->Input("updates")75 this->Input("updates")
74 .ParamType(REQUIRED)76 .ParamType(REQUIRED)
75 .DataType(varDataType910b)77 .DataType(varDataType910b)
76 .Format(format910b)78 .Format(format910b)
77- .UnknownShapeFormat(format910b);79+ .UnknownShapeFormat(format910b)
80+ .AutoContiguous();
78 this->Input("mask")81 this->Input("mask")
79 .ParamType(OPTIONAL)82 .ParamType(OPTIONAL)
80 .DataType(maskDataType910b)83 .DataType(maskDataType910b)
81 .Format(format910b)84 .Format(format910b)
82- .UnknownShapeFormat(format910b);85+ .UnknownShapeFormat(format910b)
86+ .AutoContiguous();
83 this->Output("var")87 this->Output("var")
84 .ParamType(DYNAMIC)88 .ParamType(DYNAMIC)
85 .DataType(varDataType910b)89 .DataType(varDataType910b)
86 .Format(format910b)90 .Format(format910b)
87- .UnknownShapeFormat(format910b);91+ .UnknownShapeFormat(format910b)
92+ .AutoContiguous();
88 this->Attr("reduce").AttrType(OPTIONAL).String("update");93 this->Attr("reduce").AttrType(OPTIONAL).String("update");
89 this->Attr("axis").AttrType(OPTIONAL).Int(AXIS_DEFAULT);94 this->Attr("axis").AttrType(OPTIONAL).Int(AXIS_DEFAULT);
90 95 
@@ -105,27 +110,32 @@ public:
105 .ParamType(DYNAMIC)110 .ParamType(DYNAMIC)
106 .DataType(varDataType310p)111 .DataType(varDataType310p)
107 .Format(format310p)112 .Format(format310p)
108- .UnknownShapeFormat(format310p);113+ .UnknownShapeFormat(format310p)
114+ .AutoContiguous();
109 config310p.Input("indice")115 config310p.Input("indice")
110 .ParamType(REQUIRED)116 .ParamType(REQUIRED)
111 .DataType(indiceDataType310p)117 .DataType(indiceDataType310p)
112 .Format(format310p)118 .Format(format310p)
113- .UnknownShapeFormat(format310p);119+ .UnknownShapeFormat(format310p)
120+ .AutoContiguous();
114 config310p.Input("updates")121 config310p.Input("updates")
115 .ParamType(REQUIRED)122 .ParamType(REQUIRED)
116 .DataType(varDataType310p)123 .DataType(varDataType310p)
117 .Format(format310p)124 .Format(format310p)
118- .UnknownShapeFormat(format310p);125+ .UnknownShapeFormat(format310p)
126+ .AutoContiguous();
119 config310p.Input("mask")127 config310p.Input("mask")
120 .ParamType(OPTIONAL)128 .ParamType(OPTIONAL)
121 .DataType(maskDataType310p)129 .DataType(maskDataType310p)
122 .Format(format310p)130 .Format(format310p)
123- .UnknownShapeFormat(format310p);131+ .UnknownShapeFormat(format310p)
132+ .AutoContiguous();
124 config310p.Output("var")133 config310p.Output("var")
125 .ParamType(DYNAMIC)134 .ParamType(DYNAMIC)
126 .DataType(varDataType310p)135 .DataType(varDataType310p)
127 .Format(format310p)136 .Format(format310p)
128- .UnknownShapeFormat(format310p);137+ .UnknownShapeFormat(format310p)
138+ .AutoContiguous();
129 config310p.DynamicCompileStaticFlag(true)139 config310p.DynamicCompileStaticFlag(true)
130 .DynamicFormatFlag(true)140 .DynamicFormatFlag(true)
131 .DynamicRankSupportFlag(true)141 .DynamicRankSupportFlag(true)
@@ -154,27 +164,32 @@ private:
154 .ParamType(DYNAMIC)164 .ParamType(DYNAMIC)
155 .DataType(varDataType310p)165 .DataType(varDataType310p)
156 .Format(format310p)166 .Format(format310p)
157- .UnknownShapeFormat(format310p);167+ .UnknownShapeFormat(format310p)
168+ .AutoContiguous();
158 config_kirin.Input("indice")169 config_kirin.Input("indice")
159 .ParamType(REQUIRED)170 .ParamType(REQUIRED)
160 .DataType(indiceDataType310p)171 .DataType(indiceDataType310p)
161 .Format(format310p)172 .Format(format310p)
162- .UnknownShapeFormat(format310p);173+ .UnknownShapeFormat(format310p)
174+ .AutoContiguous();
163 config_kirin.Input("updates")175 config_kirin.Input("updates")
164 .ParamType(REQUIRED)176 .ParamType(REQUIRED)
165 .DataType(varDataType310p)177 .DataType(varDataType310p)
166 .Format(format310p)178 .Format(format310p)
167- .UnknownShapeFormat(format310p);179+ .UnknownShapeFormat(format310p)
180+ .AutoContiguous();
168 config_kirin.Input("mask")181 config_kirin.Input("mask")
169 .ParamType(OPTIONAL)182 .ParamType(OPTIONAL)
170 .DataType(maskDataType310p)183 .DataType(maskDataType310p)
171 .Format(format310p)184 .Format(format310p)
172- .UnknownShapeFormat(format310p);185+ .UnknownShapeFormat(format310p)
186+ .AutoContiguous();
173 config_kirin.Output("var")187 config_kirin.Output("var")
174 .ParamType(DYNAMIC)188 .ParamType(DYNAMIC)
175 .DataType(varDataType310p)189 .DataType(varDataType310p)
176 .Format(format310p)190 .Format(format310p)
177- .UnknownShapeFormat(format310p);191+ .UnknownShapeFormat(format310p)
192+ .AutoContiguous();
178 return config_kirin;193 return config_kirin;
179 }194 }
180};195};
@@ -22,7 +22,8 @@ public:
22 .Format({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,22 .Format({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,
23 ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})23 ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})
24 .UnknownShapeFormat({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,24 .UnknownShapeFormat({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,
25- ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND});25+ ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})
26+ .AutoContiguous();
26 this->Input("indices")27 this->Input("indices")
27 .ParamType(REQUIRED)28 .ParamType(REQUIRED)
28 .DataType({ge::DT_INT32, ge::DT_INT32, ge::DT_INT32, ge::DT_INT32, ge::DT_INT32, ge::DT_INT64, ge::DT_INT64,29 .DataType({ge::DT_INT32, ge::DT_INT32, ge::DT_INT32, ge::DT_INT32, ge::DT_INT32, ge::DT_INT64, ge::DT_INT64,
@@ -30,7 +31,8 @@ public:
30 .Format({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,31 .Format({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,
31 ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})32 ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})
32 .UnknownShapeFormat({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,33 .UnknownShapeFormat({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,
33- ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND});34+ ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})
35+ .AutoContiguous();
34 this->Input("updates")36 this->Input("updates")
35 .ParamType(REQUIRED)37 .ParamType(REQUIRED)
36 .DataType({ge::DT_FLOAT16, ge::DT_FLOAT, ge::DT_INT32, ge::DT_INT8, ge::DT_UINT8, ge::DT_FLOAT16,38 .DataType({ge::DT_FLOAT16, ge::DT_FLOAT, ge::DT_INT32, ge::DT_INT8, ge::DT_UINT8, ge::DT_FLOAT16,
@@ -38,7 +40,8 @@ public:
38 .Format({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,40 .Format({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,
39 ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})41 ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})
40 .UnknownShapeFormat({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,42 .UnknownShapeFormat({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,
41- ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND});43+ ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})
44+ .AutoContiguous();
42 this->Output("var")45 this->Output("var")
43 .ParamType(REQUIRED)46 .ParamType(REQUIRED)
44 .DataType({ge::DT_FLOAT16, ge::DT_FLOAT, ge::DT_INT32, ge::DT_INT8, ge::DT_UINT8, ge::DT_FLOAT16,47 .DataType({ge::DT_FLOAT16, ge::DT_FLOAT, ge::DT_INT32, ge::DT_INT8, ge::DT_UINT8, ge::DT_FLOAT16,
@@ -46,7 +49,8 @@ public:
46 .Format({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,49 .Format({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,
47 ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})50 ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})
48 .UnknownShapeFormat({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,51 .UnknownShapeFormat({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,
49- ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND});52+ ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})
53+ .AutoContiguous();
50 this->Attr("use_locking").AttrType(OPTIONAL).Bool(false);54 this->Attr("use_locking").AttrType(OPTIONAL).Bool(false);
51 55 
52 OpAICoreConfig aicoreConfig;56 OpAICoreConfig aicoreConfig;
@@ -22,7 +22,8 @@ public:
22 .Format({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,22 .Format({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,
23 ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})23 ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})
24 .UnknownShapeFormat({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,24 .UnknownShapeFormat({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,
25- ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND});25+ ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})
26+ .AutoContiguous();
26 this->Input("indices")27 this->Input("indices")
27 .ParamType(REQUIRED)28 .ParamType(REQUIRED)
28 .DataType({ge::DT_INT32, ge::DT_INT32, ge::DT_INT32, ge::DT_INT32, ge::DT_INT32, ge::DT_INT64, ge::DT_INT64,29 .DataType({ge::DT_INT32, ge::DT_INT32, ge::DT_INT32, ge::DT_INT32, ge::DT_INT32, ge::DT_INT64, ge::DT_INT64,
@@ -30,7 +31,8 @@ public:
30 .Format({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,31 .Format({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,
31 ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})32 ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})
32 .UnknownShapeFormat({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,33 .UnknownShapeFormat({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,
33- ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND});34+ ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})
35+ .AutoContiguous();
34 this->Input("updates")36 this->Input("updates")
35 .ParamType(REQUIRED)37 .ParamType(REQUIRED)
36 .DataType({ge::DT_FLOAT16, ge::DT_FLOAT, ge::DT_INT32, ge::DT_INT8, ge::DT_UINT8, ge::DT_FLOAT16,38 .DataType({ge::DT_FLOAT16, ge::DT_FLOAT, ge::DT_INT32, ge::DT_INT8, ge::DT_UINT8, ge::DT_FLOAT16,
@@ -38,7 +40,8 @@ public:
38 .Format({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,40 .Format({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,
39 ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})41 ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})
40 .UnknownShapeFormat({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,42 .UnknownShapeFormat({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,
41- ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND});43+ ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})
44+ .AutoContiguous();
42 this->Output("var")45 this->Output("var")
43 .ParamType(REQUIRED)46 .ParamType(REQUIRED)
44 .DataType({ge::DT_FLOAT16, ge::DT_FLOAT, ge::DT_INT32, ge::DT_INT8, ge::DT_UINT8, ge::DT_FLOAT16,47 .DataType({ge::DT_FLOAT16, ge::DT_FLOAT, ge::DT_INT32, ge::DT_INT8, ge::DT_UINT8, ge::DT_FLOAT16,
@@ -46,7 +49,8 @@ public:
46 .Format({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,49 .Format({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,
47 ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})50 ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})
48 .UnknownShapeFormat({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,51 .UnknownShapeFormat({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,
49- ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND});52+ ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})
53+ .AutoContiguous();
50 this->Attr("use_locking").AttrType(OPTIONAL).Bool(false);54 this->Attr("use_locking").AttrType(OPTIONAL).Bool(false);
51 55 
52 OpAICoreConfig aicoreConfig;56 OpAICoreConfig aicoreConfig;
@@ -27,7 +27,8 @@ public:
27 .Format({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,27 .Format({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,
28 ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})28 ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})
29 .UnknownShapeFormat({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,29 .UnknownShapeFormat({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,
30- ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND});30+ ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})
31+ .AutoContiguous();
31 this->Input("indices")32 this->Input("indices")
32 .ParamType(REQUIRED)33 .ParamType(REQUIRED)
33 .DataType({ge::DT_INT32, ge::DT_INT32, ge::DT_INT32, ge::DT_INT32, ge::DT_INT32, ge::DT_INT64, ge::DT_INT64,34 .DataType({ge::DT_INT32, ge::DT_INT32, ge::DT_INT32, ge::DT_INT32, ge::DT_INT32, ge::DT_INT64, ge::DT_INT64,
@@ -35,7 +36,8 @@ public:
35 .Format({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,36 .Format({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,
36 ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})37 ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})
37 .UnknownShapeFormat({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,38 .UnknownShapeFormat({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,
38- ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND});39+ ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})
40+ .AutoContiguous();
39 this->Input("updates")41 this->Input("updates")
40 .ParamType(REQUIRED)42 .ParamType(REQUIRED)
41 .DataType({ge::DT_FLOAT16, ge::DT_FLOAT, ge::DT_INT32, ge::DT_INT8, ge::DT_UINT8, ge::DT_FLOAT16,43 .DataType({ge::DT_FLOAT16, ge::DT_FLOAT, ge::DT_INT32, ge::DT_INT8, ge::DT_UINT8, ge::DT_FLOAT16,
@@ -43,7 +45,8 @@ public:
43 .Format({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,45 .Format({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,
44 ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})46 ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})
45 .UnknownShapeFormat({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,47 .UnknownShapeFormat({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,
46- ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND});48+ ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})
49+ .AutoContiguous();
47 this->Output("var")50 this->Output("var")
48 .ParamType(REQUIRED)51 .ParamType(REQUIRED)
49 .DataType({ge::DT_FLOAT16, ge::DT_FLOAT, ge::DT_INT32, ge::DT_INT8, ge::DT_UINT8, ge::DT_FLOAT16,52 .DataType({ge::DT_FLOAT16, ge::DT_FLOAT, ge::DT_INT32, ge::DT_INT8, ge::DT_UINT8, ge::DT_FLOAT16,
@@ -51,7 +54,8 @@ public:
51 .Format({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,54 .Format({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,
52 ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})55 ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})
53 .UnknownShapeFormat({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,56 .UnknownShapeFormat({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND,
54- ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND});57+ ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_ND})
58+ .AutoContiguous();
55 this->Attr("use_locking").AttrType(OPTIONAL).Bool(false);59 this->Attr("use_locking").AttrType(OPTIONAL).Bool(false);
56 60 
57 OpAICoreConfig aicoreConfig;61 OpAICoreConfig aicoreConfig;
@@ -23,6 +23,7 @@ namespace ops {
23constexpr size_t GRAD_IDX = 0;23constexpr size_t GRAD_IDX = 0;
24constexpr size_t INPUTV_IDX = 1;24constexpr size_t INPUTV_IDX = 1;
25constexpr size_t INPUTM_IDX = 2;25constexpr size_t INPUTM_IDX = 2;
26+constexpr size_t INPUT3_IDX = 3;
26constexpr size_t OUTPUT0_IDX = 0;27constexpr size_t OUTPUT0_IDX = 0;
27constexpr size_t OUTPUTV_IDX = 1;28constexpr size_t OUTPUTV_IDX = 1;
28constexpr size_t OUTPUTM_IDX = 2;29constexpr size_t OUTPUTM_IDX = 2;
@@ -35,6 +36,8 @@ static ge::graphStatus InferShape4LambApplyOptimizerAssign(gert::InferShapeConte
35 OP_CHECK_NULL_WITH_CONTEXT(context, inputv_shape);36 OP_CHECK_NULL_WITH_CONTEXT(context, inputv_shape);
36 auto inputm_shape = context->GetInputShape(INPUTM_IDX);37 auto inputm_shape = context->GetInputShape(INPUTM_IDX);
37 OP_CHECK_NULL_WITH_CONTEXT(context, inputm_shape);38 OP_CHECK_NULL_WITH_CONTEXT(context, inputm_shape);
39+ auto input3_shape = context->GetInputShape(INPUT3_IDX);
40+ OP_CHECK_NULL_WITH_CONTEXT(context, input3_shape);
38 auto output0_shape = context->GetOutputShape(OUTPUT0_IDX);41 auto output0_shape = context->GetOutputShape(OUTPUT0_IDX);
39 OP_CHECK_NULL_WITH_CONTEXT(context, output0_shape);42 OP_CHECK_NULL_WITH_CONTEXT(context, output0_shape);
40 auto outputv_shape = context->GetOutputShape(OUTPUTV_IDX);43 auto outputv_shape = context->GetOutputShape(OUTPUTV_IDX);
@@ -42,21 +45,31 @@ static ge::graphStatus InferShape4LambApplyOptimizerAssign(gert::InferShapeConte
42 auto outputm_shape = context->GetOutputShape(OUTPUTM_IDX);45 auto outputm_shape = context->GetOutputShape(OUTPUTM_IDX);
43 OP_CHECK_NULL_WITH_CONTEXT(context, outputm_shape);46 OP_CHECK_NULL_WITH_CONTEXT(context, outputm_shape);
44 47 
45- OP_CHECK_IF(!BroadcastShape(grad_shape, inputv_shape, output0_shape),48+ // inputv、inputm 承载动量的更新结果,内核按广播出的完整网格计算并写回它们,
46- OP_LOGE(context->GetNodeName(), "shape %s and %s cannot broadcast!", ToString(*grad_shape).c_str(),49+ // 故输出形状由 inputv/inputm 决定,grad 与 input3 只能向上广播进来。
47- ToString(*inputv_shape).c_str()),50+ // 此处的判定与 tiling 的 CheckInplaceShapeConstraint 保持一致,避免两个 host
51+ // 阶段对同一组合给出不同结论。
52+ OP_CHECK_IF(!(*inputv_shape == *inputm_shape),
53+ OP_LOGE(context->GetNodeName(),
54+ "inputv %s and inputm %s must have the same shape, they carry the moment update outputs!",
55+ ToString(*inputv_shape).c_str(), ToString(*inputm_shape).c_str()),
48 return ge::GRAPH_FAILED);56 return ge::GRAPH_FAILED);
49 57 
50- OP_CHECK_IF(!BroadcastShape(grad_shape, inputv_shape, outputv_shape),58+ gert::Shape broadcast_shape;
51- OP_LOGE(context->GetNodeName(), "shape %s and %s cannot broadcast!", ToString(*grad_shape).c_str(),59+ OP_CHECK_IF(!BroadcastShape(grad_shape, inputv_shape, &broadcast_shape) || !(broadcast_shape == *inputv_shape),
52- ToString(*inputv_shape).c_str()),60+ OP_LOGE(context->GetNodeName(), "grad %s must be broadcastable into the moment shape %s!",
61+ ToString(*grad_shape).c_str(), ToString(*inputv_shape).c_str()),
53 return ge::GRAPH_FAILED);62 return ge::GRAPH_FAILED);
54 63 
55- OP_CHECK_IF(!BroadcastShape(grad_shape, inputm_shape, outputm_shape),64+ OP_CHECK_IF(!BroadcastShape(input3_shape, inputv_shape, &broadcast_shape) || !(broadcast_shape == *inputv_shape),
56- OP_LOGE(context->GetNodeName(), "shape %s and %s cannot broadcast!", ToString(*grad_shape).c_str(),65+ OP_LOGE(context->GetNodeName(), "input3 %s must be broadcastable into the moment shape %s!",
57- ToString(*inputm_shape).c_str()),66+ ToString(*input3_shape).c_str(), ToString(*inputv_shape).c_str()),
58 return ge::GRAPH_FAILED);67 return ge::GRAPH_FAILED);
59 68 
69+ *output0_shape = *inputv_shape;
70+ *outputv_shape = *inputv_shape;
71+ *outputm_shape = *inputm_shape;
72+ 
60 return GRAPH_SUCCESS;73 return GRAPH_SUCCESS;
61}74}
62IMPL_OP_INFERSHAPE(LambApplyOptimizerAssign).InferShape(InferShape4LambApplyOptimizerAssign);75IMPL_OP_INFERSHAPE(LambApplyOptimizerAssign).InferShape(InferShape4LambApplyOptimizerAssign);
@@ -102,3 +102,80 @@ TEST_F(LambApplyOptimizerAssignProtoTest, lamb_apply_optimizer_assign_case_fp16_
102 auto od2 = holder.GetContext<gert::InferShapeContext>()->GetOutputShape(2);102 auto od2 = holder.GetContext<gert::InferShapeContext>()->GetOutputShape(2);
103 ASSERT_EQ(Ops::Base::ToString(*od2), Ops::Base::ToString(expShape));103 ASSERT_EQ(Ops::Base::ToString(*od2), Ops::Base::ToString(expShape));
104}104}
105+ 
106+namespace {
107+// 按 grad / inputv / inputm / input3 四个张量的形状跑一次 infershape,
108+// 标量输入统一用 {1}。用于核对 infershape 与 tiling 的支持范围是否一致。
109+ge::graphStatus RunInferShape(const gert::Shape& grad, const gert::Shape& inputv, const gert::Shape& inputm,
110+ const gert::Shape& input3, gert::Shape* out0, gert::Shape* out1, gert::Shape* out2)
111+{
112+ auto inferShapeFunc = gert::OpImplRegistry::GetInstance().GetOpImpl("LambApplyOptimizerAssign")->infer_shape;
113+ gert::Shape g = grad;
114+ gert::Shape v = inputv;
115+ gert::Shape m = inputm;
116+ gert::Shape p = input3;
117+ gert::Shape s = {1};
118+ auto holder = gert::InferShapeContextFaker()
119+ .NodeIoNum(12, 3)
120+ .IrInstanceNum({1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1})
121+ .InputShapes({&g, &v, &m, &p, &s, &s, &s, &s, &s, &s, &s, &s})
122+ .OutputShapes({out0, out1, out2})
123+ .NodeInputTd(0, ge::DT_FLOAT, ge::FORMAT_ND, ge::FORMAT_ND)
124+ .NodeInputTd(1, ge::DT_FLOAT, ge::FORMAT_ND, ge::FORMAT_ND)
125+ .NodeInputTd(2, ge::DT_FLOAT, ge::FORMAT_ND, ge::FORMAT_ND)
126+ .NodeInputTd(3, ge::DT_FLOAT, ge::FORMAT_ND, ge::FORMAT_ND)
127+ .NodeInputTd(4, ge::DT_FLOAT, ge::FORMAT_ND, ge::FORMAT_ND)
128+ .NodeInputTd(5, ge::DT_FLOAT, ge::FORMAT_ND, ge::FORMAT_ND)
129+ .NodeInputTd(6, ge::DT_FLOAT, ge::FORMAT_ND, ge::FORMAT_ND)
130+ .NodeInputTd(7, ge::DT_FLOAT, ge::FORMAT_ND, ge::FORMAT_ND)
131+ .NodeInputTd(8, ge::DT_FLOAT, ge::FORMAT_ND, ge::FORMAT_ND)
132+ .NodeInputTd(9, ge::DT_FLOAT, ge::FORMAT_ND, ge::FORMAT_ND)
133+ .NodeInputTd(10, ge::DT_FLOAT, ge::FORMAT_ND, ge::FORMAT_ND)
134+ .NodeInputTd(11, ge::DT_FLOAT, ge::FORMAT_ND, ge::FORMAT_ND)
135+ .NodeOutputTd(0, ge::DT_FLOAT, ge::FORMAT_ND, ge::FORMAT_ND)
136+ .NodeOutputTd(1, ge::DT_FLOAT, ge::FORMAT_ND, ge::FORMAT_ND)
137+ .NodeOutputTd(2, ge::DT_FLOAT, ge::FORMAT_ND, ge::FORMAT_ND)
138+ .Build();
139+ auto ctx = holder.GetContext<gert::InferShapeContext>();
140+ auto ret = inferShapeFunc(ctx);
141+ if (ret == ge::GRAPH_SUCCESS) {
142+ // faker 内部持有输出 shape 的副本,需从 context 取回
143+ *out0 = *ctx->GetOutputShape(0);
144+ *out1 = *ctx->GetOutputShape(1);
145+ *out2 = *ctx->GetOutputShape(2);
146+ }
147+ return ret;
148+}
149+} // namespace
150+ 
151+// inputv/inputm 承载动量更新结果,输出形状由它们决定;grad 更小时向上广播进来。
152+TEST_F(LambApplyOptimizerAssignProtoTest, moment_shape_decides_output_shape)
153+{
154+ gert::Shape o0 = {}, o1 = {}, o2 = {};
155+ gert::Shape expect = {512, 1024};
156+ ASSERT_EQ(RunInferShape({1, 1024}, {512, 1024}, {512, 1024}, {512, 1024}, &o0, &o1, &o2), ge::GRAPH_SUCCESS);
157+ ASSERT_EQ(Ops::Base::ToString(o0), Ops::Base::ToString(expect));
158+ ASSERT_EQ(Ops::Base::ToString(o1), Ops::Base::ToString(expect));
159+ ASSERT_EQ(Ops::Base::ToString(o2), Ops::Base::ToString(expect));
160+}
161+ 
162+// grad 大于动量形状:结果无处容纳,infershape 须与 tiling 一样拒收。
163+TEST_F(LambApplyOptimizerAssignProtoTest, grad_larger_than_moment_is_rejected)
164+{
165+ gert::Shape o0 = {}, o1 = {}, o2 = {};
166+ ASSERT_EQ(RunInferShape({512, 1024}, {1, 1024}, {1, 1024}, {1, 1024}, &o0, &o1, &o2), ge::GRAPH_FAILED);
167+}
168+ 
169+// input3 大于动量形状:同上。
170+TEST_F(LambApplyOptimizerAssignProtoTest, input3_larger_than_moment_is_rejected)
171+{
172+ gert::Shape o0 = {}, o1 = {}, o2 = {};
173+ ASSERT_EQ(RunInferShape({1, 1024}, {1, 1024}, {1, 1024}, {512, 1024}, &o0, &o1, &o2), ge::GRAPH_FAILED);
174+}
175+ 
176+// 两个动量形状不一致:无法确定唯一的输出形状,须拒收。
177+TEST_F(LambApplyOptimizerAssignProtoTest, inputv_inputm_mismatch_is_rejected)
178+{
179+ gert::Shape o0 = {}, o1 = {}, o2 = {};
180+ ASSERT_EQ(RunInferShape({512, 1024}, {512, 1024}, {1, 1024}, {512, 1024}, &o0, &o1, &o2), ge::GRAPH_FAILED);
181+}