mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-05-18 21:21:17 +00:00
🛠️ __Changes in this pull request:__ This pull request introduces two significant changes to the project: - Changing on device training checkpoint format: The current implementation stores the on device training checkpoint as a sequence of tensors in multiple files inside a checkpoint folder, which can be inefficient in terms of storage and performance. In this PR, I have modified the checkpoint format to utilize the flatbuffer table to save the checkpoint to a single file, providing a more compact and efficient representation. The changes around this are twofold: - Add the checkpoint flatbuffer schema that will generate the necessary checkpoint source files. - Update the checkpoint saving and loading functionality to use the new format. - Adding support for onnxruntime minimal build: To support scenarios where binary size is a constraint, I made changes to ensure that the training build can work well with the minimal build. 🔍 __Open Issues:__ - In order to extract the optimizer type, the existing implementation re-loaded the onnx optimizer model and parsed it. This is no longer possible, since the model format can either be onnx or ort. One idea is to do the same for ort format optimizer model. This needs some investigation. - Changes to the offline tooling to generate ort format training artifacts. - End-to-end training example showcasing the use of the minimal training build. - Add support for export model for inferencing in a minimal build.
115 lines
6.5 KiB
CMake
115 lines
6.5 KiB
CMake
# Copyright (c) Microsoft Corporation. All rights reserved.
|
|
# Licensed under the MIT License.
|
|
|
|
set(onnxruntime_optimizer_src_patterns)
|
|
|
|
if (onnxruntime_MINIMAL_BUILD)
|
|
# we include a couple of files so a library is produced and we minimize other changes to the build setup.
|
|
# if the transformer base class is unused it will be excluded from the final binary size
|
|
list(APPEND onnxruntime_optimizer_src_patterns
|
|
"${ONNXRUNTIME_INCLUDE_DIR}/core/optimizer/graph_transformer.h"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/graph_transformer.cc"
|
|
)
|
|
|
|
if (onnxruntime_EXTENDED_MINIMAL_BUILD)
|
|
list(APPEND onnxruntime_optimizer_src_patterns
|
|
"${ONNXRUNTIME_INCLUDE_DIR}/core/optimizer/graph_transformer_utils.h"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/conv_activation_fusion.cc"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/conv_activation_fusion.h"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/graph_transformer_utils.cc"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/initializer.cc"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/initializer.h"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/nhwc_transformer.cc"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/nhwc_transformer.h"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/qdq_transformer/qdq_final_cleanup.cc"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/qdq_transformer/qdq_final_cleanup.h"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/qdq_transformer/qdq_util.cc"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/qdq_transformer/qdq_util.h"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/qdq_transformer/selectors_actions/qdq_actions.cc"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/qdq_transformer/selectors_actions/qdq_actions.h"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/qdq_transformer/selectors_actions/qdq_selector_action_transformer.cc"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/qdq_transformer/selectors_actions/qdq_selector_action_transformer.h"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/qdq_transformer/selectors_actions/qdq_selectors.cc"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/qdq_transformer/selectors_actions/qdq_selectors.h"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/qdq_transformer/selectors_actions/shared/utils.cc"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/qdq_transformer/selectors_actions/shared/utils.h"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/selectors_actions/actions.cc"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/selectors_actions/actions.h"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/selectors_actions/helpers.cc"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/selectors_actions/helpers.cc"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/selectors_actions/helpers.h"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/selectors_actions/helpers.h"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/selectors_actions/selector_action_transformer_apply_contexts.h"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/selectors_actions/selector_action_transformer.cc"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/selectors_actions/selector_action_transformer.h"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/transpose_optimizer/optimizer_api_impl.cc"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/transpose_optimizer/optimizer_api.h"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/transpose_optimizer/optimizer_utils.h"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/transpose_optimizer/ort_transpose_optimizer.cc"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/transpose_optimizer/ort_transpose_optimizer.h"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/transpose_optimizer/transpose_optimizer.cc"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/utils.cc"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/utils.h"
|
|
)
|
|
endif()
|
|
else()
|
|
list(APPEND onnxruntime_optimizer_src_patterns
|
|
"${ONNXRUNTIME_INCLUDE_DIR}/core/optimizer/*.h"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/*.h"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/*.cc"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/compute_optimizer/*.h"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/compute_optimizer/*.cc"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/qdq_transformer/*.h"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/qdq_transformer/*.cc"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/qdq_transformer/selectors_actions/*.h"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/qdq_transformer/selectors_actions/*.cc"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/qdq_transformer/selectors_actions/shared/utils.h"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/qdq_transformer/selectors_actions/shared/utils.cc"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/selectors_actions/*.h"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/selectors_actions/*.cc"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/transpose_optimizer/*.h"
|
|
"${ONNXRUNTIME_ROOT}/core/optimizer/transpose_optimizer/*.cc"
|
|
)
|
|
endif()
|
|
|
|
if (onnxruntime_ENABLE_TRAINING)
|
|
list(APPEND onnxruntime_optimizer_src_patterns
|
|
"${ORTTRAINING_SOURCE_DIR}/core/optimizer/*.h"
|
|
"${ORTTRAINING_SOURCE_DIR}/core/optimizer/*.cc"
|
|
"${ORTTRAINING_SOURCE_DIR}/core/optimizer/compute_optimizer/*.h"
|
|
"${ORTTRAINING_SOURCE_DIR}/core/optimizer/compute_optimizer/*.cc"
|
|
)
|
|
endif()
|
|
|
|
file(GLOB onnxruntime_optimizer_srcs CONFIGURE_DEPENDS ${onnxruntime_optimizer_src_patterns})
|
|
|
|
source_group(TREE ${REPO_ROOT} FILES ${onnxruntime_optimizer_srcs})
|
|
|
|
if (onnxruntime_EXTERNAL_TRANSFORMER_SRC_PATH)
|
|
set(onnxruntime_external_transformer_src_patterns)
|
|
list(APPEND onnxruntime_external_transformer_src_patterns
|
|
"${onnxruntime_EXTERNAL_TRANSFORMER_SRC_PATH}/*.cc"
|
|
"${onnxruntime_EXTERNAL_TRANSFORMER_SRC_PATH}/*.cpp"
|
|
)
|
|
file(GLOB onnxruntime_external_transformer_src ${onnxruntime_external_transformer_src_patterns})
|
|
list(APPEND onnxruntime_optimizer_srcs ${onnxruntime_external_transformer_src})
|
|
endif()
|
|
|
|
onnxruntime_add_static_library(onnxruntime_optimizer ${onnxruntime_optimizer_srcs})
|
|
|
|
onnxruntime_add_include_to_target(onnxruntime_optimizer onnxruntime_common onnxruntime_framework onnx onnx_proto ${PROTOBUF_LIB} flatbuffers::flatbuffers Boost::mp11 safeint_interface)
|
|
target_include_directories(onnxruntime_optimizer PRIVATE ${ONNXRUNTIME_ROOT})
|
|
if (onnxruntime_ENABLE_TRAINING)
|
|
target_include_directories(onnxruntime_optimizer PRIVATE ${ORTTRAINING_ROOT})
|
|
endif()
|
|
add_dependencies(onnxruntime_optimizer ${onnxruntime_EXTERNAL_DEPENDENCIES})
|
|
set_target_properties(onnxruntime_optimizer PROPERTIES FOLDER "ONNXRuntime")
|
|
|
|
if (NOT onnxruntime_BUILD_SHARED_LIB)
|
|
install(DIRECTORY ${PROJECT_SOURCE_DIR}/../include/onnxruntime/core/optimizer DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/onnxruntime/core)
|
|
install(TARGETS onnxruntime_optimizer
|
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
|
FRAMEWORK DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|
endif()
|