From 49fc502f62c1cbf976477f7a0d1fbf381af8cc32 Mon Sep 17 00:00:00 2001 From: Jeff Fifield Date: Tue, 22 Oct 2024 11:21:02 -0600 Subject: [PATCH] test --- .github/workflows/buildAndTestRyzenAI.yml | 195 +++++++++++++++------- .github/workflows/buildRyzenWheels.yml | 1 + utils/mlir_aie_wheels/setup.py | 1 + 3 files changed, 134 insertions(+), 63 deletions(-) diff --git a/.github/workflows/buildAndTestRyzenAI.yml b/.github/workflows/buildAndTestRyzenAI.yml index 918851e3c6..896c09995e 100644 --- a/.github/workflows/buildAndTestRyzenAI.yml +++ b/.github/workflows/buildAndTestRyzenAI.yml @@ -7,22 +7,7 @@ on: - test-ryzen-ai pull_request: merge_group: - - # Allows you to run this workflow manually from the Actions tab by - # selecting CI and then "Run workflow" menu on the right branch - # and clicking on "launch_tmate_terminal_for_debug". - # Unfortunately this works only for the default branch. - # So you can either - # - change the default branch of the PR on the GitHub repository owning the PR - # and launching in Actions tab; - # - or edit directly the step below which runs tmate and push to the - # PR, ignoring the manual workflow launch. workflow_dispatch: - launch_tmate_terminal_for_debug: - type: boolean - description: 'Run the build with tmate debugging enabled (https://github.com/marketplace/actions/debugging-with-tmate)' - required: false - default: false defaults: run: @@ -39,7 +24,7 @@ env: DEBIAN_FRONTEND: noninteractive XILINXD_LICENSE_FILE: /opt/xilinx/Xilinx.lic VITIS: /opt/ryzen_ai-1.3.0/vitis_aie_essentials - CMAKE_ARGS: | + STATIC_CMAKE_ARGS: | -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ -DCMAKE_C_COMPILER_LAUNCHER=ccache \ -DCMAKE_EXE_LINKER_FLAGS_INIT="-fuse-ld=lld" \ @@ -53,83 +38,167 @@ env: LIT_OPTS: -sv --time-tests -j12 --timeout 600 --show-unsupported --show-excluded jobs: - build-tests: - name: Run Tests on Ryzen AI - runs-on: amd7940hs + build-mlir-aie: + name: Build for Ryzen AI + runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - with: - submodules: "true" - - # Launch an ssh session via a proxy server if there is a need - # for debug. This seems to live for 35 min max - # https://github.com/mxschmitt/action-tmate - - name: Setup tmate session - uses: mxschmitt/action-tmate@v3 - # To run this, launch it manually on the default branch and - # click on "launch_tmate_terminal_for_debug" - if: github.event_name == 'workflow_dispatch' - && inputs.launch_tmate_terminal_for_debug - - - name: Run commands + - name: Free disk space + uses: descriptinc/free-disk-space@main + with: + tool-cache: true + android: true + dotnet: true + haskell: true + large-packages: true + swap-storage: false + + - uses: actions/checkout@v4 + with: + submodules: "true" + + - uses: uraimo/run-on-arch-action@v2.5.0 + name: Build mlir-aie + id: runcmd + with: + distro: none + arch: none + base_image: ghcr.io/xilinx/mlir-aie/ubuntu22-ryzenai-1.3.0ea:1.1 + githubToken: ${{ github.token }} + dockerRunArgs: | + --mac-address ${{ secrets.XILINX_MAC }} + env: | + VITIS: ${{ env.VITIS }} + XILINXD_LICENSE_FILE: ${{ env.XILINXD_LICENSE_FILE }} run: | + python -m venv ${{ github.workspace }}/aie-venv + source ${{ github.workspace }}/aie-venv/bin/activate - pip cache purge - source /opt/xilinx/xrt/setup.sh - python -m venv aie-venv - source aie-venv/bin/activate - pip install -r python/requirements.txt - HOST_MLIR_PYTHON_PACKAGE_PREFIX=aie pip install -r python/requirements_extras.txt - pip install -r python/requirements_ml.txt - pip install jupyter - sed -i.bak 's/OUTPUT_TIMEOUT = 10/OUTPUT_TIMEOUT = 100/g' \ - $(python -c 'import site; print(site.getsitepackages()[0])')/jupyter_client/runapp.py + # this is the inverse of `base64 -w 1000000 Xilinx.lic` + # the -w ("wrap after 1000000 cols") is so that there are no spaces in the XILINX_LIC env var + echo -n "${{ secrets.XILINX_LIC }}" | base64 --decode > $XILINXD_LICENSE_FILE + + echo "Installing vitis_aie_essentials ..." + pushd /opt + ccrypt -d -K ${{ secrets.RYZEN_AI_SW_KEY }} /workspace/vaie.tgz.cpt -c | tar xz + popd + + echo "Installing llvm-aie ..." + pip -q download llvm-aie -f https://github.com/Xilinx/llvm-aie/releases/expanded_assets/nightly + unzip -q llvm_aie*.whl + rm -rf llvm_aie*.whl + export PEANO_INSTALL_DIR=`realpath llvm-aie` VERSION=$(utils/clone-llvm.sh --get-wheel-version) + echo "Installing mlir version $VERSION ..." pip -q download mlir==$VERSION \ -f https://github.com/Xilinx/mlir-aie/releases/expanded_assets/mlir-distro unzip -q mlir-*.whl + rm mlir-*.whl # I have no clue why but the system clock on GHA containers is like 12 hours ahead. # That means wheels have file with time stamps in the future which makes ninja loop # forever when configuring. Set the time to some arbitrary stamp in the past just to be safe. find mlir -exec touch -a -m -t 201108231405.14 {} \; + pip install -r python/requirements.txt + pip install -r python/requirements_ml.txt + HOST_MLIR_PYTHON_PACKAGE_PREFIX=aie pip install -r python/requirements_extras.txt + mkdir build pushd build export PATH=$VITIS/bin:$VITIS/aietools/bin:$PATH - cmake .. -G Ninja \ + cmake ${{ github.workspace }} -G Ninja \ -DPython3_EXECUTABLE=$(which python) \ -DLLVM_EXTERNAL_LIT=$(which lit) \ - -DCMAKE_INSTALL_PREFIX=$PWD/../mlir_aie \ - -DCMAKE_MODULE_PATH=$PWD/../cmake/modulesXilinx \ - -DMLIR_DIR=$PWD/../mlir/lib/cmake/mlir \ - $CMAKE_ARGS + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=${{ github.workspace }}/build/install \ + -DCMAKE_MODULE_PATH=${{ github.workspace }}/cmake/modulesXilinx \ + -DMLIR_DIR=${{ github.workspace }}/mlir/lib/cmake/mlir \ + -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ + -DCMAKE_C_COMPILER_LAUNCHER=ccache \ + -DCMAKE_EXE_LINKER_FLAGS_INIT="-fuse-ld=lld" \ + -DCMAKE_MODULE_LINKER_FLAGS_INIT="-fuse-ld=lld" \ + -DCMAKE_SHARED_LINKER_FLAGS_INIT="-fuse-ld=lld" \ + -DXRT_ROOT=/opt/xilinx/xrt \ + -DPEANO_INSTALL_DIR=$PEANO_INSTALL_DIR \ + -DAIE_ENABLE_PYTHON_PASSES=OFF \ + -DAIE_ENABLE_XRT_PYTHON_BINDINGS=ON \ + -DAIE_INCLUDE_INTEGRATION_TESTS=OFF \ + -DAIE_VITIS_COMPONENTS=AIE2 ninja install - ninja check-aie - + chown -R github.github * popd + tar cf build.tar build + + - name: Upload mlir_aie + uses: actions/upload-artifact@v4 + with: + name: mlir_aie + path: build.tar + + test-mlir-aie: + name: Test on Ryzen AI + runs-on: amd7940hs + needs: build-mlir-aie + strategy: + fail-fast: false + matrix: + build_type: [ llvm-aie, xchesscc ] + steps: + + - uses: actions/checkout@v4 + with: + submodules: "true" + + - uses: actions/download-artifact@v4 + with: + name: mlir_aie + path: . + + - name: Run mlir-aie tests + run: | + export PATH=$VITIS/bin:$VITIS/aietools/bin:$PATH + export PEANO_INSTALL_DIR= + if [ "${{ matrix.build_type }}" == "llvm-aie" ]; then + echo "Installing peano ..." + pip -q download llvm-aie -f https://github.com/Xilinx/llvm-aie/releases/expanded_assets/nightly + unzip -q llvm_aie*.whl + rm -rf llvm_aie*.whl + export PEANO_INSTALL_DIR=`realpath llvm-aie` + fi + + python -m venv aie-venv + source aie-venv/bin/activate + + pip install -r python/requirements.txt + pip install -r python/requirements_ml.txt + HOST_MLIR_PYTHON_PACKAGE_PREFIX=aie pip install -r python/requirements_extras.txt + + VERSION=$(utils/clone-llvm.sh --get-wheel-version) + pip -q download mlir==$VERSION \ + -f https://github.com/Xilinx/mlir-aie/releases/expanded_assets/mlir-distro + unzip -q mlir-*.whl + rm mlir-*.whl + # I have no clue why but the system clock on GHA containers is like 12 hours ahead. + # That means wheels have file with time stamps in the future which makes ninja loop + # forever when configuring. Set the time to some arbitrary stamp in the past just to be safe. + find mlir -exec touch -a -m -t 201108231405.14 {} \; + + tar xf build.tar + rm build.tar + cd build + lit ${{ env.LIT_OPTS }} test build-quick-setup: - name: Run Examples on Ryzen AI + name: Test Examples on Ryzen AI runs-on: amd7940hs steps: - uses: actions/checkout@v4 with: submodules: "true" - # Launch an ssh session via a proxy server if there is a need - # for debug. This seems to live for 35 min max - # https://github.com/mxschmitt/action-tmate - - name: Setup tmate session - uses: mxschmitt/action-tmate@v3 - # To run this, launch it manually on the default branch and - # click on "launch_tmate_terminal_for_debug" - if: github.event_name == 'workflow_dispatch' - && inputs.launch_tmate_terminal_for_debug - - - name: Run commands + - name: Build and Test mlir-aie run: | pip cache purge diff --git a/.github/workflows/buildRyzenWheels.yml b/.github/workflows/buildRyzenWheels.yml index fe47854e3b..970ad6bbd2 100644 --- a/.github/workflows/buildRyzenWheels.yml +++ b/.github/workflows/buildRyzenWheels.yml @@ -70,6 +70,7 @@ jobs: export CMAKE_MODULE_PATH=$PWD/cmake/modulesXilinx export XRT_ROOT=/opt/xilinx/xrt export AIE_PROJECT_COMMIT=$(git rev-parse --short HEAD) + export AIE_VITIS_COMPONENTS=AIE2 export DATETIME=$(date +"%Y%m%d%H") pushd utils/mlir_aie_wheels diff --git a/utils/mlir_aie_wheels/setup.py b/utils/mlir_aie_wheels/setup.py index c42f09d213..bb7254a576 100644 --- a/utils/mlir_aie_wheels/setup.py +++ b/utils/mlir_aie_wheels/setup.py @@ -142,6 +142,7 @@ def build_extension(self, ext: CMakeExtension) -> None: "-DCMAKE_PLATFORM_NO_VERSIONED_SONAME=ON", "-DLLVM_CCACHE_BUILD=ON", f"-DLLVM_ENABLE_RTTI={os.getenv('ENABLE_RTTI', 'ON')}", + f"-DAIE_VITIS_COMPONENTS={os.getenv('AIE_VITIS_COMPONENTS', 'AIE2')}" "-DAIE_ENABLE_BINDINGS_PYTHON=ON", "-DAIE_ENABLE_PYTHON_PASSES=OFF", "-DMLIR_DETECT_PYTHON_ENV_PRIME_SEARCH=ON",