diff --git a/ci/test_wheel_cuvs.sh b/ci/test_wheel_cuvs.sh index eae78b4a89..c0758da20b 100755 --- a/ci/test_wheel_cuvs.sh +++ b/ci/test_wheel_cuvs.sh @@ -13,8 +13,18 @@ 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 "${PIP_CONSTRAINT}" + +# notes: +# +# * echo to expand wildcard before adding `[test]` requires for pip +# * 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 \ + --prefer-binary \ + --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..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: - - libnvjitlink 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: - - libnvjitlink 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: - - libnvjitlink 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: - - libnvjitlink 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 2c093251e0..6cc68b8dda 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 @@ -314,6 +316,51 @@ dependencies: cuda: "13.1" packages: - 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: + # 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: common: - output_types: [conda] @@ -337,26 +384,40 @@ dependencies: packages: cuda_wheels: specific: + # cuVS needs 'nvJitLink>={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 - matrix: - cuda: "12.*" - use_cuda_wheels: "true" + use_cuda_wheels: "false" packages: - - cuda-toolkit[cublas,curand,cusolver,cusparse,nvjitlink]==12.* + # 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: "13.*" + cuda: "12.9" use_cuda_wheels: "true" packages: - - cuda-toolkit[cublas,curand,cusolver,cusparse,nvjitlink]==13.* + - cuda-toolkit[cublas,curand,cusolver,cusparse]==12.* + - nvidia-nvjitlink-cu12>=12.9,<13 - matrix: - use_cuda_wheels: "false" + cuda: "13.*" + use_cuda_wheels: "true" packages: - # 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,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 f43bc35dbf..052834cab0 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]==13.*", "libraft==26.4.*,>=0.0.0a0", "librmm==26.4.*,>=0.0.0a0", + "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",