diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 263b8e5418..7fdf5ee5d8 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -43,7 +43,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 }} @@ -53,7 +53,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 }} @@ -63,7 +63,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 }} @@ -71,7 +71,7 @@ jobs: sha: ${{ inputs.sha }} wheel-build-cuopt-mps-parser: 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 }} @@ -81,10 +81,13 @@ jobs: package-name: cuopt_mps_parser package-type: python append-cuda-suffix: false + pure-wheel: true + # need 1 build per Python version and arch (but CUDA version doesn't matter so choose the latest) + matrix_filter: 'group_by([.ARCH, (.PY_VER |split(".") | map(tonumber))])|map(max_by([(.CUDA_VER|split(".")|map(tonumber))]))' wheel-publish-cuopt-mps-parser: needs: wheel-build-cuopt-mps-parser 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 }} @@ -95,7 +98,7 @@ jobs: wheel-build-libcuopt: needs: wheel-build-cuopt-mps-parser 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 }} @@ -108,7 +111,7 @@ jobs: wheel-publish-libcuopt: needs: wheel-build-libcuopt 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 }} @@ -119,7 +122,7 @@ jobs: wheel-build-cuopt: needs: [wheel-build-cuopt-mps-parser, wheel-build-libcuopt] 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 }} @@ -131,7 +134,7 @@ jobs: wheel-publish-cuopt: needs: wheel-build-cuopt 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 }} @@ -142,7 +145,7 @@ jobs: wheel-build-cuopt-server: needs: wheel-build-cuopt 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 }} @@ -154,7 +157,7 @@ jobs: wheel-publish-cuopt-server: needs: wheel-build-cuopt-server 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 }} @@ -165,7 +168,7 @@ jobs: docs-build: 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: build_type: ${{ inputs.build_type || 'branch' }} node_type: "gpu-l4-latest-1" @@ -180,7 +183,7 @@ jobs: wheel-build-cuopt-sh-client: needs: wheel-build-cuopt 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 }} @@ -190,10 +193,12 @@ jobs: package-name: cuopt_sh_client package-type: python append-cuda-suffix: false + # need 1 build per Python version and arch (but CUDA version doesn't matter) + matrix_filter: '[max_by((.CUDA_VER | split(".") | map(tonumber))]' wheel-publish-cuopt-sh-client: needs: wheel-build-cuopt-sh-client 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 b23bf5cfc4..2b34641888 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -44,10 +44,10 @@ jobs: - wheel-build-cuopt-sh-client - test-self-hosted-server 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 changed-files: 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: @@ -112,21 +112,21 @@ jobs: - '!python/nvcf_client/**' checks: 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 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 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 @@ -134,14 +134,14 @@ jobs: 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: run_codecov: false @@ -150,7 +150,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" @@ -161,17 +161,19 @@ jobs: script: "ci/build_docs.sh" wheel-build-cuopt-mps-parser: 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_cuopt_mps_parser.sh package-name: cuopt_mps_parser package-type: python append-cuda-suffix: false + # need 1 build per Python version and arch (but CUDA version doesn't matter so choose the latest) + matrix_filter: 'group_by([.ARCH, (.PY_VER |split(".") | map(tonumber))])|map(max_by([(.CUDA_VER|split(".")|map(tonumber))]))' wheel-build-libcuopt: needs: wheel-build-cuopt-mps-parser 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 for every combination of arch and CUDA version, but only for the latest Python matrix_filter: group_by([.ARCH, (.CUDA_VER|split(".")|map(tonumber)|.[0])]) | map(max_by(.PY_VER|split(".")|map(tonumber))) @@ -182,7 +184,7 @@ jobs: wheel-build-cuopt: needs: [wheel-build-cuopt-mps-parser, wheel-build-libcuopt] 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_cuopt.sh @@ -191,7 +193,7 @@ jobs: wheel-tests-cuopt: needs: [wheel-build-cuopt, wheel-build-cuopt-mps-parser, wheel-build-cuopt-sh-client, 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_cuopt with: build_type: pull-request @@ -199,7 +201,7 @@ jobs: wheel-build-cuopt-server: needs: wheel-build-cuopt 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_cuopt_server.sh @@ -207,17 +209,20 @@ jobs: package-type: python wheel-build-cuopt-sh-client: 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_cuopt_sh_client.sh package-name: cuopt_sh_client package-type: python append-cuda-suffix: false + pure-wheel: true + # only need 1 build (noarch package): this selects amd64, oldest-supported Python, latest-supported CUDA + matrix_filter: '[map(select(.ARCH == "amd64")) | min_by((.PY_VER | split(".") | map(tonumber)), (.CUDA_VER | split(".") | map(-tonumber)))]' wheel-tests-cuopt-server: needs: [wheel-build-cuopt-server, 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_cuopt_server with: build_type: pull-request diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 80ba1f869f..6bd4caac04 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -34,7 +34,7 @@ on: jobs: 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: script: ci/test_cpp.sh 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: run_codecov: false build_type: ${{ inputs.build_type }} @@ -53,7 +53,7 @@ jobs: script: ci/test_python.sh wheel-tests-cuopt: 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 }} @@ -62,7 +62,7 @@ jobs: script: ci/test_wheel_cuopt.sh wheel-tests-cuopt-server: 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 1317f4a8f9..800f780e7b 100644 --- a/.github/workflows/trigger-breaking-change-alert.yaml +++ b/.github/workflows/trigger-breaking-change-alert.yaml @@ -27,7 +27,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/CONTRIBUTING.md b/CONTRIBUTING.md index 133c86e28b..9ff4944b7d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -70,12 +70,12 @@ library features. The following instructions are for building with a conda envir CUDA/GPU Runtime: -* CUDA 12.9 +* CUDA 12.0 or higher * Volta architecture or better ([Compute Capability](https://docs.nvidia.com/deploy/cuda-compatibility/) >=7.0) Python: -* Python >=3.10.x, <= 3.12.x +* Python >=3.10.x, <= 3.13.x OS: @@ -110,7 +110,7 @@ Please install conda if you don't have it already. You can install [miniforge](h # create the conda environment (assuming in base `cuopt` directory) # note: cuOpt currently doesn't support `channel_priority: strict`; # use `channel_priority: flexible` instead -conda env create --name cuopt_dev --file conda/environments/all_cuda-128_arch-x86_64.yaml +conda env create --name cuopt_dev --file conda/environments/all_cuda-130_arch-x86_64.yaml # activate the environment conda activate cuopt_dev ``` diff --git a/ci/test_wheel_cuopt.sh b/ci/test_wheel_cuopt.sh index 7a16db43f1..77da9c1991 100755 --- a/ci/test_wheel_cuopt.sh +++ b/ci/test_wheel_cuopt.sh @@ -24,7 +24,7 @@ source rapids-init-pip # Download the packages built in the previous step RAPIDS_PY_CUDA_SUFFIX="$(rapids-wheel-ctk-name-gen "${RAPIDS_CUDA_VERSION}")" CUOPT_MPS_PARSER_WHEELHOUSE=$(RAPIDS_PY_WHEEL_NAME="cuopt_mps_parser" rapids-download-wheels-from-github python) -CUOPT_SH_CLIENT_WHEELHOUSE=$(RAPIDS_PY_WHEEL_NAME="cuopt_sh_client" rapids-download-wheels-from-github python) +CUOPT_SH_CLIENT_WHEELHOUSE=$(RAPIDS_PY_WHEEL_NAME="cuopt_sh_client" RAPIDS_PY_WHEEL_PURE="1" rapids-download-wheels-from-github python) CUOPT_WHEELHOUSE=$(RAPIDS_PY_WHEEL_NAME="cuopt_${RAPIDS_PY_CUDA_SUFFIX}" rapids-download-wheels-from-github python) LIBCUOPT_WHEELHOUSE=$(RAPIDS_PY_WHEEL_NAME="libcuopt_${RAPIDS_PY_CUDA_SUFFIX}" rapids-download-wheels-from-github cpp) diff --git a/conda/environments/all_cuda-129_arch-aarch64.yaml b/conda/environments/all_cuda-129_arch-aarch64.yaml index 0db519d773..f2c20d84e8 100644 --- a/conda/environments/all_cuda-129_arch-aarch64.yaml +++ b/conda/environments/all_cuda-129_arch-aarch64.yaml @@ -16,10 +16,11 @@ dependencies: - cpp-argparse - cuda-nvcc - cuda-nvtx-dev +- cuda-python>=12.9.2,<13.0a0 - cuda-sanitizer-api - cuda-version=12.9 - cudf==25.10.*,>=0.0.0a0 -- cupy>=12.0.0 +- cupy>=13.6.0 - cuvs==25.10.*,>=0.0.0a0 - cxx-compiler - cython>=3.0.3 @@ -48,8 +49,8 @@ dependencies: - myst-parser - ninja - notebook -- numba-cuda>=0.14.0 -- numba>=0.59.1 +- numba-cuda>=0.19.1,<0.20.0a0 +- numba>=0.60.0 - numpy>=1.23.5,<3.0a0 - numpydoc - pandas>=2.0 diff --git a/conda/environments/all_cuda-129_arch-x86_64.yaml b/conda/environments/all_cuda-129_arch-x86_64.yaml index ac47f68083..b17673fb78 100644 --- a/conda/environments/all_cuda-129_arch-x86_64.yaml +++ b/conda/environments/all_cuda-129_arch-x86_64.yaml @@ -16,10 +16,11 @@ dependencies: - cpp-argparse - cuda-nvcc - cuda-nvtx-dev +- cuda-python>=12.9.2,<13.0a0 - cuda-sanitizer-api - cuda-version=12.9 - cudf==25.10.*,>=0.0.0a0 -- cupy>=12.0.0 +- cupy>=13.6.0 - cuvs==25.10.*,>=0.0.0a0 - cxx-compiler - cython>=3.0.3 @@ -48,8 +49,8 @@ dependencies: - myst-parser - ninja - notebook -- numba-cuda>=0.14.0 -- numba>=0.59.1 +- numba-cuda>=0.19.1,<0.20.0a0 +- numba>=0.60.0 - numpy>=1.23.5,<3.0a0 - numpydoc - pandas>=2.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..5648d8799a --- /dev/null +++ b/conda/environments/all_cuda-130_arch-aarch64.yaml @@ -0,0 +1,89 @@ +# 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: +- boost +- breathe +- bzip2 +- c-compiler +- ccache +- clang-tools=20.1.4 +- clang==20.1.4 +- cmake>=3.30.4 +- cpp-argparse +- cuda-nvcc +- cuda-nvtx-dev +- cuda-python>=13.0.1,<14.0a0 +- cuda-sanitizer-api +- cuda-version=13.0 +- cudf==25.10.*,>=0.0.0a0 +- cupy>=13.6.0 +- cuvs==25.10.*,>=0.0.0a0 +- cxx-compiler +- cython>=3.0.3 +- doxygen=1.9.1 +- exhale +- fastapi +- folium +- gcc_linux-aarch64=14.* +- geopandas +- gmock +- gtest +- httpx +- ipython +- jsonref==1.1.0 +- libcurand-dev +- libcusolver-dev +- libcusparse-dev +- libgdal<3.9.0 +- libraft-headers==25.10.* +- librmm==25.10.* +- make +- matplotlib +- msgpack-numpy==0.4.8 +- msgpack-python==1.1.0 +- myst-nb +- myst-parser +- ninja +- notebook +- numba-cuda>=0.19.1,<0.20.0a0 +- numba>=0.60.0 +- numpy>=1.23.5,<3.0a0 +- numpydoc +- pandas>=2.0 +- pexpect +- pip +- polyline +- pre-commit +- psutil>=5.9,<6.0a0 +- pylibraft==25.10.*,>=0.0.0a0 +- pyrsistent +- pytest-cov +- pytest<8 +- python>=3.10,<3.14 +- raft-dask==25.10.*,>=0.0.0a0 +- 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 +- requests +- rmm==25.10.*,>=0.0.0a0 +- scikit-build-core>=0.10.0 +- scipy +- sphinx +- sphinx-copybutton +- sphinx-design +- sphinx-markdown-tables +- sphinx_rtd_theme +- sphinxcontrib-openapi +- sphinxcontrib-websupport +- sysroot_linux-aarch64==2.28 +- uvicorn==0.34.* +- zlib +- pip: + - nvidia_sphinx_theme + - swagger-plugin-for-sphinx + - veroviz +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..36e522b235 --- /dev/null +++ b/conda/environments/all_cuda-130_arch-x86_64.yaml @@ -0,0 +1,89 @@ +# 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: +- boost +- breathe +- bzip2 +- c-compiler +- ccache +- clang-tools=20.1.4 +- clang==20.1.4 +- cmake>=3.30.4 +- cpp-argparse +- cuda-nvcc +- cuda-nvtx-dev +- cuda-python>=13.0.1,<14.0a0 +- cuda-sanitizer-api +- cuda-version=13.0 +- cudf==25.10.*,>=0.0.0a0 +- cupy>=13.6.0 +- cuvs==25.10.*,>=0.0.0a0 +- cxx-compiler +- cython>=3.0.3 +- doxygen=1.9.1 +- exhale +- fastapi +- folium +- gcc_linux-64=14.* +- geopandas +- gmock +- gtest +- httpx +- ipython +- jsonref==1.1.0 +- libcurand-dev +- libcusolver-dev +- libcusparse-dev +- libgdal<3.9.0 +- libraft-headers==25.10.* +- librmm==25.10.* +- make +- matplotlib +- msgpack-numpy==0.4.8 +- msgpack-python==1.1.0 +- myst-nb +- myst-parser +- ninja +- notebook +- numba-cuda>=0.19.1,<0.20.0a0 +- numba>=0.60.0 +- numpy>=1.23.5,<3.0a0 +- numpydoc +- pandas>=2.0 +- pexpect +- pip +- polyline +- pre-commit +- psutil>=5.9,<6.0a0 +- pylibraft==25.10.*,>=0.0.0a0 +- pyrsistent +- pytest-cov +- pytest<8 +- python>=3.10,<3.14 +- raft-dask==25.10.*,>=0.0.0a0 +- 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 +- requests +- rmm==25.10.*,>=0.0.0a0 +- scikit-build-core>=0.10.0 +- scipy +- sphinx +- sphinx-copybutton +- sphinx-design +- sphinx-markdown-tables +- sphinx_rtd_theme +- sphinxcontrib-openapi +- sphinxcontrib-websupport +- sysroot_linux-64==2.28 +- uvicorn==0.34.* +- zlib +- pip: + - nvidia_sphinx_theme + - swagger-plugin-for-sphinx + - veroviz +name: all_cuda-130_arch-x86_64 diff --git a/conda/recipes/cuopt/recipe.yaml b/conda/recipes/cuopt/recipe.yaml index f3b8cca9ab..84fec08793 100644 --- a/conda/recipes/cuopt/recipe.yaml +++ b/conda/recipes/cuopt/recipe.yaml @@ -67,17 +67,19 @@ requirements: - rmm =${{ dep_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") }} - cudf =${{ dep_minor_version }} - cuopt-mps-parser =${{ version }} - - cupy >=12.0.0 + - cupy >=13.6.0 - cuvs =${{ dep_minor_version }} - h5py - libcuopt =${{ version }} - - numba >=0.59.1 - - numba-cuda >=0.11.0 + - numba >=0.60.0 + - numba-cuda>=0.19.1,<0.20.0a0 - numpy >=1.23,<3.0a0 - pandas >=2.0 - pylibraft =${{ dep_minor_version }} @@ -89,7 +91,9 @@ requirements: - cuda-nvcc-impl # TODO: Add nvjitlink here # xref: https://github.com/rapidsai/cudf/issues/12822 - - 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: by_name: - cuda-cudart diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index 919064b872..9a783a1e67 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -112,7 +112,7 @@ message("-- Building for GPU_ARCHS = ${CMAKE_CUDA_ARCHITECTURES}") # make the flags global in order to propagate flags to test cmake files set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} --expt-relaxed-constexpr --expt-extended-lambda") -if(${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER_EQUAL 12.9 AND CMAKE_CUDA_COMPILER_VERSION VERSION_LESS 13.0) +if(${CMAKE_CUDA_COMPILER_VERSION} VERSION_GREATER_EQUAL 12.9) set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -static-global-template-stub=false") endif() list(APPEND CUOPT_CUDA_FLAGS -Werror=cross-execution-space-call -Wno-deprecated-declarations -Xcompiler=-Werror) diff --git a/cpp/src/mip/presolve/load_balanced_bounds_presolve_helpers.cuh b/cpp/src/mip/presolve/load_balanced_bounds_presolve_helpers.cuh index 7eb2b41a9d..f3e5e2ee0e 100644 --- a/cpp/src/mip/presolve/load_balanced_bounds_presolve_helpers.cuh +++ b/cpp/src/mip/presolve/load_balanced_bounds_presolve_helpers.cuh @@ -29,8 +29,12 @@ #include #include +#include + namespace cuopt::linear_programming::detail { +#define CUDA_VER_13_0_UP (CUDART_VERSION >= 13000) + template i_t get_id_offset(const std::vector& bin_offsets, i_t degree_cutoff) { @@ -416,7 +420,13 @@ void create_activity_sub_warp(cudaGraph_t act_graph, } cudaGraphAddKernelNode(&act_sub_warp_node, act_graph, NULL, 0, &kernelNodeParams); - cudaGraphAddDependencies(act_graph, &act_sub_warp_node, &set_bounds_changed_node, 1); + cudaGraphAddDependencies(act_graph, + &act_sub_warp_node, // "from" nodes + &set_bounds_changed_node, // "to" nodes +#if CUDA_VER_13_0_UP + nullptr, // edge data +#endif + 1); // number of dependencies } } @@ -471,7 +481,13 @@ void create_activity_sub_warp(cudaGraph_t act_graph, } cudaGraphAddKernelNode(&act_sub_warp_node, act_graph, NULL, 0, &kernelNodeParams); - cudaGraphAddDependencies(act_graph, &act_sub_warp_node, &set_bounds_changed_node, 1); + cudaGraphAddDependencies(act_graph, + &act_sub_warp_node, // "from" nodes + &set_bounds_changed_node, // "to" nodes +#if CUDA_VER_13_0_UP + nullptr, // edge data +#endif + 1); // number of dependencies } } @@ -555,7 +571,13 @@ void create_activity_per_block(cudaGraph_t act_graph, } cudaGraphAddKernelNode(&act_block_node, act_graph, NULL, 0, &kernelNodeParams); - cudaGraphAddDependencies(act_graph, &act_block_node, &set_bounds_changed_node, 1); + cudaGraphAddDependencies(act_graph, + &act_block_node, // "from" nodes + &set_bounds_changed_node, // "to" nodes +#if CUDA_VER_13_0_UP + nullptr, // edge data +#endif + 1); // number of dependencies } } @@ -660,8 +682,20 @@ void create_activity_heavy_cnst(cudaGraph_t act_graph, cudaGraphAddKernelNode(&finalize_heavy_node, act_graph, NULL, 0, &kernelNodeParams); } - cudaGraphAddDependencies(act_graph, &act_heavy_node, &finalize_heavy_node, 1); - cudaGraphAddDependencies(act_graph, &finalize_heavy_node, &set_bounds_changed_node, 1); + cudaGraphAddDependencies(act_graph, + &act_heavy_node, // "from" nodes + &finalize_heavy_node, // "to" nodes +#if CUDA_VER_13_0_UP + nullptr, // edge data +#endif + 1); // number of dependencies + cudaGraphAddDependencies(act_graph, + &finalize_heavy_node, // "from" nodes + &set_bounds_changed_node, // "to" nodes +#if CUDA_VER_13_0_UP + nullptr, // edge data +#endif + 1); // number of dependencies } } @@ -873,7 +907,13 @@ void create_update_bounds_sub_warp(cudaGraph_t upd_graph, cudaGraphAddKernelNode(&upd_bnd_sub_warp_node, upd_graph, NULL, 0, &kernelNodeParams); RAFT_CUDA_TRY(cudaGetLastError()); - cudaGraphAddDependencies(upd_graph, &upd_bnd_sub_warp_node, &bounds_changed_node, 1); + cudaGraphAddDependencies(upd_graph, + &upd_bnd_sub_warp_node, // "from" nodes + &bounds_changed_node, // "to" nodes +#if CUDA_VER_13_0_UP + nullptr, // edge data +#endif + 1); // number of dependencies RAFT_CUDA_TRY(cudaGetLastError()); } } @@ -925,7 +965,13 @@ void create_update_bounds_sub_warp(cudaGraph_t upd_graph, cudaGraphAddKernelNode(&upd_bnd_sub_warp_node, upd_graph, NULL, 0, &kernelNodeParams); RAFT_CUDA_TRY(cudaGetLastError()); - cudaGraphAddDependencies(upd_graph, &upd_bnd_sub_warp_node, &bounds_changed_node, 1); + cudaGraphAddDependencies(upd_graph, + &upd_bnd_sub_warp_node, // "from" nodes + &bounds_changed_node, // "to" nodes +#if CUDA_VER_13_0_UP + nullptr, // edge data +#endif + 1); // number of dependencies RAFT_CUDA_TRY(cudaGetLastError()); } } @@ -1003,7 +1049,13 @@ void create_update_bounds_per_block(cudaGraph_t upd_graph, cudaGraphAddKernelNode(&upd_bnd_block_node, upd_graph, NULL, 0, &kernelNodeParams); RAFT_CUDA_TRY(cudaGetLastError()); - cudaGraphAddDependencies(upd_graph, &upd_bnd_block_node, &bounds_changed_node, 1); + cudaGraphAddDependencies(upd_graph, + &upd_bnd_block_node, // "from" nodes + &bounds_changed_node, // "to" nodes +#if CUDA_VER_13_0_UP + nullptr, // edge data +#endif + 1); // number of dependencies RAFT_CUDA_TRY(cudaGetLastError()); } } @@ -1097,9 +1149,21 @@ void create_update_bounds_heavy_vars(cudaGraph_t upd_graph, cudaGraphAddKernelNode(&finalize_heavy_node, upd_graph, NULL, 0, &kernelNodeParams); RAFT_CUDA_TRY(cudaGetLastError()); } - cudaGraphAddDependencies(upd_graph, &upd_bnd_heavy_node, &finalize_heavy_node, 1); + cudaGraphAddDependencies(upd_graph, + &upd_bnd_heavy_node, // "from" nodes + &finalize_heavy_node, // "to" nodes +#if CUDA_VER_13_0_UP + nullptr, // edge data +#endif + 1); // number of dependencies RAFT_CUDA_TRY(cudaGetLastError()); - cudaGraphAddDependencies(upd_graph, &finalize_heavy_node, &bounds_changed_node, 1); + cudaGraphAddDependencies(upd_graph, + &finalize_heavy_node, // "from" nodes + &bounds_changed_node, // "to" nodes +#if CUDA_VER_13_0_UP + nullptr, // edge data +#endif + 1); // number of dependencies RAFT_CUDA_TRY(cudaGetLastError()); } } diff --git a/dependencies.yaml b/dependencies.yaml index 1ea0f59528..cb06d9f6b9 100644 --- a/dependencies.yaml +++ b/dependencies.yaml @@ -19,7 +19,7 @@ files: all: output: conda matrix: - cuda: ["12.9"] + cuda: ["12.9", "13.0"] arch: [x86_64, aarch64] includes: - build_common @@ -349,8 +349,8 @@ dependencies: common: - output_types: [conda, requirements, pyproject] packages: - - numba-cuda>=0.14.0 - - numba>=0.59.1 + - numba-cuda>=0.19.1,<0.20.0a0 + - numba>=0.60.0 - rapids-dask-dependency==25.10.*,>=0.0.0a0 - &pandas pandas>=2.0 - output_types: requirements @@ -359,16 +359,16 @@ dependencies: - --extra-index-url=https://pypi.nvidia.com - --extra-index-url=https://pypi.anaconda.org/rapidsai-wheels-nightly/simple specific: - - output_types: [requirements, pyproject] + - output_types: [conda, requirements, pyproject] matrices: - matrix: cuda: "12.*" - cuda_suffixed: "true" packages: - - cupy-cuda12x - - matrix: null + - cuda-python>=12.9.2,<13.0a0 + # fallback to CUDA 13 versions if 'cuda' is '13.*' or not provided + - matrix: packages: - - cupy-cuda12x + - cuda-python>=13.0.1,<14.0a0 test_python_cuopt_server: common: @@ -436,6 +436,11 @@ dependencies: cuda_suffixed: "true" packages: - libcuopt-cu12==25.10.*,>=0.0.0a0 + - matrix: + cuda: "13.*" + cuda_suffixed: "true" + packages: + - libcuopt-cu13==25.10.*,>=0.0.0a0 - {matrix: null, packages: [*libcuopt_unsuffixed]} depends_on_cuopt: common: @@ -455,6 +460,11 @@ dependencies: cuda_suffixed: "true" packages: - cuopt-cu12==25.10.*,>=0.0.0a0 + - matrix: + cuda: "13.*" + cuda_suffixed: "true" + packages: + - cuopt-cu13==25.10.*,>=0.0.0a0 - {matrix: null, packages: [*cuopt_unsuffixed]} depends_on_cuopt_server: common: @@ -474,6 +484,11 @@ dependencies: cuda_suffixed: "true" packages: - cuopt-server-cu12==25.10.*,>=0.0.0a0 + - matrix: + cuda: "13.*" + cuda_suffixed: "true" + packages: + - cuopt-server-cu13==25.10.*,>=0.0.0a0 - {matrix: null, packages: [*cuopt_server_unsuffixed]} depends_on_cuopt_sh_client: common: @@ -518,12 +533,31 @@ 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_cupy: 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.*" + packages: + - cupy-cuda12x>=13.6.0 + # fallback to CUDA 13 versions if 'cuda' is '13.*' or not provided + - matrix: + packages: + - cupy-cuda13x>=13.6.0 depends_on_rapids_logger: common: - output_types: [conda, requirements, pyproject] @@ -552,6 +586,11 @@ 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 @@ -573,6 +612,11 @@ dependencies: cuda_suffixed: "true" packages: - cudf-cu12==25.10.*,>=0.0.0a0 + - matrix: + cuda: "13.*" + cuda_suffixed: "true" + packages: + - cudf-cu13==25.10.*,>=0.0.0a0 - matrix: packages: - *cudf_unsuffixed @@ -594,6 +638,11 @@ dependencies: cuda_suffixed: "true" packages: - cuvs-cu12==25.10.*,>=0.0.0a0 + - matrix: + cuda: "13.*" + cuda_suffixed: "true" + packages: + - cuvs-cu13==25.10.*,>=0.0.0a0 - matrix: packages: - *cuvs_unsuffixed @@ -615,6 +664,11 @@ dependencies: cuda_suffixed: "true" packages: - raft-dask-cu12==25.10.*,>=0.0.0a0 + - matrix: + cuda: "13.*" + cuda_suffixed: "true" + packages: + - raft-dask-cu13==25.10.*,>=0.0.0a0 - matrix: packages: - *raft_dask_unsuffixed @@ -636,6 +690,11 @@ 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: packages: - *pylibraft_unsuffixed @@ -667,6 +726,10 @@ dependencies: cuda: "12.9" packages: - cuda-version=12.9 + - matrix: + cuda: "13.0" + packages: + - cuda-version=13.0 cuda: common: - output_types: [conda] @@ -689,6 +752,15 @@ dependencies: - nvidia-cusparse-cu12 - nvidia-cusolver-cu12 - nvidia-nvtx-cu12 + - matrix: + cuda: "13.*" + use_cuda_wheels: "true" + packages: + - nvidia-cublas-cu13 + - nvidia-curand-cu13 + - nvidia-cusparse-cu13 + - nvidia-cusolver-cu13 + - nvidia-nvtx-cu13 # if use_cuda_wheels=false is provided, do not add dependencies on any CUDA wheels # (e.g. for DLFW and pip devcontainers) - matrix: diff --git a/docs/cuopt/source/cuopt-c/quick-start.rst b/docs/cuopt/source/cuopt-c/quick-start.rst index 04d5454c01..b04cfee52a 100644 --- a/docs/cuopt/source/cuopt-c/quick-start.rst +++ b/docs/cuopt/source/cuopt-c/quick-start.rst @@ -11,18 +11,22 @@ Installation pip --- -For CUDA 12.x: - This wheel is a Python wrapper around the C++ library and eases installation and access to libcuopt. This also helps in the pip environment to load libraries dynamically while using the Python SDK. - .. code-block:: bash # This is a deprecated module and no longer used, but it shares the same name for the CLI, so we need to uninstall it first if it exists. pip uninstall cuopt-thin-client + + # CUDA 13 + pip install --extra-index-url=https://pypi.nvidia.com \ + 'nvidia-cuda-runtime-cu12==13.0.*' \ + 'libcuopt-cu12==25.10.*' + + # CUDA 12 pip install --extra-index-url=https://pypi.nvidia.com \ - nvidia-cuda-runtime-cu12==12.9.* \ - libcuopt-cu12==25.10.* + 'nvidia-cuda-runtime-cu12==12.9.*' \ + 'libcuopt-cu12==25.10.*' .. note:: @@ -30,9 +34,15 @@ This wheel is a Python wrapper around the C++ library and eases installation and .. code-block:: bash + # CUDA 13 + pip install --pre --extra-index-url=https://pypi.nvidia.com --extra-index-url=https://pypi.anaconda.org/rapidsai-wheels-nightly/simple/ \ + 'nvidia-cuda-runtime-cu13==13.0.*' \ + 'libcuopt-cu13==25.10.*' + + # CUDA 12 pip install --pre --extra-index-url=https://pypi.nvidia.com --extra-index-url=https://pypi.anaconda.org/rapidsai-wheels-nightly/simple/ \ - nvidia-cuda-runtime-cu12==12.9.* \ - libcuopt-cu12==25.10.* + 'nvidia-cuda-runtime-cu12==12.9.*' \ + 'libcuopt-cu12==25.10.*' Conda ----- @@ -43,8 +53,12 @@ NVIDIA cuOpt can be installed with Conda (via `miniforge =13.0.1,<14.0a0", "cudf==25.10.*,>=0.0.0a0", "cuopt-mps-parser==25.10.*,>=0.0.0a0", - "cupy-cuda12x", + "cupy-cuda13x>=13.6.0", "cuvs==25.10.*,>=0.0.0a0", "libcuopt==25.10.*,>=0.0.0a0", - "numba-cuda>=0.14.0", - "numba>=0.59.1", + "numba-cuda>=0.19.1,<0.20.0a0", + "numba>=0.60.0", "numpy>=1.23.5,<3.0a0", "pandas>=2.0", "pylibraft==25.10.*,>=0.0.0a0", @@ -151,6 +152,7 @@ matrix-entry = "cuda_suffixed=true;use_cuda_wheels=true" requires = [ "cmake>=3.30.4", "cuopt-mps-parser==25.10.*,>=0.0.0a0", + "cupy-cuda13x>=13.6.0", "cython>=3.0.3", "libcuopt==25.10.*,>=0.0.0a0", "ninja", diff --git a/python/cuopt_server/pyproject.toml b/python/cuopt_server/pyproject.toml index b640264e91..83e764f23d 100644 --- a/python/cuopt_server/pyproject.toml +++ b/python/cuopt_server/pyproject.toml @@ -33,6 +33,7 @@ license = { text = "Apache-2.0" } requires-python = ">=3.10" dependencies = [ "cuopt==25.10.*,>=0.0.0a0", + "cupy-cuda13x>=13.6.0", "fastapi", "httpx", "jsonref==1.1.0", diff --git a/python/libcuopt/pyproject.toml b/python/libcuopt/pyproject.toml index 908d9e28c1..7a1bfdf942 100644 --- a/python/libcuopt/pyproject.toml +++ b/python/libcuopt/pyproject.toml @@ -64,7 +64,7 @@ libcuopt = "libcuopt" select = [ "distro-too-large-compressed", ] -max_allowed_size_compressed = '775M' +max_allowed_size_compressed = '850M' [project.scripts] cuopt_cli = "libcuopt._cli_wrapper:main"