# This CI has the following steps: # 1. Build full ORT, install the full ORT python wheel and use it to generate ort format test models # and include ops config file for step 3. # 2. Build minimal ORT including all the kernels and disable exceptions. # This step is build only to safe-guard the --disable_exceptions option. # 3. Build minimal ORT include only the kernels using the include ops config file from step 1, # and the models from /onnxruntime/test/testdata/, run UT, and use onnx_test_runner to # test the ort format models generated in step 1. # Exceptions are enabled in this step to help debugging in case of CI failure. # This step builds and tests ORT with (3a) and without (3b) type reduction enabled. # 4. Build minimal ORT with type reduction from a globally allowed types list. # This step uses a hard-coded list of types which may not include the types needed by the models # in /onnxruntime/test/testdata/, so the tests for those models are skipped. # 5. Build extended minimal ORT and run tests. # 6. Build with all optional features disabled and no kernels. # 6a: regular build with python enabled checks that the exclusions don't break code paths in a full build. # 6b: minimal build with exceptions and python disabled checks that the exclusions don't break code paths in a # minimal build. # 6c: extended minimal build with exceptions and python disabled checks that the exclusions don't break code paths # in an extended minimal build. # 7. Build extended minimal ORT with NNAPI, with exceptions/RTTI/ml_ops disabled, for Android(arm64-v8a), # this safe-guards the extended minimal build with NNAPI EP. resources: repositories: - repository: manylinux type: Github endpoint: Microsoft name: pypa/manylinux ref: aead4d751c2101e23336aa73f2380df83e7a13f3 jobs: - job: Linux_CPU_Minimal_Build_E2E timeoutInMinutes: 120 workspace: clean: all pool: onnxruntime-Linux-CPU-2019 variables: test_data_directory: $(Build.SourcesDirectory)/.test_data steps: - checkout: self clean: true submodules: none - template: templates/get-docker-image-steps.yml parameters: Dockerfile: tools/ci_build/github/linux/docker/Dockerfile.manylinux2014_cpu Context: tools/ci_build/github/linux/docker DockerBuildArgs: "--build-arg BUILD_UID=$( id -u )" Repository: onnxruntimecpubuild - task: CmdLine@2 displayName: Create test data directory inputs: script: | # Create a folder for all test data mkdir -p $(test_data_directory) # create empty config used in some parts touch $(test_data_directory)/include_no_operators.config workingDirectory: $(Build.SourcesDirectory) - task: CmdLine@2 displayName: 1. Build full onnxruntime and generate ORT format test files inputs: script: | docker run --rm \ --volume $(Build.SourcesDirectory):/onnxruntime_src \ --volume $(Build.BinariesDirectory):/build \ --volume $(test_data_directory):/home/onnxruntimedev/.test_data \ -e ALLOW_RELEASED_ONNX_OPSET_ONLY=1 \ -e NIGHTLY_BUILD \ -e BUILD_BUILDNUMBER \ onnxruntimecpubuild \ /bin/bash /onnxruntime_src/tools/ci_build/github/linux/ort_minimal/build_full_ort_and_create_ort_files.sh \ /build/1 workingDirectory: $(Build.SourcesDirectory) - task: CmdLine@2 displayName: 2. Build minimal onnxruntime [exceptions DISABLED, type reduction DISABLED, training ops ENABLED] inputs: script: | # We will try to build minimal ORT with exceptions disabled and training ops enabled # Only the building process is verified here, no test will be performed docker run --rm \ --volume $(Build.SourcesDirectory):/onnxruntime_src \ --volume $(Build.BinariesDirectory):/build \ -e ALLOW_RELEASED_ONNX_OPSET_ONLY=1 \ -e NIGHTLY_BUILD \ -e BUILD_BUILDNUMBER \ onnxruntimecpubuild \ /opt/python/cp38-cp38/bin/python3.8 /onnxruntime_src/tools/ci_build/build.py \ --build_dir /build/2 --cmake_generator Ninja \ --config Debug \ --skip_submodule_sync \ --build_shared_lib \ --parallel \ --skip_tests \ --minimal_build \ --disable_exceptions \ --enable_training_ops workingDirectory: $(Build.SourcesDirectory) - task: CmdLine@2 displayName: 3a. Build minimal onnxruntime [exceptions ENABLED, type reduction DISABLED, custom ops ENABLED] and run tests inputs: script: | docker run --rm \ --volume $(Build.SourcesDirectory):/onnxruntime_src \ --volume $(Build.BinariesDirectory):/build \ --volume $(test_data_directory):/home/onnxruntimedev/.test_data \ -e ALLOW_RELEASED_ONNX_OPSET_ONLY=1 \ -e NIGHTLY_BUILD \ -e BUILD_BUILDNUMBER \ onnxruntimecpubuild \ /bin/bash /onnxruntime_src/tools/ci_build/github/linux/ort_minimal/build_minimal_ort_and_run_tests.sh \ --build-directory /build/3a \ --reduced-ops-config /home/onnxruntimedev/.test_data/required_ops.ort_models.config \ --enable-custom-ops workingDirectory: $(Build.SourcesDirectory) - task: CmdLine@2 displayName: 3b. Build minimal onnxruntime [exceptions ENABLED, type reduction ENABLED] and run tests inputs: script: | docker run --rm \ --volume $(Build.SourcesDirectory):/onnxruntime_src \ --volume $(Build.BinariesDirectory):/build \ --volume $(test_data_directory):/home/onnxruntimedev/.test_data \ -e ALLOW_RELEASED_ONNX_OPSET_ONLY=1 \ -e NIGHTLY_BUILD \ -e BUILD_BUILDNUMBER \ onnxruntimecpubuild \ /bin/bash /onnxruntime_src/tools/ci_build/github/linux/ort_minimal/build_minimal_ort_and_run_tests.sh \ --build-directory /build/3b \ --reduced-ops-config /home/onnxruntimedev/.test_data/required_ops_and_types.ort_models.config \ --enable-type-reduction workingDirectory: $(Build.SourcesDirectory) - task: CmdLine@2 displayName: 4. Build minimal onnxruntime [exceptions ENABLED, type reduction ENABLED (globally allowed types)] and run tests inputs: script: | printf "%s\n%s\n" \ "!globally_allowed_types;bool,float,int8_t,uint8_t" \ "!no_ops_specified_means_all_ops_are_required" \ > $(test_data_directory)/globally_allowed_types.config && \ docker run --rm \ --volume $(Build.SourcesDirectory):/onnxruntime_src \ --volume $(Build.BinariesDirectory):/build \ --volume $(test_data_directory):/home/onnxruntimedev/.test_data \ -e ALLOW_RELEASED_ONNX_OPSET_ONLY=1 \ -e NIGHTLY_BUILD \ -e BUILD_BUILDNUMBER \ onnxruntimecpubuild \ /bin/bash /onnxruntime_src/tools/ci_build/github/linux/ort_minimal/build_minimal_ort_and_run_tests.sh \ --build-directory /build/4 \ --reduced-ops-config /home/onnxruntimedev/.test_data/globally_allowed_types.config \ --enable-type-reduction \ --skip-model-tests workingDirectory: $(Build.SourcesDirectory) - task: CmdLine@2 displayName: 5. Build extended minimal onnxruntime and run tests inputs: script: | docker run --rm \ --volume $(Build.SourcesDirectory):/onnxruntime_src \ --volume $(Build.BinariesDirectory):/build \ -e ALLOW_RELEASED_ONNX_OPSET_ONLY=1 \ -e NIGHTLY_BUILD \ -e BUILD_BUILDNUMBER \ onnxruntimecpubuild \ /opt/python/cp38-cp38/bin/python3.8 /onnxruntime_src/tools/ci_build/build.py \ --build_dir /build/5 --cmake_generator Ninja \ --config Debug \ --skip_submodule_sync \ --build_shared_lib \ --parallel \ --minimal_build extended workingDirectory: $(Build.SourcesDirectory) - task: CmdLine@2 displayName: 6a. Regular build with python and all optional features disabled. inputs: script: | docker run --rm \ --volume $(Build.SourcesDirectory):/onnxruntime_src \ --volume $(Build.BinariesDirectory):/build \ --volume $(test_data_directory):/home/onnxruntimedev/.test_data \ -e ALLOW_RELEASED_ONNX_OPSET_ONLY=1 \ -e NIGHTLY_BUILD \ -e BUILD_BUILDNUMBER \ onnxruntimecpubuild \ /opt/python/cp38-cp38/bin/python3.8 /onnxruntime_src/tools/ci_build/build.py \ --build_dir /build/6a \ --cmake_generator Ninja \ --config MinSizeRel \ --skip_submodule_sync \ --build_shared_lib \ --build_wheel \ --parallel \ --skip_tests \ --disable_ml_ops \ --include_ops_by_config /home/onnxruntimedev/.test_data/include_no_operators.config \ --cmake_extra_defines onnxruntime_DISABLE_SPARSE_TENSORS=ON \ onnxruntime_DISABLE_OPTIONAL_TYPE=ON \ onnxruntime_BUILD_UNIT_TESTS=OFF workingDirectory: $(Build.SourcesDirectory) - task: CmdLine@2 displayName: 6b. Minimal build with all optional features disabled. inputs: script: | docker run --rm \ --volume $(Build.SourcesDirectory):/onnxruntime_src \ --volume $(Build.BinariesDirectory):/build \ --volume $(test_data_directory):/home/onnxruntimedev/.test_data \ -e ALLOW_RELEASED_ONNX_OPSET_ONLY=1 \ -e NIGHTLY_BUILD \ -e BUILD_BUILDNUMBER \ onnxruntimecpubuild \ /opt/python/cp38-cp38/bin/python3.8 /onnxruntime_src/tools/ci_build/build.py \ --build_dir /build/6b \ --cmake_generator Ninja \ --config MinSizeRel \ --skip_submodule_sync \ --build_shared_lib \ --parallel \ --minimal_build \ --disable_exceptions \ --disable_ml_ops \ --skip_tests \ --enable_reduced_operator_type_support \ --include_ops_by_config /home/onnxruntimedev/.test_data/include_no_operators.config \ --cmake_extra_defines onnxruntime_DISABLE_SPARSE_TENSORS=ON \ onnxruntime_DISABLE_OPTIONAL_TYPE=ON \ onnxruntime_BUILD_UNIT_TESTS=OFF workingDirectory: $(Build.SourcesDirectory) - task: CmdLine@2 displayName: 6c. Extended minimal build with all optional features disabled. inputs: script: | docker run --rm \ --volume $(Build.SourcesDirectory):/onnxruntime_src \ --volume $(Build.BinariesDirectory):/build \ --volume $(test_data_directory):/home/onnxruntimedev/.test_data \ -e ALLOW_RELEASED_ONNX_OPSET_ONLY=1 \ -e NIGHTLY_BUILD \ -e BUILD_BUILDNUMBER \ onnxruntimecpubuild \ /opt/python/cp38-cp38/bin/python3.8 /onnxruntime_src/tools/ci_build/build.py \ --build_dir /build/6c \ --cmake_generator Ninja \ --config MinSizeRel \ --skip_submodule_sync \ --build_shared_lib \ --parallel \ --minimal_build extended \ --disable_exceptions \ --disable_ml_ops \ --skip_tests \ --enable_reduced_operator_type_support \ --include_ops_by_config /home/onnxruntimedev/.test_data/include_no_operators.config \ --cmake_extra_defines onnxruntime_DISABLE_SPARSE_TENSORS=ON \ onnxruntime_DISABLE_OPTIONAL_TYPE=ON \ onnxruntime_BUILD_UNIT_TESTS=OFF workingDirectory: $(Build.SourcesDirectory) - task: CmdLine@2 displayName: 7. Extended minimal build with NNAPI EP for Android(arm64-v8a) and skip tests. inputs: script: | NDK_HOME=$(realpath $ANDROID_NDK_HOME) docker run --rm \ --volume $(Build.SourcesDirectory):/onnxruntime_src \ --volume $(Build.BinariesDirectory):/build \ --volume $ANDROID_HOME:/android_home \ --volume $NDK_HOME:/ndk_home \ -e ALLOW_RELEASED_ONNX_OPSET_ONLY=1 \ -e NIGHTLY_BUILD \ onnxruntimecpubuild \ /opt/python/cp38-cp38/bin/python3.8 /onnxruntime_src/tools/ci_build/build.py \ --build_dir /build/7 \ --cmake_generator Ninja \ --config MinSizeRel \ --skip_submodule_sync \ --parallel \ --android \ --android_sdk_path /android_home \ --android_ndk_path /ndk_home \ --android_abi=arm64-v8a \ --android_api=29 \ --use_nnapi \ --minimal_build extended \ --build_shared_lib \ --disable_ml_ops \ --disable_exceptions \ --skip_tests --path_to_protoc_exe /usr/bin/protoc workingDirectory: $(Build.SourcesDirectory) - template: templates/clean-agent-build-directory-step.yml