diff --git a/.devcontainer/cuda13.0-conda/devcontainer.json b/.devcontainer/cuda13.0-conda/devcontainer.json new file mode 100644 index 0000000000..e69607dc06 --- /dev/null +++ b/.devcontainer/cuda13.0-conda/devcontainer.json @@ -0,0 +1,44 @@ +{ + "build": { + "context": "${localWorkspaceFolder}/.devcontainer", + "dockerfile": "${localWorkspaceFolder}/.devcontainer/Dockerfile", + "args": { + "CUDA": "13.0", + "PYTHON_PACKAGE_MANAGER": "conda", + "BASE": "rapidsai/devcontainers:25.10-cpp-mambaforge" + } + }, + "runArgs": [ + "--rm", + "--name", + "${localEnv:USER:anon}-rapids-${localWorkspaceFolderBasename}-25.10-cuda13.0-conda", + "--ulimit", + "nofile=500000" + ], + "hostRequirements": {"gpu": "optional"}, + "features": { + "ghcr.io/rapidsai/devcontainers/features/rapids-build-utils:25.10": {} + }, + "overrideFeatureInstallOrder": [ + "ghcr.io/rapidsai/devcontainers/features/rapids-build-utils" + ], + "initializeCommand": ["/bin/bash", "-c", "mkdir -m 0755 -p ${localWorkspaceFolder}/../.{aws,cache,config,conda/pkgs,conda/${localWorkspaceFolderBasename}-cuda13.0-envs}"], + "postAttachCommand": ["/bin/bash", "-c", "if [ ${CODESPACES:-false} = 'true' ]; then . devcontainer-utils-post-attach-command; . rapids-post-attach-command; fi"], + "workspaceFolder": "/home/coder", + "workspaceMount": "source=${localWorkspaceFolder},target=/home/coder/cuvs,type=bind,consistency=consistent", + "mounts": [ + "source=${localWorkspaceFolder}/../.aws,target=/home/coder/.aws,type=bind,consistency=consistent", + "source=${localWorkspaceFolder}/../.cache,target=/home/coder/.cache,type=bind,consistency=consistent", + "source=${localWorkspaceFolder}/../.config,target=/home/coder/.config,type=bind,consistency=consistent", + "source=${localWorkspaceFolder}/../.conda/pkgs,target=/home/coder/.conda/pkgs,type=bind,consistency=consistent", + "source=${localWorkspaceFolder}/../.conda/${localWorkspaceFolderBasename}-cuda13.0-envs,target=/home/coder/.conda/envs,type=bind,consistency=consistent" + ], + "customizations": { + "vscode": { + "extensions": [ + "ms-python.flake8", + "nvidia.nsight-vscode-edition" + ] + } + } +} diff --git a/.devcontainer/cuda13.0-pip/devcontainer.json b/.devcontainer/cuda13.0-pip/devcontainer.json new file mode 100644 index 0000000000..27f0acd3f4 --- /dev/null +++ b/.devcontainer/cuda13.0-pip/devcontainer.json @@ -0,0 +1,52 @@ +{ + "build": { + "context": "${localWorkspaceFolder}/.devcontainer", + "dockerfile": "${localWorkspaceFolder}/.devcontainer/Dockerfile", + "args": { + "CUDA": "13.0", + "PYTHON_PACKAGE_MANAGER": "pip", + "BASE": "rapidsai/devcontainers:25.10-cpp-cuda13.0-ucx1.19.0-openmpi5.0.7" + } + }, + "runArgs": [ + "--rm", + "--name", + "${localEnv:USER:anon}-rapids-${localWorkspaceFolderBasename}-25.10-cuda13.0-pip", + "--ulimit", + "nofile=500000" + ], + "hostRequirements": {"gpu": "optional"}, + "features": { + "ghcr.io/rapidsai/devcontainers/features/cuda:25.10": { + "version": "13.0", + "installcuBLAS": true, + "installcuSOLVER": true, + "installcuRAND": true, + "installcuSPARSE": true + }, + "ghcr.io/rapidsai/devcontainers/features/rapids-build-utils:25.10": {} + }, + "overrideFeatureInstallOrder": [ + "ghcr.io/rapidsai/devcontainers/features/ucx", + "ghcr.io/rapidsai/devcontainers/features/cuda", + "ghcr.io/rapidsai/devcontainers/features/rapids-build-utils" + ], + "initializeCommand": ["/bin/bash", "-c", "mkdir -m 0755 -p ${localWorkspaceFolder}/../.{aws,cache,config/pip,local/share/${localWorkspaceFolderBasename}-cuda13.0-venvs}"], + "postAttachCommand": ["/bin/bash", "-c", "if [ ${CODESPACES:-false} = 'true' ]; then . devcontainer-utils-post-attach-command; . rapids-post-attach-command; fi"], + "workspaceFolder": "/home/coder", + "workspaceMount": "source=${localWorkspaceFolder},target=/home/coder/cuvs,type=bind,consistency=consistent", + "mounts": [ + "source=${localWorkspaceFolder}/../.aws,target=/home/coder/.aws,type=bind,consistency=consistent", + "source=${localWorkspaceFolder}/../.cache,target=/home/coder/.cache,type=bind,consistency=consistent", + "source=${localWorkspaceFolder}/../.config,target=/home/coder/.config,type=bind,consistency=consistent", + "source=${localWorkspaceFolder}/../.local/share/${localWorkspaceFolderBasename}-cuda13.0-venvs,target=/home/coder/.local/share/venvs,type=bind,consistency=consistent" + ], + "customizations": { + "vscode": { + "extensions": [ + "ms-python.flake8", + "nvidia.nsight-vscode-edition" + ] + } + } +} diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 210ade79ca..ccb75dbdb7 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -34,7 +34,7 @@ concurrency: jobs: cpp-build: secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-build.yaml@branch-25.10 + uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-build.yaml@cuda13.0 with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} @@ -44,46 +44,71 @@ jobs: rust-build: needs: cpp-build secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@branch-25.10 + uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@cuda13.0 + # 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: + - '12.9.1' + - '13.0.0' with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} arch: "amd64" date: ${{ inputs.date }} - container_image: "rapidsai/ci-conda:25.10-latest" + container_image: "rapidsai/ci-conda:25.10-cuda${{ matrix.cuda_version }}-ubuntu24.04-py3.13" node_type: "gpu-l4-latest-1" script: "ci/build_rust.sh" sha: ${{ inputs.sha }} go-build: needs: cpp-build secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@branch-25.10 + uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@cuda13.0 + # 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: + - '12.9.1' + - '13.0.0' with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} arch: "amd64" date: ${{ inputs.date }} - container_image: "rapidsai/ci-conda:25.10-latest" + container_image: "rapidsai/ci-conda:25.10-cuda${{ matrix.cuda_version }}-ubuntu24.04-py3.13" node_type: "gpu-l4-latest-1" script: "ci/build_go.sh" sha: ${{ inputs.sha }} java-build: needs: cpp-build secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@branch-25.10 + uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@cuda13.0 + # 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: + - '12.9.1' + - '13.0.0' with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} arch: "amd64" date: ${{ inputs.date }} - container_image: "rapidsai/ci-conda:25.10-latest" + container_image: "rapidsai/ci-conda:25.10-cuda${{ matrix.cuda_version }}-ubuntu24.04-py3.13" script: "ci/build_java.sh" + artifact-name: "cuvs-java-cuda${{ matrix.cuda_version }}" file_to_upload: "java/cuvs-java/target/" sha: ${{ inputs.sha }} python-build: needs: [cpp-build] secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/conda-python-build.yaml@branch-25.10 + uses: rapidsai/shared-workflows/.github/workflows/conda-python-build.yaml@cuda13.0 with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} @@ -93,7 +118,7 @@ jobs: upload-conda: needs: [cpp-build, python-build] secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/conda-upload-packages.yaml@branch-25.10 + uses: rapidsai/shared-workflows/.github/workflows/conda-upload-packages.yaml@cuda13.0 with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} @@ -108,7 +133,7 @@ jobs: if: github.ref_type == 'branch' needs: python-build secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@branch-25.10 + uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@cuda13.0 with: arch: "amd64" branch: ${{ inputs.branch }} @@ -120,7 +145,7 @@ jobs: sha: ${{ inputs.sha }} wheel-build-libcuvs: secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@branch-25.10 + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@cuda13.0 with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} @@ -134,7 +159,7 @@ jobs: wheel-publish-libcuvs: needs: wheel-build-libcuvs secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@branch-25.10 + uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@cuda13.0 with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} @@ -145,7 +170,7 @@ jobs: wheel-build-cuvs: needs: wheel-build-libcuvs secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@branch-25.10 + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@cuda13.0 with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} @@ -157,7 +182,7 @@ jobs: wheel-publish-cuvs: needs: wheel-build-cuvs secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@branch-25.10 + uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@cuda13.0 with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 41fbc93a84..2c7a61fd39 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -27,7 +27,7 @@ jobs: - devcontainer - telemetry-setup secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/pr-builder.yaml@branch-25.10 + uses: rapidsai/shared-workflows/.github/workflows/pr-builder.yaml@cuda13.0 if: always() with: needs: ${{ toJSON(needs) }} @@ -54,7 +54,7 @@ jobs: changed-files: needs: telemetry-setup secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/changed-files.yaml@branch-25.10 + uses: rapidsai/shared-workflows/.github/workflows/changed-files.yaml@cuda13.0 with: files_yaml: | test_cpp: @@ -106,14 +106,14 @@ jobs: checks: needs: telemetry-setup secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/checks.yaml@branch-25.10 + uses: rapidsai/shared-workflows/.github/workflows/checks.yaml@cuda13.0 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@branch-25.10 + uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-build.yaml@cuda13.0 with: build_type: pull-request node_type: cpu16 @@ -121,7 +121,7 @@ jobs: conda-cpp-tests: needs: [conda-cpp-build, changed-files] secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-tests.yaml@branch-25.10 + uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-tests.yaml@cuda13.0 if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp with: build_type: pull-request @@ -129,21 +129,21 @@ jobs: conda-cpp-checks: needs: conda-cpp-build secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-post-build-checks.yaml@branch-25.10 + uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-post-build-checks.yaml@cuda13.0 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@branch-25.10 + uses: rapidsai/shared-workflows/.github/workflows/conda-python-build.yaml@cuda13.0 with: build_type: pull-request script: ci/build_python.sh conda-python-tests: needs: [conda-python-build, changed-files] secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/conda-python-tests.yaml@branch-25.10 + uses: rapidsai/shared-workflows/.github/workflows/conda-python-tests.yaml@cuda13.0 if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python with: build_type: pull-request @@ -151,19 +151,28 @@ jobs: conda-java-tests: needs: [conda-cpp-build, changed-files] secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@branch-25.10 + uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@cuda13.0 if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_java + # 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: + - '12.9.1' + - '13.0.0' with: build_type: pull-request node_type: "gpu-l4-latest-1" arch: "amd64" - container_image: "rapidsai/ci-conda:25.10-latest" + container_image: "rapidsai/ci-conda:25.10-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/" docs-build: needs: conda-python-build secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@branch-25.10 + uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@cuda13.0 with: build_type: pull-request node_type: "gpu-l4-latest-1" @@ -173,27 +182,43 @@ jobs: rust-build: needs: conda-cpp-build secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@branch-25.10 + uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@cuda13.0 + # 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: + - '12.9.1' + - '13.0.0' with: build_type: pull-request node_type: "gpu-l4-latest-1" arch: "amd64" - container_image: "rapidsai/ci-conda:25.10-latest" + container_image: "rapidsai/ci-conda:25.10-cuda${{ matrix.cuda_version }}-ubuntu24.04-py3.13" script: "ci/build_rust.sh" go-build: needs: conda-cpp-build secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@branch-25.10 + uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@cuda13.0 + # 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: + - '12.9.1' + - '13.0.0' with: build_type: pull-request node_type: "gpu-l4-latest-1" arch: "amd64" - container_image: "rapidsai/ci-conda:25.10-latest" + container_image: "rapidsai/ci-conda:25.10-cuda${{ matrix.cuda_version }}-ubuntu24.04-py3.13" script: "ci/build_go.sh" wheel-build-libcuvs: needs: checks secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@branch-25.10 + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@cuda13.0 with: build_type: pull-request script: ci/build_wheel_libcuvs.sh @@ -204,7 +229,7 @@ jobs: wheel-build-cuvs: needs: wheel-build-libcuvs secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@branch-25.10 + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@cuda13.0 with: build_type: pull-request script: ci/build_wheel_cuvs.sh @@ -213,7 +238,7 @@ jobs: wheel-tests-cuvs: needs: [wheel-build-cuvs, changed-files] secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@branch-25.10 + uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@cuda13.0 if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python with: build_type: pull-request @@ -221,10 +246,10 @@ jobs: devcontainer: secrets: inherit needs: telemetry-setup - uses: rapidsai/shared-workflows/.github/workflows/build-in-devcontainer.yaml@branch-25.10 + uses: rapidsai/shared-workflows/.github/workflows/build-in-devcontainer.yaml@cuda13.0 with: arch: '["amd64", "arm64"]' - cuda: '["12.9"]' + cuda: '["13.0"]' node_type: "cpu8" rapids-aux-secret-1: GIST_REPO_READ_ORG_GITHUB_TOKEN env: | diff --git a/.github/workflows/publish-rust.yaml b/.github/workflows/publish-rust.yaml index 7834e6bc96..c74af7e7f1 100644 --- a/.github/workflows/publish-rust.yaml +++ b/.github/workflows/publish-rust.yaml @@ -10,8 +10,13 @@ defaults: jobs: rust-publish: runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + cuda_version: + - '12.9.1' container: - image: rapidsai/ci-conda:25.10-latest + image: "rapidsai/ci-conda:25.10-cuda${{ matrix.cuda_version }}-ubuntu24.04-py3.13" steps: - uses: actions/checkout@v4 - name: Check if release build diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 8479ce38a4..51418cbd22 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -25,7 +25,7 @@ on: jobs: conda-cpp-checks: secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-post-build-checks.yaml@branch-25.10 + uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-post-build-checks.yaml@cuda13.0 with: build_type: ${{ inputs.build_type }} branch: ${{ inputs.branch }} @@ -34,7 +34,7 @@ jobs: symbol_exclusions: (void (thrust::|cub::)) conda-cpp-tests: secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-tests.yaml@branch-25.10 + uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-tests.yaml@cuda13.0 with: build_type: ${{ inputs.build_type }} branch: ${{ inputs.branch }} @@ -43,7 +43,7 @@ jobs: sha: ${{ inputs.sha }} conda-python-tests: secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/conda-python-tests.yaml@branch-25.10 + uses: rapidsai/shared-workflows/.github/workflows/conda-python-tests.yaml@cuda13.0 with: build_type: ${{ inputs.build_type }} branch: ${{ inputs.branch }} @@ -52,7 +52,15 @@ jobs: sha: ${{ inputs.sha }} conda-java-tests: secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@branch-25.10 + uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@cuda13.0 + # 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: + - '12.9.1' + - '13.0.0' with: build_type: ${{ inputs.build_type }} branch: ${{ inputs.branch }} @@ -60,11 +68,11 @@ jobs: sha: ${{ inputs.sha }} node_type: "gpu-l4-latest-1" arch: "amd64" - container_image: "rapidsai/ci-conda:25.10-latest" + container_image: "rapidsai/ci-conda:25.10-cuda${{ matrix.cuda_version }}-ubuntu24.04-py3.13" script: "ci/test_java.sh" wheel-tests-cuvs: secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@branch-25.10 + uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@cuda13.0 with: build_type: ${{ inputs.build_type }} branch: ${{ inputs.branch }} diff --git a/.github/workflows/trigger-breaking-change-alert.yaml b/.github/workflows/trigger-breaking-change-alert.yaml index 48bf37afc4..72751d071b 100644 --- a/.github/workflows/trigger-breaking-change-alert.yaml +++ b/.github/workflows/trigger-breaking-change-alert.yaml @@ -12,7 +12,7 @@ jobs: trigger-notifier: if: contains(github.event.pull_request.labels.*.name, 'breaking') secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/breaking-change-alert.yaml@branch-25.10 + uses: rapidsai/shared-workflows/.github/workflows/breaking-change-alert.yaml@cuda13.0 with: sender_login: ${{ github.event.sender.login }} sender_avatar: ${{ github.event.sender.avatar_url }} diff --git a/README.md b/README.md index 1604428492..a81dd1b64f 100755 --- a/README.md +++ b/README.md @@ -95,8 +95,11 @@ conda install -c rapidsai -c conda-forge cuvs The cuVS Python package can also be `installed through pip `_. -For CUDA 12 packages: ```bash +# CUDA 13 +pip install cuvs-cu13 --extra-index-url=https://pypi.nvidia.com + +# CUDA 12 pip install cuvs-cu12 --extra-index-url=https://pypi.nvidia.com ``` @@ -104,7 +107,11 @@ pip install cuvs-cu12 --extra-index-url=https://pypi.nvidia.com If installing a version that has not yet been released, the `rapidsai` channel can be replaced with `rapidsai-nightly`: ```bash -conda install -c rapidsai-nightly -c conda-forge cuvs=25.10 +# CUDA 13 +conda install -c rapidsai-nightly -c conda-forge cuvs=25.10 cuda-version=13.0 + +# CUDA 12 +conda install -c rapidsai-nightly -c conda-forge cuvs=25.10 cuda-version=12.9 ``` cuVS also has `pip` wheel packages that can be installed. Please see the [Build and Install Guide](https://docs.rapids.ai/api/cuvs/nightly/build/) for more information on installing the available cuVS packages and building from source. diff --git a/ci/build_java.sh b/ci/build_java.sh index 175cc9a559..b692bbbffd 100755 --- a/ci/build_java.sh +++ b/ci/build_java.sh @@ -41,6 +41,9 @@ set +e rapids-logger "Run Java build" +RAPIDS_CUDA_MAJOR="${RAPIDS_CUDA_VERSION%%.*}" +export RAPIDS_CUDA_MAJOR + bash ./build.sh java "${EXTRA_BUILD_ARGS[@]}" rapids-logger "Test script exiting with value: $EXITCODE" diff --git a/ci/build_python.sh b/ci/build_python.sh index 8ee818341c..d4956cce78 100755 --- a/ci/build_python.sh +++ b/ci/build_python.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright (c) 2022-2024, NVIDIA CORPORATION. +# Copyright (c) 2022-2025, NVIDIA CORPORATION. set -euo pipefail @@ -54,7 +54,7 @@ sccache --zero-stats # Build cuvs-bench-cpu only in one CUDA major version since it only depends on # python version RAPIDS_CUDA_MAJOR="${RAPIDS_CUDA_VERSION%%.*}" -if [[ ${RAPIDS_CUDA_MAJOR} == "12" ]]; then +if [[ ${RAPIDS_CUDA_MAJOR} == "13" ]]; then rattler-build build --recipe conda/recipes/cuvs-bench-cpu \ "${RATTLER_ARGS[@]}" \ "${RATTLER_CHANNELS[@]}" diff --git a/ci/test_java.sh b/ci/test_java.sh index 7c7d77860a..20c19b6dee 100755 --- a/ci/test_java.sh +++ b/ci/test_java.sh @@ -12,6 +12,9 @@ nvidia-smi rapids-logger "Run Java build and tests" +RAPIDS_CUDA_MAJOR="${RAPIDS_CUDA_VERSION%%.*}" +export RAPIDS_CUDA_MAJOR + # TODO: switch to installing pre-built artifacts instead of rebuilding in test jobs # ref: https://github.com/rapidsai/cuvs/issues/868 ci/build_java.sh --run-java-tests diff --git a/conda/environments/all_cuda-129_arch-aarch64.yaml b/conda/environments/all_cuda-129_arch-aarch64.yaml index 45bb00e8df..a877f09e23 100644 --- a/conda/environments/all_cuda-129_arch-aarch64.yaml +++ b/conda/environments/all_cuda-129_arch-aarch64.yaml @@ -15,9 +15,9 @@ dependencies: - cuda-nvcc - cuda-nvtx-dev - cuda-profiler-api -- cuda-python>=12.6.2,<13.0a0 +- cuda-python>=12.9.2,<13.0a0 - cuda-version=12.9 -- cupy>=12.0.0 +- cupy>=13.6.0 - cxx-compiler - cython>=3.0.0 - dlpack>=0.8,<1.0 diff --git a/conda/environments/all_cuda-129_arch-x86_64.yaml b/conda/environments/all_cuda-129_arch-x86_64.yaml index 46a0f234c7..588bfa8d64 100644 --- a/conda/environments/all_cuda-129_arch-x86_64.yaml +++ b/conda/environments/all_cuda-129_arch-x86_64.yaml @@ -15,9 +15,9 @@ dependencies: - cuda-nvcc - cuda-nvtx-dev - cuda-profiler-api -- cuda-python>=12.6.2,<13.0a0 +- cuda-python>=12.9.2,<13.0a0 - cuda-version=12.9 -- cupy>=12.0.0 +- cupy>=13.6.0 - cxx-compiler - cython>=3.0.0 - dlpack>=0.8,<1.0 diff --git a/conda/environments/all_cuda-130_arch-aarch64.yaml b/conda/environments/all_cuda-130_arch-aarch64.yaml new file mode 100644 index 0000000000..ebf59a3f99 --- /dev/null +++ b/conda/environments/all_cuda-130_arch-aarch64.yaml @@ -0,0 +1,56 @@ +# This file is generated by `rapids-dependency-file-generator`. +# To make changes, edit ../../dependencies.yaml and run `rapids-dependency-file-generator`. +channels: +- rapidsai +- rapidsai-nightly +- conda-forge +dependencies: +- _go_select *=cgo +- breathe>=4.35.0 +- c-compiler +- clang-tools==20.1.4 +- clang==20.1.4 +- cmake>=3.30.4 +- cuda-cudart-dev +- cuda-nvcc +- cuda-nvtx-dev +- cuda-profiler-api +- cuda-python>=13.0.1,<14.0a0 +- cuda-version=13.0 +- cupy>=13.6.0 +- cxx-compiler +- cython>=3.0.0 +- dlpack>=0.8,<1.0 +- doxygen>=1.8.20 +- gcc_linux-aarch64=14.* +- go +- graphviz +- ipython +- libclang==20.1.4 +- libcublas-dev +- libcurand-dev +- libcusolver-dev +- libcusparse-dev +- librmm==25.10.*,>=0.0.0a0 +- make +- nccl>=2.19 +- ninja +- numpy>=1.23,<3.0a0 +- numpydoc +- openblas +- pre-commit +- pylibraft==25.10.*,>=0.0.0a0 +- pytest +- pytest-cov +- rapids-build-backend>=0.4.0,<0.5.0.dev0 +- recommonmark +- rust +- scikit-build-core>=0.10.0 +- scikit-learn +- sphinx-copybutton +- sphinx-markdown-tables +- sphinx>=8.0.0 +- sysroot_linux-aarch64==2.28 +- pip: + - nvidia-sphinx-theme +name: all_cuda-130_arch-aarch64 diff --git a/conda/environments/all_cuda-130_arch-x86_64.yaml b/conda/environments/all_cuda-130_arch-x86_64.yaml new file mode 100644 index 0000000000..8433f4adff --- /dev/null +++ b/conda/environments/all_cuda-130_arch-x86_64.yaml @@ -0,0 +1,56 @@ +# This file is generated by `rapids-dependency-file-generator`. +# To make changes, edit ../../dependencies.yaml and run `rapids-dependency-file-generator`. +channels: +- rapidsai +- rapidsai-nightly +- conda-forge +dependencies: +- _go_select *=cgo +- breathe>=4.35.0 +- c-compiler +- clang-tools==20.1.4 +- clang==20.1.4 +- cmake>=3.30.4 +- cuda-cudart-dev +- cuda-nvcc +- cuda-nvtx-dev +- cuda-profiler-api +- cuda-python>=13.0.1,<14.0a0 +- cuda-version=13.0 +- cupy>=13.6.0 +- cxx-compiler +- cython>=3.0.0 +- dlpack>=0.8,<1.0 +- doxygen>=1.8.20 +- gcc_linux-64=14.* +- go +- graphviz +- ipython +- libclang==20.1.4 +- libcublas-dev +- libcurand-dev +- libcusolver-dev +- libcusparse-dev +- librmm==25.10.*,>=0.0.0a0 +- make +- nccl>=2.19 +- ninja +- numpy>=1.23,<3.0a0 +- numpydoc +- openblas +- pre-commit +- pylibraft==25.10.*,>=0.0.0a0 +- pytest +- pytest-cov +- rapids-build-backend>=0.4.0,<0.5.0.dev0 +- recommonmark +- rust +- scikit-build-core>=0.10.0 +- scikit-learn +- sphinx-copybutton +- sphinx-markdown-tables +- sphinx>=8.0.0 +- sysroot_linux-64==2.28 +- pip: + - nvidia-sphinx-theme +name: all_cuda-130_arch-x86_64 diff --git a/conda/environments/bench_ann_cuda-129_arch-aarch64.yaml b/conda/environments/bench_ann_cuda-129_arch-aarch64.yaml index 7ffb09777b..7735923261 100644 --- a/conda/environments/bench_ann_cuda-129_arch-aarch64.yaml +++ b/conda/environments/bench_ann_cuda-129_arch-aarch64.yaml @@ -15,9 +15,9 @@ dependencies: - cuda-nvcc - cuda-nvtx-dev - cuda-profiler-api -- cuda-python>=12.6.2,<13.0a0 +- cuda-python>=12.9.2,<13.0a0 - cuda-version=12.9 -- cupy>=12.0.0 +- cupy>=13.6.0 - cuvs==25.10.*,>=0.0.0a0 - cxx-compiler - cython>=3.0.0 diff --git a/conda/environments/bench_ann_cuda-129_arch-x86_64.yaml b/conda/environments/bench_ann_cuda-129_arch-x86_64.yaml index fcd0f89053..96e2c34d5d 100644 --- a/conda/environments/bench_ann_cuda-129_arch-x86_64.yaml +++ b/conda/environments/bench_ann_cuda-129_arch-x86_64.yaml @@ -15,9 +15,9 @@ dependencies: - cuda-nvcc - cuda-nvtx-dev - cuda-profiler-api -- cuda-python>=12.6.2,<13.0a0 +- cuda-python>=12.9.2,<13.0a0 - cuda-version=12.9 -- cupy>=12.0.0 +- cupy>=13.6.0 - cuvs==25.10.*,>=0.0.0a0 - cxx-compiler - cython>=3.0.0 diff --git a/conda/environments/bench_ann_cuda-130_arch-aarch64.yaml b/conda/environments/bench_ann_cuda-130_arch-aarch64.yaml new file mode 100644 index 0000000000..939a24b445 --- /dev/null +++ b/conda/environments/bench_ann_cuda-130_arch-aarch64.yaml @@ -0,0 +1,49 @@ +# This file is generated by `rapids-dependency-file-generator`. +# To make changes, edit ../../dependencies.yaml and run `rapids-dependency-file-generator`. +channels: +- rapidsai +- rapidsai-nightly +- conda-forge +dependencies: +- benchmark>=1.8.2 +- c-compiler +- clang-tools==20.1.4 +- clang==20.1.4 +- click +- cmake>=3.30.4 +- cuda-cudart-dev +- cuda-nvcc +- cuda-nvtx-dev +- cuda-profiler-api +- cuda-python>=13.0.1,<14.0a0 +- cuda-version=13.0 +- cupy>=13.6.0 +- cuvs==25.10.*,>=0.0.0a0 +- cxx-compiler +- cython>=3.0.0 +- dlpack>=0.8,<1.0 +- gcc_linux-aarch64=14.* +- glog>=0.6.0 +- h5py>=3.8.0 +- libclang==20.1.4 +- libcublas-dev +- libcurand-dev +- libcusolver-dev +- libcusparse-dev +- libcuvs==25.10.*,>=0.0.0a0 +- librmm==25.10.*,>=0.0.0a0 +- matplotlib-base>=3.9 +- nccl>=2.19 +- ninja +- nlohmann_json>=3.11.2 +- openblas +- pandas +- pylibraft==25.10.*,>=0.0.0a0 +- pyyaml +- rapids-build-backend>=0.4.0,<0.5.0.dev0 +- requests +- scikit-learn +- setuptools +- sysroot_linux-aarch64==2.28 +- wheel +name: bench_ann_cuda-130_arch-aarch64 diff --git a/conda/environments/bench_ann_cuda-130_arch-x86_64.yaml b/conda/environments/bench_ann_cuda-130_arch-x86_64.yaml new file mode 100644 index 0000000000..296c1fc03a --- /dev/null +++ b/conda/environments/bench_ann_cuda-130_arch-x86_64.yaml @@ -0,0 +1,52 @@ +# This file is generated by `rapids-dependency-file-generator`. +# To make changes, edit ../../dependencies.yaml and run `rapids-dependency-file-generator`. +channels: +- rapidsai +- rapidsai-nightly +- conda-forge +dependencies: +- benchmark>=1.8.2 +- c-compiler +- clang-tools==20.1.4 +- clang==20.1.4 +- click +- cmake>=3.30.4 +- cuda-cudart-dev +- cuda-nvcc +- cuda-nvtx-dev +- cuda-profiler-api +- cuda-python>=13.0.1,<14.0a0 +- cuda-version=13.0 +- cupy>=13.6.0 +- cuvs==25.10.*,>=0.0.0a0 +- cxx-compiler +- cython>=3.0.0 +- dlpack>=0.8,<1.0 +- gcc_linux-64=14.* +- glog>=0.6.0 +- h5py>=3.8.0 +- libaio +- libboost-devel=1.87 +- libclang==20.1.4 +- libcublas-dev +- libcurand-dev +- libcusolver-dev +- libcusparse-dev +- libcuvs==25.10.*,>=0.0.0a0 +- librmm==25.10.*,>=0.0.0a0 +- matplotlib-base>=3.9 +- mkl-devel=2023 +- nccl>=2.19 +- ninja +- nlohmann_json>=3.11.2 +- openblas +- pandas +- pylibraft==25.10.*,>=0.0.0a0 +- pyyaml +- rapids-build-backend>=0.4.0,<0.5.0.dev0 +- requests +- scikit-learn +- setuptools +- sysroot_linux-64==2.28 +- wheel +name: bench_ann_cuda-130_arch-x86_64 diff --git a/conda/environments/go_cuda-130_arch-aarch64.yaml b/conda/environments/go_cuda-130_arch-aarch64.yaml new file mode 100644 index 0000000000..3359dd084a --- /dev/null +++ b/conda/environments/go_cuda-130_arch-aarch64.yaml @@ -0,0 +1,32 @@ +# This file is generated by `rapids-dependency-file-generator`. +# To make changes, edit ../../dependencies.yaml and run `rapids-dependency-file-generator`. +channels: +- rapidsai +- rapidsai-nightly +- conda-forge +dependencies: +- _go_select *=cgo +- c-compiler +- clang-tools==20.1.4 +- clang==20.1.4 +- cmake>=3.30.4 +- cuda-cudart-dev +- cuda-nvcc +- cuda-nvtx-dev +- cuda-profiler-api +- cuda-version=13.0 +- cxx-compiler +- dlpack>=0.8,<1.0 +- gcc_linux-aarch64=14.* +- go +- libclang==20.1.4 +- libcublas-dev +- libcurand-dev +- libcusolver-dev +- libcusparse-dev +- libcuvs==25.10.*,>=0.0.0a0 +- libraft==25.10.*,>=0.0.0a0 +- nccl>=2.19 +- ninja +- sysroot_linux-aarch64==2.28 +name: go_cuda-130_arch-aarch64 diff --git a/conda/environments/go_cuda-130_arch-x86_64.yaml b/conda/environments/go_cuda-130_arch-x86_64.yaml new file mode 100644 index 0000000000..a9a6a90cf1 --- /dev/null +++ b/conda/environments/go_cuda-130_arch-x86_64.yaml @@ -0,0 +1,32 @@ +# This file is generated by `rapids-dependency-file-generator`. +# To make changes, edit ../../dependencies.yaml and run `rapids-dependency-file-generator`. +channels: +- rapidsai +- rapidsai-nightly +- conda-forge +dependencies: +- _go_select *=cgo +- c-compiler +- clang-tools==20.1.4 +- clang==20.1.4 +- cmake>=3.30.4 +- cuda-cudart-dev +- cuda-nvcc +- cuda-nvtx-dev +- cuda-profiler-api +- cuda-version=13.0 +- cxx-compiler +- dlpack>=0.8,<1.0 +- gcc_linux-64=14.* +- go +- libclang==20.1.4 +- libcublas-dev +- libcurand-dev +- libcusolver-dev +- libcusparse-dev +- libcuvs==25.10.*,>=0.0.0a0 +- libraft==25.10.*,>=0.0.0a0 +- nccl>=2.19 +- ninja +- sysroot_linux-64==2.28 +name: go_cuda-130_arch-x86_64 diff --git a/conda/environments/rust_cuda-130_arch-aarch64.yaml b/conda/environments/rust_cuda-130_arch-aarch64.yaml new file mode 100644 index 0000000000..751e44f36b --- /dev/null +++ b/conda/environments/rust_cuda-130_arch-aarch64.yaml @@ -0,0 +1,31 @@ +# This file is generated by `rapids-dependency-file-generator`. +# To make changes, edit ../../dependencies.yaml and run `rapids-dependency-file-generator`. +channels: +- rapidsai +- rapidsai-nightly +- conda-forge +dependencies: +- c-compiler +- clang-tools==20.1.4 +- clang==20.1.4 +- cmake>=3.30.4 +- cuda-cudart-dev +- cuda-nvcc +- cuda-nvtx-dev +- cuda-profiler-api +- cuda-version=13.0 +- cxx-compiler +- gcc_linux-aarch64=14.* +- libclang==20.1.4 +- libcublas-dev +- libcurand-dev +- libcusolver-dev +- libcusparse-dev +- libcuvs==25.10.*,>=0.0.0a0 +- libraft==25.10.*,>=0.0.0a0 +- make +- nccl>=2.19 +- ninja +- rust +- sysroot_linux-aarch64==2.28 +name: rust_cuda-130_arch-aarch64 diff --git a/conda/environments/rust_cuda-130_arch-x86_64.yaml b/conda/environments/rust_cuda-130_arch-x86_64.yaml new file mode 100644 index 0000000000..56f7c9830e --- /dev/null +++ b/conda/environments/rust_cuda-130_arch-x86_64.yaml @@ -0,0 +1,31 @@ +# This file is generated by `rapids-dependency-file-generator`. +# To make changes, edit ../../dependencies.yaml and run `rapids-dependency-file-generator`. +channels: +- rapidsai +- rapidsai-nightly +- conda-forge +dependencies: +- c-compiler +- clang-tools==20.1.4 +- clang==20.1.4 +- cmake>=3.30.4 +- cuda-cudart-dev +- cuda-nvcc +- cuda-nvtx-dev +- cuda-profiler-api +- cuda-version=13.0 +- cxx-compiler +- gcc_linux-64=14.* +- libclang==20.1.4 +- libcublas-dev +- libcurand-dev +- libcusolver-dev +- libcusparse-dev +- libcuvs==25.10.*,>=0.0.0a0 +- libraft==25.10.*,>=0.0.0a0 +- make +- nccl>=2.19 +- ninja +- rust +- sysroot_linux-64==2.28 +name: rust_cuda-130_arch-x86_64 diff --git a/conda/recipes/cuvs-bench/recipe.yaml b/conda/recipes/cuvs-bench/recipe.yaml index a823877926..fe12bea9ae 100644 --- a/conda/recipes/cuvs-bench/recipe.yaml +++ b/conda/recipes/cuvs-bench/recipe.yaml @@ -40,7 +40,7 @@ requirements: - benchmark - click - cuda-cudart - - cupy >=12.0.0 + - cupy >=13.6.0 - cuvs =${{ version }} - glog ${{ glog_version }} - h5py ${{ h5py_version }} diff --git a/conda/recipes/cuvs/recipe.yaml b/conda/recipes/cuvs/recipe.yaml index e7b9f6de99..f3fd05f8f3 100644 --- a/conda/recipes/cuvs/recipe.yaml +++ b/conda/recipes/cuvs/recipe.yaml @@ -58,7 +58,9 @@ requirements: - python =${{ py_version }} - rapids-build-backend >=0.4.0,<0.5.0.dev0 - scikit-build-core >=0.10.0 - - cuda-python >=12.6.2,<13.0a0 + - if: cuda_major == "12" + then: cuda-python >=12.9.2,<13.0a0 + else: cuda-python >=13.0.1,<14.0a0 - cuda-cudart-dev run: - ${{ pin_compatible("cuda-version", upper_bound="x", lower_bound="x") }} @@ -66,7 +68,9 @@ requirements: - pylibraft =${{ minor_version }} - python - numpy >=1.23,<3.0a0 - - cuda-python >=12.6.2,<13.0a0 + - if: cuda_major == "12" + then: cuda-python >=12.9.2,<13.0a0 + else: cuda-python >=13.0.1,<14.0a0 - cuda-cudart ignore_run_exports: by_name: diff --git a/cpp/bench/ann/src/common/util.hpp b/cpp/bench/ann/src/common/util.hpp index b3bcc77950..11361c88fe 100644 --- a/cpp/bench/ann/src/common/util.hpp +++ b/cpp/bench/ann/src/common/util.hpp @@ -446,10 +446,15 @@ inline auto cuda_info() throw std::runtime_error{"cuda_info: call to cudaGetDeviceProperties failed with code " + std::to_string(err_code)}; } + int clockRate = 0; + int memoryClockRate = 0; + err_code = cudaDeviceGetAttribute(&clockRate, cudaDevAttrClockRate, dev); + err_code = cudaDeviceGetAttribute(&memoryClockRate, cudaDevAttrMemoryClockRate, dev); + props.emplace_back("gpu_name", std::string(device_prop.name)); props.emplace_back("gpu_sm_count", std::to_string(device_prop.multiProcessorCount)); - props.emplace_back("gpu_sm_freq", std::to_string(device_prop.clockRate * 1e3)); - props.emplace_back("gpu_mem_freq", std::to_string(device_prop.memoryClockRate * 1e3)); + props.emplace_back("gpu_sm_freq", std::to_string(clockRate * 1e3)); + props.emplace_back("gpu_mem_freq", std::to_string(memoryClockRate * 1e3)); props.emplace_back("gpu_mem_bus_width", std::to_string(device_prop.memoryBusWidth)); props.emplace_back("gpu_mem_global_size", std::to_string(device_prop.totalGlobalMem)); props.emplace_back("gpu_mem_shared_size", std::to_string(device_prop.sharedMemPerMultiprocessor)); diff --git a/cpp/include/cuvs/neighbors/common.hpp b/cpp/include/cuvs/neighbors/common.hpp index 70da22a09d..b49b7a4e8a 100644 --- a/cpp/include/cuvs/neighbors/common.hpp +++ b/cpp/include/cuvs/neighbors/common.hpp @@ -485,7 +485,7 @@ namespace filtering { enum class FilterType { None, Bitmap, Bitset }; struct base_filter { - virtual ~base_filter() = default; + ~base_filter() = default; virtual FilterType get_filter_type() const = 0; }; diff --git a/dependencies.yaml b/dependencies.yaml index 7570ce1973..c370e90f88 100644 --- a/dependencies.yaml +++ b/dependencies.yaml @@ -3,7 +3,7 @@ files: all: output: conda matrix: - cuda: ["12.9"] + cuda: ["12.9", "13.0"] arch: [x86_64, aarch64] includes: - build @@ -14,6 +14,7 @@ files: - clang - cuda - cuda_version + - depends_on_cuda_python - depends_on_cupy - depends_on_librmm - depends_on_pylibraft @@ -29,7 +30,7 @@ files: bench_ann: output: conda matrix: - cuda: ["12.9"] + cuda: ["12.9", "13.0"] arch: [x86_64, aarch64] includes: - bench @@ -39,6 +40,7 @@ files: - clang - cuda - cuda_version + - depends_on_cuda_python - depends_on_cupy - depends_on_pylibraft - depends_on_libcuvs @@ -85,7 +87,7 @@ files: rust: output: conda matrix: - cuda: ["12.9"] + cuda: ["12.9", "13.0"] arch: [x86_64, aarch64] includes: # clang/libclang only needed for bindgen support @@ -100,7 +102,7 @@ files: go: output: conda matrix: - cuda: ["12.9"] + cuda: ["12.9", "13.0"] arch: [x86_64, aarch64] includes: - clang @@ -165,6 +167,7 @@ files: includes: - build_cython - build_py_cuvs + - depends_on_cuda_python - depends_on_libcuvs - depends_on_libraft - depends_on_librmm @@ -175,6 +178,7 @@ files: extras: table: project includes: + - depends_on_cuda_python - depends_on_libcuvs - depends_on_pylibraft - run_py_cuvs @@ -239,26 +243,21 @@ dependencies: - output_types: [conda] packages: - c-compiler + - cuda-nvcc - cxx-compiler specific: - output_types: conda matrices: - matrix: arch: x86_64 - cuda: "12.*" packages: - gcc_linux-64=14.* - sysroot_linux-64==2.28 - matrix: arch: aarch64 - cuda: "12.*" packages: - gcc_linux-aarch64=14.* - sysroot_linux-aarch64==2.28 - - output_types: conda - matrices: - - matrix: {cuda: "12.*"} - packages: [cuda-nvcc] rapids_build_setuptools: common: - output_types: [conda, requirements, pyproject] @@ -271,16 +270,6 @@ dependencies: - output_types: [conda] packages: - dlpack>=0.8,<1.0 - specific: - - output_types: [conda, requirements, pyproject] - matrices: - - matrix: - cuda: "12.*" - packages: - - &cuda_python12 cuda-python>=12.6.2,<13.0a0 - - matrix: - packages: - - &cuda_python cuda-python checks: common: - output_types: [conda, requirements] @@ -317,20 +306,21 @@ dependencies: cuda: "12.9" packages: - cuda-version=12.9 - cuda: - specific: - - output_types: conda - matrices: - matrix: - cuda: "12.*" + cuda: "13.0" packages: - - cuda-nvtx-dev - - cuda-cudart-dev - - cuda-profiler-api - - libcublas-dev - - libcurand-dev - - libcusolver-dev - - libcusparse-dev + - cuda-version=13.0 + cuda: + common: + - output_types: [conda] + packages: + - cuda-nvtx-dev + - cuda-cudart-dev + - cuda-profiler-api + - libcublas-dev + - libcurand-dev + - libcusolver-dev + - libcusparse-dev cuda_wheels: specific: - output_types: [requirements, pyproject] @@ -343,6 +333,14 @@ dependencies: - nvidia-curand-cu12 - nvidia-cusolver-cu12 - nvidia-cusparse-cu12 + - matrix: + cuda: "13.*" + use_cuda_wheels: "true" + packages: + - nvidia-cublas-cu13 + - nvidia-curand-cu13 + - nvidia-cusolver-cu13 + - nvidia-cusparse-cu13 - matrix: use_cuda_wheels: "false" packages: @@ -358,14 +356,21 @@ dependencies: common: - output_types: conda packages: - - cupy>=12.0.0 + - cupy>=13.6.0 + # NOTE: This is intentionally not broken into groups by a 'cuda_suffixed' selector like + # other packages with -cu{nn}x suffixes in this file. + # All RAPIDS wheel builds (including in devcontainers) expect cupy to be suffixed. specific: - output_types: [requirements, pyproject] matrices: - - matrix: {cuda: "12.*"} + - matrix: + cuda: "12.*" packages: - - cupy-cuda12x>=12.0.0 - - {matrix: null, packages: [cupy-cuda12x>=12.0.0]} + - cupy-cuda12x>=13.6.0 + # fallback to CUDA 13 versions if 'cuda' is '13.*' or not provided + - matrix: + packages: + - &cupy_cu13 cupy-cuda13x>=13.6.0 test_libcuvs: common: - output_types: [conda] @@ -434,16 +439,6 @@ dependencies: - output_types: [conda, requirements, pyproject] packages: - &numpy numpy>=1.23,<3.0a0 - specific: - - output_types: [conda, requirements, pyproject] - matrices: - - matrix: - cuda: "12.*" - packages: - - *cuda_python12 - - matrix: - packages: - - *cuda_python test_python_common: common: - output_types: [conda, requirements, pyproject] @@ -500,6 +495,18 @@ dependencies: - output_types: [requirements, pyproject] packages: - matplotlib>=3.9 + depends_on_cuda_python: + specific: + - output_types: [conda, requirements, pyproject] + matrices: + - matrix: + cuda: "12.*" + packages: + - cuda-python>=12.9.2,<13.0a0 + # fallback to CUDA 13 versions if 'cuda' is '13.*' or not provided + - matrix: + packages: + - cuda-python>=13.0.1,<14.0a0 depends_on_cuvs: common: - output_types: conda @@ -528,6 +535,11 @@ dependencies: cuda_suffixed: "true" packages: - libcuvs-cu12==25.10.*,>=0.0.0a0 + - matrix: + cuda: "13.*" + cuda_suffixed: "true" + packages: + - libcuvs-cu13==25.10.*,>=0.0.0a0 - {matrix: null, packages: [*libcuvs_unsuffixed]} depends_on_libcuvs_tests: common: @@ -552,6 +564,11 @@ dependencies: cuda_suffixed: "true" packages: - libraft-cu12==25.10.*,>=0.0.0a0 + - matrix: + cuda: "13.*" + cuda_suffixed: "true" + packages: + - libraft-cu13==25.10.*,>=0.0.0a0 - {matrix: null, packages: [*libraft_unsuffixed]} depends_on_librmm: common: @@ -571,6 +588,11 @@ dependencies: cuda_suffixed: "true" packages: - librmm-cu12==25.10.*,>=0.0.0a0 + - matrix: + cuda: "13.*" + cuda_suffixed: "true" + packages: + - librmm-cu13==25.10.*,>=0.0.0a0 - {matrix: null, packages: [*librmm_unsuffixed]} depends_on_pylibraft: common: @@ -590,12 +612,17 @@ dependencies: cuda_suffixed: "true" packages: - pylibraft-cu12==25.10.*,>=0.0.0a0 + - matrix: + cuda: "13.*" + cuda_suffixed: "true" + packages: + - pylibraft-cu13==25.10.*,>=0.0.0a0 - {matrix: null, packages: [*pylibraft_unsuffixed]} depends_on_nccl: common: - output_types: conda packages: - - &nccl_unsuffixed nccl>=2.19 + - nccl>=2.19 specific: - output_types: [pyproject, requirements] matrices: @@ -604,5 +631,10 @@ dependencies: cuda_suffixed: "true" packages: - nvidia-nccl-cu12>=2.19 + - matrix: + cuda: "13.*" + cuda_suffixed: "true" + packages: + - nvidia-nccl-cu13>=2.19 - matrix: packages: diff --git a/docs/source/build.rst b/docs/source/build.rst index 4acf3bea54..26c361dfbc 100644 --- a/docs/source/build.rst +++ b/docs/source/build.rst @@ -43,6 +43,10 @@ C/C++ Package .. code-block:: bash + # CUDA 13 + conda install -c rapidsai -c conda-forge libcuvs cuda-version=13.0 + + # CUDA 12 conda install -c rapidsai -c conda-forge libcuvs cuda-version=12.9 Python Package @@ -50,6 +54,10 @@ Python Package .. code-block:: bash + # CUDA 13 + conda install -c rapidsai -c conda-forge cuvs cuda-version=13.0 + + # CUDA 12 conda install -c rapidsai -c conda-forge cuvs cuda-version=12.9 Python through Pip @@ -57,10 +65,12 @@ Python through Pip The cuVS Python package can also be `installed through pip `_. -For CUDA 12 packages: - .. code-block:: bash + # CUDA 13 + pip install cuvs-cu13 --extra-index-url=https://pypi.nvidia.com + + # CUDA 12 pip install cuvs-cu12 --extra-index-url=https://pypi.nvidia.com Note: these packages statically link the C and C++ libraries so the `libcuvs` and `libcuvs_c` shared libraries won't be readily available to use in your code. @@ -86,7 +96,7 @@ Conda environment scripts are provided for installing the necessary dependencies .. code-block:: bash - conda env create --name cuvs -f conda/environments/all_cuda-128_arch-x86_64.yaml + conda env create --name cuvs -f conda/environments/all_cuda-130_arch-x86_64.yaml conda activate cuvs The recommended way to build and install cuVS from source is to use the `build.sh` script in the root of the repository. This script can build both the C++ and Python artifacts and provides CMake options for building and installing the headers, tests, benchmarks, and the pre-compiled shared library. diff --git a/docs/source/cuvs_bench/index.rst b/docs/source/cuvs_bench/index.rst index 5a6f0f17e2..cfaa30acb2 100644 --- a/docs/source/cuvs_bench/index.rst +++ b/docs/source/cuvs_bench/index.rst @@ -65,7 +65,7 @@ Conda conda activate cuvs_benchmarks # to install GPU package: - conda install -c rapidsai -c conda-forge cuvs-bench= cuda-version=12.9* + conda install -c rapidsai -c conda-forge cuvs-bench= cuda-version=13.0* # to install CPU package for usage in CPU-only systems: conda install -c rapidsai -c conda-forge cuvs-bench-cpu diff --git a/examples/go/README.md b/examples/go/README.md index bcbea09642..093e87d17d 100644 --- a/examples/go/README.md +++ b/examples/go/README.md @@ -7,7 +7,7 @@ This package provides Go bindings for the cuVS (CUDA Vector Search) library. The required dependencies can be installed with a simple command (which creates your build environment): ```bash -conda env create --name go -f conda/environments/go_cuda-128_arch-x86_64.yaml +conda env create --name go -f conda/environments/go_cuda-130_arch-x86_64.yaml conda activate go ``` You may prefer to use `mamba`, as it provides significant speedup over `conda`. diff --git a/examples/rust/README.md b/examples/rust/README.md index 98fe526975..1d2671de34 100644 --- a/examples/rust/README.md +++ b/examples/rust/README.md @@ -9,7 +9,7 @@ Once the minimum requirements are satisfied, this example template application c You may follow these steps to quickly get set up: ```bash -conda env create --name rust -f conda/environments/rust_cuda-128_arch-x86_64.yaml +conda env create --name rust -f conda/environments/rust_cuda-130_arch-x86_64.yaml conda activate rust ``` You may prefer to use `mamba`, as it provides significant speedup over `conda`. diff --git a/java/cuvs-java/src/main/java22/com/nvidia/cuvs/internal/GPUInfoProviderImpl.java b/java/cuvs-java/src/main/java22/com/nvidia/cuvs/internal/GPUInfoProviderImpl.java index c2422318ac..ab4b0dde1d 100644 --- a/java/cuvs-java/src/main/java22/com/nvidia/cuvs/internal/GPUInfoProviderImpl.java +++ b/java/cuvs-java/src/main/java22/com/nvidia/cuvs/internal/GPUInfoProviderImpl.java @@ -17,6 +17,7 @@ import static com.nvidia.cuvs.internal.common.LinkerHelper.C_INT; import static com.nvidia.cuvs.internal.common.Util.checkCudaError; +import static com.nvidia.cuvs.internal.common.Util.cudaGetDeviceProperties; import static com.nvidia.cuvs.internal.panama.headers_h.cudaMemGetInfo; import static com.nvidia.cuvs.internal.panama.headers_h_1.*; @@ -52,8 +53,8 @@ private static List getAvailableGpusInfo() { MemorySegment deviceProp = cudaDeviceProp.allocate(localArena); for (int i = 0; i < numGpuCount; i++) { - returnValue = cudaGetDeviceProperties_v2(deviceProp, i); - checkCudaError(returnValue, "cudaGetDeviceProperties_v2"); + returnValue = cudaGetDeviceProperties(deviceProp, i); + checkCudaError(returnValue, "cudaGetDeviceProperties"); GPUInfo gpuInfo = new GPUInfo( diff --git a/java/cuvs-java/src/main/java22/com/nvidia/cuvs/internal/common/Util.java b/java/cuvs-java/src/main/java22/com/nvidia/cuvs/internal/common/Util.java index 09adf59309..41f6b3736d 100644 --- a/java/cuvs-java/src/main/java22/com/nvidia/cuvs/internal/common/Util.java +++ b/java/cuvs-java/src/main/java22/com/nvidia/cuvs/internal/common/Util.java @@ -29,10 +29,12 @@ import com.nvidia.cuvs.internal.panama.DLTensor; import com.nvidia.cuvs.internal.panama.headers_h; import java.lang.foreign.Arena; +import java.lang.foreign.FunctionDescriptor; import java.lang.foreign.Linker; import java.lang.foreign.MemoryLayout; import java.lang.foreign.MemoryLayout.PathElement; import java.lang.foreign.MemorySegment; +import java.lang.foreign.SymbolLookup; import java.lang.invoke.MethodHandle; import java.lang.invoke.VarHandle; import java.util.BitSet; @@ -46,6 +48,11 @@ private Util() {} private static final Linker LINKER = Linker.nativeLinker(); + static final SymbolLookup SYMBOL_LOOKUP = + SymbolLookup.libraryLookup(System.mapLibraryName("cuvs_c"), Arena.ofAuto()) + .or(SymbolLookup.loaderLookup()) + .or(Linker.nativeLinker().defaultLookup()); + /** * Bindings for {@code cudaMemcpyAsync}; differently from the {@code headers_h} bindings (which are * automatically generated by {@code jextract}), these bindings specify the {@code critical} linker option, @@ -58,6 +65,26 @@ private Util() {} LINKER.downcallHandle( cudaMemcpyAsync$address(), cudaMemcpyAsync$descriptor(), Linker.Option.critical(true)); + private static final String cudaGetDevicePropertiesSymbolName = + "12".equals(System.getenv("RAPIDS_CUDA_MAJOR")) + ? "cudaGetDeviceProperties_v2" + : "cudaGetDeviceProperties"; + + private static final MethodHandle cudaGetDeviceProperties$mh = + LINKER.downcallHandle( + SYMBOL_LOOKUP + .find(cudaGetDevicePropertiesSymbolName) + .orElseThrow(UnsatisfiedLinkError::new), + FunctionDescriptor.of(headers_h.C_INT, headers_h.C_POINTER, headers_h.C_INT)); + + public static int cudaGetDeviceProperties(MemorySegment prop, int device) { + try { + return (int) cudaGetDeviceProperties$mh.invokeExact(prop, device); + } catch (Throwable ex$) { + throw new AssertionError("should not reach here", ex$); + } + } + /** * Checks the result value of a (CuVS) native method handle call. * diff --git a/python/cuvs/pyproject.toml b/python/cuvs/pyproject.toml index 99e31fc620..b5b7dba8cf 100644 --- a/python/cuvs/pyproject.toml +++ b/python/cuvs/pyproject.toml @@ -31,7 +31,7 @@ authors = [ license = { text = "Apache-2.0" } requires-python = ">=3.10" dependencies = [ - "cuda-python", + "cuda-python>=13.0.1,<14.0a0", "libcuvs==25.10.*,>=0.0.0a0", "numpy>=1.23,<3.0a0", "pylibraft==25.10.*,>=0.0.0a0", @@ -47,7 +47,7 @@ classifiers = [ [project.optional-dependencies] test = [ - "cupy-cuda12x>=12.0.0", + "cupy-cuda13x>=13.6.0", "pytest", "pytest-cov", "scikit-learn", @@ -117,7 +117,7 @@ regex = "(?P.*)" [tool.rapids-build-backend] requires = [ "cmake>=3.30.4", - "cuda-python", + "cuda-python>=13.0.1,<14.0a0", "cython>=3.0.0", "libcuvs==25.10.*,>=0.0.0a0", "libraft==25.10.*,>=0.0.0a0",