Solving large scale NLP problem on HPC cluster

Hello,

I’m trying to solve a maximization problem for maximizing profit in river hydroelectricity power production. The problem is non-linear and non-convex. I’m using the solution from a simplified, linear and convex, version of the problem to give a warm start to the NLP problem.

I use Ipopt with MUMPS to solve the NLP problem on a high-performance computing linux based cluster. However, I notice that the computing of the problem is not at all parallelized and hence slow.

My question is if there’s some other solver, solver option e.t.c. that I should utilize in order to take full advantage of the computing cluster?

The problem is defined using JuMP looking something like this:

model = Model()
@variables model begin
    # A bunch of variable definitions with lower and upper bounds
end

@constraints model begin 
    # A lot of linear inequality and equality constraints
    # Some non-linear equality constraints including square roots and fourth-degree polynomials.
end

@objective(model, Max, Profit)

Code defining solver:

optimizer = optimizer_with_attributes(Ipopt.Optimizer, "max_iter" => 100000, "mu_strategy" => "adaptive")
set_optimizer(model, optimizer)
set_optimizer_attributes(
        model, 
        "warm_start_init_point" => "yes",
        "warm_start_bound_push" => 1e-9,
        "warm_start_bound_frac" => 1e-9,
        "warm_start_slack_bound_frac" => 1e-9, 
        "warm_start_slack_bound_push" => 1e-9, 
        "warm_start_mult_bound_push" => 1e-9
)

Ipopt problem definition output (for a typical problem):

******************************************************************************
This program contains Ipopt, a library for large-scale nonlinear optimization.
 Ipopt is released as open source code under the Eclipse Public License (EPL).
         For more information visit https://github.com/coin-or/Ipopt
******************************************************************************

This is Ipopt version 3.14.4, running with linear solver MUMPS 5.4.1.

Number of nonzeros in equality constraint Jacobian...: 10514403
Number of nonzeros in inequality constraint Jacobian.:  9494815
Number of nonzeros in Lagrangian Hessian.............:  1625040

Total number of variables............................:  5656899
                     variables with only lower bounds:  1967617
                variables with lower and upper bounds:  3688488
                     variables with only upper bounds:      792
Total number of equality constraints.................:  2406818
Total number of inequality constraints...............:  4444383
        inequality constraints with only lower bounds:  1616119
   inequality constraints with lower and upper bounds:        0
        inequality constraints with only upper bounds:  2828264
1 Like

Hi @J-Holger, welcome to the forum :smile:

The first place to start would be to use a different linear solver: GitHub - jump-dev/Ipopt.jl: A Julia interface to the Ipopt nonlinear solver

Thank you @odow!

I’ve looked in to this and I’m currently trying out HSL-MA97 and using MKL (since the cluster runs on Intel cores).

However, while the process now uses all assigned cores it seems like Ipopt is stuck on the 0:th iteration (i.e. the warm start). My next idea is to try out the PARDISO solver and cross my fingers :smile:

1 Like

Yeah the right choice if linear solver is probably strongly dependent on the specifics of your problem and the specifics of your HPC setup. I would just try out the various HSL routines to see what works best. I don’t know if I have any strong recommendations.

2 Likes

I suppose that your initial solution is not in your feasible domain, you should help the solver by given a solution that satisfies the constraints.
For the solution, MA57, MA97 are the recommended linear solvers for large-scale problem.
With MA97, be careful to use a sequential BLAS / LAPACK with LBT to not oversubscribe your threads!

1 Like

I’m recalculating the initial solution from the LP problem so that it does become feasible. It’s not really that the number of iterations are very large but that every iteration is incredibly slow.

I have seen that note about not using sequential BLAS / LAPACK together with MA97 but I do not fully understand it. What is the correct way to set this option?