1be168c0dSopenharmony_ciFrom 9b1f17ffcb18cd58f796c9f30c0bc37e31347450 Mon Sep 17 00:00:00 2001
2be168c0dSopenharmony_ciFrom: zhangyanhui <zhangyanhui17@huawei.com>
3be168c0dSopenharmony_ciDate: Fri, 21 Jun 2024 16:08:21 +0800
4be168c0dSopenharmony_ciSubject: [PATCH] auto-apply 0002-train-and-build.patch
5be168c0dSopenharmony_ci
6be168c0dSopenharmony_ci---
7be168c0dSopenharmony_ci .../plugin/device/cpu/kernel/nnacl/BUILD.gn   |  16 +-
8be168c0dSopenharmony_ci mindspore/lite/BUILD.gn                       | 229 +++++++++++++++++-
9be168c0dSopenharmony_ci .../include/registry/opencl_runtime_wrapper.h |   2 +-
10be168c0dSopenharmony_ci mindspore/lite/src/litert/kernel/cpu/BUILD.gn |   1 +
11be168c0dSopenharmony_ci .../litert/kernel/cpu/fp32/oneslike_fp32.cc   |  51 ++++
12be168c0dSopenharmony_ci .../litert/kernel/cpu/fp32/oneslike_fp32.h    |  46 ++++
13be168c0dSopenharmony_ci mindspore/lite/src/litert/lite_model.h        |   2 +-
14be168c0dSopenharmony_ci mindspore/lite/src/litert/lite_session.cc     |   1 +
15be168c0dSopenharmony_ci mindspore/lite/src/litert/weight_decoder.h    |   2 +-
16be168c0dSopenharmony_ci mindspore/lite/src/tensor.h                   |   2 +-
17be168c0dSopenharmony_ci mindspore/lite/src/tensorlist.h               |   2 +-
18be168c0dSopenharmony_ci mindspore/lite/src/train/train_session.cc     |   6 +-
19be168c0dSopenharmony_ci .../lite/tools/benchmark_train/net_train.h    |   2 +-
20be168c0dSopenharmony_ci .../tools/converter/converter_metagraph.cc    |  14 +-
21be168c0dSopenharmony_ci .../tools/converter/graphdef_transform.cc     |   4 +
22be168c0dSopenharmony_ci .../legacy_optimizer/graph/CMakeLists.txt     |   1 +
23be168c0dSopenharmony_ci .../legacy_optimizer/graph/node_name_pass.cc  |  96 ++++++++
24be168c0dSopenharmony_ci .../legacy_optimizer/graph/node_name_pass.h   |  35 +++
25be168c0dSopenharmony_ci 18 files changed, 493 insertions(+), 19 deletions(-)
26be168c0dSopenharmony_ci create mode 100644 mindspore/lite/src/litert/kernel/cpu/fp32/oneslike_fp32.cc
27be168c0dSopenharmony_ci create mode 100644 mindspore/lite/src/litert/kernel/cpu/fp32/oneslike_fp32.h
28be168c0dSopenharmony_ci create mode 100644 mindspore/lite/tools/converter/legacy_optimizer/graph/node_name_pass.cc
29be168c0dSopenharmony_ci create mode 100644 mindspore/lite/tools/converter/legacy_optimizer/graph/node_name_pass.h
30be168c0dSopenharmony_ci
31be168c0dSopenharmony_cidiff --git a/mindspore/ccsrc/plugin/device/cpu/kernel/nnacl/BUILD.gn b/mindspore/ccsrc/plugin/device/cpu/kernel/nnacl/BUILD.gn
32be168c0dSopenharmony_ciindex a1e7908e..7bbc3782 100644
33be168c0dSopenharmony_ci--- a/mindspore/ccsrc/plugin/device/cpu/kernel/nnacl/BUILD.gn
34be168c0dSopenharmony_ci+++ b/mindspore/ccsrc/plugin/device/cpu/kernel/nnacl/BUILD.gn
35be168c0dSopenharmony_ci@@ -714,7 +714,17 @@ arm32_assembly_sources = [
36be168c0dSopenharmony_ci   "assembly/arm32/WinogradTransRight.S",
37be168c0dSopenharmony_ci ]
38be168c0dSopenharmony_ci 
39be168c0dSopenharmony_ci-fp16_assembly_sources = [
40be168c0dSopenharmony_ci+arm32_fp16_assembly_sources = [
41be168c0dSopenharmony_ci+  "assembly/arm82_aarch32_fp16/Float16Tofloat32.S",
42be168c0dSopenharmony_ci+  "assembly/arm82_aarch32_fp16/Float32ToFloat16.S",
43be168c0dSopenharmony_ci+  "assembly/arm82_aarch32_fp16/Matmul12x8Fp16.S",
44be168c0dSopenharmony_ci+  "assembly/arm82_aarch32_fp16/MatVecMulFp16.S",
45be168c0dSopenharmony_ci+  "assembly/arm82_aarch32_fp16/TiledC4MatmulFp16.S",
46be168c0dSopenharmony_ci+  "assembly/arm82_aarch32_fp16/WinogradTransLeft.S",
47be168c0dSopenharmony_ci+  "assembly/arm82_aarch32_fp16/WinogradTransRight.S",
48be168c0dSopenharmony_ci+]
49be168c0dSopenharmony_ci+
50be168c0dSopenharmony_ci+arm64_fp16_assembly_sources = [
51be168c0dSopenharmony_ci   "assembly/fp16/CalculateMinMaxFp16Count8.S",
52be168c0dSopenharmony_ci   "assembly/fp16/ConvDwFp16Border.S",
53be168c0dSopenharmony_ci   "assembly/fp16/ConvDwFp16Center.S",
54be168c0dSopenharmony_ci@@ -839,11 +849,13 @@ nnacl_sources += infer_control_sources
55be168c0dSopenharmony_ci 
56be168c0dSopenharmony_ci # source files on arm32
57be168c0dSopenharmony_ci arm_only_sources = arm32_assembly_sources
58be168c0dSopenharmony_ci+#arm_only_sources += arm32_fp16_assembly_sources
59be168c0dSopenharmony_ci+not_needed(arm32_fp16_assembly_sources)
60be168c0dSopenharmony_ci 
61be168c0dSopenharmony_ci # source files on arm64
62be168c0dSopenharmony_ci arm64_only_sources = fp16_kernel_sources
63be168c0dSopenharmony_ci arm64_only_sources += fp16_grad_sources
64be168c0dSopenharmony_ci-arm64_only_sources += fp16_assembly_sources
65be168c0dSopenharmony_ci+arm64_only_sources += arm64_fp16_assembly_sources
66be168c0dSopenharmony_ci arm64_only_sources += arm64_assembly_sources
67be168c0dSopenharmony_ci arm64_only_sources += optimizing_assembly_sources
68be168c0dSopenharmony_ci arm64_only_sources += arm64_fp32_kernel_sources
69be168c0dSopenharmony_cidiff --git a/mindspore/lite/BUILD.gn b/mindspore/lite/BUILD.gn
70be168c0dSopenharmony_ciindex 6d83e6f9..8a492bf9 100644
71be168c0dSopenharmony_ci--- a/mindspore/lite/BUILD.gn
72be168c0dSopenharmony_ci+++ b/mindspore/lite/BUILD.gn
73be168c0dSopenharmony_ci@@ -74,10 +74,12 @@ import("//build/ohos.gni")
74be168c0dSopenharmony_ci ohos_group("mindspore") {
75be168c0dSopenharmony_ci   deps = [
76be168c0dSopenharmony_ci     ":mindspore_lib",
77be168c0dSopenharmony_ci+    ":mindspore_train_lib",
78be168c0dSopenharmony_ci     "mindir:mindir_lib",
79be168c0dSopenharmony_ci   ]
80be168c0dSopenharmony_ci }
81be168c0dSopenharmony_ci 
82be168c0dSopenharmony_ci+# Inference library
83be168c0dSopenharmony_ci cxx_api_sources = [
84be168c0dSopenharmony_ci   "src/litert/cxx_api/cell.cc",
85be168c0dSopenharmony_ci   "src/litert/cxx_api/context.cc",
86be168c0dSopenharmony_ci@@ -429,7 +431,6 @@ ohos_shared_library("mindspore_lib") {
87be168c0dSopenharmony_ci   SUPPORT_NNRT = true
88be168c0dSopenharmony_ci   if (SUPPORT_NNRT) {
89be168c0dSopenharmony_ci     sources += [
90be168c0dSopenharmony_ci-      # "mindir/src/mindir_nnrt_lite_graph.cc",
91be168c0dSopenharmony_ci       "src/litert/delegate/nnrt/checker/primitive_check.cc",
92be168c0dSopenharmony_ci       "src/litert/delegate/nnrt/nnrt_delegate.cc",
93be168c0dSopenharmony_ci       "src/litert/delegate/nnrt/nnrt_model_kernel.cc",
94be168c0dSopenharmony_ci@@ -444,8 +445,9 @@ ohos_shared_library("mindspore_lib") {
95be168c0dSopenharmony_ci     external_deps += [ "neural_network_runtime:nnrt_target" ]
96be168c0dSopenharmony_ci     deps += [ "mindir:mindir_lib" ]
97be168c0dSopenharmony_ci     defines += [ "SUPPORT_NNRT" ]
98be168c0dSopenharmony_ci-    defines += [ "MSLITE_ENABLE_EXPERIMENTAL_KERNEL" ]
99be168c0dSopenharmony_ci   }
100be168c0dSopenharmony_ci+  defines += [ "MSLITE_ENABLE_EXPERIMENTAL_KERNEL" ]
101be168c0dSopenharmony_ci+  defines += [ "SUPPORT_TRAIN" ]
102be168c0dSopenharmony_ci   cflags_cc = [
103be168c0dSopenharmony_ci     "-Wno-ignored-qualifiers",
104be168c0dSopenharmony_ci     "-Wunused-private-field",
105be168c0dSopenharmony_ci@@ -458,6 +460,225 @@ ohos_shared_library("mindspore_lib") {
106be168c0dSopenharmony_ci   subsystem_name = "thirdparty"
107be168c0dSopenharmony_ci }
108be168c0dSopenharmony_ci 
109be168c0dSopenharmony_ci+# Train library
110be168c0dSopenharmony_ci+expression_cxx_api_sources = [
111be168c0dSopenharmony_ci+  "src/litert/cxx_api/expression/net.cc",
112be168c0dSopenharmony_ci+  "src/litert/cxx_api/expression/net_impl.cc",
113be168c0dSopenharmony_ci+  "src/litert/cxx_api/expression/node_impl.cc",
114be168c0dSopenharmony_ci+]
115be168c0dSopenharmony_ci+
116be168c0dSopenharmony_ci+expression_op_sources = [
117be168c0dSopenharmony_ci+  "src/expression/ops/activation.cc",
118be168c0dSopenharmony_ci+  "src/expression/ops/adam.cc",
119be168c0dSopenharmony_ci+  "src/expression/ops/addn.cc",
120be168c0dSopenharmony_ci+  "src/expression/ops/arithmetic.cc",
121be168c0dSopenharmony_ci+  "src/expression/ops/arithmetic_self.cc",
122be168c0dSopenharmony_ci+  "src/expression/ops/assign.cc",
123be168c0dSopenharmony_ci+  "src/expression/ops/batchnorm.cc",
124be168c0dSopenharmony_ci+  "src/expression/ops/biasadd.cc",
125be168c0dSopenharmony_ci+  "src/expression/ops/conv.cc",
126be168c0dSopenharmony_ci+  "src/expression/ops/dense.cc",
127be168c0dSopenharmony_ci+  "src/expression/ops/depend.cc",
128be168c0dSopenharmony_ci+  "src/expression/ops/dropout.cc",
129be168c0dSopenharmony_ci+  "src/expression/ops/flatten.cc",
130be168c0dSopenharmony_ci+  "src/expression/ops/pooling.cc",
131be168c0dSopenharmony_ci+  "src/expression/ops/reduce.cc",
132be168c0dSopenharmony_ci+  "src/expression/ops/reshape.cc",
133be168c0dSopenharmony_ci+  "src/expression/ops/softmax.cc",
134be168c0dSopenharmony_ci+  "src/expression/ops/softmaxCE.cc",
135be168c0dSopenharmony_ci+  "src/expression/ops/tile.cc",
136be168c0dSopenharmony_ci+  "src/expression/ops/transpose.cc",
137be168c0dSopenharmony_ci+]
138be168c0dSopenharmony_ci+
139be168c0dSopenharmony_ci+all_expression_sources = [
140be168c0dSopenharmony_ci+  "src/expression/export.cc",
141be168c0dSopenharmony_ci+  "src/expression/expr.cc",
142be168c0dSopenharmony_ci+  "src/expression/import.cc",
143be168c0dSopenharmony_ci+  "src/expression/net.cc",
144be168c0dSopenharmony_ci+  "src/expression/node.cc",
145be168c0dSopenharmony_ci+  "src/expression/ops.cc",
146be168c0dSopenharmony_ci+  "src/expression/ops_utils.cc",
147be168c0dSopenharmony_ci+  "src/expression/param.cc",
148be168c0dSopenharmony_ci+  "src/expression/sequential.cc",
149be168c0dSopenharmony_ci+]
150be168c0dSopenharmony_ci+
151be168c0dSopenharmony_ci+all_expression_sources += expression_cxx_api_sources
152be168c0dSopenharmony_ci+all_expression_sources += expression_op_sources
153be168c0dSopenharmony_ci+
154be168c0dSopenharmony_ci+all_train_sources = [
155be168c0dSopenharmony_ci+  # ${API_TRAIN_SRC} is empty.
156be168c0dSopenharmony_ci+  # ${TRAIN_SRC_WITH_MD} is empty.
157be168c0dSopenharmony_ci+  "src/common/quant_utils.cc",
158be168c0dSopenharmony_ci+  "src/litert/cxx_api/metrics/accuracy.cc",
159be168c0dSopenharmony_ci+  "src/litert/cxx_api/train/model_build.cc",
160be168c0dSopenharmony_ci+  "src/litert/cxx_api/train/model_build_impl.cc",
161be168c0dSopenharmony_ci+  "src/litert/cxx_api/train/converters.cc",
162be168c0dSopenharmony_ci+  "src/litert/cxx_api/train/train_support.cc",
163be168c0dSopenharmony_ci+  "src/train/train_populate_parameter.cc",
164be168c0dSopenharmony_ci+  "src/train/train_session.cc",
165be168c0dSopenharmony_ci+  "src/train/graph_fusion.cc",
166be168c0dSopenharmony_ci+  "src/train/graph_dropout.cc",
167be168c0dSopenharmony_ci+  "src/train/transfer_session.cc",
168be168c0dSopenharmony_ci+  "src/train/train_utils.cc",
169be168c0dSopenharmony_ci+  "src/train/loss_monitor.cc",
170be168c0dSopenharmony_ci+  "src/train/lr_scheduler.cc",
171be168c0dSopenharmony_ci+  "src/train/accuracy_metrics.cc",
172be168c0dSopenharmony_ci+#  "src/train/accuracy_monitor.cc", # depends on minddata header, not compiled
173be168c0dSopenharmony_ci+  "src/train/classification_train_accuracy_monitor.cc",
174be168c0dSopenharmony_ci+  "src/train/train_export.cc",
175be168c0dSopenharmony_ci+  "src/train/opt_allocator.cc",
176be168c0dSopenharmony_ci+  "src/train/optimizer/common/fusion_utils.cc",
177be168c0dSopenharmony_ci+  "src/train/optimizer/fusion/matmul_activation_fusion_pass.cc",
178be168c0dSopenharmony_ci+  "src/train/optimizer/fusion/reshape_gather_reshape_fusion_pass.cc",
179be168c0dSopenharmony_ci+  "src/train/optimizer/fusion/gru_fusion_pass.cc",
180be168c0dSopenharmony_ci+  "src/common/storage.cc",
181be168c0dSopenharmony_ci+  "tools/converter/optimizer.cc",
182be168c0dSopenharmony_ci+  "tools/converter/legacy_optimizer/fusion/fusion_pass.cc",
183be168c0dSopenharmony_ci+  "tools/converter/legacy_optimizer/fusion/fusion_pattern.cc",
184be168c0dSopenharmony_ci+  "tools/common/meta_graph_utils.cc",
185be168c0dSopenharmony_ci+  "tools/common/statistic_utils.cc",
186be168c0dSopenharmony_ci+  "tools/converter/legacy_optimizer/fusion/matmul_biasadd_fusion_pass.cc",
187be168c0dSopenharmony_ci+  "tools/converter/legacy_optimizer/graph/dropout_node_remove_pass.cc",
188be168c0dSopenharmony_ci+  "tools/converter/legacy_optimizer/graph/isolated_node_remove_pass.cc",
189be168c0dSopenharmony_ci+  "tools/converter/legacy_optimizer/graph/subgraph_node_pass.cc",
190be168c0dSopenharmony_ci+]
191be168c0dSopenharmony_ci+
192be168c0dSopenharmony_ci+all_train_sources += all_expression_sources
193be168c0dSopenharmony_ci+
194be168c0dSopenharmony_ci+fp16_train_kernel_sources = [
195be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp16_grad/activation_fp16_grad.cc",
196be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp16_grad/arithmetic_fp16_grad.cc",
197be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp16_grad/arithmetic_fp16_self_grad.cc",
198be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp16_grad/bias_fp16_grad.cc",
199be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp16_grad/bn_fp16_grad.cc",
200be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp16_grad/convolution_fp16_grad_filter.cc",
201be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp16_grad/convolution_fp16_grad_input.cc",
202be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp16_grad/dropout_fp16_grad.cc",
203be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp16_grad/layernorm_fp16_grad.cc",
204be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp16_grad/neg_fp16_grad.cc",
205be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp16_grad/pooling_fp16_grad.cc",
206be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp16_grad/resize_fp16_grad.cc",
207be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp16_grad/strided_slice_fp16_grad.cc",
208be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp16_grad/unsorted_segment_sum_fp16.cc",
209be168c0dSopenharmony_ci+]
210be168c0dSopenharmony_ci+
211be168c0dSopenharmony_ci+fp32_train_kernel_sources = [
212be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp32_grad/activation_grad.cc",
213be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp32_grad/adam.cc",
214be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp32_grad/adam_weight_decay.cc",
215be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp32_grad/apply_momentum.cc",
216be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp32_grad/arithmetic_grad.cc",
217be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp32_grad/arithmetic_self_grad.cc",
218be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp32_grad/assign.cc",
219be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp32_grad/bias_grad.cc",
220be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp32_grad/bn_grad.cc",
221be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp32_grad/convolution.cc",
222be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp32_grad/convolution_grad_filter.cc",
223be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp32_grad/convolution_grad_input.cc",
224be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp32_grad/deconvolution_grad_filter.cc",
225be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp32_grad/dropout.cc",
226be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp32_grad/dropout_grad.cc",
227be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp32_grad/layernorm_grad.cc",
228be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp32_grad/lstm_grad_data_fp32.cc",
229be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp32_grad/lstm_grad_fp32.cc",
230be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp32_grad/lstm_grad_weight_fp32.cc",
231be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp32_grad/neg_grad.cc",
232be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp32_grad/nllloss_grad.cc",
233be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp32_grad/pooling_grad.cc",
234be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp32_grad/power_grad.cc",
235be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp32_grad/resize_grad.cc",
236be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp32_grad/sgd.cc",
237be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp32_grad/sigmoid_cross_entropy_with_logits.cc",
238be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp32_grad/sigmoid_cross_entropy_with_logits_grad.cc",
239be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp32_grad/smooth_l1_loss.cc",
240be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp32_grad/smooth_l1_loss_grad.cc",
241be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp32_grad/softmax_cross_entropy_with_logits.cc",
242be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp32_grad/softmax_grad.cc",
243be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp32_grad/sparse_softmax_cross_entropy_with_logits.cc",
244be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp32_grad/strided_slice_grad.cc",
245be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp32_grad/unsorted_segment_sum.cc",
246be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp32_grad/binary_cross_entropy.cc",
247be168c0dSopenharmony_ci+  "src/litert/kernel/cpu/fp32_grad/binary_cross_entropy_grad.cc",
248be168c0dSopenharmony_ci+]
249be168c0dSopenharmony_ci+
250be168c0dSopenharmony_ci+#all_train_sources += fp16_train_kernel_sources
251be168c0dSopenharmony_ci+not_needed(fp16_train_kernel_sources)
252be168c0dSopenharmony_ci+all_train_sources += fp32_train_kernel_sources
253be168c0dSopenharmony_ci+
254be168c0dSopenharmony_ci+ohos_shared_library("mindspore_train_lib") {
255be168c0dSopenharmony_ci+  deps = [
256be168c0dSopenharmony_ci+    ":mindspore_lib",
257be168c0dSopenharmony_ci+  ]
258be168c0dSopenharmony_ci+
259be168c0dSopenharmony_ci+  sources = all_train_sources
260be168c0dSopenharmony_ci+
261be168c0dSopenharmony_ci+  include_dirs = [
262be168c0dSopenharmony_ci+    "//base/hiviewdfx/hilog/interfaces/native/innerkits/include",
263be168c0dSopenharmony_ci+    "//third_party/flatbuffers/include",
264be168c0dSopenharmony_ci+    "./",
265be168c0dSopenharmony_ci+    "../",
266be168c0dSopenharmony_ci+    "../../",
267be168c0dSopenharmony_ci+    "../core",
268be168c0dSopenharmony_ci+    "src",
269be168c0dSopenharmony_ci+    "src/c_api/",
270be168c0dSopenharmony_ci+    "../ccsrc/plugin/device/cpu/kernel/",
271be168c0dSopenharmony_ci+    "../core/mindrt/src/",
272be168c0dSopenharmony_ci+    "../core/mindrt/include/",
273be168c0dSopenharmony_ci+    "../../third_party/",
274be168c0dSopenharmony_ci+    "./schema/",
275be168c0dSopenharmony_ci+    "../ccsrc/",
276be168c0dSopenharmony_ci+  ]
277be168c0dSopenharmony_ci+
278be168c0dSopenharmony_ci+  defines = [
279be168c0dSopenharmony_ci+    "ENABLE_MINDRT",
280be168c0dSopenharmony_ci+    "MS_COMPILE_OHOS",
281be168c0dSopenharmony_ci+    "PRIMITIVE_WRITEABLE",
282be168c0dSopenharmony_ci+    "VERSION_STR=\"2.1.0\"",
283be168c0dSopenharmony_ci+  ]
284be168c0dSopenharmony_ci+
285be168c0dSopenharmony_ci+  if (target_cpu == "arm") {
286be168c0dSopenharmony_ci+    defines += [
287be168c0dSopenharmony_ci+      "ENABLE_ARM",
288be168c0dSopenharmony_ci+      "ENABLE_ARM32",
289be168c0dSopenharmony_ci+      "ENABLE_NEON",
290be168c0dSopenharmony_ci+    ]
291be168c0dSopenharmony_ci+  } else if (target_cpu == "arm64") {
292be168c0dSopenharmony_ci+    defines += [
293be168c0dSopenharmony_ci+      "ENABLE_ARM",
294be168c0dSopenharmony_ci+      "ENABLE_ARM64",
295be168c0dSopenharmony_ci+      "ENABLE_NEON",
296be168c0dSopenharmony_ci+      "ENABLE_FP16",
297be168c0dSopenharmony_ci+      "USE_OPENCL_WRAPPER",
298be168c0dSopenharmony_ci+      "MS_OPENCL_PROFILE=false",
299be168c0dSopenharmony_ci+      "CL_TARGET_OPENCL_VERSION=200",
300be168c0dSopenharmony_ci+      "CL_HPP_TARGET_OPENCL_VERSION=120",
301be168c0dSopenharmony_ci+      "CL_HPP_MINIMUM_OPENCL_VERSION=120",
302be168c0dSopenharmony_ci+    ]
303be168c0dSopenharmony_ci+  }
304be168c0dSopenharmony_ci+  configs = [
305be168c0dSopenharmony_ci+    ":mindspore_api",
306be168c0dSopenharmony_ci+    ":disable_android",
307be168c0dSopenharmony_ci+    ":train_kernel_option",
308be168c0dSopenharmony_ci+  ]
309be168c0dSopenharmony_ci+
310be168c0dSopenharmony_ci+  remove_configs = [ "//build/config/compiler:no_rtti" ]
311be168c0dSopenharmony_ci+  external_deps = [ "hilog:libhilog" ]
312be168c0dSopenharmony_ci+  innerapi_tags = [ "platformsdk" ]
313be168c0dSopenharmony_ci+  output_name = "libmindspore-lite-train"
314be168c0dSopenharmony_ci+  output_extension = "so"
315be168c0dSopenharmony_ci+  defines += [ "SUPPORT_TRAIN" ]
316be168c0dSopenharmony_ci+  cflags_cc = [
317be168c0dSopenharmony_ci+    "-Wno-ignored-qualifiers",
318be168c0dSopenharmony_ci+    "-Wunused-private-field",
319be168c0dSopenharmony_ci+    "-Wno-unused-private-field",
320be168c0dSopenharmony_ci+    "-Wno-inconsistent-missing-override",
321be168c0dSopenharmony_ci+    "-Wno-macro-redefined",
322be168c0dSopenharmony_ci+    "-Wno-constant-conversion",
323be168c0dSopenharmony_ci+  ]
324be168c0dSopenharmony_ci+  part_name = "mindspore"
325be168c0dSopenharmony_ci+}
326be168c0dSopenharmony_ci+
327be168c0dSopenharmony_ci+# Build configurations
328be168c0dSopenharmony_ci config("opencl_option") {
329be168c0dSopenharmony_ci   cflags_cc = [ "-Wno-missing-braces" ]
330be168c0dSopenharmony_ci }
331be168c0dSopenharmony_ci@@ -482,3 +703,7 @@ config("disable_android") {
332be168c0dSopenharmony_ci config("secure_option") {
333be168c0dSopenharmony_ci   cflags = [ "-fstack-protector-all" ]
334be168c0dSopenharmony_ci }
335be168c0dSopenharmony_ci+
336be168c0dSopenharmony_ci+config("train_kernel_option") {
337be168c0dSopenharmony_ci+  cflags_cc = [ "-fno-finite-math-only" ]
338be168c0dSopenharmony_ci+}
339be168c0dSopenharmony_cidiff --git a/mindspore/lite/include/registry/opencl_runtime_wrapper.h b/mindspore/lite/include/registry/opencl_runtime_wrapper.h
340be168c0dSopenharmony_ciindex fb647d37..b55554e4 100644
341be168c0dSopenharmony_ci--- a/mindspore/lite/include/registry/opencl_runtime_wrapper.h
342be168c0dSopenharmony_ci+++ b/mindspore/lite/include/registry/opencl_runtime_wrapper.h
343be168c0dSopenharmony_ci@@ -1,5 +1,5 @@
344be168c0dSopenharmony_ci /**
345be168c0dSopenharmony_ci- * Copyright 2021 Huawei Technologies Co., Ltd
346be168c0dSopenharmony_ci+ * Copyright 2021-2023 Huawei Technologies Co., Ltd
347be168c0dSopenharmony_ci  *
348be168c0dSopenharmony_ci  * Licensed under the Apache License, Version 2.0 (the "License");
349be168c0dSopenharmony_ci  * you may not use this file except in compliance with the License.
350be168c0dSopenharmony_cidiff --git a/mindspore/lite/src/litert/kernel/cpu/BUILD.gn b/mindspore/lite/src/litert/kernel/cpu/BUILD.gn
351be168c0dSopenharmony_ciindex b34e0427..48308425 100644
352be168c0dSopenharmony_ci--- a/mindspore/lite/src/litert/kernel/cpu/BUILD.gn
353be168c0dSopenharmony_ci+++ b/mindspore/lite/src/litert/kernel/cpu/BUILD.gn
354be168c0dSopenharmony_ci@@ -112,6 +112,7 @@ cpu_kernel_sources = [
355be168c0dSopenharmony_ci     "fp32/uniform_real_fp32.cc",
356be168c0dSopenharmony_ci     "fp32/unstack_fp32.cc",
357be168c0dSopenharmony_ci     "fp32/where_fp32.cc",
358be168c0dSopenharmony_ci+    "fp32/oneslike_fp32.cc",
359be168c0dSopenharmony_ci     "fp32/online_fusion/cast_gather_reduce_fp32.cc",
360be168c0dSopenharmony_ci     "fp32/online_fusion/reduce_concat_fp32.cc",
361be168c0dSopenharmony_ci     "fp32/online_fusion/split_reduce_concat_fp32.cc",
362be168c0dSopenharmony_cidiff --git a/mindspore/lite/src/litert/kernel/cpu/fp32/oneslike_fp32.cc b/mindspore/lite/src/litert/kernel/cpu/fp32/oneslike_fp32.cc
363be168c0dSopenharmony_cinew file mode 100644
364be168c0dSopenharmony_ciindex 00000000..b4c3bf7e
365be168c0dSopenharmony_ci--- /dev/null
366be168c0dSopenharmony_ci+++ b/mindspore/lite/src/litert/kernel/cpu/fp32/oneslike_fp32.cc
367be168c0dSopenharmony_ci@@ -0,0 +1,51 @@
368be168c0dSopenharmony_ci+/**
369be168c0dSopenharmony_ci+ * Copyright 2022 Huawei Technologies Co., Ltd
370be168c0dSopenharmony_ci+ *
371be168c0dSopenharmony_ci+ * Licensed under the Apache License, Version 2.0 (the "License");
372be168c0dSopenharmony_ci+ * you may not use this file except in compliance with the License.
373be168c0dSopenharmony_ci+ * You may obtain a copy of the License at
374be168c0dSopenharmony_ci+ *
375be168c0dSopenharmony_ci+ * http://www.apache.org/licenses/LICENSE-2.0
376be168c0dSopenharmony_ci+ *
377be168c0dSopenharmony_ci+ * Unless required by applicable law or agreed to in writing, software
378be168c0dSopenharmony_ci+ * distributed under the License is distributed on an "AS IS" BASIS,
379be168c0dSopenharmony_ci+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
380be168c0dSopenharmony_ci+ * See the License for the specific language governing permissions and
381be168c0dSopenharmony_ci+ * limitations under the License.
382be168c0dSopenharmony_ci+ */
383be168c0dSopenharmony_ci+
384be168c0dSopenharmony_ci+#include "src/litert/kernel/cpu/fp32/oneslike_fp32.h"
385be168c0dSopenharmony_ci+#include "schema/model_generated.h"
386be168c0dSopenharmony_ci+#include "src/litert/kernel_registry.h"
387be168c0dSopenharmony_ci+#include "include/errorcode.h"
388be168c0dSopenharmony_ci+
389be168c0dSopenharmony_ci+using mindspore::kernel::KERNEL_ARCH;
390be168c0dSopenharmony_ci+using mindspore::lite::KernelRegistrar;
391be168c0dSopenharmony_ci+using mindspore::lite::RET_ERROR;
392be168c0dSopenharmony_ci+using mindspore::lite::RET_OK;
393be168c0dSopenharmony_ci+using mindspore::schema::PrimitiveType_OnesLike;
394be168c0dSopenharmony_ci+
395be168c0dSopenharmony_ci+namespace mindspore::kernel {
396be168c0dSopenharmony_ci+int OnesLikeCPUKernel::Prepare() {
397be168c0dSopenharmony_ci+  CHECK_LESS_RETURN(in_tensors_.size(), 1);
398be168c0dSopenharmony_ci+  CHECK_LESS_RETURN(out_tensors_.size(), 1);
399be168c0dSopenharmony_ci+  return RET_OK;
400be168c0dSopenharmony_ci+}
401be168c0dSopenharmony_ci+
402be168c0dSopenharmony_ci+int OnesLikeCPUKernel::Run() {
403be168c0dSopenharmony_ci+  auto output = out_tensors_[0];
404be168c0dSopenharmony_ci+  CHECK_NULL_RETURN(output);
405be168c0dSopenharmony_ci+  if (output->data_type() == kNumberTypeInt32) {
406be168c0dSopenharmony_ci+    ApproximateOnesLike(static_cast<int *>(output->data()), output->ElementsNum());
407be168c0dSopenharmony_ci+  } else if (output->data_type() == kNumberTypeFloat32) {
408be168c0dSopenharmony_ci+    ApproximateOnesLike(static_cast<float *>(output->data()), output->ElementsNum());
409be168c0dSopenharmony_ci+  }
410be168c0dSopenharmony_ci+  return RET_OK;
411be168c0dSopenharmony_ci+}
412be168c0dSopenharmony_ci+
413be168c0dSopenharmony_ci+REG_KERNEL(kCPU, kNumberTypeInt32, PrimitiveType_OnesLike, LiteKernelCreator<OnesLikeCPUKernel>)
414be168c0dSopenharmony_ci+REG_KERNEL(kCPU, kNumberTypeFloat32, PrimitiveType_OnesLike, LiteKernelCreator<OnesLikeCPUKernel>)
415be168c0dSopenharmony_ci+#ifdef ENABLE_FP16
416be168c0dSopenharmony_ci+REG_KERNEL(kCPU, kNumberTypeFloat16, PrimitiveType_OnesLike, LiteKernelCreator<OnesLikeCPUKernel>)
417be168c0dSopenharmony_ci+#endif
418be168c0dSopenharmony_ci+}  // namespace mindspore::kernel
419be168c0dSopenharmony_ci\ No newline at end of file
420be168c0dSopenharmony_cidiff --git a/mindspore/lite/src/litert/kernel/cpu/fp32/oneslike_fp32.h b/mindspore/lite/src/litert/kernel/cpu/fp32/oneslike_fp32.h
421be168c0dSopenharmony_cinew file mode 100644
422be168c0dSopenharmony_ciindex 00000000..f90aebed
423be168c0dSopenharmony_ci--- /dev/null
424be168c0dSopenharmony_ci+++ b/mindspore/lite/src/litert/kernel/cpu/fp32/oneslike_fp32.h
425be168c0dSopenharmony_ci@@ -0,0 +1,46 @@
426be168c0dSopenharmony_ci+/**
427be168c0dSopenharmony_ci+ * Copyright 2022 Huawei Technologies Co., Ltd
428be168c0dSopenharmony_ci+ *
429be168c0dSopenharmony_ci+ * Licensed under the Apache License, Version 2.0 (the "License");
430be168c0dSopenharmony_ci+ * you may not use this file except in compliance with the License.
431be168c0dSopenharmony_ci+ * You may obtain a copy of the License at
432be168c0dSopenharmony_ci+ *
433be168c0dSopenharmony_ci+ * http://www.apache.org/licenses/LICENSE-2.0
434be168c0dSopenharmony_ci+ *
435be168c0dSopenharmony_ci+ * Unless required by applicable law or agreed to in writing, software
436be168c0dSopenharmony_ci+ * distributed under the License is distributed on an "AS IS" BASIS,
437be168c0dSopenharmony_ci+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
438be168c0dSopenharmony_ci+ * See the License for the specific language governing permissions and
439be168c0dSopenharmony_ci+ * limitations under the License.
440be168c0dSopenharmony_ci+ */
441be168c0dSopenharmony_ci+#ifndef MINDSPORE_LITE_SRC_RUNTIME_KERNEL_CPU_FP32_ONESLike_FP32_H_
442be168c0dSopenharmony_ci+#define MINDSPORE_LITE_SRC_RUNTIME_KERNEL_CPU_FP32_ONESLike_FP32_H_
443be168c0dSopenharmony_ci+
444be168c0dSopenharmony_ci+#include <vector>
445be168c0dSopenharmony_ci+#include "src/litert/lite_kernel.h"
446be168c0dSopenharmony_ci+
447be168c0dSopenharmony_ci+namespace mindspore::kernel {
448be168c0dSopenharmony_ci+class OnesLikeCPUKernel : public LiteKernel {
449be168c0dSopenharmony_ci+ public:
450be168c0dSopenharmony_ci+  OnesLikeCPUKernel(OpParameter *parameter, const std::vector<lite::Tensor *> &inputs,
451be168c0dSopenharmony_ci+                    const std::vector<lite::Tensor *> &outputs, const lite::InnerContext *ctx)
452be168c0dSopenharmony_ci+      : LiteKernel(parameter, inputs, outputs, ctx) {}
453be168c0dSopenharmony_ci+
454be168c0dSopenharmony_ci+  ~OnesLikeCPUKernel() = default;
455be168c0dSopenharmony_ci+
456be168c0dSopenharmony_ci+  int Prepare() override;
457be168c0dSopenharmony_ci+  int ReSize() override { return lite::RET_OK; }
458be168c0dSopenharmony_ci+  int Run() override;
459be168c0dSopenharmony_ci+
460be168c0dSopenharmony_ci+ private:
461be168c0dSopenharmony_ci+  template <typename T>
462be168c0dSopenharmony_ci+  void ApproximateOnesLike(T *output, int data_size) {
463be168c0dSopenharmony_ci+    for (int i = 0; i < data_size; ++i) {
464be168c0dSopenharmony_ci+      output[i] = 1;
465be168c0dSopenharmony_ci+    }
466be168c0dSopenharmony_ci+    return;
467be168c0dSopenharmony_ci+  }
468be168c0dSopenharmony_ci+};
469be168c0dSopenharmony_ci+}  // namespace mindspore::kernel
470be168c0dSopenharmony_ci+
471be168c0dSopenharmony_ci+#endif  // MINDSPORE_LITE_SRC_RUNTIME_KERNEL_CPU_FP32_ONESLike_FP32_H_
472be168c0dSopenharmony_ci\ No newline at end of file
473be168c0dSopenharmony_cidiff --git a/mindspore/lite/src/litert/lite_model.h b/mindspore/lite/src/litert/lite_model.h
474be168c0dSopenharmony_ciindex 2b5422fa..635b529a 100644
475be168c0dSopenharmony_ci--- a/mindspore/lite/src/litert/lite_model.h
476be168c0dSopenharmony_ci+++ b/mindspore/lite/src/litert/lite_model.h
477be168c0dSopenharmony_ci@@ -1,5 +1,5 @@
478be168c0dSopenharmony_ci /**
479be168c0dSopenharmony_ci- * Copyright 2020 Huawei Technologies Co., Ltd
480be168c0dSopenharmony_ci+ * Copyright 2020-2023 Huawei Technologies Co., Ltd
481be168c0dSopenharmony_ci  *
482be168c0dSopenharmony_ci  * Licensed under the Apache License, Version 2.0 (the "License");
483be168c0dSopenharmony_ci  * you may not use this file except in compliance with the License.
484be168c0dSopenharmony_cidiff --git a/mindspore/lite/src/litert/lite_session.cc b/mindspore/lite/src/litert/lite_session.cc
485be168c0dSopenharmony_ciindex ded4d761..8f54879e 100644
486be168c0dSopenharmony_ci--- a/mindspore/lite/src/litert/lite_session.cc
487be168c0dSopenharmony_ci+++ b/mindspore/lite/src/litert/lite_session.cc
488be168c0dSopenharmony_ci@@ -2022,6 +2022,7 @@ int lite::LiteSession::LoadModelAndCompileByPath(const std::string &model_path,
489be168c0dSopenharmony_ci     delete model;
490be168c0dSopenharmony_ci     return RET_ERROR;
491be168c0dSopenharmony_ci   }
492be168c0dSopenharmony_ci+  model->Free();
493be168c0dSopenharmony_ci   set_model(model);
494be168c0dSopenharmony_ci   return RET_OK;
495be168c0dSopenharmony_ci }
496be168c0dSopenharmony_cidiff --git a/mindspore/lite/src/litert/weight_decoder.h b/mindspore/lite/src/litert/weight_decoder.h
497be168c0dSopenharmony_ciindex 9afaca55..9fbcefde 100644
498be168c0dSopenharmony_ci--- a/mindspore/lite/src/litert/weight_decoder.h
499be168c0dSopenharmony_ci+++ b/mindspore/lite/src/litert/weight_decoder.h
500be168c0dSopenharmony_ci@@ -1,5 +1,5 @@
501be168c0dSopenharmony_ci /**
502be168c0dSopenharmony_ci- * Copyright 2020-2022 Huawei Technologies Co., Ltd
503be168c0dSopenharmony_ci+ * Copyright 2020-2023 Huawei Technologies Co., Ltd
504be168c0dSopenharmony_ci  *
505be168c0dSopenharmony_ci  * Licensed under the Apache License, Version 2.0 (the "License");
506be168c0dSopenharmony_ci  * you may not use this file except in compliance with the License.
507be168c0dSopenharmony_cidiff --git a/mindspore/lite/src/tensor.h b/mindspore/lite/src/tensor.h
508be168c0dSopenharmony_ciindex 838892cf..f2eb4d1a 100644
509be168c0dSopenharmony_ci--- a/mindspore/lite/src/tensor.h
510be168c0dSopenharmony_ci+++ b/mindspore/lite/src/tensor.h
511be168c0dSopenharmony_ci@@ -69,7 +69,7 @@ enum CompressType {
512be168c0dSopenharmony_ci   kFSEInfer = 6
513be168c0dSopenharmony_ci };
514be168c0dSopenharmony_ci 
515be168c0dSopenharmony_ci-class Tensor {
516be168c0dSopenharmony_ci+class MS_API Tensor {
517be168c0dSopenharmony_ci  public:
518be168c0dSopenharmony_ci   Tensor() { tensor_c_ = {false, kTypeUnknown, NHWC, VarTensor, nullptr, 0}; }
519be168c0dSopenharmony_ci 
520be168c0dSopenharmony_cidiff --git a/mindspore/lite/src/tensorlist.h b/mindspore/lite/src/tensorlist.h
521be168c0dSopenharmony_ciindex bdfdda02..6925cc95 100644
522be168c0dSopenharmony_ci--- a/mindspore/lite/src/tensorlist.h
523be168c0dSopenharmony_ci+++ b/mindspore/lite/src/tensorlist.h
524be168c0dSopenharmony_ci@@ -56,7 +56,7 @@ namespace mindspore::lite {
525be168c0dSopenharmony_ci  *
526be168c0dSopenharmony_ci  *  See the code for other constructors.
527be168c0dSopenharmony_ci  */
528be168c0dSopenharmony_ci-class TensorList : public Tensor {
529be168c0dSopenharmony_ci+class MS_API TensorList : public Tensor {
530be168c0dSopenharmony_ci  public:
531be168c0dSopenharmony_ci   TensorList() { tensor_list_c_ = {false, kObjectTypeTensorType, DEFAULT_FORMAT, 0, kTypeUnknown, -1, nullptr, 0, 0}; }
532be168c0dSopenharmony_ci 
533be168c0dSopenharmony_cidiff --git a/mindspore/lite/src/train/train_session.cc b/mindspore/lite/src/train/train_session.cc
534be168c0dSopenharmony_ciindex ef3c71f3..ce6a6437 100644
535be168c0dSopenharmony_ci--- a/mindspore/lite/src/train/train_session.cc
536be168c0dSopenharmony_ci+++ b/mindspore/lite/src/train/train_session.cc
537be168c0dSopenharmony_ci@@ -248,8 +248,8 @@ static int ReshapeWeightTensor(Tensor *orig_tensor, lite::Tensor *new_tensor) {
538be168c0dSopenharmony_ci 
539be168c0dSopenharmony_ci int TrainSession::UpdateWeights(std::vector<lite::Tensor *> modify_tensors) {
540be168c0dSopenharmony_ci   unsigned int num_of_found_tensors = 0;
541be168c0dSopenharmony_ci-  for (auto tensor : tensors_) {
542be168c0dSopenharmony_ci-    for (auto modify : modify_tensors) {
543be168c0dSopenharmony_ci+  for (auto modify : modify_tensors) {
544be168c0dSopenharmony_ci+    for (auto tensor : tensors_) {
545be168c0dSopenharmony_ci       if (modify == nullptr) {
546be168c0dSopenharmony_ci         MS_LOG(ERROR) << "Tensor is nullptr";
547be168c0dSopenharmony_ci         return RET_PARAM_INVALID;
548be168c0dSopenharmony_ci@@ -1346,7 +1346,7 @@ int TrainSession::ExportWeightsCollaborateWithMicro(const std::string &file_name
549be168c0dSopenharmony_ci std::vector<lite::Tensor *> TrainSession::GetFeatureMaps() const {
550be168c0dSopenharmony_ci   std::vector<lite::Tensor *> features;
551be168c0dSopenharmony_ci   for (auto cur_tensor : this->tensors_) {
552be168c0dSopenharmony_ci-    if (cur_tensor->IsConst() && cur_tensor->data_type() == kNumberTypeFloat32) {
553be168c0dSopenharmony_ci+    if (cur_tensor->category() == lite::Category::CONST_TENSOR && cur_tensor->data_type() == kNumberTypeFloat32) {
554be168c0dSopenharmony_ci       features.push_back(cur_tensor);
555be168c0dSopenharmony_ci     }
556be168c0dSopenharmony_ci   }
557be168c0dSopenharmony_cidiff --git a/mindspore/lite/tools/benchmark_train/net_train.h b/mindspore/lite/tools/benchmark_train/net_train.h
558be168c0dSopenharmony_ciindex 43853e99..67e58a04 100644
559be168c0dSopenharmony_ci--- a/mindspore/lite/tools/benchmark_train/net_train.h
560be168c0dSopenharmony_ci+++ b/mindspore/lite/tools/benchmark_train/net_train.h
561be168c0dSopenharmony_ci@@ -1,5 +1,5 @@
562be168c0dSopenharmony_ci /**
563be168c0dSopenharmony_ci- * Copyright 2020 Huawei Technologies Co., Ltd
564be168c0dSopenharmony_ci+ * Copyright 2020-2023 Huawei Technologies Co., Ltd
565be168c0dSopenharmony_ci  *
566be168c0dSopenharmony_ci  * Licensed under the Apache License, Version 2.0 (the "License");
567be168c0dSopenharmony_ci  * you may not use this file except in compliance with the License.
568be168c0dSopenharmony_cidiff --git a/mindspore/lite/tools/converter/converter_metagraph.cc b/mindspore/lite/tools/converter/converter_metagraph.cc
569be168c0dSopenharmony_ciindex 6ffff71c..46a66128 100644
570be168c0dSopenharmony_ci--- a/mindspore/lite/tools/converter/converter_metagraph.cc
571be168c0dSopenharmony_ci+++ b/mindspore/lite/tools/converter/converter_metagraph.cc
572be168c0dSopenharmony_ci@@ -104,12 +104,14 @@ schema::MetaGraphT *ConverterToMetaGraph::Build(const std::shared_ptr<ConverterP
573be168c0dSopenharmony_ci     return nullptr;
574be168c0dSopenharmony_ci   }
575be168c0dSopenharmony_ci 
576be168c0dSopenharmony_ci-  // output name will be modified by Transform
577be168c0dSopenharmony_ci-  status = UpdateMetaGraphOutputName(meta_graph, output_tensor_name);
578be168c0dSopenharmony_ci-  if (status != RET_OK) {
579be168c0dSopenharmony_ci-    MS_LOG(ERROR) << "UpdateGraphOutputName failed.";
580be168c0dSopenharmony_ci-    delete meta_graph;
581be168c0dSopenharmony_ci-    return nullptr;
582be168c0dSopenharmony_ci+  if (!param->train_model) {
583be168c0dSopenharmony_ci+    // output name will be modified by Transform
584be168c0dSopenharmony_ci+    status = UpdateMetaGraphOutputName(meta_graph, output_tensor_name);
585be168c0dSopenharmony_ci+    if (status != RET_OK) {
586be168c0dSopenharmony_ci+      MS_LOG(ERROR) << "UpdateGraphOutputName failed.";
587be168c0dSopenharmony_ci+      delete meta_graph;
588be168c0dSopenharmony_ci+      return nullptr;
589be168c0dSopenharmony_ci+    }
590be168c0dSopenharmony_ci   }
591be168c0dSopenharmony_ci 
592be168c0dSopenharmony_ci   return meta_graph;
593be168c0dSopenharmony_cidiff --git a/mindspore/lite/tools/converter/graphdef_transform.cc b/mindspore/lite/tools/converter/graphdef_transform.cc
594be168c0dSopenharmony_ciindex d571b532..90b744e5 100644
595be168c0dSopenharmony_ci--- a/mindspore/lite/tools/converter/graphdef_transform.cc
596be168c0dSopenharmony_ci+++ b/mindspore/lite/tools/converter/graphdef_transform.cc
597be168c0dSopenharmony_ci@@ -26,6 +26,7 @@
598be168c0dSopenharmony_ci #include "tools/converter/legacy_optimizer/graph/dropout_node_remove_pass.h"
599be168c0dSopenharmony_ci #include "tools/converter/legacy_optimizer/graph/topological_sort_pass.h"
600be168c0dSopenharmony_ci #include "tools/converter/legacy_optimizer/graph/tensor_name_pass.h"
601be168c0dSopenharmony_ci+#include "tools/converter/legacy_optimizer/graph/node_name_pass.h"
602be168c0dSopenharmony_ci #include "tools/converter/legacy_optimizer/graph/set_unused_quant_param_to_default_pass.h"
603be168c0dSopenharmony_ci #include "tools/converter/legacy_optimizer/graph/convert_fp32_to_fp16_pass.h"
604be168c0dSopenharmony_ci #include "tools/converter/legacy_optimizer/graph/subgraph_node_pass.h"
605be168c0dSopenharmony_ci@@ -136,6 +137,9 @@ int GraphDefTransform::Transform(const std::shared_ptr<ConverterPara> &param) {
606be168c0dSopenharmony_ci     Optimizer forming_model_optimizer;
607be168c0dSopenharmony_ci     forming_model_optimizer.AddPass(new (std::nothrow) InferShapePass(param->fmk_type));
608be168c0dSopenharmony_ci     forming_model_optimizer.AddPass(new (std::nothrow) SetUnusedQuantParamToDefaultPass(param));
609be168c0dSopenharmony_ci+    if (param->train_model) {
610be168c0dSopenharmony_ci+      forming_model_optimizer.AddPass(new (std::nothrow) NodeNamePass());
611be168c0dSopenharmony_ci+    }
612be168c0dSopenharmony_ci     forming_model_optimizer.AddPass(new (std::nothrow) TensorNamePass());
613be168c0dSopenharmony_ci     forming_model_optimizer.AddPass(new (std::nothrow) ConvertFP32ToFP16Pass(param->weight_fp16));
614be168c0dSopenharmony_ci     status = forming_model_optimizer.Run(graph_defT_);
615be168c0dSopenharmony_cidiff --git a/mindspore/lite/tools/converter/legacy_optimizer/graph/CMakeLists.txt b/mindspore/lite/tools/converter/legacy_optimizer/graph/CMakeLists.txt
616be168c0dSopenharmony_ciindex 9b16f4f8..30bccbde 100644
617be168c0dSopenharmony_ci--- a/mindspore/lite/tools/converter/legacy_optimizer/graph/CMakeLists.txt
618be168c0dSopenharmony_ci+++ b/mindspore/lite/tools/converter/legacy_optimizer/graph/CMakeLists.txt
619be168c0dSopenharmony_ci@@ -9,6 +9,7 @@ file(GLOB GRAPH_PASS
620be168c0dSopenharmony_ci         ${CMAKE_CURRENT_SOURCE_DIR}/convert_fp32_to_fp16_pass.cc
621be168c0dSopenharmony_ci         ${CMAKE_CURRENT_SOURCE_DIR}/set_unused_quant_param_to_default_pass.cc
622be168c0dSopenharmony_ci         ${CMAKE_CURRENT_SOURCE_DIR}/tensor_name_pass.cc
623be168c0dSopenharmony_ci+        ${CMAKE_CURRENT_SOURCE_DIR}/node_name_pass.cc
624be168c0dSopenharmony_ci         ${CMAKE_CURRENT_SOURCE_DIR}/subgraph_node_pass.cc
625be168c0dSopenharmony_ci         ${CMAKE_CURRENT_SOURCE_DIR}/subgraph_tensor_pass.cc
626be168c0dSopenharmony_ci         ${CMAKE_CURRENT_SOURCE_DIR}/const_node_reorder_pass.cc
627be168c0dSopenharmony_cidiff --git a/mindspore/lite/tools/converter/legacy_optimizer/graph/node_name_pass.cc b/mindspore/lite/tools/converter/legacy_optimizer/graph/node_name_pass.cc
628be168c0dSopenharmony_cinew file mode 100644
629be168c0dSopenharmony_ciindex 00000000..712927b0
630be168c0dSopenharmony_ci--- /dev/null
631be168c0dSopenharmony_ci+++ b/mindspore/lite/tools/converter/legacy_optimizer/graph/node_name_pass.cc
632be168c0dSopenharmony_ci@@ -0,0 +1,96 @@
633be168c0dSopenharmony_ci+/**
634be168c0dSopenharmony_ci+ * Copyright 2022 Huawei Technologies Co., Ltd
635be168c0dSopenharmony_ci+ *
636be168c0dSopenharmony_ci+ * Licensed under the Apache License, Version 2.0 (the "License");
637be168c0dSopenharmony_ci+ * you may not use this file except in compliance with the License.
638be168c0dSopenharmony_ci+ * You may obtain a copy of the License at
639be168c0dSopenharmony_ci+ *
640be168c0dSopenharmony_ci+ * http://www.apache.org/licenses/LICENSE-2.0
641be168c0dSopenharmony_ci+ *
642be168c0dSopenharmony_ci+ * Unless required by applicable law or agreed to in writing, software
643be168c0dSopenharmony_ci+ * distributed under the License is distributed on an "AS IS" BASIS,
644be168c0dSopenharmony_ci+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
645be168c0dSopenharmony_ci+ * See the License for the specific language governing permissions and
646be168c0dSopenharmony_ci+ * limitations under the License.
647be168c0dSopenharmony_ci+ */
648be168c0dSopenharmony_ci+
649be168c0dSopenharmony_ci+#include "tools/converter/legacy_optimizer/graph/node_name_pass.h"
650be168c0dSopenharmony_ci+#include <string>
651be168c0dSopenharmony_ci+#include <vector>
652be168c0dSopenharmony_ci+#include "tools/converter/converter_context.h"
653be168c0dSopenharmony_ci+
654be168c0dSopenharmony_ci+namespace mindspore::lite {
655be168c0dSopenharmony_ci+std::string CutShortName(const std::string &fullname, const std::string &delimiter) {
656be168c0dSopenharmony_ci+  size_t end_pos = fullname.find_last_of(delimiter);
657be168c0dSopenharmony_ci+  std::string name = "";
658be168c0dSopenharmony_ci+  if (end_pos != std::string::npos) {
659be168c0dSopenharmony_ci+    name = fullname.substr(end_pos + 1);
660be168c0dSopenharmony_ci+  }
661be168c0dSopenharmony_ci+  if ((fullname.find("op") != std::string::npos) && (name.find("op") == std::string::npos) &&
662be168c0dSopenharmony_ci+      (end_pos != std::string::npos)) {
663be168c0dSopenharmony_ci+    size_t pos = fullname.rfind(delimiter, end_pos - 1);
664be168c0dSopenharmony_ci+    if (pos != std::string::npos) {
665be168c0dSopenharmony_ci+      name.insert(0, fullname.substr(pos + 1, end_pos - pos));
666be168c0dSopenharmony_ci+    } else {
667be168c0dSopenharmony_ci+      name.insert(0, fullname.substr(0, end_pos + 1));
668be168c0dSopenharmony_ci+    }
669be168c0dSopenharmony_ci+  }
670be168c0dSopenharmony_ci+
671be168c0dSopenharmony_ci+  const std::vector<std::string> loss_names = {"loss_fct", "_loss_fn", "SigmoidCrossEntropy"};
672be168c0dSopenharmony_ci+  for (auto &s : loss_names) {
673be168c0dSopenharmony_ci+    if (fullname.find(s) != std::string::npos) {
674be168c0dSopenharmony_ci+      name.insert(0, s + "/");
675be168c0dSopenharmony_ci+      break;
676be168c0dSopenharmony_ci+    }
677be168c0dSopenharmony_ci+  }
678be168c0dSopenharmony_ci+
679be168c0dSopenharmony_ci+  if (fullname.find("Gradients") != std::string::npos) {
680be168c0dSopenharmony_ci+    size_t pos = fullname.find(delimiter);
681be168c0dSopenharmony_ci+    if (pos != std::string::npos) {
682be168c0dSopenharmony_ci+      name.insert(0, fullname.substr(0, pos + 1));
683be168c0dSopenharmony_ci+    }
684be168c0dSopenharmony_ci+  }
685be168c0dSopenharmony_ci+  return name;
686be168c0dSopenharmony_ci+}
687be168c0dSopenharmony_ci+
688be168c0dSopenharmony_ci+STATUS NodeNamePass::Run(schema::MetaGraphT *graph) {
689be168c0dSopenharmony_ci+  if (graph == nullptr) {
690be168c0dSopenharmony_ci+    MS_LOG(ERROR) << "graph is nullptr";
691be168c0dSopenharmony_ci+    return RET_NULL_PTR;
692be168c0dSopenharmony_ci+  }
693be168c0dSopenharmony_ci+
694be168c0dSopenharmony_ci+  std::string delimiter = "/";
695be168c0dSopenharmony_ci+  for (auto &node : graph->nodes) {
696be168c0dSopenharmony_ci+    if (node == nullptr || node->primitive == nullptr) {
697be168c0dSopenharmony_ci+      MS_LOG(ERROR) << "node or node->primitive is nullptr";
698be168c0dSopenharmony_ci+      return RET_NULL_PTR;
699be168c0dSopenharmony_ci+    }
700be168c0dSopenharmony_ci+    std::string node_name = CutShortName(node->name, delimiter);
701be168c0dSopenharmony_ci+    node->name = node_name != "" ? node_name : node->name;
702be168c0dSopenharmony_ci+
703be168c0dSopenharmony_ci+    for (int i = 0; i < static_cast<int>(node->inputIndex.size()); i++) {
704be168c0dSopenharmony_ci+      auto tensor_id = node->inputIndex.at(i);
705be168c0dSopenharmony_ci+      auto &tensor = graph->allTensors.at(tensor_id);
706be168c0dSopenharmony_ci+      if (tensor->name.empty()) {
707be168c0dSopenharmony_ci+        MS_LOG(DEBUG) << "input tensor (id = " << tensor_id << ") name is null";
708be168c0dSopenharmony_ci+        tensor->name = node->name + "/input-" + std::to_string(i);
709be168c0dSopenharmony_ci+      } else {
710be168c0dSopenharmony_ci+        std::string in_tensor_name = CutShortName(tensor->name, delimiter);
711be168c0dSopenharmony_ci+        tensor->name = in_tensor_name != "" ? in_tensor_name : tensor->name;
712be168c0dSopenharmony_ci+      }
713be168c0dSopenharmony_ci+    }
714be168c0dSopenharmony_ci+
715be168c0dSopenharmony_ci+    for (int i = 0; i < static_cast<int>(node->outputIndex.size()); i++) {
716be168c0dSopenharmony_ci+      auto tensor_id = node->outputIndex.at(i);
717be168c0dSopenharmony_ci+      auto &tensor = graph->allTensors.at(tensor_id);
718be168c0dSopenharmony_ci+      if (tensor->name.empty()) {
719be168c0dSopenharmony_ci+        tensor->name = node->name + "/output-" + std::to_string(i);
720be168c0dSopenharmony_ci+      } else {
721be168c0dSopenharmony_ci+        std::string out_tensor_name = CutShortName(tensor->name, delimiter);
722be168c0dSopenharmony_ci+        tensor->name = out_tensor_name != "" ? out_tensor_name : tensor->name;
723be168c0dSopenharmony_ci+      }
724be168c0dSopenharmony_ci+    }
725be168c0dSopenharmony_ci+  }
726be168c0dSopenharmony_ci+  return RET_OK;
727be168c0dSopenharmony_ci+}
728be168c0dSopenharmony_ci+}  // namespace mindspore::lite
729be168c0dSopenharmony_ci\ No newline at end of file
730be168c0dSopenharmony_cidiff --git a/mindspore/lite/tools/converter/legacy_optimizer/graph/node_name_pass.h b/mindspore/lite/tools/converter/legacy_optimizer/graph/node_name_pass.h
731be168c0dSopenharmony_cinew file mode 100644
732be168c0dSopenharmony_ciindex 00000000..4e58e5c7
733be168c0dSopenharmony_ci--- /dev/null
734be168c0dSopenharmony_ci+++ b/mindspore/lite/tools/converter/legacy_optimizer/graph/node_name_pass.h
735be168c0dSopenharmony_ci@@ -0,0 +1,35 @@
736be168c0dSopenharmony_ci+/**
737be168c0dSopenharmony_ci+ * Copyright 2022 Huawei Technologies Co., Ltd
738be168c0dSopenharmony_ci+ *
739be168c0dSopenharmony_ci+ * Licensed under the Apache License, Version 2.0 (the "License");
740be168c0dSopenharmony_ci+ * you may not use this file except in compliance with the License.
741be168c0dSopenharmony_ci+ * You may obtain a copy of the License at
742be168c0dSopenharmony_ci+ *
743be168c0dSopenharmony_ci+ * http://www.apache.org/licenses/LICENSE-2.0
744be168c0dSopenharmony_ci+ *
745be168c0dSopenharmony_ci+ * Unless required by applicable law or agreed to in writing, software
746be168c0dSopenharmony_ci+ * distributed under the License is distributed on an "AS IS" BASIS,
747be168c0dSopenharmony_ci+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
748be168c0dSopenharmony_ci+ * See the License for the specific language governing permissions and
749be168c0dSopenharmony_ci+ * limitations under the License.
750be168c0dSopenharmony_ci+ */
751be168c0dSopenharmony_ci+#ifndef MINDSPORE_LITE_TOOLS_CONVERTER_LEGACY_OPTIMIZER_GRAPH_NODE_NAME_PASS_H_
752be168c0dSopenharmony_ci+#define MINDSPORE_LITE_TOOLS_CONVERTER_LEGACY_OPTIMIZER_GRAPH_NODE_NAME_PASS_H_
753be168c0dSopenharmony_ci+
754be168c0dSopenharmony_ci+#include <memory>
755be168c0dSopenharmony_ci+#include "tools/converter/optimizer.h"
756be168c0dSopenharmony_ci+#include "tools/common/graph_util.h"
757be168c0dSopenharmony_ci+
758be168c0dSopenharmony_ci+namespace mindspore {
759be168c0dSopenharmony_ci+namespace lite {
760be168c0dSopenharmony_ci+class NodeNamePass : public GraphPass {
761be168c0dSopenharmony_ci+ public:
762be168c0dSopenharmony_ci+  NodeNamePass() {}
763be168c0dSopenharmony_ci+
764be168c0dSopenharmony_ci+  ~NodeNamePass() override = default;
765be168c0dSopenharmony_ci+
766be168c0dSopenharmony_ci+  STATUS Run(schema::MetaGraphT *graph) override;
767be168c0dSopenharmony_ci+};
768be168c0dSopenharmony_ci+}  // namespace lite
769be168c0dSopenharmony_ci+}  // namespace mindspore
770be168c0dSopenharmony_ci+#endif  // MINDSPORE_LITE_TOOLS_CONVERTER_LEGACY_OPTIMIZER_GRAPH_NODE_NAME_PASS_H_
771be168c0dSopenharmony_ci-- 
772be168c0dSopenharmony_ci2.25.1
773be168c0dSopenharmony_ci
774