QE6.5_to_Fedora32 の変更点


#author("2021-03-23T11:01:21+09:00;2020-12-07T15:56:38+09:00","default:masami","masami")
#author("2021-03-30T09:48:13+09:00;2020-12-07T15:56:38+09:00","default:masami","masami")
RIGHT:&ref(http://www.misasa.okayama-u.ac.jp/~masami/images/OUOperatingGrant.png);
*Quantum-Espresso 6.5のLinux Fedora32へのインストール(2020/07/27) [#g462dc52]
#contents
----
-Quantum-Espresso(QE)は、擬ポテンシャル(PAWも使える)と平面波を使う第一原理電子状態計算プログラムである。QE6.5をCore i5 PC (OSはFedora32 X86_64) にインストールした際のメモ。
-インストールしたPCはi5 8500 (6 core)、メモリは8 GB、M.2のSSD 256 GBの構成で、パソコン工房で昨年買った。本当はAR sandbox用に買ったが、グラフィックスボードとの相性が悪いので、計算用に使うようにした。計算目的でなかったので、メモリ、SSDがちょっと小さい。コンパイラとしてはgcc, gfortranで、ライブラリーはIntelのMKLを使う。
-(20200814)その後、i9, Theadripper PCにもインストールしたが、特に問題なかった。ただ、これらはクリーンインストールではなかったので、クリーンインストールでは起きるであろう問題に対応してなかったので、その分を追加した。
**Fedora32へのアップデート [#g455ee37]
-既にFedora31をインストールしているので、ソフトウエアのアップデートでOSを更新することができる。Fedora32自体へのアップデートも適用しておく。この辺りはGUI(ActivitiesのSoftware)で全てできる。以下>はterminalのプロンプト。
**gccのインストール [#qcaa4b0c]
-まずはgccのインストールをする。https://gcc.gnu.org/からダウンロード。10.2が最新だった。解凍する。色々と足りないのですぐにconfigureはできないので、まず必要なものをインストールする。これには以下のコマンドを実行すればよい。
 > ./contrib/download_prerequisites
これで不足分のソフトをインストールしてくれるが、クリーンインストールの場合は、cppがない事によるエラーがmakeで出るので、make前に以下を実施する。
 > sudo dnf install gcc-c++
クリーンインストールの場合、そもそもmakeがないはずなので、makeも以下でインストール。
 > sudo dnf install make
 > ./configure --disable-multilib
とする。OSが64bit用なので、--disable-multilibをつけている。ないとエラーが生じる。これでmake, make installできる。
 > make
 > sudo make install
これでgccをインストールできた。なお、makeにはかなり時間がかかるので、1時間以上放っておく。コンパイル後は、.bashrc or .bash_profileに、PATHに/usr/local/binと/usr/bin、LD_LIBRARY_PATHに/usr/local/lib64を追加する。PATHを設定した後は、一度ターミナルをログアウトする。設定が変わらない場合は、再起動してみる。
**openmpiのインストール [#ka3c6561]
-www.open-mpi.orgからソースをダウンロード(今回最新版はver.4.0.4だった)。なおconfigure時にprefixで/usr/local/openmpiと指定した。これはインストール先の指定。
 > ./configure ―prefix=/usr/local/openmpi
 > make
 > sudo make install
コンパイル後、PATHに/usr/local/openmpi/binを、LD_LIBRARY_PATHに/usr/local/openmpi/libを追記した。これらがシステムにちゃんと認識されていないと、並列用の実行ファイルにならないので、
 > echo $PATH
 > echo $LD_LIBRARY_PATH
で設定されている内容を確認しておくこと。この状態でもQEをコンパイルすることができるが、このままでは遅いので、その前にMKLをインストールする。
**MKL(Intelのmath kernel library)のインストール [#p6f640dd]
-BLAS, LAPACK, FFTWのライブラリーはQEにも用意されているが、MKLを使った方がIntel CPUでは速くなるので、MKLをインストールする。現在、MKLは非商用だとフリーで使える。私の理解では、Linux用のifortなどはコンパイラについては、個人使用ならばフリーで使えるが、私のように大学での研究目的の場合はアカデミックライセンス(有償)を取る必要がある。一方、MKLは完全にフリーである。Intelの[[サイト:https://software.intel.com/content/www/us/en/develop/tools/math-kernel-library.html]]に行って、Linux版のMKLをダウンロードする。ダウンロードしたMKLを解凍する。MKLのインストールは、install.shで行う。MKLのディレクトリに入って、
 > ./install.sh
-aptでインストールもできるようで、Qittaに記事があった。また、ちょっと調べたら、どうも今後MKLはoneAPIの中のoneMKLとなるようだ。しかしまだベータ版だった。
-以前は/opt/intelにデフォルトでインストールされていたはずだが、今回はhome/masami/intel以下にインストールされていた(ここでmasamiはユーザー名で変えて下さい。以下同様)。
-fftwについてはなぜか別途コンパイルする必要があるようなので、次にMKLのfftw3をコンパイル。/home/masami/intel/mkl/interfaces/fftw3xf/にソースがあるので、ここでmakeする。64bit版の場合は、
 > make libintel64 compiler=gnu
でいいようだ。できたlibfftw3xf_gnu.aを/home/masami/intel/mkl/lib/intel64/に移す。これでMKLを使ったQEのインストールができるようになった。LD_LIBRARY_PATHに/home/masami/intel/mkl/lib/intel64を追加した。
**QEのインストールの前にすること [#d5f03669]
-gcc10.2では型を厳密に調べるようになったせいで、このままQEをコンパイルすると、以前は出なかった型のエラーで止ってしまった。これを回避するには以下のフラグを設定する必要がある。これはStackoverflowやgithubのFortranフォーラムで既に指摘されている。なので、以下の2つをインストール前に実行しておく。たぶんQE側でも今後対応されると思う。
 > export FCFLAGS="-w -fallow-argument-mismatch -O2"
 > export FFLAGS="-w -fallow-argument-mismatch -O2"
**QE-6.5のインストール [#j908fbce]
-ソースはhttps://github.com/QEF/q-e/releasesからダウンロードできる。最新は6.5。この版ではrVV10, vdW-DFで予めテーブルを作っておく必要がなくなったそうだ。
-私はtar.gz版をホームディレクトリー(/home/masami)にダウンロードした。tar xzfでアーカイブを展開する。QEのディレクトリに移動して、まず何も指定せずにconfigureしてみる。
 > ./configure
出力の最後の方を見て、ライブラリーなどにMKLが正しく指定されているかをチェック。今回もBLASはMKLが自動で選ばれていたが、LAPACKとFFTには指定がなかった。このままmake allすると、LAPACK, FFTについてはデフォルトの遅いライブラリーがリンクされてしまう。仕方ないので直接
 > ./configure LAPACK_LIBS="/home/masami/intel/mkl/lib/intel64/libmkl_lapack95_lp64.a"
 続き 
 FFT_LIBS="/home/masami/intel/mkl/lib/intel64/libfftw3xf_gnu.a"
とライブラリーを指定してやる。これはmake.incの対応するところに書き込んでもよい。そしてmake allした。
-私の場合はここで、includeのパスがおかしいwarningが出ていて、その後エラーで止まった。そのため、make.incの中を見て、IFLAGSで、mklのパスが/opt/以下になっているのを実際に合わせて変更した(私の場合は/home/masami/intel/mkl/include)。またqe6.5の存在するパスでも/が2つ重なることでwarningが出ているのが見られたので、TOPDIRのところのコメントアウトを外して、directoryを正しくこちらで設定。それで再度make allして、先ほどのwarningが消え(まだ出るものも残るがシリアスではない)、エラー出ることなくコンパイルができた。
-なお、この辺りで色々とトラブった場合には、一度make cleanをして、configureから再開する(make.incも再編集)。また私が混乱したのは、warningでFoXというdirectoryが出てくるのだが、調べるとそのようなdirectoryがあったり、なかったりした。これはFoXというdirectoryは解凍直後にはなくて、インストール途中で作成されるからだった。
-私の場合は、型の問題のエラーもあったので、途中色々と調べたり、試行錯誤が必要だったが、最初から2つのフラグを設定しておけばスムーズにインストールできるはず。色々問題があって、make途中で止まったなどでスタックした場合は、make cleanを実行してみる。
-最後に最近使ったpentadiamondの入力ファイルを使って、6 coreを使ったvc-relax計算をしてみた。15分くらいで最適化された(これは空間群を使っている。使ってないともっと時間がかかる)。topまたはpsで見ると確かに6 core全部使われていることが確認できる。計算の進捗状況を見るには、tail -f hoge.outで出力ファイルを逐次表示させる。
-確かに入力ファイルにrVV10を指定するだけで計算ができた。以前のバージョンでは事前にTableを作る必要があった。
**QE-GIPAW 6.5のインストール(20200729追加) [#eb022f04]
-ソースはhttps://github.com/dceresoli/qe-gipawからダウンロードできる。最新は6.5で、QE本体と同じ版を使う。QEのディレクトリにソースをコピーして、解凍する。qe-gipaw-6.5内のディレクトリに移動する。READMEにconfigureの仕方が書いてある。それによると、QE自体をコンパイルした時の情報(ライブラリーとか)を必要とするので、QEのディレクトリ内にqe-gipaw-6.5をコピーした場合は、以下のように..(1つ上のディレクトリ)を指定すればよいだけ。
 >  ./configure --with-qe-source=..
他の場所にある場合は、最後の部分を変更する。これでエラーが出なければ、qe-gipaw-6.5のディレクトリでmakeとタイプするとgipaw.xができる。これのエイリアスまたは本体を1つ上のqe-6.5本体のbinに移動しておく。なお本体(binary)はsrcディレクトリ内にある。
-なおgipaw計算ではPAWポテンシャルを使う必要がある(実際にはpw.xの時にPAWポテンシャルを指定する)。
-最近のバージョンでは、GIPAWをQEのディレクトリに入れておくと、make allの時に同時にコンパイルしてくれるようだ。ただ、GIPAW自体は別途ダウンロードするところは上記の通り。
*追記(2021/02/18) QE-6.6 and QE-6.7.0のインストール (to Fedora33)
*追記(2021/03/18) QE-6.6 and QE-6.7.0のインストール (to Fedora33)
-上記の方法と大体のところ同じだが、make allの時にFFTLibに関係してエラーで止まってしまった。これはconfigureの時に指定したMKLのFFT_LIBSの指定と関係しているようだ。1つのエラー回避法は、configureの時にFFT_LIBSでMKLのライブラリーを指定することを止めることであり、そうするとQEのFFTライブラリーを自動的に使うことになる。これだとエラーが消えた。実行速度が気になるところだが、QE6.5の時のpw.x計算を比べたが、2~3割遅いくらいだった。色々と試したが、今のところMKLのFFTW3が使えていない。
*追記(2021/02/18) AMD CPUに関して
*追記(2021/03/18) AMD CPUに関して
-最新のユーザーガイドには、AMD CPUを使う場合のいくつかの有用な情報が載っている。次の環境変数をconfigureする前に定義しておくと、速くなるそうである。
 export MKL_DEBUG_CPU_TYPE=5
RYZEN Threadripperで試してみると、確かに2~3割速くなった。もっと前に知りたかった…
-MKLのFFTWとAMD CPUと起こる問題が次の環境変数で防げるそうである。私の場合、そもそもエラーが出るので(上記)、使っても意味がなかった。
 export MKL_CBWR=AUTO
-AMDもライブラリーを提供しているが、QEではあまりうまくいってないようだ。現状、MKLを使って、上の環境変数を設定することが推奨されている。