Skip to content

Conversation

@rgsl888prabhu
Copy link
Collaborator

@rgsl888prabhu rgsl888prabhu commented Aug 4, 2025

Description

For #246

Checklist

  • I am familiar with the Contributing Guidelines.
  • Testing
    • New or existing tests cover these changes
    • Added tests
    • Created an issue to follow-up
    • NA
  • Documentation
    • The documentation is up to date with these changes
    • Added new documentation
    • NA

rgsl888prabhu and others added 11 commits July 28, 2025 22:17
This PR removes CUDA 11 pertaining changes since we have moved to CUDA 12 support only

## Issue
closes NVIDIA#220

Authors:
  - Ramakrishnap (https://github.com/rgsl888prabhu)

Approvers:
  - Kyle Edwards (https://github.com/KyleFromNVIDIA)
  - Trevor McKay (https://github.com/tmckayus)
  - Ishika Roy (https://github.com/Iroy30)
  - Nicolas Blin (https://github.com/Kh4ster)
  - Akif ÇÖRDÜK (https://github.com/akifcorduk)
  - Bradley Dice (https://github.com/bdice)

URL: NVIDIA#222
)

Adds changes to the top level cmake_lists.txt to enable cpack creation of .deb files. In order to create the runtime and develop .deb files you will need to:
1) Build cuOpt
2) Navigate to cpp/build
3) run  cpack -G DEB

This creates two .deb files for the architecture of the machine that cuOpt is built on. 
For example: `cuOpt_25.08.0_amd64-Development.deb` and `cuOpt_25.08.0_amd64-Runtime.deb`

The runtime deb package contains the cuopt CLI, the mps reader.so and the cuopt.so.
The cuopt_CLI is installed in the `/usr/local/bin` directory
The .so files are installed in the `/usr/local/lib` directory

The development deb package contains the mps reader.so, the cuopt.so and the header files for the project all of which are installed in `/usr/local/lib` in a standard fashion. 

The headers are in `/usr/local/lib/cuopt`

Note: There are items in the deb package creation that I took the liberty to fill, some of them may need changes. 
Specifically these two lines:
`set(CPACK_DEBIAN_DEV_PACKAGE_MAINTAINER "NVIDIA")`
`set(CPACK_DEBIAN_RUNTIME_PACKAGE_MAINTAINER "NVIDIA")`
I assumed that is how you'd like the maintainer referenced.

Additionally the deb packages do not correctly reference their dependencies yet, i'm happy to follow up with that work if this looks likely to be merged.

## Issue
NVIDIA#189

Authors:
  - Mark Ostroot (https://github.com/mostroot)
  - Ramakrishnap (https://github.com/rgsl888prabhu)

Approvers:
  - Trevor McKay (https://github.com/tmckayus)

URL: NVIDIA#190
The service API is not aligned completely with the SDK API from 25.05 in relation to solver configs. This change brings them into alignment with deprecation notices and backward compatibility

Authors:
  - Trevor McKay (https://github.com/tmckayus)
  - Ramakrishnap (https://github.com/rgsl888prabhu)

Approvers:
  - Gil Forsyth (https://github.com/gforsyth)
  - Ramakrishnap (https://github.com/rgsl888prabhu)

URL: NVIDIA#227
Raft defines `RAFT_CHECK_CUDA` depending on if we run in release/Debug mode https://github.com/rapidsai/raft/blob/branch-25.06/cpp/include/raft/util/cuda_rt_essentials.hpp#L78-L82.
In cuopt we have a special mode "assert" that undefines `NDEBUG` to run with optimizations but still enable runtime checks. https://github.com/rapidsai/raft/blob/branch-25.06/cpp/include/raft/util/cuda_rt_essentials.hpp#L78-L82

The first version of `RAFT_CHECK_CUDA` uses the stream argument therefore in debug mode and assert mode we should catch that error. However unsetting `NDEBUG` in our header results in `NDEBUG` being undefined in cuopt but still defined for our dependencies. So we were calling the wrong implementation of `RAFT_CUDA_CHECK`. To undefine `NDEBUG` in both cuopt and our dependencies we have to do it through cmake.
This catches the compile error.

Closes: NVIDIA#247

Authors:
  - Hugo Linsenmaier (https://github.com/hlinsen)
  - Alice Boucher (https://github.com/aliceb-nv)

Approvers:
  - Ramakrishnap (https://github.com/rgsl888prabhu)
  - Alice Boucher (https://github.com/aliceb-nv)

URL: NVIDIA#248
…IA#235)

The MIP codepath assumes the current problem possesses a non-zero number of integer variables.
This is normally never the case as LP problems are directed to the LP codepath, however some trivial MIP instances lose their integer variables after presolve.

In those cases the problem is solved at the root relaxation, this PR simply fixes assertions and checks to ensure such instances don't trigger failures on the MIP heuristics side.

Also fixes an issue where initial solutions were scaled regardless of the mip scaling setting

Fixes NVIDIA#233

Authors:
  - Alice Boucher (https://github.com/aliceb-nv)
  - Robert Maynard (https://github.com/robertmaynard)
  - Scott Brenner (https://github.com/ScottBrenner)
  - Ramakrishnap (https://github.com/rgsl888prabhu)

Approvers:
  - Hugo Linsenmaier (https://github.com/hlinsen)

URL: NVIDIA#235
This is a simple smoketest to look for breakage and any abnormal behavior with respect to runtime from cuopt Python API changes. It does not do any exhaustive performance testing or building.

depends on NVIDIA#235

Authors:
  - Trevor McKay (https://github.com/tmckayus)
  - James Lamb (https://github.com/jameslamb)
  - Ramakrishnap (https://github.com/rgsl888prabhu)

Approvers:
  - James Lamb (https://github.com/jameslamb)

URL: NVIDIA#199
This PR removes cuda graph capture from load balanced bounds strengthening to address crashes encountered in the constructor. The cuda graph is instead created manually. Fixes NVIDIA#219

Authors:
  - Kumar Aatish (https://github.com/kaatish)

Approvers:
  - Ramakrishnap (https://github.com/rgsl888prabhu)
  - Hugo Linsenmaier (https://github.com/hlinsen)

URL: NVIDIA#242
…updates, primal infeasible list (NVIDIA#192)

This PR contains multiple performance improvements to the dual simplex code including:

* O(N^2) -> O(N) bound-flipping ratio test
* Exploiting hypersparsity (sparse factors plus sparse right-hand side) throughout the solver,
* New middle-product form basis update (replaces Forrest-Tomlin since it currently handles hypersparsity better)
* Maintaining and update a list of primal infeasibilites


New or existing test cover these changes. No changes in documentation are necessary.

Authors:
  - Chris Maes (https://github.com/chris-maes)
  - Ramakrishnap (https://github.com/rgsl888prabhu)

Approvers:
  - Kyle Edwards (https://github.com/KyleFromNVIDIA)
  - Ramakrishnap (https://github.com/rgsl888prabhu)
  - Alice Boucher (https://github.com/aliceb-nv)

URL: NVIDIA#192
…date. (NVIDIA#249)

This PR includes two fixes:

* Basis repair was failing due to a bug in the right-looking LU where the column permutation was not fully populated when the basis was rank deficient. 

* When computing delta x using a hypersparse solve the solution vector sometimes did not contain a nonzero coefficient associated with the basic leaving index. This was an issue, as we divide by that coefficient to compute the primal step length.  This coefficient may have been missing due to the numerical drop tolerances. To recover from this we perform a regular solve. If the coefficient is small, but nonzero, we can recover. 

In addition this PR adds the option to use threshold rook pivoting inside the right-looking LU factorization. TRP is rank-revealing. However, it produces factors L and U with more fill and is thus about 3% slower. We add TRP in this PR, but keep it disabled behind a flag. A future PR may want to use TRP when basis repair fails. 

New or existing tests cover these changes. The documentation is not affected.

Authors:
  - Chris Maes (https://github.com/chris-maes)

Approvers:
  - Akif ÇÖRDÜK (https://github.com/akifcorduk)

URL: NVIDIA#249
@rgsl888prabhu rgsl888prabhu requested review from a team as code owners August 4, 2025 18:46
@rgsl888prabhu rgsl888prabhu changed the base branch from branch-25.08 to branch-25.10 August 4, 2025 18:46
@rgsl888prabhu rgsl888prabhu requested a review from a team as a code owner August 4, 2025 18:46
@rgsl888prabhu rgsl888prabhu requested review from akifcorduk and aliceb-nv and removed request for a team August 4, 2025 18:46
@rgsl888prabhu rgsl888prabhu added non-breaking Introduces a non-breaking change improvement Improves an existing functionality labels Aug 4, 2025
@copy-pr-bot
Copy link

copy-pr-bot bot commented Aug 4, 2025

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

@rgsl888prabhu
Copy link
Collaborator Author

/ok to test 27f0007

@AyodeAwe
Copy link
Collaborator

AyodeAwe commented Aug 4, 2025

/nosquash merge

@rgsl888prabhu
Copy link
Collaborator Author

/ok to test 0cfe551

@rgsl888prabhu
Copy link
Collaborator Author

/ok to test e0c362b

@rgsl888prabhu
Copy link
Collaborator Author

/ok to test edb159c

@AyodeAwe
Copy link
Collaborator

AyodeAwe commented Aug 5, 2025

/merge nosquash

@rgsl888prabhu rgsl888prabhu merged commit 68ae3a0 into NVIDIA:branch-25.10 Aug 5, 2025
73 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

improvement Improves an existing functionality non-breaking Introduces a non-breaking change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants