GROMACS的安裝方法(含全程視頻演示)
注:GROMACS通常在Linux下運行,本文只講在Linux下的編譯和安裝方法。GROMACS在Windows下也照樣可以完美編譯和運行,參見《GROMACS的原生Windows版的編譯和安裝方法》(http://www.shanxitv.org/458),里面還提供了筆者編譯好的Windows版。
GROMACS的安裝方法
文/Sobereva@北京科音
First release: 2019-Jan-2 Last update: 2022-Oct-3
本文對最流行的分子動力學GROMACS程序在Linux下的安裝方法進行詳細說明。當新出的GROMACS版本的安裝方法和本文所述出現較大差異時,本文也會做相應的更新。PS:之前筆者也寫過老版本GROMACS安裝方法,見《Gromacs 5.1.1與4.6.7編譯方法》(http://www.shanxitv.org/247)和《Gromacs 4.0.4、4.5.5版安裝方法》(http://www.shanxitv.org/29),但這倆文章對于目前版本來說已經沒有意義了。
下面介紹的是GROMACS 2018系列最后一個版本2018.8版的安裝,對GROMACS 2018及之后的各個版本經測試也完全適用。本文是針對計算化學工作者最常用的CentOS 7.6操作系統寫的,對于其它Linux系統的用戶,安裝方法可能與本文有異。本文的CentOS 7.6是按照《在VMware 15中安裝CentOS 7.6的完整過程視頻演示》(http://www.shanxitv.org/454)演示的方式完全新裝的。本文假定讀者是root用戶,程序將被安裝到/sob目錄下。如果你是普通用戶,請隨機應變,恰當設置路徑。本文所示的安裝過程中主機全程都能訪問Internet。本文編譯用的C++編譯器是操作系統自帶的gcc,雖然用Intel C++編譯器也可以,但編譯出的程序的速度沒有顯著差別。
從GROMACS 2020開始,要求gcc編譯器版本>=5,而CentOS 7.x的gcc版本是4.8.5,因此2020版沒法直接在CentOS 7.x下裝。要么升級gcc版本(有一定風險,方法自行google),要么用老一點的GROMACS,要么用CentOS >=8.0版。從GROMACS 2021開始,還要求cmake版本必須>=3.17,而CentOS 8的軟件源里的cmake版本偏老,因此必須按照下文所述手動安裝cmake。另外值得一提的是,如果你的gcc很新而GROMACS版本較老,也可能編譯不過去,比如我發現Rocky Linux 9自帶的gcc 11.2.1編譯GROMACS 2018.8就無法編譯通過。
下面安裝的是純CPU運算、單精度、能單機并行但不能跨節點并行的版本。如果需要GPU加速或跨節點或雙精度運算,看文末的附注。本文用make的時候使用了-j選項以通過并行編譯降低編譯耗時,但個別情況下可能導致編譯出錯,在虛擬機下編譯還有卡住的可能,屆時請去掉-j再試。下文的安裝過程有全程視頻演示,初學者不熟悉Linux的話請嚴格效仿者安裝:https://www.bilibili.com/video/av39749252/。
1 安裝cmake 3.x
GROMACS 2018需要系統里有cmake 3.x才能編譯。CentOS 7.6自帶的cmake版本太老,因此需要先裝cmake 3.x。
首先運行以下命令,添加EPEL源
yum install epel-release
然后在終端里輸入yum install cmake3即可下載和安裝cmake包,遇到提示的時候都輸入y。之后輸入cmake3 /V命令,如果顯示出了3.x的版本號就說明沒問題了。
注1:如果用yum的時候出現亂七八糟的提示安裝不了,把操作系統重啟一下往往就好了。
注2:如果你沒有管理員權限或者不方便用yum安裝cmake,可以去http://www.cmake.org/cmake/resources/software.html下載cmake包,然后解壓,進入其目錄,運行
./bootstrap --prefix=/sob/cmake3 -- -DCMAKE_USE_OPENSSL=OFF
make -j
make install
就新產生了/sob/cmake3目錄。然后刪掉cmake解壓的目錄。之后在~/.bashrc里加入export PATH=$PATH:/sob/cmake3/bin。重新進入終端后,cmake命令就可以用了。
2 安裝FFTW庫
GROMACS 2018依賴于快速傅立葉變換庫FFTW 3.3.8,可以在http://www.fftw.org/fftw-3.3.8.tar.gz下載。將其壓縮包解壓,進入此目錄后運行
./configure --prefix=/sob/fftw338 --enable-sse2 --enable-avx --enable-float --enable-shared
以上語句代表FFTW將被安裝到/sob/fftw338目錄。如果你的CPU相對較新,支持AVX2指令集,可再加上--enable-avx2選項以獲得更好性能。
然后運行make -j install開始編譯,過一會兒編譯完畢后,就出現了/sob/fftw338目錄。然后可以把FFTW的解壓目錄和壓縮包刪掉了。
3 安裝GROMACS
下載GROMACS 2018.8壓縮包,地址為ftp://ftp.gromacs.org/pub/gromacs/gromacs-2018.8.tar.gz。然后將之拷到/sob目錄下解壓。進入解壓后的目錄,在終端里依次運行
mkdir build
cd build
export CMAKE_PREFIX_PATH=/sob/fftw338
cmake3 .. -DCMAKE_INSTALL_PREFIX=/sob/gmx2018.8(如果你是用的CentOS 8,或者手動編譯的cmake,這里cmake3改為cmake。另外,這一步運行后也仔細看看屏幕上的提示,了解當前CPU支持的最佳的SIMD指令集有沒有正確判斷對。如果你的CPU較新卻用較老的GROMACS,可能支持的SIMD根本沒識別出來,此時GROMACS的mdrun運行速度會非常慢)
make install -j
Intel四核機子下,不到10分鐘就能編譯完畢。
此時程序就被編譯和安裝到了/sob/gmx2018.8目錄下。修改用戶目錄下的.bashrc文件(比如運行gedit ~/.bashrc),在末尾加入source /sob/gmx2018.8/bin/GMXRC,然后保存。
之后關閉終端窗口,再次打開終端,輸入gmx -version,看看是否輸出了GROMACS的相關信息,是的話就說明安裝成功了。之后可以把GROMACS壓縮包和解壓出來的目錄刪掉。
注意,在使用gmx mdrun跑任務時,如果一開始提示WARNING: Using the slow plain C kernels. This should not happen during routine usage on supported platforms,說明編譯時沒有利用CPU的SIMD指令集(正常情況理應自動檢測并利用),這樣編譯出來的mdrun的運行速度往往比理想情況慢N倍。此時需要重新編譯,在使用cmake3的時候明確指定要用的指令集,比如如果你的CPU支持AVX2指令集(XEON v3系列及之后都支持)就加上-DGMX_SIMD=AVX2_256。
注1:在安裝GROMACS過程中自動安裝FFTW庫
實際上,FFTW庫可以不必手動安裝,因為可以在安裝GROMACS時自動下載并安裝FFTW庫。但由于國內鏈接FFTW官網服務器往往比較慢,自動下載FFTW庫可能中途卡住或者過程巨慢,因此還是建議手動方式安裝FFTW庫。如果你確實打算自動安裝FFTW庫的話,將上文第2節直接忽略掉,也不必設export CMAKE_PREFIX_PATH=/sob/fftw338,把第3節的cmake3那一步額外加上-DGMX_BUILD_OWN_FFTW=ON選項即可,這樣編譯GROMACS時就會自動在FFTW官網上下載FFTW包并自動編譯之。
注2:編譯支持CUDA GPU加速的版本
GROMACS目前支持對nVidia的GPU通過CUDA方式的加速,也支持以OpenCL方式對其它廠商的GPU實現GPU加速(但功能有局限性)。對于用CUDA方式加速,先去https://developer.nvidia.com/cuda-downloads下載CUDA toolkit并安裝到默認路徑,之后編譯GROMACS方法同前,區別僅是cmake3這一步額外加上-DGMX_GPU=ON -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda選項(以實際CUDA tookit安裝路徑為準)。如果你裝的是GROMACS >= 2021版,-DGMX_GPU=ON應改為-DGMX_GPU=CUDA。
之后運行gmx mdrun運算時,會自動使用機子里的GPU進行加速。如果又不想使用GPU加速了,那得按照上文方式編譯一個只支持CPU運算的版本并放到不同的路徑,并且把.bashrc改成source那個版本的GMXRC(如果編譯時你沒寫-DGMX_GPU但也自動檢測出CUDA toolkit并編譯出了GPU版本,加上-DGMX_GPU=OFF強制避免編譯成GPU版)。
注3:編譯雙精度版本
一般計算只需要按照前述編譯單精度版本就夠了,但如果模擬剛開始就崩潰,有時候用雙精度版本可解決,但計算比單精度版慢將近一倍、trr/edr等文件體積大一倍。另外,做正則振動分析時在能量極小化和對角化Hessian矩陣的時候一般也需要用雙精度版以確保數值精度。注意,編譯雙精度版本時不支持GPU加速。
要編譯雙精度版本的話,先按照前文方式編譯一遍單精度版本,畢竟這之后在研究中肯定也得用。然后再重復一遍編譯過程,但是在編譯FFTW時去掉--enable-float,并且在使用cmake3命令時額外加上-DGMX_DOUBLE=ON選項。雙精度版本的GROMACS可執行文件是gmx_d,而單精度是gmx,因此單精度和雙精度的可執行文件可以同時存在于同一目錄,互不沖突。
注4:編譯GROMACS的MPI版本
GROMACS跨節點并行計算需要MPI庫,支持OpenMPI>=1.6、MPICH>=1.4.1。在編譯這種GROMACS之前首先要安裝MPI庫,這里用OpenMPI。去http://www.open-mpi.org下載OpenMPI最新版本,解壓并進入此目錄后運行以下命令,就會編譯并安裝OpenMPI到/sob/openmpi目錄:
./configure --prefix=/sob/openmpi
make all install -j
之后在用戶目錄下的.bashrc末尾加入以下兩行
export PATH=$PATH:/sob/openmpi/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/sob/openmpi/lib
然后重新進入終端使以上語句生效。之后編譯GROMACS的方法同前,但在cmake3那一步額外加上-DGMX_MPI=ON選項。編譯出來的可執行文件是gmx_mpi,比單機版本的可執行文件多了_mpi后綴。運行時候使用比如這樣的命令:mpirun -np 16 gmx_mpi mdrun。
注:對于root用戶,OpenMPI要求每次執行mpirun命令都得帶著-allow-run-as-root選項才行,這很煩人,但可以通過在編譯OpenMPI之前修改OpenMPI的源代碼來避免,見《root用戶在用openmpi并行計算時避免加--allow-run-as-root的方法》(http://www.shanxitv.org/409)。
順帶一提,筆者在答疑時經常看到有人明明用的是單機并行,卻非要裝個MPI版GROMACS,這需要批評。因為這不僅需要多做一步,而且比起用默認方式基于thread-MPI和OpenMP的并行方式效率還更低,因此單機并行裝MPI版完全是自取其辱。
注5:關于AVX512指令集
編譯GROMACS時,如果你的CPU相對較新,支持AVX512指令集的話,程序可能會自動基于AVX512指令集進行編譯。但如果你的機子上的gcc版本太老,不支持AVX512的話就會報錯。如果根據屏幕上的提示確認是由于gcc不支持AVX512指令集而無法進行編譯,可以按照http://bbs.keinsci.com/thread-12687-1-1.html中的做法更新gcc,或者索性不用AVX512指令集,即cmake3那一步加上-DGMX_SIMD=AVX2_256來使用AVX2指令集。