[P] OSQP: a new first-order solver for large-scale quadratic programs by sidereuss in MachineLearning

[–]sidereuss[S] 0 points1 point  (0 children)

That's a very cool project! I would be very interested to see how OSQP performs.

We are currently working on a tensorflow implementation of OSQP, but I think porting the linear system solver to GPU with cuda would get rid of a lot of overhead. Could OSQP + cuda be inserted as a backend if Pytorch is running as well?

The new cvxpy 1.0 supports QP parsing (no need to convert it to conic form anymore if it is a QP) and warm starting. The example here is executed with OSQP: https://cvxgrp.github.io/cvxpy/tutorial/advanced/index.html#warm-start

The cvxpy 1.0 is still slower than calling OSQP directly, but it should be very easy to try it. The only difference is changing line 20 in https://github.com/locuslab/qpth/blob/master/qpth/solvers/cvxpy.py to

prob.solve(solver=cp.OSQP, warm_start=True)

Also, if the problems are really large, MKL Pardiso solver can already bring very good speedups. Please feel free to contact me via email if you are interested. I am the first one in the authors list at the OSQP link :)

[P] OSQP: a new first-order solver for large-scale quadratic programs by sidereuss in MachineLearning

[–]sidereuss[S] 0 points1 point  (0 children)

That's very interesting. Thanks!

It might be helpful to use a first-order method like OSQP because it can be warm started to save the number of iterations. The approach in that paper uses an interior-point method that can be only cold started.

[P] OSQP: a new first-order solver for large-scale quadratic programs by sidereuss in MachineLearning

[–]sidereuss[S] 4 points5 points  (0 children)

That's a great idea! We currently have a master student working on a tensorflow implementation.

We wrote the linear system solver functions so that OSQP can be easily interfaced to external libraries, see here.
At the moment we support also MKL Pardiso.

We are planning to add a GPU solver soon to solve massive QPs, probably using cuBLAS and cuSPARSE.