GROMACS的安装方法
文/Sobereva@北京科音 2019-Jan-2
本文对最流行的分子动力学GROMACS程序在Linux下的安装方法进行详细说明。当新出的GROMACS版本的安装方法和本文所述出现较大差异时,本文也会做相应的更新。PS:之前笔者也写过老版本GROMACS安装方法,见《Gromacs 5.1.1与4.6.7编译方法》(http://sobereva.com/247)和《Gromacs 4.0.4、4.5.5版安装方法》(http://sobereva.com/29),但这俩文章对于目前版本来说已经没有意义了。
下面介绍的是GROMACS 2018.4版的安装,对GROMACS 2019经测试也完全适用,对于其它版本可能适用也可能不适用。本文是针对计算化学工作者最常用的CentOS 7.6操作系统写的,对于其它Linux系统的用户,安装方法可能与本文有异。本文的CentOS 7.6是按照《在VMware 15中安装CentOS 7.6的完整过程视频演示》(http://sobereva.com/454)演示的方式完全新装的。本文假定读者是root用户,程序将被安装到/sob目录下。如果你是普通用户,请随机应变,恰当设置路径。本文所示的安装过程中主机全程都能访问Internet。本文编译用的C++编译器是操作系统自带的gcc,虽然用Intel C++编译器也可以,但编译出的程序的速度没有显著差别。
下面安装的是纯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命令看能否启动cmake3。
注:如果用yum的时候出现乱七八糟的提示安装不了,把操作系统重启一下往往就好了。
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.4压缩包,地址为ftp://ftp.gromacs.org/pub/gromacs/gromacs-2018.4.tar.gz。然后将之拷到/sob目录下解压。进入解压后的目录,在终端里依次运行
mkdir build
cd build
export CMAKE_PREFIX_PATH=/sob/fftw338
cmake3 .. -DCMAKE_INSTALL_PREFIX=/sob/gmx2018.4
make install -j
Intel四核机子下,不到10分钟就能编译完毕。
此时程序就被编译和安装到了/sob/gmx2018.4目录下。修改用户目录下的.bashrc文件(比如运行gedit ~/.bashrc),在末尾加入source /sob/gmx2018.4/bin/GMXRC,然后保存。
之后关闭终端窗口,再次打开终端,输入gmx -version,看看是否输出了GROMACS的相关信息,是的话就说明安装成功了。之后可以把GROMACS压缩包和解压出来的目录删掉。
注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安装路径为准)
之后运行gmx mdrun运算时,会自动使用机子里的GPU进行加速。如果又不想使用GPU加速了,那还得按照上文方式编译一个只支持CPU运算的版本并放到不同的路径,并且把.bashrc改成source那个版本的GMXRC。
注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://sobereva.com/409)。