LoginSignup
6
5

More than 1 year has passed since last update.

Dockerを使ってOneAPIとOpenMXのインストール

Last updated at Posted at 2021-10-16

OpenMXという第一原理計算ソフトウェアがあります。Dockerの練習も兼ねてこのコードをインストールしてみました。Dockerで使うOSはUbuntu 20.04LTSです。Intel Macで動かしてみました。Dockerについては勉強中なので、間違っていることが多いかもしれませんが、とりあえずOpenMXは動きます。
コンパイラはIntelのOneAPIを使いました。OneAPIのインストール方法については
https://zenn.dev/hishinuma_t/articles/intel-oneapi_install
の記事を参考にさせていただきました。

注意点ですが、2コア以上で落ちます。これは、
https://qiita.com/cometscome_phys/items/7e6edc85f1e40cc33620
と同じ状況です。
何が問題なのかわかる方教えていただけると助かります。

[追記]

program main
  implicit none
  include 'mpif.h'
  integer::PETOT,my_rank,ierr

  call MPI_INIT(ierr)
  write(*,*) "hello"
  call mpi_finalize()
end program

というコードをmpiifortでコンパイルしても2コアで落ちるので、下記はそもそもIntel MPIがちゃんと入っていないのかもしれません。

[さらに追記]
なんとかできる方法がわかりました。runをするところで、

docker run (中略) --shm-size=512m (後略)

みたいにする必要があるようです。あとで記事を整理します。

Dockerfile

今回使ったDockerfileを
https://github.com/cometscome/OpenMX_Docker
に置きました。ご自由にお使いください。もちろん自己責任で使用してください。動作の保証はできません。

説明

Dockerについての説明は割愛します。
まず、ディレクトリを作ります

mkdir openmx
cd openmx

このディレクトリの中に、makefile.patchという名前のファイルを作り、

--- makefile    2019-12-02 14:12:58.000000000 +0900
+++ ../../../source/makefile    2021-10-17 16:44:25.000000000 +0900
@@ -5,10 +5,14 @@
 #                                                                 #
 ###################################################################

-MKLROOT = /opt/intel/mkl
-CC = mpicc -O3 -xHOST -ip -no-prec-div -qopenmp -I/opt/intel/mkl/include/fftw
-FC = mpif90 -O3 -xHOST -ip -no-prec-div -qopenmp 
-LIB= -L${MKLROOT}/lib/intel64 -lmkl_scalapack_lp64 -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -lmkl_blacs_openmpi_lp64 -lmpi_usempif08 -lmpi_usempi_ignore_tkr -lmpi_mpifh -liomp5 -lpthread -lm -ldl
+#MKLROOT = /opt/intel/mkl
+MKLROOT = /opt/intel/oneapi/mkl/latest
+CC = mpiicc -cc=icc -O3 -xHOST -ip -no-prec-div -qopenmp -lfftw3
+#CC = mpicc -O3 -xHOST -ip -no-prec-div -qopenmp -I/opt/intel/mkl/include/fftw
+FC = mpiifort -fc=ifort -O3 -xHOST -ip -no-prec-div -qopenmp -lfftw3
+#FC = mpif90 -O3 -xHOST -ip -no-prec-div -qopenmp 
+LIB = -L${MKLROOT}/lib/intel64 -lmkl_scalapack_lp64 -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -lmkl_blacs_intelmpi_lp64 -liomp5 -lpthread -lm -ldl -lifcore -lfftw3
+#LIB= -L${MKLROOT}/lib/intel64 -lmkl_scalapack_lp64 -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -lmkl_blacs_openmpi_lp64 -lmpi_usempif08 -lmpi_usempi_ignore_tkr -lmpi_mpifh -liomp5 -lpthread -lm -ldl 

 #
 # System B (Sekirei) at ISSP, Univ. of Tokyo

というものを作成して保存してください。

次に、Dockerfileというファイル名のファイルを作成して、

FROM --platform=linux/x86_64 ubuntu:latest

RUN apt-get update
RUN apt-get install -y sudo

RUN useradd --uid 1001 --create-home --shell /bin/bash -G sudo,root openmxperson
RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
USER openmxperson

WORKDIR /home/openmxperson
ADD . /home/openmxperson

RUN sudo apt update -y; sudo apt install -y wget gnupg \
 && cd /tmp \
&& sudo wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB \
&& sudo apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB \
&& sudo rm GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB \
&& echo "deb https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list \
&& sudo apt update -y \
&& sudo apt install intel-oneapi-compiler-fortran intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic \
    intel-oneapi-mkl intel-oneapi-mpi intel-oneapi-mpi-devel -y \
&& echo "source /opt/intel/oneapi/setvars.sh" | cat >> ~/.bashrc  

RUN sudo apt install emacs gcc make patch -y \
    && sudo apt install libfftw3-3 libfftw3-dev libfftw3-doc -y \
    && sudo ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /usr/lib/x86_64-linux-gnu/libstdc++.so

RUN wget http://t-ozaki.issp.u-tokyo.ac.jp/openmx3.9.tar.gz \
    && wget http://www.openmx-square.org/bugfixed/20Feb11/patch3.9.2.tar.gz \
    && . /opt/intel/oneapi/setvars.sh \
    && tar -xvf openmx3.9.tar.gz \
    && cp ./patch3.9.2.tar.gz openmx3.9/source/ \
    && cd openmx3.9/source \
    && tar zxvf patch3.9.2.tar.gz \
    && mv kpoint.in ../work/ \
    && cp /home/openmxperson/makefile.patch . \
    && patch -u makefile < makefile.patch \
    && make all \
    && make install

ENV PATH=/home/openmxperson/openmx3.9/work/:$PATH

CMD ["bash"]

を書いてください。

これで、Dockerがインストールされていれば、

docker build --shm-size=2gb -t openmx . 

でOpenMXが入ったコンテナイメージができるはずです。IntelのOneAPIコンパイラを入れたりしているために結構時間がかかります。なお、--shm-size=2gbは重要で、これがないとrunした時に2並列以上で落ちます。
ここ
https://wiki.mpich.org/mpich/index.php/Frequently_Asked_Questions
に情報がありました。

これが終わったら、

docker run --shm-size=2gb --name oneopenmx -it openmxone /bin/bash

どのようにすれば実行できます。
Dockerについては他の記事を参照してください。

動作確認は

cd ../work
mpirun -np 1 openmx Methane.dat -nt 1 > met.std
cat met.std 

で並列数を変更するなどしてちゃんと計算が動いているかどうかを見ればわかると思います。

6
5
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5