本帖最后由 Dempey 于 2025-3-17 08:46 编辑
GROMACS-2025.0原生PLUMED和Colvars对比 注:GROMACS-2025.1已发布,修复了PLUMED的CMake代码bug,编译PLUMED接口只需一次cmake命令即可。
前言
GROMACS在2月11日发布了2025.0版本,此版本更新了原生PLUMED支持(部分功能)、Pytorch产生的神经网络势模拟、残基类型定义CMAP、gmx hbond指定氢键供受体等功能,详细信息查看相应网站。GROMACS在2024版本支持了Colvars,目前Colvars和PLUMED是自由能采样的软件,本文从软件安装开始,测试GROMACS进行metaDynamics(PLUMED)和meta-eABF(Colvars)任务的性能,并对比不同方法对采样结果的影响。
提前声明:本文中计算参数可能设置不合理,欢迎大家一起讨论。
1. 软件安装
1.0 前置软件
我管理的集群使用environment-modules管理软件,已经安装了openMPI、GCC、CUDA、CMake等基础软件。
1.1 FFTW库安装
GROMACS和PLUMED都可以链接FFTW库来提升计算性能,在FFTW官网https://fftw.org/下载3.3.10的压缩包,上传到指定位置。
- # tar -xzv f fftw-3.3.10.tar.gz
- # cd fftw-3.3.10
- # module load gcc openmpi
- # ./configure --prefix=/opt/tool/fftw-3.3.10 --enable-float --enable-shared --enable-mpi --enable-sse --enable-sse2 --enable-avx --enable-avx2 --enable-avx512
- # make -j 20
- # make install
- # make clean
- # ./configure --prefix=/opt/tool/fftw-3.3.10 --enable-shared --enable-mpi --enable-sse2 --enable-avx --enable-avx2 --enable-avx512
- # make -j 20
- # make install
复制代码 注:这里还编译了double和MPI版本的fftw库是因为PLUMED需要double版FFTW,MPI版本还可以为其他软件使用,如CP2K、VASP,一次编译,一劳永逸。Modulefile如下:
- #%Module
- conflict fftw
- set FFTW_HOME /opt/tool/fftw-3.3.10
- prepend-path PATH $FFTW_HOME/bin
- prepend-path LIBRARY_PATH $FFTW_HOME/lib
- prepend-path LD_LIBRARY_PATH $FFTW_HOME/lib
- prepend-path INCLUDE $FFTW_HOME/include
- prepend-path C_INCLUDE_PATH $FFTW_HOME/include
- prepend-path CPLUS_INCLUDE_PATH $FFTW_HOME/include
复制代码
1.2 PLUMED安装
PLUMED压缩包在官方下载网页https://www.plumed.org/download下载,上传到指定位置。
- # tar -xzvf plumed-2.9.3.tgz
- # cd plumed-2.9.3
- # module load gcc openmpi fftw
- # ./configure --prefix=/opt/software/plumed-2.9.3 --enable-mpi --enable-modules=all --enable-fftw
- # make -j 20
- # make install
复制代码 注:这里编译了MPI支持,可供CP2K等程序使用,或使用plumed driver分析轨迹时也可以并行加速。Modulefile如下:
- #%Module
- prereq openmpi/5.0.3
- prereq fftw/3.3.10
- conflict plumed
- set PLUMED_HOME /opt/software/plumed-2.9.3
- prepend-path PATH $PLUMED_HOME/bin
- prepend-path LIBRARY_PATH $PLUMED_HOME/lib
- prepend-path LD_LIBRARY_PATH $PLUMED_HOME/lib
- prepend-path INCLUDE $PLUMED_HOME/include
- prepend-path C_INCLUDE_PATH $PLUMED_HOME/include
- prepend-path CPLUS_INCLUDE_PATH $PLUMED_HOME/include
- setenv PLUMED_KERNEL $PLUMED_HOME/lib/libplumedKernel.so
- set-function _plumed { eval "$(plumed --no-mpi completion 2> /dev/null)" }
- complete bash plumed { -o default -F _plumed }
复制代码
1.3 LibTorch安装
LibTorch是PyTorch的C++前端,在Torch官网https://pytorch.org/get-started/locally/下载压缩包,注意选择Linux-LibTorch-C++/Java-CPU或Linux-LibTorch-C++/Java-CUDA,注意下载cxx11 ABI版本。
解压后移动到相应位置即可。Modulefile如下:
- #%Module
- conflict libtorch
- set LIBTORCH_HOME /opt/tool/libtorch-2.6.0
- prepend-path PATH $LIBTORCH_HOME/bin
- prepend-path LD_LIBRARY_PATH $LIBTORCH_HOME/lib
- setenv Torch_DIR $LIBTORCH_HOME
复制代码 CUDA版本类似,修改LIBTORCH_HOME的位置即可。
1.4 GROMACS安装
由于GROMACS-2025.0的PLUMED的CMake代码存在bug,CMake需要进行两次configuration,下一个版本应该会解决,详见GROMACS用户论坛和GROMACS GitLab。这里给出我的安装步骤:
- CPU版本
- # module load cmake gcc libtorch
- # cmake .. -DCMAKE_INSTALL_PREFIX=/opt/software/gromacs-2025.0 -DCMAKE_PREFIX_PATH=/opt/tool/fftw-3.3.10 -DGMX_USE_PLUMED=ON -DGMX_NNPOT=TORCH
- # cmake .. -DCMAKE_INSTALL_PREFIX=/opt/software/gromacs-2025.0 -DCMAKE_PREFIX_PATH=/opt/tool/fftw-3.3.10 -DGMX_USE_PLUMED=ON -DGMX_NNPOT=TORCH
- # make -j 20
- # make install
复制代码 GPU版本类似,添加对应编译选项即可。
注1:若想编译Torch支持,须声明环境变量Torch_DIR:
- export Torch_DIR=/opt/tool/libtorch-2.6.0
复制代码 注2:在编译阶段,不必指明PLUMED的位置,但在运行模拟时,须指明PLUMED的动态库位置,声明环境变量PLUMED_KERNEL:- export PLUMED_KERNEL=/opt/software/plumed-2.9.3/lib/libplumedKernel.so
复制代码
2. 测试平台
系统:Alma Linux 9.4
CPU:Intel(R) Xeon(R) Silver 4210
GPU:NVIDIA GeForce RTX 4060 Ti (16G显存)
3. 测试1——NANMA
3.1 测试体系
丙氨酸二肽NANMA的构象变化,两个二面角作为CV,COLVARS部分参照NAMD自由能计算教程—1、用eABF和meta-eABF进行多维自由能计算,PLUMED部分根据官网教程例子微调。
力场选用AMBER19SB,水模型是OPC,使用amber的tleap生成力场并用parmed转换成GROMACS格式,总原子数24k。
3.2 纯CPU模拟
因CPU模拟速度较慢,这里每次模拟仅运行10000步,每一组重复5次取平均表现。
- $ gmx mdrun -v -s *.tpr -ntmpi 1 -nsteps 10000
复制代码 34.9522 ns/day
- PLUMED-Well-tempered-metaDynamics:
- $ gmx mdrun -v -s *.tpr -ntmpi 1 -nsteps 10000 -plumed *.dat
复制代码 33.9346 ns/day
- $ gmx mdrun -v -s *.tpr -ntmpi 1 -nsteps 10000
复制代码 33.0652 ns/day
3.3 GPU加速模拟
GPU加速模拟每次模拟运行200000步,每一组重复8次取平均表现。
- $ gmx mdrun -v -s *.tpr -ntmpi 1 -nsteps 200000
复制代码 296.5873 ns/day
- PLUMED-Well-tempered-metaDynamics:
- $ gmx mdrun -v -s *.tpr -ntmpi 1 -nsteps 200000 -plumed *.dat
复制代码 276.8458 ns/day
- $ gmx mdrun -v -s *.tpr -ntmpi 1 -nsteps 200000
复制代码 296.7909 ns/day
3.4 性能测试分析
在无GPU加速时,自由能采样对性能的影响不明显,PLUMED性能下降了2.9%,Colvars性能下降了5.4%;在有GPU加速时,PLUMED性能下降了6.6%,Colvars性能几乎没有下降,甚至略微升高。
无采样时,GPU的利用率在72-74%,PLUMED采样的利用率为67-73%,Colvars的利用率在72-74%,由此可见,在进行自由能采样时Colvars的表现比PLUMED更好。这里对比不明显是因为体系略小,发挥不出GROMACS的优势,GPU没有跑满。
但值得一提的就是使用GROMACS的PLUMED原生接口比PLUMED程序给GROMACS源码打补丁的方式快了不少,但是原生接口还没有实现PLUMED的REMD等功能,可以期待一下,所以:对于常规使用GROMACS+PLUMED进行自由能采样的任务,应该使用新版GROMACS的原生接口。当然,喜欢接受新事物的可以转战Colvars,性能很可观。
3.5 采样结果
meta-eABF(Colvars)和WT-metaD(PLUMED)采样均模拟100 ns,模拟每500步采一次样,得到的自由能图如下:
注意到到利用这两种方法得到的图像不同,再观察一下模拟轨迹:
可以观察到WT-metaD方法对高能区的采样极其不充分,而meta-eABF对整个采样空间的采样都很充分。这表明对于同样的体系,参数设置合理的情况下,meta-eABF比WT-metaD更好收敛,花销更少。或许PLUMED除了WT-metaD外还有更好的采样方法,这里没有过多尝试,因为本文提到的两种增强采样方法是本人最常用的方法。
4. 测试2——新冠病毒受体结合域(RBD)与血管紧张素转化酶2(ACE2)
4.1 测试体系
新冠病毒RBD与ACE2蛋白的结合自由能,选取RBD和ACE2的几何中心距离为CV,使用Colvars进行meta-eABF采样,PLUMED进行Wt-metaD采样。
RCSB数据库6M0J,力场选用AMBER99SB-ILDN,水模型为TIP3P,使用gmx pdb2gmx生成力场,总原子数197k。
4.2 GPU加速模拟
因体系较大,每次模拟100000步,重复8次。
- 无采样:71.8059 ns/day
- PLUMED-Well-tempered-metaDynamics:67.6434 ns/day
- Colvars-meta-eABF:72.9930 ns/day
4.3 性能测试分析
在对稍大体系进行模拟时,无采样时GROMACS的GPU利用率可以达到97-99%,使用PLUMED增强采样时利用率在89-98%间浮动,而使用Colvars增强采样时利用率基本不变。使用PLUMED增强采性能下降5.7%,但使用Colvars基本无影响。
5. 总结
- GROMACS-2025.0版本CMake代码存在bug,若想编译PLUMED接口,需要进行两次cmake configuration。
- 对于指定集合变量的自由能采样方法meta-eABF(Colvars)和WT-metaD(PLUMED),meta-eABF表现更好(我个人也赞同fhh2626的私货:我个人认为在任何情况下都可以使用meta-eABF代替eABF和metadynamics。(NAMD自由能计算教程—1、用eABF和meta-eABF进行多维自由能计算)),且GROMACS使用Colvars几乎没有性能损失。
- 除了需要用PLUMED做REMD,其他情况都可以使用GROMACS的原生PLUMED接口与PLUMED联用,性能损失最小。
6. 相关文件
本测试所用Colvars和PLUMED配置文件见附件。若需要其他文件可以通过私信或邮件向我要。
pmf-test.tar.gz
(692 Bytes, 下载次数 Times of downloads: 62)
|