本帖最后由 Dempey 于 2024-5-14 08:55 编辑
GROMACS-PLUMED做metadynamics性能调优分享
前言
目前GROMACS计算自由能的方法有多种,据笔者所知,主流可以做metadynamics的方法其一是与PLUMED联用,其二是与COLVARS联用。最近在尝试自由能计算,使用了GROMACS-PLUMED联用的方法,发现在gmx mdrun中"-pin"、"-ntomp"、"-ntmpi"等参数对计算表现有影响,现总结一下,进行分享,欢迎大家前来讨论。
1 测试平台
系统:Alma Linux 8.9
CPU:AMD EPYC 7542 (32核)
GPU:NVIDIA GeForce RTX 4060 Ti (16G显存)
2 测试体系
来源于本人课题中的蛋白质与药物分子的模拟,原子数19.7万,模拟步长2 fs,模拟时间1 ns。
3 编译工具与编译方式
GCC编译器:11.4.0
FFTW:3.3.10
PLUMED:2.9.0
OpenMPI:5.0.1
CUDA:12.3
(1) ThreadMPI + OpenMP + CUDA
- cmake .. -DGMX_GPU=CUDA -DCMAKE_INSTALL_PREFIX=/opt/software/gromacs-2023-float-threadmpi-gpu -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda - DCMAKE_PREFIX_PATH=/opt/tool/fftw-3.3.10-float
复制代码
(2) OpenMPI + OpenMP + CUDA- cmake .. -DGMX_GPU=CUDA -DCMAKE_INSTALL_PREFIX=/opt/software/gromacs-2023-float-openmpi-gpu -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda -DCMAKE_PREFIX_PATH=/opt/tool/fftw-3.3.10-float -DGMX_MPI=ON
复制代码
4 测试结果
(1) 只MD,不进行MetaMD
注:这里为PLUMED打过补丁的GROMACS运行结果,不确保纯净版GROMACS的结果
ThreadMPI + OpenMP + CUDA
- gmx mdrun -ntmpi 1 -ntomp 16 -v -deffnm md
复制代码 GPU-Util:94% 运行时间:1134 s
OpenMPI + OpenMP + CUDA
- mpirun -np 1 gmx_mpi mdrun -ntomp 16 -v -deffnm md
复制代码 GPU-Util:13%-14% 运行时间:10104 s
- mpirun -np 1 gmx_mpi mdrun -pin on -ntomp 16 -v -deffnm md
复制代码 GPU-Util:94% 运行时间:1187 s
- gmx_mpi mdrun -pin on -ntomp 16 -v -deffnm md
复制代码 GPU-Util:94% 运行时间:1118 s
- gmx_mpi mdrun -ntomp 16 -v -deffnm md
复制代码 GPU-Util:94% 运行时间:1196 s
- mpirun -np 16 gmx_mpi mdrun -ntomp 1 -v -deffnm md
复制代码 GPU-Util:81% 运行时间:4720 s
- mpirun -np 16 gmx_mpi mdrun -pin on -ntomp 1 -v -deffnm md
复制代码 GPU-Util:69%-80% 运行时间:4598 s
(2) 进行MetaMD
ThreadMPI + OpenMP + CUDA
- gmx mdrun -ntmpi 1 -ntomp 16 - -deffnm md -plumed meta.dat
复制代码 GPU-Util:0%-1% 运行时间:---- s 极慢,故取消作业
- gmx mdrun -pin on -ntmpi 1 -ntomp 16 -v -deffnm md -plumed meta.dat
复制代码 GPU-Util:0%-1% 运行时间:---- s 极慢,故取消作业
OpenMPI + OpenMP + CUDA
- mpirun -np 1 gmx_mpi mdrun -ntomp 16 -v -deffnm md -plumed meta.dat
复制代码 GPU-Util:20% 运行时间:---- s 极慢,故取消作业
- mpirun -np 1 gmx_mpi mdrun -pin on -ntomp 16 -v -deffnm md -plumed meta.dat
复制代码 GPU-Util:73%-76% 运行时间:2351 s
- mpirun -np 2 gmx_mpi mdrun -pin on -ntomp 8 -deffnm md -plumed meta.dat
复制代码 GPU-Util:81% 运行时间:3332 s
- mpirun -np 4 gmx_mpi mdrun -pin on -ntomp 4 -deffnm md -plumed meta.dat
复制代码 GPU-Util:81% 运行时间:3865 s
- gmx_mpi -pin on -ntomp 16 -v -deffnm md -plumed meta.dat
复制代码 GPU-Util:0%-1% 运行时间:---- s 极慢,故取消作业
5 结果汇总
在不进行MetaMD时,最好采用ThreadMPI + OpenMP + CUDA的方式运行作业,具体的tMPI进程数(-ntmpi)、OpenMP线程数(-ntomp)、以及其他参数需根据自己的情况调整。根据笔者经验,这些设置对时间的影响并不大,我在进行MD时的通用命令为
- gmx mdrun -pin on -ntmpi 1 -ntomp $NCORES -v -deffnm $INPUTNAME
复制代码 在进行MetaMD时,采用OpenMPI + OpenMP + CUDA的方式运行作业,具体的MPI进程数(mpirun -np)、OpenMP线程数(-ntomp)根据自己的情况调整,切记一定要加上"-pin on",我在进行MetaMD时的通用命令为
- mpirun -np 1 gmx_mpi -pin on -ntomp $NCORES -v -deffnm $INPUTNAME -plumed $PLUMEDDAT
复制代码
6 讨论
(1) PLUMED在编译时使用了OpenMPI + OpenMP并行的模式,故threadMPI版的GROMACS不能设置多个tMPI进程进行MetaMD,若在编译PLUMED时不开启MPI并行,threadMPI版的GROMACS也不能设置多个tMPI进程进行MetaMD,所以笔者推荐编译OpenMPI + OpenMP版的PLUMED和OpenMPI + OpenMP版的GROMACS。
(2) GROMACS与PLUMED联用时,PLUMED部分在CPU上运行,不在GPU上运行,这是需要更长时间的原因。
(3) OpenMPI + OpenMP版GROMACS运行时往往过多的MPI线程会增加通信时间而拖慢速度,故在单节点运行GROMACS时建议只使用一个MPI进程,但这时GROMACS的输出一小会就会停止,无法看到何时结束任务(也有可能是我编译或者命令有问题)。
(4) OpenMPI版本的GROMACS如果不加"-pin on"模拟会变得奇慢无比,使用htop查看CPU情况,发现调用的CPU总利用率很低,且只有一个核满载工作。
欢迎大家讨论,上面的内容仅针对我的测试体系,目的是给大家一个参考,体系不同,或许并行参数的设置也不同,且其他的MPI的表现笔者没有测试过。
另:COLVARS + GROMACS的运行速度感觉上比PLUMED + GROMACS快很多,也可以考虑使用COLVARS联用计算自由能。
|