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