From c0ce522101cdd261f56efe5647fe34dfeca7b5a2 Mon Sep 17 00:00:00 2001 From: James Lamb Date: Mon, 2 Mar 2026 09:27:13 -0600 Subject: [PATCH 01/21] enforce a floor on libnvjitlink, test wheels against older CTKs --- .github/workflows/pr.yaml | 468 +----------------- ci/test_wheel_cuvs.sh | 22 +- conda/recipes/libcuvs/recipe.yaml | 8 +- .../cuvs/detail/jit_lto/nvjitlink_helper.hpp | 31 ++ cpp/src/detail/jit_lto/nvjitlink_helper.cpp | 26 + dependencies.yaml | 73 ++- python/libcuvs/pyproject.toml | 3 +- 7 files changed, 156 insertions(+), 475 deletions(-) create mode 100644 cpp/include/cuvs/detail/jit_lto/nvjitlink_helper.hpp create mode 100644 cpp/src/detail/jit_lto/nvjitlink_helper.cpp diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 8007b5d6ba..76c8cff3da 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -9,469 +9,16 @@ concurrency: jobs: pr-builder: needs: - - check-nightly-ci - - changed-files - - checks - - conda-cpp-build - - conda-cpp-tests - - conda-cpp-checks - - conda-python-build - - conda-python-tests - - rocky8-clib-standalone-build - - rocky8-clib-tests - - conda-java-build-and-tests - - rust-build - - go-build - - docs-build - wheel-build-libcuvs - wheel-build-cuvs - wheel-tests-cuvs - devcontainer - - telemetry-setup secrets: inherit uses: rapidsai/shared-workflows/.github/workflows/pr-builder.yaml@main if: always() with: needs: ${{ toJSON(needs) }} - telemetry-setup: - continue-on-error: true - runs-on: ubuntu-latest - env: - OTEL_SERVICE_NAME: 'pr-cuvs' - steps: - - name: Telemetry setup - if: ${{ vars.TELEMETRY_ENABLED == 'true' }} - uses: rapidsai/shared-actions/telemetry-dispatch-stash-base-env-vars@main - check-nightly-ci: - runs-on: ubuntu-latest - permissions: - actions: read - id-token: write - env: - GH_TOKEN: ${{ github.token }} - steps: - - name: Get PR Info - id: get-pr-info - uses: nv-gha-runners/get-pr-info@main - - name: Check if nightly CI is passing - uses: rapidsai/shared-actions/check_nightly_success/dispatch@main - with: - repo: ${{ github.repository }} - target-branch: ${{ fromJSON(steps.get-pr-info.outputs.pr-info).base.ref }} - max-days-without-success: 30 - changed-files: - needs: telemetry-setup - secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/changed-files.yaml@main - with: - files_yaml: | - build_docs: - - '**' - - '!.devcontainer/**' - - '!.github/CODEOWNERS' - - '!.github/ISSUE_TEMPLATE/**' - - '!.github/PULL_REQUEST_TEMPLATE.md' - - '!.github/copy-pr-bot.yaml' - - '!.github/labeler.yml' - - '!.github/ops-bot.yaml' - - '!.github/release.yml' - - '!.github/workflows/publish-rust.yaml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!.shellcheckrc' - - '!Dockerfile' - - '!ci/build_wheel*.sh' - - '!ci/check_style.sh' - - '!ci/release/update-version.sh' - - '!ci/run*.sh' - - '!ci/test*.sh' - - '!ci/validate_wheel.sh' - - '!thirdparty/LICENSES/**' - test_cpp: - - '**' - - '!.devcontainer/**' - - '!.github/CODEOWNERS' - - '!.github/ISSUE_TEMPLATE/**' - - '!.github/PULL_REQUEST_TEMPLATE.md' - - '!.github/copy-pr-bot.yaml' - - '!.github/labeler.yml' - - '!.github/ops-bot.yaml' - - '!.github/release.yml' - - '!.github/workflows/publish-rust.yaml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!.shellcheckrc' - - '!Dockerfile' - - '!README.md' - - '!ci/build_docs.sh' - - '!ci/build_python.sh' - - '!ci/build_wheel*.sh' - - '!ci/check_style.sh' - - '!ci/release/update-version.sh' - - '!ci/run_cuvs_pytests.sh' - - '!ci/test_java.sh' - - '!ci/test_python.sh' - - '!ci/test_wheel_cuvs.sh' - - '!ci/validate_wheel.sh' - - '!docs/**' - - '!go/**' - - '!img/**' - - '!java/**' - - '!notebooks/**' - - '!python/**' - - '!rust/**' - - '!thirdparty/LICENSES/**' - test_java: - - '**' - - '!.devcontainer/**' - - '!.github/CODEOWNERS' - - '!.github/ISSUE_TEMPLATE/**' - - '!.github/PULL_REQUEST_TEMPLATE.md' - - '!.github/copy-pr-bot.yaml' - - '!.github/labeler.yml' - - '!.github/ops-bot.yaml' - - '!.github/release.yml' - - '!.github/workflows/publish-rust.yaml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!.shellcheckrc' - - '!ci/build_docs.sh' - - '!ci/build_go.sh' - - '!ci/build_python.sh' - - '!ci/build_rust.sh' - - '!ci/build_wheel*.sh' - - '!ci/checkstyle.sh' - - '!ci/run_cuvs_pytests.sh' - - '!ci/test_cpp.sh' - - '!ci/test_python.sh' - - '!ci/test_wheel_cuvs.sh' - - '!ci/validate_wheel.sh' - - '!Dockerfile' - - '!docs/**' - - '!img/**' - - '!notebooks/**' - - '!python/**' - - '!rust/**' - - '!go/**' - - '!thirdparty/LICENSES/**' - test_python_conda: - - '**' - - '!.devcontainer/**' - - '!.github/CODEOWNERS' - - '!.github/ISSUE_TEMPLATE/**' - - '!.github/PULL_REQUEST_TEMPLATE.md' - - '!.github/copy-pr-bot.yaml' - - '!.github/labeler.yml' - - '!.github/ops-bot.yaml' - - '!.github/release.yml' - - '!.github/workflows/publish-rust.yaml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!.shellcheckrc' - - '!ci/build_go.sh' - - '!ci/build_java.sh' - - '!ci/build_rust.sh' - - '!ci/check_style.sh' - - '!ci/release/update-version.sh' - - '!ci/run_ctests.sh' - - '!ci/test_cpp.sh' - - '!ci/test_java.sh' - - '!ci/test_standalone_c.sh' - - '!ci/test_wheel_cuvs.sh' - - '!ci/validate_wheel.sh' - - '!cpp/.clang-format' - - '!cpp/.clang-tidy' - - '!cpp/doxygen/**' - - '!Dockerfile' - - '!README.md' - - '!docs/**' - - '!go/**' - - '!img/**' - - '!java/**' - - '!notebooks/**' - - '!rust/**' - - '!thirdparty/LICENSES/**' - test_python_wheels: - - '**' - - '!.devcontainer/**' - - '!.github/CODEOWNERS' - - '!.github/ISSUE_TEMPLATE/**' - - '!.github/PULL_REQUEST_TEMPLATE.md' - - '!.github/copy-pr-bot.yaml' - - '!.github/labeler.yml' - - '!.github/ops-bot.yaml' - - '!.github/release.yml' - - '!.github/workflows/publish-rust.yaml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!.shellcheckrc' - - '!ci/build_cpp.sh' - - '!ci/build_docs.sh' - - '!ci/build_go.sh' - - '!ci/build_java.sh' - - '!ci/build_python.sh' - - '!ci/build_rust.sh' - - '!ci/build_standalone_c.sh' - - '!ci/check_style.sh' - - '!ci/release/update-version.sh' - - '!ci/run_ctests.sh' - - '!ci/test_cpp.sh' - - '!ci/test_java.sh' - - '!ci/test_python.sh' - - '!ci/test_standalone_c.sh' - - '!ci/validate_wheel.sh' - - '!Dockerfile' - - '!README.md' - - '!conda/**' - - '!cpp/.clang-format' - - '!cpp/.clang-tidy' - - '!cpp/doxygen/**' - - '!docs/**' - - '!java/**' - - '!go/**' - - '!img/**' - - '!notebooks/**' - - '!rust/**' - - '!thirdparty/LICENSES/**' - test_rust: - - '**' - - '!.devcontainer/**' - - '!.github/CODEOWNERS' - - '!.github/ISSUE_TEMPLATE/**' - - '!.github/PULL_REQUEST_TEMPLATE.md' - - '!.github/copy-pr-bot.yaml' - - '!.github/labeler.yml' - - '!.github/ops-bot.yaml' - - '!.github/release.yml' - - '!.github/workflows/publish-rust.yaml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!.shellcheckrc' - - '!Dockerfile' - - '!README.md' - - '!ci/build_docs.sh' - - '!ci/build_go.sh' - - '!ci/build_java.sh' - - '!ci/build_python.sh' - - '!ci/build_wheel*.sh' - - '!ci/check_style.sh' - - '!ci/release/update-version.sh' - - '!ci/run_ctests.sh' - - '!ci/run_cuvs_pytests.sh' - - '!ci/test_cpp.sh' - - '!ci/test_java.sh' - - '!ci/test_python.sh' - - '!ci/test_wheel_cuvs.sh' - - '!ci/validate_wheel.sh' - - '!docs/**' - - '!go/**' - - '!img/**' - - '!java/**' - - '!notebooks/**' - - '!python/**' - - '!thirdparty/LICENSES/**' - test_go: - - '**' - - '!.devcontainer/**' - - '!.github/CODEOWNERS' - - '!.github/ISSUE_TEMPLATE/**' - - '!.github/PULL_REQUEST_TEMPLATE.md' - - '!.github/copy-pr-bot.yaml' - - '!.github/labeler.yml' - - '!.github/ops-bot.yaml' - - '!.github/release.yml' - - '!.github/workflows/publish-rust.yaml' - - '!.github/workflows/trigger-breaking-change-alert.yaml' - - '!.pre-commit-config.yaml' - - '!.shellcheckrc' - - '!Dockerfile' - - '!README.md' - - '!ci/build_docs.sh' - - '!ci/build_java.sh' - - '!ci/build_python.sh' - - '!ci/build_rust.sh' - - '!ci/build_wheel*.sh' - - '!ci/check_style.sh' - - '!ci/release/update-version.sh' - - '!ci/run_ctests.sh' - - '!ci/run_cuvs_pytests.sh' - - '!ci/test_cpp.sh' - - '!ci/test_java.sh' - - '!ci/test_python.sh' - - '!ci/test_standalone_c.sh' - - '!ci/test_wheel_cuvs.sh' - - '!ci/validate_wheel.sh' - - '!docs/**' - - '!img/**' - - '!java/**' - - '!notebooks/**' - - '!python/**' - - '!rust/**' - - '!thirdparty/LICENSES/**' - checks: - needs: telemetry-setup - secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/checks.yaml@main - with: - enable_check_generated_files: false - ignored_pr_jobs: "telemetry-summarize" - conda-cpp-build: - needs: checks - secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-build.yaml@main - with: - build_type: pull-request - node_type: cpu16 - script: ci/build_cpp.sh - conda-cpp-tests: - needs: [conda-cpp-build, changed-files] - secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-tests.yaml@main - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp - with: - build_type: pull-request - script: ci/test_cpp.sh - conda-cpp-checks: - needs: conda-cpp-build - secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-post-build-checks.yaml@main - with: - build_type: pull-request - symbol_exclusions: (void (thrust::|cub::)) - conda-python-build: - needs: conda-cpp-build - secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/conda-python-build.yaml@main - with: - build_type: pull-request - script: ci/build_python.sh - # Build a conda package for each CUDA x ARCH x minimum supported Python version - matrix_filter: group_by({CUDA_VER, ARCH}) | map(min_by(.PY_VER | split(".") | map(tonumber))) - conda-python-tests: - needs: [conda-python-build, changed-files] - secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/conda-python-tests.yaml@main - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda - with: - build_type: pull-request - script: ci/test_python.sh - rocky8-clib-standalone-build: - needs: [checks] - secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main - strategy: - fail-fast: false - matrix: - cuda_version: - - &latest_cuda12 '12.9.1' - - &latest_cuda13 '13.1.1' - arch: - - amd64 - - arm64 - with: - build_type: pull-request - arch: "${{matrix.arch}}" - date: ${{ inputs.date }}_c - container_image: "rapidsai/ci-wheel:26.04-cuda${{ matrix.cuda_version }}-rockylinux8-py3.11" - node_type: "cpu16" - requires_license_builder: true - script: "ci/build_standalone_c.sh --build-tests" - artifact-name: "libcuvs_c_${{ matrix.cuda_version }}_${{ matrix.arch }}.tar.gz" - file_to_upload: "libcuvs_c.tar.gz" - sha: ${{ inputs.sha }} - rocky8-clib-tests: - needs: [rocky8-clib-standalone-build, changed-files] - secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp - strategy: - fail-fast: false - matrix: - cuda_version: - - *latest_cuda12 - - *latest_cuda13 - arch: - - amd64 - - arm64 - with: - build_type: pull-request - node_type: "gpu-l4-latest-1" - arch: "${{matrix.arch}}" - date: ${{ inputs.date }}_c - container_image: "rapidsai/ci-wheel:26.04-cuda${{ matrix.cuda_version }}-rockylinux8-py3.11" - script: "ci/test_standalone_c.sh libcuvs_c_${{ matrix.cuda_version }}_${{ matrix.arch }}.tar.gz" - sha: ${{ inputs.sha }} - conda-java-build-and-tests: - needs: [conda-cpp-build, changed-files] - secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_java || fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp - # Artifacts are not published from these jobs, so it's safe to run for multiple CUDA versions. - # If these jobs start producing artifacts, the names will have to differentiate between CUDA versions. - strategy: - fail-fast: false - matrix: - cuda_version: - - *latest_cuda12 - - *latest_cuda13 - with: - build_type: pull-request - node_type: "gpu-l4-latest-1" - arch: "amd64" - container_image: "rapidsai/ci-conda:26.04-cuda${{ matrix.cuda_version }}-ubuntu24.04-py3.13" - script: "ci/test_java.sh" - artifact-name: "cuvs-java-cuda${{ matrix.cuda_version }}" - file_to_upload: "java/cuvs-java/target/" - rust-build: - needs: [conda-cpp-build, changed-files] - secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_rust || fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp - # Artifacts are not published from these jobs, so it's safe to run for multiple CUDA versions. - # If these jobs start producing artifacts, the names will have to differentiate between CUDA versions. - strategy: - fail-fast: false - matrix: - cuda_version: - - *latest_cuda12 - - *latest_cuda13 - with: - build_type: pull-request - node_type: "gpu-l4-latest-1" - arch: "amd64" - container_image: "rapidsai/ci-conda:26.04-cuda${{ matrix.cuda_version }}-ubuntu24.04-py3.13" - script: "ci/build_rust.sh" - go-build: - needs: [conda-cpp-build, changed-files] - secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_go || fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp - # Artifacts are not published from these jobs, so it's safe to run for multiple CUDA versions. - # If these jobs start producing artifacts, the names will have to differentiate between CUDA versions. - strategy: - fail-fast: false - matrix: - cuda_version: - - *latest_cuda12 - - *latest_cuda13 - with: - build_type: pull-request - node_type: "gpu-l4-latest-1" - arch: "amd64" - container_image: "rapidsai/ci-conda:26.04-cuda${{ matrix.cuda_version }}-ubuntu24.04-py3.13" - script: "ci/build_go.sh" - docs-build: - needs: conda-python-build - secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main - with: - build_type: pull-request - node_type: "gpu-l4-latest-1" - arch: "amd64" - container_image: "rapidsai/ci-conda:26.04-latest" - script: "ci/build_docs.sh" wheel-build-libcuvs: - needs: checks secrets: inherit uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main with: @@ -495,16 +42,14 @@ jobs: # Build a wheel for each CUDA x ARCH x minimum supported Python version matrix_filter: group_by({CUDA_VER, ARCH}) | map(min_by(.PY_VER | split(".") | map(tonumber))) wheel-tests-cuvs: - needs: [wheel-build-cuvs, changed-files] + needs: [wheel-build-cuvs] secrets: inherit uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@main - if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels with: build_type: pull-request script: ci/test_wheel_cuvs.sh devcontainer: secrets: inherit - needs: telemetry-setup uses: rapidsai/shared-workflows/.github/workflows/build-in-devcontainer.yaml@main with: arch: '["amd64", "arm64"]' @@ -518,14 +63,3 @@ jobs: sccache --zero-stats; build-all -j0 --verbose 2>&1 | tee telemetry-artifacts/build.log; sccache --show-adv-stats | tee telemetry-artifacts/sccache-stats.txt; - telemetry-summarize: - # This job must use a self-hosted runner to record telemetry traces. - runs-on: linux-amd64-cpu4 - needs: pr-builder - if: ${{ vars.TELEMETRY_ENABLED == 'true' && !cancelled() }} - continue-on-error: true - steps: - - name: Telemetry summarize - uses: rapidsai/shared-actions/telemetry-dispatch-summarize@main - env: - GH_TOKEN: ${{ github.token }} diff --git a/ci/test_wheel_cuvs.sh b/ci/test_wheel_cuvs.sh index eae78b4a89..8c42987468 100755 --- a/ci/test_wheel_cuvs.sh +++ b/ci/test_wheel_cuvs.sh @@ -9,12 +9,32 @@ source rapids-init-pip # Delete system libnccl.so to ensure the wheel is used rm -rf /usr/lib64/libnccl* +# TODO(jameslamb): revert before merging +git clone --branch generate-pip-constraints \ + https://github.com/rapidsai/gha-tools.git \ + /tmp/gha-tools + +export PATH="/tmp/gha-tools/tools:${PATH}" +echo "--- rapids-generate-pip-constraints ---" +cat $(which rapids-generate-pip-constraints) +echo "" + RAPIDS_PY_CUDA_SUFFIX="$(rapids-wheel-ctk-name-gen "${RAPIDS_CUDA_VERSION}")" LIBCUVS_WHEELHOUSE=$(RAPIDS_PY_WHEEL_NAME="libcuvs_${RAPIDS_PY_CUDA_SUFFIX}" rapids-download-wheels-from-github cpp) CUVS_WHEELHOUSE=$(rapids-download-from-github "$(rapids-package-name "wheel_python" cuvs --stable --cuda "$RAPIDS_CUDA_VERSION")") -# echo to expand wildcard before adding `[extra]` requires for pip +# generate constraints (possibly pinning to oldest support versions of dependencies) +rapids-generate-pip-constraints test_python ./constraints.txt + +# notes: +# +# * echo to expand wildcard before adding `[test]` requires for pip +# * need to provide --constraint="${PIP_CONSTRAINT}" because that environment variable is +# ignored if any other --constraint are passed via the CLI +# rapids-pip-retry install \ + --constraint ./constraints.txt \ + --constraint "${PIP_CONSTRAINT}" \ "${LIBCUVS_WHEELHOUSE}"/libcuvs*.whl \ "$(echo "${CUVS_WHEELHOUSE}"/cuvs*.whl)[test]" diff --git a/conda/recipes/libcuvs/recipe.yaml b/conda/recipes/libcuvs/recipe.yaml index abd3031a94..a5e9000807 100644 --- a/conda/recipes/libcuvs/recipe.yaml +++ b/conda/recipes/libcuvs/recipe.yaml @@ -136,7 +136,7 @@ outputs: - libcusparse - if: cuda_major == "13" then: - - libnvjitlink + - ${{ pin_compatible("libnvjitlink", max_pin="x") }} ignore_run_exports: by_name: - cuda-cudart @@ -205,7 +205,7 @@ outputs: - libcusparse - if: cuda_major == "13" then: - - libnvjitlink + - ${{ pin_compatible("libnvjitlink", max_pin="x") }} ignore_run_exports: by_name: - cuda-cudart @@ -272,7 +272,7 @@ outputs: - libcusparse - if: cuda_major == "13" then: - - libnvjitlink + - ${{ pin_compatible("libnvjitlink", max_pin="x") }} ignore_run_exports: by_name: - cuda-cudart @@ -438,7 +438,7 @@ outputs: - libcusparse - if: cuda_major == "13" then: - - libnvjitlink + - ${{ pin_compatible("libnvjitlink", max_pin="x") }} ignore_run_exports: by_name: - cuda-cudart diff --git a/cpp/include/cuvs/detail/jit_lto/nvjitlink_helper.hpp b/cpp/include/cuvs/detail/jit_lto/nvjitlink_helper.hpp new file mode 100644 index 0000000000..c1359d2b91 --- /dev/null +++ b/cpp/include/cuvs/detail/jit_lto/nvjitlink_helper.hpp @@ -0,0 +1,31 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. + * SPDX-License-Identifier: Apache-2.0 + */ + +#pragma once + +#define NVJITLINK_NO_INLINE +#include +#undef NVJITLINK_NO_INLINE + +// declare unversioned functions + +extern "C" { +nvJitLinkResult nvJitLinkCreate(nvJitLinkHandle*, uint32_t, const char**); +nvJitLinkResult nvJitLinkDestroy(nvJitLinkHandle*); +nvJitLinkResult nvJitLinkAddData( + nvJitLinkHandle, nvJitLinkInputType, const void*, size_t, const char*); +nvJitLinkResult nvJitLinkAddFile(nvJitLinkHandle, nvJitLinkInputType, const char*); +nvJitLinkResult nvJitLinkComplete(nvJitLinkHandle); +nvJitLinkResult nvJitLinkGetLinkedCubinSize(nvJitLinkHandle, size_t*); +nvJitLinkResult nvJitLinkGetLinkedCubin(nvJitLinkHandle, void*); +nvJitLinkResult nvJitLinkGetLinkedPtxSize(nvJitLinkHandle, size_t*); +nvJitLinkResult nvJitLinkGetLinkedPtx(nvJitLinkHandle, char*); +nvJitLinkResult nvJitLinkGetErrorLogSize(nvJitLinkHandle, size_t*); +nvJitLinkResult nvJitLinkGetErrorLog(nvJitLinkHandle, char*); +nvJitLinkResult nvJitLinkGetInfoLogSize(nvJitLinkHandle, size_t*); +nvJitLinkResult nvJitLinkGetInfoLog(nvJitLinkHandle, char*); +} + +void check_nvjitlink_result(nvJitLinkHandle handle, nvJitLinkResult result); diff --git a/cpp/src/detail/jit_lto/nvjitlink_helper.cpp b/cpp/src/detail/jit_lto/nvjitlink_helper.cpp new file mode 100644 index 0000000000..5736ba8231 --- /dev/null +++ b/cpp/src/detail/jit_lto/nvjitlink_helper.cpp @@ -0,0 +1,26 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +#include +#include + +#include + +void check_nvjitlink_result(nvJitLinkHandle handle, nvJitLinkResult result) +{ + if (result != NVJITLINK_SUCCESS) { + std::string error_msg = "nvJITLink failed with error " + std::to_string(result); + size_t log_size = 0; + result = nvJitLinkGetErrorLogSize(handle, &log_size); + if (result == NVJITLINK_SUCCESS && log_size > 0) { + std::unique_ptr log{new char[log_size]}; + result = nvJitLinkGetErrorLog(handle, log.get()); + if (result == NVJITLINK_SUCCESS) { error_msg += "\n" + std::string(log.get()); } + } + RAFT_FAIL("AlgorithmPlanner nvJITLink error log: %s", error_msg.c_str()); + } +} diff --git a/dependencies.yaml b/dependencies.yaml index 329265aae1..95d463bbb8 100644 --- a/dependencies.yaml +++ b/dependencies.yaml @@ -314,6 +314,38 @@ dependencies: cuda: "13.1" packages: - cuda-version=13.1 + - output_types: requirements + matrices: + - matrix: + arch: aarch64 + cuda: "12.2" + packages: + # nvidia-cublas-cu12 didn't get aarch64 wheels until CTK 12.3 + - cuda-toolkit>=12.2,<12.4 + - matrix: + cuda: "12.2" + packages: + - cuda-toolkit==12.2.* + - matrix: + cuda: "12.5" + packages: + - cuda-toolkit==12.5.* + - matrix: + cuda: "12.8" + packages: + - cuda-toolkit==12.8.* + - matrix: + cuda: "12.9" + packages: + - cuda-toolkit==12.9.* + - matrix: + cuda: "13.0" + packages: + - cuda-toolkit==13.0.* + - matrix: + cuda: "13.1" + packages: + - cuda-toolkit==13.1.* cuda: common: - output_types: [conda] @@ -339,24 +371,61 @@ dependencies: specific: - output_types: [requirements, pyproject] matrices: + # skip this whole group if explicitly opting out of CUDA wheels + - matrix: + use_cuda_wheels: "false" + packages: - matrix: cuda: "12.*" use_cuda_wheels: "true" packages: + # cuVS doesn't place a direct requirement on nvJitLink at runtime for CUDA 12, + # but does need to ensure cusparse and nvJitLink installed together are compatible - cuda-toolkit[cublas,curand,cusolver,cusparse,nvjitlink]==12.* - matrix: cuda: "13.*" use_cuda_wheels: "true" packages: - - cuda-toolkit[cublas,curand,cusolver,cusparse,nvjitlink]==13.* + # cuVS needs 'nvJitLink>={whatever-cuvs-was-built-against}' at runtime, so + # omits it here and constrains it separately from cuda-toolkit + - cuda-toolkit[cublas,curand,cusolver,cusparse]==13.* + # if no matching matrix selectors passed, list a range + # (just as a source of documentation, as this populates pyproject.toml in source control) + - matrix: + packages: + - cuda-toolkit[cublas,curand,cusolver,cusparse]>=12,<14 + - output_types: [requirements, pyproject] + matrices: + # skip this whole group if explicitly opting out of CUDA wheels - matrix: use_cuda_wheels: "false" packages: + # for CUDA 12, using cuda-toolkit[nvjitlink] above + - matrix: + cuda: "12.*" + packages: + # We always want nvJitLink >= whatever version cuVS was built against. + # nvJitLink tends to follow the CTK's minor versions, but check at https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html + - matrix: + cuda: "13.0" + use_cuda_wheels: "true" + packages: + - nvidia-nvjitlink>=13.0,<14 + - matrix: + cuda: "13.1" + use_cuda_wheels: "true" + packages: + - &nvjitlink_cu13 nvidia-nvjitlink>=13.1,<14 + - matrix: + cuda: "13.*" + use_cuda_wheels: "true" + packages: + - *nvjitlink_cu13 # if no matching matrix selectors passed, list a range # (just as a source of documentation, as this populates pyproject.toml in source control) - matrix: packages: - - cuda-toolkit[cublas,curand,cusolver,cusparse,nvjitlink]>=12,<14 + - nvidia-nvjitlink>=12,<14 depends_on_cupy: common: - output_types: conda diff --git a/python/libcuvs/pyproject.toml b/python/libcuvs/pyproject.toml index f43bc35dbf..fe43cddc64 100644 --- a/python/libcuvs/pyproject.toml +++ b/python/libcuvs/pyproject.toml @@ -19,9 +19,10 @@ authors = [ license = "Apache-2.0" requires-python = ">=3.11" dependencies = [ - "cuda-toolkit[cublas,curand,cusolver,cusparse,nvjitlink]>=12,<14", + "cuda-toolkit[cublas,curand,cusolver,cusparse]>=12,<14", "libraft==26.4.*,>=0.0.0a0", "librmm==26.4.*,>=0.0.0a0", + "nvidia-nvjitlink>=12,<14", ] # This list was generated by `rapids-dependency-file-generator`. To make changes, edit ../../dependencies.yaml and run `rapids-dependency-file-generator`. classifiers = [ "Intended Audience :: Developers", From 881568ac350f1dee64c8227dcc1239f74c6b1b6f Mon Sep 17 00:00:00 2001 From: James Lamb Date: Mon, 2 Mar 2026 11:23:44 -0600 Subject: [PATCH 02/21] remove files left over from merge conflict resolution --- .../cuvs/detail/jit_lto/nvjitlink_helper.hpp | 31 ------------------- cpp/src/detail/jit_lto/nvjitlink_helper.cpp | 26 ---------------- 2 files changed, 57 deletions(-) delete mode 100644 cpp/include/cuvs/detail/jit_lto/nvjitlink_helper.hpp delete mode 100644 cpp/src/detail/jit_lto/nvjitlink_helper.cpp diff --git a/cpp/include/cuvs/detail/jit_lto/nvjitlink_helper.hpp b/cpp/include/cuvs/detail/jit_lto/nvjitlink_helper.hpp deleted file mode 100644 index c1359d2b91..0000000000 --- a/cpp/include/cuvs/detail/jit_lto/nvjitlink_helper.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/* - * SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. - * SPDX-License-Identifier: Apache-2.0 - */ - -#pragma once - -#define NVJITLINK_NO_INLINE -#include -#undef NVJITLINK_NO_INLINE - -// declare unversioned functions - -extern "C" { -nvJitLinkResult nvJitLinkCreate(nvJitLinkHandle*, uint32_t, const char**); -nvJitLinkResult nvJitLinkDestroy(nvJitLinkHandle*); -nvJitLinkResult nvJitLinkAddData( - nvJitLinkHandle, nvJitLinkInputType, const void*, size_t, const char*); -nvJitLinkResult nvJitLinkAddFile(nvJitLinkHandle, nvJitLinkInputType, const char*); -nvJitLinkResult nvJitLinkComplete(nvJitLinkHandle); -nvJitLinkResult nvJitLinkGetLinkedCubinSize(nvJitLinkHandle, size_t*); -nvJitLinkResult nvJitLinkGetLinkedCubin(nvJitLinkHandle, void*); -nvJitLinkResult nvJitLinkGetLinkedPtxSize(nvJitLinkHandle, size_t*); -nvJitLinkResult nvJitLinkGetLinkedPtx(nvJitLinkHandle, char*); -nvJitLinkResult nvJitLinkGetErrorLogSize(nvJitLinkHandle, size_t*); -nvJitLinkResult nvJitLinkGetErrorLog(nvJitLinkHandle, char*); -nvJitLinkResult nvJitLinkGetInfoLogSize(nvJitLinkHandle, size_t*); -nvJitLinkResult nvJitLinkGetInfoLog(nvJitLinkHandle, char*); -} - -void check_nvjitlink_result(nvJitLinkHandle handle, nvJitLinkResult result); diff --git a/cpp/src/detail/jit_lto/nvjitlink_helper.cpp b/cpp/src/detail/jit_lto/nvjitlink_helper.cpp deleted file mode 100644 index 5736ba8231..0000000000 --- a/cpp/src/detail/jit_lto/nvjitlink_helper.cpp +++ /dev/null @@ -1,26 +0,0 @@ -/* - * SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION. - * SPDX-License-Identifier: Apache-2.0 - */ - -#include - -#include -#include - -#include - -void check_nvjitlink_result(nvJitLinkHandle handle, nvJitLinkResult result) -{ - if (result != NVJITLINK_SUCCESS) { - std::string error_msg = "nvJITLink failed with error " + std::to_string(result); - size_t log_size = 0; - result = nvJitLinkGetErrorLogSize(handle, &log_size); - if (result == NVJITLINK_SUCCESS && log_size > 0) { - std::unique_ptr log{new char[log_size]}; - result = nvJitLinkGetErrorLog(handle, log.get()); - if (result == NVJITLINK_SUCCESS) { error_msg += "\n" + std::string(log.get()); } - } - RAFT_FAIL("AlgorithmPlanner nvJITLink error log: %s", error_msg.c_str()); - } -} From 058ba03fa73b39c61bd984be95e55ecb42e24f35 Mon Sep 17 00:00:00 2001 From: James Lamb Date: Mon, 2 Mar 2026 11:27:24 -0600 Subject: [PATCH 03/21] resolve conflicts --- .github/workflows/pr.yaml | 478 +++++++++++++++++++++++++++++++++++++- 1 file changed, 472 insertions(+), 6 deletions(-) diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 76c8cff3da..7aec55ed37 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -9,18 +9,471 @@ concurrency: jobs: pr-builder: needs: + - check-nightly-ci + - changed-files + - checks + - conda-cpp-build + - conda-cpp-tests + - conda-cpp-checks + - conda-python-build + - conda-python-tests + - rocky8-clib-standalone-build + - rocky8-clib-tests + - conda-java-build-and-tests + - rust-build + - go-build + - docs-build - wheel-build-libcuvs - wheel-build-cuvs - wheel-tests-cuvs - devcontainer + - telemetry-setup secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/pr-builder.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/pr-builder.yaml@python-3.14 if: always() with: needs: ${{ toJSON(needs) }} + telemetry-setup: + continue-on-error: true + runs-on: ubuntu-latest + env: + OTEL_SERVICE_NAME: 'pr-cuvs' + steps: + - name: Telemetry setup + if: ${{ vars.TELEMETRY_ENABLED == 'true' }} + uses: rapidsai/shared-actions/telemetry-dispatch-stash-base-env-vars@main + check-nightly-ci: + runs-on: ubuntu-latest + permissions: + actions: read + id-token: write + env: + GH_TOKEN: ${{ github.token }} + steps: + - name: Get PR Info + id: get-pr-info + uses: nv-gha-runners/get-pr-info@main + - name: Check if nightly CI is passing + uses: rapidsai/shared-actions/check_nightly_success/dispatch@main + with: + repo: ${{ github.repository }} + target-branch: ${{ fromJSON(steps.get-pr-info.outputs.pr-info).base.ref }} + max-days-without-success: 30 + changed-files: + needs: telemetry-setup + secrets: inherit + uses: rapidsai/shared-workflows/.github/workflows/changed-files.yaml@python-3.14 + with: + files_yaml: | + build_docs: + - '**' + - '!.devcontainer/**' + - '!.github/CODEOWNERS' + - '!.github/ISSUE_TEMPLATE/**' + - '!.github/PULL_REQUEST_TEMPLATE.md' + - '!.github/copy-pr-bot.yaml' + - '!.github/labeler.yml' + - '!.github/ops-bot.yaml' + - '!.github/release.yml' + - '!.github/workflows/publish-rust.yaml' + - '!.github/workflows/trigger-breaking-change-alert.yaml' + - '!.pre-commit-config.yaml' + - '!.shellcheckrc' + - '!Dockerfile' + - '!ci/build_wheel*.sh' + - '!ci/check_style.sh' + - '!ci/release/update-version.sh' + - '!ci/run*.sh' + - '!ci/test*.sh' + - '!ci/validate_wheel.sh' + - '!thirdparty/LICENSES/**' + test_cpp: + - '**' + - '!.devcontainer/**' + - '!.github/CODEOWNERS' + - '!.github/ISSUE_TEMPLATE/**' + - '!.github/PULL_REQUEST_TEMPLATE.md' + - '!.github/copy-pr-bot.yaml' + - '!.github/labeler.yml' + - '!.github/ops-bot.yaml' + - '!.github/release.yml' + - '!.github/workflows/publish-rust.yaml' + - '!.github/workflows/trigger-breaking-change-alert.yaml' + - '!.pre-commit-config.yaml' + - '!.shellcheckrc' + - '!Dockerfile' + - '!README.md' + - '!ci/build_docs.sh' + - '!ci/build_python.sh' + - '!ci/build_wheel*.sh' + - '!ci/check_style.sh' + - '!ci/release/update-version.sh' + - '!ci/run_cuvs_pytests.sh' + - '!ci/test_java.sh' + - '!ci/test_python.sh' + - '!ci/test_wheel_cuvs.sh' + - '!ci/validate_wheel.sh' + - '!docs/**' + - '!go/**' + - '!img/**' + - '!java/**' + - '!notebooks/**' + - '!python/**' + - '!rust/**' + - '!thirdparty/LICENSES/**' + test_java: + - '**' + - '!.devcontainer/**' + - '!.github/CODEOWNERS' + - '!.github/ISSUE_TEMPLATE/**' + - '!.github/PULL_REQUEST_TEMPLATE.md' + - '!.github/copy-pr-bot.yaml' + - '!.github/labeler.yml' + - '!.github/ops-bot.yaml' + - '!.github/release.yml' + - '!.github/workflows/publish-rust.yaml' + - '!.github/workflows/trigger-breaking-change-alert.yaml' + - '!.pre-commit-config.yaml' + - '!.shellcheckrc' + - '!ci/build_docs.sh' + - '!ci/build_go.sh' + - '!ci/build_python.sh' + - '!ci/build_rust.sh' + - '!ci/build_wheel*.sh' + - '!ci/checkstyle.sh' + - '!ci/run_cuvs_pytests.sh' + - '!ci/test_cpp.sh' + - '!ci/test_python.sh' + - '!ci/test_wheel_cuvs.sh' + - '!ci/validate_wheel.sh' + - '!Dockerfile' + - '!docs/**' + - '!img/**' + - '!notebooks/**' + - '!python/**' + - '!rust/**' + - '!go/**' + - '!thirdparty/LICENSES/**' + test_python_conda: + - '**' + - '!.devcontainer/**' + - '!.github/CODEOWNERS' + - '!.github/ISSUE_TEMPLATE/**' + - '!.github/PULL_REQUEST_TEMPLATE.md' + - '!.github/copy-pr-bot.yaml' + - '!.github/labeler.yml' + - '!.github/ops-bot.yaml' + - '!.github/release.yml' + - '!.github/workflows/publish-rust.yaml' + - '!.github/workflows/trigger-breaking-change-alert.yaml' + - '!.pre-commit-config.yaml' + - '!.shellcheckrc' + - '!ci/build_go.sh' + - '!ci/build_java.sh' + - '!ci/build_rust.sh' + - '!ci/check_style.sh' + - '!ci/release/update-version.sh' + - '!ci/run_ctests.sh' + - '!ci/test_cpp.sh' + - '!ci/test_java.sh' + - '!ci/test_standalone_c.sh' + - '!ci/test_wheel_cuvs.sh' + - '!ci/validate_wheel.sh' + - '!cpp/.clang-format' + - '!cpp/.clang-tidy' + - '!cpp/doxygen/**' + - '!Dockerfile' + - '!README.md' + - '!docs/**' + - '!go/**' + - '!img/**' + - '!java/**' + - '!notebooks/**' + - '!rust/**' + - '!thirdparty/LICENSES/**' + test_python_wheels: + - '**' + - '!.devcontainer/**' + - '!.github/CODEOWNERS' + - '!.github/ISSUE_TEMPLATE/**' + - '!.github/PULL_REQUEST_TEMPLATE.md' + - '!.github/copy-pr-bot.yaml' + - '!.github/labeler.yml' + - '!.github/ops-bot.yaml' + - '!.github/release.yml' + - '!.github/workflows/publish-rust.yaml' + - '!.github/workflows/trigger-breaking-change-alert.yaml' + - '!.pre-commit-config.yaml' + - '!.shellcheckrc' + - '!ci/build_cpp.sh' + - '!ci/build_docs.sh' + - '!ci/build_go.sh' + - '!ci/build_java.sh' + - '!ci/build_python.sh' + - '!ci/build_rust.sh' + - '!ci/build_standalone_c.sh' + - '!ci/check_style.sh' + - '!ci/release/update-version.sh' + - '!ci/run_ctests.sh' + - '!ci/test_cpp.sh' + - '!ci/test_java.sh' + - '!ci/test_python.sh' + - '!ci/test_standalone_c.sh' + - '!ci/validate_wheel.sh' + - '!Dockerfile' + - '!README.md' + - '!conda/**' + - '!cpp/.clang-format' + - '!cpp/.clang-tidy' + - '!cpp/doxygen/**' + - '!docs/**' + - '!java/**' + - '!go/**' + - '!img/**' + - '!notebooks/**' + - '!rust/**' + - '!thirdparty/LICENSES/**' + test_rust: + - '**' + - '!.devcontainer/**' + - '!.github/CODEOWNERS' + - '!.github/ISSUE_TEMPLATE/**' + - '!.github/PULL_REQUEST_TEMPLATE.md' + - '!.github/copy-pr-bot.yaml' + - '!.github/labeler.yml' + - '!.github/ops-bot.yaml' + - '!.github/release.yml' + - '!.github/workflows/publish-rust.yaml' + - '!.github/workflows/trigger-breaking-change-alert.yaml' + - '!.pre-commit-config.yaml' + - '!.shellcheckrc' + - '!Dockerfile' + - '!README.md' + - '!ci/build_docs.sh' + - '!ci/build_go.sh' + - '!ci/build_java.sh' + - '!ci/build_python.sh' + - '!ci/build_wheel*.sh' + - '!ci/check_style.sh' + - '!ci/release/update-version.sh' + - '!ci/run_ctests.sh' + - '!ci/run_cuvs_pytests.sh' + - '!ci/test_cpp.sh' + - '!ci/test_java.sh' + - '!ci/test_python.sh' + - '!ci/test_wheel_cuvs.sh' + - '!ci/validate_wheel.sh' + - '!docs/**' + - '!go/**' + - '!img/**' + - '!java/**' + - '!notebooks/**' + - '!python/**' + - '!thirdparty/LICENSES/**' + test_go: + - '**' + - '!.devcontainer/**' + - '!.github/CODEOWNERS' + - '!.github/ISSUE_TEMPLATE/**' + - '!.github/PULL_REQUEST_TEMPLATE.md' + - '!.github/copy-pr-bot.yaml' + - '!.github/labeler.yml' + - '!.github/ops-bot.yaml' + - '!.github/release.yml' + - '!.github/workflows/publish-rust.yaml' + - '!.github/workflows/trigger-breaking-change-alert.yaml' + - '!.pre-commit-config.yaml' + - '!.shellcheckrc' + - '!Dockerfile' + - '!README.md' + - '!ci/build_docs.sh' + - '!ci/build_java.sh' + - '!ci/build_python.sh' + - '!ci/build_rust.sh' + - '!ci/build_wheel*.sh' + - '!ci/check_style.sh' + - '!ci/release/update-version.sh' + - '!ci/run_ctests.sh' + - '!ci/run_cuvs_pytests.sh' + - '!ci/test_cpp.sh' + - '!ci/test_java.sh' + - '!ci/test_python.sh' + - '!ci/test_standalone_c.sh' + - '!ci/test_wheel_cuvs.sh' + - '!ci/validate_wheel.sh' + - '!docs/**' + - '!img/**' + - '!java/**' + - '!notebooks/**' + - '!python/**' + - '!rust/**' + - '!thirdparty/LICENSES/**' + checks: + needs: telemetry-setup + secrets: inherit + uses: rapidsai/shared-workflows/.github/workflows/checks.yaml@python-3.14 + with: + enable_check_generated_files: false + ignored_pr_jobs: "telemetry-summarize" + conda-cpp-build: + needs: checks + secrets: inherit + uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-build.yaml@python-3.14 + with: + build_type: pull-request + node_type: cpu16 + script: ci/build_cpp.sh + conda-cpp-tests: + needs: [conda-cpp-build, changed-files] + secrets: inherit + uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-tests.yaml@python-3.14 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp + with: + build_type: pull-request + script: ci/test_cpp.sh + conda-cpp-checks: + needs: conda-cpp-build + secrets: inherit + uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-post-build-checks.yaml@python-3.14 + with: + build_type: pull-request + symbol_exclusions: (void (thrust::|cub::)) + conda-python-build: + needs: conda-cpp-build + secrets: inherit + uses: rapidsai/shared-workflows/.github/workflows/conda-python-build.yaml@python-3.14 + with: + build_type: pull-request + script: ci/build_python.sh + # Build a conda package for each CUDA x ARCH x minimum supported Python version + matrix_filter: group_by({CUDA_VER, ARCH}) | map(min_by(.PY_VER | split(".") | map(tonumber))) + conda-python-tests: + needs: [conda-python-build, changed-files] + secrets: inherit + uses: rapidsai/shared-workflows/.github/workflows/conda-python-tests.yaml@python-3.14 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda + with: + build_type: pull-request + script: ci/test_python.sh + rocky8-clib-standalone-build: + needs: [checks] + secrets: inherit + uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@python-3.14 + strategy: + fail-fast: false + matrix: + cuda_version: + - &latest_cuda12 '12.9.1' + - &latest_cuda13 '13.1.1' + arch: + - amd64 + - arm64 + with: + build_type: pull-request + arch: "${{matrix.arch}}" + date: ${{ inputs.date }}_c + container_image: "rapidsai/ci-wheel:26.04-cuda${{ matrix.cuda_version }}-rockylinux8-py3.11" + node_type: "cpu16" + requires_license_builder: true + script: "ci/build_standalone_c.sh --build-tests" + artifact-name: "libcuvs_c_${{ matrix.cuda_version }}_${{ matrix.arch }}.tar.gz" + file_to_upload: "libcuvs_c.tar.gz" + sha: ${{ inputs.sha }} + rocky8-clib-tests: + needs: [rocky8-clib-standalone-build, changed-files] + secrets: inherit + uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@python-3.14 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp + strategy: + fail-fast: false + matrix: + cuda_version: + - *latest_cuda12 + - *latest_cuda13 + arch: + - amd64 + - arm64 + with: + build_type: pull-request + node_type: "gpu-l4-latest-1" + arch: "${{matrix.arch}}" + date: ${{ inputs.date }}_c + container_image: "rapidsai/ci-wheel:26.04-cuda${{ matrix.cuda_version }}-rockylinux8-py3.11" + script: "ci/test_standalone_c.sh libcuvs_c_${{ matrix.cuda_version }}_${{ matrix.arch }}.tar.gz" + sha: ${{ inputs.sha }} + conda-java-build-and-tests: + needs: [conda-cpp-build, changed-files] + secrets: inherit + uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@python-3.14 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_java || fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp + # Artifacts are not published from these jobs, so it's safe to run for multiple CUDA versions. + # If these jobs start producing artifacts, the names will have to differentiate between CUDA versions. + strategy: + fail-fast: false + matrix: + cuda_version: + - *latest_cuda12 + - *latest_cuda13 + with: + build_type: pull-request + node_type: "gpu-l4-latest-1" + arch: "amd64" + container_image: "rapidsai/ci-conda:26.04-cuda${{ matrix.cuda_version }}-ubuntu24.04-py3.13" + script: "ci/test_java.sh" + artifact-name: "cuvs-java-cuda${{ matrix.cuda_version }}" + file_to_upload: "java/cuvs-java/target/" + rust-build: + needs: [conda-cpp-build, changed-files] + secrets: inherit + uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@python-3.14 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_rust || fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp + # Artifacts are not published from these jobs, so it's safe to run for multiple CUDA versions. + # If these jobs start producing artifacts, the names will have to differentiate between CUDA versions. + strategy: + fail-fast: false + matrix: + cuda_version: + - *latest_cuda12 + - *latest_cuda13 + with: + build_type: pull-request + node_type: "gpu-l4-latest-1" + arch: "amd64" + container_image: "rapidsai/ci-conda:26.04-cuda${{ matrix.cuda_version }}-ubuntu24.04-py3.13" + script: "ci/build_rust.sh" + go-build: + needs: [conda-cpp-build, changed-files] + secrets: inherit + uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@python-3.14 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_go || fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp + # Artifacts are not published from these jobs, so it's safe to run for multiple CUDA versions. + # If these jobs start producing artifacts, the names will have to differentiate between CUDA versions. + strategy: + fail-fast: false + matrix: + cuda_version: + - *latest_cuda12 + - *latest_cuda13 + with: + build_type: pull-request + node_type: "gpu-l4-latest-1" + arch: "amd64" + container_image: "rapidsai/ci-conda:26.04-cuda${{ matrix.cuda_version }}-ubuntu24.04-py3.13" + script: "ci/build_go.sh" + docs-build: + needs: conda-python-build + secrets: inherit + uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@python-3.14 + with: + build_type: pull-request + node_type: "gpu-l4-latest-1" + arch: "amd64" + container_image: "rapidsai/ci-conda:26.04-latest" + script: "ci/build_docs.sh" wheel-build-libcuvs: + needs: checks secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@python-3.14 with: build_type: pull-request node_type: cpu16 @@ -32,7 +485,7 @@ jobs: wheel-build-cuvs: needs: wheel-build-libcuvs secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@python-3.14 with: build_type: pull-request node_type: cpu8 @@ -42,15 +495,17 @@ jobs: # Build a wheel for each CUDA x ARCH x minimum supported Python version matrix_filter: group_by({CUDA_VER, ARCH}) | map(min_by(.PY_VER | split(".") | map(tonumber))) wheel-tests-cuvs: - needs: [wheel-build-cuvs] + needs: [wheel-build-cuvs, changed-files] secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@python-3.14 + if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels with: build_type: pull-request script: ci/test_wheel_cuvs.sh devcontainer: secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/build-in-devcontainer.yaml@main + needs: telemetry-setup + uses: rapidsai/shared-workflows/.github/workflows/build-in-devcontainer.yaml@python-3.14 with: arch: '["amd64", "arm64"]' cuda: '["13.1"]' @@ -63,3 +518,14 @@ jobs: sccache --zero-stats; build-all -j0 --verbose 2>&1 | tee telemetry-artifacts/build.log; sccache --show-adv-stats | tee telemetry-artifacts/sccache-stats.txt; + telemetry-summarize: + # This job must use a self-hosted runner to record telemetry traces. + runs-on: linux-amd64-cpu4 + needs: pr-builder + if: ${{ vars.TELEMETRY_ENABLED == 'true' && !cancelled() }} + continue-on-error: true + steps: + - name: Telemetry summarize + uses: rapidsai/shared-actions/telemetry-dispatch-summarize@main + env: + GH_TOKEN: ${{ github.token }} From 517b310add941b5eb65f0ba919e143f1e5f6f539 Mon Sep 17 00:00:00 2001 From: James Lamb Date: Mon, 2 Mar 2026 12:15:48 -0600 Subject: [PATCH 04/21] shellcheck --- ci/test_wheel_cuvs.sh | 3 --- 1 file changed, 3 deletions(-) diff --git a/ci/test_wheel_cuvs.sh b/ci/test_wheel_cuvs.sh index 8c42987468..c6371badd4 100755 --- a/ci/test_wheel_cuvs.sh +++ b/ci/test_wheel_cuvs.sh @@ -15,9 +15,6 @@ git clone --branch generate-pip-constraints \ /tmp/gha-tools export PATH="/tmp/gha-tools/tools:${PATH}" -echo "--- rapids-generate-pip-constraints ---" -cat $(which rapids-generate-pip-constraints) -echo "" RAPIDS_PY_CUDA_SUFFIX="$(rapids-wheel-ctk-name-gen "${RAPIDS_CUDA_VERSION}")" LIBCUVS_WHEELHOUSE=$(RAPIDS_PY_WHEEL_NAME="libcuvs_${RAPIDS_PY_CUDA_SUFFIX}" rapids-download-wheels-from-github cpp) From a8c23d9c574f32b8a192411a4cf6617b52c83ca8 Mon Sep 17 00:00:00 2001 From: James Lamb Date: Wed, 4 Mar 2026 22:50:30 -0600 Subject: [PATCH 05/21] merge changes --- ci/build_wheel_cuvs.sh | 3 +++ ci/build_wheel_libcuvs.sh | 3 +++ ci/test_wheel_cuvs.sh | 11 +++++++---- ci/use_wheels_from_prs.sh | 23 +++++++++++++++++++++++ 4 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 ci/use_wheels_from_prs.sh diff --git a/ci/build_wheel_cuvs.sh b/ci/build_wheel_cuvs.sh index 75be8a6dff..825ed43e6c 100755 --- a/ci/build_wheel_cuvs.sh +++ b/ci/build_wheel_cuvs.sh @@ -6,6 +6,9 @@ set -euo pipefail source rapids-init-pip +# TODO(jameslamb): revert before merging +source ci/use_wheels_from_prs.sh + package_dir="python/cuvs" RAPIDS_PY_CUDA_SUFFIX="$(rapids-wheel-ctk-name-gen "${RAPIDS_CUDA_VERSION}")" diff --git a/ci/build_wheel_libcuvs.sh b/ci/build_wheel_libcuvs.sh index 6eb6bfa5ab..0690fa7e12 100755 --- a/ci/build_wheel_libcuvs.sh +++ b/ci/build_wheel_libcuvs.sh @@ -6,6 +6,9 @@ set -euo pipefail source rapids-init-pip +# TODO(jameslamb): revert before merging +source ci/use_wheels_from_prs.sh + package_name="libcuvs" package_dir="python/libcuvs" diff --git a/ci/test_wheel_cuvs.sh b/ci/test_wheel_cuvs.sh index c6371badd4..571911e8d4 100755 --- a/ci/test_wheel_cuvs.sh +++ b/ci/test_wheel_cuvs.sh @@ -6,6 +6,9 @@ set -euo pipefail source rapids-init-pip +# TODO(jameslamb): revert before merging +source ci/use_wheels_from_prs.sh + # Delete system libnccl.so to ensure the wheel is used rm -rf /usr/lib64/libnccl* @@ -21,16 +24,16 @@ LIBCUVS_WHEELHOUSE=$(RAPIDS_PY_WHEEL_NAME="libcuvs_${RAPIDS_PY_CUDA_SUFFIX}" rap CUVS_WHEELHOUSE=$(rapids-download-from-github "$(rapids-package-name "wheel_python" cuvs --stable --cuda "$RAPIDS_CUDA_VERSION")") # generate constraints (possibly pinning to oldest support versions of dependencies) -rapids-generate-pip-constraints test_python ./constraints.txt +rapids-generate-pip-constraints test_python "${PIP_CONSTRAINT}" # notes: # # * echo to expand wildcard before adding `[test]` requires for pip -# * need to provide --constraint="${PIP_CONSTRAINT}" because that environment variable is -# ignored if any other --constraint are passed via the CLI +# * just providing --constraint="${PIP_CONSTRAINT}" to be explicit, and because +# that environment variable is ignored if any other --constraint are passed via the CLI # rapids-pip-retry install \ - --constraint ./constraints.txt \ + --prefer-binary \ --constraint "${PIP_CONSTRAINT}" \ "${LIBCUVS_WHEELHOUSE}"/libcuvs*.whl \ "$(echo "${CUVS_WHEELHOUSE}"/cuvs*.whl)[test]" diff --git a/ci/use_wheels_from_prs.sh b/ci/use_wheels_from_prs.sh new file mode 100644 index 0000000000..55635e751d --- /dev/null +++ b/ci/use_wheels_from_prs.sh @@ -0,0 +1,23 @@ +#!/bin/bash +# SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION. +# SPDX-License-Identifier: BSD-3-Clause + +# initialize PIP_CONSTRAINT +source rapids-init-pip + +RAPIDS_PY_CUDA_SUFFIX=$(rapids-wheel-ctk-name-gen "${RAPIDS_CUDA_VERSION}") + +# download wheels, store the directories holding them in variables +RMM_COMMIT=af96977c404565bbb0657c490d407a561cedc3fc +LIBRMM_WHEELHOUSE=$( + RAPIDS_PY_WHEEL_NAME="librmm_${RAPIDS_PY_CUDA_SUFFIX}" rapids-get-pr-artifact rmm 2270 cpp wheel "${RMM_COMMIT}" +) +RMM_WHEELHOUSE=$( + rapids-get-pr-artifact rmm 2270 python wheel --pkg_name rmm --stable "${RMM_COMMIT}" +) + +# write a pip constraints file saying e.g. "whenever you encounter a requirement for 'librmm-cu12', use this wheel" +cat >> "${PIP_CONSTRAINT}" < Date: Wed, 4 Mar 2026 22:51:50 -0600 Subject: [PATCH 06/21] update GitHub Actions --- .github/workflows/build.yaml | 4 ++-- .github/workflows/pr.yaml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index e7a516f522..76ca20fb0d 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -174,7 +174,7 @@ jobs: sha: ${{ inputs.sha }} wheel-build-libcuvs: secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@python-3.14 + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@build-wheels-old-ctk with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} @@ -200,7 +200,7 @@ jobs: wheel-build-cuvs: needs: wheel-build-libcuvs secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@python-3.14 + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@build-wheels-old-ctk with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 7aec55ed37..161636e70e 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -473,7 +473,7 @@ jobs: wheel-build-libcuvs: needs: checks secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@python-3.14 + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@build-wheels-old-ctk with: build_type: pull-request node_type: cpu16 @@ -485,7 +485,7 @@ jobs: wheel-build-cuvs: needs: wheel-build-libcuvs secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@python-3.14 + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@build-wheels-old-ctk with: build_type: pull-request node_type: cpu8 From f9aba62a9304d44580fdf74673889172809f44c3 Mon Sep 17 00:00:00 2001 From: James Lamb Date: Thu, 5 Mar 2026 09:56:27 -0600 Subject: [PATCH 07/21] more updates --- ci/use_wheels_from_prs.sh | 17 +++++++++++++++- dependencies.yaml | 42 ++++++++++----------------------------- 2 files changed, 27 insertions(+), 32 deletions(-) diff --git a/ci/use_wheels_from_prs.sh b/ci/use_wheels_from_prs.sh index 55635e751d..76b283d8c5 100644 --- a/ci/use_wheels_from_prs.sh +++ b/ci/use_wheels_from_prs.sh @@ -1,6 +1,6 @@ #!/bin/bash # SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION. -# SPDX-License-Identifier: BSD-3-Clause +# SPDX-License-Identifier: Apache-2.0 # initialize PIP_CONSTRAINT source rapids-init-pip @@ -16,8 +16,23 @@ RMM_WHEELHOUSE=$( rapids-get-pr-artifact rmm 2270 python wheel --pkg_name rmm --stable "${RMM_COMMIT}" ) +RAFT_COMMIT=b7b9c53d7c492937cc9214cbd292039d6551d996 +LIBRAFT_WHEELHOUSE=$( + RAPIDS_PY_WHEEL_NAME="libraft_${RAPIDS_PY_CUDA_SUFFIX}" rapids-get-pr-artifact raft 2971 cpp wheel "${RAFT_COMMIT}" +) +PYLIBRAFT_WHEELHOUSE=$( + rapids-get-pr-artifact raft 2971 python wheel --pkg_name pylibraft --stable "${RAFT_COMMIT}" +) +RAFT_DASK_WHEELHOUSE=$( + rapids-get-pr-artifact raft 2971 python wheel --pkg_name raft-dask --stable "${RAFT_COMMIT}" +) + # write a pip constraints file saying e.g. "whenever you encounter a requirement for 'librmm-cu12', use this wheel" cat >> "${PIP_CONSTRAINT}" <={whatever-cuvs-was-built-against}' at runtime, and mixing + # old-CTK with new-nvJitLink is supported, so maintain 1 entry here per CUDA major.minor + # cuVS is built against. + # + # nvJitLink has historically roughly followed the CTK's minor versioning scheme, + # but check at https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html - output_types: [requirements, pyproject] matrices: # skip this whole group if explicitly opting out of CUDA wheels @@ -376,55 +382,29 @@ dependencies: use_cuda_wheels: "false" packages: - matrix: - cuda: "12.*" + cuda: "12.9" use_cuda_wheels: "true" packages: # cuVS doesn't place a direct requirement on nvJitLink at runtime for CUDA 12, # but does need to ensure cusparse and nvJitLink installed together are compatible - cuda-toolkit[cublas,curand,cusolver,cusparse,nvjitlink]==12.* - - matrix: - cuda: "13.*" - use_cuda_wheels: "true" - packages: - # cuVS needs 'nvJitLink>={whatever-cuvs-was-built-against}' at runtime, so - # omits it here and constrains it separately from cuda-toolkit - - cuda-toolkit[cublas,curand,cusolver,cusparse]==13.* - # if no matching matrix selectors passed, list a range - # (just as a source of documentation, as this populates pyproject.toml in source control) - - matrix: - packages: - - cuda-toolkit[cublas,curand,cusolver,cusparse]>=12,<14 - - output_types: [requirements, pyproject] - matrices: - # skip this whole group if explicitly opting out of CUDA wheels - - matrix: - use_cuda_wheels: "false" - packages: - # for CUDA 12, using cuda-toolkit[nvjitlink] above - - matrix: - cuda: "12.*" - packages: - # We always want nvJitLink >= whatever version cuVS was built against. - # nvJitLink tends to follow the CTK's minor versions, but check at https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html - matrix: cuda: "13.0" use_cuda_wheels: "true" packages: + - &cuda_toolkit_any_cu13 cuda-toolkit[cublas,curand,cusolver,cusparse]==13.* - nvidia-nvjitlink>=13.0,<14 - matrix: cuda: "13.1" use_cuda_wheels: "true" packages: - - &nvjitlink_cu13 nvidia-nvjitlink>=13.1,<14 - - matrix: - cuda: "13.*" - use_cuda_wheels: "true" - packages: - - *nvjitlink_cu13 + - *cuda_toolkit_any_cu13 + - nvidia-nvjitlink>=13.1,<14 # if no matching matrix selectors passed, list a range # (just as a source of documentation, as this populates pyproject.toml in source control) - matrix: packages: + - cuda-toolkit[cublas,curand,cusolver,cusparse]>=12,<14 - nvidia-nvjitlink>=12,<14 depends_on_cupy: common: From 056576b6118c10ac4e6a6a4280467b419ca29d4c Mon Sep 17 00:00:00 2001 From: James Lamb Date: Thu, 5 Mar 2026 09:59:22 -0600 Subject: [PATCH 08/21] standardize dependencies.yaml --- dependencies.yaml | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/dependencies.yaml b/dependencies.yaml index 15faf6d22c..b236bf33b0 100644 --- a/dependencies.yaml +++ b/dependencies.yaml @@ -286,6 +286,8 @@ dependencies: - clang==20.1.4 - clang-tools==20.1.4 - libclang==20.1.4 + # 'cuda_version' intentionally does not contain fallback entries... we want + # a loud error if an unsupported 'cuda' value is passed cuda_version: specific: - output_types: conda @@ -316,34 +318,47 @@ dependencies: - cuda-version=13.1 - output_types: requirements matrices: + # if use_cuda_wheels=false is provided, do not add dependencies on any CUDA wheels + # (e.g. for DLFW and pip devcontainers) + - matrix: + use_cuda_wheels: "false" + packages: - matrix: arch: aarch64 cuda: "12.2" + use_cuda_wheels: "true" packages: - # nvidia-cublas-cu12 didn't get aarch64 wheels until CTK 12.3 + # some components (like nvidia-cublas-cu12 and nvidia-cuda-nvcc-cu12) didn't have + # aarch64 wheels until CTK 12.3, so allow a slightly looser bound here - cuda-toolkit>=12.2,<12.4 - matrix: cuda: "12.2" + use_cuda_wheels: "true" packages: - cuda-toolkit==12.2.* - matrix: cuda: "12.5" + use_cuda_wheels: "true" packages: - cuda-toolkit==12.5.* - matrix: cuda: "12.8" + use_cuda_wheels: "true" packages: - cuda-toolkit==12.8.* - matrix: cuda: "12.9" + use_cuda_wheels: "true" packages: - cuda-toolkit==12.9.* - matrix: cuda: "13.0" + use_cuda_wheels: "true" packages: - cuda-toolkit==13.0.* - matrix: cuda: "13.1" + use_cuda_wheels: "true" packages: - cuda-toolkit==13.1.* cuda: From f380354bb14cdfd7e71e952c445da0440ac032b2 Mon Sep 17 00:00:00 2001 From: James Lamb Date: Thu, 5 Mar 2026 10:07:24 -0600 Subject: [PATCH 09/21] need ucxx for raft --- ci/use_wheels_from_prs.sh | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/ci/use_wheels_from_prs.sh b/ci/use_wheels_from_prs.sh index 76b283d8c5..15d40fed16 100644 --- a/ci/use_wheels_from_prs.sh +++ b/ci/use_wheels_from_prs.sh @@ -27,6 +27,17 @@ RAFT_DASK_WHEELHOUSE=$( rapids-get-pr-artifact raft 2971 python wheel --pkg_name raft-dask --stable "${RAFT_COMMIT}" ) +UCXX_COMMIT=b1e5230d5b1ac47a11cc2d421b3af91be50b39e4 +DISTRIBUTED_UCXX_WHEELHOUSE=$( + RAPIDS_PY_WHEEL_NAME="${RAPIDS_PY_CUDA_SUFFIX}" RAPIDS_PY_WHEEL_PURE="1" rapids-get-pr-artifact --pkg_name distributed-ucxx ucxx 604 python wheel +) +LIBUCXX_WHEELHOUSE=$( + RAPIDS_PY_WHEEL_NAME="libucxx_${RAPIDS_PY_CUDA_SUFFIX}" rapids-get-pr-artifact ucxx 604 cpp wheel "${UCXX_COMMIT}" +) +UCXX_WHEELHOUSE=$( + rapids-get-pr-artifact ucxx 604 python wheel --pkg_name ucxx --stable "${UCXX_COMMIT}" +) + # write a pip constraints file saying e.g. "whenever you encounter a requirement for 'librmm-cu12', use this wheel" cat >> "${PIP_CONSTRAINT}" < Date: Thu, 5 Mar 2026 10:42:11 -0600 Subject: [PATCH 10/21] fix conda pins, use_wheels_from_prs.sh --- ci/use_wheels_from_prs.sh | 2 +- conda/recipes/libcuvs/recipe.yaml | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/ci/use_wheels_from_prs.sh b/ci/use_wheels_from_prs.sh index 15d40fed16..b1ab22667a 100644 --- a/ci/use_wheels_from_prs.sh +++ b/ci/use_wheels_from_prs.sh @@ -24,7 +24,7 @@ PYLIBRAFT_WHEELHOUSE=$( rapids-get-pr-artifact raft 2971 python wheel --pkg_name pylibraft --stable "${RAFT_COMMIT}" ) RAFT_DASK_WHEELHOUSE=$( - rapids-get-pr-artifact raft 2971 python wheel --pkg_name raft-dask --stable "${RAFT_COMMIT}" + rapids-get-pr-artifact raft 2971 python wheel --pkg_name raft_dask --stable "${RAFT_COMMIT}" ) UCXX_COMMIT=b1e5230d5b1ac47a11cc2d421b3af91be50b39e4 diff --git a/conda/recipes/libcuvs/recipe.yaml b/conda/recipes/libcuvs/recipe.yaml index a5e9000807..055f4d1492 100644 --- a/conda/recipes/libcuvs/recipe.yaml +++ b/conda/recipes/libcuvs/recipe.yaml @@ -136,7 +136,7 @@ outputs: - libcusparse - if: cuda_major == "13" then: - - ${{ pin_compatible("libnvjitlink", max_pin="x") }} + - ${{ pin_compatible("libnvjitlink", lower_bound="x.x", upper_bound="x") }} ignore_run_exports: by_name: - cuda-cudart @@ -205,7 +205,7 @@ outputs: - libcusparse - if: cuda_major == "13" then: - - ${{ pin_compatible("libnvjitlink", max_pin="x") }} + - ${{ pin_compatible("libnvjitlink", lower_bound="x.x", upper_bound="x") }} ignore_run_exports: by_name: - cuda-cudart @@ -272,7 +272,7 @@ outputs: - libcusparse - if: cuda_major == "13" then: - - ${{ pin_compatible("libnvjitlink", max_pin="x") }} + - ${{ pin_compatible("libnvjitlink", lower_bound="x.x", upper_bound="x") }} ignore_run_exports: by_name: - cuda-cudart @@ -438,7 +438,7 @@ outputs: - libcusparse - if: cuda_major == "13" then: - - ${{ pin_compatible("libnvjitlink", max_pin="x") }} + - ${{ pin_compatible("libnvjitlink", lower_bound="x.x", upper_bound="x") }} ignore_run_exports: by_name: - cuda-cudart From 64577b25909c552f75682f65a7bce8582a77ba5f Mon Sep 17 00:00:00 2001 From: James Lamb Date: Fri, 6 Mar 2026 10:19:37 -0600 Subject: [PATCH 11/21] all CUDA 12 --- dependencies.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.yaml b/dependencies.yaml index b236bf33b0..48fafe5f7f 100644 --- a/dependencies.yaml +++ b/dependencies.yaml @@ -397,7 +397,7 @@ dependencies: use_cuda_wheels: "false" packages: - matrix: - cuda: "12.9" + cuda: "12.*" use_cuda_wheels: "true" packages: # cuVS doesn't place a direct requirement on nvJitLink at runtime for CUDA 12, From 3125ea29cb0e72605790968f22b4acd34203a7ff Mon Sep 17 00:00:00 2001 From: James Lamb Date: Mon, 9 Mar 2026 09:56:33 -0500 Subject: [PATCH 12/21] update commits --- ci/test_wheel_cuvs.sh | 7 ------- ci/use_wheels_from_prs.sh | 6 +++--- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/ci/test_wheel_cuvs.sh b/ci/test_wheel_cuvs.sh index 571911e8d4..32e587e6e7 100755 --- a/ci/test_wheel_cuvs.sh +++ b/ci/test_wheel_cuvs.sh @@ -12,13 +12,6 @@ source ci/use_wheels_from_prs.sh # Delete system libnccl.so to ensure the wheel is used rm -rf /usr/lib64/libnccl* -# TODO(jameslamb): revert before merging -git clone --branch generate-pip-constraints \ - https://github.com/rapidsai/gha-tools.git \ - /tmp/gha-tools - -export PATH="/tmp/gha-tools/tools:${PATH}" - RAPIDS_PY_CUDA_SUFFIX="$(rapids-wheel-ctk-name-gen "${RAPIDS_CUDA_VERSION}")" LIBCUVS_WHEELHOUSE=$(RAPIDS_PY_WHEEL_NAME="libcuvs_${RAPIDS_PY_CUDA_SUFFIX}" rapids-download-wheels-from-github cpp) CUVS_WHEELHOUSE=$(rapids-download-from-github "$(rapids-package-name "wheel_python" cuvs --stable --cuda "$RAPIDS_CUDA_VERSION")") diff --git a/ci/use_wheels_from_prs.sh b/ci/use_wheels_from_prs.sh index b1ab22667a..5f37782cf0 100644 --- a/ci/use_wheels_from_prs.sh +++ b/ci/use_wheels_from_prs.sh @@ -8,7 +8,7 @@ source rapids-init-pip RAPIDS_PY_CUDA_SUFFIX=$(rapids-wheel-ctk-name-gen "${RAPIDS_CUDA_VERSION}") # download wheels, store the directories holding them in variables -RMM_COMMIT=af96977c404565bbb0657c490d407a561cedc3fc +RMM_COMMIT=0465f7cbc3acfa95dc5b83bdc6682db108e8b1b2 LIBRMM_WHEELHOUSE=$( RAPIDS_PY_WHEEL_NAME="librmm_${RAPIDS_PY_CUDA_SUFFIX}" rapids-get-pr-artifact rmm 2270 cpp wheel "${RMM_COMMIT}" ) @@ -16,7 +16,7 @@ RMM_WHEELHOUSE=$( rapids-get-pr-artifact rmm 2270 python wheel --pkg_name rmm --stable "${RMM_COMMIT}" ) -RAFT_COMMIT=b7b9c53d7c492937cc9214cbd292039d6551d996 +RAFT_COMMIT=20f7213826e7550e92d635d5b3c07eff169afe54 LIBRAFT_WHEELHOUSE=$( RAPIDS_PY_WHEEL_NAME="libraft_${RAPIDS_PY_CUDA_SUFFIX}" rapids-get-pr-artifact raft 2971 cpp wheel "${RAFT_COMMIT}" ) @@ -27,7 +27,7 @@ RAFT_DASK_WHEELHOUSE=$( rapids-get-pr-artifact raft 2971 python wheel --pkg_name raft_dask --stable "${RAFT_COMMIT}" ) -UCXX_COMMIT=b1e5230d5b1ac47a11cc2d421b3af91be50b39e4 +UCXX_COMMIT=8b6e2e45b2c1962dd58fd95e1f5e43db5d953a41 DISTRIBUTED_UCXX_WHEELHOUSE=$( RAPIDS_PY_WHEEL_NAME="${RAPIDS_PY_CUDA_SUFFIX}" RAPIDS_PY_WHEEL_PURE="1" rapids-get-pr-artifact --pkg_name distributed-ucxx ucxx 604 python wheel ) From 12e20bb3394b453a1d14b67cbe9270b4b583d7f1 Mon Sep 17 00:00:00 2001 From: James Lamb Date: Mon, 9 Mar 2026 10:03:46 -0500 Subject: [PATCH 13/21] new commits --- ci/use_wheels_from_prs.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/use_wheels_from_prs.sh b/ci/use_wheels_from_prs.sh index 5f37782cf0..1fee9e4b0a 100644 --- a/ci/use_wheels_from_prs.sh +++ b/ci/use_wheels_from_prs.sh @@ -16,7 +16,7 @@ RMM_WHEELHOUSE=$( rapids-get-pr-artifact rmm 2270 python wheel --pkg_name rmm --stable "${RMM_COMMIT}" ) -RAFT_COMMIT=20f7213826e7550e92d635d5b3c07eff169afe54 +RAFT_COMMIT=5258ae71a6e0e0b10308329957b13358d3585b84 LIBRAFT_WHEELHOUSE=$( RAPIDS_PY_WHEEL_NAME="libraft_${RAPIDS_PY_CUDA_SUFFIX}" rapids-get-pr-artifact raft 2971 cpp wheel "${RAFT_COMMIT}" ) From d63731b6532609a5a2ce6adde994af7b5f7af701 Mon Sep 17 00:00:00 2001 From: James Lamb Date: Mon, 9 Mar 2026 10:41:53 -0500 Subject: [PATCH 14/21] new commits --- ci/use_wheels_from_prs.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/use_wheels_from_prs.sh b/ci/use_wheels_from_prs.sh index 1fee9e4b0a..160c4aaa06 100644 --- a/ci/use_wheels_from_prs.sh +++ b/ci/use_wheels_from_prs.sh @@ -16,7 +16,7 @@ RMM_WHEELHOUSE=$( rapids-get-pr-artifact rmm 2270 python wheel --pkg_name rmm --stable "${RMM_COMMIT}" ) -RAFT_COMMIT=5258ae71a6e0e0b10308329957b13358d3585b84 +RAFT_COMMIT=ceff7637e1567c2efb0942d5bc67b27100a21387 LIBRAFT_WHEELHOUSE=$( RAPIDS_PY_WHEEL_NAME="libraft_${RAPIDS_PY_CUDA_SUFFIX}" rapids-get-pr-artifact raft 2971 cpp wheel "${RAFT_COMMIT}" ) @@ -27,7 +27,7 @@ RAFT_DASK_WHEELHOUSE=$( rapids-get-pr-artifact raft 2971 python wheel --pkg_name raft_dask --stable "${RAFT_COMMIT}" ) -UCXX_COMMIT=8b6e2e45b2c1962dd58fd95e1f5e43db5d953a41 +UCXX_COMMIT=b9406fa336ebc302cac4773c2262a392c16631cc DISTRIBUTED_UCXX_WHEELHOUSE=$( RAPIDS_PY_WHEEL_NAME="${RAPIDS_PY_CUDA_SUFFIX}" RAPIDS_PY_WHEEL_PURE="1" rapids-get-pr-artifact --pkg_name distributed-ucxx ucxx 604 python wheel ) From d5297ce9269caa1074be38e5e92517a469c8836a Mon Sep 17 00:00:00 2001 From: James Lamb Date: Mon, 9 Mar 2026 13:34:30 -0500 Subject: [PATCH 15/21] separate nvidia-nvjitlink from cuda-toolkit --- dependencies.yaml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/dependencies.yaml b/dependencies.yaml index 48fafe5f7f..98b3e64734 100644 --- a/dependencies.yaml +++ b/dependencies.yaml @@ -396,13 +396,16 @@ dependencies: - matrix: use_cuda_wheels: "false" packages: + # We always want nvJitLink >= whatever minor version was available in the build environment + # nvJitLink tends to follow the CTK's minor versions, but check at https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html + # + # ref: https://github.com/rapidsai/cudf/pull/20873 - matrix: - cuda: "12.*" + cuda: "12.9" use_cuda_wheels: "true" packages: - # cuVS doesn't place a direct requirement on nvJitLink at runtime for CUDA 12, - # but does need to ensure cusparse and nvJitLink installed together are compatible - - cuda-toolkit[cublas,curand,cusolver,cusparse,nvjitlink]==12.* + - cuda-toolkit[cublas,curand,cusolver,cusparse]==12.* + - nvidia-nvjitlink-cu12>=12.9,<13 - matrix: cuda: "13.0" use_cuda_wheels: "true" From 2c7517c8dad692cd1a2ff1d0be906e70b86abc6d Mon Sep 17 00:00:00 2001 From: James Lamb Date: Sun, 15 Mar 2026 22:02:36 -0500 Subject: [PATCH 16/21] stricter conda floor --- conda/recipes/libcuvs/recipe.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/conda/recipes/libcuvs/recipe.yaml b/conda/recipes/libcuvs/recipe.yaml index 055f4d1492..e31af49527 100644 --- a/conda/recipes/libcuvs/recipe.yaml +++ b/conda/recipes/libcuvs/recipe.yaml @@ -136,7 +136,7 @@ outputs: - libcusparse - if: cuda_major == "13" then: - - ${{ pin_compatible("libnvjitlink", lower_bound="x.x", upper_bound="x") }} + - ${{ pin_compatible("libnvjitlink", lower_bound="x.x.x", upper_bound="x") }} ignore_run_exports: by_name: - cuda-cudart @@ -205,7 +205,7 @@ outputs: - libcusparse - if: cuda_major == "13" then: - - ${{ pin_compatible("libnvjitlink", lower_bound="x.x", upper_bound="x") }} + - ${{ pin_compatible("libnvjitlink", lower_bound="x.x.x", upper_bound="x") }} ignore_run_exports: by_name: - cuda-cudart @@ -272,7 +272,7 @@ outputs: - libcusparse - if: cuda_major == "13" then: - - ${{ pin_compatible("libnvjitlink", lower_bound="x.x", upper_bound="x") }} + - ${{ pin_compatible("libnvjitlink", lower_bound="x.x.x", upper_bound="x") }} ignore_run_exports: by_name: - cuda-cudart @@ -438,7 +438,7 @@ outputs: - libcusparse - if: cuda_major == "13" then: - - ${{ pin_compatible("libnvjitlink", lower_bound="x.x", upper_bound="x") }} + - ${{ pin_compatible("libnvjitlink", lower_bound="x.x.x", upper_bound="x") }} ignore_run_exports: by_name: - cuda-cudart From fd60f71b4ee1d9777ac02a226aef3159484ff116 Mon Sep 17 00:00:00 2001 From: James Lamb Date: Sun, 15 Mar 2026 22:04:31 -0500 Subject: [PATCH 17/21] update dependency commits --- ci/use_wheels_from_prs.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ci/use_wheels_from_prs.sh b/ci/use_wheels_from_prs.sh index 160c4aaa06..3a8b5190d8 100644 --- a/ci/use_wheels_from_prs.sh +++ b/ci/use_wheels_from_prs.sh @@ -8,7 +8,7 @@ source rapids-init-pip RAPIDS_PY_CUDA_SUFFIX=$(rapids-wheel-ctk-name-gen "${RAPIDS_CUDA_VERSION}") # download wheels, store the directories holding them in variables -RMM_COMMIT=0465f7cbc3acfa95dc5b83bdc6682db108e8b1b2 +RMM_COMMIT=e36df7200d5c05302c8fefbcb94a89aa634ef2b7 LIBRMM_WHEELHOUSE=$( RAPIDS_PY_WHEEL_NAME="librmm_${RAPIDS_PY_CUDA_SUFFIX}" rapids-get-pr-artifact rmm 2270 cpp wheel "${RMM_COMMIT}" ) @@ -16,7 +16,7 @@ RMM_WHEELHOUSE=$( rapids-get-pr-artifact rmm 2270 python wheel --pkg_name rmm --stable "${RMM_COMMIT}" ) -RAFT_COMMIT=ceff7637e1567c2efb0942d5bc67b27100a21387 +RAFT_COMMIT=c285d96d34b6f86415bd1502d6f2d232317bed98 LIBRAFT_WHEELHOUSE=$( RAPIDS_PY_WHEEL_NAME="libraft_${RAPIDS_PY_CUDA_SUFFIX}" rapids-get-pr-artifact raft 2971 cpp wheel "${RAFT_COMMIT}" ) @@ -27,7 +27,7 @@ RAFT_DASK_WHEELHOUSE=$( rapids-get-pr-artifact raft 2971 python wheel --pkg_name raft_dask --stable "${RAFT_COMMIT}" ) -UCXX_COMMIT=b9406fa336ebc302cac4773c2262a392c16631cc +UCXX_COMMIT=347de3a7c1c694fe8509ee7a6aa3d11f5e674476 DISTRIBUTED_UCXX_WHEELHOUSE=$( RAPIDS_PY_WHEEL_NAME="${RAPIDS_PY_CUDA_SUFFIX}" RAPIDS_PY_WHEEL_PURE="1" rapids-get-pr-artifact --pkg_name distributed-ucxx ucxx 604 python wheel ) From 242a70f740c2ff9d3fba7561ffce49ce692828d6 Mon Sep 17 00:00:00 2001 From: James Lamb Date: Wed, 18 Mar 2026 11:52:06 -0500 Subject: [PATCH 18/21] remove testing stuff --- .github/workflows/build.yaml | 4 +-- .github/workflows/pr.yaml | 4 +-- ci/test_wheel_cuvs.sh | 3 -- ci/use_wheels_from_prs.sh | 53 ------------------------------------ dependencies.yaml | 8 +----- 5 files changed, 5 insertions(+), 67 deletions(-) delete mode 100644 ci/use_wheels_from_prs.sh diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index a091fa1c55..7672a647c4 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -174,7 +174,7 @@ jobs: sha: ${{ inputs.sha }} wheel-build-libcuvs: secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@build-wheels-old-ctk + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@release/26.04 with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} @@ -200,7 +200,7 @@ jobs: wheel-build-cuvs: needs: wheel-build-libcuvs secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@build-wheels-old-ctk + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@release/26.04 with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 018693835d..94abfa658b 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -473,7 +473,7 @@ jobs: wheel-build-libcuvs: needs: checks secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@build-wheels-old-ctk + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@release/26.04 with: build_type: pull-request node_type: cpu16 @@ -485,7 +485,7 @@ jobs: wheel-build-cuvs: needs: wheel-build-libcuvs secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@build-wheels-old-ctk + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@release/26.04 with: build_type: pull-request node_type: cpu8 diff --git a/ci/test_wheel_cuvs.sh b/ci/test_wheel_cuvs.sh index 32e587e6e7..c0758da20b 100755 --- a/ci/test_wheel_cuvs.sh +++ b/ci/test_wheel_cuvs.sh @@ -6,9 +6,6 @@ set -euo pipefail source rapids-init-pip -# TODO(jameslamb): revert before merging -source ci/use_wheels_from_prs.sh - # Delete system libnccl.so to ensure the wheel is used rm -rf /usr/lib64/libnccl* diff --git a/ci/use_wheels_from_prs.sh b/ci/use_wheels_from_prs.sh deleted file mode 100644 index 3a8b5190d8..0000000000 --- a/ci/use_wheels_from_prs.sh +++ /dev/null @@ -1,53 +0,0 @@ -#!/bin/bash -# SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION. -# SPDX-License-Identifier: Apache-2.0 - -# initialize PIP_CONSTRAINT -source rapids-init-pip - -RAPIDS_PY_CUDA_SUFFIX=$(rapids-wheel-ctk-name-gen "${RAPIDS_CUDA_VERSION}") - -# download wheels, store the directories holding them in variables -RMM_COMMIT=e36df7200d5c05302c8fefbcb94a89aa634ef2b7 -LIBRMM_WHEELHOUSE=$( - RAPIDS_PY_WHEEL_NAME="librmm_${RAPIDS_PY_CUDA_SUFFIX}" rapids-get-pr-artifact rmm 2270 cpp wheel "${RMM_COMMIT}" -) -RMM_WHEELHOUSE=$( - rapids-get-pr-artifact rmm 2270 python wheel --pkg_name rmm --stable "${RMM_COMMIT}" -) - -RAFT_COMMIT=c285d96d34b6f86415bd1502d6f2d232317bed98 -LIBRAFT_WHEELHOUSE=$( - RAPIDS_PY_WHEEL_NAME="libraft_${RAPIDS_PY_CUDA_SUFFIX}" rapids-get-pr-artifact raft 2971 cpp wheel "${RAFT_COMMIT}" -) -PYLIBRAFT_WHEELHOUSE=$( - rapids-get-pr-artifact raft 2971 python wheel --pkg_name pylibraft --stable "${RAFT_COMMIT}" -) -RAFT_DASK_WHEELHOUSE=$( - rapids-get-pr-artifact raft 2971 python wheel --pkg_name raft_dask --stable "${RAFT_COMMIT}" -) - -UCXX_COMMIT=347de3a7c1c694fe8509ee7a6aa3d11f5e674476 -DISTRIBUTED_UCXX_WHEELHOUSE=$( - RAPIDS_PY_WHEEL_NAME="${RAPIDS_PY_CUDA_SUFFIX}" RAPIDS_PY_WHEEL_PURE="1" rapids-get-pr-artifact --pkg_name distributed-ucxx ucxx 604 python wheel -) -LIBUCXX_WHEELHOUSE=$( - RAPIDS_PY_WHEEL_NAME="libucxx_${RAPIDS_PY_CUDA_SUFFIX}" rapids-get-pr-artifact ucxx 604 cpp wheel "${UCXX_COMMIT}" -) -UCXX_WHEELHOUSE=$( - rapids-get-pr-artifact ucxx 604 python wheel --pkg_name ucxx --stable "${UCXX_COMMIT}" -) - -# write a pip constraints file saying e.g. "whenever you encounter a requirement for 'librmm-cu12', use this wheel" -cat >> "${PIP_CONSTRAINT}" <=12.9,<13 - matrix: - cuda: "13.0" + cuda: "13.*" use_cuda_wheels: "true" packages: - &cuda_toolkit_any_cu13 cuda-toolkit[cublas,curand,cusolver,cusparse]==13.* - nvidia-nvjitlink>=13.0,<14 - - matrix: - cuda: "13.1" - use_cuda_wheels: "true" - packages: - - *cuda_toolkit_any_cu13 - - nvidia-nvjitlink>=13.1,<14 # if no matching matrix selectors passed, list a range # (just as a source of documentation, as this populates pyproject.toml in source control) - matrix: From 98b925ffccb08bfe79c01390ab24bc5a238a695c Mon Sep 17 00:00:00 2001 From: James Lamb Date: Wed, 18 Mar 2026 11:54:49 -0500 Subject: [PATCH 19/21] remove more testing stuff --- ci/build_wheel_cuvs.sh | 3 --- ci/build_wheel_libcuvs.sh | 3 --- 2 files changed, 6 deletions(-) diff --git a/ci/build_wheel_cuvs.sh b/ci/build_wheel_cuvs.sh index 825ed43e6c..75be8a6dff 100755 --- a/ci/build_wheel_cuvs.sh +++ b/ci/build_wheel_cuvs.sh @@ -6,9 +6,6 @@ set -euo pipefail source rapids-init-pip -# TODO(jameslamb): revert before merging -source ci/use_wheels_from_prs.sh - package_dir="python/cuvs" RAPIDS_PY_CUDA_SUFFIX="$(rapids-wheel-ctk-name-gen "${RAPIDS_CUDA_VERSION}")" diff --git a/ci/build_wheel_libcuvs.sh b/ci/build_wheel_libcuvs.sh index 0690fa7e12..6eb6bfa5ab 100755 --- a/ci/build_wheel_libcuvs.sh +++ b/ci/build_wheel_libcuvs.sh @@ -6,9 +6,6 @@ set -euo pipefail source rapids-init-pip -# TODO(jameslamb): revert before merging -source ci/use_wheels_from_prs.sh - package_name="libcuvs" package_dir="python/libcuvs" From 21b9b4420d4be27887961dd82e0ed91a58822743 Mon Sep 17 00:00:00 2001 From: James Lamb Date: Wed, 18 Mar 2026 12:20:51 -0500 Subject: [PATCH 20/21] remove unused anchor --- dependencies.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.yaml b/dependencies.yaml index a6833e31f8..e02fc8c07e 100644 --- a/dependencies.yaml +++ b/dependencies.yaml @@ -410,7 +410,7 @@ dependencies: cuda: "13.*" use_cuda_wheels: "true" packages: - - &cuda_toolkit_any_cu13 cuda-toolkit[cublas,curand,cusolver,cusparse]==13.* + - cuda-toolkit[cublas,curand,cusolver,cusparse]==13.* - nvidia-nvjitlink>=13.0,<14 # if no matching matrix selectors passed, list a range # (just as a source of documentation, as this populates pyproject.toml in source control) From 637a506bc67401c3895c266de45049c75b260e04 Mon Sep 17 00:00:00 2001 From: James Lamb Date: Wed, 18 Mar 2026 13:48:59 -0500 Subject: [PATCH 21/21] just use libnvjitlink-dev run_exports, clarify fallback nvidia-nvjitlink entry --- conda/recipes/libcuvs/recipe.yaml | 24 ------------------------ dependencies.yaml | 10 +++++----- python/libcuvs/pyproject.toml | 4 ++-- 3 files changed, 7 insertions(+), 31 deletions(-) diff --git a/conda/recipes/libcuvs/recipe.yaml b/conda/recipes/libcuvs/recipe.yaml index e31af49527..c598bb59ce 100644 --- a/conda/recipes/libcuvs/recipe.yaml +++ b/conda/recipes/libcuvs/recipe.yaml @@ -134,9 +134,6 @@ outputs: - libcurand - libcusolver - libcusparse - - if: cuda_major == "13" - then: - - ${{ pin_compatible("libnvjitlink", lower_bound="x.x.x", upper_bound="x") }} ignore_run_exports: by_name: - cuda-cudart @@ -150,9 +147,6 @@ outputs: - librmm - mkl - nccl - - if: cuda_major == "13" - then: - - libnvjitlink about: homepage: ${{ load_from_file("python/libcuvs/pyproject.toml").project.urls.Homepage }} license: ${{ load_from_file("python/libcuvs/pyproject.toml").project.license }} @@ -203,9 +197,6 @@ outputs: - libcurand - libcusolver - libcusparse - - if: cuda_major == "13" - then: - - ${{ pin_compatible("libnvjitlink", lower_bound="x.x.x", upper_bound="x") }} ignore_run_exports: by_name: - cuda-cudart @@ -219,9 +210,6 @@ outputs: - librmm - mkl - nccl - - if: cuda_major == "13" - then: - - libnvjitlink about: homepage: ${{ load_from_file("python/libcuvs/pyproject.toml").project.urls.Homepage }} license: ${{ load_from_file("python/libcuvs/pyproject.toml").project.license }} @@ -270,9 +258,6 @@ outputs: - libcurand - libcusolver - libcusparse - - if: cuda_major == "13" - then: - - ${{ pin_compatible("libnvjitlink", lower_bound="x.x.x", upper_bound="x") }} ignore_run_exports: by_name: - cuda-cudart @@ -283,9 +268,6 @@ outputs: - libcurand - libcusolver - libcusparse - - if: cuda_major == "13" - then: - - libnvjitlink - librmm - mkl - nccl @@ -436,9 +418,6 @@ outputs: - libcurand - libcusolver - libcusparse - - if: cuda_major == "13" - then: - - ${{ pin_compatible("libnvjitlink", lower_bound="x.x.x", upper_bound="x") }} ignore_run_exports: by_name: - cuda-cudart @@ -449,9 +428,6 @@ outputs: - libcurand - libcusolver - libcusparse - - if: cuda_major == "13" - then: - - libnvjitlink - librmm - mkl - nccl diff --git a/dependencies.yaml b/dependencies.yaml index e02fc8c07e..6cc68b8dda 100644 --- a/dependencies.yaml +++ b/dependencies.yaml @@ -410,14 +410,14 @@ dependencies: cuda: "13.*" use_cuda_wheels: "true" packages: - - cuda-toolkit[cublas,curand,cusolver,cusparse]==13.* - - nvidia-nvjitlink>=13.0,<14 - # if no matching matrix selectors passed, list a range + - &ctk_cu13 cuda-toolkit[cublas,curand,cusolver,cusparse]==13.* + - &nvjitlink_cu13 nvidia-nvjitlink>=13.0,<14 + # if no matching matrix selectors passed, list the CUDA 13 requirement # (just as a source of documentation, as this populates pyproject.toml in source control) - matrix: packages: - - cuda-toolkit[cublas,curand,cusolver,cusparse]>=12,<14 - - nvidia-nvjitlink>=12,<14 + - *ctk_cu13 + - *nvjitlink_cu13 depends_on_cupy: common: - output_types: conda diff --git a/python/libcuvs/pyproject.toml b/python/libcuvs/pyproject.toml index fe43cddc64..052834cab0 100644 --- a/python/libcuvs/pyproject.toml +++ b/python/libcuvs/pyproject.toml @@ -19,10 +19,10 @@ authors = [ license = "Apache-2.0" requires-python = ">=3.11" dependencies = [ - "cuda-toolkit[cublas,curand,cusolver,cusparse]>=12,<14", + "cuda-toolkit[cublas,curand,cusolver,cusparse]==13.*", "libraft==26.4.*,>=0.0.0a0", "librmm==26.4.*,>=0.0.0a0", - "nvidia-nvjitlink>=12,<14", + "nvidia-nvjitlink>=13.0,<14", ] # This list was generated by `rapids-dependency-file-generator`. To make changes, edit ../../dependencies.yaml and run `rapids-dependency-file-generator`. classifiers = [ "Intended Audience :: Developers",