Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build and Test | ||
on: | ||
workflow_dispatch: | ||
workflow_call: | ||
jobs: | ||
build-image: | ||
runs-on: | ||
- in-service | ||
- builder | ||
outputs: | ||
docker-image: ${{ steps.build.outputs.docker-image }} | ||
steps: | ||
- name: Fix permissions | ||
shell: bash | ||
run: sudo chown ubuntu:ubuntu -R $(pwd) | ||
- uses: actions/checkout@v4 | ||
with: | ||
fetch-depth: 0 | ||
- name: Log in to GitHub Container Registry | ||
uses: docker/login-action@v3 | ||
with: | ||
registry: ghcr.io | ||
username: ${{ github.repository_owner }} | ||
password: ${{ secrets.GITHUB_TOKEN }} | ||
- name: Build Docker images and output the image name | ||
id: build | ||
shell: bash | ||
run: | | ||
# Output the image name | ||
set pipefail | ||
.github/build-docker-images.sh | tee docker.log | ||
DOCKER_CI_IMAGE=$(tail -n 1 docker.log) | ||
echo "DOCKER_CI_IMAGE $DOCKER_CI_IMAGE" | ||
echo "docker-image=$DOCKER_CI_IMAGE" >> "$GITHUB_OUTPUT" | ||
lint: | ||
needs: build-image | ||
timeout-minutes: 120 | ||
strategy: | ||
fail-fast: false | ||
name: Lint (clang-tidy) | ||
runs-on: ubuntu-latest | ||
container: | ||
image: ${{ needs.build-image.outputs.docker-image }} | ||
steps: | ||
- uses: actions/checkout@v4 | ||
with: | ||
fetch-depth: 0 | ||
- name: Set reusable strings | ||
id: strings | ||
shell: bash | ||
run: | | ||
echo "work-dir=$(pwd)" >> "$GITHUB_OUTPUT" | ||
echo "build-output-dir=$(pwd)/build" >> "$GITHUB_OUTPUT" | ||
echo "install-output-dir=$(pwd)/install" >> "$GITHUB_OUTPUT" | ||
- name: Git safe dir | ||
run: git config --global --add safe.directory ${{ steps.strings.outputs.work-dir }} | ||
- name: Configure CMake | ||
shell: bash | ||
run: | | ||
source env/activate | ||
cmake -G Ninja \ | ||
-B ${{ steps.strings.outputs.build-output-dir }} \ | ||
-DCMAKE_CXX_COMPILER=clang++-17 \ | ||
-DCMAKE_C_COMPILER=clang-17 \ | ||
-DCMAKE_BUILD_TYPE=Release \ | ||
-DCMAKE_INSTALL_PREFIX=${{ steps.strings.outputs.install-output-dir }} \ | ||
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ | ||
-DTTMLIR_ENABLE_RUNTIME=ON \ | ||
-DTTMLIR_ENABLE_RUNTIME_TESTS=ON \ | ||
-DTTMLIR_ENABLE_STABLEHLO=ON \ | ||
-DTTMLIR_ENABLE_OPMODEL=ON \ | ||
-S ${{ steps.strings.outputs.work-dir }} | ||
- name: Lint | ||
id: lint | ||
shell: bash | ||
run: | | ||
source env/activate | ||
cmake --build ${{ steps.strings.outputs.build-output-dir }} -- clang-tidy | ||
build-ttmlir: | ||
needs: build-image | ||
timeout-minutes: 120 | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
build: [ | ||
{runs-on: ubuntu-latest, enable_perf: OFF, enable_op_model: OFF, name: "run", ttrt_flags: "", options: "", volumes: ""}, | ||
{runs-on: ubuntu-latest, enable_perf: ON, enable_op_model: OFF, name: "perf", ttrt_flags: "", options: "", volumes: ""}, | ||
{runs-on: n300, enable_perf: OFF, enable_op_model: ON, name: "op_model" , ttrt_flags: "", options: "--device /dev/tenstorrent/0", volumes: ["/dev/hugepages:/dev/hugepages", "/dev/hugepages-1G:/dev/hugepages-1G", "/etc/udev/rules.d:/etc/udev/rules.d", "/lib/modules:/lib/modules", "/opt/tt_metal_infra/provisioning/provisioning_env:/opt/tt_metal_infra/provisioning/provisioning_env"]}, | ||
] | ||
name: Build tt-mlir | ||
runs-on: ${{ matrix.build.runs-on }} | ||
container: | ||
image: ${{ needs.build-image.outputs.docker-image }} | ||
if: matrix.build.enable_op_model == 'OFF' | ||
container: | ||
image: ${{ needs.build-image.outputs.docker-image }} | ||
options: ${{ matrix.build.options }} | ||
volumes: | ||
<<: * ${{ matrix.build.options.volumes }} | ||
steps: | ||
- uses: actions/checkout@v4 | ||
with: | ||
fetch-depth: 0 | ||
- name: Set reusable strings | ||
id: strings | ||
shell: bash | ||
env: | ||
job-name: "Build tt-mlir (${{ matrix.build.runs-on }}, ${{ matrix.build.enable_perf }}, ${{ matrix.build.enable_op_model }}, ${{ matrix.build.name }})" | ||
run: | | ||
echo "work-dir=$(pwd)" >> "$GITHUB_OUTPUT" | ||
echo "build-output-dir=$(pwd)/build" >> "$GITHUB_OUTPUT" | ||
echo "install-output-dir=$(pwd)/install" >> "$GITHUB_OUTPUT" | ||
# Github job context unfortunately doesn't contain job_id, this is the workaround how to fetch it using GH API | ||
echo "Expected job name: ${{ env.job-name }}" | ||
JOB_ID=$(curl -s -H "Authorization: token ${{ secrets.GH_TOKEN }}" \ | ||
"https://api.github.com/repos/${{ github.repository }}/actions/runs/${{ github.run_id }}/attempts/${{ github.run_attempt }}/jobs" | \ | ||
jq -r '.jobs[] | select(.name | contains("${{ env.job-name }}")) | .id ') | ||
echo "Current job id: $JOB_ID" | ||
echo "job-id=$JOB_ID" >> "$GITHUB_OUTPUT" | ||
echo "test_report_path=report_$JOB_ID.xml" >> "$GITHUB_OUTPUT" | ||
- name: Git safe dir | ||
run: git config --global --add safe.directory ${{ steps.strings.outputs.work-dir }} | ||
- name: ccache | ||
uses: hendrikmuhs/[email protected] | ||
with: | ||
create-symlink: true | ||
key: ${{ matrix.build.runs-on }}-run-ON-perf-${{ matrix.build.enable_perf }}-op_model-${{ matrix.build.enable_op_model }}-${{ env.SDK_VERSION }} | ||
# Build project | ||
- name: Configure CMake | ||
shell: bash | ||
run: | | ||
source env/activate | ||
cmake -G Ninja \ | ||
-B ${{ steps.strings.outputs.build-output-dir }} \ | ||
-DCMAKE_CXX_COMPILER=clang++-17 \ | ||
-DCMAKE_C_COMPILER=clang-17 \ | ||
-DCMAKE_BUILD_TYPE=Release \ | ||
-DCMAKE_INSTALL_PREFIX=${{ steps.strings.outputs.install-output-dir }} \ | ||
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ | ||
-DTTMLIR_ENABLE_RUNTIME=ON \ | ||
-DTTMLIR_ENABLE_RUNTIME_TESTS=ON \ | ||
-DTT_RUNTIME_ENABLE_PERF_TRACE=${{ matrix.build.enable_perf }} \ | ||
-DTTMLIR_ENABLE_STABLEHLO=ON \ | ||
-DTTMLIR_ENABLE_OPMODEL=${{ matrix.build.enable_op_model }} \ | ||
-S ${{ steps.strings.outputs.work-dir }} | ||
- name: Build | ||
shell: bash | ||
run: | | ||
source env/activate | ||
ls /dev/ | ||
ls /dev/tenstorrent/ | ||
export TT_METAL_HOME=$(pwd)/third_party/tt-metal/src/tt-metal | ||
echo TT_METAL_HOME=$TT_METAL_HOME | ||
export ARCH_NAME=wormhole_b0 | ||
echo ARCH_NAME=$ARCH_NAME | ||
cmake --build ${{ steps.strings.outputs.build-output-dir }} | ||
cmake --install ${{ steps.strings.outputs.build-output-dir }} --component Test | ||
- name: Unique-ify clang-tidy fixes | ||
shell: bash | ||
if: failure() && steps.lint.outcome == 'failure' | ||
run: | | ||
source env/activate | ||
python tools/scripts/filter-clang-tidy-fixes.py ${{ steps.strings.outputs.build-output-dir }}/clang-tidy-fixes.yaml | ||
- name: Clang-tidy PR Comments | ||
uses: platisd/clang-tidy-pr-comments@a8811fa17cd6bd02c52a3791b44f9840777e396a | ||
if: failure() && steps.lint.outcome == 'failure' | ||
with: | ||
# The GitHub token (or a personal access token) | ||
github_token: ${{ secrets.GITHUB_TOKEN }} | ||
# The path to the clang-tidy fixes generated above | ||
clang_tidy_fixes: ${{ steps.strings.outputs.build-output-dir }}/clang-tidy-fixes.yaml | ||
# Optionally set to true if you want the Action to request | ||
# changes in case warnings are found | ||
request_changes: false | ||
# Optionally set the number of comments per review | ||
# to avoid GitHub API timeouts for heavily loaded | ||
# pull requests | ||
suggestions_per_comment: 10 | ||
python_path: "python3" | ||
- name: Run Op Model Tests | ||
shell: bash | ||
if: matrix.build.enable_op_model == 'ON' | ||
run: | | ||
source env/activate | ||
# export TT_METAL_HOME=$(pwd)/third_party/tt-metal/src/tt-metal | ||
echo TT_METAL_HOME=$TT_METAL_HOME | ||
# export ARCH_NAME=wormhole_b0 | ||
echo ARCH_NAME=$ARCH_NAME | ||
ls $TT_METAL_HOME/tt_metal/soc_descriptors/ | ||
ls /dev/tenstorrent/ | ||
echo "TestConversion" | ||
${{ steps.strings.outputs.build-output-dir }}/test/unittests/OpModel/TTNN/Conversion/TestConversion | ||
echo "TestOpModelLib" | ||
${{ steps.strings.outputs.build-output-dir }}/test/unittests/OpModel/TTNN/Lib/TestOpModelLib | ||
echo "TestOpModelInterface" | ||
${{ steps.strings.outputs.build-output-dir }}/test/unittests/OpModel/TTNN/Op/TestOpModelInterface | ||
- name: Run Test | ||
shell: bash | ||
run: | | ||
source env/activate | ||
export TT_METAL_HOME=$(pwd)/third_party/tt-metal/src/tt-metal | ||
echo TT_METAL_HOME=$TT_METAL_HOME | ||
export ARCH_NAME=wormhole_b0 | ||
echo ARCH_NAME=$ARCH_NAME | ||
cmake --build ${{ steps.strings.outputs.build-output-dir }} -- check-ttmlir | ||
cp build/test/report.xml ${{ steps.strings.outputs.test_report_path }} | ||
- name: Upload Test Report | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: test-reports-${{ matrix.build.runs-on }}-perf-${{ matrix.build.enable_perf }}-op_model-${{ matrix.build.enable_op_model }} | ||
path: ${{ steps.strings.outputs.test_report_path }} | ||
- name: Show Test Report | ||
uses: mikepenz/action-junit-report@v4 | ||
if: success() || failure() | ||
with: | ||
report_paths: ${{ steps.strings.outputs.test_report_path }} | ||
check_name: MLIR Tests | ||
# Build and upload ttrt | ||
- name: Build ttrt | ||
shell: bash | ||
run: | | ||
source env/activate | ||
cmake --build ${{ steps.strings.outputs.build-output-dir }} -- ttrt | ||
- name: Upload ttrt whl | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: ttrt-whl-${{ matrix.build.name }} | ||
path: build/runtime/tools/python/build/ttrt*.whl | ||
# This is needed to preserve file permissions | ||
# https://github.com/actions/upload-artifact?tab=readme-ov-file#permission-loss | ||
- name: 'Tar install directory' | ||
shell: bash | ||
working-directory: ${{ steps.strings.outputs.install-output-dir }} | ||
run: tar cvf artifact.tar . | ||
- name: Upload install folder to archive | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: install-artifacts-${{ matrix.build.name }} | ||
path: ${{ steps.strings.outputs.install-output-dir }}/artifact.tar | ||
- name: Get the latest tag | ||
shell: bash | ||
run: | | ||
latest_tag=$(git describe --tags --abbrev=0) | ||
latest_tag=${latest_tag#v} | ||
echo "latest_tag=$latest_tag" >> $GITHUB_ENV | ||
commit_count=$(git rev-list ${{ env.latest_tag }}..HEAD --count) | ||
echo "commit_count=$commit_count" >> $GITHUB_ENV | ||
version="${{ env.latest_tag }}.${{ env.commit_count }}" | ||
echo "version=$version" >> $GITHUB_ENV | ||
echo $version | ||
# Run tests on TT hardware | ||
run-tests: | ||
timeout-minutes: 45 | ||
needs: | ||
- build-image | ||
- build-ttmlir | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
build: [ | ||
{runs-on: n150, enable_perf: OFF, name: "run", ttrt_flags: "--non-zero"}, | ||
{runs-on: n150, enable_perf: ON, name: "perf"}, | ||
{runs-on: n300, enable_perf: OFF, name: "run", ttrt_flags: "--non-zero"}, | ||
{runs-on: n300, enable_perf: ON, name: "perf"}, | ||
] | ||
name: "run-tests (${{ matrix.build.runs-on }}, ${{ matrix.build.enable_perf }}, ${{ matrix.build.name }})" | ||
runs-on: | ||
- in-service | ||
- ${{ matrix.build.runs-on }} | ||
container: | ||
image: ${{ needs.build-image.outputs.docker-image }} | ||
options: --device /dev/tenstorrent/0 | ||
volumes: | ||
- /dev/hugepages:/dev/hugepages | ||
- /dev/hugepages-1G:/dev/hugepages-1G | ||
- /etc/udev/rules.d:/etc/udev/rules.d | ||
- /lib/modules:/lib/modules | ||
- /opt/tt_metal_infra/provisioning/provisioning_env:/opt/tt_metal_infra/provisioning/provisioning_env | ||
steps: | ||
- uses: actions/checkout@v4 | ||
with: | ||
fetch-depth: 0 | ||
- name: Set reusable strings | ||
id: strings | ||
shell: bash | ||
env: | ||
job-name: "run-tests (${{ matrix.build.runs-on }}, ${{ matrix.build.enable_perf }}, ${{ matrix.build.name }})" | ||
run: | | ||
echo "work-dir=$(pwd)" >> "$GITHUB_OUTPUT" | ||
echo "build-output-dir=$(pwd)/build" >> "$GITHUB_OUTPUT" | ||
echo "install-output-dir=$(pwd)/install" >> "$GITHUB_OUTPUT" | ||
# Github job context unfortunately doesn't contain job_id, this is the workaround how to fetch it using GH API | ||
echo "Expected job name: ${{ env.job-name }}" | ||
JOB_ID=$(curl -s -H "Authorization: token ${{ secrets.GH_TOKEN }}" \ | ||
"https://api.github.com/repos/${{ github.repository }}/actions/runs/${{ github.run_id }}/attempts/${{ github.run_attempt }}/jobs" | \ | ||
jq -r '.jobs[] | select(.name | contains("${{ env.job-name }}")) | .id ') | ||
echo "Current job id: $JOB_ID" | ||
echo "job-id=$JOB_ID" >> "$GITHUB_OUTPUT" | ||
echo "test_report_path=report_$JOB_ID.xml" >> "$GITHUB_OUTPUT" | ||
- name: Git safe dir | ||
run: git config --global --add safe.directory ${{ steps.strings.outputs.work-dir }} | ||
- name: Use build artifacts | ||
uses: actions/download-artifact@v4 | ||
with: | ||
name: install-artifacts-${{ matrix.build.name }} | ||
path: ${{ steps.strings.outputs.install-output-dir }} | ||
# This is needed to preserve file permissions | ||
# https://github.com/actions/upload-artifact?tab=readme-ov-file#permission-loss | ||
- name: 'Untar install directory' | ||
shell: bash | ||
working-directory: ${{ steps.strings.outputs.install-output-dir }} | ||
run: tar xvf artifact.tar | ||
- name: Remove existing whls files | ||
shell: bash | ||
run: | | ||
rm -f *.whl | ||
- name: Download ttrt run whls | ||
uses: actions/download-artifact@v4 | ||
with: | ||
name: ttrt-whl-${{ matrix.build.name }} | ||
- name: Install ttrt run whls | ||
shell: bash | ||
run: | | ||
source env/activate | ||
pip show ttrt && pip uninstall -y ttrt | ||
pip install ttrt-${{ env.version }}*.whl --force-reinstall | ||
- name: Generate system descriptor | ||
shell: bash | ||
run: | | ||
source env/activate | ||
ttrt query --save-artifacts | ||
- name: Generate tests | ||
shell: bash | ||
run: | | ||
source env/activate | ||
export LD_LIBRARY_PATH="${TTMLIR_TOOLCHAIN_DIR}/lib:${LD_LIBRARY_PATH}" | ||
export SYSTEM_DESC_PATH="${GITHUB_WORKSPACE}/ttrt-artifacts/system_desc.ttsys" | ||
ln -sf ${{ steps.strings.outputs.install-output-dir }} ${{ steps.strings.outputs.build-output-dir }} | ||
llvm-lit -sv ${{ steps.strings.outputs.build-output-dir }}/test | ||
- name: Run functional tests | ||
shell: bash | ||
if: matrix.build.enable_perf == 'OFF' | ||
run: | | ||
source env/activate | ||
ttrt ${{ matrix.build.name }} ${{ matrix.build.ttrt_flags }} ${{ steps.strings.outputs.build-output-dir }}/test/ttmlir/Silicon | ||
- name: Run perf tests | ||
shell: bash | ||
if: matrix.build.enable_perf == 'ON' | ||
run: | | ||
source env/activate | ||
ttrt ${{ matrix.build.name }} ${{ matrix.build.ttrt_flags }} ${{ steps.strings.outputs.build-output-dir }}/test/ttmlir/Silicon/TTNN/perf_unit | ||
cp ttrt_report.xml ${{ steps.strings.outputs.test_report_path }} | ||
- name: Upload ttrt test report json | ||
if: always() | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: ${{ matrix.build.runs-on }}_${{ matrix.build.name }}_results.json | ||
path: ${{ matrix.build.name }}_results.json | ||
- name: Upload Test Report xml | ||
uses: actions/upload-artifact@v4 | ||
if: success() || failure() | ||
with: | ||
name: test-reports-${{ matrix.build.runs-on }}-${{ matrix.test_group_id }} | ||
path: ${{ steps.strings.outputs.test_report_path }} | ||
- name: Show Test Report | ||
uses: mikepenz/action-junit-report@v4 | ||
if: success() || failure() | ||
with: | ||
report_paths: ${{ steps.strings.outputs.test_report_path }} | ||
check_name: TTRT ${{ matrix.build.runs-on }} ${{ matrix.build.name }} Tests | ||
run-ttrt-tests: | ||
timeout-minutes: 30 | ||
needs: | ||
- build-image | ||
- build-ttmlir | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
build: [ | ||
{runs-on: n150, enable_perf: ON, name: "perf"}, | ||
] | ||
runs-on: | ||
- in-service | ||
- ${{ matrix.build.runs-on }} | ||
container: | ||
image: ${{ needs.build-image.outputs.docker-image }} | ||
options: --device /dev/tenstorrent/0 | ||
volumes: | ||
- /dev/hugepages:/dev/hugepages | ||
- /dev/hugepages-1G:/dev/hugepages-1G | ||
- /etc/udev/rules.d:/etc/udev/rules.d | ||
- /lib/modules:/lib/modules | ||
- /opt/tt_metal_infra/provisioning/provisioning_env:/opt/tt_metal_infra/provisioning/provisioning_env | ||
steps: | ||
- uses: actions/checkout@v4 | ||
with: | ||
fetch-depth: 0 | ||
- name: Set reusable strings | ||
id: strings | ||
shell: bash | ||
env: | ||
job-name: "${{ github.job }} (${{ matrix.build.runs-on }}, ${{ matrix.build.enable_perf }}, ${{ matrix.build.name }})" | ||
run: | | ||
echo "work-dir=$(pwd)" >> "$GITHUB_OUTPUT" | ||
echo "build-output-dir=$(pwd)/build" >> "$GITHUB_OUTPUT" | ||
echo "install-output-dir=$(pwd)/install" >> "$GITHUB_OUTPUT" | ||
# Github job context unfortunately doesn't contain job_id, this is the workaround how to fetch it using GH API | ||
echo "Expected job name: ${{ env.job-name }}" | ||
JOB_ID=$(curl -s -H "Authorization: token ${{ secrets.GH_TOKEN }}" \ | ||
"https://api.github.com/repos/${{ github.repository }}/actions/runs/${{ github.run_id }}/attempts/${{ github.run_attempt }}/jobs" | \ | ||
jq -r '.jobs[] | select(.name | contains("${{ env.job-name }}")) | .id ') | ||
echo "Current job id: $JOB_ID" | ||
echo "job-id=$JOB_ID" >> "$GITHUB_OUTPUT" | ||
echo "test_report_path=report_$JOB_ID.xml" >> "$GITHUB_OUTPUT" | ||
- name: Git safe dir | ||
run: git config --global --add safe.directory ${{ steps.strings.outputs.work-dir }} | ||
- name: Use build artifacts | ||
uses: actions/download-artifact@v4 | ||
with: | ||
name: install-artifacts-${{ matrix.build.name }} | ||
path: ${{ steps.strings.outputs.install-output-dir }} | ||
# This is needed to preserve file permissions | ||
# https://github.com/actions/upload-artifact?tab=readme-ov-file#permission-loss | ||
- name: 'Untar install directory' | ||
shell: bash | ||
working-directory: ${{ steps.strings.outputs.install-output-dir }} | ||
run: tar xvf artifact.tar | ||
- name: Remove existing whls files | ||
shell: bash | ||
run: | | ||
rm -f *.whl | ||
- name: Download ttrt run whls | ||
uses: actions/download-artifact@v4 | ||
with: | ||
name: ttrt-whl-${{ matrix.build.name }} | ||
- name: Install ttrt run whls | ||
shell: bash | ||
run: | | ||
source env/activate | ||
pip show ttrt && pip uninstall -y ttrt | ||
pip install ttrt-${{ env.version }}*.whl --force-reinstall | ||
pip install pytest | ||
- name: Generate system descriptor | ||
shell: bash | ||
run: | | ||
source env/activate | ||
ttrt query --save-artifacts | ||
- name: Generate tests | ||
shell: bash | ||
run: | | ||
source env/activate | ||
export LD_LIBRARY_PATH="${TTMLIR_TOOLCHAIN_DIR}/lib:${LD_LIBRARY_PATH}" | ||
export SYSTEM_DESC_PATH="${GITHUB_WORKSPACE}/ttrt-artifacts/system_desc.ttsys" | ||
ln -sf ${{ steps.strings.outputs.install-output-dir }} ${{ steps.strings.outputs.build-output-dir }} | ||
llvm-lit -sv ${{ steps.strings.outputs.build-output-dir }}/test | ||
- name: ttrt read tests | ||
shell: bash | ||
run: | | ||
source env/activate | ||
pytest -ssv runtime/tools/python/test \ | ||
--junit-xml=${{ steps.strings.outputs.test_report_path }} | ||
- name: Upload Test Report | ||
uses: actions/upload-artifact@v4 | ||
if: success() || failure() | ||
with: | ||
name: test-reports-${{ matrix.build.runs-on }}-${{ matrix.build.name }} | ||
path: ${{ steps.strings.outputs.test_report_path }} | ||
- name: Show Test Report | ||
uses: mikepenz/action-junit-report@v4 | ||
if: success() || failure() | ||
with: | ||
report_paths: ${{ steps.strings.outputs.test_report_path }} | ||
check_name: Run ttrt tests | ||
run-runtime-api-tests: | ||
timeout-minutes: 30 | ||
needs: | ||
- build-image | ||
- build-ttmlir | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
build: [ | ||
{runs-on: n150, enable_perf: OFF, name: "run"}, | ||
] | ||
runs-on: | ||
- in-service | ||
- ${{ matrix.build.runs-on }} | ||
container: | ||
image: ${{ needs.build-image.outputs.docker-image }} | ||
options: --device /dev/tenstorrent/0 | ||
volumes: | ||
- /dev/hugepages:/dev/hugepages | ||
- /dev/hugepages-1G:/dev/hugepages-1G | ||
- /etc/udev/rules.d:/etc/udev/rules.d | ||
- /lib/modules:/lib/modules | ||
- /opt/tt_metal_infra/provisioning/provisioning_env:/opt/tt_metal_infra/provisioning/provisioning_env | ||
steps: | ||
- uses: actions/checkout@v4 | ||
with: | ||
fetch-depth: 0 | ||
- name: Set reusable strings | ||
id: strings | ||
shell: bash | ||
run: | | ||
echo "work-dir=$(pwd)" >> "$GITHUB_OUTPUT" | ||
echo "build-output-dir=$(pwd)/build" >> "$GITHUB_OUTPUT" | ||
echo "install-output-dir=$(pwd)/install" >> "$GITHUB_OUTPUT" | ||
- name: Git safe dir | ||
run: git config --global --add safe.directory ${{ steps.strings.outputs.work-dir }} | ||
- name: Use build artifacts | ||
uses: actions/download-artifact@v4 | ||
with: | ||
name: install-artifacts-${{ matrix.build.name }} | ||
path: ${{ steps.strings.outputs.install-output-dir }} | ||
# This is needed to preserve file permissions | ||
# https://github.com/actions/upload-artifact?tab=readme-ov-file#permission-loss | ||
- name: 'Untar install directory' | ||
shell: bash | ||
working-directory: ${{ steps.strings.outputs.install-output-dir }} | ||
run: tar xvf artifact.tar | ||
- name: Remove existing whls files | ||
shell: bash | ||
run: | | ||
rm -f *.whl | ||
- name: Download ttrt run whls | ||
uses: actions/download-artifact@v4 | ||
with: | ||
name: ttrt-whl-${{ matrix.build.name }} | ||
# Runtime tests currently require ttrt whls to be installed | ||
- name: Install ttrt run whls | ||
shell: bash | ||
run: | | ||
source env/activate | ||
pip show ttrt && pip uninstall -y ttrt | ||
pip install ttrt-${{ env.version }}*.whl --force-reinstall | ||
pip install pytest | ||
- name: Generate system descriptor | ||
shell: bash | ||
run: | | ||
source env/activate | ||
ttrt query --save-artifacts | ||
- name: Generate tests | ||
shell: bash | ||
run: | | ||
source env/activate | ||
export LD_LIBRARY_PATH="${TTMLIR_TOOLCHAIN_DIR}/lib:${LD_LIBRARY_PATH}" | ||
export SYSTEM_DESC_PATH="${GITHUB_WORKSPACE}/ttrt-artifacts/system_desc.ttsys" | ||
ln -sf ${{ steps.strings.outputs.install-output-dir }} ${{ steps.strings.outputs.build-output-dir }} | ||
llvm-lit -sv ${{ steps.strings.outputs.build-output-dir }}/test | ||
- name: ttnn api tests | ||
shell: bash | ||
run: | | ||
source env/activate | ||
pytest -ssv runtime/test/python/ttnn/test_runtime_api.py | ||
build-and-test-explorer: | ||
needs: build-image | ||
timeout-minutes: 60 | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
build: [ | ||
{runs-on: n150, enable_perf: ON, name: "perf"}, | ||
] | ||
name: Build and test tt-explorer | ||
runs-on: ${{ matrix.build.runs-on }} | ||
container: | ||
image: ${{ needs.build-image.outputs.docker-image }} | ||
options: --device /dev/tenstorrent/0 | ||
volumes: | ||
- /dev/hugepages:/dev/hugepages | ||
- /dev/hugepages-1G:/dev/hugepages-1G | ||
- /etc/udev/rules.d:/etc/udev/rules.d | ||
- /lib/modules:/lib/modules | ||
- /opt/tt_metal_infra/provisioning/provisioning_env:/opt/tt_metal_infra/provisioning/provisioning_env | ||
steps: | ||
- uses: actions/checkout@v4 | ||
with: | ||
fetch-depth: 0 | ||
- name: Set reusable strings | ||
id: strings | ||
shell: bash | ||
run: | | ||
echo "work-dir=$(pwd)" >> "$GITHUB_OUTPUT" | ||
echo "build-output-dir=$(pwd)/build" >> "$GITHUB_OUTPUT" | ||
echo "install-output-dir=$(pwd)/install" >> "$GITHUB_OUTPUT" | ||
- name: Git safe dir | ||
run: git config --global --add safe.directory ${{ steps.strings.outputs.work-dir }} | ||
- name: ccache | ||
uses: hendrikmuhs/[email protected] | ||
with: | ||
create-symlink: true | ||
key: ${{ matrix.build.runs-on }}-run-ON-perf-${{ matrix.build.enable_perf }}-op_model-${{ matrix.build.enable_op_model }}-${{ env.SDK_VERSION }} | ||
- name: Configure CMake | ||
shell: bash | ||
run: | | ||
source env/activate | ||
cmake -G Ninja \ | ||
-B ${{ steps.strings.outputs.build-output-dir }} \ | ||
-DCMAKE_CXX_COMPILER=clang++-17 \ | ||
-DCMAKE_C_COMPILER=clang-17 \ | ||
-DCMAKE_BUILD_TYPE=Release \ | ||
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ | ||
-DTTMLIR_ENABLE_RUNTIME=ON \ | ||
-DTTMLIR_ENABLE_RUNTIME_TESTS=OFF \ | ||
-DTT_RUNTIME_ENABLE_PERF_TRACE=${{ matrix.build.enable_perf }} \ | ||
-DTTMLIR_ENABLE_STABLEHLO=OFF \ | ||
-DTTMLIR_ENABLE_OPMODEL=${{ matrix.build.enable_op_model }} \ | ||
-S ${{ steps.strings.outputs.work-dir }} | ||
- name: Build tt-explorer | ||
shell: bash | ||
run: | | ||
source env/activate | ||
cmake --build ${{ steps.strings.outputs.build-output-dir }} -- explorer | ||
- name: Run tt-explorer tests | ||
shell: bash | ||
run: | | ||
source env/activate | ||
pytest tools/explorer/test/run_tests.py | ||
# collect results |