diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml deleted file mode 100644 index 812a141179..0000000000 --- a/.github/workflows/build-and-test.yml +++ /dev/null @@ -1,324 +0,0 @@ -# Copyright (c) 2024-2025, NVIDIA CORPORATION & AFFILIATES. ALL RIGHTS RESERVED. -# -# SPDX-License-Identifier: Apache-2.0 - -# Note: This name is referred to in the test job, so make sure any changes are sync'd up! -name: "CI: Build and test" - -concurrency: - group: ${{ github.workflow }}-${{ - github.ref_name == 'main' && format('ci-main-build-test-{0}', github.run_id) || - format('ci-pr-build-test-on-{0}-against-branch-{1}', github.event_name, github.ref_name) - }} - cancel-in-progress: true - -on: - push: - branches: - - "pull-request/[0-9]+" - - "main" - -jobs: - build: - strategy: - fail-fast: false - matrix: - host-platform: - - linux-64 - - linux-aarch64 - - win-64 - python-version: - - "3.13" - - "3.12" - - "3.11" - - "3.10" - - "3.9" - cuda-version: - # Note: this is for build-time only. - - "12.9.0" - name: Build (${{ matrix.host-platform }}, Python ${{ matrix.python-version }}, CUDA ${{ matrix.cuda-version }}) - if: ${{ github.repository_owner == 'nvidia' }} - permissions: - contents: read # This is required for actions/checkout - runs-on: ${{ (matrix.host-platform == 'linux-64' && 'linux-amd64-cpu8') || - (matrix.host-platform == 'linux-aarch64' && 'linux-arm64-cpu8') || - (matrix.host-platform == 'win-64' && 'windows-2019') }} - # (matrix.host-platform == 'win-64' && 'windows-amd64-cpu8') }} - outputs: - BUILD_CTK_VER: ${{ steps.pass_env.outputs.CUDA_VERSION }} - defaults: - run: - shell: bash --noprofile --norc -xeuo pipefail {0} - steps: - - name: Checkout ${{ github.event.repository.name }} - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - # WAR: setup-python is not relocatable... - # see https://github.com/actions/setup-python/issues/871 - - name: Set up Python ${{ matrix.python-version }} - if: ${{ startsWith(matrix.host-platform, 'linux') }} - id: setup-python - uses: actions/setup-python@v5 - with: - python-version: "3.12" - - - name: Set up MSVC - if: ${{ startsWith(matrix.host-platform, 'win') }} - uses: ilammy/msvc-dev-cmd@v1 - - - name: Set environment variables - run: | - PYTHON_VERSION_FORMATTED=$(echo '${{ matrix.python-version }}' | tr -d '.') - if [[ "${{ matrix.host-platform }}" == linux* ]]; then - CIBW_BUILD="cp${PYTHON_VERSION_FORMATTED}-manylinux*" - REPO_DIR=$(pwd) - elif [[ "${{ matrix.host-platform }}" == win* ]]; then - CIBW_BUILD="cp${PYTHON_VERSION_FORMATTED}-win_amd64" - PWD=$(pwd) - REPO_DIR=$(cygpath -w $PWD) - fi - - echo "CUDA_BINDINGS_PARALLEL_LEVEL=$(nproc)" >> $GITHUB_ENV - CUDA_CORE_ARTIFACT_BASENAME="cuda-core-python${PYTHON_VERSION_FORMATTED}-${{ matrix.host-platform }}" - echo "CUDA_CORE_ARTIFACT_BASENAME=${CUDA_CORE_ARTIFACT_BASENAME}" >> $GITHUB_ENV - echo "CUDA_CORE_ARTIFACT_NAME=${CUDA_CORE_ARTIFACT_BASENAME}-${{ github.sha }}" >> $GITHUB_ENV - echo "CUDA_CORE_ARTIFACTS_DIR=$(realpath "$REPO_DIR/cuda_core/dist")" >> $GITHUB_ENV - CUDA_BINDINGS_ARTIFACT_BASENAME="cuda-bindings-python${PYTHON_VERSION_FORMATTED}-cuda${{ matrix.cuda-version }}-${{ matrix.host-platform }}" - echo "CUDA_BINDINGS_ARTIFACT_BASENAME=${CUDA_BINDINGS_ARTIFACT_BASENAME}" >> $GITHUB_ENV - echo "CUDA_BINDINGS_ARTIFACT_NAME=${CUDA_BINDINGS_ARTIFACT_BASENAME}-${{ github.sha }}" >> $GITHUB_ENV - echo "CUDA_BINDINGS_ARTIFACTS_DIR=$(realpath "$REPO_DIR/cuda_bindings/dist")" >> $GITHUB_ENV - echo "CIBW_BUILD=${CIBW_BUILD}" >> $GITHUB_ENV - - - name: Dump environment - run: | - env - - - name: Build cuda.core wheel - uses: pypa/cibuildwheel@v2.22.0 - env: - CIBW_BUILD: ${{ env.CIBW_BUILD }} - CIBW_ARCHS_LINUX: "native" - CIBW_BUILD_VERBOSITY: 1 - with: - package-dir: ./cuda_core/ - output-dir: ${{ env.CUDA_CORE_ARTIFACTS_DIR }} - - - name: List the cuda.core artifacts directory - run: | - if [[ "${{ matrix.host-platform }}" == win* ]]; then - export CHOWN=chown - else - export CHOWN="sudo chown" - fi - $CHOWN -R $(whoami) ${{ env.CUDA_CORE_ARTIFACTS_DIR }} - ls -lahR ${{ env.CUDA_CORE_ARTIFACTS_DIR }} - - - name: Check cuda.core wheel - run: | - pip install twine - twine check ${{ env.CUDA_CORE_ARTIFACTS_DIR }}/*.whl - - - name: Upload cuda.core build artifacts - uses: actions/upload-artifact@v4 - with: - name: ${{ env.CUDA_CORE_ARTIFACT_NAME }} - path: ${{ env.CUDA_CORE_ARTIFACTS_DIR }}/*.whl - if-no-files-found: error - - - name: Set up mini CTK - uses: ./.github/actions/fetch_ctk - continue-on-error: false - with: - host-platform: ${{ matrix.host-platform }} - cuda-version: ${{ matrix.cuda-version }} - - - name: Build cuda.bindings wheel - uses: pypa/cibuildwheel@v2.22.0 - env: - CIBW_BUILD: ${{ env.CIBW_BUILD }} - CIBW_ARCHS_LINUX: "native" - CIBW_BUILD_VERBOSITY: 1 - # CIBW mounts the host filesystem under /host - CIBW_ENVIRONMENT_LINUX: > - CUDA_PATH=/host/${{ env.CUDA_PATH }} - LIBRARY_PATH=/host/${{ env.CUDA_PATH }}/lib - CUDA_BINDINGS_PARALLEL_LEVEL=${{ env.CUDA_BINDINGS_PARALLEL_LEVEL }} - CIBW_ENVIRONMENT_WINDOWS: > - CUDA_HOME=${{ env.CUDA_PATH }} - LIB="${CUDA_HOME}\\lib\\x64;${LIB}" - CUDA_BINDINGS_PARALLEL_LEVEL=${{ env.CUDA_BINDINGS_PARALLEL_LEVEL }} - with: - package-dir: ./cuda_bindings/ - output-dir: ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }} - - - name: List the cuda.bindings artifacts directory - run: | - if [[ "${{ matrix.host-platform }}" == win* ]]; then - export CHOWN=chown - else - export CHOWN="sudo chown" - fi - $CHOWN -R $(whoami) ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }} - ls -lahR ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }} - - - name: Check cuda.bindings wheel - run: | - twine check ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }}/*.whl - - - name: Upload cuda.bindings build artifacts - uses: actions/upload-artifact@v4 - with: - name: ${{ env.CUDA_BINDINGS_ARTIFACT_NAME }} - path: ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }}/*.whl - if-no-files-found: error - - # upload-artifact's "overwrite: true" option has a race condition among parallel - # jobs, so we let job 0 do the work - - name: Build and check cuda-python wheel - if: ${{ strategy.job-index == 0 }} - run: | - pushd cuda_python - pip wheel -v --no-deps . - twine check *.whl - popd - - - name: List the cuda-python artifacts directory - if: ${{ strategy.job-index == 0 }} - run: | - if [[ "${{ matrix.host-platform }}" == win* ]]; then - export CHOWN=chown - else - export CHOWN="sudo chown" - fi - $CHOWN -R $(whoami) cuda_python/*.whl - ls -lahR cuda_python - - - name: Upload cuda-python build artifacts - if: ${{ strategy.job-index == 0 }} - uses: actions/upload-artifact@v4 - with: - name: cuda-python-wheel - path: cuda_python/*.whl - if-no-files-found: error - - - name: Pass environment variables to the next runner - id: pass_env - run: | - echo "CUDA_VERSION=${{ matrix.cuda-version }}" >> $GITHUB_OUTPUT - - test-linux: - strategy: - fail-fast: false - # TODO: add driver version here - matrix: - host-platform: - - linux-64 - - linux-aarch64 - python-version: - - "3.13" - - "3.12" - - "3.11" - - "3.10" - - "3.9" - cuda-version: - # Note: this is for test-time only. - - "12.9.0" - - "12.0.1" - - "11.8.0" - local-ctk: - - 1 # use mini CTK - - 0 # use CTK wheels - runner: - - default - exclude: - # To test this combo would require nontrivial installation steps. - - cuda-version: "12.0.1" - local-ctk: 0 - include: - - host-platform: linux-64 - python-version: "3.12" - cuda-version: "12.9.0" - local-ctk: 1 - runner: H100 - name: Test (${{ matrix.host-platform }}, Python ${{ matrix.python-version }}, CUDA ${{ matrix.cuda-version }}, Runner ${{ matrix.runner }}, ${{ (matrix.local-ctk == '1' && 'local CTK') || 'CTK wheels' }}) - if: ${{ github.repository_owner == 'nvidia' }} - permissions: - contents: read # This is required for actions/checkout - needs: - - build - secrets: inherit - uses: - ./.github/workflows/test-wheel-linux.yml - with: - host-platform: ${{ matrix.host-platform }} - python-version: ${{ matrix.python-version }} - build-ctk-ver: ${{ needs.build.outputs.BUILD_CTK_VER }} - cuda-version: ${{ matrix.cuda-version }} - local-ctk: ${{ matrix.local-ctk}} - runner: ${{ matrix.runner }} - - test-windows: - strategy: - fail-fast: false - # TODO: add driver version here - matrix: - host-platform: - - win-64 - python-version: - - "3.12" - cuda-version: - # Note: this is for test-time only. - - "12.9.0" - - "11.8.0" - local-ctk: - - 1 # use mini CTK - - 0 # use CTK wheels - runner: - - default - name: Test (${{ matrix.host-platform }}, Python ${{ matrix.python-version }}, CUDA ${{ matrix.cuda-version }}, Runner ${{ matrix.runner }}, ${{ (matrix.local-ctk == '1' && 'local CTK') || 'CTK wheels' }}) - if: ${{ github.repository_owner == 'nvidia' }} - permissions: - contents: read # This is required for actions/checkout - needs: - - build - secrets: inherit - uses: - ./.github/workflows/test-wheel-windows.yml - with: - host-platform: ${{ matrix.host-platform }} - python-version: ${{ matrix.python-version }} - build-ctk-ver: ${{ needs.build.outputs.BUILD_CTK_VER }} - cuda-version: ${{ matrix.cuda-version }} - local-ctk: ${{ matrix.local-ctk}} - runner: ${{ matrix.runner }} - - doc: - name: Docs - if: ${{ github.repository_owner == 'nvidia' }} - # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages - permissions: - id-token: write - contents: write - pull-requests: write - needs: - - build - secrets: inherit - uses: - ./.github/workflows/build-docs.yml - with: - build-ctk-ver: ${{ needs.build.outputs.BUILD_CTK_VER }} - - checks: - name: Check job status - permissions: - checks: read - needs: - - build - - test-linux - - test-windows - - doc - secrets: inherit - uses: - ./.github/workflows/status-check.yml diff --git a/.github/workflows/build-wheel.yml b/.github/workflows/build-wheel.yml new file mode 100644 index 0000000000..e776c70ec2 --- /dev/null +++ b/.github/workflows/build-wheel.yml @@ -0,0 +1,194 @@ +# Copyright (c) 2025, NVIDIA CORPORATION & AFFILIATES. ALL RIGHTS RESERVED. +# +# SPDX-License-Identifier: Apache-2.0 + +on: + workflow_call: + inputs: + host-platform: + required: true + type: string + cuda-version: + required: true + type: string + +defaults: + run: + shell: bash --noprofile --norc -xeuo pipefail {0} + +permissions: + contents: read # This is required for actions/checkout + +jobs: + build: + strategy: + fail-fast: false + matrix: + python-version: + - "3.9" + - "3.10" + - "3.11" + - "3.12" + - "3.13" + name: py${{ matrix.python-version }} + runs-on: ${{ (inputs.host-platform == 'linux-64' && 'linux-amd64-cpu8') || + (inputs.host-platform == 'linux-aarch64' && 'linux-arm64-cpu8') || + (inputs.host-platform == 'win-64' && 'windows-2019') }} + steps: + - name: Checkout ${{ github.event.repository.name }} + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup proxy cache + uses: nv-gha-runners/setup-proxy-cache@main + continue-on-error: true + # Skip the cache on Windows nodes outside of our org. + if: ${{ inputs.host-platform != 'win-64' }} + + - name: Set up Python + if: ${{ startsWith(inputs.host-platform, 'linux') }} + id: setup-python + uses: actions/setup-python@v5 + with: + # WAR: setup-python is not relocatable... + # see https://github.com/actions/setup-python/issues/871 + python-version: "3.12" + + - name: Set up MSVC + if: ${{ startsWith(inputs.host-platform, 'win') }} + uses: ilammy/msvc-dev-cmd@v1 + + - name: Set environment variables + run: | + PYTHON_VERSION_FORMATTED=$(echo '${{ matrix.python-version }}' | tr -d '.') + if [[ "${{ inputs.host-platform }}" == linux* ]]; then + CIBW_BUILD="cp${PYTHON_VERSION_FORMATTED}-manylinux*" + REPO_DIR=$(pwd) + elif [[ "${{ inputs.host-platform }}" == win* ]]; then + CIBW_BUILD="cp${PYTHON_VERSION_FORMATTED}-win_amd64" + PWD=$(pwd) + REPO_DIR=$(cygpath -w $PWD) + fi + + echo "CUDA_BINDINGS_PARALLEL_LEVEL=$(nproc)" >> $GITHUB_ENV + CUDA_CORE_ARTIFACT_BASENAME="cuda-core-python${PYTHON_VERSION_FORMATTED}-${{ inputs.host-platform }}" + echo "CUDA_CORE_ARTIFACT_BASENAME=${CUDA_CORE_ARTIFACT_BASENAME}" >> $GITHUB_ENV + echo "CUDA_CORE_ARTIFACT_NAME=${CUDA_CORE_ARTIFACT_BASENAME}-${{ github.sha }}" >> $GITHUB_ENV + echo "CUDA_CORE_ARTIFACTS_DIR=$(realpath "$REPO_DIR/cuda_core/dist")" >> $GITHUB_ENV + CUDA_BINDINGS_ARTIFACT_BASENAME="cuda-bindings-python${PYTHON_VERSION_FORMATTED}-cuda${{ inputs.cuda-version }}-${{ inputs.host-platform }}" + echo "CUDA_BINDINGS_ARTIFACT_BASENAME=${CUDA_BINDINGS_ARTIFACT_BASENAME}" >> $GITHUB_ENV + echo "CUDA_BINDINGS_ARTIFACT_NAME=${CUDA_BINDINGS_ARTIFACT_BASENAME}-${{ github.sha }}" >> $GITHUB_ENV + echo "CUDA_BINDINGS_ARTIFACTS_DIR=$(realpath "$REPO_DIR/cuda_bindings/dist")" >> $GITHUB_ENV + echo "CIBW_BUILD=${CIBW_BUILD}" >> $GITHUB_ENV + + - name: Dump environment + run: | + env + + - name: Build cuda.core wheel + uses: pypa/cibuildwheel@faf86a6ed7efa889faf6996aa23820831055001a # v2.23.3 + env: + CIBW_BUILD: ${{ env.CIBW_BUILD }} + CIBW_ARCHS_LINUX: "native" + CIBW_BUILD_VERBOSITY: 1 + with: + package-dir: ./cuda_core/ + output-dir: ${{ env.CUDA_CORE_ARTIFACTS_DIR }} + + - name: List the cuda.core artifacts directory + run: | + if [[ "${{ inputs.host-platform }}" == win* ]]; then + export CHOWN=chown + else + export CHOWN="sudo chown" + fi + $CHOWN -R $(whoami) ${{ env.CUDA_CORE_ARTIFACTS_DIR }} + ls -lahR ${{ env.CUDA_CORE_ARTIFACTS_DIR }} + + - name: Check cuda.core wheel + run: | + pip install twine + twine check ${{ env.CUDA_CORE_ARTIFACTS_DIR }}/*.whl + + - name: Upload cuda.core build artifacts + uses: actions/upload-artifact@v4 + with: + name: ${{ env.CUDA_CORE_ARTIFACT_NAME }} + path: ${{ env.CUDA_CORE_ARTIFACTS_DIR }}/*.whl + if-no-files-found: error + + - name: Set up mini CTK + uses: ./.github/actions/fetch_ctk + continue-on-error: false + with: + host-platform: ${{ inputs.host-platform }} + cuda-version: ${{ inputs.cuda-version }} + + - name: Build cuda.bindings wheel + uses: pypa/cibuildwheel@faf86a6ed7efa889faf6996aa23820831055001a # v2.23.3 + env: + CIBW_BUILD: ${{ env.CIBW_BUILD }} + CIBW_ARCHS_LINUX: "native" + CIBW_BUILD_VERBOSITY: 1 + # CIBW mounts the host filesystem under /host + CIBW_ENVIRONMENT_LINUX: > + CUDA_PATH=/host/${{ env.CUDA_PATH }} + LIBRARY_PATH=/host/${{ env.CUDA_PATH }}/lib + CUDA_BINDINGS_PARALLEL_LEVEL=${{ env.CUDA_BINDINGS_PARALLEL_LEVEL }} + CIBW_ENVIRONMENT_WINDOWS: > + CUDA_HOME="$(cygpath -w ${{ env.CUDA_PATH }})" + LIB="${CUDA_HOME}\\lib\\x64;${LIB}" + CUDA_BINDINGS_PARALLEL_LEVEL=${{ env.CUDA_BINDINGS_PARALLEL_LEVEL }} + with: + package-dir: ./cuda_bindings/ + output-dir: ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }} + + - name: List the cuda.bindings artifacts directory + run: | + if [[ "${{ inputs.host-platform }}" == win* ]]; then + export CHOWN=chown + else + export CHOWN="sudo chown" + fi + $CHOWN -R $(whoami) ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }} + ls -lahR ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }} + + - name: Check cuda.bindings wheel + run: | + twine check ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }}/*.whl + + - name: Upload cuda.bindings build artifacts + uses: actions/upload-artifact@v4 + with: + name: ${{ env.CUDA_BINDINGS_ARTIFACT_NAME }} + path: ${{ env.CUDA_BINDINGS_ARTIFACTS_DIR }}/*.whl + if-no-files-found: error + + # We only need/want a single pure python wheel, pick linux-64 index 0. + - name: Build and check cuda-python wheel + if: ${{ strategy.job-index == 0 && inputs.host-platform == 'linux-64' }} + run: | + pushd cuda_python + pip wheel -v --no-deps . + twine check *.whl + popd + + - name: List the cuda-python artifacts directory + if: ${{ strategy.job-index == 0 && inputs.host-platform == 'linux-64' }} + run: | + if [[ "${{ inputs.host-platform }}" == win* ]]; then + export CHOWN=chown + else + export CHOWN="sudo chown" + fi + $CHOWN -R $(whoami) cuda_python/*.whl + ls -lahR cuda_python + + - name: Upload cuda-python build artifacts + if: ${{ strategy.job-index == 0 && inputs.host-platform == 'linux-64' }} + uses: actions/upload-artifact@v4 + with: + name: cuda-python-wheel + path: cuda_python/*.whl + if-no-files-found: error diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000000..9cd892c2f5 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,125 @@ +# Copyright (c) 2025, NVIDIA CORPORATION & AFFILIATES. ALL RIGHTS RESERVED. +# +# SPDX-License-Identifier: Apache-2.0 + +# Note: This name is referred to in the test job, so make sure any changes are sync'd up! +# Further this is referencing a run in the backport branch to fetch old bindings. +name: "CI" + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }} + cancel-in-progress: true + +on: + push: + branches: + - "pull-request/[0-9]+" + - "main" + +jobs: + ci-vars: + runs-on: ubuntu-latest + outputs: + CUDA_BUILD_VER: ${{ steps.get-vars.outputs.cuda_build_ver }} + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Get CUDA build version + id: get-vars + run: | + cuda_build_ver=$(jq -r .cuda.build.version ci/versions.json) + echo "cuda_build_ver=$cuda_build_ver" >> $GITHUB_OUTPUT + + build: + needs: + - ci-vars + strategy: + fail-fast: false + matrix: + host-platform: + - linux-64 + - linux-aarch64 + - win-64 + name: Build ${{ matrix.host-platform }}, CUDA ${{ needs.ci-vars.outputs.CUDA_BUILD_VER }} + if: ${{ github.repository_owner == 'nvidia' }} + secrets: inherit + uses: + ./.github/workflows/build-wheel.yml + with: + host-platform: ${{ matrix.host-platform }} + cuda-version: ${{ needs.ci-vars.outputs.CUDA_BUILD_VER }} + + test-linux: + strategy: + fail-fast: false + matrix: + host-platform: + - linux-64 + - linux-aarch64 + name: Test ${{ matrix.host-platform }} + if: ${{ github.repository_owner == 'nvidia' }} + permissions: + contents: read # This is required for actions/checkout + needs: + - ci-vars + - build + secrets: inherit + uses: + ./.github/workflows/test-wheel-linux.yml + with: + build-type: pull-request + host-platform: ${{ matrix.host-platform }} + build-ctk-ver: ${{ needs.ci-vars.outputs.CUDA_BUILD_VER }} + + test-windows: + strategy: + fail-fast: false + matrix: + host-platform: + - win-64 + name: Test ${{ matrix.host-platform }} + if: ${{ github.repository_owner == 'nvidia' }} + permissions: + contents: read # This is required for actions/checkout + needs: + - ci-vars + - build + secrets: inherit + uses: + ./.github/workflows/test-wheel-windows.yml + with: + build-type: pull-request + host-platform: ${{ matrix.host-platform }} + build-ctk-ver: ${{ needs.ci-vars.outputs.CUDA_BUILD_VER }} + + doc: + name: Docs + if: ${{ github.repository_owner == 'nvidia' }} + # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages + permissions: + id-token: write + contents: write + pull-requests: write + needs: + - ci-vars + - build + secrets: inherit + uses: + ./.github/workflows/build-docs.yml + with: + build-ctk-ver: ${{ needs.ci-vars.outputs.CUDA_BUILD_VER }} + + checks: + name: Check job status + permissions: + checks: read + needs: + - build + - test-linux + - test-windows + - doc + secrets: inherit + uses: + ./.github/workflows/status-check.yml diff --git a/.github/workflows/test-wheel-linux.yml b/.github/workflows/test-wheel-linux.yml index 2761f8c40b..5b6fb43e58 100644 --- a/.github/workflows/test-wheel-linux.yml +++ b/.github/workflows/test-wheel-linux.yml @@ -7,32 +7,128 @@ name: "CI: Test wheels" on: workflow_call: inputs: - host-platform: + build-type: type: string required: true - python-version: + host-platform: type: string required: true build-ctk-ver: type: string required: true - cuda-version: - type: string - required: true - local-ctk: - type: string - required: true - runner: + matrix_filter: type: string - required: true + default: "." + +defaults: + run: + shell: bash --noprofile --norc -xeuo pipefail {0} jobs: + compute-matrix: + runs-on: ubuntu-latest + env: + BUILD_TYPE: ${{ inputs.build-type }} + ARCH: ${{ (inputs.host-platform == 'linux-64' && 'amd64') || + (inputs.host-platform == 'linux-aarch64' && 'arm64') }} + outputs: + MATRIX: ${{ steps.compute-matrix.outputs.MATRIX }} + steps: + - name: Validate Test Type + run: | + if [[ "$BUILD_TYPE" != "pull-request" ]] && [[ "$BUILD_TYPE" != "nightly" ]] && [[ "$BUILD_TYPE" != "branch" ]]; then + echo "Invalid build type! Must be one of 'nightly', 'pull-request', or 'branch'." + exit 1 + fi + - name: Compute Python Test Matrix + id: compute-matrix + run: | + # Set a default GPU based upon architecture. + gpu="l4" + if [[ "${ARCH}" == "arm64" ]]; then + gpu="a100" + fi + # Add a special entry for the H100 runner on amd64. + special_runner="" + if [[ "${ARCH}" == "amd64" ]]; then + special_runner="- { ARCH: ${ARCH}, PY_VER: '3.13', CUDA_VER: '12.9.0', LOCAL_CTK: '1', GPU: 'H100', DRIVER: 'latest' }" + fi + + # Please keep the matrices sorted in ascending order by the following: + # + # [PY_VER, CUDA_VER, LOCAL_CTK, GPU, DRIVER] + # + # Note that DRIVER: `earliest` does not work with CUDA 12.9.0 and LOCAL_CTK: 0 does not work with CUDA 12.0.1. + # + export MATRICES=" + pull-request: + - { ARCH: ${ARCH}, PY_VER: '3.9', CUDA_VER: '11.8.0', LOCAL_CTK: '0', GPU: ${gpu}, DRIVER: 'earliest' } + - { ARCH: ${ARCH}, PY_VER: '3.9', CUDA_VER: '12.0.1', LOCAL_CTK: '1', GPU: ${gpu}, DRIVER: 'latest' } + - { ARCH: ${ARCH}, PY_VER: '3.9', CUDA_VER: '12.9.0', LOCAL_CTK: '0', GPU: ${gpu}, DRIVER: 'latest' } + - { ARCH: ${ARCH}, PY_VER: '3.10', CUDA_VER: '11.8.0', LOCAL_CTK: '1', GPU: ${gpu}, DRIVER: 'earliest' } + - { ARCH: ${ARCH}, PY_VER: '3.10', CUDA_VER: '12.9.0', LOCAL_CTK: '1', GPU: ${gpu}, DRIVER: 'latest' } + - { ARCH: ${ARCH}, PY_VER: '3.11', CUDA_VER: '11.8.0', LOCAL_CTK: '1', GPU: ${gpu}, DRIVER: 'latest' } + - { ARCH: ${ARCH}, PY_VER: '3.11', CUDA_VER: '12.9.0', LOCAL_CTK: '0', GPU: ${gpu}, DRIVER: 'latest' } + - { ARCH: ${ARCH}, PY_VER: '3.12', CUDA_VER: '12.0.1', LOCAL_CTK: '1', GPU: ${gpu}, DRIVER: 'latest' } + - { ARCH: ${ARCH}, PY_VER: '3.12', CUDA_VER: '12.9.0', LOCAL_CTK: '1', GPU: ${gpu}, DRIVER: 'latest' } + - { ARCH: ${ARCH}, PY_VER: '3.13', CUDA_VER: '11.8.0', LOCAL_CTK: '0', GPU: ${gpu}, DRIVER: 'latest' } + - { ARCH: ${ARCH}, PY_VER: '3.13', CUDA_VER: '12.0.1', LOCAL_CTK: '1', GPU: ${gpu}, DRIVER: 'latest' } + - { ARCH: ${ARCH}, PY_VER: '3.13', CUDA_VER: '12.9.0', LOCAL_CTK: '0', GPU: ${gpu}, DRIVER: 'latest' } + ${special_runner} + nightly: + - { ARCH: ${ARCH}, PY_VER: '3.9', CUDA_VER: '11.8.0', LOCAL_CTK: '0', GPU: ${gpu}, DRIVER: 'earliest' } + - { ARCH: ${ARCH}, PY_VER: '3.9', CUDA_VER: '11.8.0', LOCAL_CTK: '1', GPU: ${gpu}, DRIVER: 'latest' } + - { ARCH: ${ARCH}, PY_VER: '3.9', CUDA_VER: '12.0.1', LOCAL_CTK: '1', GPU: ${gpu}, DRIVER: 'latest' } + - { ARCH: ${ARCH}, PY_VER: '3.9', CUDA_VER: '12.9.0', LOCAL_CTK: '0', GPU: ${gpu}, DRIVER: 'latest' } + - { ARCH: ${ARCH}, PY_VER: '3.9', CUDA_VER: '12.9.0', LOCAL_CTK: '1', GPU: ${gpu}, DRIVER: 'latest' } + - { ARCH: ${ARCH}, PY_VER: '3.10', CUDA_VER: '11.8.0', LOCAL_CTK: '0', GPU: ${gpu}, DRIVER: 'earliest' } + - { ARCH: ${ARCH}, PY_VER: '3.10', CUDA_VER: '11.8.0', LOCAL_CTK: '1', GPU: ${gpu}, DRIVER: 'latest' } + - { ARCH: ${ARCH}, PY_VER: '3.10', CUDA_VER: '12.0.1', LOCAL_CTK: '1', GPU: ${gpu}, DRIVER: 'latest' } + - { ARCH: ${ARCH}, PY_VER: '3.10', CUDA_VER: '12.9.0', LOCAL_CTK: '0', GPU: ${gpu}, DRIVER: 'latest' } + - { ARCH: ${ARCH}, PY_VER: '3.10', CUDA_VER: '12.9.0', LOCAL_CTK: '1', GPU: ${gpu}, DRIVER: 'latest' } + - { ARCH: ${ARCH}, PY_VER: '3.11', CUDA_VER: '11.8.0', LOCAL_CTK: '0', GPU: ${gpu}, DRIVER: 'earliest' } + - { ARCH: ${ARCH}, PY_VER: '3.11', CUDA_VER: '11.8.0', LOCAL_CTK: '1', GPU: ${gpu}, DRIVER: 'latest' } + - { ARCH: ${ARCH}, PY_VER: '3.11', CUDA_VER: '12.0.1', LOCAL_CTK: '1', GPU: ${gpu}, DRIVER: 'latest' } + - { ARCH: ${ARCH}, PY_VER: '3.11', CUDA_VER: '12.9.0', LOCAL_CTK: '0', GPU: ${gpu}, DRIVER: 'latest' } + - { ARCH: ${ARCH}, PY_VER: '3.11', CUDA_VER: '12.9.0', LOCAL_CTK: '1', GPU: ${gpu}, DRIVER: 'latest' } + - { ARCH: ${ARCH}, PY_VER: '3.12', CUDA_VER: '11.8.0', LOCAL_CTK: '0', GPU: ${gpu}, DRIVER: 'earliest' } + - { ARCH: ${ARCH}, PY_VER: '3.12', CUDA_VER: '11.8.0', LOCAL_CTK: '1', GPU: ${gpu}, DRIVER: 'latest' } + - { ARCH: ${ARCH}, PY_VER: '3.12', CUDA_VER: '12.0.1', LOCAL_CTK: '1', GPU: ${gpu}, DRIVER: 'latest' } + - { ARCH: ${ARCH}, PY_VER: '3.12', CUDA_VER: '12.9.0', LOCAL_CTK: '0', GPU: ${gpu}, DRIVER: 'latest' } + - { ARCH: ${ARCH}, PY_VER: '3.12', CUDA_VER: '12.9.0', LOCAL_CTK: '1', GPU: ${gpu}, DRIVER: 'latest' } + - { ARCH: ${ARCH}, PY_VER: '3.13', CUDA_VER: '11.8.0', LOCAL_CTK: '0', GPU: ${gpu}, DRIVER: 'earliest' } + - { ARCH: ${ARCH}, PY_VER: '3.13', CUDA_VER: '11.8.0', LOCAL_CTK: '1', GPU: ${gpu}, DRIVER: 'latest' } + - { ARCH: ${ARCH}, PY_VER: '3.13', CUDA_VER: '12.0.1', LOCAL_CTK: '1', GPU: ${gpu}, DRIVER: 'latest' } + - { ARCH: ${ARCH}, PY_VER: '3.13', CUDA_VER: '12.9.0', LOCAL_CTK: '0', GPU: ${gpu}, DRIVER: 'latest' } + - { ARCH: ${ARCH}, PY_VER: '3.13', CUDA_VER: '12.9.0', LOCAL_CTK: '1', GPU: ${gpu}, DRIVER: 'latest' } + ${special_runner} + " + + # Use the nightly matrix for branch tests + MATRIX_TYPE="${BUILD_TYPE}" + if [[ "${MATRIX_TYPE}" == "branch" ]]; then + MATRIX_TYPE="nightly" + fi + export MATRIX_TYPE + TEST_MATRIX=$(yq -n 'env(MATRICES) | .[strenv(MATRIX_TYPE)]') + export TEST_MATRIX + + MATRIX="$( + yq -n -o json 'env(TEST_MATRIX)' | \ + jq -c '${{ inputs.matrix_filter }} | if (. | length) > 0 then {include: .} else "Error: Empty matrix\n" | halt_error(1) end' + )" + + echo "MATRIX=${MATRIX}" | tee --append "${GITHUB_OUTPUT}" + test: + name: py${{ matrix.PY_VER }}, ${{ matrix.CUDA_VER }}, ${{ (matrix.LOCAL_CTK == '1' && 'local') || 'wheels' }}, GPU ${{ matrix.GPU }} + needs: compute-matrix + strategy: + fail-fast: false + matrix: ${{ fromJSON(needs.compute-matrix.outputs.MATRIX) }} + runs-on: "linux-${{ matrix.ARCH }}-gpu-${{ matrix.GPU }}-${{ matrix.DRIVER }}-1" # The build stage could fail but we want the CI to keep moving. if: ${{ github.repository_owner == 'nvidia' && !cancelled() }} - runs-on: ${{ (inputs.runner == 'default' && inputs.host-platform == 'linux-64' && 'linux-amd64-gpu-v100-latest-1') || - (inputs.runner == 'default' && inputs.host-platform == 'linux-aarch64' && 'linux-arm64-gpu-a100-latest-1') || - (inputs.runner == 'H100' && 'linux-amd64-gpu-h100-latest-1') }} # Our self-hosted runners require a container # TODO: use a different (nvidia?) container container: @@ -40,9 +136,6 @@ jobs: image: ubuntu:22.04 env: NVIDIA_VISIBLE_DEVICES: ${{ env.NVIDIA_VISIBLE_DEVICES }} - defaults: - run: - shell: bash --noprofile --norc -xeuo pipefail {0} steps: - name: Ensure GPU is working run: nvidia-smi @@ -62,7 +155,7 @@ jobs: - name: Set environment variables run: | - PYTHON_VERSION_FORMATTED=$(echo '${{ inputs.python-version }}' | tr -d '.') + PYTHON_VERSION_FORMATTED=$(echo '${{ matrix.PY_VER }}' | tr -d '.') if [[ "${{ inputs.host-platform }}" == linux* ]]; then REPO_DIR=$(pwd) elif [[ "${{ inputs.host-platform }}" == win* ]]; then @@ -71,14 +164,14 @@ jobs: fi BUILD_CUDA_MAJOR="$(cut -d '.' -f 1 <<< ${{ inputs.build-ctk-ver }})" - TEST_CUDA_MAJOR="$(cut -d '.' -f 1 <<< ${{ inputs.cuda-version }})" + TEST_CUDA_MAJOR="$(cut -d '.' -f 1 <<< ${{ matrix.CUDA_VER }})" if [[ $BUILD_CUDA_MAJOR != $TEST_CUDA_MAJOR ]]; then SKIP_CUDA_BINDINGS_TEST=1 SKIP_CUDA_CORE_CYTHON_TEST=0 else SKIP_CUDA_BINDINGS_TEST=0 BUILD_CUDA_MINOR="$(cut -d '.' -f 2 <<< ${{ inputs.build-ctk-ver }})" - TEST_CUDA_MINOR="$(cut -d '.' -f 2 <<< ${{ inputs.cuda-version }})" + TEST_CUDA_MINOR="$(cut -d '.' -f 2 <<< ${{ matrix.CUDA_VER }})" if [[ $BUILD_CUDA_MINOR != $TEST_CUDA_MINOR ]]; then SKIP_CUDA_CORE_CYTHON_TEST=1 else @@ -179,21 +272,21 @@ jobs: pwd ls -lahR $CUDA_CORE_ARTIFACTS_DIR - - name: Set up Python ${{ inputs.python-version }} + - name: Set up Python ${{ matrix.PY_VER }} uses: actions/setup-python@v5 with: - python-version: ${{ inputs.python-version }} + python-version: ${{ matrix.PY_VER }} env: # we use self-hosted runners on which setup-python behaves weirdly... AGENT_TOOLSDIRECTORY: "/opt/hostedtoolcache" - name: Set up mini CTK - if: ${{ inputs.local-ctk == '1' }} + if: ${{ matrix.LOCAL_CTK == '1' }} uses: ./.github/actions/fetch_ctk continue-on-error: false with: host-platform: ${{ inputs.host-platform }} - cuda-version: ${{ inputs.cuda-version }} + cuda-version: ${{ matrix.CUDA_VER }} - name: Set up latest cuda_sanitizer_api if: ${{ env.SETUP_SANITIZER == '1' }} @@ -223,7 +316,7 @@ jobs: if: ${{ env.SKIP_CUDA_BINDINGS_TEST == '0' }} run: | pushd "${CUDA_BINDINGS_ARTIFACTS_DIR}" - if [[ "${{ inputs.local-ctk }}" == 1 ]]; then + if [[ "${{ matrix.LOCAL_CTK }}" == 1 ]]; then ls $CUDA_PATH pip install *.whl else @@ -237,7 +330,7 @@ jobs: # It is a bit convoluted to run the Cython tests against CTK wheels, # so let's just skip them. - if [[ "${{ inputs.local-ctk }}" == 1 ]]; then + if [[ "${{ matrix.LOCAL_CTK }}" == 1 ]]; then if [[ "${{ inputs.host-platform }}" == linux* ]]; then bash tests/cython/build_tests.sh elif [[ "${{ inputs.host-platform }}" == win* ]]; then @@ -254,14 +347,14 @@ jobs: # If mismatch: cuda.bindings is installed from the backport branch. if [[ "${SKIP_CUDA_BINDINGS_TEST}" == 1 ]]; then pushd "${CUDA_BINDINGS_ARTIFACTS_DIR}" - if [[ "${{ inputs.local-ctk }}" == 1 ]]; then + if [[ "${{ matrix.LOCAL_CTK }}" == 1 ]]; then pip install *.whl else pip install $(ls *.whl)[all] fi popd fi - TEST_CUDA_MAJOR="$(cut -d '.' -f 1 <<< ${{ inputs.cuda-version }})" + TEST_CUDA_MAJOR="$(cut -d '.' -f 1 <<< ${{ matrix.CUDA_VER }})" pushd "${CUDA_CORE_ARTIFACTS_DIR}" pip install $(ls *.whl)["cu${TEST_CUDA_MAJOR}"] popd @@ -274,7 +367,7 @@ jobs: # so let's just skip them. Also, currently our CI always installs the # latest bindings (from either major version). This is not compatible # with the test requirements. - if [[ "${{ inputs.local-ctk }}" == 1 && "${SKIP_CUDA_CORE_CYTHON_TEST}" == 0 ]]; then + if [[ "${{ matrix.LOCAL_CTK }}" == 1 && "${SKIP_CUDA_CORE_CYTHON_TEST}" == 0 ]]; then pip install cython setuptools # setuptools needed starting PY312 if [[ "${{ inputs.host-platform }}" == linux* ]]; then bash tests/cython/build_tests.sh @@ -288,7 +381,7 @@ jobs: - name: Ensure cuda-python installable run: | - if [[ "${{ inputs.local-ctk }}" == 1 ]]; then + if [[ "${{ matrix.LOCAL_CTK }}" == 1 ]]; then pip install cuda_python*.whl else pip install $(ls cuda_python*.whl)[all] diff --git a/.github/workflows/test-wheel-windows.yml b/.github/workflows/test-wheel-windows.yml index c741fe1616..818fb903f3 100644 --- a/.github/workflows/test-wheel-windows.yml +++ b/.github/workflows/test-wheel-windows.yml @@ -7,30 +7,82 @@ name: "CI: Test wheels" on: workflow_call: inputs: - host-platform: + build-type: type: string required: true - python-version: + host-platform: type: string required: true build-ctk-ver: type: string required: true - cuda-version: - type: string - required: true - local-ctk: + matrix_filter: type: string - required: true - runner: - type: string - required: true + default: "." jobs: + compute-matrix: + runs-on: ubuntu-latest + defaults: + run: + shell: bash --noprofile --norc -xeuo pipefail {0} + env: + BUILD_TYPE: ${{ inputs.build-type }} + ARCH: ${{ (inputs.host-platform == 'win-64' && 'amd64') }} + outputs: + MATRIX: ${{ steps.compute-matrix.outputs.MATRIX }} + steps: + - name: Validate Test Type + run: | + if [[ "$BUILD_TYPE" != "pull-request" ]] && [[ "$BUILD_TYPE" != "nightly" ]] && [[ "$BUILD_TYPE" != "branch" ]]; then + echo "Invalid build type! Must be one of 'nightly', 'pull-request', or 'branch'." + exit 1 + fi + - name: Compute Python Test Matrix + id: compute-matrix + run: | + # Please keep the matrices sorted in ascending order by the following: + # + # [PY_VER, CUDA_VER, LOCAL_CTK] + # + export MATRICES=" + pull-request: + - { ARCH: ${ARCH}, PY_VER: '3.12', CUDA_VER: '11.8.0', LOCAL_CTK: '0' } + - { ARCH: ${ARCH}, PY_VER: '3.12', CUDA_VER: '11.8.0', LOCAL_CTK: '1' } + - { ARCH: ${ARCH}, PY_VER: '3.12', CUDA_VER: '12.9.0', LOCAL_CTK: '0' } + - { ARCH: ${ARCH}, PY_VER: '3.12', CUDA_VER: '12.9.0', LOCAL_CTK: '1' } + nightly: + - { ARCH: ${ARCH}, PY_VER: '3.12', CUDA_VER: '11.8.0', LOCAL_CTK: '0' } + - { ARCH: ${ARCH}, PY_VER: '3.12', CUDA_VER: '11.8.0', LOCAL_CTK: '1' } + - { ARCH: ${ARCH}, PY_VER: '3.12', CUDA_VER: '12.9.0', LOCAL_CTK: '0' } + - { ARCH: ${ARCH}, PY_VER: '3.12', CUDA_VER: '12.9.0', LOCAL_CTK: '1' } + " + + # Use the nightly matrix for branch tests + MATRIX_TYPE="${BUILD_TYPE}" + if [[ "${MATRIX_TYPE}" == "branch" ]]; then + MATRIX_TYPE="nightly" + fi + export MATRIX_TYPE + TEST_MATRIX=$(yq -n 'env(MATRICES) | .[strenv(MATRIX_TYPE)]') + export TEST_MATRIX + + MATRIX="$( + yq -n -o json 'env(TEST_MATRIX)' | \ + jq -c '${{ inputs.matrix_filter }} | if (. | length) > 0 then {include: .} else "Error: Empty matrix\n" | halt_error(1) end' + )" + + echo "MATRIX=${MATRIX}" | tee --append "${GITHUB_OUTPUT}" + test: + name: py${{ matrix.PY_VER }}, ${{ matrix.CUDA_VER }}, ${{ (matrix.LOCAL_CTK == '1' && 'local') || 'wheels' }} # The build stage could fail but we want the CI to keep moving. + needs: compute-matrix + strategy: + fail-fast: false + matrix: ${{ fromJSON(needs.compute-matrix.outputs.MATRIX) }} if: ${{ github.repository_owner == 'nvidia' && !cancelled() }} - runs-on: ${{ (inputs.runner == 'default' && inputs.host-platform == 'win-64' && 'cuda-python-windows-gpu-github') }} + runs-on: 'cuda-python-windows-gpu-github' steps: - name: Checkout ${{ github.event.repository.name }} uses: actions/checkout@v4 @@ -46,11 +98,11 @@ jobs: - name: Set environment variables run: | - $PYTHON_VERSION_FORMATTED = '${{ inputs.python-version }}' -replace '\.' + $PYTHON_VERSION_FORMATTED = '${{ matrix.PY_VER }}' -replace '\.' $REPO_DIR = $PWD.Path $BUILD_CUDA_MAJOR = '${{ inputs.build-ctk-ver }}' -split '\.' | Select-Object -First 1 - $TEST_CUDA_MAJOR = '${{ inputs.cuda-version }}' -split '\.' | Select-Object -First 1 + $TEST_CUDA_MAJOR = '${{ matrix.CUDA_VER }}' -split '\.' | Select-Object -First 1 if ($BUILD_CUDA_MAJOR -ne $TEST_CUDA_MAJOR) { $SKIP_CUDA_BINDINGS_TEST = 1 } else { @@ -100,7 +152,7 @@ jobs: - name: Install Git for Windows # the GPU runner image does not have Git Bash pre-installed... - if: ${{ inputs.local-ctk == '1' }} + if: ${{ matrix.LOCAL_CTK == '1' }} env: # doesn't seem there's an easy way to avoid hard-coding it? GFW_EXE_URL: https://github.com/git-for-windows/git/releases/download/v2.49.0.windows.1/PortableGit-2.49.0-64-bit.7z.exe @@ -115,7 +167,7 @@ jobs: - name: Install zstd # the GPU runner image does not have zstd pre-installed... and it's needed by actions/cache - if: ${{ inputs.local-ctk == '1' }} + if: ${{ matrix.LOCAL_CTK == '1' }} env: # doesn't seem there's an easy way to avoid hard-coding it? ZSTD_URL: https://github.com/facebook/zstd/releases/download/v1.5.7/zstd-v1.5.7-win64.zip @@ -174,24 +226,24 @@ jobs: Get-Location Get-ChildItem -Recurse -Force $env:CUDA_CORE_ARTIFACTS_DIR | Select-Object Mode, LastWriteTime, Length, FullName - - name: Set up Python ${{ inputs.python-version }} + - name: Set up Python ${{ matrix.PY_VER }} uses: actions/setup-python@v5 with: - python-version: ${{ inputs.python-version }} + python-version: ${{ matrix.PY_VER }} - name: Set up mini CTK - if: ${{ inputs.local-ctk == '1' }} + if: ${{ matrix.LOCAL_CTK == '1' }} uses: ./.github/actions/fetch_ctk continue-on-error: false with: host-platform: ${{ inputs.host-platform }} - cuda-version: ${{ inputs.cuda-version }} + cuda-version: ${{ matrix.CUDA_VER }} - name: Run cuda.bindings tests if: ${{ env.SKIP_CUDA_BINDINGS_TEST == '0' }} run: | Push-Location $env:CUDA_BINDINGS_ARTIFACTS_DIR - if ('${{ inputs.local-ctk }}' -eq '1') { + if ('${{ matrix.LOCAL_CTK }}' -eq '1') { Get-ChildItem $env:CUDA_PATH echo $PATH pip install (Get-ChildItem -Filter *.whl).FullName @@ -212,14 +264,14 @@ jobs: # If mismatch: cuda.bindings is installed from the backport branch. if ($env:SKIP_CUDA_BINDINGS_TEST -eq '1') { Push-Location $env:CUDA_BINDINGS_ARTIFACTS_DIR - if ('${{ inputs.local-ctk }}' -eq '1') { + if ('${{ matrix.LOCAL_CTK }}' -eq '1') { pip install (Get-ChildItem -Filter *.whl).FullName } else { pip install "$((Get-ChildItem -Filter *.whl).FullName)[all]" } Pop-Location } - $TEST_CUDA_MAJOR = '${{ inputs.cuda-version }}' -split '\.' | Select-Object -First 1 + $TEST_CUDA_MAJOR = '${{ matrix.CUDA_VER }}' -split '\.' | Select-Object -First 1 Push-Location $env:CUDA_CORE_ARTIFACTS_DIR pip install "$((Get-ChildItem -Filter *.whl).FullName)[cu${TEST_CUDA_MAJOR}]" Pop-Location @@ -231,7 +283,7 @@ jobs: - name: Ensure cuda-python installable run: | - if ('${{ inputs.local-ctk }}' -eq '1') { + if ('${{ matrix.LOCAL_CTK }}' -eq '1') { pip install (Get-ChildItem -Filter cuda_python*.whl).FullName } else { pip install "$((Get-ChildItem -Filter cuda_python*.whl).FullName)[all]" diff --git a/ci/versions.json b/ci/versions.json new file mode 100644 index 0000000000..5608eeb1d9 --- /dev/null +++ b/ci/versions.json @@ -0,0 +1,7 @@ +{ + "cuda": { + "build": { + "version": "12.9.0" + } + } +}