davidsd / sdpb

A semidefinite program solver for the conformal bootstrap.
MIT License
53 stars 42 forks source link

Latest docker release doesn't work on Macbook M1 #222

Closed soggyomelette closed 5 months ago

soggyomelette commented 6 months ago

The latest docker release gives the following error on Macbook M1 after running

docker run -v $PWD:/usr/local/share/sdpb bootstrapcollaboration/sdpb:master mpirun --allow-run-as-root sdpb --precision=776 --verbosity 2 -s /usr/local/share/sdpb/sdp

WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested Warning: --procGranularity option is obsolete. Setting it to anything larger than 1 will make the solution take longer. This option should not be used except for testing purposes. 2024-Apr-05 12:44:01 Start SDPB SDPB version: 2.7.0-95-g24f01173 MPI processes: 8, nodes: 1 SDP directory : "/usr/local/share/sdpb/sdp" out directory : "/usr/local/share/sdpb/sdp_out"

Parameters: maxIterations = 500 maxRuntime = 9223372036854775807 checkpointInterval = 3600 maxSharedMemory = 17179869184.0 GB (18446744073709551615 bytes) findPrimalFeasible = false findDualFeasible = false detectPrimalFeasibleJump = false detectDualFeasibleJump = false precision(actual) = 776(832) dualityGapThreshold = 1e-30 primalErrorThreshold = 1e-30 dualErrorThreshold = 1e-30 initialMatrixScalePrimal = 1e+20 initialMatrixScaleDual = 1e+20 feasibleCenteringParameter = 0.1 infeasibleCenteringParameter = 0.3 stepLengthReduction = 0.7 maxComplementarity = 1e+100 initialCheckpointDir = "/usr/local/share/sdpb/sdp.ck" checkpointDir = "/usr/local/share/sdpb/sdp.ck" noFinalCheckpoint = false writeSolution = x,y procGranularity = 1 verbosity = 2


Primary job terminated normally, but 1 process returned a non-zero exit code. Per user-direction, the job has been aborted.


mpirun noticed that process rank 1 with PID 0 on node aacbe7e7a17d exited on signal 4 (Illegal instruction).

However, release 2.7.0 works as expected despite the warning

vasdommes commented 6 months ago

Indeed, all Docker images are built on amd64 platform. It is interesting that for 2.7.0 the code compiled on amd64 works also on arm64.

Seems that either FLINT (new dependency added in master branch) and/or OpenBLAS binary code (another dependency added) is incompatible between architectures.

To fix this issue, we should build multi-platform Docker images for SDPB (and its dependencies, elemental and flint images) on CircleCI, as described here: https://docs.docker.com/build/building/multi-platform https://circleci.com/blog/building-docker-images-for-multiple-os-architectures/

vasdommes commented 6 months ago

Current workarounds:

  1. Use old image bootstrapcollaboration/sdpb:2.7.0
  2. Build SDPB from sources as described in docs/site_installs/Apple_MacBook.md
vasdommes commented 5 months ago

Hi @soggyomelette, I've updated sdpb:master image, could you please confirm that it works for you? (unfortunately I don't have a MacBook to check that by myself)

soggyomelette commented 5 months ago

Hi @vasdommes, can confirm it works now, thanks for the fix!