From 0f1a6f9f4be9eb23e0c63b387e45dbd927f343a6 Mon Sep 17 00:00:00 2001 From: Jake Awe Date: Thu, 19 Mar 2026 11:02:52 -0500 Subject: [PATCH 1/7] Revert "Prepare release/26.04" This reverts commit 4d5f5e530f0e506314562a5ba80530cbb90f056e. --- .github/workflows/build.yaml | 28 ++++++++--------- .github/workflows/pr.yaml | 30 +++++++++---------- .github/workflows/test.yaml | 10 +++---- .../trigger-breaking-change-alert.yaml | 2 +- RAPIDS_BRANCH | 2 +- .../routing/routing-example.ipynb | 2 +- docs/cuopt/source/faq.rst | 2 +- 7 files changed, 38 insertions(+), 38 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 3eb1f1f066..593d48bd74 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -45,7 +45,7 @@ concurrency: jobs: cpp-build: secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-build.yaml@release/26.04 + uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-build.yaml@python-3.14 with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} @@ -55,7 +55,7 @@ jobs: python-build: needs: [cpp-build] secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/conda-python-build.yaml@release/26.04 + uses: rapidsai/shared-workflows/.github/workflows/conda-python-build.yaml@python-3.14 with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} @@ -65,7 +65,7 @@ jobs: upload-conda: needs: [cpp-build, python-build] secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/conda-upload-packages.yaml@release/26.04 + uses: rapidsai/shared-workflows/.github/workflows/conda-upload-packages.yaml@python-3.14 with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} @@ -73,7 +73,7 @@ jobs: sha: ${{ inputs.sha }} wheel-build-cuopt-mps-parser: secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@release/26.04 + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@python-3.14 with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} @@ -88,7 +88,7 @@ jobs: wheel-publish-cuopt-mps-parser: needs: wheel-build-cuopt-mps-parser secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@release/26.04 + uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@python-3.14 with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} @@ -99,7 +99,7 @@ jobs: wheel-build-libcuopt: needs: wheel-build-cuopt-mps-parser secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@release/26.04 + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@python-3.14 with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} @@ -112,7 +112,7 @@ jobs: wheel-publish-libcuopt: needs: wheel-build-libcuopt secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@release/26.04 + uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@python-3.14 with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} @@ -123,7 +123,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@release/26.04 + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@python-3.14 with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} @@ -135,7 +135,7 @@ jobs: wheel-publish-cuopt: needs: wheel-build-cuopt secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@release/26.04 + uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@python-3.14 with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} @@ -145,7 +145,7 @@ jobs: package-type: python wheel-build-cuopt-server: secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@release/26.04 + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@python-3.14 with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} @@ -160,7 +160,7 @@ jobs: wheel-publish-cuopt-server: needs: wheel-build-cuopt-server secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@release/26.04 + uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@python-3.14 with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} @@ -171,7 +171,7 @@ jobs: docs-build: needs: [python-build] secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@release/26.04 + uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@python-3.14 with: build_type: ${{ inputs.build_type || 'branch' }} node_type: "gpu-l4-latest-1" @@ -185,7 +185,7 @@ jobs: script: "ci/build_docs.sh" wheel-build-cuopt-sh-client: secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@release/26.04 + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@python-3.14 with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} @@ -201,7 +201,7 @@ jobs: wheel-publish-cuopt-sh-client: needs: wheel-build-cuopt-sh-client secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@release/26.04 + uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@python-3.14 with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 47a3bd9fca..95741c1fb5 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -34,7 +34,7 @@ jobs: - wheel-build-cuopt-sh-client - test-self-hosted-server secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/pr-builder.yaml@release/26.04 + uses: rapidsai/shared-workflows/.github/workflows/pr-builder.yaml@python-3.14 if: always() with: needs: ${{ toJSON(needs) }} @@ -111,7 +111,7 @@ jobs: changed-files: secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/changed-files.yaml@release/26.04 + uses: rapidsai/shared-workflows/.github/workflows/changed-files.yaml@python-3.14 with: files_yaml: | build_docs: @@ -279,20 +279,20 @@ jobs: - '!gemini-extension.json' checks: secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/checks.yaml@release/26.04 + uses: rapidsai/shared-workflows/.github/workflows/checks.yaml@python-3.14 with: enable_check_generated_files: false conda-cpp-build: needs: [checks, compute-matrix-filters] secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-build.yaml@release/26.04 + uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-build.yaml@python-3.14 with: build_type: pull-request script: ci/build_cpp.sh matrix_filter: ${{ needs.compute-matrix-filters.outputs.conda_lean_filter }} conda-cpp-tests: needs: [conda-cpp-build, changed-files, compute-matrix-filters] - uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-tests.yaml@release/26.04 + uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-tests.yaml@python-3.14 if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp with: build_type: pull-request @@ -308,14 +308,14 @@ jobs: conda-python-build: needs: [conda-cpp-build, compute-matrix-filters] secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/conda-python-build.yaml@release/26.04 + uses: rapidsai/shared-workflows/.github/workflows/conda-python-build.yaml@python-3.14 with: build_type: pull-request script: ci/build_python.sh matrix_filter: ${{ needs.compute-matrix-filters.outputs.conda_test_filter }} conda-python-tests: needs: [conda-python-build, changed-files, compute-matrix-filters] - uses: rapidsai/shared-workflows/.github/workflows/conda-python-tests.yaml@release/26.04 + uses: rapidsai/shared-workflows/.github/workflows/conda-python-tests.yaml@python-3.14 if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda with: run_codecov: false @@ -332,7 +332,7 @@ jobs: docs-build: needs: [conda-python-build, changed-files] secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@release/26.04 + uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@python-3.14 if: fromJSON(needs.changed-files.outputs.changed_file_groups).build_docs with: build_type: pull-request @@ -345,7 +345,7 @@ jobs: wheel-build-cuopt-mps-parser: needs: compute-matrix-filters secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@release/26.04 + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@python-3.14 with: build_type: pull-request script: ci/build_wheel_cuopt_mps_parser.sh @@ -357,7 +357,7 @@ jobs: wheel-build-libcuopt: needs: [wheel-build-cuopt-mps-parser, compute-matrix-filters] secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@release/26.04 + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@python-3.14 with: # build for every combination of arch and CUDA version, but only for the latest Python matrix_filter: ${{ needs.compute-matrix-filters.outputs.libcuopt_filter }} @@ -368,7 +368,7 @@ jobs: wheel-build-cuopt: needs: [wheel-build-cuopt-mps-parser, wheel-build-libcuopt, compute-matrix-filters] secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@release/26.04 + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@python-3.14 with: build_type: pull-request script: ci/build_wheel_cuopt.sh @@ -377,7 +377,7 @@ jobs: matrix_filter: ${{ needs.compute-matrix-filters.outputs.wheel_lean_filter }} wheel-tests-cuopt: needs: [wheel-build-cuopt, wheel-build-cuopt-mps-parser, wheel-build-cuopt-sh-client, changed-files, compute-matrix-filters] - uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@release/26.04 + uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@python-3.14 if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels with: build_type: pull-request @@ -393,7 +393,7 @@ jobs: wheel-build-cuopt-server: needs: [checks, compute-matrix-filters] secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@release/26.04 + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@python-3.14 with: build_type: pull-request script: ci/build_wheel_cuopt_server.sh @@ -405,7 +405,7 @@ jobs: wheel-build-cuopt-sh-client: needs: compute-matrix-filters secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@release/26.04 + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@python-3.14 with: build_type: pull-request script: ci/build_wheel_cuopt_sh_client.sh @@ -417,7 +417,7 @@ jobs: matrix_filter: ${{ needs.compute-matrix-filters.outputs.cuopt_sh_client_filter }} wheel-tests-cuopt-server: needs: [wheel-build-cuopt, wheel-build-cuopt-server, changed-files, compute-matrix-filters] - uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@release/26.04 + uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@python-3.14 if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels with: build_type: pull-request diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 9ad7609e8a..e88b7829f5 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -27,7 +27,7 @@ on: jobs: conda-cpp-tests: - uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-tests.yaml@release/26.04 + uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-tests.yaml@main with: build_type: ${{ inputs.build_type }} branch: ${{ inputs.branch }} @@ -42,7 +42,7 @@ jobs: script-env-secret-3-key: CUOPT_AWS_SECRET_ACCESS_KEY script-env-secret-3-value: ${{ secrets.CUOPT_AWS_SECRET_ACCESS_KEY }} conda-python-tests: - uses: rapidsai/shared-workflows/.github/workflows/conda-python-tests.yaml@release/26.04 + uses: rapidsai/shared-workflows/.github/workflows/conda-python-tests.yaml@main with: run_codecov: false build_type: ${{ inputs.build_type }} @@ -58,7 +58,7 @@ jobs: script-env-secret-3-key: CUOPT_AWS_SECRET_ACCESS_KEY script-env-secret-3-value: ${{ secrets.CUOPT_AWS_SECRET_ACCESS_KEY }} wheel-tests-cuopt: - uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@release/26.04 + uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@main with: build_type: ${{ inputs.build_type }} branch: ${{ inputs.branch }} @@ -73,7 +73,7 @@ jobs: script-env-secret-3-key: CUOPT_AWS_SECRET_ACCESS_KEY script-env-secret-3-value: ${{ secrets.CUOPT_AWS_SECRET_ACCESS_KEY }} wheel-tests-cuopt-server: - uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@release/26.04 + uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@main with: build_type: ${{ inputs.build_type }} branch: ${{ inputs.branch }} @@ -89,7 +89,7 @@ jobs: script-env-secret-3-value: ${{ secrets.CUOPT_AWS_SECRET_ACCESS_KEY }} conda-notebook-tests: secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@release/26.04 + uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main 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 d394b97db4..57b178740c 100644 --- a/.github/workflows/trigger-breaking-change-alert.yaml +++ b/.github/workflows/trigger-breaking-change-alert.yaml @@ -15,7 +15,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@release/26.04 + uses: rapidsai/shared-workflows/.github/workflows/breaking-change-alert.yaml@main with: sender_login: ${{ github.event.sender.login }} sender_avatar: ${{ github.event.sender.avatar_url }} diff --git a/RAPIDS_BRANCH b/RAPIDS_BRANCH index d5ea6ced53..ba2906d066 100644 --- a/RAPIDS_BRANCH +++ b/RAPIDS_BRANCH @@ -1 +1 @@ -release/26.04 +main diff --git a/docs/cuopt/source/cuopt-python/routing/routing-example.ipynb b/docs/cuopt/source/cuopt-python/routing/routing-example.ipynb index 9df5e2c0c7..9cfc05f9bb 100644 --- a/docs/cuopt/source/cuopt-python/routing/routing-example.ipynb +++ b/docs/cuopt/source/cuopt-python/routing/routing-example.ipynb @@ -147,7 +147,7 @@ "metadata": {}, "source": [ "#### Compressed Sparse Row (CSR) representation of above weighted waypoint graph.\n", - "For details on the CSR encoding of the above graph see the [cost_matrix_and_waypoint_graph_creation.ipynb](https://github.com/NVIDIA/cuopt-examples/blob/release/26.04/intra-factory_transport/cost_matrix_and_waypoint_graph_creation.ipynb) notebook." + "For details on the CSR encoding of the above graph see the [cost_matrix_and_waypoint_graph_creation.ipynb](https://github.com/NVIDIA/cuopt-examples/blob/main/intra-factory_transport/cost_matrix_and_waypoint_graph_creation.ipynb) notebook." ] }, { diff --git a/docs/cuopt/source/faq.rst b/docs/cuopt/source/faq.rst index 1985052531..0c3a0e219f 100644 --- a/docs/cuopt/source/faq.rst +++ b/docs/cuopt/source/faq.rst @@ -283,7 +283,7 @@ Routing FAQ So in either case, task locations are actually integer indices into another structure. - If you have (lat, long) values, then you can generate a cost matrix using a map API. cuOpt does not directly connect to a third-party map engine, but that can be done outside of cuOpt as shown `here `__. + If you have (lat, long) values, then you can generate a cost matrix using a map API. cuOpt does not directly connect to a third-party map engine, but that can be done outside of cuOpt as shown `here `__. .. dropdown:: Is it possible to define constraints such as refrigerated vehicles required for certain orders? From e2ea6872842475d01f95e3ed8f8abaee0534fdc9 Mon Sep 17 00:00:00 2001 From: Jake Awe <50372925+AyodeAwe@users.noreply.github.com> Date: Thu, 19 Mar 2026 11:15:30 -0500 Subject: [PATCH 2/7] Update to 26.06 (#975) This PR updates the repository to version 26.06. This is part of the 26.04 release burndown process. --- .claude-plugin/marketplace.json | 2 +- .cursor-plugin/plugin.json | 2 +- .github/workflows/build.yaml | 30 +++++------ .../workflows/build_test_publish_images.yaml | 2 +- .github/workflows/pr.yaml | 32 ++++++------ .github/workflows/test.yaml | 2 +- README.md | 12 ++--- VERSION | 2 +- .../all_cuda-129_arch-aarch64.yaml | 10 ++-- .../all_cuda-129_arch-x86_64.yaml | 10 ++-- .../all_cuda-131_arch-aarch64.yaml | 10 ++-- .../all_cuda-131_arch-x86_64.yaml | 10 ++-- dependencies.yaml | 50 +++++++++---------- gemini-extension.json | 2 +- helmchart/cuopt-server/Chart.yaml | 4 +- helmchart/cuopt-server/values.yaml | 2 +- python/cuopt/pyproject.toml | 18 +++---- python/cuopt_self_hosted/pyproject.toml | 2 +- python/cuopt_server/pyproject.toml | 2 +- python/libcuopt/pyproject.toml | 8 +-- skills/cuopt-developer/SKILL.md | 2 +- skills/cuopt-installation-api-c/SKILL.md | 2 +- skills/cuopt-installation-api-python/SKILL.md | 2 +- skills/cuopt-installation-common/SKILL.md | 2 +- skills/cuopt-installation-developer/SKILL.md | 2 +- skills/cuopt-lp-milp-api-c/SKILL.md | 2 +- skills/cuopt-lp-milp-api-cli/SKILL.md | 2 +- skills/cuopt-lp-milp-api-python/SKILL.md | 2 +- skills/cuopt-qp-api-c/SKILL.md | 2 +- skills/cuopt-qp-api-cli/SKILL.md | 2 +- skills/cuopt-qp-api-python/SKILL.md | 2 +- skills/cuopt-routing-api-python/SKILL.md | 2 +- skills/cuopt-server-api-python/SKILL.md | 2 +- skills/cuopt-server-common/SKILL.md | 2 +- skills/cuopt-user-rules/SKILL.md | 2 +- skills/lp-milp-formulation/SKILL.md | 2 +- skills/qp-formulation/SKILL.md | 2 +- skills/routing-formulation/SKILL.md | 2 +- skills/skill-evolution/SKILL.md | 4 +- 39 files changed, 126 insertions(+), 126 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 4c5df380f6..6ddf2583c4 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -5,7 +5,7 @@ }, "metadata": { "description": "Agent skills for NVIDIA cuOpt: routing (VRP, TSP, PDP), LP/MILP/QP, installation (Python/C/developer), and REST server.", - "version": "26.04.00" + "version": "26.06.00" }, "plugins": [ { diff --git a/.cursor-plugin/plugin.json b/.cursor-plugin/plugin.json index 5f34873671..e740506140 100644 --- a/.cursor-plugin/plugin.json +++ b/.cursor-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "nvidia-cuopt-skills", "description": "Agent skills for NVIDIA cuOpt: routing (VRP, TSP, PDP), LP/MILP/QP, installation (Python/C/developer), and REST server. Use when building or solving optimization with cuOpt.", - "version": "26.04.00", + "version": "26.06.00", "author": { "name": "NVIDIA" }, diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 593d48bd74..a945cde8ec 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -45,7 +45,7 @@ concurrency: jobs: cpp-build: secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-build.yaml@python-3.14 + uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-build.yaml@main with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} @@ -55,7 +55,7 @@ jobs: python-build: needs: [cpp-build] secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/conda-python-build.yaml@python-3.14 + uses: rapidsai/shared-workflows/.github/workflows/conda-python-build.yaml@main with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} @@ -65,7 +65,7 @@ jobs: upload-conda: needs: [cpp-build, python-build] secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/conda-upload-packages.yaml@python-3.14 + uses: rapidsai/shared-workflows/.github/workflows/conda-upload-packages.yaml@main with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} @@ -73,7 +73,7 @@ jobs: sha: ${{ inputs.sha }} wheel-build-cuopt-mps-parser: secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@python-3.14 + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} @@ -88,7 +88,7 @@ jobs: wheel-publish-cuopt-mps-parser: needs: wheel-build-cuopt-mps-parser secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@python-3.14 + uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@main with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} @@ -99,7 +99,7 @@ jobs: wheel-build-libcuopt: needs: wheel-build-cuopt-mps-parser secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@python-3.14 + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} @@ -112,7 +112,7 @@ jobs: wheel-publish-libcuopt: needs: wheel-build-libcuopt secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@python-3.14 + uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@main with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} @@ -123,7 +123,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@python-3.14 + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} @@ -135,7 +135,7 @@ jobs: wheel-publish-cuopt: needs: wheel-build-cuopt secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@python-3.14 + uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@main with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} @@ -145,7 +145,7 @@ jobs: package-type: python wheel-build-cuopt-server: secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@python-3.14 + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} @@ -160,7 +160,7 @@ jobs: wheel-publish-cuopt-server: needs: wheel-build-cuopt-server secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@python-3.14 + uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@main with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} @@ -171,7 +171,7 @@ jobs: docs-build: needs: [python-build] secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@python-3.14 + uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main with: build_type: ${{ inputs.build_type || 'branch' }} node_type: "gpu-l4-latest-1" @@ -181,11 +181,11 @@ jobs: arch: "amd64" file_to_upload: "docs/cuopt/build/html/" artifact-name: "cuopt_docs" - container_image: "rapidsai/ci-conda:26.04-latest" + container_image: "rapidsai/ci-conda:26.06-latest" script: "ci/build_docs.sh" wheel-build-cuopt-sh-client: secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@python-3.14 + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} @@ -201,7 +201,7 @@ jobs: wheel-publish-cuopt-sh-client: needs: wheel-build-cuopt-sh-client secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@python-3.14 + uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@main with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} diff --git a/.github/workflows/build_test_publish_images.yaml b/.github/workflows/build_test_publish_images.yaml index f8f7366e13..17d4e9ab57 100644 --- a/.github/workflows/build_test_publish_images.yaml +++ b/.github/workflows/build_test_publish_images.yaml @@ -55,7 +55,7 @@ jobs: compute-matrix: runs-on: ubuntu-latest container: - image: rapidsai/ci-conda:26.04-latest + image: rapidsai/ci-conda:26.06-latest outputs: MATRIX: ${{ steps.compute-matrix.outputs.MATRIX }} CUOPT_VER: ${{ steps.compute-cuopt-ver.outputs.CUOPT_VER }} diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 95741c1fb5..a652c23b9a 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -34,7 +34,7 @@ jobs: - wheel-build-cuopt-sh-client - test-self-hosted-server secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/pr-builder.yaml@python-3.14 + uses: rapidsai/shared-workflows/.github/workflows/pr-builder.yaml@main if: always() with: needs: ${{ toJSON(needs) }} @@ -111,7 +111,7 @@ jobs: changed-files: secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/changed-files.yaml@python-3.14 + uses: rapidsai/shared-workflows/.github/workflows/changed-files.yaml@main with: files_yaml: | build_docs: @@ -279,20 +279,20 @@ jobs: - '!gemini-extension.json' checks: secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/checks.yaml@python-3.14 + uses: rapidsai/shared-workflows/.github/workflows/checks.yaml@main with: enable_check_generated_files: false conda-cpp-build: needs: [checks, compute-matrix-filters] secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-build.yaml@python-3.14 + uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-build.yaml@main with: build_type: pull-request script: ci/build_cpp.sh matrix_filter: ${{ needs.compute-matrix-filters.outputs.conda_lean_filter }} conda-cpp-tests: needs: [conda-cpp-build, changed-files, compute-matrix-filters] - uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-tests.yaml@python-3.14 + uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-tests.yaml@main if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp with: build_type: pull-request @@ -308,14 +308,14 @@ jobs: conda-python-build: needs: [conda-cpp-build, compute-matrix-filters] secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/conda-python-build.yaml@python-3.14 + uses: rapidsai/shared-workflows/.github/workflows/conda-python-build.yaml@main with: build_type: pull-request script: ci/build_python.sh matrix_filter: ${{ needs.compute-matrix-filters.outputs.conda_test_filter }} conda-python-tests: needs: [conda-python-build, changed-files, compute-matrix-filters] - uses: rapidsai/shared-workflows/.github/workflows/conda-python-tests.yaml@python-3.14 + uses: rapidsai/shared-workflows/.github/workflows/conda-python-tests.yaml@main if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda with: run_codecov: false @@ -332,7 +332,7 @@ jobs: docs-build: needs: [conda-python-build, changed-files] secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@python-3.14 + uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main if: fromJSON(needs.changed-files.outputs.changed_file_groups).build_docs with: build_type: pull-request @@ -340,12 +340,12 @@ jobs: arch: "amd64" file_to_upload: "docs/cuopt/build/html/" artifact-name: "cuopt_docs" - container_image: "rapidsai/ci-conda:26.04-latest" + container_image: "rapidsai/ci-conda:26.06-latest" script: "ci/build_docs.sh" wheel-build-cuopt-mps-parser: needs: compute-matrix-filters secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@python-3.14 + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main with: build_type: pull-request script: ci/build_wheel_cuopt_mps_parser.sh @@ -357,7 +357,7 @@ jobs: wheel-build-libcuopt: needs: [wheel-build-cuopt-mps-parser, compute-matrix-filters] secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@python-3.14 + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main with: # build for every combination of arch and CUDA version, but only for the latest Python matrix_filter: ${{ needs.compute-matrix-filters.outputs.libcuopt_filter }} @@ -368,7 +368,7 @@ jobs: wheel-build-cuopt: needs: [wheel-build-cuopt-mps-parser, wheel-build-libcuopt, compute-matrix-filters] secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@python-3.14 + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main with: build_type: pull-request script: ci/build_wheel_cuopt.sh @@ -377,7 +377,7 @@ jobs: matrix_filter: ${{ needs.compute-matrix-filters.outputs.wheel_lean_filter }} wheel-tests-cuopt: needs: [wheel-build-cuopt, wheel-build-cuopt-mps-parser, wheel-build-cuopt-sh-client, changed-files, compute-matrix-filters] - uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@python-3.14 + uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@main if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels with: build_type: pull-request @@ -393,7 +393,7 @@ jobs: wheel-build-cuopt-server: needs: [checks, compute-matrix-filters] secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@python-3.14 + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main with: build_type: pull-request script: ci/build_wheel_cuopt_server.sh @@ -405,7 +405,7 @@ jobs: wheel-build-cuopt-sh-client: needs: compute-matrix-filters secrets: inherit - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@python-3.14 + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main with: build_type: pull-request script: ci/build_wheel_cuopt_sh_client.sh @@ -417,7 +417,7 @@ jobs: matrix_filter: ${{ needs.compute-matrix-filters.outputs.cuopt_sh_client_filter }} wheel-tests-cuopt-server: needs: [wheel-build-cuopt, wheel-build-cuopt-server, changed-files, compute-matrix-filters] - uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@python-3.14 + uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@main if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels with: build_type: pull-request diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index e88b7829f5..a8cc5f2943 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -97,5 +97,5 @@ jobs: sha: ${{ inputs.sha }} node_type: "gpu-l4-latest-1" arch: "amd64" - container_image: "rapidsai/ci-conda:26.04-latest" + container_image: "rapidsai/ci-conda:26.06-latest" script: ci/test_notebooks.sh diff --git a/README.md b/README.md index 379a48c350..95c8598d77 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ # cuOpt - GPU-accelerated Optimization [![Build Status](https://github.com/NVIDIA/cuopt/actions/workflows/build.yaml/badge.svg)](https://github.com/NVIDIA/cuopt/actions/workflows/build.yaml) -[![Version](https://img.shields.io/badge/version-26.04.00-blue)](https://github.com/NVIDIA/cuopt/releases) +[![Version](https://img.shields.io/badge/version-26.06.00-blue)](https://github.com/NVIDIA/cuopt/releases) [![Documentation](https://img.shields.io/badge/docs-latest-brightgreen)](https://docs.nvidia.com/cuopt/user-guide/latest/introduction.html) [![Docker Hub](https://img.shields.io/badge/docker-nvidia%2Fcuopt-blue?logo=docker)](https://hub.docker.com/r/nvidia/cuopt) [![Examples](https://img.shields.io/badge/examples-cuopt--examples-orange)](https://github.com/NVIDIA/cuopt-examples) @@ -83,7 +83,7 @@ For CUDA 12.x: pip install \ --extra-index-url=https://pypi.nvidia.com \ nvidia-cuda-runtime-cu12==12.9.* \ - cuopt-server-cu12==26.04.* cuopt-sh-client==26.04.* + cuopt-server-cu12==26.06.* cuopt-sh-client==26.06.* ``` Development wheels are available as nightlies, please update `--extra-index-url` to `https://pypi.anaconda.org/rapidsai-wheels-nightly/simple/` to install latest nightly packages. @@ -91,7 +91,7 @@ Development wheels are available as nightlies, please update `--extra-index-url` pip install --pre \ --extra-index-url=https://pypi.nvidia.com \ --extra-index-url=https://pypi.anaconda.org/rapidsai-wheels-nightly/simple/ \ - cuopt-server-cu12==26.04.* cuopt-sh-client==26.04.* + cuopt-server-cu12==26.06.* cuopt-sh-client==26.06.* ``` For CUDA 13.x: @@ -99,7 +99,7 @@ For CUDA 13.x: ```bash pip install \ --extra-index-url=https://pypi.nvidia.com \ - cuopt-server-cu13==26.04.* cuopt-sh-client==26.04.* + cuopt-server-cu13==26.06.* cuopt-sh-client==26.06.* ``` Development wheels are available as nightlies, please update `--extra-index-url` to `https://pypi.anaconda.org/rapidsai-wheels-nightly/simple/` to install latest nightly packages. @@ -107,7 +107,7 @@ Development wheels are available as nightlies, please update `--extra-index-url` pip install --pre \ --extra-index-url=https://pypi.nvidia.com \ --extra-index-url=https://pypi.anaconda.org/rapidsai-wheels-nightly/simple/ \ - cuopt-server-cu13==26.04.* cuopt-sh-client==26.04.* + cuopt-server-cu13==26.06.* cuopt-sh-client==26.06.* ``` @@ -118,7 +118,7 @@ cuOpt can be installed with conda (via [miniforge](https://github.com/conda-forg All other dependencies are installed automatically when `cuopt-server` and `cuopt-sh-client` are installed. ```bash -conda install -c rapidsai -c conda-forge -c nvidia cuopt-server=26.04.* cuopt-sh-client=26.04.* +conda install -c rapidsai -c conda-forge -c nvidia cuopt-server=26.06.* cuopt-sh-client=26.06.* ``` We also provide [nightly conda packages](https://anaconda.org/rapidsai-nightly) built from the HEAD diff --git a/VERSION b/VERSION index 0bd0e8a95b..cdb610a24d 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -26.04.00 +26.06.00 diff --git a/conda/environments/all_cuda-129_arch-aarch64.yaml b/conda/environments/all_cuda-129_arch-aarch64.yaml index ecef112dd5..104e7e70d1 100644 --- a/conda/environments/all_cuda-129_arch-aarch64.yaml +++ b/conda/environments/all_cuda-129_arch-aarch64.yaml @@ -18,7 +18,7 @@ dependencies: - cuda-python>=12.9.2,<13.0 - cuda-sanitizer-api - cuda-version=12.9 -- cudf==26.4.*,>=0.0.0a0 +- cudf==26.6.*,>=0.0.0a0 - cupy>=13.6.0 - cxx-compiler - cython>=3.0.3 @@ -32,8 +32,8 @@ dependencies: - libcurand-dev - libcusolver-dev - libcusparse-dev -- libraft-headers==26.4.*,>=0.0.0a0 -- librmm==26.4.*,>=0.0.0a0 +- libraft-headers==26.6.*,>=0.0.0a0 +- librmm==26.6.*,>=0.0.0a0 - make - msgpack-numpy==0.4.8 - msgpack-python==1.1.2 @@ -50,7 +50,7 @@ dependencies: - pip - pre-commit - psutil>=6.0.0 -- pylibraft==26.4.*,>=0.0.0a0 +- pylibraft==26.6.*,>=0.0.0a0 - pyrsistent - pytest-cov - pytest<9.0 @@ -59,7 +59,7 @@ dependencies: - rapids-build-backend>=0.4.0,<0.5.0 - rapids-logger==0.2.*,>=0.0.0a0 - requests -- rmm==26.4.*,>=0.0.0a0 +- rmm==26.6.*,>=0.0.0a0 - scikit-build-core>=0.11.0 - scipy>=1.14.1 - sphinx diff --git a/conda/environments/all_cuda-129_arch-x86_64.yaml b/conda/environments/all_cuda-129_arch-x86_64.yaml index 35c825280c..06aa6121f9 100644 --- a/conda/environments/all_cuda-129_arch-x86_64.yaml +++ b/conda/environments/all_cuda-129_arch-x86_64.yaml @@ -18,7 +18,7 @@ dependencies: - cuda-python>=12.9.2,<13.0 - cuda-sanitizer-api - cuda-version=12.9 -- cudf==26.4.*,>=0.0.0a0 +- cudf==26.6.*,>=0.0.0a0 - cupy>=13.6.0 - cxx-compiler - cython>=3.0.3 @@ -32,8 +32,8 @@ dependencies: - libcurand-dev - libcusolver-dev - libcusparse-dev -- libraft-headers==26.4.*,>=0.0.0a0 -- librmm==26.4.*,>=0.0.0a0 +- libraft-headers==26.6.*,>=0.0.0a0 +- librmm==26.6.*,>=0.0.0a0 - make - msgpack-numpy==0.4.8 - msgpack-python==1.1.2 @@ -50,7 +50,7 @@ dependencies: - pip - pre-commit - psutil>=6.0.0 -- pylibraft==26.4.*,>=0.0.0a0 +- pylibraft==26.6.*,>=0.0.0a0 - pyrsistent - pytest-cov - pytest<9.0 @@ -59,7 +59,7 @@ dependencies: - rapids-build-backend>=0.4.0,<0.5.0 - rapids-logger==0.2.*,>=0.0.0a0 - requests -- rmm==26.4.*,>=0.0.0a0 +- rmm==26.6.*,>=0.0.0a0 - scikit-build-core>=0.11.0 - scipy>=1.14.1 - sphinx diff --git a/conda/environments/all_cuda-131_arch-aarch64.yaml b/conda/environments/all_cuda-131_arch-aarch64.yaml index 2b717d4e98..a68ebf1285 100644 --- a/conda/environments/all_cuda-131_arch-aarch64.yaml +++ b/conda/environments/all_cuda-131_arch-aarch64.yaml @@ -18,7 +18,7 @@ dependencies: - cuda-python>=13.0.1,<14.0 - cuda-sanitizer-api - cuda-version=13.1 -- cudf==26.4.*,>=0.0.0a0 +- cudf==26.6.*,>=0.0.0a0 - cupy>=13.6.0 - cxx-compiler - cython>=3.0.3 @@ -32,8 +32,8 @@ dependencies: - libcurand-dev - libcusolver-dev - libcusparse-dev -- libraft-headers==26.4.*,>=0.0.0a0 -- librmm==26.4.*,>=0.0.0a0 +- libraft-headers==26.6.*,>=0.0.0a0 +- librmm==26.6.*,>=0.0.0a0 - make - msgpack-numpy==0.4.8 - msgpack-python==1.1.2 @@ -50,7 +50,7 @@ dependencies: - pip - pre-commit - psutil>=6.0.0 -- pylibraft==26.4.*,>=0.0.0a0 +- pylibraft==26.6.*,>=0.0.0a0 - pyrsistent - pytest-cov - pytest<9.0 @@ -59,7 +59,7 @@ dependencies: - rapids-build-backend>=0.4.0,<0.5.0 - rapids-logger==0.2.*,>=0.0.0a0 - requests -- rmm==26.4.*,>=0.0.0a0 +- rmm==26.6.*,>=0.0.0a0 - scikit-build-core>=0.11.0 - scipy>=1.14.1 - sphinx diff --git a/conda/environments/all_cuda-131_arch-x86_64.yaml b/conda/environments/all_cuda-131_arch-x86_64.yaml index f605a83f3b..043d55e148 100644 --- a/conda/environments/all_cuda-131_arch-x86_64.yaml +++ b/conda/environments/all_cuda-131_arch-x86_64.yaml @@ -18,7 +18,7 @@ dependencies: - cuda-python>=13.0.1,<14.0 - cuda-sanitizer-api - cuda-version=13.1 -- cudf==26.4.*,>=0.0.0a0 +- cudf==26.6.*,>=0.0.0a0 - cupy>=13.6.0 - cxx-compiler - cython>=3.0.3 @@ -32,8 +32,8 @@ dependencies: - libcurand-dev - libcusolver-dev - libcusparse-dev -- libraft-headers==26.4.*,>=0.0.0a0 -- librmm==26.4.*,>=0.0.0a0 +- libraft-headers==26.6.*,>=0.0.0a0 +- librmm==26.6.*,>=0.0.0a0 - make - msgpack-numpy==0.4.8 - msgpack-python==1.1.2 @@ -50,7 +50,7 @@ dependencies: - pip - pre-commit - psutil>=6.0.0 -- pylibraft==26.4.*,>=0.0.0a0 +- pylibraft==26.6.*,>=0.0.0a0 - pyrsistent - pytest-cov - pytest<9.0 @@ -59,7 +59,7 @@ dependencies: - rapids-build-backend>=0.4.0,<0.5.0 - rapids-logger==0.2.*,>=0.0.0a0 - requests -- rmm==26.4.*,>=0.0.0a0 +- rmm==26.6.*,>=0.0.0a0 - scikit-build-core>=0.11.0 - scipy>=1.14.1 - sphinx diff --git a/dependencies.yaml b/dependencies.yaml index 014889c7d5..db60f63569 100644 --- a/dependencies.yaml +++ b/dependencies.yaml @@ -311,7 +311,7 @@ dependencies: common: - output_types: [conda] packages: - - libcuopt-tests==26.4.*,>=0.0.0a0 + - libcuopt-tests==26.6.*,>=0.0.0a0 build_wheels: common: - output_types: [requirements, pyproject] @@ -413,7 +413,7 @@ dependencies: common: - output_types: conda packages: - - &libcuopt_unsuffixed libcuopt==26.4.*,>=0.0.0a0 + - &libcuopt_unsuffixed libcuopt==26.6.*,>=0.0.0a0 - output_types: requirements packages: # pip recognizes the index as a global option for the requirements.txt file @@ -426,18 +426,18 @@ dependencies: cuda: "12.*" cuda_suffixed: "true" packages: - - libcuopt-cu12==26.4.*,>=0.0.0a0 + - libcuopt-cu12==26.6.*,>=0.0.0a0 - matrix: cuda: "13.*" cuda_suffixed: "true" packages: - - libcuopt-cu13==26.4.*,>=0.0.0a0 + - libcuopt-cu13==26.6.*,>=0.0.0a0 - {matrix: null, packages: [*libcuopt_unsuffixed]} depends_on_cuopt: common: - output_types: conda packages: - - &cuopt_unsuffixed cuopt==26.4.*,>=0.0.0a0 + - &cuopt_unsuffixed cuopt==26.6.*,>=0.0.0a0 - output_types: requirements packages: # pip recognizes the index as a global option for the requirements.txt file @@ -450,18 +450,18 @@ dependencies: cuda: "12.*" cuda_suffixed: "true" packages: - - cuopt-cu12==26.4.*,>=0.0.0a0 + - cuopt-cu12==26.6.*,>=0.0.0a0 - matrix: cuda: "13.*" cuda_suffixed: "true" packages: - - cuopt-cu13==26.4.*,>=0.0.0a0 + - cuopt-cu13==26.6.*,>=0.0.0a0 - {matrix: null, packages: [*cuopt_unsuffixed]} depends_on_cuopt_server: common: - output_types: conda packages: - - &cuopt_server_unsuffixed cuopt-server==26.4.*,>=0.0.0a0 + - &cuopt_server_unsuffixed cuopt-server==26.6.*,>=0.0.0a0 - output_types: requirements packages: # pip recognizes the index as a global option for the requirements.txt file @@ -474,18 +474,18 @@ dependencies: cuda: "12.*" cuda_suffixed: "true" packages: - - cuopt-server-cu12==26.4.*,>=0.0.0a0 + - cuopt-server-cu12==26.6.*,>=0.0.0a0 - matrix: cuda: "13.*" cuda_suffixed: "true" packages: - - cuopt-server-cu13==26.4.*,>=0.0.0a0 + - cuopt-server-cu13==26.6.*,>=0.0.0a0 - {matrix: null, packages: [*cuopt_server_unsuffixed]} depends_on_cuopt_sh_client: common: - output_types: [conda, requirements, pyproject] packages: - - &cuopt_sh_client_unsuffixed cuopt-sh-client==26.4.*,>=0.0.0a0 + - &cuopt_sh_client_unsuffixed cuopt-sh-client==26.6.*,>=0.0.0a0 - output_types: requirements packages: # pip recognizes the index as a global option for the requirements.txt file @@ -495,7 +495,7 @@ dependencies: common: - output_types: [requirements, pyproject, conda] packages: - - cuopt-mps-parser==26.4.*,>=0.0.0a0 + - cuopt-mps-parser==26.6.*,>=0.0.0a0 - output_types: requirements packages: # pip recognizes the index as a global option for the requirements.txt file @@ -505,12 +505,12 @@ dependencies: common: - output_types: conda packages: - - libraft-headers==26.4.*,>=0.0.0a0 + - libraft-headers==26.6.*,>=0.0.0a0 depends_on_librmm: common: - output_types: conda packages: - - &librmm_unsuffixed librmm==26.4.*,>=0.0.0a0 + - &librmm_unsuffixed librmm==26.6.*,>=0.0.0a0 - output_types: requirements packages: # pip recognizes the index as a global option for the requirements.txt file @@ -522,12 +522,12 @@ dependencies: cuda: "12.*" cuda_suffixed: "true" packages: - - librmm-cu12==26.4.*,>=0.0.0a0 + - librmm-cu12==26.6.*,>=0.0.0a0 - matrix: cuda: "13.*" cuda_suffixed: "true" packages: - - librmm-cu13==26.4.*,>=0.0.0a0 + - librmm-cu13==26.6.*,>=0.0.0a0 - {matrix: null, packages: [*librmm_unsuffixed]} depends_on_cupy: common: @@ -562,7 +562,7 @@ dependencies: common: - output_types: conda packages: - - &rmm_unsuffixed rmm==26.4.*,>=0.0.0a0 + - &rmm_unsuffixed rmm==26.6.*,>=0.0.0a0 - output_types: requirements packages: # pip recognizes the index as a global option for the requirements.txt file @@ -574,12 +574,12 @@ dependencies: cuda: "12.*" cuda_suffixed: "true" packages: - - rmm-cu12==26.4.*,>=0.0.0a0 + - rmm-cu12==26.6.*,>=0.0.0a0 - matrix: cuda: "13.*" cuda_suffixed: "true" packages: - - rmm-cu13==26.4.*,>=0.0.0a0 + - rmm-cu13==26.6.*,>=0.0.0a0 - matrix: packages: - *rmm_unsuffixed @@ -588,7 +588,7 @@ dependencies: common: - output_types: conda packages: - - &cudf_unsuffixed cudf==26.4.*,>=0.0.0a0 + - &cudf_unsuffixed cudf==26.6.*,>=0.0.0a0 - output_types: requirements packages: - --extra-index-url=https://pypi.anaconda.org/rapidsai-wheels-nightly/simple @@ -599,12 +599,12 @@ dependencies: cuda: "12.*" cuda_suffixed: "true" packages: - - cudf-cu12==26.4.*,>=0.0.0a0 + - cudf-cu12==26.6.*,>=0.0.0a0 - matrix: cuda: "13.*" cuda_suffixed: "true" packages: - - cudf-cu13==26.4.*,>=0.0.0a0 + - cudf-cu13==26.6.*,>=0.0.0a0 - matrix: packages: - *cudf_unsuffixed @@ -613,7 +613,7 @@ dependencies: common: - output_types: conda packages: - - &pylibraft_unsuffixed pylibraft==26.4.*,>=0.0.0a0 + - &pylibraft_unsuffixed pylibraft==26.6.*,>=0.0.0a0 - output_types: requirements packages: - --extra-index-url=https://pypi.anaconda.org/rapidsai-wheels-nightly/simple @@ -624,12 +624,12 @@ dependencies: cuda: "12.*" cuda_suffixed: "true" packages: - - pylibraft-cu12==26.4.*,>=0.0.0a0 + - pylibraft-cu12==26.6.*,>=0.0.0a0 - matrix: cuda: "13.*" cuda_suffixed: "true" packages: - - pylibraft-cu13==26.4.*,>=0.0.0a0 + - pylibraft-cu13==26.6.*,>=0.0.0a0 - matrix: packages: - *pylibraft_unsuffixed diff --git a/gemini-extension.json b/gemini-extension.json index b4c6b764a4..c5ef9883f8 100644 --- a/gemini-extension.json +++ b/gemini-extension.json @@ -1,6 +1,6 @@ { "name": "nvidia-cuopt-skills", "description": "Agent skills for NVIDIA cuOpt optimization engine: routing, LP/MILP/QP, installation, and server.", - "version": "26.04.00", + "version": "26.06.00", "contextFileName": "AGENTS.md" } diff --git a/helmchart/cuopt-server/Chart.yaml b/helmchart/cuopt-server/Chart.yaml index 074d94bec9..811ac067cb 100644 --- a/helmchart/cuopt-server/Chart.yaml +++ b/helmchart/cuopt-server/Chart.yaml @@ -1,5 +1,5 @@ apiVersion: v2 -appVersion: 26.4.0 +appVersion: 26.6.0 description: A Helm chart for NVIDIA cuOpt Server with GPU support home: https://docs.nvidia.com/cuopt/user-guide/latest/resources.html keywords: @@ -14,4 +14,4 @@ name: cuopt-server sources: - https://docs.nvidia.com/cuopt/user-guide/latest/resources.html type: application -version: 26.4.0 +version: 26.6.0 diff --git a/helmchart/cuopt-server/values.yaml b/helmchart/cuopt-server/values.yaml index 5218596552..6adafea79e 100644 --- a/helmchart/cuopt-server/values.yaml +++ b/helmchart/cuopt-server/values.yaml @@ -7,7 +7,7 @@ replicaCount: 1 image: repository: nvidia/cuopt pullPolicy: IfNotPresent - tag: "26.4.0-cuda12.9-py3.12" + tag: "26.6.0-cuda12.9-py3.12" imagePullSecrets: [] nameOverride: "" diff --git a/python/cuopt/pyproject.toml b/python/cuopt/pyproject.toml index e86b5bdd73..eff7e01769 100644 --- a/python/cuopt/pyproject.toml +++ b/python/cuopt/pyproject.toml @@ -20,18 +20,18 @@ license = "Apache-2.0" requires-python = ">=3.11" dependencies = [ "cuda-python>=13.0.1,<14.0", - "cudf==26.4.*,>=0.0.0a0", - "cuopt-mps-parser==26.4.*,>=0.0.0a0", + "cudf==26.6.*,>=0.0.0a0", + "cuopt-mps-parser==26.6.*,>=0.0.0a0", "cupy-cuda13x>=13.6.0", - "libcuopt==26.4.*,>=0.0.0a0", + "libcuopt==26.6.*,>=0.0.0a0", "numba-cuda>=0.22.1", "numba>=0.60.0,<0.65.0", "numpy>=1.23.5,<3.0", "pandas>=2.0", - "pylibraft==26.4.*,>=0.0.0a0", + "pylibraft==26.6.*,>=0.0.0a0", "pyyaml>=6.0.0", "rapids-logger==0.2.*,>=0.0.0a0", - "rmm==26.4.*,>=0.0.0a0", + "rmm==26.6.*,>=0.0.0a0", "scipy>=1.14.1", ] # This list was generated by `rapids-dependency-file-generator`. To make changes, edit ../../dependencies.yaml and run `rapids-dependency-file-generator`. classifiers = [ @@ -101,12 +101,12 @@ dependencies-file = "../../dependencies.yaml" matrix-entry = "cuda_suffixed=true;use_cuda_wheels=true" requires = [ "cmake>=3.30.4", - "cuopt-mps-parser==26.4.*,>=0.0.0a0", + "cuopt-mps-parser==26.6.*,>=0.0.0a0", "cupy-cuda13x>=13.6.0", "cython>=3.0.3", - "libcuopt==26.4.*,>=0.0.0a0", + "libcuopt==26.6.*,>=0.0.0a0", "ninja", - "pylibraft==26.4.*,>=0.0.0a0", + "pylibraft==26.6.*,>=0.0.0a0", "rapids-logger==0.2.*,>=0.0.0a0", - "rmm==26.4.*,>=0.0.0a0", + "rmm==26.6.*,>=0.0.0a0", ] # 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/cuopt_self_hosted/pyproject.toml b/python/cuopt_self_hosted/pyproject.toml index 7645c99ed0..43aa80a5b3 100644 --- a/python/cuopt_self_hosted/pyproject.toml +++ b/python/cuopt_self_hosted/pyproject.toml @@ -20,7 +20,7 @@ license = "Apache-2.0" license-files = ["LICENSE"] requires-python = ">=3.11" dependencies = [ - "cuopt-mps-parser==26.4.*,>=0.0.0a0", + "cuopt-mps-parser==26.6.*,>=0.0.0a0", "msgpack-numpy==0.4.8", "msgpack==1.1.2", "requests", diff --git a/python/cuopt_server/pyproject.toml b/python/cuopt_server/pyproject.toml index d24cfcbd77..ce96c884be 100644 --- a/python/cuopt_server/pyproject.toml +++ b/python/cuopt_server/pyproject.toml @@ -21,7 +21,7 @@ license = "Apache-2.0" license-files = ["LICENSE"] requires-python = ">=3.11" dependencies = [ - "cuopt==26.4.*,>=0.0.0a0", + "cuopt==26.6.*,>=0.0.0a0", "cupy-cuda13x>=13.6.0", "fastapi", "jsonref==1.1.0", diff --git a/python/libcuopt/pyproject.toml b/python/libcuopt/pyproject.toml index 2507971a0f..e5c0c58fab 100644 --- a/python/libcuopt/pyproject.toml +++ b/python/libcuopt/pyproject.toml @@ -30,8 +30,8 @@ classifiers = [ "Programming Language :: Python :: 3.14", ] dependencies = [ - "cuopt-mps-parser==26.4.*,>=0.0.0a0", - "librmm==26.4.*,>=0.0.0a0", + "cuopt-mps-parser==26.6.*,>=0.0.0a0", + "librmm==26.6.*,>=0.0.0a0", "nvidia-cublas", "nvidia-cudart", "nvidia-cudss", @@ -81,8 +81,8 @@ dependencies-file = "../../dependencies.yaml" matrix-entry = "cuda_suffixed=true;use_cuda_wheels=true" requires = [ "cmake>=3.30.4", - "cuopt-mps-parser==26.4.*,>=0.0.0a0", - "librmm==26.4.*,>=0.0.0a0", + "cuopt-mps-parser==26.6.*,>=0.0.0a0", + "librmm==26.6.*,>=0.0.0a0", "ninja", "rapids-logger==0.2.*,>=0.0.0a0", ] # This list was generated by `rapids-dependency-file-generator`. To make changes, edit ../../dependencies.yaml and run `rapids-dependency-file-generator`. diff --git a/skills/cuopt-developer/SKILL.md b/skills/cuopt-developer/SKILL.md index 12419153ac..99743f9171 100644 --- a/skills/cuopt-developer/SKILL.md +++ b/skills/cuopt-developer/SKILL.md @@ -1,6 +1,6 @@ --- name: cuopt-developer -version: "26.04.00" +version: "26.06.00" description: Contribute to NVIDIA cuOpt codebase including C++/CUDA, Python, server, docs, and CI. Use when the user wants to modify solver internals, add features, submit PRs, or understand the codebase architecture. --- diff --git a/skills/cuopt-installation-api-c/SKILL.md b/skills/cuopt-installation-api-c/SKILL.md index 747382e3c7..bd4d60becc 100644 --- a/skills/cuopt-installation-api-c/SKILL.md +++ b/skills/cuopt-installation-api-c/SKILL.md @@ -1,6 +1,6 @@ --- name: cuopt-installation-api-c -version: "26.04.00" +version: "26.06.00" description: Install cuOpt for C — conda, locate lib/headers, verification. Use when the user is installing or verifying the C API. Standalone; no common skill. --- diff --git a/skills/cuopt-installation-api-python/SKILL.md b/skills/cuopt-installation-api-python/SKILL.md index a3d7a5e5d2..771f5ec8b0 100644 --- a/skills/cuopt-installation-api-python/SKILL.md +++ b/skills/cuopt-installation-api-python/SKILL.md @@ -1,6 +1,6 @@ --- name: cuopt-installation-api-python -version: "26.04.00" +version: "26.06.00" description: Install cuOpt for Python — pip, conda, Docker, verification. Use when the user is installing or verifying the Python API. Standalone; no common skill. --- diff --git a/skills/cuopt-installation-common/SKILL.md b/skills/cuopt-installation-common/SKILL.md index 6ceb9f9000..88534fb810 100644 --- a/skills/cuopt-installation-common/SKILL.md +++ b/skills/cuopt-installation-common/SKILL.md @@ -1,6 +1,6 @@ --- name: cuopt-installation-common -version: "26.04.00" +version: "26.06.00" description: Install cuOpt — system and environment requirements only. Domain concepts; no install commands or interface guidance. --- diff --git a/skills/cuopt-installation-developer/SKILL.md b/skills/cuopt-installation-developer/SKILL.md index a002498853..1f3dff0d3f 100644 --- a/skills/cuopt-installation-developer/SKILL.md +++ b/skills/cuopt-installation-developer/SKILL.md @@ -1,6 +1,6 @@ --- name: cuopt-installation-developer -version: "26.04.00" +version: "26.06.00" description: Developer installation — build cuOpt from source, run tests. Use when the user wants to set up a dev environment to contribute or modify cuOpt. --- diff --git a/skills/cuopt-lp-milp-api-c/SKILL.md b/skills/cuopt-lp-milp-api-c/SKILL.md index 53df3de63e..74b0d5dc92 100644 --- a/skills/cuopt-lp-milp-api-c/SKILL.md +++ b/skills/cuopt-lp-milp-api-c/SKILL.md @@ -1,6 +1,6 @@ --- name: cuopt-lp-milp-api-c -version: "26.04.00" +version: "26.06.00" description: LP and MILP with cuOpt — C API only. Use when the user is embedding LP/MILP in C/C++. --- diff --git a/skills/cuopt-lp-milp-api-cli/SKILL.md b/skills/cuopt-lp-milp-api-cli/SKILL.md index cbdc1e7778..1f8e8a157c 100644 --- a/skills/cuopt-lp-milp-api-cli/SKILL.md +++ b/skills/cuopt-lp-milp-api-cli/SKILL.md @@ -1,6 +1,6 @@ --- name: cuopt-lp-milp-api-cli -version: "26.04.00" +version: "26.06.00" description: LP and MILP with cuOpt — CLI only (MPS files, cuopt_cli). Use when the user is solving from MPS via command line. --- diff --git a/skills/cuopt-lp-milp-api-python/SKILL.md b/skills/cuopt-lp-milp-api-python/SKILL.md index a7cd9a59f2..e8435867db 100644 --- a/skills/cuopt-lp-milp-api-python/SKILL.md +++ b/skills/cuopt-lp-milp-api-python/SKILL.md @@ -1,6 +1,6 @@ --- name: cuopt-lp-milp-api-python -version: "26.04.00" +version: "26.06.00" description: Solve Linear Programming (LP) and Mixed-Integer Linear Programming (MILP) with the Python API. Use when the user asks about optimization with linear constraints, integer variables, scheduling, resource allocation, facility location, or production planning. --- diff --git a/skills/cuopt-qp-api-c/SKILL.md b/skills/cuopt-qp-api-c/SKILL.md index bc1efb63d3..85014b81fd 100644 --- a/skills/cuopt-qp-api-c/SKILL.md +++ b/skills/cuopt-qp-api-c/SKILL.md @@ -1,6 +1,6 @@ --- name: cuopt-qp-api-c -version: "26.04.00" +version: "26.06.00" description: Quadratic Programming (QP) with cuOpt — C API. Use when the user is embedding QP in C/C++. --- diff --git a/skills/cuopt-qp-api-cli/SKILL.md b/skills/cuopt-qp-api-cli/SKILL.md index 5f8a8e848a..7aec559126 100644 --- a/skills/cuopt-qp-api-cli/SKILL.md +++ b/skills/cuopt-qp-api-cli/SKILL.md @@ -1,6 +1,6 @@ --- name: cuopt-qp-api-cli -version: "26.04.00" +version: "26.06.00" description: QP with cuOpt — CLI (e.g. cuopt_cli with QP-capable input). Use when the user is solving QP from the command line. --- diff --git a/skills/cuopt-qp-api-python/SKILL.md b/skills/cuopt-qp-api-python/SKILL.md index b85b9e3db2..39533aaeca 100644 --- a/skills/cuopt-qp-api-python/SKILL.md +++ b/skills/cuopt-qp-api-python/SKILL.md @@ -1,6 +1,6 @@ --- name: cuopt-qp-api-python -version: "26.04.00" +version: "26.06.00" description: Quadratic Programming (QP) with cuOpt — Python API only (beta). Use when the user is building or solving QP in Python. --- diff --git a/skills/cuopt-routing-api-python/SKILL.md b/skills/cuopt-routing-api-python/SKILL.md index d8bf736f8f..c386107241 100644 --- a/skills/cuopt-routing-api-python/SKILL.md +++ b/skills/cuopt-routing-api-python/SKILL.md @@ -1,6 +1,6 @@ --- name: cuopt-routing-api-python -version: "26.04.00" +version: "26.06.00" description: Vehicle routing (VRP, TSP, PDP) with cuOpt — Python API only. Use when the user is building or solving routing in Python. --- diff --git a/skills/cuopt-server-api-python/SKILL.md b/skills/cuopt-server-api-python/SKILL.md index b340e9883f..7d6ed175dd 100644 --- a/skills/cuopt-server-api-python/SKILL.md +++ b/skills/cuopt-server-api-python/SKILL.md @@ -1,6 +1,6 @@ --- name: cuopt-server-api-python -version: "26.04.00" +version: "26.06.00" description: cuOpt REST server — start server, endpoints, Python/curl client examples. Use when the user is deploying or calling the REST API. --- diff --git a/skills/cuopt-server-common/SKILL.md b/skills/cuopt-server-common/SKILL.md index f23c9c4a5f..cc2a3728d5 100644 --- a/skills/cuopt-server-common/SKILL.md +++ b/skills/cuopt-server-common/SKILL.md @@ -1,6 +1,6 @@ --- name: cuopt-server-common -version: "26.04.00" +version: "26.06.00" description: cuOpt REST server — what it does and how requests flow. Domain concepts; no deploy or client code. --- diff --git a/skills/cuopt-user-rules/SKILL.md b/skills/cuopt-user-rules/SKILL.md index 0777b9af15..87734f72a2 100644 --- a/skills/cuopt-user-rules/SKILL.md +++ b/skills/cuopt-user-rules/SKILL.md @@ -1,6 +1,6 @@ --- name: cuopt-user-rules -version: "26.04.00" +version: "26.06.00" description: Base behavior rules for using NVIDIA cuOpt. Read this FIRST before any cuOpt user task (routing, LP/MILP, QP, installation, server). Covers handling incomplete questions, clarifying data requirements, verifying understanding, and running commands safely. --- diff --git a/skills/lp-milp-formulation/SKILL.md b/skills/lp-milp-formulation/SKILL.md index 64431a04c4..e429282033 100644 --- a/skills/lp-milp-formulation/SKILL.md +++ b/skills/lp-milp-formulation/SKILL.md @@ -1,6 +1,6 @@ --- name: lp-milp-formulation -version: "26.04.00" +version: "26.06.00" description: LP/MILP concepts and going from problem text to formulation. What LP/MILP are, required formulation questions, typical modeling elements, and how to parse problem statements (parameters, constraints, decisions, objective). --- diff --git a/skills/qp-formulation/SKILL.md b/skills/qp-formulation/SKILL.md index c87b887fbc..60aed00ede 100644 --- a/skills/qp-formulation/SKILL.md +++ b/skills/qp-formulation/SKILL.md @@ -1,6 +1,6 @@ --- name: qp-formulation -version: "26.04.00" +version: "26.06.00" description: Quadratic Programming (QP) — problem form and constraints. Domain concepts; no API or interface. QP is beta. --- diff --git a/skills/routing-formulation/SKILL.md b/skills/routing-formulation/SKILL.md index 4ab8d6419d..9cf8060cdf 100644 --- a/skills/routing-formulation/SKILL.md +++ b/skills/routing-formulation/SKILL.md @@ -1,6 +1,6 @@ --- name: routing-formulation -version: "26.04.00" +version: "26.06.00" description: Vehicle routing (VRP, TSP, PDP) — problem types and data requirements. Domain concepts; no API or interface. --- diff --git a/skills/skill-evolution/SKILL.md b/skills/skill-evolution/SKILL.md index d77fba1a3f..f3605795b7 100644 --- a/skills/skill-evolution/SKILL.md +++ b/skills/skill-evolution/SKILL.md @@ -1,6 +1,6 @@ --- name: skill-evolution -version: "26.04.00" +version: "26.06.00" description: After solving a non-trivial problem, detect generalizable learnings and propose skill updates so future interactions benefit automatically. Always active — applies to every interaction. --- @@ -182,7 +182,7 @@ When skill evolution creates an entirely new skill directory, add `origin: skill ```yaml --- name: new-skill-name -version: "26.04.00" +version: "26.06.00" description: ... origin: skill-evolution --- From bf3bb925654da62c4d3529f2ec5fef70bd0052ac Mon Sep 17 00:00:00 2001 From: Bulle Mostovoi Date: Wed, 11 Mar 2026 12:17:31 +0100 Subject: [PATCH 3/7] replaced SpMV calls with SpMVOp calls in compute_At_y and compute_A_x --- cpp/CMakeLists.txt | 5 ++- cpp/src/pdlp/cusparse_view.cu | 78 ++++++++++++++++++++++++++++++++++ cpp/src/pdlp/cusparse_view.hpp | 11 +++++ cpp/src/pdlp/pdhg.cu | 39 ++++++++--------- cpp/src/pdlp/pdlp.cu | 1 + 5 files changed, 111 insertions(+), 23 deletions(-) diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index 1946012ca4..25d0eddfb5 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -278,7 +278,10 @@ set_target_properties(cuopt CXX_SCAN_FOR_MODULES OFF ) -target_compile_definitions(cuopt PUBLIC "CUOPT_LOG_ACTIVE_LEVEL=RAPIDS_LOGGER_LOG_LEVEL_${LIBCUOPT_LOGGING_LEVEL}") +target_compile_definitions(cuopt + PUBLIC "CUOPT_LOG_ACTIVE_LEVEL=RAPIDS_LOGGER_LOG_LEVEL_${LIBCUOPT_LOGGING_LEVEL}" + PUBLIC CUSPARSE_ENABLE_EXPERIMENTAL_API +) target_compile_options(cuopt PRIVATE "$<$:${CUOPT_CXX_FLAGS}>" diff --git a/cpp/src/pdlp/cusparse_view.cu b/cpp/src/pdlp/cusparse_view.cu index 64ec44f5ef..8bed41349a 100644 --- a/cpp/src/pdlp/cusparse_view.cu +++ b/cpp/src/pdlp/cusparse_view.cu @@ -304,6 +304,8 @@ cusparse_view_t::cusparse_view_t( A_T_indices_{op_problem_scaled.reverse_constraints}, buffer_non_transpose{0, handle_ptr->get_stream()}, buffer_transpose{0, handle_ptr->get_stream()}, + buffer_non_transpose_spmvop{0, handle_ptr->get_stream()}, + buffer_transpose_spmvop{0, handle_ptr->get_stream()}, buffer_transpose_batch{0, handle_ptr->get_stream()}, buffer_non_transpose_batch{0, handle_ptr->get_stream()}, buffer_transpose_batch_row_row_{0, handle_ptr->get_stream()}, @@ -716,6 +718,8 @@ cusparse_view_t::cusparse_view_t( A_T_indices_{_A_T_indices}, buffer_non_transpose{0, handle_ptr->get_stream()}, buffer_transpose{0, handle_ptr->get_stream()}, + buffer_non_transpose_spmvop{0, handle_ptr->get_stream()}, + buffer_transpose_spmvop{0, handle_ptr->get_stream()}, buffer_transpose_batch{0, handle_ptr->get_stream()}, buffer_non_transpose_batch{0, handle_ptr->get_stream()}, buffer_transpose_batch_row_row_{0, handle_ptr->get_stream()}, @@ -925,6 +929,8 @@ cusparse_view_t::cusparse_view_t( tmp_dual(existing_cusparse_view.tmp_dual), buffer_non_transpose{0, handle_ptr->get_stream()}, buffer_transpose{0, handle_ptr->get_stream()}, + buffer_non_transpose_spmvop{0, handle_ptr->get_stream()}, + buffer_transpose_spmvop{0, handle_ptr->get_stream()}, buffer_transpose_batch{0, handle_ptr->get_stream()}, buffer_non_transpose_batch{0, handle_ptr->get_stream()}, buffer_transpose_batch_row_row_{0, handle_ptr->get_stream()}, @@ -1030,6 +1036,76 @@ cusparse_view_t::cusparse_view_t( #endif } +// Creates SpMVOp plans. Must be called after scale_problem() so plans use the scaled matrix. +template +void cusparse_view_t::create_spmv_op_plans(bool is_reflected) +{ + RAFT_CUSPARSE_TRY(cusparseSetStream(handle_ptr_->get_cusparse_handle(), handle_ptr_->get_stream())); + + // Prepare buffers for At_y SpMVOp + size_t buffer_size_transpose = 0; + RAFT_CUSPARSE_TRY( + cusparseSpMVOp_bufferSize(handle_ptr_->get_cusparse_handle(), + CUSPARSE_OPERATION_NON_TRANSPOSE, + A_T, + dual_solution, + current_AtY, + current_AtY, + CUDA_R_64F, + &buffer_size_transpose)); + buffer_transpose_spmvop.resize(buffer_size_transpose, handle_ptr_->get_stream()); + + RAFT_CUSPARSE_TRY(cusparseSpMVOp_createDescr(handle_ptr_->get_cusparse_handle(), + &spmv_op_descr_A_t_, + CUSPARSE_OPERATION_NON_TRANSPOSE, + A_T, + dual_solution, + current_AtY, + current_AtY, + CUDA_R_64F, + buffer_transpose_spmvop.data())); + + char* lto_buffer = NULL; + size_t lto_buffer_size = 0; + RAFT_CUSPARSE_TRY(cusparseSpMVOp_createPlan(handle_ptr_->get_cusparse_handle(), + spmv_op_descr_A_t_, + &spmv_op_plan_A_t_, + lto_buffer, + lto_buffer_size)); + + // Only prepare buffers for A_x if using reflected_halpern + if (is_reflected) + { + size_t buffer_size_non_transpose = 0; + RAFT_CUSPARSE_TRY( + cusparseSpMVOp_bufferSize(handle_ptr_->get_cusparse_handle(), + CUSPARSE_OPERATION_NON_TRANSPOSE, + A, + reflected_primal_solution, + dual_gradient, + dual_gradient, + CUDA_R_64F, + &buffer_size_non_transpose)); + buffer_non_transpose_spmvop.resize(buffer_size_non_transpose, handle_ptr_->get_stream()); + + RAFT_CUSPARSE_TRY(cusparseSpMVOp_createDescr(handle_ptr_->get_cusparse_handle(), + &spmv_op_descr_A_, + CUSPARSE_OPERATION_NON_TRANSPOSE, + A, + reflected_primal_solution, + dual_gradient, + dual_gradient, + CUDA_R_64F, + buffer_non_transpose_spmvop.data())); + + RAFT_CUSPARSE_TRY(cusparseSpMVOp_createPlan(handle_ptr_->get_cusparse_handle(), + spmv_op_descr_A_, + &spmv_op_plan_A_, + lto_buffer, + lto_buffer_size)); + } +} + // Empty constructor used in kkt restart to save memory template cusparse_view_t::cusparse_view_t( @@ -1040,6 +1116,8 @@ cusparse_view_t::cusparse_view_t( : handle_ptr_(handle_ptr), buffer_non_transpose{0, handle_ptr->get_stream()}, buffer_transpose{0, handle_ptr->get_stream()}, + buffer_non_transpose_spmvop{0, handle_ptr->get_stream()}, + buffer_transpose_spmvop{0, handle_ptr->get_stream()}, buffer_transpose_batch{0, handle_ptr->get_stream()}, buffer_non_transpose_batch{0, handle_ptr->get_stream()}, buffer_transpose_batch_row_row_{0, handle_ptr->get_stream()}, diff --git a/cpp/src/pdlp/cusparse_view.hpp b/cpp/src/pdlp/cusparse_view.hpp index 416a0b1e5f..9cf3bf5dc8 100644 --- a/cpp/src/pdlp/cusparse_view.hpp +++ b/cpp/src/pdlp/cusparse_view.hpp @@ -120,6 +120,8 @@ class cusparse_view_t { const rmm::device_uvector&, // Empty just to init the const& const std::vector&); // Empty just to init the const& + void create_spmv_op_plans(bool is_reflected); + const bool batch_mode_{false}; raft::handle_t const* handle_ptr_{nullptr}; @@ -171,6 +173,15 @@ class cusparse_view_t { // reuse buffers for cusparse spmv rmm::device_uvector buffer_non_transpose; rmm::device_uvector buffer_transpose; + rmm::device_uvector buffer_non_transpose_spmvop; + rmm::device_uvector buffer_transpose_spmvop; + + // here for tests of compilation + cusparseSpMVOpDescr_t spmv_op_descr_A_; + cusparseSpMVOpDescr_t spmv_op_descr_A_t_; + cusparseSpMVOpPlan_t spmv_op_plan_A_; + cusparseSpMVOpPlan_t spmv_op_plan_A_t_; + // reuse buffers for cusparse spmm rmm::device_uvector buffer_transpose_batch; diff --git a/cpp/src/pdlp/pdhg.cu b/cpp/src/pdlp/pdhg.cu index 74df7fee01..7f03b316ab 100644 --- a/cpp/src/pdlp/pdhg.cu +++ b/cpp/src/pdlp/pdhg.cu @@ -320,17 +320,14 @@ void pdhg_solver_t::compute_At_y() } } if (!cusparse_view_.mixed_precision_enabled_) { - RAFT_CUSPARSE_TRY( - raft::sparse::detail::cusparsespmv(handle_ptr_->get_cusparse_handle(), - CUSPARSE_OPERATION_NON_TRANSPOSE, - reusable_device_scalar_value_1_.data(), - cusparse_view_.A_T, - cusparse_view_.dual_solution, - reusable_device_scalar_value_0_.data(), - cusparse_view_.current_AtY, - CUSPARSE_SPMV_CSR_ALG2, - (f_t*)cusparse_view_.buffer_transpose.data(), - stream_view_)); + RAFT_CUSPARSE_TRY(cusparseSetStream(handle_ptr_->get_cusparse_handle(), stream_view_.value())); + RAFT_CUSPARSE_TRY(cusparseSpMVOp(handle_ptr_->get_cusparse_handle(), + cusparse_view_.spmv_op_plan_A_t_, + reusable_device_scalar_value_1_.data(), + reusable_device_scalar_value_0_.data(), + cusparse_view_.dual_solution, + cusparse_view_.current_AtY, + cusparse_view_.current_AtY)); } } else { RAFT_CUSPARSE_TRY(raft::sparse::detail::cusparsespmm( @@ -368,18 +365,16 @@ void pdhg_solver_t::compute_A_x() } } if (!cusparse_view_.mixed_precision_enabled_) { - RAFT_CUSPARSE_TRY( - raft::sparse::detail::cusparsespmv(handle_ptr_->get_cusparse_handle(), - CUSPARSE_OPERATION_NON_TRANSPOSE, - reusable_device_scalar_value_1_.data(), - cusparse_view_.A, - cusparse_view_.reflected_primal_solution, - reusable_device_scalar_value_0_.data(), - cusparse_view_.dual_gradient, - CUSPARSE_SPMV_CSR_ALG2, - (f_t*)cusparse_view_.buffer_non_transpose.data(), - stream_view_)); + RAFT_CUSPARSE_TRY(cusparseSetStream(handle_ptr_->get_cusparse_handle(), stream_view_.value())); + RAFT_CUSPARSE_TRY(cusparseSpMVOp(handle_ptr_->get_cusparse_handle(), + cusparse_view_.spmv_op_plan_A_, + reusable_device_scalar_value_1_.data(), + reusable_device_scalar_value_0_.data(), + cusparse_view_.reflected_primal_solution, + cusparse_view_.dual_gradient, + cusparse_view_.dual_gradient)); } + } else { RAFT_CUSPARSE_TRY(raft::sparse::detail::cusparsespmm( handle_ptr_->get_cusparse_handle(), diff --git a/cpp/src/pdlp/pdlp.cu b/cpp/src/pdlp/pdlp.cu index 82e79098a7..5505d0751c 100644 --- a/cpp/src/pdlp/pdlp.cu +++ b/cpp/src/pdlp/pdlp.cu @@ -2143,6 +2143,7 @@ optimization_problem_solution_t pdlp_solver_t::run_solver(co compute_initial_primal_weight(); initial_scaling_strategy_.scale_problem(); + pdhg_solver_.get_cusparse_view().create_spmv_op_plans(settings_.hyper_params.use_reflected_primal_dual); // Update FP32 matrix copies for mixed precision SpMV after scaling pdhg_solver_.get_cusparse_view().update_mixed_precision_matrices(); From 9ca51704686c079801425711e4bdebf53386037d Mon Sep 17 00:00:00 2001 From: Bulle Mostovoi Date: Wed, 11 Mar 2026 13:50:42 +0100 Subject: [PATCH 4/7] small fix for full OK tests --- cpp/src/pdlp/pdhg.cu | 63 +++++++++++++++++++++++++++++++------------- cpp/src/pdlp/pdlp.cu | 3 ++- 2 files changed, 46 insertions(+), 20 deletions(-) diff --git a/cpp/src/pdlp/pdhg.cu b/cpp/src/pdlp/pdhg.cu index 7f03b316ab..e1a2ec566e 100644 --- a/cpp/src/pdlp/pdhg.cu +++ b/cpp/src/pdlp/pdhg.cu @@ -318,16 +318,29 @@ void pdhg_solver_t::compute_At_y() cusparse_view_.buffer_transpose_mixed_.data(), stream_view_); } + else { + RAFT_CUSPARSE_TRY(cusparseSetStream(handle_ptr_->get_cusparse_handle(), stream_view_.value())); + RAFT_CUSPARSE_TRY(cusparseSpMVOp(handle_ptr_->get_cusparse_handle(), + cusparse_view_.spmv_op_plan_A_t_, + reusable_device_scalar_value_1_.data(), + reusable_device_scalar_value_0_.data(), + cusparse_view_.dual_solution, + cusparse_view_.current_AtY, + cusparse_view_.current_AtY)); + } } - if (!cusparse_view_.mixed_precision_enabled_) { - RAFT_CUSPARSE_TRY(cusparseSetStream(handle_ptr_->get_cusparse_handle(), stream_view_.value())); - RAFT_CUSPARSE_TRY(cusparseSpMVOp(handle_ptr_->get_cusparse_handle(), - cusparse_view_.spmv_op_plan_A_t_, - reusable_device_scalar_value_1_.data(), - reusable_device_scalar_value_0_.data(), - cusparse_view_.dual_solution, - cusparse_view_.current_AtY, - cusparse_view_.current_AtY)); + else { + RAFT_CUSPARSE_TRY( + raft::sparse::detail::cusparsespmv(handle_ptr_->get_cusparse_handle(), + CUSPARSE_OPERATION_NON_TRANSPOSE, + reusable_device_scalar_value_1_.data(), + cusparse_view_.A_T, + cusparse_view_.dual_solution, + reusable_device_scalar_value_0_.data(), + cusparse_view_.current_AtY, + CUSPARSE_SPMV_CSR_ALG2, + (f_t*)cusparse_view_.buffer_transpose.data(), + stream_view_)); } } else { RAFT_CUSPARSE_TRY(raft::sparse::detail::cusparsespmm( @@ -363,18 +376,30 @@ void pdhg_solver_t::compute_A_x() cusparse_view_.buffer_non_transpose_mixed_.data(), stream_view_); } + else { + RAFT_CUSPARSE_TRY(cusparseSetStream(handle_ptr_->get_cusparse_handle(), stream_view_.value())); + RAFT_CUSPARSE_TRY(cusparseSpMVOp(handle_ptr_->get_cusparse_handle(), + cusparse_view_.spmv_op_plan_A_, + reusable_device_scalar_value_1_.data(), + reusable_device_scalar_value_0_.data(), + cusparse_view_.reflected_primal_solution, + cusparse_view_.dual_gradient, + cusparse_view_.dual_gradient)); + } } - if (!cusparse_view_.mixed_precision_enabled_) { - RAFT_CUSPARSE_TRY(cusparseSetStream(handle_ptr_->get_cusparse_handle(), stream_view_.value())); - RAFT_CUSPARSE_TRY(cusparseSpMVOp(handle_ptr_->get_cusparse_handle(), - cusparse_view_.spmv_op_plan_A_, - reusable_device_scalar_value_1_.data(), - reusable_device_scalar_value_0_.data(), - cusparse_view_.reflected_primal_solution, - cusparse_view_.dual_gradient, - cusparse_view_.dual_gradient)); + else { + RAFT_CUSPARSE_TRY( + raft::sparse::detail::cusparsespmv(handle_ptr_->get_cusparse_handle(), + CUSPARSE_OPERATION_NON_TRANSPOSE, + reusable_device_scalar_value_1_.data(), + cusparse_view_.A, + cusparse_view_.reflected_primal_solution, + reusable_device_scalar_value_0_.data(), + cusparse_view_.dual_gradient, + CUSPARSE_SPMV_CSR_ALG2, + (f_t*)cusparse_view_.buffer_non_transpose.data(), + stream_view_)); } - } else { RAFT_CUSPARSE_TRY(raft::sparse::detail::cusparsespmm( handle_ptr_->get_cusparse_handle(), diff --git a/cpp/src/pdlp/pdlp.cu b/cpp/src/pdlp/pdlp.cu index 5505d0751c..ac0b7c4f14 100644 --- a/cpp/src/pdlp/pdlp.cu +++ b/cpp/src/pdlp/pdlp.cu @@ -2143,7 +2143,8 @@ optimization_problem_solution_t pdlp_solver_t::run_solver(co compute_initial_primal_weight(); initial_scaling_strategy_.scale_problem(); - pdhg_solver_.get_cusparse_view().create_spmv_op_plans(settings_.hyper_params.use_reflected_primal_dual); + if (!pdhg_solver_.get_cusparse_view().mixed_precision_enabled_ && !std::is_same_v) + pdhg_solver_.get_cusparse_view().create_spmv_op_plans(settings_.hyper_params.use_reflected_primal_dual); // Update FP32 matrix copies for mixed precision SpMV after scaling pdhg_solver_.get_cusparse_view().update_mixed_precision_matrices(); From 14add6130b7d985f326b005749ed750dd1e1675c Mon Sep 17 00:00:00 2001 From: Bulle Mostovoi Date: Wed, 11 Mar 2026 14:11:43 +0100 Subject: [PATCH 5/7] coding style and updated dependencies. still need to conda install libnvjitlink-dev manually --- ...64.yaml => all_cuda-132_arch-aarch64.yaml} | 6 +- ..._64.yaml => all_cuda-132_arch-x86_64.yaml} | 6 +- cpp/src/pdlp/cusparse_view.cu | 92 +++++++++---------- cpp/src/pdlp/pdhg.cu | 60 ++++++------ cpp/src/pdlp/pdlp.cu | 3 +- dependencies.yaml | 6 +- 6 files changed, 85 insertions(+), 88 deletions(-) rename conda/environments/{all_cuda-131_arch-aarch64.yaml => all_cuda-132_arch-aarch64.yaml} (94%) rename conda/environments/{all_cuda-131_arch-x86_64.yaml => all_cuda-132_arch-x86_64.yaml} (95%) diff --git a/conda/environments/all_cuda-131_arch-aarch64.yaml b/conda/environments/all_cuda-132_arch-aarch64.yaml similarity index 94% rename from conda/environments/all_cuda-131_arch-aarch64.yaml rename to conda/environments/all_cuda-132_arch-aarch64.yaml index a68ebf1285..cdc8ddac93 100644 --- a/conda/environments/all_cuda-131_arch-aarch64.yaml +++ b/conda/environments/all_cuda-132_arch-aarch64.yaml @@ -17,8 +17,8 @@ dependencies: - cuda-nvtx-dev - cuda-python>=13.0.1,<14.0 - cuda-sanitizer-api -- cuda-version=13.1 -- cudf==26.6.*,>=0.0.0a0 +- cuda-version=13.2 +- cudf==26.4.*,>=0.0.0a0 - cupy>=13.6.0 - cxx-compiler - cython>=3.0.3 @@ -77,4 +77,4 @@ dependencies: - nvidia-sphinx-theme - swagger-plugin-for-sphinx - veroviz -name: all_cuda-131_arch-aarch64 +name: all_cuda-132_arch-aarch64 diff --git a/conda/environments/all_cuda-131_arch-x86_64.yaml b/conda/environments/all_cuda-132_arch-x86_64.yaml similarity index 95% rename from conda/environments/all_cuda-131_arch-x86_64.yaml rename to conda/environments/all_cuda-132_arch-x86_64.yaml index 043d55e148..a86c24e55b 100644 --- a/conda/environments/all_cuda-131_arch-x86_64.yaml +++ b/conda/environments/all_cuda-132_arch-x86_64.yaml @@ -17,8 +17,8 @@ dependencies: - cuda-nvtx-dev - cuda-python>=13.0.1,<14.0 - cuda-sanitizer-api -- cuda-version=13.1 -- cudf==26.6.*,>=0.0.0a0 +- cuda-version=13.2 +- cudf==26.4.*,>=0.0.0a0 - cupy>=13.6.0 - cxx-compiler - cython>=3.0.3 @@ -77,4 +77,4 @@ dependencies: - nvidia-sphinx-theme - swagger-plugin-for-sphinx - veroviz -name: all_cuda-131_arch-x86_64 +name: all_cuda-132_arch-x86_64 diff --git a/cpp/src/pdlp/cusparse_view.cu b/cpp/src/pdlp/cusparse_view.cu index 8bed41349a..e153552aed 100644 --- a/cpp/src/pdlp/cusparse_view.cu +++ b/cpp/src/pdlp/cusparse_view.cu @@ -1040,69 +1040,67 @@ cusparse_view_t::cusparse_view_t( template void cusparse_view_t::create_spmv_op_plans(bool is_reflected) { - RAFT_CUSPARSE_TRY(cusparseSetStream(handle_ptr_->get_cusparse_handle(), handle_ptr_->get_stream())); + RAFT_CUSPARSE_TRY( + cusparseSetStream(handle_ptr_->get_cusparse_handle(), handle_ptr_->get_stream())); // Prepare buffers for At_y SpMVOp size_t buffer_size_transpose = 0; - RAFT_CUSPARSE_TRY( - cusparseSpMVOp_bufferSize(handle_ptr_->get_cusparse_handle(), - CUSPARSE_OPERATION_NON_TRANSPOSE, - A_T, - dual_solution, - current_AtY, - current_AtY, - CUDA_R_64F, - &buffer_size_transpose)); + RAFT_CUSPARSE_TRY(cusparseSpMVOp_bufferSize(handle_ptr_->get_cusparse_handle(), + CUSPARSE_OPERATION_NON_TRANSPOSE, + A_T, + dual_solution, + current_AtY, + current_AtY, + CUDA_R_64F, + &buffer_size_transpose)); buffer_transpose_spmvop.resize(buffer_size_transpose, handle_ptr_->get_stream()); RAFT_CUSPARSE_TRY(cusparseSpMVOp_createDescr(handle_ptr_->get_cusparse_handle(), - &spmv_op_descr_A_t_, - CUSPARSE_OPERATION_NON_TRANSPOSE, - A_T, - dual_solution, - current_AtY, - current_AtY, - CUDA_R_64F, - buffer_transpose_spmvop.data())); - - char* lto_buffer = NULL; + &spmv_op_descr_A_t_, + CUSPARSE_OPERATION_NON_TRANSPOSE, + A_T, + dual_solution, + current_AtY, + current_AtY, + CUDA_R_64F, + buffer_transpose_spmvop.data())); + + char* lto_buffer = NULL; size_t lto_buffer_size = 0; RAFT_CUSPARSE_TRY(cusparseSpMVOp_createPlan(handle_ptr_->get_cusparse_handle(), - spmv_op_descr_A_t_, - &spmv_op_plan_A_t_, - lto_buffer, - lto_buffer_size)); + spmv_op_descr_A_t_, + &spmv_op_plan_A_t_, + lto_buffer, + lto_buffer_size)); // Only prepare buffers for A_x if using reflected_halpern - if (is_reflected) - { + if (is_reflected) { size_t buffer_size_non_transpose = 0; - RAFT_CUSPARSE_TRY( - cusparseSpMVOp_bufferSize(handle_ptr_->get_cusparse_handle(), - CUSPARSE_OPERATION_NON_TRANSPOSE, - A, - reflected_primal_solution, - dual_gradient, - dual_gradient, - CUDA_R_64F, - &buffer_size_non_transpose)); + RAFT_CUSPARSE_TRY(cusparseSpMVOp_bufferSize(handle_ptr_->get_cusparse_handle(), + CUSPARSE_OPERATION_NON_TRANSPOSE, + A, + reflected_primal_solution, + dual_gradient, + dual_gradient, + CUDA_R_64F, + &buffer_size_non_transpose)); buffer_non_transpose_spmvop.resize(buffer_size_non_transpose, handle_ptr_->get_stream()); RAFT_CUSPARSE_TRY(cusparseSpMVOp_createDescr(handle_ptr_->get_cusparse_handle(), - &spmv_op_descr_A_, - CUSPARSE_OPERATION_NON_TRANSPOSE, - A, - reflected_primal_solution, - dual_gradient, - dual_gradient, - CUDA_R_64F, - buffer_non_transpose_spmvop.data())); + &spmv_op_descr_A_, + CUSPARSE_OPERATION_NON_TRANSPOSE, + A, + reflected_primal_solution, + dual_gradient, + dual_gradient, + CUDA_R_64F, + buffer_non_transpose_spmvop.data())); RAFT_CUSPARSE_TRY(cusparseSpMVOp_createPlan(handle_ptr_->get_cusparse_handle(), - spmv_op_descr_A_, - &spmv_op_plan_A_, - lto_buffer, - lto_buffer_size)); + spmv_op_descr_A_, + &spmv_op_plan_A_, + lto_buffer, + lto_buffer_size)); } } diff --git a/cpp/src/pdlp/pdhg.cu b/cpp/src/pdlp/pdhg.cu index e1a2ec566e..5705160b17 100644 --- a/cpp/src/pdlp/pdhg.cu +++ b/cpp/src/pdlp/pdhg.cu @@ -317,30 +317,29 @@ void pdhg_solver_t::compute_At_y() CUSPARSE_SPMV_CSR_ALG2, cusparse_view_.buffer_transpose_mixed_.data(), stream_view_); - } - else { - RAFT_CUSPARSE_TRY(cusparseSetStream(handle_ptr_->get_cusparse_handle(), stream_view_.value())); + } else { + RAFT_CUSPARSE_TRY( + cusparseSetStream(handle_ptr_->get_cusparse_handle(), stream_view_.value())); RAFT_CUSPARSE_TRY(cusparseSpMVOp(handle_ptr_->get_cusparse_handle(), - cusparse_view_.spmv_op_plan_A_t_, - reusable_device_scalar_value_1_.data(), - reusable_device_scalar_value_0_.data(), - cusparse_view_.dual_solution, - cusparse_view_.current_AtY, - cusparse_view_.current_AtY)); + cusparse_view_.spmv_op_plan_A_t_, + reusable_device_scalar_value_1_.data(), + reusable_device_scalar_value_0_.data(), + cusparse_view_.dual_solution, + cusparse_view_.current_AtY, + cusparse_view_.current_AtY)); } - } - else { + } else { RAFT_CUSPARSE_TRY( raft::sparse::detail::cusparsespmv(handle_ptr_->get_cusparse_handle(), - CUSPARSE_OPERATION_NON_TRANSPOSE, - reusable_device_scalar_value_1_.data(), - cusparse_view_.A_T, - cusparse_view_.dual_solution, - reusable_device_scalar_value_0_.data(), - cusparse_view_.current_AtY, - CUSPARSE_SPMV_CSR_ALG2, - (f_t*)cusparse_view_.buffer_transpose.data(), - stream_view_)); + CUSPARSE_OPERATION_NON_TRANSPOSE, + reusable_device_scalar_value_1_.data(), + cusparse_view_.A_T, + cusparse_view_.dual_solution, + reusable_device_scalar_value_0_.data(), + cusparse_view_.current_AtY, + CUSPARSE_SPMV_CSR_ALG2, + (f_t*)cusparse_view_.buffer_transpose.data(), + stream_view_)); } } else { RAFT_CUSPARSE_TRY(raft::sparse::detail::cusparsespmm( @@ -375,19 +374,18 @@ void pdhg_solver_t::compute_A_x() CUSPARSE_SPMV_CSR_ALG2, cusparse_view_.buffer_non_transpose_mixed_.data(), stream_view_); - } - else { - RAFT_CUSPARSE_TRY(cusparseSetStream(handle_ptr_->get_cusparse_handle(), stream_view_.value())); + } else { + RAFT_CUSPARSE_TRY( + cusparseSetStream(handle_ptr_->get_cusparse_handle(), stream_view_.value())); RAFT_CUSPARSE_TRY(cusparseSpMVOp(handle_ptr_->get_cusparse_handle(), - cusparse_view_.spmv_op_plan_A_, - reusable_device_scalar_value_1_.data(), - reusable_device_scalar_value_0_.data(), - cusparse_view_.reflected_primal_solution, - cusparse_view_.dual_gradient, - cusparse_view_.dual_gradient)); + cusparse_view_.spmv_op_plan_A_, + reusable_device_scalar_value_1_.data(), + reusable_device_scalar_value_0_.data(), + cusparse_view_.reflected_primal_solution, + cusparse_view_.dual_gradient, + cusparse_view_.dual_gradient)); } - } - else { + } else { RAFT_CUSPARSE_TRY( raft::sparse::detail::cusparsespmv(handle_ptr_->get_cusparse_handle(), CUSPARSE_OPERATION_NON_TRANSPOSE, diff --git a/cpp/src/pdlp/pdlp.cu b/cpp/src/pdlp/pdlp.cu index ac0b7c4f14..3f0fe0cd47 100644 --- a/cpp/src/pdlp/pdlp.cu +++ b/cpp/src/pdlp/pdlp.cu @@ -2144,7 +2144,8 @@ optimization_problem_solution_t pdlp_solver_t::run_solver(co initial_scaling_strategy_.scale_problem(); if (!pdhg_solver_.get_cusparse_view().mixed_precision_enabled_ && !std::is_same_v) - pdhg_solver_.get_cusparse_view().create_spmv_op_plans(settings_.hyper_params.use_reflected_primal_dual); + pdhg_solver_.get_cusparse_view().create_spmv_op_plans( + settings_.hyper_params.use_reflected_primal_dual); // Update FP32 matrix copies for mixed precision SpMV after scaling pdhg_solver_.get_cusparse_view().update_mixed_precision_matrices(); diff --git a/dependencies.yaml b/dependencies.yaml index db60f63569..6e9dbcc47b 100644 --- a/dependencies.yaml +++ b/dependencies.yaml @@ -7,7 +7,7 @@ files: all: output: conda matrix: - cuda: ["12.9", "13.1"] + cuda: ["12.9", "13.2"] arch: [x86_64, aarch64] includes: - build_common @@ -666,9 +666,9 @@ dependencies: packages: - cuda-version=13.0 - matrix: - cuda: "13.1" + cuda: "13.2" packages: - - cuda-version=13.1 + - cuda-version=13.2 cuda: common: - output_types: [conda] From 249d13c881774c41e97d3b85c8499f6582b6d0c3 Mon Sep 17 00:00:00 2001 From: Bulle Mostovoi Date: Mon, 23 Mar 2026 14:04:39 +0100 Subject: [PATCH 6/7] updated dependencies.yaml --- conda/environments/all_cuda-129_arch-aarch64.yaml | 5 +++-- conda/environments/all_cuda-129_arch-x86_64.yaml | 5 +++-- conda/environments/all_cuda-132_arch-aarch64.yaml | 5 +++-- conda/environments/all_cuda-132_arch-x86_64.yaml | 5 +++-- dependencies.yaml | 1 + 5 files changed, 13 insertions(+), 8 deletions(-) diff --git a/conda/environments/all_cuda-129_arch-aarch64.yaml b/conda/environments/all_cuda-129_arch-aarch64.yaml index 104e7e70d1..0de60a1079 100644 --- a/conda/environments/all_cuda-129_arch-aarch64.yaml +++ b/conda/environments/all_cuda-129_arch-aarch64.yaml @@ -32,8 +32,9 @@ dependencies: - libcurand-dev - libcusolver-dev - libcusparse-dev -- libraft-headers==26.6.*,>=0.0.0a0 -- librmm==26.6.*,>=0.0.0a0 +- libnvjitlink-dev +- libraft-headers==26.4.*,>=0.0.0a0 +- librmm==26.4.*,>=0.0.0a0 - make - msgpack-numpy==0.4.8 - msgpack-python==1.1.2 diff --git a/conda/environments/all_cuda-129_arch-x86_64.yaml b/conda/environments/all_cuda-129_arch-x86_64.yaml index 06aa6121f9..5efe87b98c 100644 --- a/conda/environments/all_cuda-129_arch-x86_64.yaml +++ b/conda/environments/all_cuda-129_arch-x86_64.yaml @@ -32,8 +32,9 @@ dependencies: - libcurand-dev - libcusolver-dev - libcusparse-dev -- libraft-headers==26.6.*,>=0.0.0a0 -- librmm==26.6.*,>=0.0.0a0 +- libnvjitlink-dev +- libraft-headers==26.4.*,>=0.0.0a0 +- librmm==26.4.*,>=0.0.0a0 - make - msgpack-numpy==0.4.8 - msgpack-python==1.1.2 diff --git a/conda/environments/all_cuda-132_arch-aarch64.yaml b/conda/environments/all_cuda-132_arch-aarch64.yaml index cdc8ddac93..b4fa108816 100644 --- a/conda/environments/all_cuda-132_arch-aarch64.yaml +++ b/conda/environments/all_cuda-132_arch-aarch64.yaml @@ -32,8 +32,9 @@ dependencies: - libcurand-dev - libcusolver-dev - libcusparse-dev -- libraft-headers==26.6.*,>=0.0.0a0 -- librmm==26.6.*,>=0.0.0a0 +- libnvjitlink-dev +- libraft-headers==26.4.*,>=0.0.0a0 +- librmm==26.4.*,>=0.0.0a0 - make - msgpack-numpy==0.4.8 - msgpack-python==1.1.2 diff --git a/conda/environments/all_cuda-132_arch-x86_64.yaml b/conda/environments/all_cuda-132_arch-x86_64.yaml index a86c24e55b..6fe46969c2 100644 --- a/conda/environments/all_cuda-132_arch-x86_64.yaml +++ b/conda/environments/all_cuda-132_arch-x86_64.yaml @@ -32,8 +32,9 @@ dependencies: - libcurand-dev - libcusolver-dev - libcusparse-dev -- libraft-headers==26.6.*,>=0.0.0a0 -- librmm==26.6.*,>=0.0.0a0 +- libnvjitlink-dev +- libraft-headers==26.4.*,>=0.0.0a0 +- librmm==26.4.*,>=0.0.0a0 - make - msgpack-numpy==0.4.8 - msgpack-python==1.1.2 diff --git a/dependencies.yaml b/dependencies.yaml index 6e9dbcc47b..1b5d32bab3 100644 --- a/dependencies.yaml +++ b/dependencies.yaml @@ -678,6 +678,7 @@ dependencies: - libcusolver-dev - libcusparse-dev - cuda-nvtx-dev + - libnvjitlink-dev cuda_wheels: From 5d3cfe5f67413ff77d56d0c20adc86d67bbdf5ca Mon Sep 17 00:00:00 2001 From: Bulle Mostovoi Date: Mon, 23 Mar 2026 14:19:49 +0100 Subject: [PATCH 7/7] added comments and removed a useless set_stream --- cpp/src/pdlp/cusparse_view.cu | 5 +---- cpp/src/pdlp/cusparse_view.hpp | 7 ++++--- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/cpp/src/pdlp/cusparse_view.cu b/cpp/src/pdlp/cusparse_view.cu index e153552aed..afdd78d8c2 100644 --- a/cpp/src/pdlp/cusparse_view.cu +++ b/cpp/src/pdlp/cusparse_view.cu @@ -1040,9 +1040,6 @@ cusparse_view_t::cusparse_view_t( template void cusparse_view_t::create_spmv_op_plans(bool is_reflected) { - RAFT_CUSPARSE_TRY( - cusparseSetStream(handle_ptr_->get_cusparse_handle(), handle_ptr_->get_stream())); - // Prepare buffers for At_y SpMVOp size_t buffer_size_transpose = 0; RAFT_CUSPARSE_TRY(cusparseSpMVOp_bufferSize(handle_ptr_->get_cusparse_handle(), @@ -1073,7 +1070,7 @@ void cusparse_view_t::create_spmv_op_plans(bool is_reflected) lto_buffer, lto_buffer_size)); - // Only prepare buffers for A_x if using reflected_halpern + // Only prepare buffers for A_x if we are using reflected_halpern if (is_reflected) { size_t buffer_size_non_transpose = 0; RAFT_CUSPARSE_TRY(cusparseSpMVOp_bufferSize(handle_ptr_->get_cusparse_handle(), diff --git a/cpp/src/pdlp/cusparse_view.hpp b/cpp/src/pdlp/cusparse_view.hpp index 9cf3bf5dc8..5843152689 100644 --- a/cpp/src/pdlp/cusparse_view.hpp +++ b/cpp/src/pdlp/cusparse_view.hpp @@ -120,8 +120,6 @@ class cusparse_view_t { const rmm::device_uvector&, // Empty just to init the const& const std::vector&); // Empty just to init the const& - void create_spmv_op_plans(bool is_reflected); - const bool batch_mode_{false}; raft::handle_t const* handle_ptr_{nullptr}; @@ -176,7 +174,7 @@ class cusparse_view_t { rmm::device_uvector buffer_non_transpose_spmvop; rmm::device_uvector buffer_transpose_spmvop; - // here for tests of compilation + // SpMVOp descriptors and plans for A and A_T cusparseSpMVOpDescr_t spmv_op_descr_A_; cusparseSpMVOpDescr_t spmv_op_descr_A_t_; cusparseSpMVOpPlan_t spmv_op_plan_A_; @@ -219,6 +217,9 @@ class cusparse_view_t { // Update FP32 matrix copies after scaling (must be called after scale_problem()) void update_mixed_precision_matrices(); + + // Creates SpMVOp plans. Must be called after scale_problem() so plans use the scaled matrix. + void create_spmv_op_plans(bool is_reflected); }; // Mixed precision SpMV: FP32 matrix with FP64 vectors and FP64 compute type