From 31fd812acf95f7d3749da27a6f53383a59ca109d Mon Sep 17 00:00:00 2001 From: powderluv Date: Thu, 21 Jul 2022 14:16:03 -0700 Subject: [PATCH] Add linux and macOS source builds in CI (#1070) This enables building Pytorch from source in the CI. The build should mostly hit the ccache. Release builds will follow once we have some runtime on the CI. --- .github/actions/setup-build/action.yml | 3 +- .github/workflows/buildAndTest.yml | 98 +++++++++++++++++++ .github/workflows/buildRelease.yml | 2 +- build_tools/build_libtorch.sh | 40 ++++++-- python/CMakeLists.txt | 1 + .../jit_ir/ivalue_import/quantization.py | 1 + 6 files changed, 133 insertions(+), 12 deletions(-) diff --git a/.github/actions/setup-build/action.yml b/.github/actions/setup-build/action.yml index b0e7f3c6c..6402443b9 100644 --- a/.github/actions/setup-build/action.yml +++ b/.github/actions/setup-build/action.yml @@ -31,6 +31,7 @@ runs: run: echo "::set-output name=hash::$(md5sum $(git submodule status))" shell: bash - name: Ccache for C++ compilation - uses: hendrikmuhs/ccache-action@4687d037e4d7cf725512d9b819137a3af34d39b3 + uses: hendrikmuhs/ccache-action@85bd285251b831e5a761d26e3dbfdbccbca1b23f with: key: ${{ runner.os }}-clangreleaseasserts-${{ steps.get-submodule-hash.outputs.hash }}${{ inputs.cache-suffix }} + max-size: 2G diff --git a/.github/workflows/buildAndTest.yml b/.github/workflows/buildAndTest.yml index bff0da7bc..4a4ac7b6b 100644 --- a/.github/workflows/buildAndTest.yml +++ b/.github/workflows/buildAndTest.yml @@ -103,3 +103,101 @@ jobs: # Don't run python tests, as check-torch-mlir-all already checks # what we want. + + build-from-src: + name: Build and Test Source Build (Release Asserts) + runs-on: ubuntu-20.04 + steps: + - name: Get torch-mlir + uses: actions/checkout@v2 + with: + submodules: 'true' + - uses: ./.github/actions/setup-build + with: + cache-suffix: 'src-linux' + - name: Build and Test torch-mlir (Assert) + run: | + cd $GITHUB_WORKSPACE + mkdir build + cd build + cmake $GITHUB_WORKSPACE/externals/llvm-project/llvm -GNinja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_LINKER=lld \ + -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ + -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ \ + -DPython3_EXECUTABLE=$(which python) \ + -DLLVM_ENABLE_ASSERTIONS=ON \ + -DLLVM_ENABLE_PROJECTS=mlir \ + -DLLVM_EXTERNAL_PROJECTS="torch-mlir;torch-mlir-dialects" \ + -DLLVM_EXTERNAL_TORCH_MLIR_SOURCE_DIR="$GITHUB_WORKSPACE" \ + -DLLVM_EXTERNAL_TORCH_MLIR_DIALECTS_SOURCE_DIR="${GITHUB_WORKSPACE}/external/llvm-external-projects/torch-mlir-dialects" \ + -DTORCH_MLIR_ENABLE_MHLO=ON \ + -DMLIR_ENABLE_BINDINGS_PYTHON=ON \ + -DTORCH_MLIR_USE_INSTALLED_PYTORCH=OFF \ + -DLLVM_TARGETS_TO_BUILD=host + ninja check-torch-mlir-all + - name: RefBackend - TorchScript end-to-end tests + run: | + cd $GITHUB_WORKSPACE + export PYTHONPATH="$GITHUB_WORKSPACE/build/tools/torch-mlir/python_packages/torch_mlir" + python -m e2e_testing.torchscript.main --config=refbackend -v + - name: EagerMode - TorchScript end-to-end tests + run: | + cd $GITHUB_WORKSPACE + export PYTHONPATH="$GITHUB_WORKSPACE/build/tools/torch-mlir/python_packages/torch_mlir" + python -m e2e_testing.torchscript.main --config=eager_mode -v + - name: TOSA backend - TorchScript end-to-end tests + run: | + cd $GITHUB_WORKSPACE + export PYTHONPATH="$GITHUB_WORKSPACE/build/tools/torch-mlir/python_packages/torch_mlir" + python -m e2e_testing.torchscript.main --config=tosa -v + + macOS-x86_64: + name: Build and Test macOS(x86_64) Build (Release Asserts) + runs-on: macos-latest + steps: + - name: Get torch-mlir + uses: actions/checkout@v2 + with: + submodules: 'true' + - uses: ./.github/actions/setup-build + with: + cache-suffix: '-macos-x86_64' + - name: Build and Test torch-mlir (Assert) + run: | + cd $GITHUB_WORKSPACE + mkdir build + cd build + cmake $GITHUB_WORKSPACE/externals/llvm-project/llvm -GNinja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_LINKER=lld \ + -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ + -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ \ + -DPython3_EXECUTABLE=$(which python) \ + -DLLVM_ENABLE_ASSERTIONS=ON \ + -DLLVM_ENABLE_PROJECTS=mlir \ + -DLLVM_EXTERNAL_PROJECTS="torch-mlir;torch-mlir-dialects" \ + -DLLVM_EXTERNAL_TORCH_MLIR_SOURCE_DIR="$GITHUB_WORKSPACE" \ + -DLLVM_EXTERNAL_TORCH_MLIR_DIALECTS_SOURCE_DIR="${GITHUB_WORKSPACE}/external/llvm-external-projects/torch-mlir-dialects" \ + -DMLIR_ENABLE_BINDINGS_PYTHON=ON \ + -DTORCH_MLIR_ENABLE_MHLO=ON \ + -DTORCH_MLIR_USE_INSTALLED_PYTORCH=OFF \ + -DCMAKE_OSX_ARCHITECTURES=x86_64 \ + -DMACOSX_DEPLOYMENT_TARGET=10.15 \ + -DLLVM_TARGETS_TO_BUILD=host + ninja check-torch-mlir-all + - name: RefBackend - TorchScript end-to-end tests + run: | + cd $GITHUB_WORKSPACE + export PYTHONPATH="$GITHUB_WORKSPACE/build/tools/torch-mlir/python_packages/torch_mlir" + python -m e2e_testing.torchscript.main --config=refbackend -v + - name: EagerMode - TorchScript end-to-end tests + run: | + cd $GITHUB_WORKSPACE + export PYTHONPATH="$GITHUB_WORKSPACE/build/tools/torch-mlir/python_packages/torch_mlir" + python -m e2e_testing.torchscript.main --config=eager_mode -v + - name: TOSA backend - TorchScript end-to-end tests + run: | + cd $GITHUB_WORKSPACE + export PYTHONPATH="$GITHUB_WORKSPACE/build/tools/torch-mlir/python_packages/torch_mlir" + python -m e2e_testing.torchscript.main --config=tosa -v diff --git a/.github/workflows/buildRelease.yml b/.github/workflows/buildRelease.yml index 7eb2c9301..eb493699d 100644 --- a/.github/workflows/buildRelease.yml +++ b/.github/workflows/buildRelease.yml @@ -54,7 +54,7 @@ jobs: build_macos: name: MacOS Build - runs-on: macos-latest + runs-on: macos-12 steps: - name: Get torch-mlir uses: actions/checkout@v2 diff --git a/build_tools/build_libtorch.sh b/build_tools/build_libtorch.sh index aa859eeaf..349088abf 100755 --- a/build_tools/build_libtorch.sh +++ b/build_tools/build_libtorch.sh @@ -9,7 +9,8 @@ PYTORCH_REPO="${PYTORCH_REPO:-pytorch/pytorch}" PYTORCH_BRANCH="${PYTORCH_BRANCH:-master}" PT_C_COMPILER="${PT_C_COMPILER:-clang}" PT_CXX_COMPILER="${PT_CXX_COMPILER:-clang++}" -CMAKE_OSX_ARCHITECTURES="${CMAKE_OSX_ARCHITECTURES:-arm64;x86_64}" +CMAKE_OSX_ARCHITECTURES="${CMAKE_OSX_ARCHITECTURES:-x86_64}" +MACOSX_DEPLOYMENT_TARGET="${MACOSX_DEPLOYMENT_TARGET:-12.0}" WHEELHOUSE="${WHEELHOUSE:-$SRC_ROOT/build_tools/python_deploy/wheelhouse}" PYTHON_BIN="${TORCH_MLIR_PYTHON_VERSION:-python3}" PIP_BIN="${TORCH_MLIR_PIP_VERSION:-pip3}" @@ -25,8 +26,11 @@ echo "SRC_ROOT=${SRC_ROOT}" echo "PYTORCH_ROOT=${PYTORCH_ROOT}" echo "PYTORCH_REPO=${PYTORCH_REPO}" echo "PYTORCH_BRANCH=${PYTORCH_BRANCH}" +echo "MACOSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET}" echo "CMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}" + export CMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} +export MACOSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET} export CMAKE_C_COMPILER_LAUNCHER=${CMAKE_C_COMPILER_LAUNCHER} export CMAKE_CXX_COMPILER_LAUNCHER=${CMAKE_CXX_COMPILER_LAUNCHER} @@ -46,11 +50,7 @@ checkout_pytorch() { cd "$PYTORCH_ROOT" git reset --hard HEAD git clean -df - for dep in protobuf pocketfft cpuinfo FP16 psimd fmt sleef pybind11 onnx flatbuffers foxi; do - git submodule update --init --depth 1 -- third_party/$dep - done - # setup.py will try to re-fetch - sed -i.bak -E 's/^[[:space:]]+check_submodules()/#check_submodules()/g' setup.py + git submodule update --init --depth 1 --recursive } build_pytorch() { @@ -68,9 +68,14 @@ build_pytorch() { fi BUILD_SHARED_LIBS=ON \ + BUILD_CAFFE2_OPS=OFF \ + INTERN_BUILD_ATEN_OPS=OFF \ + ATEN_NO_TEST=OFF \ + USE_LITE_INTERPRETER_PROFILER=OFF \ BUILD_TEST=OFF \ GLIBCXX_USE_CXX11_ABI=1 \ CMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} \ + MACOSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET} \ INTERN_BUILD_ATEN_OPS=OFF \ INTERN_DISABLE_ONNX=ON \ INTERN_USE_EIGEN_BLAS=ON \ @@ -78,11 +83,12 @@ build_pytorch() { ONNX_ML=OFF \ USE_BREAKPAD=OFF \ USE_CUDA=OFF \ + USE_ITT=OFF \ USE_DISTRIBUTED=OFF \ USE_EIGEN_FOR_BLAS=OFF \ - USE_FBGEMM=OFF \ + USE_FBGEMM=ON \ USE_GLOO=OFF \ - USE_KINETO=OFF \ + USE_KINETO=ON \ USE_MKL=OFF \ USE_MKLDNN=OFF \ USE_MPS=OFF \ @@ -90,7 +96,7 @@ build_pytorch() { USE_NNPACK=OFF \ USE_OBSERVERS=OFF \ USE_OPENMP=OFF \ - USE_PYTORCH_QNNPACK=OFF \ + USE_PYTORCH_QNNPACK=ON \ USE_QNNPACK=OFF \ USE_XNNPACK=OFF \ ${PYTHON_BIN} setup.py bdist_wheel -d "$WHEELHOUSE" @@ -123,10 +129,24 @@ install_pytorch() { ${PIP_BIN} install --force-reinstall $WHEELHOUSE/* } +unpack_pytorch() { + PYTHON_SITE=`${PYTHON_BIN} -c 'import sysconfig; print(sysconfig.get_paths()["purelib"])'` + pip uninstall torch + echo "wheel unpacking Pytorch..into ${PYTHON_SITE}" + wheel unpack -d "$WHEELHOUSE"/unpack_tmp "$WHEELHOUSE"/*.whl + mv "$WHEELHOUSE"/unpack_tmp/* "$PYTHON_SITE"/ +} + #main echo "Building libtorch from source" checkout_pytorch install_requirements build_pytorch package_pytorch -install_pytorch +if [[ $CMAKE_OSX_ARCHITECTURES = "arm64" ]]; then + echo "${Yellow} Cross compiling for arm64 so unpacking PyTorch wheel for libs${NC}" + unpack_pytorch +else + echo "${Green} Installing the built PyTorch wheel ${NC}" + install_pytorch +fi diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 77a31184c..c74c40a21 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -65,6 +65,7 @@ option(TORCH_MLIR_USE_INSTALLED_PYTORCH "Build from local PyTorch in environment if(TORCH_MLIR_ENABLE_JIT_IR_IMPORTER) if (NOT TORCH_MLIR_USE_INSTALLED_PYTORCH) # Source builds + set(ENV{MACOSX_DEPLOYMENT_TARGET} ${MACOSX_DEPLOYMENT_TARGET}) set(ENV{CMAKE_OSX_ARCHITECTURES} ${CMAKE_OSX_ARCHITECTURES}) set(ENV{CMAKE_C_COMPILER_LAUNCHER} ${CMAKE_C_COMPILER_LAUNCHER}) set(ENV{CMAKE_CXX_COMPILER_LAUNCHER} ${CMAKE_CXX_COMPILER_LAUNCHER}) diff --git a/test/python/importer/jit_ir/ivalue_import/quantization.py b/test/python/importer/jit_ir/ivalue_import/quantization.py index e5c732208..422e6bb70 100644 --- a/test/python/importer/jit_ir/ivalue_import/quantization.py +++ b/test/python/importer/jit_ir/ivalue_import/quantization.py @@ -7,6 +7,7 @@ import typing import torch from torch_mlir.dialects.torch.importer.jit_ir import ModuleBuilder +# UNSUPPORTED: system-darwin # RUN: %PYTHON %s | torch-mlir-opt | FileCheck %s mb = ModuleBuilder()