mirror of https://github.com/llvm/torch-mlir
163 lines
6.0 KiB
YAML
163 lines
6.0 KiB
YAML
name: Build and Test
|
|
|
|
on:
|
|
pull_request:
|
|
branches: [ main ]
|
|
push:
|
|
branches: [ main ]
|
|
workflow_dispatch:
|
|
|
|
# Ensure that only a single job or workflow using the same
|
|
# concurrency group will run at a time. This would cancel
|
|
# any in-progress jobs in the same github workflow and github
|
|
# ref (e.g. refs/heads/main or refs/pull/<pr_number>/merge).
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
|
|
# Provisioned Jobs:
|
|
# ubuntu/docker - x86_64 - llvm in-tree - pytorch binary - build+test # most used dev flow and fastest signal
|
|
# ubuntu/docker - x86_64 - llvm out-of-tree - pytorch source - build+test # most elaborate build
|
|
# macos - arm64 - llvm in-tree - pytorch binary - build only # cross compile, can't test arm64
|
|
jobs:
|
|
build-test:
|
|
continue-on-error: ${{ matrix.torch-version == 'stable' }}
|
|
strategy:
|
|
fail-fast: true
|
|
matrix:
|
|
os-arch: [ubuntu-x86_64, macos-arm64, windows-x86_64]
|
|
llvm-build: [in-tree, out-of-tree]
|
|
torch-binary: [ON, OFF]
|
|
torch-version: [nightly, stable]
|
|
exclude:
|
|
# Exclude llvm in-tree and pytorch source
|
|
- llvm-build: in-tree
|
|
torch-binary: OFF
|
|
# Exclude llvm out-of-tree and pytorch binary
|
|
- llvm-build: out-of-tree
|
|
torch-binary: ON
|
|
# Exclude macos-arm64 and llvm out-of-tree altogether
|
|
- os-arch: macos-arm64
|
|
llvm-build: out-of-tree
|
|
- os-arch: macos-arm64
|
|
torch-version: stable
|
|
- os-arch: windows-x86_64
|
|
llvm-build: out-of-tree
|
|
- os-arch: windows-x86_64
|
|
torch-version: stable
|
|
# For PyTorch stable builds, we don't build PyTorch from source
|
|
- torch-version: stable
|
|
torch-binary: OFF
|
|
include:
|
|
# Specify OS versions
|
|
- os-arch: ubuntu-x86_64
|
|
os: a100
|
|
- os-arch: macos-arm64
|
|
os: macos-latest
|
|
- os-arch: windows-x86_64
|
|
os: windows-latest
|
|
runs-on: ${{ matrix.os }}
|
|
|
|
steps:
|
|
|
|
- name: Prepare workspace
|
|
if: ${{ matrix.os-arch == 'ubuntu-x86_64' }}
|
|
run: |
|
|
# Clear the workspace directory so that we don't run into errors about
|
|
# existing lock files.
|
|
sudo rm -rf $GITHUB_WORKSPACE/*
|
|
|
|
- name: Checkout torch-mlir
|
|
uses: actions/checkout@v3
|
|
with:
|
|
submodules: 'true'
|
|
fetch-depth: 0
|
|
|
|
- name: Fetch PyTorch commit hash
|
|
if: ${{ matrix.os-arch != 'windows-x86_64' }}
|
|
run: |
|
|
PT_HASH="$(cat ${GITHUB_WORKSPACE}/pytorch-hash.txt)"
|
|
echo "PT_HASH=${PT_HASH}" >> ${GITHUB_ENV}
|
|
|
|
- name: Setup ccache
|
|
uses: ./.github/actions/setup-build
|
|
with:
|
|
cache-suffix: 'build-${{ matrix.llvm-build }}-${{ matrix.torch-version }}'
|
|
torch-version: ${{ matrix.torch-version }}
|
|
|
|
- name: Set up Visual Studio shell
|
|
if: ${{ matrix.os-arch == 'windows-x86_64' }}
|
|
uses: egor-tensin/vs-shell@v2
|
|
with:
|
|
arch: x64
|
|
|
|
- name: Try to Restore PyTorch Build Cache
|
|
if: ${{ matrix.torch-binary == 'OFF' }}
|
|
id: cache-pytorch
|
|
uses: actions/cache/restore@v3
|
|
with:
|
|
path: ${{ github.workspace }}/build_tools/python_deploy/wheelhouse
|
|
key: ${{ runner.os }}-pytorch-${{ env.PT_HASH }}
|
|
|
|
- name: Build and Test os-arch='ubuntu-x86_64' llvm-build='${{ matrix.llvm-build }}' torch-binary='${{ matrix.torch-binary }}'
|
|
if: ${{ matrix.os-arch == 'ubuntu-x86_64' }}
|
|
run: |
|
|
cd $GITHUB_WORKSPACE
|
|
TORCH_MLIR_SRC_PYTORCH_BRANCH="$(cat pytorch-hash.txt)" \
|
|
TM_PACKAGES="${{ matrix.llvm-build }}" \
|
|
TM_USE_PYTORCH_BINARY="${{ matrix.torch-binary }}" \
|
|
TM_PYTORCH_INSTALL_WITHOUT_REBUILD="${{ steps.cache-pytorch.outputs.cache-hit }}" \
|
|
TM_TORCH_VERSION="${{ matrix.torch-version }}" \
|
|
./build_tools/python_deploy/build_linux_packages.sh
|
|
|
|
- name: Configure os-arch='macos-arm64' llvm-build='in-tree' torch-binary='${{ matrix.torch-binary }}'
|
|
# cross compile, can't test arm64
|
|
if: ${{ matrix.os-arch == 'macos-arm64' && matrix.llvm-build == 'in-tree' }}
|
|
run: |
|
|
# TODO: Reenable LTC after build on macOS-arm64 is fixed (https://github.com/llvm/torch-mlir/issues/1253)
|
|
cmake -GNinja -Bbuild_arm64 \
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
-DCMAKE_C_COMPILER=clang \
|
|
-DCMAKE_CXX_COMPILER=clang++ \
|
|
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
|
|
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
|
|
-DCMAKE_LINKER=lld \
|
|
-DCMAKE_OSX_ARCHITECTURES=arm64 \
|
|
-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}/externals/llvm-external-projects/torch-mlir-dialects" \
|
|
-DLLVM_TARGETS_TO_BUILD=AArch64 \
|
|
-DLLVM_USE_HOST_TOOLS=ON \
|
|
-DLLVM_ENABLE_ZSTD=OFF \
|
|
-DMLIR_ENABLE_BINDINGS_PYTHON=ON \
|
|
-DTORCH_MLIR_ENABLE_STABLEHLO=OFF \
|
|
-DTORCH_MLIR_ENABLE_LTC=OFF \
|
|
-DTORCH_MLIR_USE_INSTALLED_PYTORCH="${{ matrix.torch-binary }}" \
|
|
-DMACOSX_DEPLOYMENT_TARGET=12.0 \
|
|
-DPython3_EXECUTABLE="$(which python)" \
|
|
$GITHUB_WORKSPACE/externals/llvm-project/llvm
|
|
|
|
- name: Build torch-mlir (cross-compile)
|
|
if: ${{ matrix.os-arch == 'macos-arm64' }}
|
|
run: |
|
|
cmake --build build_arm64
|
|
|
|
- name: Build (Windows)
|
|
if: ${{ matrix.os-arch == 'windows-x86_64' }}
|
|
shell: bash
|
|
run: ./build_tools/python_deploy/build_windows_ci.sh
|
|
|
|
- name: Save PyTorch Build Cache
|
|
if: ${{ github.ref_name == 'main' && matrix.torch-binary == 'OFF' }}
|
|
uses: actions/cache/save@v3
|
|
with:
|
|
path: ${{ github.workspace }}/build_tools/python_deploy/wheelhouse
|
|
key: ${{ runner.os }}-pytorch-${{ env.PT_HASH }}
|
|
|
|
- name: Print ccache statistics
|
|
shell: bash
|
|
run: ccache --show-stats
|