SCIP: Error: no BLAS/LAPACK library loaded!

I am getting that error repeatedly printed out when I try to solve a JuMP model with SCIP. I updated Julia to v1.10.4 yesterday using juliaup, and that error didn’t occur before the update. The error also doesn’t occur for other solvers like Juniper, MAiNGO, EAGO, and Couenne.

Error: no BLAS/LAPACK library loaded!

Here is my package status…
(@v1.10) pkg> status
Status ~/.julia/environments/v1.10/Project.toml
[07493b3f] Alpine v0.5.6
[7c4d4715] AmplNLWriter v1.2.1
[6f275bd8] BLISBLAS v0.1.1
[227a2e2d] COPT v1.1.17
[bb8be931] EAGO v0.8.1
[7a1cc6ca] FFTW v1.8.0
[87dc4568] HiGHS v1.9.0
⌅ [d1acc4aa] IntervalArithmetic v0.20.9
[b6b21f68] Ipopt v1.6.2
[4076af6c] JuMP v1.22.1
[2ddba703] Juniper v0.9.2
[19f71287] MAiNGO v0.2.2
[33e6dc65] MKL v0.6.3
⌃ [82193955] SCIP v0.11.6
[29cba6d7] Bonmin_jll v100.800.901+0
[f09e9e23] Couenne_jll v0.500.801+0
Info Packages marked with ⌃ and ⌅ have new versions available. Those with ⌃ may be upgradable, but those with ⌅ are restricted by compatibility constraints from upgrading. To see why use status --outdated

@mbesancon all yours

⌃ [82193955] SCIP v0.11.6

Have you tried updating to the latest version of SCIP? This may be already fixed.

1 Like

yes I’d also bet so, this used to be an issue with older Ipopt_jll IIRC

1 Like

I wasn’t able to update to the latest version of SCIP.

(@v1.10) pkg> update SCIP@0.11.14
    Updating registry at `~/.julia/registries/General.toml`
  No Changes to `~/.julia/environments/v1.10/Project.toml`
  No Changes to `~/.julia/environments/v1.10/Manifest.toml`

(@v1.10) pkg> status
Status `~/.julia/environments/v1.10/Project.toml`
  [07493b3f] Alpine v0.5.6
  [7c4d4715] AmplNLWriter v1.2.1
  [6f275bd8] BLISBLAS v0.1.1
  [227a2e2d] COPT v1.1.17
  [bb8be931] EAGO v0.8.1
  [7a1cc6ca] FFTW v1.8.0
  [87dc4568] HiGHS v1.9.0
⌅ [d1acc4aa] IntervalArithmetic v0.20.9
⌃ [b6b21f68] Ipopt v1.6.2
⌃ [4076af6c] JuMP v1.22.1
  [2ddba703] Juniper v0.9.2
  [19f71287] MAiNGO v0.2.2
⌃ [33e6dc65] MKL v0.6.3
⌃ [82193955] SCIP v0.11.6
  [29cba6d7] Bonmin_jll v100.800.901+0
  [f09e9e23] Couenne_jll v0.500.801+0
Info Packages marked with ⌃ and ⌅ have new versions available. Those with ⌃ may be upgradable, but those with ⌅ are restricted by compatibility constraints from upgrading. To see why use `status --outdated`

(@v1.10) pkg> status --outdated
Status `~/.julia/environments/v1.10/Project.toml`
⌅ [d1acc4aa] IntervalArithmetic v0.20.9 (<v0.22.14): EAGO, IntervalContractors, IntervalRootFinding, McCormick
⌃ [b6b21f68] Ipopt v1.6.2 (<v1.6.3)
⌃ [4076af6c] JuMP v1.22.1 (<v1.22.2)
⌃ [33e6dc65] MKL v0.6.3 (<v0.7.0)
⌃ [82193955] SCIP v0.11.6 (<v0.11.14)

pkg> update SCIP@0.11.14

The command is ] add SCIP@0.11.14.

But ] update should work? It doesn’t look like anything is holding SCIP back.

] add SCIP@0.11.14 did update SCIP succesfully and the error message seems to have gone away.

(@v1.10) pkg> add SCIP@0.11.14
   Resolving package versions...
   Installed StaticArraysCore ─── v1.4.3
   Installed Ipopt ────────────── v1.6.3
   Installed Clp_jll ──────────── v100.1700.601+0
   Installed MutableArithmetics ─ v1.4.5
   Installed JuMP ─────────────── v1.22.2
   Installed CoinUtils_jll ────── v200.1100.400+0
   Installed LogExpFunctions ──── v0.3.28
   Installed MKL ──────────────── v0.7.0
   Installed METIS_jll ────────── v5.1.1+0
   Installed Bonmin_jll ───────── v100.800.801+0
   Installed Cbc_jll ──────────── v200.1000.501+0
   Installed Cgl_jll ──────────── v0.6000.300+0
   Installed Osi_jll ──────────── v0.10800.600+0
  Downloaded artifact: Clp
  Downloaded artifact: Cbc
  Downloaded artifact: Cgl
  Downloaded artifact: Bonmin
  Downloaded artifact: Osi
  Downloaded artifact: CoinUtils
  Downloaded artifact: METIS
    Updating `~/.julia/environments/v1.10/Project.toml`
  [b6b21f68] ↑ Ipopt v1.6.2 ⇒ v1.6.3
  [4076af6c] ↑ JuMP v1.22.1 ⇒ v1.22.2
  [33e6dc65] ↑ MKL v0.6.3 ⇒ v0.7.0
  [82193955] ↑ SCIP v0.11.6 ⇒ v0.11.14
⌃ [29cba6d7] ↓ Bonmin_jll v100.800.901+0 ⇒ v100.800.801+0
    Updating `~/.julia/environments/v1.10/Manifest.toml`
  [b6b21f68] ↑ Ipopt v1.6.2 ⇒ v1.6.3
  [4076af6c] ↑ JuMP v1.22.1 ⇒ v1.22.2
  [2ab3a3ac] ↑ LogExpFunctions v0.3.27 ⇒ v0.3.28
  [33e6dc65] ↑ MKL v0.6.3 ⇒ v0.7.0
  [d8a4904e] ↑ MutableArithmetics v1.4.4 ⇒ v1.4.5
  [82193955] ↑ SCIP v0.11.6 ⇒ v0.11.14
  [1e83bf80] ↑ StaticArraysCore v1.4.2 ⇒ v1.4.3
⌃ [29cba6d7] ↓ Bonmin_jll v100.800.901+0 ⇒ v100.800.801+0
⌅ [38041ee0] ↓ Cbc_jll v200.1000.800+0 ⇒ v200.1000.501+0
⌅ [3830e938] ↓ Cgl_jll v0.6000.600+0 ⇒ v0.6000.300+0
⌅ [06985876] ↓ Clp_jll v100.1700.700+1 ⇒ v100.1700.601+0
⌅ [be027038] ↓ CoinUtils_jll v200.1100.600+0 ⇒ v200.1100.400+0
  [e33a78d0] - Hwloc_jll v2.10.0+0
⌅ [9cc047cb] ↓ Ipopt_jll v300.1400.1400+0 ⇒ v300.1400.400+0
⌅ [d00139f3] ↓ METIS_jll v5.1.2+0 ⇒ v5.1.1+0
⌅ [d7ed1dd3] ↓ MUMPS_seq_jll v500.600.201+0 ⇒ v5.4.1+0
⌅ [7da25872] ↓ Osi_jll v0.10800.700+0 ⇒ v0.10800.600+0
⌅ [fc9abe76] ↑ SCIP_PaPILO_jll v0.1.0+3 ⇒ v800.0.301+0
⌅ [e5ac4fe4] ↑ SCIP_jll v0.2.1+0 ⇒ v800.0.301+0
  [319450e9] - SPRAL_jll v2024.1.18+0
        Info Packages marked with ⌃ and ⌅ have new versions available. Those with ⌃ may be upgradable, but those with ⌅ are restricted by compatibility constraints from upgrading. To see why use `status --outdated -m`
Precompiling project...
  36 dependencies successfully precompiled in 157 seconds. 77 already precompiled.
  1 dependency had output during precompilation:
┌ McCormick
│  WARNING: method definition for mm_kernel at /home/stuart/.julia/packages/McCormick/1T0df/src/forward_operators/other.jl:681 declares type variable T but does not use it.
│  WARNING: method definition for mm_kernel at /home/stuart/.julia/packages/McCormick/1T0df/src/forward_operators/other.jl:681 declares type variable N but does not use it.
│  WARNING: method definition for gen_expansion_params! at /home/stuart/.julia/packages/McCormick/1T0df/src/implicit_routines/implicit.jl:274 declares type variable T but does not use it.
│  WARNING: method definition for gen_expansion_params! at /home/stuart/.julia/packages/McCormick/1T0df/src/implicit_routines/implicit.jl:274 declares type variable N but does not use it.
│  WARNING: method definition for implicit_relax_h! at /home/stuart/.julia/packages/McCormick/1T0df/src/implicit_routines/implicit.jl:296 declares type variable T but does not use it.
│  WARNING: method definition for implicit_relax_h! at /home/stuart/.julia/packages/McCormick/1T0df/src/implicit_routines/implicit.jl:296 declares type variable N but does not use it.
└

(@v1.10) pkg> status
Status `~/.julia/environments/v1.10/Project.toml`
  [07493b3f] Alpine v0.5.6
  [7c4d4715] AmplNLWriter v1.2.1
  [6f275bd8] BLISBLAS v0.1.1
  [227a2e2d] COPT v1.1.17
  [bb8be931] EAGO v0.8.1
  [7a1cc6ca] FFTW v1.8.0
  [87dc4568] HiGHS v1.9.0
⌅ [d1acc4aa] IntervalArithmetic v0.20.9
  [b6b21f68] Ipopt v1.6.3
  [4076af6c] JuMP v1.22.2
  [2ddba703] Juniper v0.9.2
  [19f71287] MAiNGO v0.2.2
  [33e6dc65] MKL v0.7.0
  [82193955] SCIP v0.11.14
⌃ [29cba6d7] Bonmin_jll v100.800.801+0
  [f09e9e23] Couenne_jll v0.500.801+0
Info Packages marked with ⌃ and ⌅ have new versions available. Those with ⌃ may be upgradable, but those with ⌅ are restricted by compatibility constraints from upgrading. To see why use `status --outdated`

I get an error now when I try to use SPRAL as the linear solver for IPOPT. In the previous update ] add SCIP@0.11.14, SPRAL_jll was removed. So I added the SPRAL_jll package, but that didn’t resolve the error.

Setting: "spral" is not a valid setting for Option: linear_solver. Check the option documentation.

### linear_solver (String)  ###
Category: Linear Solver
Description: Linear solver used for step computations.
Valid Settings:
        ma27 (load the Harwell routine MA27 from library at runtime)
        ma57 (load the Harwell routine MA57 from library at runtime)
        ma77 (load the Harwell routine HSL_MA77 from library at runtime)
        ma86 (load the Harwell routine MA86 from library at runtime)
        ma97 (load the Harwell routine MA97 from library at runtime)
        pardiso (load the Pardiso package from pardiso-project.org from user-provided library at runtime)
        mumps (use the Mumps package)
        custom (use custom linear solver (expert use))
Default: "mumps"
ERROR: LoadError: IPOPT: Couldn't set option 'linear_solver' to value 'spral'.
Stacktrace:
  [1] error(s::String)
    @ Base ./error.jl:35
  [2] AddIpoptStrOption(prob::Ipopt.IpoptProblem, keyword::String, value::String)
    @ Ipopt ~/.julia/packages/Ipopt/bqp63/src/C_wrapper.jl:319
  [3] optimize!(model::Ipopt.Optimizer)
    @ Ipopt ~/.julia/packages/Ipopt/bqp63/src/MOI_wrapper.jl:920
  [4] optimize!
    @ ~/.julia/packages/MathOptInterface/2CULs/src/Bridges/bridge_optimizer.jl:380 [inlined]
  [5] optimize!
    @ ~/.julia/packages/EAGO/7BNFB/src/eago_optimizer/types/incremental.jl:163 [inlined]
  [6] optimize!
    @ ~/.julia/packages/EAGO/7BNFB/src/eago_optimizer/types/incremental.jl:162 [inlined]
  [7] solve_local_nlp!(m::EAGO.GlobalOptimizer{EAGO.Incremental{COPT.Optimizer}, EAGO.Incremental{Ipopt.Optimizer}, EAGO.DefaultExt})
    @ EAGO ~/.julia/packages/EAGO/7BNFB/src/eago_optimizer/optimize/optimize_convex.jl:184
  [8] upper_problem!
    @ ~/.julia/packages/EAGO/7BNFB/src/eago_optimizer/optimize/nonconvex/upper_problem.jl:76 [inlined]
  [9] upper_problem!
    @ ~/.julia/packages/EAGO/7BNFB/src/eago_optimizer/optimize/nonconvex/upper_problem.jl:80 [inlined]
 [10] macro expansion
    @ ./timing.jl:395 [inlined]
 [11] global_solve!(m::EAGO.GlobalOptimizer{EAGO.Incremental{COPT.Optimizer}, EAGO.Incremental{Ipopt.Optimizer}, EAGO.DefaultExt})
    @ EAGO ~/.julia/packages/EAGO/7BNFB/src/eago_optimizer/optimize/optimize_nonconvex.jl:408
 [12] optimize!
    @ ~/.julia/packages/EAGO/7BNFB/src/eago_optimizer/optimize/optimize_nonconvex.jl:491 [inlined]
 [13] optimize!(m::Optimizer{EAGO.Incremental{COPT.Optimizer}, EAGO.Incremental{Ipopt.Optimizer}, EAGO.DefaultExt})
    @ EAGO ~/.julia/packages/EAGO/7BNFB/src/eago_optimizer/optimize/optimize.jl:39
 [14] optimize!
    @ ~/.julia/packages/MathOptInterface/2CULs/src/Bridges/bridge_optimizer.jl:380 [inlined]
 [15] optimize!
    @ ~/.julia/packages/MathOptInterface/2CULs/src/MathOptInterface.jl:85 [inlined]
 [16] optimize!(m::MathOptInterface.Utilities.CachingOptimizer{MathOptInterface.Bridges.LazyBridgeOptimizer{Optimizer{EAGO.Incremental{COPT.Optimizer}, EAGO.Incremental{Ipopt.Optimizer}, EAGO.DefaultExt}}, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}})
    @ MathOptInterface.Utilities ~/.julia/packages/MathOptInterface/2CULs/src/Utilities/cachingoptimizer.jl:316
 [17] optimize!(model::Model; ignore_optimize_hook::Bool, _differentiation_backend::MathOptInterface.Nonlinear.SparseReverseMode, kwargs::@Kwargs{})
    @ JuMP ~/.julia/packages/JuMP/7rBNn/src/optimizer_interface.jl:595
 [18] optimize!(model::Model)
    @ JuMP ~/.julia/packages/JuMP/7rBNn/src/optimizer_interface.jl:546
 [19] macro expansion
    @ ~/julia_code/Gen7_BPM/create_model.jl:399 [inlined]
 [20] macro expansion
    @ ./timing.jl:395 [inlined]
 [21] top-level scope
    @ ~/julia_code/Gen7_BPM/create_model.jl:397
in expression starting at /home/stuart/julia_code/Gen7_BPM/create_model.jl:395
(@v1.10) pkg> add spral_jll.jl
ERROR: The following package names could not be resolved:
 * spral_jll (not found in project, manifest or registry)
   Suggestions: SPRAL_jll SuiteSparseGraphBLAS_jll SPIRV_LLVM_Translator_jll SPIRV_LLVM_Translator_unified_jll

(@v1.10) pkg> add SPRAL_jll.jl
   Resolving package versions...
    Updating `~/.julia/environments/v1.10/Project.toml`
  [319450e9] + SPRAL_jll v2024.1.18+0
    Updating `~/.julia/environments/v1.10/Manifest.toml`
  [e33a78d0] + Hwloc_jll v2.10.0+0
  [319450e9] + SPRAL_jll v2024.1.18+0
Precompiling project...
  1 dependency successfully precompiled in 1 seconds. 116 already precompiled.

(@v1.10) pkg> status
Status `~/.julia/environments/v1.10/Project.toml`
  [07493b3f] Alpine v0.5.6
  [7c4d4715] AmplNLWriter v1.2.1
  [6f275bd8] BLISBLAS v0.1.1
  [227a2e2d] COPT v1.1.17
  [bb8be931] EAGO v0.8.1
  [7a1cc6ca] FFTW v1.8.0
  [87dc4568] HiGHS v1.9.0
⌅ [d1acc4aa] IntervalArithmetic v0.20.9
  [b6b21f68] Ipopt v1.6.3
  [4076af6c] JuMP v1.22.2
  [2ddba703] Juniper v0.9.2
  [19f71287] MAiNGO v0.2.2
  [33e6dc65] MKL v0.7.0
  [82193955] SCIP v0.11.14
⌃ [29cba6d7] Bonmin_jll v100.800.801+0
  [f09e9e23] Couenne_jll v0.500.801+0
  [17f450c3] LAPACK32_jll v3.12.0+0
  [319450e9] SPRAL_jll v2024.1.18+0
  [e47b3055] blis32_jll v1.0.0+0
Info Packages marked with ⌃ and ⌅ have new versions available. Those with ⌃ may be upgradable, but those with ⌅ are restricted by compatibility constraints from upgrading. To see why use `status --outdated`

Your version of Ipopt_jll is too old, I only compiled Ipopt with SPRAL for the lastest releases of Ipopt.
Try to upgrade Ipopt_jll.

For the BLAS / LAPACK symbols, SCIP.jl should have a function init to load the LP64 BLAS / LAPACK like we have in Ipopt.jl.

Ipopt, SPRAL, MUMPS or HSL are compiled with libblastrampoline (LBT) so we need to forward the BLAS / LAPACK routines to a backend (OpenBLAS, MKL, …).
We handle that automatically for the users (in.Ipopt.jl at least).

Ipopt_jll wasn’t listed in my package status, so I added it. However, I still have an outdated version of Ipopt_jll due to SCIP_PaPILO_jll. I still cannot use SPRAL with IPOPT.

(@v1.10) pkg> status
Status `~/.julia/environments/v1.10/Project.toml`
  [07493b3f] Alpine v0.5.6
  [7c4d4715] AmplNLWriter v1.2.1
  [6f275bd8] BLISBLAS v0.1.1
  [227a2e2d] COPT v1.1.17
  [bb8be931] EAGO v0.8.1
  [7a1cc6ca] FFTW v1.8.0
  [87dc4568] HiGHS v1.9.0
⌅ [d1acc4aa] IntervalArithmetic v0.20.9
  [b6b21f68] Ipopt v1.6.3
  [4076af6c] JuMP v1.22.2
  [2ddba703] Juniper v0.9.2
  [19f71287] MAiNGO v0.2.2
  [33e6dc65] MKL v0.7.0
  [82193955] SCIP v0.11.14
⌃ [29cba6d7] Bonmin_jll v100.800.801+0
  [f09e9e23] Couenne_jll v0.500.801+0
  [17f450c3] LAPACK32_jll v3.12.0+0
  [c1ab834c] SHOT_jll v100.100.0+0
  [319450e9] SPRAL_jll v2024.1.18+0
  [e47b3055] blis32_jll v1.0.0+0
Info Packages marked with ⌃ and ⌅ have new versions available. Those with ⌃ may be upgradable, but those with ⌅ are restricted by compatibility constraints from upgrading. To see why use `status --outdated`

(@v1.10) pkg> add Ipopt_jll.jl
   Resolving package versions...
    Updating `~/.julia/environments/v1.10/Project.toml`
⌅ [9cc047cb] + Ipopt_jll v300.1400.400+0
  No Changes to `~/.julia/environments/v1.10/Manifest.toml`

(@v1.10) pkg> status
Status `~/.julia/environments/v1.10/Project.toml`
  [07493b3f] Alpine v0.5.6
  [7c4d4715] AmplNLWriter v1.2.1
  [6f275bd8] BLISBLAS v0.1.1
  [227a2e2d] COPT v1.1.17
  [bb8be931] EAGO v0.8.1
  [7a1cc6ca] FFTW v1.8.0
  [87dc4568] HiGHS v1.9.0
⌅ [d1acc4aa] IntervalArithmetic v0.20.9
  [b6b21f68] Ipopt v1.6.3
  [4076af6c] JuMP v1.22.2
  [2ddba703] Juniper v0.9.2
  [19f71287] MAiNGO v0.2.2
  [33e6dc65] MKL v0.7.0
  [82193955] SCIP v0.11.14
⌃ [29cba6d7] Bonmin_jll v100.800.801+0
  [f09e9e23] Couenne_jll v0.500.801+0
⌅ [9cc047cb] Ipopt_jll v300.1400.400+0
  [17f450c3] LAPACK32_jll v3.12.0+0
  [c1ab834c] SHOT_jll v100.100.0+0
  [319450e9] SPRAL_jll v2024.1.18+0
  [e47b3055] blis32_jll v1.0.0+0
Info Packages marked with ⌃ and ⌅ have new versions available. Those with ⌃ may be upgradable, but those with ⌅ are restricted by compatibility constraints from upgrading. To see why use `status --outdated`

(@v1.10) pkg> status --outdated Ipopt_jll
Status `~/.julia/environments/v1.10/Project.toml`
⌅ [9cc047cb] Ipopt_jll v300.1400.400+0 (<v300.1400.1400+0): SCIP_PaPILO_jll

@mbesancon It seems related to your modifications.

Let’s keep this discussion to a single thread: Alpine Error - #5 by Stuart_Rogers

I’ll write a response over there.