• Quantum ESPRESSO在Linux下的安裝方法

    Quantum ESPRESSO在Linux中的安裝方法

    文/Sobereva@北京科音

    First release: 2020-Jul-10  Last update: 2020-Jul-23


    1 前言

    Quantum ESPRESSO (QE)是用戶非常多、極為流行的第一性原理程序,而且完全開源免費。本文介紹一下QE在Linux下的安裝過程。本文對于CentOS 7.x系列系統下安裝QE 6.5是完全適合的,對于其它QE版本或其它Linux系統請自行嘗試、隨機應變。本文使用root賬戶,對于普通用戶請安裝到自己有讀寫權限的目錄。本文基于OpenMPI庫+MKL庫+gfortran/gcc編譯器進行編譯。編譯的是純CPU版本,不支持GPU加速(GPU加速還需要有PGI Fortran編譯器)。如果機子里還沒裝gcc和gfortran,應先用yum install gcc命令進行安裝。

    關于編譯的更多細節可以看QE的手冊https://www.quantum-espresso.org/Doc/user_guide/node10.html

    在CentOS下使用yum也可以不通過編譯來安裝,但有一些弊端,見此文第6節。


    2 安裝OpenMPI

    為了讓QE能基于MPI并行計算,需要先裝MPI庫,一般就用OpenMPI。筆者用的是OpenMPI 4.0.3,經測試與QE 6.5完全兼容。

    https://www.open-mpi.org下載最新的OpenMPI包,解壓后進入此目錄,運行以下命令將之編譯并安裝到指定目錄下。這里筆者安裝到了/sob/openmpi目錄下。
    ./configure --prefix=/sob/openmpi
    make all install

    在~/.bashrc文件中加入以下內容
    export PATH=$PATH:/sob/openmpi/bin
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/sob/openmpi/lib

    然后重新打開終端,以上設置就生效了。可以運行mpiexec -V,如果正常顯示出了OpenMPI的版本,說明已經裝好了。之后可以刪掉OpenMPI壓縮包和解壓出的目錄。

    注:如果機子里之前還有其它MPI庫,應當運行which mpiexec來看看是否確實指向的是新裝的OpenMPI,如果指向的是其它的,則并行運行可能失敗。比如如果你之前在機子里裝過Intel編譯器的時候順帶裝了Intel MPI,則應當在編譯QE以及運行QE前將~/.bashrc里的相應配置語句注釋掉后重新進入終端,免得被利用的是Intel MPI而非新裝的OpenMPI。


    3 安裝MKL庫

    為了讓QE能利用效率很高的MKL數學庫來提升計算速度,應當在編譯QE前先把MKL裝上。MKL庫目前是免費的,CentOS下可以運行以下兩行命令安裝。期間會下載幾百兆的文件,文件會被安裝到/opt/intel目錄下,占3GB多(對于2020-Jul-10時下載的版本而言)。如果你之前機子里裝過Intel編譯器,且在裝的時候已經選擇裝了MKL,就不需要再這么裝一遍了。

    添加intel的源:
    yum-config-manager --add-repo https://yum.repos.intel.com/mkl/setup/intel-mkl.repo

    下載并安裝MKL:
    yum install -y intel-mkl


    4 編譯QE

    https://github.com/QEF/q-e/releases下載QE最新版源代碼包,比如qe-6.5-ReleasePack.tgz。

    解壓并進入其中,運行以下命令。這里-enable-openmp使得QE也可以利用OpenMP來并行,如果不打算以OpenMP并行的話就不寫這個。
    ./configure --prefix=/sob/qe65 -enable-openmp
    make all install -j
    四核機子上經過幾分鐘編譯完畢,可執行文件都被裝到了/sob/qe65/bin目錄下。解壓出的目錄和壓縮包此時雖然可以刪掉,但我建議還是留著解壓出的目錄,里面有些文件以后還用得著。

    注:QE在編譯過程默認調用gfortran、gcc和mpif90。如果想改默認的編譯器,應對QE目錄下的make.inc文件里的編譯器設置進行修改,而且在之前編譯OpenMPI的時候也用相應的編譯器。

    在~/.bashrc文件中加入以下內容(如果你用的不是root的話,前兩行不用加)
    export OMPI_ALLOW_RUN_AS_ROOT=1
    export OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1
    export PATH=$PATH:/sob/qe65/bin
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/intel/compilers_and_libraries_2020.2.254/linux/mkl/lib/intel64_lin
    這里往LD_LIBRARY_PATH環境變量添加的Intel MKL庫的目錄名應當與你當前機子里的實際路徑一致。

    之后重新進入終端,QE的可執行文件就可以在任意目錄下直接運行了。

    以上述方式編譯出來的QE沒有包含EPW、PLUMED、Wannier90、WanT、YAMBO、GIPAW程序,如果需要編譯的話,看官網上User's Guide for Quantum ESPRESSO文檔的2.5節。


    5 測試QE

    下面對QE最關鍵的PWscf模塊做簡單測試。下載http://www.shanxitv.org/attach/562/diamond.zip并解壓,此任務是對金剛石做SCF計算。

    QE是MPI和OpenMP混合方式并行的程序,實際并行核數是MPI進程數與每個下屬的OpenMP線程數的乘積。

    先測試純MPI并行方式運行。進入diamond目錄后,運行以下命令,使用4個MPI進程計算,每個MPI進程下屬只有一個線程。
    export OMP_NUM_THREADS=1
    mpirun -n 4 pw.x < pwscf.in |tee pwscf.out
    如果任務能正常完成,末尾顯示JOB DONE,就說明已經裝好了。注:如果不設置OMP_NUM_THREADS環境變量的話,機子有多少核,OpenMP就會用多少個線程。

    然后再測試純OpenMP并行方式運行。運行以下命令,將使用一個MPI進程下屬4個OpenMP線程進行計算
    export OMP_NUM_THREADS=4
    pw.x < pwscf.in |tee pwscf.out

    也可以使用QE自帶的測試集進行測試。做法是進入QE解壓后的目錄的test-suite子目錄,在里面運行make run-tests-parallel命令,就會在并行運算下對所有任務進行測試,每一項對應的含義見此目錄下的README。如果只想測試比如PWscf模塊,則運行make run-tests-pw-parallel。


    6 在CentOS下使用yum安裝QE

    下面文字適用于CentOS,使用root的情況。會安裝基于OpenMPI并行但不支持OpenMP并行的QE 6.5版。至少對于對于CentOS 7.7和8.0而言,被安裝的是QE 6.5版。Ubuntu下也可以用apt-get裝,本文就不提了。

    運行以下命令:
    yum install epel-release
    yum install quantum-espresso-openmpi
    期間會自動安裝OpenMPI、OpenBLAS、ScaLapack等包。如果你是用yum install quantum-espresso,則安裝的是只能串行計算的版本,沒實際價值。

    之后在~/.bashrc文件里加入以下內容:
    export PATH=$PATH:/usr/lib64/openmpi/bin/
    如果你用的是root的話同時加入
    export OMPI_ALLOW_RUN_AS_ROOT=1
    export OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1
    之后重新進入終端即可使用。

    QE的文件被安裝到了/usr/lib64/openmpi/bin/目錄下,可執行文件都帶著_openmpi后綴。比如可以運行mpirun -n 4 pw.x_openmpi < pwscf.in。

    對于計算密集型程序,像QE這種編譯不麻煩的話,我鼓勵自行編譯,因為yum裝的CentOS軟件源里的預編譯版為了兼容性、減少庫的依賴,在一些地方可能會打一些折扣,比如沒用MKL(對QE提供高質量的BLAS、ScaLapack和FFT)、用的編譯選項比較保守,故性能可能遜于自己編譯的。而且自己編譯的話可以自定義文件產生的位置,雖然yum也可以用--installroot=...選項指定安裝在哪,但是有些程序可能不能運行。

    另外,QE的文檔信息很零散,比如支持的泛函完整列表甚至還得去看源代碼包里的func.f90里的注釋等等,所以最好有源代碼包。之前若自己用源代碼包編譯過之后還可以直接用make epw、make w90、make gipaw等命令編譯安裝與QE有關的程序。

    久久精品国产99久久香蕉