[ROCm] Fix slowdown and Compiling.md: 1x1 convs as hipBLAS GEMM, NCHW convnet default, MIOpen naive-solver detection, ROCm 7.14 install docs #10
Workflow file for this run
This file contains hidden or 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
| # ONNX backend CI. Builds KataGo (USE_BACKEND=ONNX) against an ONNX Runtime carrying the | |
| # requested execution provider, or EP, runs `katago runtests`, and uploads a self-contained | |
| # runnable directory as an artifact for easy download. | |
| # | |
| # Execution providers differ only in how ONNX Runtime is obtained, and that difference lives | |
| # in .github/actions/onnx-prepare-ort/action.yml (one row in the matrix below per EP): | |
| # - prebuilt : official ORT release package, zip on Windows and tgz on Linux, with the | |
| # CPU EP shipping inside it | |
| # - nuget : Microsoft.ML.OnnxRuntime.DirectML package (DirectML EP) | |
| # - from-source : ORT built from source with the EP (OpenVINO on Windows, TensorRT in an | |
| # NGC container) | |
| # | |
| # Trigger policy by tier: | |
| # - fast EPs (prebuilt/nuget, a few minutes) run on PR + master push + manual dispatch, | |
| # so the ONNX backend keeps a cheap always-on regression guard. | |
| # - slow EPs (from-source ORT builds, 1-3h) run only on manual dispatch, so they never | |
| # burn CI minutes on every PR/commit. | |
| # GitHub-hosted runners have no GPU, so from-source jobs only verify build and EP wiring. | |
| # Real GPU inference must be validated on a GPU machine. | |
| # | |
| # Adding a backend takes one more matrix row plus teaching onnx-prepare-ort to fetch or build | |
| # its ORT, and extending the release-staging step in onnx-build-katago if it ships extra | |
| # runtimes. | |
| name: ONNX backend build & test | |
| on: | |
| pull_request: | |
| branches: [ master ] | |
| paths: | |
| - 'cpp/**' | |
| - '.github/workflows/onnx-backend.yml' | |
| - '.github/actions/**' | |
| push: | |
| branches: [ master ] | |
| paths: | |
| - 'cpp/**' | |
| - '.github/workflows/onnx-backend.yml' | |
| - '.github/actions/**' | |
| workflow_dispatch: | |
| concurrency: | |
| group: onnx-backend-${{ github.ref }} | |
| cancel-in-progress: true | |
| permissions: | |
| contents: read | |
| env: | |
| # from-source ORT pin. 1.29.0 has no release tag (VERSION_NUMBER is 1.29.0 but no | |
| # v1.29.0 tag exists), so pin an exact commit rather than a branch, which would drift. | |
| # Update it to build against a newer ORT snapshot. | |
| ORT_REF: 7e76a52398ebf966bcbe4a10e552f438059edfce | |
| OV_URL: https://storage.openvinotoolkit.org/repositories/openvino/packages/2026.2.1/windows/openvino_toolkit_windows_2026.2.1.21919.ede283a88e3_x86_64.zip | |
| OV_VERSION: 2026.2.1 | |
| jobs: | |
| build-fast: | |
| name: ${{ matrix.ep }} (${{ matrix.os }}) | |
| runs-on: ${{ matrix.os }} | |
| timeout-minutes: 45 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - { ep: cpu, os: windows-latest, mode: prebuilt, ort_version: "1.28.0" } | |
| - { ep: cpu, os: ubuntu-latest, mode: prebuilt, ort_version: "1.28.0" } | |
| - { ep: directml, os: windows-latest, mode: nuget, ort_version: "1.24.4" } | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Setup MSVC environment | |
| if: runner.os == 'Windows' | |
| uses: ilammy/msvc-dev-cmd@v1 | |
| with: | |
| arch: x64 | |
| - name: Install Ninja (Windows) | |
| if: runner.os == 'Windows' | |
| run: choco install ninja -y --no-progress | |
| - name: Install Ninja (Linux) | |
| if: runner.os == 'Linux' | |
| run: sudo apt-get update && sudo apt-get install -y ninja-build | |
| - name: Prepare ONNX Runtime (${{ matrix.ep }}) | |
| uses: ./.github/actions/onnx-prepare-ort | |
| with: | |
| ep: ${{ matrix.ep }} | |
| mode: ${{ matrix.mode }} | |
| ort_version: ${{ matrix.ort_version }} | |
| - name: Build & test KataGo | |
| uses: ./.github/actions/onnx-build-katago | |
| with: | |
| ort_root: ${{ github.workspace }}/deps/install/ort | |
| ep: ${{ matrix.ep }} | |
| - name: Upload artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: katago-${{ runner.os }}-onnx-${{ matrix.ep }} | |
| path: release/ | |
| build-slow: | |
| # from-source ORT builds (1-3h) only on manual dispatch. | |
| if: github.event_name == 'workflow_dispatch' | |
| name: ${{ matrix.ep }} (${{ matrix.os }}) | |
| runs-on: ${{ matrix.os }} | |
| timeout-minutes: 300 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - { ep: openvino, os: windows-latest, mode: from-source } | |
| # - { ep: migraphx, os: ubuntu-latest, mode: from-source } # needs ROCm; deferred (no ROCm on hosted runners) | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Setup MSVC environment | |
| if: runner.os == 'Windows' | |
| uses: ilammy/msvc-dev-cmd@v1 | |
| with: | |
| arch: x64 | |
| - name: Install Ninja (Windows) | |
| if: runner.os == 'Windows' | |
| run: choco install ninja -y --no-progress | |
| - name: Install Ninja (Linux) | |
| if: runner.os == 'Linux' | |
| run: sudo apt-get update && sudo apt-get install -y ninja-build | |
| - name: Prepare ONNX Runtime (${{ matrix.ep }}) | |
| uses: ./.github/actions/onnx-prepare-ort | |
| with: | |
| ep: ${{ matrix.ep }} | |
| mode: ${{ matrix.mode }} | |
| ort_ref: ${{ env.ORT_REF }} | |
| ov_version: ${{ env.OV_VERSION }} | |
| ov_url: ${{ env.OV_URL }} | |
| - name: Build & test KataGo | |
| uses: ./.github/actions/onnx-build-katago | |
| with: | |
| ort_root: ${{ github.workspace }}/deps/install/ort | |
| ep: ${{ matrix.ep }} | |
| - name: Upload artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: katago-${{ runner.os }}-onnx-${{ matrix.ep }} | |
| path: release/ | |
| build-tensorrt: | |
| # ORT from-source TensorRT build (1-2h), dispatch-only. Runs inside the official NGC | |
| # TensorRT container (nvcr.io/nvidia/tensorrt:25.03-py3 = CUDA 12.8 + TensorRT 10.9, the | |
| # combo ORT is built/tested against), so the CUDA/cuDNN/TensorRT SDKs are preinstalled | |
| # and no SDK install step is needed. github-hosted runners have no GPU, so this job | |
| # verifies build + EP wiring only; real GPU inference is validated on a GPU machine. | |
| if: github.event_name == 'workflow_dispatch' | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 300 | |
| container: | |
| image: nvcr.io/nvidia/tensorrt:25.03-py3 | |
| options: --user root | |
| steps: | |
| # The NGC image ships neither git nor node, and later steps are GitHub JS actions | |
| # (cache, checkout, upload-artifact) that need node. Bootstrap both plus ninja first, | |
| # then clone the repo by hand (checkout@v4 would run before node existed). | |
| - name: Bootstrap container (git, node20, ninja) and checkout | |
| run: | | |
| apt-get update -qq | |
| apt-get install -y -qq git ninja-build curl >/dev/null | |
| curl -fsSL https://deb.nodesource.com/setup_20.x | bash - | |
| apt-get install -y -qq nodejs >/dev/null | |
| node --version | |
| # ORT 1.28 needs CMake >= 3.28; the NGC image ships 3.27. pip cmake lands in | |
| # /usr/local/bin ahead of the bundled one. | |
| pip3 install cmake >/dev/null | |
| cmake --version | head -1 | |
| # The workspace is a docker mount owned by a different uid, so git refuses it | |
| # ("dubious ownership") when KataGo regenerates gitinfo.h during the build. | |
| git config --global --add safe.directory '*' | |
| git clone --depth 1 --branch "${GITHUB_REF_NAME}" "https://github.com/${GITHUB_REPOSITORY}.git" . | |
| - name: Prepare ONNX Runtime (tensorrt) | |
| uses: ./.github/actions/onnx-prepare-ort | |
| with: | |
| ep: tensorrt | |
| mode: from-source | |
| ort_ref: ${{ env.ORT_REF }} | |
| - name: Build & test KataGo | |
| uses: ./.github/actions/onnx-build-katago | |
| with: | |
| ort_root: ${{ github.workspace }}/deps/install/ort | |
| ep: tensorrt | |
| - name: Upload artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: katago-Linux-onnx-tensorrt | |
| path: release/ |