diff --git a/.devcontainer/cuda13.0-conda/devcontainer.json b/.devcontainer/cuda13.0-conda/devcontainer.json new file mode 100644 index 0000000000..d34f0fbcba --- /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/raft,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..b84760b3c5 --- /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/raft,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 69d3f124c8..82e9ecc423 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,7 +44,7 @@ jobs: 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 }} @@ -54,7 +54,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 }} @@ -64,7 +64,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 }} @@ -76,7 +76,7 @@ jobs: sha: ${{ inputs.sha }} wheel-build-libraft: 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 }} @@ -90,7 +90,7 @@ jobs: wheel-publish-libraft: needs: wheel-build-libraft 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 }} @@ -101,7 +101,7 @@ jobs: wheel-build-pylibraft: needs: wheel-build-libraft 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 }} @@ -113,7 +113,7 @@ jobs: wheel-publish-pylibraft: needs: wheel-build-pylibraft 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 }} @@ -124,7 +124,7 @@ jobs: wheel-build-raft-dask: needs: wheel-build-libraft 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 }} @@ -136,7 +136,7 @@ jobs: wheel-publish-raft-dask: needs: wheel-build-raft-dask 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 3164516ec7..8ff7a5c35c 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -26,7 +26,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) }} @@ -53,7 +53,7 @@ jobs: changed-files: secrets: inherit needs: telemetry-setup - 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: @@ -83,14 +83,14 @@ jobs: checks: secrets: inherit needs: telemetry-setup - 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 script: ci/build_cpp.sh @@ -98,7 +98,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 @@ -106,20 +106,20 @@ 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 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 @@ -127,7 +127,7 @@ jobs: 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" @@ -137,7 +137,7 @@ jobs: wheel-build-libraft: 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 branch: ${{ inputs.branch }} @@ -151,7 +151,7 @@ jobs: wheel-build-pylibraft: needs: [checks, wheel-build-libraft] 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_pylibraft.sh @@ -160,7 +160,7 @@ jobs: wheel-tests-pylibraft: needs: [wheel-build-pylibraft, 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 @@ -168,7 +168,7 @@ jobs: wheel-build-raft-dask: needs: [checks, wheel-build-libraft] 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_raft_dask.sh" @@ -177,7 +177,7 @@ jobs: wheel-tests-raft-dask: needs: [wheel-build-raft-dask, 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 @@ -185,10 +185,10 @@ jobs: devcontainer: needs: telemetry-setup secrets: inherit - 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/test.yaml b/.github/workflows/test.yaml index 1907f9c3e8..61a236b703 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 }} @@ -33,7 +33,7 @@ jobs: sha: ${{ inputs.sha }} 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 }} @@ -42,7 +42,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 }} @@ -51,7 +51,7 @@ jobs: sha: ${{ inputs.sha }} wheel-tests-pylibraft: 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 }} @@ -60,7 +60,7 @@ jobs: script: ci/test_wheel_pylibraft.sh wheel-tests-raft-dask: 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 547366d334..6c6008abf1 100755 --- a/README.md +++ b/README.md @@ -233,23 +233,37 @@ The easiest way to install RAFT is through conda and several packages are provid - `raft-dask` (optional) Python library for deployment of multi-node multi-GPU algorithms that use the RAFT `raft::comms` abstraction layer in Dask clusters. Use the following command, depending on your CUDA version, to install all of the RAFT packages with conda (replace `rapidsai` with `rapidsai-nightly` to install more up-to-date but less stable nightly packages). `mamba` is preferred over the `conda` command. + ```bash -# for CUDA 12 +# CUDA 13 +mamba install -c rapidsai -c conda-forge -c nvidia raft-dask pylibraft cuda-version=13.0 + +# CUDA 12 mamba install -c rapidsai -c conda-forge -c nvidia raft-dask pylibraft cuda-version=12.9 ``` Note that the above commands will also install `libraft-headers` and `libraft`. You can also install the conda packages individually using the `mamba` command above. For example, if you'd like to install RAFT's headers and pre-compiled shared library to use in your project: + ```bash -# for CUDA 12 +# CUDA 13 +mamba install -c rapidsai -c conda-forge -c nvidia libraft libraft-headers cuda-version=13.0 + +# CUDA 12 mamba install -c rapidsai -c conda-forge -c nvidia libraft libraft-headers cuda-version=12.9 ``` ### Installing Python through Pip `pylibraft` and `raft-dask` both have experimental packages that can be [installed through pip](https://rapids.ai/pip.html#install): + ```bash +# CUDA 13 +pip install pylibraft-cu13 --extra-index-url=https://pypi.nvidia.com +pip install raft-dask-cu13 --extra-index-url=https://pypi.nvidia.com + +# CUDA 12 pip install pylibraft-cu12 --extra-index-url=https://pypi.nvidia.com pip install raft-dask-cu12 --extra-index-url=https://pypi.nvidia.com ``` diff --git a/conda/environments/all_cuda-129_arch-aarch64.yaml b/conda/environments/all_cuda-129_arch-aarch64.yaml index fbff8a0145..22f5736d3d 100644 --- a/conda/environments/all_cuda-129_arch-aarch64.yaml +++ b/conda/environments/all_cuda-129_arch-aarch64.yaml @@ -14,9 +14,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 - dask-cuda==25.10.*,>=0.0.0a0 diff --git a/conda/environments/all_cuda-129_arch-x86_64.yaml b/conda/environments/all_cuda-129_arch-x86_64.yaml index 35582d94f9..fba9cdaff9 100644 --- a/conda/environments/all_cuda-129_arch-x86_64.yaml +++ b/conda/environments/all_cuda-129_arch-x86_64.yaml @@ -14,9 +14,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 - dask-cuda==25.10.*,>=0.0.0a0 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..f885c407b4 --- /dev/null +++ b/conda/environments/all_cuda-130_arch-aarch64.yaml @@ -0,0 +1,55 @@ +# 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: +- breathe +- 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 +- dask-cuda==25.10.*,>=0.0.0a0 +- distributed-ucxx==0.46.*,>=0.0.0a0 +- doxygen>=1.8.20 +- gcc_linux-aarch64=14.* +- graphviz +- ipython +- libcublas-dev +- libcurand-dev +- libcusolver-dev +- libcusparse-dev +- libucxx==0.46.*,>=0.0.0a0 +- nccl>=2.19 +- ninja +- numpy>=1.23,<3.0a0 +- numpydoc +- pre-commit +- pydata-sphinx-theme +- pylibraft==25.10.*,>=0.0.0a0 +- pytest +- pytest-cov +- rapids-build-backend>=0.4.0,<0.5.0.dev0 +- rapids-dask-dependency==25.10.*,>=0.0.0a0 +- rapids-logger==0.1.*,>=0.0.0a0 +- recommonmark +- rmm==25.10.*,>=0.0.0a0 +- scikit-build-core>=0.10.0 +- scikit-learn +- scipy +- sphinx +- sphinx-copybutton +- sphinx-markdown-tables +- sysroot_linux-aarch64==2.28 +- ucx-py==0.46.*,>=0.0.0a0 +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..7a4bf4340c --- /dev/null +++ b/conda/environments/all_cuda-130_arch-x86_64.yaml @@ -0,0 +1,55 @@ +# 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: +- breathe +- 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 +- dask-cuda==25.10.*,>=0.0.0a0 +- distributed-ucxx==0.46.*,>=0.0.0a0 +- doxygen>=1.8.20 +- gcc_linux-64=14.* +- graphviz +- ipython +- libcublas-dev +- libcurand-dev +- libcusolver-dev +- libcusparse-dev +- libucxx==0.46.*,>=0.0.0a0 +- nccl>=2.19 +- ninja +- numpy>=1.23,<3.0a0 +- numpydoc +- pre-commit +- pydata-sphinx-theme +- pylibraft==25.10.*,>=0.0.0a0 +- pytest +- pytest-cov +- rapids-build-backend>=0.4.0,<0.5.0.dev0 +- rapids-dask-dependency==25.10.*,>=0.0.0a0 +- rapids-logger==0.1.*,>=0.0.0a0 +- recommonmark +- rmm==25.10.*,>=0.0.0a0 +- scikit-build-core>=0.10.0 +- scikit-learn +- scipy +- sphinx +- sphinx-copybutton +- sphinx-markdown-tables +- sysroot_linux-64==2.28 +- ucx-py==0.46.*,>=0.0.0a0 +name: all_cuda-130_arch-x86_64 diff --git a/conda/recipes/pylibraft/recipe.yaml b/conda/recipes/pylibraft/recipe.yaml index 4a4760cc36..c2b47dacee 100644 --- a/conda/recipes/pylibraft/recipe.yaml +++ b/conda/recipes/pylibraft/recipe.yaml @@ -61,7 +61,9 @@ requirements: - rmm =${{ minor_version }} - scikit-build-core >=0.10.0 - cuda-cudart-dev - - 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 run: - ${{ pin_compatible("cuda-version", upper_bound="x", lower_bound="x") }} - libraft =${{ version }} @@ -70,7 +72,9 @@ requirements: - numpy >=1.23,<3.0a0 - rmm =${{ minor_version }} - cuda-cudart - - 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 ignore_run_exports: from_package: - ${{ compiler("c") }} diff --git a/conda/recipes/raft-dask/recipe.yaml b/conda/recipes/raft-dask/recipe.yaml index dc0ee4c5cb..941c176c54 100644 --- a/conda/recipes/raft-dask/recipe.yaml +++ b/conda/recipes/raft-dask/recipe.yaml @@ -63,7 +63,9 @@ requirements: - ucx-py ${{ ucx_py_version }} - ucxx ${{ ucxx_version }} - cuda-cudart-dev - - 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 run: - ${{ pin_compatible("cuda-version", upper_bound="x", lower_bound="x") }} - dask-cuda =${{ minor_version }} @@ -75,7 +77,9 @@ requirements: - rmm =${{ minor_version }} - ucx-py ${{ ucx_py_version }} - cuda-cudart - - 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 ignore_run_exports: from_package: - ${{ compiler("c") }} diff --git a/dependencies.yaml b/dependencies.yaml index fa8673f53f..adc1c1c680 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_common @@ -193,6 +193,7 @@ dependencies: - output_types: [conda] packages: - c-compiler + - cuda-nvcc - cxx-compiler - libucxx==0.46.*,>=0.0.0a0 specific: @@ -200,20 +201,14 @@ dependencies: 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] build_cython: common: - output_types: [conda, requirements, pyproject] @@ -254,20 +249,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: [pyproject, requirements] @@ -280,6 +276,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 # if use_cuda_wheels=false is provided, do not add dependencies on any CUDA wheels # (e.g. for DLFW and pip devcontainers) - matrix: @@ -297,13 +301,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: # All CUDA 12 versions + - matrix: + cuda: "12.*" + packages: + - cupy-cuda12x>=13.6.0 + # fallback to CUDA 13 versions if 'cuda' is '13.*' or not provided + - matrix: packages: - - cupy-cuda12x>=12.0.0 + - &cupy_cu13 cupy-cuda13x>=13.6.0 depends_on_rapids_logger: common: - output_types: [conda, requirements, pyproject] @@ -382,8 +394,14 @@ dependencies: cuda: "12.*" cuda_suffixed: "true" packages: - - &pylibraft_cu12 pylibraft-cu12==25.10.*,>=0.0.0a0 - - &ucx_py_cu12 ucx-py-cu12==0.46.*,>=0.0.0a0 + - pylibraft-cu12==25.10.*,>=0.0.0a0 + - ucx-py-cu12==0.46.*,>=0.0.0a0 + - matrix: + cuda: "13.*" + cuda_suffixed: "true" + packages: + - pylibraft-cu13==25.10.*,>=0.0.0a0 + - ucx-py-cu13==0.46.*,>=0.0.0a0 - {matrix: null, packages: [*pylibraft_unsuffixed, *ucx_py_unsuffixed]} test_python_common: common: @@ -404,10 +422,11 @@ dependencies: - matrix: cuda: "12.*" packages: - - cuda-python>=12.6.2,<13.0a0 + - cuda-python>=12.9.2,<13.0a0 + # fallback to CUDA 13 versions if 'cuda' is '13.*' or not provided - matrix: packages: - - cuda-python + - cuda-python>=13.0.1,<14.0a0 depends_on_distributed_ucxx: common: - output_types: conda @@ -428,6 +447,11 @@ dependencies: cuda_suffixed: "true" packages: - distributed-ucxx-cu12==0.46.*,>=0.0.0a0 + - matrix: + cuda: "13.*" + cuda_suffixed: "true" + packages: + - distributed-ucxx-cu13==0.46.*,>=0.0.0a0 - {matrix: null, packages: [*distributed_ucxx_unsuffixed]} depends_on_libraft: common: @@ -438,7 +462,7 @@ dependencies: - --extra-index-url=https://pypi.anaconda.org/rapidsai-wheels-nightly/simple - output_types: conda packages: - - libraft==25.10.*,>=0.0.0a0 + - &libraft_unsuffixed libraft==25.10.*,>=0.0.0a0 specific: - output_types: [requirements, pyproject] matrices: @@ -447,9 +471,14 @@ 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: packages: - - libraft==25.10.*,>=0.0.0a0 + - *libraft_unsuffixed depends_on_libraft_headers: common: - output_types: conda @@ -488,6 +517,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: packages: - *librmm_unsuffixed @@ -509,51 +543,83 @@ dependencies: cuda_suffixed: "true" packages: - rmm-cu12==25.10.*,>=0.0.0a0 + - matrix: + cuda: "13.*" + cuda_suffixed: "true" + packages: + - rmm-cu13==25.10.*,>=0.0.0a0 - matrix: packages: - *rmm_unsuffixed depends_on_ucx_build: common: - - output_types: conda - packages: - - ucx==1.15.0 - output_types: requirements packages: # pip recognizes the index as a global option for the requirements.txt file - --extra-index-url=https://pypi.nvidia.com - --extra-index-url=https://pypi.anaconda.org/rapidsai-wheels-nightly/simple specific: + - output_types: [conda] + matrices: + - matrix: + cuda: "12.*" + packages: + - ucx==1.17.0 + # build against 1.19.0 on CUDA 13 (and make that the default when 'cuda' filter is not provided) + - matrix: + packages: + - ucx==1.19.0 + # very tight >=x.x.x,=1.15.0,<1.15.1a0 - - matrix: null + - libucx-cu12>=1.17.0,<1.17.1a0 + - matrix: + cuda: "13.*" + cuda_suffixed: "true" + packages: + - libucx-cu13>=1.19.0,<1.19.1a0 + - matrix: packages: - - libucx>=1.15.0,<1.15.1a0 + - libucx>=1.19.0,<1.19.1a0 depends_on_ucx_run: common: - - output_types: conda - packages: - - ucx>=1.15.0 - output_types: requirements packages: # pip recognizes the index as a global option for the requirements.txt file - --extra-index-url=https://pypi.nvidia.com - --extra-index-url=https://pypi.anaconda.org/rapidsai-wheels-nightly/simple specific: + - output_types: [conda] + matrices: + - matrix: + cuda: "12.*" + packages: + - ucx>=1.17.0,<1.20 + # require at least 1.19.0 on CUDA 13 (and make that the default when 'cuda' filter is not provided) + - matrix: + packages: + - ucx>=1.19.0,<1.20 - output_types: [requirements, pyproject] matrices: - matrix: cuda: "12.*" cuda_suffixed: "true" packages: - - libucx-cu12>=1.15.0 - - matrix: null + - libucx-cu12>=1.17.0,<1.20 + - matrix: + cuda: "13.*" + cuda_suffixed: "true" + packages: + - libucx-cu13>=1.19.0,<1.20 + # require at least 1.19.0 (CUDA 13 floor) if 'cuda' filter is not provided + - matrix: packages: - - libucx>=1.15.0 + - libucx>=1.19.0,<1.20 depends_on_nccl: common: - output_types: conda @@ -567,5 +633,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.md b/docs/source/build.md index 2f04b0f5ba..821788e1fb 100644 --- a/docs/source/build.md +++ b/docs/source/build.md @@ -35,16 +35,24 @@ The easiest way to install RAFT is through conda and several packages are provid - `raft-dask` (optional) Python library for deployment of multi-node multi-GPU algorithms that use the RAFT `raft::comms` abstraction layer in Dask clusters. Use the following command, depending on your CUDA version, to install all of the RAFT packages with conda (replace `rapidsai` with `rapidsai-nightly` to install more up-to-date but less stable nightly packages). `mamba` is preferred over the `conda` command. + ```bash -# for CUDA 12 +# CUDA 13 +mamba install -c rapidsai -c conda-forge -c nvidia raft-dask pylibraft cuda-version=13.0 + +# CUDA 12 mamba install -c rapidsai -c conda-forge -c nvidia raft-dask pylibraft cuda-version=12.9 ``` Note that the above commands will also install `libraft-headers` and `libraft`. You can also install the conda packages individually using the `mamba` command above. For example, if you'd like to install RAFT's headers to use in your project: + ```bash -# for CUDA 12 +# CUDA 13 +mamba install -c rapidsai -c conda-forge -c nvidia libraft-headers cuda-version=13.0 + +# CUDA 12 mamba install -c rapidsai -c conda-forge -c nvidia libraft-headers cuda-version=12.9 ``` @@ -53,6 +61,11 @@ mamba install -c rapidsai -c conda-forge -c nvidia libraft-headers cuda-version= `pylibraft` and `raft-dask` both have packages that can be [installed through pip](https://rapids.ai/pip.html#install). ```bash +# CUDA 13 +pip install pylibraft-cu13 --extra-index-url=https://pypi.nvidia.com +pip install raft-dask-cu13 --extra-index-url=https://pypi.nvidia.com + +# CUDA 12 pip install pylibraft-cu12 --extra-index-url=https://pypi.nvidia.com pip install raft-dask-cu12 --extra-index-url=https://pypi.nvidia.com ``` @@ -87,7 +100,7 @@ In addition to the libraries included with cudatoolkit 12.0+, there are some oth Conda environment scripts are provided for installing the necessary dependencies to build both the C++ and Python libraries from source. It is preferred to use `mamba`, as it provides significant speedup over `conda`: ```bash -mamba env create --name rapids_raft -f conda/environments/all_cuda-128_arch-x86_64.yaml +mamba env create --name rapids_raft -f conda/environments/all_cuda-130_arch-x86_64.yaml mamba activate rapids_raft ``` diff --git a/python/pylibraft/pyproject.toml b/python/pylibraft/pyproject.toml index 9655529b74..3dcd9f559d 100644 --- a/python/pylibraft/pyproject.toml +++ b/python/pylibraft/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", "libraft==25.10.*,>=0.0.0a0", "numpy>=1.23,<3.0a0", "rmm==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", @@ -120,7 +120,7 @@ regex = "(?P.*)" build-backend = "scikit_build_core.build" requires = [ "cmake>=3.30.4", - "cuda-python", + "cuda-python>=13.0.1,<14.0a0", "cython>=3.0.0", "libraft==25.10.*,>=0.0.0a0", "librmm==25.10.*,>=0.0.0a0", diff --git a/python/raft-dask/pyproject.toml b/python/raft-dask/pyproject.toml index a415e5a0fc..2c554b1d43 100644 --- a/python/raft-dask/pyproject.toml +++ b/python/raft-dask/pyproject.toml @@ -123,7 +123,7 @@ requires = [ "cython>=3.0.0", "libraft==25.10.*,>=0.0.0a0", "librmm==25.10.*,>=0.0.0a0", - "libucx>=1.15.0,<1.15.1a0", + "libucx>=1.19.0,<1.19.1a0", "ninja", ] # This list was generated by `rapids-dependency-file-generator`. To make changes, edit ../../dependencies.yaml and run `rapids-dependency-file-generator`. dependencies-file = "../../dependencies.yaml"