-
Notifications
You must be signed in to change notification settings - Fork 68
Add support for solver cuPDLPx #516
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
fneum
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks pretty good!
The higher tolerances in this PR largely apply to all solvers. It could be an option to introduce a constant that sets the tolerance based on whether it's a GPU or CPU-based solver.
…for CPU and GPU solver precisions
|
Great point :) I've just added global variables to the tests that set the acceptable relative solution tolerances for CPU and GPU based solvers. |
- Add warning when explicit_coordinate_names is set (unsupported) - Add warning when log_fn is provided (unsupported) - Fix typo in comment (cuDPLPx -> cuPDLPx) - Use pytest.skip() for clearer MIP test reporting - Guard feasible_mip_solvers.remove() when cupdlpx unavailable
|
@mal84emma wonderful, I hope you don't mind me pushing a final small commit for fixing minor stuff |
|
@FabianHofmann Fix looks great, very happy with it, thanks for catching! |
|
@mal84emma could you do me two favors?
|
|
@FabianHofmann absolutely, delighted to!
|
|
FWIW cuOpt has already implemented the core concepts outlined in the cupdlpx paper, and is more mature and better maintained as a library. Similarly, HiGHS has also committed to releasing a built in GPU-enabled PDLP solver in the coming months (and the implementation is well under way) which will also implement core concepts from the cupdlpx paper. For HiGHS it goes without saying that from a CI perspective, nothing would need to change. cuOpt still suffers from the problem of needing a compatible GPU at runtime, though. They are aware of this being an issue and seem open to having tests for modelling languages in their own repo, see NVIDIA/cuopt#155 |
|
cuOpt is a great shout, I hadn't realised they'd implemented the cuPDLPx improvements already. I think there's a lot of cool developments on the horizon for GPU accelerated LP (e.g. GPU IPMs), and it'd be awesome to have the new solver options available as they come out. |
cuOpt also has recently released a GPU barrier solver. I haven't done any benchmarking with it myself. |
Changes proposed in this Pull Request
Add support for GPU-accelerated solver cuPDLPx
Note: due to the lower numerical precision of this solver, some of the equality assertions in the tests have been replaced with
np.iscloseAlso note: this solver does not support QP or MIP, and currently the file IO is not available through the Python API (will add when later versions support it)
Checklist
doc.doc/release_notes.rstof the upcoming release is included.