From 124ea0a801097337daad19d488031047b3cb1d44 Mon Sep 17 00:00:00 2001 From: Ashwini Khade Date: Mon, 24 Apr 2023 15:57:15 -0700 Subject: [PATCH] remove compute optimizer from lte (learning on the edge) builds (#15637) ### Description Removing compute optimizer from on device training builds. ### Motivation and Context 1. mitigate android build failures 2. reduce binary size Since only CPU EP is enabled for LTE builds, we can optimize the models offline. --- .../core/optimizer/compute_optimizer/shared_utils.cc | 2 +- .../core/optimizer/compute_optimizer/shared_utils.h | 2 +- .../optimizer/compute_optimizer/upstream_gather.cc | 2 +- .../optimizer/compute_optimizer/upstream_gather.h | 2 +- .../compute_optimizer/upstream_gather_actors.cc | 2 +- .../compute_optimizer/upstream_gather_actors.h | 2 +- .../optimizer/compute_optimizer/upstream_reshape.cc | 2 +- .../optimizer/compute_optimizer/upstream_reshape.h | 2 +- .../compute_optimizer/upstream_reshape_actors.cc | 2 +- .../compute_optimizer/upstream_reshape_actors.h | 2 +- .../compute_optimizer/upstream_transformer_base.cc | 2 +- .../compute_optimizer/upstream_transformer_base.h | 2 +- .../core/optimizer/graph_transformer_utils.cc | 6 ++---- .../sceloss_compute_optimization.cc | 3 +++ .../compute_optimizer/sceloss_compute_optimization.h | 3 +++ .../core/optimizer/graph_transformer_utils.cc | 12 +++++++++--- .../test/optimizer/compute_optimizer_test.cc | 4 ++++ 17 files changed, 33 insertions(+), 19 deletions(-) diff --git a/onnxruntime/core/optimizer/compute_optimizer/shared_utils.cc b/onnxruntime/core/optimizer/compute_optimizer/shared_utils.cc index eb0234a1c4..ee900801ad 100644 --- a/onnxruntime/core/optimizer/compute_optimizer/shared_utils.cc +++ b/onnxruntime/core/optimizer/compute_optimizer/shared_utils.cc @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -#ifdef ENABLE_TRAINING_CORE +#ifdef ENABLE_TRAINING #include #include "core/graph/graph_utils.h" diff --git a/onnxruntime/core/optimizer/compute_optimizer/shared_utils.h b/onnxruntime/core/optimizer/compute_optimizer/shared_utils.h index 2f7815c72c..ce08cc8763 100644 --- a/onnxruntime/core/optimizer/compute_optimizer/shared_utils.h +++ b/onnxruntime/core/optimizer/compute_optimizer/shared_utils.h @@ -3,7 +3,7 @@ // The optimization here ideally is applicable to both training and inferencing, // while so far we mainly validate on training during cooking the optimization. -#ifdef ENABLE_TRAINING_CORE +#ifdef ENABLE_TRAINING #pragma once #include diff --git a/onnxruntime/core/optimizer/compute_optimizer/upstream_gather.cc b/onnxruntime/core/optimizer/compute_optimizer/upstream_gather.cc index 25623651c0..299d85dd86 100644 --- a/onnxruntime/core/optimizer/compute_optimizer/upstream_gather.cc +++ b/onnxruntime/core/optimizer/compute_optimizer/upstream_gather.cc @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -#ifdef ENABLE_TRAINING_CORE +#ifdef ENABLE_TRAINING #include #include "core/graph/graph_utils.h" diff --git a/onnxruntime/core/optimizer/compute_optimizer/upstream_gather.h b/onnxruntime/core/optimizer/compute_optimizer/upstream_gather.h index 924f7b1ac8..87ce3500b8 100644 --- a/onnxruntime/core/optimizer/compute_optimizer/upstream_gather.h +++ b/onnxruntime/core/optimizer/compute_optimizer/upstream_gather.h @@ -3,7 +3,7 @@ // The optimization here ideally applies to both training and inferencing, // while so far we mainly validate training during cooking the optimization. -#ifdef ENABLE_TRAINING_CORE +#ifdef ENABLE_TRAINING #pragma once #include "core/optimizer/compute_optimizer/upstream_transformer_base.h" diff --git a/onnxruntime/core/optimizer/compute_optimizer/upstream_gather_actors.cc b/onnxruntime/core/optimizer/compute_optimizer/upstream_gather_actors.cc index 4701bf1464..a3ac431205 100644 --- a/onnxruntime/core/optimizer/compute_optimizer/upstream_gather_actors.cc +++ b/onnxruntime/core/optimizer/compute_optimizer/upstream_gather_actors.cc @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -#ifdef ENABLE_TRAINING_CORE +#ifdef ENABLE_TRAINING #include #include "core/graph/graph_utils.h" diff --git a/onnxruntime/core/optimizer/compute_optimizer/upstream_gather_actors.h b/onnxruntime/core/optimizer/compute_optimizer/upstream_gather_actors.h index e287d6ebde..514368cea1 100644 --- a/onnxruntime/core/optimizer/compute_optimizer/upstream_gather_actors.h +++ b/onnxruntime/core/optimizer/compute_optimizer/upstream_gather_actors.h @@ -3,7 +3,7 @@ // The optimization here ideally applies to both training and inferencing, // while so far we mainly validate training during cooking the optimization. -#ifdef ENABLE_TRAINING_CORE +#ifdef ENABLE_TRAINING #pragma once #include "core/optimizer/compute_optimizer/shared_utils.h" diff --git a/onnxruntime/core/optimizer/compute_optimizer/upstream_reshape.cc b/onnxruntime/core/optimizer/compute_optimizer/upstream_reshape.cc index 0d862dd033..25734a6e80 100644 --- a/onnxruntime/core/optimizer/compute_optimizer/upstream_reshape.cc +++ b/onnxruntime/core/optimizer/compute_optimizer/upstream_reshape.cc @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -#ifdef ENABLE_TRAINING_CORE +#ifdef ENABLE_TRAINING #include "core/framework/tensorprotoutils.h" #include "core/graph/graph_utils.h" diff --git a/onnxruntime/core/optimizer/compute_optimizer/upstream_reshape.h b/onnxruntime/core/optimizer/compute_optimizer/upstream_reshape.h index 1e26ed93a6..a1dabc8da1 100644 --- a/onnxruntime/core/optimizer/compute_optimizer/upstream_reshape.h +++ b/onnxruntime/core/optimizer/compute_optimizer/upstream_reshape.h @@ -3,7 +3,7 @@ // The optimization here ideally applies to both training and inference, // while so far we mainly validate training during cooking the optimization. -#ifdef ENABLE_TRAINING_CORE +#ifdef ENABLE_TRAINING #pragma once #include "core/optimizer/compute_optimizer/upstream_transformer_base.h" diff --git a/onnxruntime/core/optimizer/compute_optimizer/upstream_reshape_actors.cc b/onnxruntime/core/optimizer/compute_optimizer/upstream_reshape_actors.cc index 64e9715783..716b027068 100644 --- a/onnxruntime/core/optimizer/compute_optimizer/upstream_reshape_actors.cc +++ b/onnxruntime/core/optimizer/compute_optimizer/upstream_reshape_actors.cc @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -#ifdef ENABLE_TRAINING_CORE +#ifdef ENABLE_TRAINING #include "core/optimizer/utils.h" #include "core/optimizer/compute_optimizer/upstream_reshape_actors.h" diff --git a/onnxruntime/core/optimizer/compute_optimizer/upstream_reshape_actors.h b/onnxruntime/core/optimizer/compute_optimizer/upstream_reshape_actors.h index c6a289a291..05bcbabe9b 100644 --- a/onnxruntime/core/optimizer/compute_optimizer/upstream_reshape_actors.h +++ b/onnxruntime/core/optimizer/compute_optimizer/upstream_reshape_actors.h @@ -3,7 +3,7 @@ // The optimization here ideally applies to both training and inference, // while so far we mainly validate training during cooking the optimization. -#ifdef ENABLE_TRAINING_CORE +#ifdef ENABLE_TRAINING #pragma once #include "core/optimizer/compute_optimizer/shared_utils.h" diff --git a/onnxruntime/core/optimizer/compute_optimizer/upstream_transformer_base.cc b/onnxruntime/core/optimizer/compute_optimizer/upstream_transformer_base.cc index 4b60d7772a..03e8701334 100644 --- a/onnxruntime/core/optimizer/compute_optimizer/upstream_transformer_base.cc +++ b/onnxruntime/core/optimizer/compute_optimizer/upstream_transformer_base.cc @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -#ifdef ENABLE_TRAINING_CORE +#ifdef ENABLE_TRAINING #include #include "core/common/safeint.h" diff --git a/onnxruntime/core/optimizer/compute_optimizer/upstream_transformer_base.h b/onnxruntime/core/optimizer/compute_optimizer/upstream_transformer_base.h index 1b539e4f3b..6e22fc791a 100644 --- a/onnxruntime/core/optimizer/compute_optimizer/upstream_transformer_base.h +++ b/onnxruntime/core/optimizer/compute_optimizer/upstream_transformer_base.h @@ -3,7 +3,7 @@ // The optimization here ideally applies to both training and inferencing, // while so far we mainly validate training during cooking the optimization. -#ifdef ENABLE_TRAINING_CORE +#ifdef ENABLE_TRAINING #pragma once #include "core/optimizer/graph_transformer.h" diff --git a/onnxruntime/core/optimizer/graph_transformer_utils.cc b/onnxruntime/core/optimizer/graph_transformer_utils.cc index 7078596c41..fe7698d040 100644 --- a/onnxruntime/core/optimizer/graph_transformer_utils.cc +++ b/onnxruntime/core/optimizer/graph_transformer_utils.cc @@ -70,12 +70,10 @@ #include "core/optimizer/slice_elimination.h" #include "core/optimizer/transpose_optimizer/ort_transpose_optimizer.h" #include "core/optimizer/unsqueeze_elimination.h" -#ifdef ENABLE_TRAINING_CORE +#ifdef ENABLE_TRAINING #include "orttraining/core/optimizer/bias_softmax_dropout_fusion.h" #include "orttraining/core/optimizer/bitmask_dropout_replacement.h" #include "orttraining/core/optimizer/sce_loss_grad_bias_fusion.h" -#endif -#ifdef ENABLE_TRAINING #include "orttraining/core/optimizer/memory_optimizer.h" #endif @@ -299,7 +297,7 @@ InlinedVector> GenerateTransformers( transformers.emplace_back(std::make_unique(cpu_cuda_dml_rocm_eps)); transformers.emplace_back(std::make_unique(cpu_cuda_rocm_eps)); transformers.emplace_back(std::make_unique(cuda_rocm_eps)); -#ifdef ENABLE_TRAINING_CORE +#ifdef ENABLE_TRAINING transformers.emplace_back(std::make_unique(cuda_rocm_eps)); transformers.emplace_back(std::make_unique(cuda_rocm_eps)); transformers.emplace_back(std::make_unique(cpu_cuda_rocm_eps)); diff --git a/orttraining/orttraining/core/optimizer/compute_optimizer/sceloss_compute_optimization.cc b/orttraining/orttraining/core/optimizer/compute_optimizer/sceloss_compute_optimization.cc index 4e20dc0cdc..06ac573672 100644 --- a/orttraining/orttraining/core/optimizer/compute_optimizer/sceloss_compute_optimization.cc +++ b/orttraining/orttraining/core/optimizer/compute_optimizer/sceloss_compute_optimization.cc @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. +#ifdef ENABLE_TRAINING #include #include "orttraining/core/optimizer/compute_optimizer/sceloss_compute_optimization.h" @@ -223,3 +224,5 @@ Status InsertGatherBeforeSceLoss::ApplyImpl(Graph& graph, bool& modified, int /* } } // namespace onnxruntime + +#endif diff --git a/orttraining/orttraining/core/optimizer/compute_optimizer/sceloss_compute_optimization.h b/orttraining/orttraining/core/optimizer/compute_optimizer/sceloss_compute_optimization.h index 0abb3c74a0..1ebf1c497d 100644 --- a/orttraining/orttraining/core/optimizer/compute_optimizer/sceloss_compute_optimization.h +++ b/orttraining/orttraining/core/optimizer/compute_optimizer/sceloss_compute_optimization.h @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. +#ifdef ENABLE_TRAINING #pragma once #include "core/optimizer/graph_transformer.h" @@ -75,3 +76,5 @@ class InsertGatherBeforeSceLoss : public GraphTransformer { }; } // namespace onnxruntime + +#endif diff --git a/orttraining/orttraining/core/optimizer/graph_transformer_utils.cc b/orttraining/orttraining/core/optimizer/graph_transformer_utils.cc index e8744b93dd..16103f0059 100644 --- a/orttraining/orttraining/core/optimizer/graph_transformer_utils.cc +++ b/orttraining/orttraining/core/optimizer/graph_transformer_utils.cc @@ -10,8 +10,6 @@ #include "core/optimizer/bias_softmax_fusion.h" #include "core/optimizer/cast_elimination.h" #include "core/optimizer/common_subexpression_elimination.h" -#include "core/optimizer/compute_optimizer/upstream_gather.h" -#include "core/optimizer/compute_optimizer/upstream_reshape.h" #include "core/optimizer/concat_slice_elimination.h" #include "core/optimizer/constant_folding.h" #include "core/optimizer/constant_sharing.h" @@ -53,7 +51,6 @@ #include "orttraining/core/framework/distributed_run_context.h" #include "orttraining/core/optimizer/batchnorm_replacement.h" #include "orttraining/core/optimizer/bitmask_dropout_replacement.h" -#include "orttraining/core/optimizer/compute_optimizer/sceloss_compute_optimization.h" #include "orttraining/core/optimizer/concat_replacement.h" #include "orttraining/core/optimizer/graph_transformer_registry.h" #include "orttraining/core/optimizer/insert_output_rewriter.h" @@ -63,6 +60,13 @@ #include "orttraining/core/optimizer/transformer_layer_recompute.h" #include "orttraining/core/optimizer/qdq_fusion.h" +// Only enabled in full training build. Not in on device training builds +#ifdef ENABLE_TRAINING +#include "core/optimizer/compute_optimizer/upstream_gather.h" +#include "core/optimizer/compute_optimizer/upstream_reshape.h" +#include "orttraining/core/optimizer/compute_optimizer/sceloss_compute_optimization.h" +#endif + namespace onnxruntime { namespace training { namespace transformer_utils { @@ -162,6 +166,7 @@ std::vector> GeneratePreTrainingTransformers( cuda_execution_provider)); } +#ifdef ENABLE_TRAINING if (config.enable_compute_optimizer) { transformers.emplace_back(std::make_unique(compatible_eps)); if (config.enable_label_sparsity_optimization) { @@ -169,6 +174,7 @@ std::vector> GeneratePreTrainingTransformers( transformers.emplace_back(std::make_unique(compatible_eps)); } } +#endif } break; diff --git a/orttraining/orttraining/test/optimizer/compute_optimizer_test.cc b/orttraining/orttraining/test/optimizer/compute_optimizer_test.cc index 82bc750e42..825ab3b3c2 100644 --- a/orttraining/orttraining/test/optimizer/compute_optimizer_test.cc +++ b/orttraining/orttraining/test/optimizer/compute_optimizer_test.cc @@ -1,6 +1,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. +// Only enabled in training full build, not in on device training build. +#ifdef ENABLE_TRAINING #include #include "core/graph/onnx_protobuf.h" @@ -426,3 +428,5 @@ TEST(ComputeOptimizerTests, InsertGatherBeforeSceLoss_MlmBertE2E) { } // namespace test } // namespace onnxruntime + +#endif