参考资料:
单精度or双精度
- 一般计算只需要按照前述编译单精度版本就够了,但如果模拟刚开始就崩溃,有时候用双精度版本可解决,但计算比单精度版慢将近一倍、trr/edr等文件体积大一倍。另外,做正则振动分析时在能量极小化和对角化Hessian矩阵的时候一般也需要用双精度版以确保数值精度。注意,编译双精度版本时不支持GPU加速。
- 单双精度除了编译上有区别,fftw也不同,有些电脑自带双精度(libfftw3),记得自己编一个单精度的(如libfftw3f)
Linux版GMX安装
安装fftw-3.2.2,安装路径为/opt/fftw-3.2.2
http://www.fftw.org/fftw-3.3.8.tar.gz下载.
tar xzvf fftw-3.3.4.tar.gz
cd fftw-3.3.4
./configure --prefix=/opt/fftw-3.3.4 --enable-sse2 --enable-avx --enable-float --enable-shared
如果你的CPU相对较新,支持AVX2指令集,可再加上 --enable-avx2 选项以获得更好性能。
sudo make
sudo make install
make时可调用-j,代表调用所有核并行编译,建议用于编译的核不要超过4个?即make -j 4。
编译完后可以把FFTW的解压目录和压缩包删掉。
打开~/.bashrc(gedit ~/.bashrc) 复制:
# For FFTW
export LD_LIBRARY_PATH=/opt/fftw-3.3.4/lib:$LD_LIBRARY_PATH
export PATH=/opt/fftw-3.3.4/bin:$PATH
保存后 source ~/.bashrc 并用 vi ~/.bashrc检查一下。
安装CMake
先检查cmake –version,如果显示没有安装则先安装cmake
tar xzvf cmake-2.8.12.2.tar.gz
cd cmake-2.8.12.2
./configure --prefix=/opt/cmake-2.8.12.2
sudo make
sudo make install
打开~/.bashrc 复制:
# For CMake
export PATH=/opt/cmake-2.8.12.2/bin:$PATH
保存后 source ~/.bashrc 并用 cmake --version 查看版本。
安装cuda
去https://developer.nvidia.com/cuda-downloads下载CUDA toolkit并安装.
安装OpenMPI
http://www.open-mpi.org下载OpenMPI最新版本.
./configure --prefix=/opt/openmpi
make all install -j
之后在用户目录下的.bashrc末尾加入以下两行
export PATH=$PATH:/opt/openmpi/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/openmpi/lib
如xilock的为:
# openmpi
export PATH=/THFS/opt/openmpi/2.0.2/bin/:$PATH
export LD_LIBRARY_PATH=/THFS/opt/openmpi/2.0.2/lib:$LD_LIBRARY_PATH
然后重新进入终端使以上语句生效。
注意,若装了mpi版本的还想再装一个非mpi版本的来供单节点使用,则需要重新编译一个gromacs且需要在编译gromacs时把mpi给OFF掉。
安装Gromacs-5.1.4
tar xzvf gromacs-5.1.4.tar.gz
cd gromacs-5.1.4
mkdir build
cd build
export CMAKE_PREFIX_PATH=/<fftw的路径/>
cmake .. -DCMAKE_INSTALL_PREFIX=/opt/gromacs-5.1.4-gpu -DGMX_MPI=ON -DGMX_GPU=ON -DCUDA_TOOLKIT_ROOT_DIR=/<cuda的路径/>
sudo make
进行make时,若此前安装的是cuda9.0以上版本,则可能会报错“nvcc fatal : Unsupported gpu architecture ‘compute_20’ while cuda9.0 is installed”
这是由兼容性导致的,此时需要更改一下gromacs里面的文件“gromacs-5.1.2/cmake/gmxManageNvccConfig”,将其中几处带“-gencode;arch=compute_20,code=compute_20”的行处理掉(如将其注释掉)即可。
sudo make install
注意,也可不做sudo make直接sudo make install
打开~/.bashrc 复制:
# For Gromacs
source /opt/gromacs-5.1.4-gpu/bin/GMXRC
保存并 source ~/.bashrc
测试
gmx_mpi mdrun
集群安装示例
本例在ntu nscc服务器上安装
- 先后在个人文件夹(home/users/ntu/n1805727)中安装fftw-3.2.2和cmake-2.8.12.2,并添加环境变量。
- 然后加载以下model。
module load gcc/4.9.3
module load openmpi/intel/1.10.2
module load cuda80/toolkit/8.0.44
- 然后在gromac里的build文件夹里执行以下命令即可:
export CMAKE_PREFIX_PATH=/home/users/ntu/n1805727/GMX5.1.4_Mine/fftw-3.3.4-installed
cmake .. -DCMAKE_INSTALL_PREFIX=/home/users/ntu/n1805727/GMX5.1.4_Mine/gromacs-5.1.4-gpu -DGMX_MPI=ON -DGMX_GPU=ON -DCUDA_TOOLKIT_ROOT_DIR=/cm/shared/apps/cuda80/toolkit/8.0.44
make
make install
- 创建无后缀文本文件作为modulefile,内容如下:
#%Module -*- tcl -*-
##
## modulefile
##
set name gromacs
set version 5.1.4
set root /home/users/ntu/n1805727/GMX5.1.4_Mine/gromacs-5.1.4-gpu
set url http://www.gromacs.org
module-whatis "adds $name version $version to your environment variables."
module load gcc/4.9.3
module load openmpi/intel/1.10.2
module load cuda80/toolkit/8.0.44
setenv GMXBIN $root/bin
setenv GMXDATA $root/share/gromacs
setenv GMXLDLIB $root/lib64
setenv GMXMAN $root/share/man
setenv GROMACS_DIR $root
setenv PKG_CONFIG_PATH $root/lib64/pkgconfig
prepend-path LD_LIBRARY_PATH $root/lib64
prepend-path MANPATH $root/share/man
prepend-path PATH $root/bin
WSL版(以gmx2025.2为例)
可参考GROMACS-GPU版在WSL2-Ubuntu中的安装方法
WSL安装
见LAMMPS安装一文
cmake安装
gmx2025.2要求CMake3.28或更高,可以cmake --version检查一下,如果版本低的话,手动编译或者通过官方 Kitware 仓库卸载重装一下,Ubuntu/Debian指令如下:
# 卸载旧版本(可选)
sudo apt remove --purge cmake
# 添加 Kitware 官方仓库
wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | sudo tee /usr/share/keyrings/kitware-archive-keyring.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/kitware.list >/dev/null
# 更新并安装最新 CMake
sudo apt update
sudo apt install cmake
# 验证版本
cmake --version # 应输出 ≥3.28
fftw安装
wget http://www.fftw.org/fftw-3.3.10.tar.gz
tar -xzf fftw-3.3.10.tar.gz
cd fftw-3.3.10
# 编译单精度版本(libfftw3f)
make clean
./configure --prefix=/home/xilock/Desktop/fftw338 --enable-sse2 --enable-avx --enable-float --enable-shared
make -j 4
sudo make install
- 安装完后通过
find / -name "libfftw3*so*" 2>/dev/null看安装到哪里了(或单精度用ls /usr/lib/x86_64-linux-gnu/libfftw3f.so* 2>/dev/null,双精度用ls /usr/lib/x86_64-linux-gnu/libfftw3.so* 2>/dev/null)
CUDA Toolkit安装
买的成品机有时候是安装了windows版CUDA的,可以直接用,默认地址在/usr/lib/cuda,可在cmake中做如下添加(gmx2021后用-DGMX_GPU=CUDA,之前用-DGMX_GPU=ON)
cmake .. -DGMX_GPU=CUDA \
-DCUDA_TOOLKIT_ROOT_DIR="/usr/lib/cuda" \
-DCUDA_PATH="/usr/lib/cuda"
gmx2025.2要求CUDA12.1以上(Could NOT find CUDAToolkit: Found unsuitable version “11.5.119”, but required is at least “12.1” (found /usr/include)),如果CUDA版本太低,就下载个新的(但不能超过nvidia-smi中硬件支持的上限),可以与windows系统不同。在官网CUDA Toolkit Archive选择对应的版本,然后依据Target Platform选择到WSL-Ubuntu-2.0,得到对应的代码(Installation Instructions),依次输入对应指令即可 参考Windows和WSL安装CUDA。
安装完后,记得修改环境变量是将其放在默认路径的前面,然后nvcc --version
如果同一次编译过程中用旧版本CUDA编译过,则CMake缓存可能导致即便CUDA更新但仍按旧版本报错,可尝试:rm -rf CMakeCache.txt CMakeFiles/
多个版本的cuda可以共存,在.bashrc中更改PATH路径即可 需注意在/usr/local/cuda以及/usr/local/cuda-11均为指向你最后安装的cudu版本的软链接.
gmx2025.2安装
mkdir build
cd build
export CMAKE_PREFIX_PATH=/home/xilock/Desktop/fftw338
GPU加速版cmake指令如下:
cmake .. \
-DCMAKE_INSTALL_PREFIX=/home/xilock/Desktop/gromacs_2025p2_GPU \
-DGMX_GPU=CUDA \
-DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-12.3 \
-DCMAKE_CUDA_ARCHITECTURES=86 # 关键修改!使用数字格式
然后make install -j 4,将source /home/xilock/Desktop/gmx2025p2/bin/GMXRC加到.bashrc中source一下,看看gmx -version是否输出gromacs的信息判断是否安装成功。
其中CUDA的架构可以从nvidia-smi -q的 Product Architecture中找到名称(如Ampere架构对应86)后查对应数字,或者直接nvidia-smi --query-gpu=compute_cap --format=csv会显示如compute_cap 8.6
gmx可计算的体系大小与计算效率
gmx可计算的体系大小
- Kutzner, Carsten说There is no limit on the number of atoms that you can simulate in GROMACS,但是单双精度可能会不足以描述精度而需要双精度(提问者说128x128x128 nm box containing only water体系换了双精度也不行,但其问题是There are many atoms with coordinates 0.000000 0.000000 0.000000,xilock猜可能是模型问题,也可能是版本问题?)
- paickmol建模最大尺寸是100100100nm,大了用其它方式吧
- gro文件原子数那一栏最大可以有五位数,如果编程,直接取余用N%100000即可,参见《gromacs可以模拟的最大原子数是多少》。
- gmx模拟上限原子数理论上无限,只要你的计算能力足够强,一般达到百万级的可能用粗粒化的居多,参见《gromacs可以模拟的最大原子数是多少》。
- 李老师在《GROMACS简介和基准测试》一文提到“gromacs可以根据牛顿运动方程,对具有数百到数百万个粒子的体系进行模拟.”,但这应该是根据当前普遍硬件的经验值。
- sob说一亿原子都有人用全原子跑。基本上,但凡你用全原子能跑得动的情况,就没必要粗粒化。联合原子力场和全原子力场能跑得动的尺度是相仿佛的,没必要特意去分。只不过跑那种非极性氢占很大部分的时候(如磷脂膜)刻意用联合原子力场倒是能便宜很多。参见当原子个数小于多少时,才比较适合选择全原子力场
- 接上条,喵星大佬说:一亿原子只有疯狂的岛国人干了这么疯狂的事,还跑的是20us这种。一般的单节点计算的话,以生物分子为例,指蛋白/核酸/膜/小分子+水的情况,研究的问题以研究小分子药物对蛋白稳定性影响为例,一般轨迹需要单条10-100ns,预跑之类的不计入,有3090/A6000这种级别的单卡的情况下,用Gromacs,盒子里的总原子数超过30万左右会开始比较困难,基本极限在100万以内。如果可以多卡同时跑多条轨迹可以进一步适当放宽,如果需要算结合能/做FEP等情况,体系大小砍半,要做副本交换/研究蛋白折叠等情况另算,大概这样。有超算/多节点IB网络集群/在D. E. Shaw Res.有Anton2的等情况不列入讨论,再就是据说OpenMM会更快一些,但自己没用过不知道具体情况,那个还支持AMOEBA这样的可极化力场和其他一些复杂形式的力场。实际上许多跑多个蛋白的同源/异源复合物的文章,整个体系算上水(膜)一般也不会超过50万个原子,连D. E. Shaw Res.发的文章里跑的体系大的也就30-40万原子。
原子数与计算效率对比
- 《Scaling of the GROMACS Molecular Dynamics Code to 65k CPU Cores on an HPC Cluster 》(J Comput Chem. 2025 Feb 15;46(5):e70059. doi: 10.1002/jcc.70059)一文(中文版见李老师《物美价廉:GROMACS 2018在GPU节点上的使用》)提到在a modern high-performance computing (HPC) cluster with AMD CPUs on up to 65,536 CPU cores可实现35 ns/d for the largest 204M atom system. 玺洛克之前在AMD EPYC 7452 32-Core Processor上Running on 1 node with total 64 cores, 64 logical cores时,对205 323体系大概25.459 ns/day,相当于体系增大1000倍后类似效率需要的core数翻了1000倍
- 《More bang for your buck: Improved use of GPU nodes for GROMACS 2018》一文提到对于全原子Epyc 7401P 1*24 cores 2.0 GHz跑81,743原子效率28.71ns/day,跑2,136,412原子2.28ns/day,对于粗粒化2,094,812粒子大概60多ns/day,可见相同粒子数下粗粒化模型还是会快。
- Tackling Exascale Software Challenges in Molecular Dynamics Simulations with GROMACS一文2M atoms在1 node (约20 cores,硬件为2 10-core Xeon E5-2680v2 (2.8 GHz Ivy Bridge))大概1.5 ns/d,与上一条中论文范围接近,12M atoms大概0.10 ns/day,81k atoms大概22 ns/day,可见随着体系原子数增加,有的CPU效率降低并非线性而是衰减更快
体系尺寸与原子个数对照检查
- 李老师在《物美价廉:GROMACS 2018在GPU节点上的使用》一文中提到过粗粒化后含2,094,812粒子的large Martini benchmark系统 BIG 体系(根据哺乳动细胞质膜示例体系创建)尺寸大概142.4142.411.3 nmnmnm(步长20fs,截断半径1.1nm),玺洛克试过自己的给CG体系添加水和粒子的脚本处理后的150150150 nmnmnm体系大概含27 250 148个beads(用上述BIG体系按照体积直接换算过来成相同体积大概是30854635个)
其它:
- 《3 Molecular Dynamics with GROMACS》一文提到GROMACS has an intrinsic hard limit for the input number of atoms in a system (~100 million). For dense systems such as the ones used in life sciences research this limit is reached at approximately ~1 Million nm3 (Mnm3) volumes.但从Kutzner, Carsten的回复来看也没什么依据。
并行效率
- 参考《GROMACS (2019.3 GPU版) 并行效率测试及调试思路》可知:如果只配一块显卡,我们有一个核心数较少(8-12)频率较高的CPU就够了,比如桌面级别的I7,I9,如果要装多显卡的机器,那么选择cpu的时候最好满足10核左右/1块显卡比例(如果cpu主频够高,可以适当降低核心数要求),在此基础上,利用公式:cpu频率* min(显卡数*10,cpu核心数) / price,来计算搭配cpu的性价比(所以gmx2025.2在不指定核数的时候,如果调用GPU加速会自动将10物理20逻辑的机子用1MPI threads+10OpenMP threads跑,而不调用gpu时用20 MPI threads+1OpenMP thread跑??)。
- sob说“开HT且启用全部逻辑核心并行的时候,性能比只用物理核心时计算性能略有提升,GROMACS,启用全部逻辑核心也并非总能令性能更好,需要根据具体任务进行测试。但如果你懒得测试,索性就用物理核心数并行就完了,注意此时一定要用-pin on,肯定会令性能有所提升,有时提升还挺大”,参见《正确认识超线程(HT)技术对计算化学运算的影响》
- 单显卡情况下:只用1个Rank(运行时单进程多线程并行),如果显卡足够好,把PME任务给显卡,openmp theads 12个左右;命令如下:
gmx mdrun -pin on -ntmpi 1 -ntomp 12 -pme gpu XXX.tpr - Entropy.S.I在《GROMACS (2025.2 GPU版) 并行效率测试结果》一文中认为16核机子开SMT,-ntomp 31在绝大多数情况下速度最快,并在《Gromacs跑动力学CPU和GPU占用率均不高》一文中强调跑GPU加速GMX应当用上CPU的超线程,但xilock实测超线程效果较差。
- GMX2023以前的版本需要在mdrun命令中加
-update gpu,参见《跑GPU加速版的GMX时GPU的利用率很低》 - Entropy.S.I在《性能翻倍?RTX4090科学计算之经典MD模拟全面测试》一文中对不同CPU如何发挥GPU的性能有一些测试,可参考阅读。
gmx入门级使用教程
其他
dssp安装
可在这里的“DSSP 2.*”处下载处理好的linux/win版dssp放到/usr/local/bin目录下(或设置DSSP环境变量指向“此文件”,注意不是指向该文件的路径),然后用sudo chmod a+x /usr/local/bin/dssp添加权限(否则会提示增加“-ver option”)。
路径设置:
WRONG: export DSSP=/opt/bin
RIGHT: export DSSP=/opt/bin/dssp
也可以在这里下载dssp,但没弄明白怎么安装。
对于linux版的gromacs,’gmx do_dssp’假定dssp可执行程序的路径为/usr/local/bin/dssp. 如果不是, 那么需要设置环境变量DSSP, 并将其指向dssp可执行程序的路径, 例如setenv DSSP /opt/dssp/bin/dssp. 如果使用bash, 可使用export DSSP=’/opt/dssp/bin/dssp’, 也可以直接将该变量加到bash的配置文件中。 对于win版的gromacs,调用dssp时需要新建一个名为DSSP的系统环境变量,值设置为E:\dssp-2.0.4.exe,指向dssp文件。
Q&A
cmake阶段The C compiler identification is GNU 4.4.7/unknown
gromacs 2019要求gcc至少为4.8.1(gromacs2019不支持gcc5.2,还是得用4.8;gromacs2020要求gcc>=5.0),但有时即便安装了新版本仍然会在cmake时报版本过久,故此时需要指定路径,即:[user1@node1 build]$ cmake .. -DCMAKE_CXX_COMPILER=/usr/local/gcc-5.2.0/bin/g++ -DCMAKE_C_COMPILER=/usr/local/gcc-5.2.0/bin/gcc。注意这两个路径要紧跟着cmake ..,放在后面没效果好像。
比如,若玺洛克添加的gcc环境变量为:
# gcc 4.8.5
export LD_LIBRARY_PATH=/THFS/opt/intel/18_1/compilers_and_libraries_2018.0.128/linux/mkl/lib/intel64_lin:/THFS/opt/intel/18_1/compilers_and_libraries_2018.0.128/linux/mpi/intel64/lib:/THFS/opt/intel/18_1/compilers_and_libraries_2018.0.128/linux/compiler/lib/intel64:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/THFS/opt/gcc/4.8.5/lib64/:$LD_LIBRARY_PATH
export PATH=/THFS/opt/gcc/4.8.5/bin/:$PATH
玺洛克用mpi版编译时指令如下:
cmake .. -DCMAKE_CXX_COMPILER=/THFS/opt/gcc/4.8.5/bin/g++ -DCMAKE_C_COMPILER=/THFS/opt/gcc/4.8.5/bin/gcc -DCMAKE_INSTALL_PREFIX=/THFS/home/q-nwu-jmm/Desktop/INSTALL_Xilock/gromacs_install/gromacs20196_installed -DGMX_MPI=ON
若MPI的路径也有问题,则检查bashrc里添加的是否正确,或者在编译阶段添加MPI的路径(,一般通过前者可以解决),相关命令为(具体见参考资料):
-DMPI_C_COMPILER=/public/software/mpi/openmpi-16-intel/bin/mpicc
-DMPI_CXX_COMPILER=/public/software/mpi/openmpi-16-intel/bin/mpicxx
WARNING: Using the slow plain C kernels. This should not happen during routine usage on supported platforms.
有些超算上面的gromacs编译的不好,使用时会提示WARNING: Using the slow plain C kernels. This should not happen during routine usage on supported platforms.,严重影响效率(效率相差几倍!如6h的任务变为24h),建议重新编译!
/usr/bin/ld: cannot find -lmkl_intel_lp64: No such file or directory
报错内容
/usr/bin/ld: cannot find -lmkl_intel_lp64: No such file or directory
/usr/bin/ld: cannot find -lmkl_intel_thread: No such file or directory
/usr/bin/ld: cannot find -lmkl_core: No such file or directory
/usr/bin/ld: cannot find -lmkl_intel_lp64: No such file or directory
/usr/bin/ld: cannot find -lmkl_intel_thread: No such file or directory
/usr/bin/ld: cannot find -lmkl_core: No such file or directory
collect2: error: ld returned 1 exit status
如果系统里之前安装了BLAS、LAPACK的话,在cmake时会有如下提示,然后在make install时会报上述错误
-- Found BLAS: /opt/intel/compilers_and_libraries_2016.4.258/linux/mkl/lib/intel64_lin/libmkl_intel_lp64.so;/opt/intel/compilers_and_libraries_2016.4.258/linux/mkl/lib/intel64_lin/libmkl_intel_thread.so;/opt/intel/compilers_and_libraries_2016.4.258/linux/mkl/lib/intel64_lin/libmkl_core.so;/opt/intel/compilers_and_libraries_2016.4.258/linux/compiler/lib/intel64_lin/libiomp5.so;-lm;-ldl
-- Looking for cheev_
-- Looking for cheev_ - found
-- Found LAPACK: /opt/intel/compilers_and_libraries_2016.4.258/linux/mkl/lib/intel64_lin/libmkl_intel_lp64.so;/opt/intel/compilers_and_libraries_2016.4.258/linux/mkl/lib/intel64_lin/libmkl_intel_thread.so;/opt/intel/compilers_and_libraries_2016.4.258/linux/mkl/lib/intel64_lin/libmkl_core.so;/opt/intel/compilers_and_libraries_2016.4.258/linux/compiler/lib/intel64_lin/libiomp5.so;-lm;-ldl;-lm;-ldl
要解决的话在编译过程用-DGMX_FFT_LIBRARY=fftw3 -DGMX_EXTERNAL_BLAS=OFF -DGMX_EXTERNAL_LAPACK=OFF 指定采用fftw3而非mkl并关闭DGMX_EXTERNAL_BLAS和LAPACK:
cmake .. -DCMAKE_INSTALL_PREFIX=/opt/xilock/gromacs2019p6 -DGMX_GPU=ON -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-12.4 -DGMX_FFT_LIBRARY=fftw3 -DGMX_EXTERNAL_BLAS=OFF -DGMX_EXTERNAL_LAPACK=OFF
进一步说明:
- MKL、icc不是必需的,用MKL不比FFTW更快,用icc比gcc优势也不明显,故没必要装。参见Gromacs 5.1.1与4.6.7编译方法
- GROMACS需要利用FFT(快速傅立叶变换)库,建议使用FFTW(仅限版本3或更高版本)或英特尔MKL库。可以使用cmake-DGMX_FFT_library=
设置库的选择,其中 是fftw3、mkl或fftpack中的一个。FFTPACK与GROMACS捆绑在一起作为备用,如果仿真性能不是优先考虑的,则可以接受。选择MKL时,GROMACS将使用MKL中的BLAS和LAPACK库。一般来说,将MKL与GROMACS一起使用没有优势,FFTW通常更快。使用CUDA时,为了支持PME GPU卸载功能,需要基于GPU的FFT库。基于CUDA的GPU FFT库cuFFT是CUDA工具包的一部分(所有CUDA构建都需要),因此使用CUDA GPU加速构建时不需要额外的软件组件。参考[GROMACS安装](https://zhuanlan.zhihu.com/p/422766711)
简单来说,默认推荐采用FFTW,并使用单精度方式编译。使用GPU加速时,需要添加CUDA的路径-DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda。
手机版“神探玺洛克”请扫码