diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 45f23edf29..79c5abc117 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -64,6 +64,7 @@ jobs: date: ${{ inputs.date }} sha: ${{ inputs.sha }} script: ci/build_cpp.sh + matrix_type: cuda-13-4-nightly java-static-build-matrix: permissions: contents: read @@ -72,6 +73,7 @@ jobs: build_type: ${{ inputs.build_type || 'branch' }} matrix_name: conda-cpp-build matrix_filter: 'map(. + {CUDA_MAJOR: (.CUDA_VER | split(".") | .[0])}) | unique_by([.ARCH, .CUDA_MAJOR])' + matrix_type: cuda-13-4-nightly java-static-build: needs: [build-details, java-static-build-matrix] @@ -204,6 +206,7 @@ jobs: script: ci/build_python.sh # Build a conda package for each CUDA x ARCH x minimum supported Python version matrix_filter: group_by({CUDA_VER, ARCH}) | map(min_by(.PY_VER | split(".") | map(tonumber))) + matrix_type: cuda-13-4-nightly upload-conda: needs: [cpp-build, python-build] permissions: @@ -242,6 +245,7 @@ jobs: package-name: libcuopt package-type: cpp matrix_filter: group_by([.ARCH, (.CUDA_VER|split(".")|map(tonumber)|.[0])]) | map(max_by(.PY_VER|split(".")|map(tonumber))) + matrix_type: cuda-13-4-nightly wheel-publish-libcuopt: # Gated on the whole libcuopt/cuopt family building. needs: [wheel-build-cuopt] @@ -286,6 +290,7 @@ jobs: append-cuda-suffix: false # One build per arch: the client has no CUDA dimension. matrix_filter: group_by(.ARCH) | map(max_by([(.CUDA_VER|split(".")|map(tonumber)), (.PY_VER|split(".")|map(tonumber))])) + matrix_type: cuda-13-4-nightly wheel-publish-libcuopt-client: # Gated on the whole libcuopt/cuopt family building. needs: [wheel-build-cuopt] @@ -328,6 +333,7 @@ jobs: package-name: libcuopt_mathopt package-type: cpp matrix_filter: group_by([.ARCH, (.CUDA_VER|split(".")|map(tonumber)|.[0])]) | map(max_by(.PY_VER|split(".")|map(tonumber))) + matrix_type: cuda-13-4-nightly wheel-publish-libcuopt-mathopt: # Gated on the whole libcuopt/cuopt family building. needs: [wheel-build-cuopt] @@ -370,6 +376,7 @@ jobs: package-name: libcuopt_routing package-type: cpp matrix_filter: group_by([.ARCH, (.CUDA_VER|split(".")|map(tonumber)|.[0])]) | map(max_by(.PY_VER|split(".")|map(tonumber))) + matrix_type: cuda-13-4-nightly wheel-publish-libcuopt-routing: # Gated on the whole libcuopt/cuopt family building. needs: [wheel-build-cuopt] @@ -417,6 +424,7 @@ jobs: package-type: python # Build a wheel for each CUDA x ARCH x minimum supported Python version matrix_filter: group_by({CUDA_VER, ARCH}) | map(min_by(.PY_VER | split(".") | map(tonumber))) + matrix_type: cuda-13-4-nightly wheel-publish-cuopt: # Gated on the whole libcuopt/cuopt family building. needs: [wheel-build-cuopt] @@ -460,6 +468,7 @@ jobs: pure-wheel: true # Only need 1 package per CUDA major version. This selects "ARCH=amd64 + the latest supported Python, 1 job per major CUDA version". matrix_filter: map(select(.ARCH == "amd64")) | group_by(.CUDA_VER|split(".")|map(tonumber)|.[0]) | map(max_by([(.PY_VER|split(".")|map(tonumber)), (.CUDA_VER|split(".")|map(tonumber))])) + matrix_type: cuda-13-4-nightly wheel-publish-cuopt-server: needs: wheel-build-cuopt-server permissions: @@ -487,6 +496,7 @@ jobs: with: build_type: ${{ inputs.build_type || 'branch' }} matrix_name: docs-build + matrix_type: cuda-13-4-nightly docs-build: needs: [docs-build-matrix, python-build] permissions: @@ -534,6 +544,7 @@ jobs: 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)))]' + matrix_type: cuda-13-4-nightly wheel-publish-cuopt-sh-client: needs: wheel-build-cuopt-sh-client permissions: diff --git a/.github/workflows/build_test_publish_images.yaml b/.github/workflows/build_test_publish_images.yaml index 0c4ee09587..5397f3eeb6 100644 --- a/.github/workflows/build_test_publish_images.yaml +++ b/.github/workflows/build_test_publish_images.yaml @@ -24,7 +24,7 @@ on: description: 'JSON array of architectures to build for' cuda_ver: type: string - default: '["12.9.0", "13.3.0"]' + default: '["12.9.0", "13.4.3"]' description: 'JSON array of CUDA versions to build for' python_ver: type: string diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 6c5fc8b18c..9258c06d01 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -423,6 +423,7 @@ jobs: build_type: pull-request build-datetime: ${{ needs.build-details.outputs.build-datetime }} script: ci/build_cpp.sh + matrix_type: cuda-13-4-pr conda-cpp-tests: needs: [conda-cpp-build, changed-files] permissions: @@ -436,6 +437,7 @@ jobs: with: build_type: pull-request script: ci/test_cpp.sh + matrix_type: cuda-13-4-pr,pull-request secrets: script-env-secret-1-key: CUOPT_S3_URI script-env-secret-1-value: ${{ secrets.CUOPT_S3_URI }} @@ -476,6 +478,7 @@ jobs: script: ci/build_python.sh # Build a conda package for each CUDA x ARCH x minimum supported Python version matrix_filter: group_by({CUDA_VER, ARCH}) | map(min_by(.PY_VER | split(".") | map(tonumber))) + matrix_type: cuda-13-4-pr conda-python-tests: needs: [conda-python-build, changed-files] permissions: @@ -490,6 +493,7 @@ jobs: build_type: pull-request run_codecov: false script: ci/test_python.sh + matrix_type: cuda-13-4-pr,pull-request docs-build-matrix: permissions: contents: read @@ -497,6 +501,7 @@ jobs: with: build_type: pull-request matrix_name: docs-build + matrix_type: cuda-13-4-pr docs-build: needs: [docs-build-matrix, conda-python-build, changed-files] permissions: @@ -533,6 +538,7 @@ jobs: build_type: pull-request matrix_name: conda-cpp-build matrix_filter: 'map(. + {CUDA_MAJOR: (.CUDA_VER | split(".") | .[0])}) | unique_by([.ARCH, .CUDA_MAJOR])' + matrix_type: cuda-13-4-nightly java-static-build: needs: [java-static-build-matrix, changed-files] @@ -643,6 +649,7 @@ jobs: build_type: pull-request build-datetime: ${{ needs.build-details.outputs.build-datetime }} script: ci/build_wheel_libcuopt_client.sh + matrix_type: cuda-13-4-pr wheel-build-libcuopt-mathopt: needs: [build-details, compute-matrix-filters, changed-files, wheel-build-libcuopt-client] if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels @@ -662,6 +669,7 @@ jobs: build_type: pull-request build-datetime: ${{ needs.build-details.outputs.build-datetime }} script: ci/build_wheel_libcuopt_mathopt.sh + matrix_type: cuda-13-4-pr wheel-build-libcuopt-routing: needs: [build-details, compute-matrix-filters, changed-files, wheel-build-libcuopt-client] if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels @@ -681,6 +689,7 @@ jobs: build_type: pull-request build-datetime: ${{ needs.build-details.outputs.build-datetime }} script: ci/build_wheel_libcuopt_routing.sh + matrix_type: cuda-13-4-pr wheel-build-libcuopt: needs: - build-details @@ -706,6 +715,7 @@ jobs: build_type: pull-request build-datetime: ${{ needs.build-details.outputs.build-datetime }} script: ci/build_wheel_libcuopt.sh + matrix_type: cuda-13-4-pr wheel-build-cuopt: needs: - build-details @@ -732,6 +742,7 @@ jobs: package-type: python # Build a wheel for each CUDA x ARCH x minimum supported Python version matrix_filter: ${{ needs.compute-matrix-filters.outputs.cuopt_filter }} + matrix_type: cuda-13-4-pr wheel-tests-cuopt: needs: [wheel-build-cuopt, wheel-build-cuopt-sh-client, changed-files] permissions: @@ -745,6 +756,7 @@ jobs: with: build_type: pull-request script: ci/test_wheel_cuopt.sh + matrix_type: cuda-13-4-pr,pull-request secrets: script-env-secret-1-key: CUOPT_S3_URI script-env-secret-1-value: ${{ secrets.CUOPT_S3_URI }} @@ -772,6 +784,7 @@ jobs: pure-wheel: true # Only need 1 package per CUDA major version. This selects "ARCH=amd64 + the latest supported Python, 1 job per major CUDA version". matrix_filter: ${{ needs.compute-matrix-filters.outputs.cuopt_server_filter }} + matrix_type: cuda-13-4-pr wheel-build-cuopt-sh-client: needs: [build-details, compute-matrix-filters, changed-files] if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels @@ -793,6 +806,7 @@ jobs: pure-wheel: true # only need 1 build (noarch package): this selects amd64, oldest-supported Python, latest-supported CUDA matrix_filter: ${{ needs.compute-matrix-filters.outputs.cuopt_sh_client_filter }} + matrix_type: cuda-13-4-pr wheel-tests-cuopt-server: needs: [wheel-build-cuopt, wheel-build-cuopt-server, changed-files, compute-matrix-filters] permissions: @@ -807,6 +821,7 @@ jobs: build_type: pull-request script: ci/test_wheel_cuopt_server.sh matrix_filter: ${{ needs.compute-matrix-filters.outputs.cuopt_server_test_filter }} + matrix_type: cuda-13-4-pr,pull-request secrets: script-env-secret-1-key: CUOPT_S3_URI script-env-secret-1-value: ${{ secrets.CUOPT_S3_URI }} @@ -828,6 +843,7 @@ jobs: with: build_type: pull-request script: ci/test_self_hosted_service.sh + matrix_type: cuda-13-4-pr,pull-request pr-test-summary: name: "PR test summary (non-blocking)" needs: diff --git a/.github/workflows/self_hosted_service_test.yaml b/.github/workflows/self_hosted_service_test.yaml index 6956ee6bfe..ee254f4f94 100644 --- a/.github/workflows/self_hosted_service_test.yaml +++ b/.github/workflows/self_hosted_service_test.yaml @@ -6,6 +6,10 @@ name: Test self-hosted service on local-setup on: workflow_call: inputs: + matrix_type: + default: "auto" + required: false + type: string repo: type: string branch: @@ -48,6 +52,7 @@ jobs: with: build_type: ${{ inputs.build_type }} matrix_name: wheels-test + matrix_type: ${{ inputs.matrix_type }} # AMD64, latest CUDA within latest Python matrix_filter: map(select(.ARCH == "amd64")) | group_by(.PY_VER) | map(max_by(.CUDA_VER | split(".") | map(tonumber))) | [max_by(.PY_VER | split(".") | map(tonumber))] cuopt-service: diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 1e640721e7..95266fc962 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -42,6 +42,7 @@ jobs: date: ${{ inputs.date }} sha: ${{ inputs.sha }} script: ci/test_cpp.sh + matrix_type: cuda-13-4-nightly,nightly secrets: script-env-secret-1-key: CUOPT_S3_URI script-env-secret-1-value: ${{ secrets.CUOPT_S3_URI }} @@ -65,6 +66,7 @@ jobs: date: ${{ inputs.date }} sha: ${{ inputs.sha }} script: ci/test_python.sh + matrix_type: cuda-13-4-nightly,nightly secrets: script-env-secret-1-key: CUOPT_S3_URI script-env-secret-1-value: ${{ secrets.CUOPT_S3_URI }} @@ -102,6 +104,7 @@ jobs: build_type: ${{ inputs.build_type }} matrix_name: conda-cpp-build matrix_filter: 'map(. + {CUDA_MAJOR: (.CUDA_VER | split(".") | .[0])}) | unique_by([.ARCH, .CUDA_MAJOR])' + matrix_type: cuda-13-4-nightly # Runs the full Java suite against each classifier JAR build.yaml's java-static-build produced, # on a GPU, with no libcuopt installed, so a JAR that loads but computes wrong answers fails @@ -148,6 +151,7 @@ jobs: date: ${{ inputs.date }} sha: ${{ inputs.sha }} script: ci/test_wheel_cuopt.sh + matrix_type: cuda-13-4-nightly,nightly secrets: script-env-secret-1-key: CUOPT_S3_URI script-env-secret-1-value: ${{ secrets.CUOPT_S3_URI }} @@ -170,6 +174,7 @@ jobs: date: ${{ inputs.date }} sha: ${{ inputs.sha }} script: ci/test_wheel_cuopt_server.sh + matrix_type: cuda-13-4-nightly,nightly secrets: script-env-secret-1-key: CUOPT_S3_URI script-env-secret-1-value: ${{ secrets.CUOPT_S3_URI }} @@ -196,6 +201,7 @@ jobs: sha: ${{ inputs.sha }} script: ci/test_conda_split_packages.sh matrix_filter: 'map(select(.ARCH == "amd64")) | sort_by(.CUDA_VER, .PY_VER) | [last]' + matrix_type: cuda-13-4-nightly,nightly wheel-split-package-tests: if: ${{ inputs.build_type == 'nightly' }} @@ -213,6 +219,7 @@ jobs: sha: ${{ inputs.sha }} script: ci/test_wheel_split_packages.sh matrix_filter: 'map(select(.ARCH == "amd64")) | sort_by(.CUDA_VER, .PY_VER) | [last]' + matrix_type: cuda-13-4-nightly,nightly conda-notebook-tests: permissions: diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2ca70b39ad..8e92d3ab11 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -161,7 +161,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 -mamba env create -p ./.cuopt_env --file conda/environments/all_cuda-133_arch-$(uname -m).yaml +mamba env create -p ./.cuopt_env --file conda/environments/all_cuda-134_arch-$(uname -m).yaml # activate the environment mamba activate ./.cuopt_env # or: conda activate ./.cuopt_env ``` diff --git a/ci/release/publish_placeholder_release_images.sh b/ci/release/publish_placeholder_release_images.sh index 6773142790..5288a4f8c0 100755 --- a/ci/release/publish_placeholder_release_images.sh +++ b/ci/release/publish_placeholder_release_images.sh @@ -31,7 +31,7 @@ # to nvstaging/nvaie/cuopt (docker login nvcr.io). # # Env overrides: -# CUDA_VERS space-separated list of full CUDA versions (default: "12.9.0 13.3.0") +# CUDA_VERS space-separated list of full CUDA versions (default: "12.9.0 13.4.3") # RELEASE_TAG override the derived release tag (default: derived from VERSION) # NIGHTLY_TAG override the derived source nightly tag (default: "${RELEASE_TAG}a") # PUSH_LATEST set to "true" to also push "latest" manifests (default: "false") @@ -52,7 +52,7 @@ BASE_VER=$(sed -E 's/\.0+([0-9])/\.\1/g' VERSION | tr -d '[:space:]') RELEASE_TAG="${RELEASE_TAG:-${BASE_VER}}" NIGHTLY_TAG="${NIGHTLY_TAG:-${RELEASE_TAG}a}" -CUDA_VERS="${CUDA_VERS:-12.9.0 13.3.0}" +CUDA_VERS="${CUDA_VERS:-12.9.0 13.4.3}" DRY_RUN="${DRY_RUN:-false}" PUSH_LATEST="${PUSH_LATEST:-false}" diff --git a/conda/environments/all_cuda-133_arch-aarch64.yaml b/conda/environments/all_cuda-134_arch-aarch64.yaml similarity index 96% rename from conda/environments/all_cuda-133_arch-aarch64.yaml rename to conda/environments/all_cuda-134_arch-aarch64.yaml index c679311c68..c2d9cc51e8 100644 --- a/conda/environments/all_cuda-133_arch-aarch64.yaml +++ b/conda/environments/all_cuda-134_arch-aarch64.yaml @@ -17,7 +17,7 @@ dependencies: - cuda-nvcc - cuda-nvtx-dev - cuda-sanitizer-api -- cuda-version=13.3 +- cuda-version=13.4 - cudf==26.12.*,>=0.0.0a0 - cupy>=14.0.1,!=14.1.0 - cxx-compiler @@ -82,4 +82,4 @@ dependencies: - pip: - nvidia-sphinx-theme - swagger-plugin-for-sphinx -name: all_cuda-133_arch-aarch64 +name: all_cuda-134_arch-aarch64 diff --git a/conda/environments/all_cuda-133_arch-x86_64.yaml b/conda/environments/all_cuda-134_arch-x86_64.yaml similarity index 96% rename from conda/environments/all_cuda-133_arch-x86_64.yaml rename to conda/environments/all_cuda-134_arch-x86_64.yaml index c935e9d4e4..ee9fbdcae4 100644 --- a/conda/environments/all_cuda-133_arch-x86_64.yaml +++ b/conda/environments/all_cuda-134_arch-x86_64.yaml @@ -17,7 +17,7 @@ dependencies: - cuda-nvcc - cuda-nvtx-dev - cuda-sanitizer-api -- cuda-version=13.3 +- cuda-version=13.4 - cudf==26.12.*,>=0.0.0a0 - cupy>=14.0.1,!=14.1.0 - cxx-compiler @@ -82,4 +82,4 @@ dependencies: - pip: - nvidia-sphinx-theme - swagger-plugin-for-sphinx -name: all_cuda-133_arch-x86_64 +name: all_cuda-134_arch-x86_64 diff --git a/dependencies.yaml b/dependencies.yaml index b78a40ccbb..7c269b36c1 100644 --- a/dependencies.yaml +++ b/dependencies.yaml @@ -7,7 +7,7 @@ files: all: output: conda matrix: - cuda: ["12.9", "13.3"] + cuda: ["12.9", "13.4"] arch: [x86_64, aarch64] includes: - build_common @@ -941,6 +941,10 @@ dependencies: cuda: "13.3" packages: - cuda-version=13.3 + - matrix: + cuda: "13.4" + packages: + - cuda-version=13.4 - output_types: [requirements, constraints] matrices: # if use_cuda_wheels=false is provided, do not add dependencies on any CUDA wheels @@ -996,6 +1000,11 @@ dependencies: use_cuda_wheels: "true" packages: - cuda-toolkit==13.3.* + - matrix: + cuda: "13.4" + use_cuda_wheels: "true" + packages: + - cuda-toolkit==13.4.* cuda: common: - output_types: [conda] @@ -1029,7 +1038,7 @@ dependencies: use_cuda_wheels: "true" packages: - &ctk_routing_cu13 cuda-toolkit[cublas,cudart,cusparse]==13.* - - &nvjitlink_cu13 nvidia-nvjitlink>=13.3,<14 + - &nvjitlink_cu13 nvidia-nvjitlink>=13.4,<14 # No cuda selector: this is what the pyproject file keys resolve against, and it # is what populates pyproject.toml in source control. use_cuda_wheels is named # explicitly so the entry still reads as a CUDA-wheel set. diff --git a/python/libcuopt_mathopt/pyproject.toml b/python/libcuopt_mathopt/pyproject.toml index a703f9b457..842e8db46b 100644 --- a/python/libcuopt_mathopt/pyproject.toml +++ b/python/libcuopt_mathopt/pyproject.toml @@ -35,7 +35,7 @@ dependencies = [ "librmm==26.12.*,>=0.0.0a0", "nvidia-cudss-cu13>=0.7,<0.8", "nvidia-nccl-cu13>=2.19", - "nvidia-nvjitlink>=13.3,<14", + "nvidia-nvjitlink>=13.4,<14", "rapids-logger==0.3.*", ] # This list was generated by `rapids-dependency-file-generator`. To make changes, edit ../../dependencies.yaml and run `rapids-dependency-file-generator`. diff --git a/python/libcuopt_routing/pyproject.toml b/python/libcuopt_routing/pyproject.toml index 4d301edab8..5ca9a0de3e 100644 --- a/python/libcuopt_routing/pyproject.toml +++ b/python/libcuopt_routing/pyproject.toml @@ -33,7 +33,7 @@ dependencies = [ "libcuopt-client==26.12.*,>=0.0.0a0", "libraft==26.12.*,>=0.0.0a0", "librmm==26.12.*,>=0.0.0a0", - "nvidia-nvjitlink>=13.3,<14", + "nvidia-nvjitlink>=13.4,<14", "rapids-logger==0.3.*", ] # This list was generated by `rapids-dependency-file-generator`. To make changes, edit ../../dependencies.yaml and run `rapids-dependency-file-generator`.