言わずもがなのMM/MDエンジン. 他にもnamd Amber GENESIS とかMM/MDエンジンは無償で得られるのが多いかな
gromacsのライセンスは version4.6以降は「GNU Lesser General Public License」です
ここでは最新版の GROMACS 2023.1 を取り扱います
bioconda経由でも得られるようで、ほんとコンパイルなしで利用できます. ananocnda/minicondaを作ってconda createで環境を作って
「conda install -c bioconda gromacs」で最新のgromacsが利用できます.
conda経由で namd や amber(ambertools) が組み込められる. relionもcondaでインストール可能です
っがここでは古からのソースから作っていきます.
ソースの取得先は https://manual.gromacs.org/current/download.html
構築環境はこんな感じで
[root@rockylinux9 ~]# cat /etc/redhat-release
Rocky Linux release 9.1 (Blue Onyx)
[root@rockylinux9 ~]# cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX x86_64 Kernel Module 525.116.03 Wed Apr 19 23:43:10 UTC 2023
GCC version: gcc version 11.3.1 20220421 (Red Hat 11.3.1-2) (GCC)
[root@rockylinux9 ~]# nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Mon_Apr__3_17:16:06_PDT_2023
Cuda compilation tools, release 12.1, V12.1.105
Build cuda_12.1.r12.1/compiler.32688072_0
[root@rockylinux9 ~]# nvidia-smi -L
GPU 0: NVIDIA RTX A2000 (UUID: GPU-23cc3ee7-31d3-a068-2f61-5aa00052d084)
[root@rockylinux9 ~]#
っでソース取得
[root@rockylinux9 ~]# mkdir -p /apps/src
[root@rockylinux9 ~]# cd /apps/src/
[root@rockylinux9 src]#
[root@rockylinux9 src]# wget https://ftp.gromacs.org/gromacs/gromacs-2023.1.tar.gz
[root@rockylinux9 src]#
コンパイル要件とかは https://manual.gromacs.org/current/install-guide/index.htmlを参照すると
「GROMACS 2023 series」でのコンパイラは
【2023.x】 【2022.x】 【2021.x】 【2020.x】 【2019.x】
GNU (gcc/libstdc++) 9 GNU (gcc/libstdc++) 7 GNU (gcc/libstdc++) 7 GNU (gcc) 5.1 GNU (gcc) 4.8.1
LLVM (clang/libc++) 7 LLVM (clang/libc++) 7 LLVM (clang/libc++) 5 LLVM (clang) 3.6 LLVM (clang) 3.3
Microsoft (MSVC) 2019 Microsoft (MSVC) 2019 Microsoft (MSVC) 2017 15.7 Microsoft (MSVC) 2017 Microsoft (MSVC) 2017 (C++14 is used)
Intel (icc) 19.1 Intel (icc) 17.0.1 Intel (icc) 17.0.1
cuda121はGCC-12.2対応, cuda118は GCC-11まで
Intel様のコンパイラで古くからあるicc/icpcが外れ、代わりにメインのllvmなコンパイラicx/icpxでコンパイルができるそうな.
ここでの rockylinux9 のGCCは
[root@rockylinux9 ~]# gcc --version
gcc (GCC) 11.3.1 20220421 (Red Hat 11.3.1-2)
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
[root@rockylinux9 ~]#
となるので GCCのバージョンは大丈夫.
っでコンパイルのための追加パッケージを入れます
[root@rockylinux9 ~]# dnf install cmake fftw-devel python-devel -y
doxygen, sphinxはドキュメント作成に必要ですが、プログラムさえあればいいので入れてないです
っで処理を進めます
[root@rockylinux9 src]# tar xf gromacs-2023.1.tar.gz
[root@rockylinux9 src]# cd gromacs-2023.1/
[root@rockylinux9 gromacs-2023.1]# mkdir build; cd build
[root@rockylinux9 build]# cmake .. -DCMAKE_INSTALL_PREFIX=/apps/gromacs-2023.1 -DGMX_GPU=CUDA -DCMAKE_DISABLE_FIND_PACKAGE_MPI=ON -DREGRESSIONTEST_DOWNLOAD=ON
[root@rockylinux9 build]# make ; make ; make ; make check
[root@rockylinux9 build]#
:
:
100% tests passed, 0 tests failed out of 87
Label Time Summary:
GTest = 302.86 sec*proc (81 tests)
IntegrationTest = 245.67 sec*proc (25 tests)
MpiTest = 264.54 sec*proc (19 tests)
QuickGpuTest = 115.45 sec*proc (17 tests)
SlowGpuTest = 307.06 sec*proc (18 tests)
SlowTest = 55.36 sec*proc (13 tests)
UnitTest = 1.83 sec*proc (43 tests)
Total Test time (real) = 427.58 sec
[100%] Built target run-ctest-nophys
[100%] Built target check
[root@rockylinux9 build]# make install
...makeの後に「make check」あるいは「make install」を行うと再度一からmakeしているように見える...なので複数回「make」を行ってから次に進めてます. 往年のsync;sync;syncのように
[root@rockylinux9 build]# cd /apps/gromacs-2023.1/
[root@rockylinux9 gromacs-2023.1]# ls -lF
total 8
drwxr-xr-x. 2 root root 176 Apr 30 23:22 bin/
drwxr-xr-x. 5 root root 4096 Apr 30 23:22 include/
drwxr-xr-x. 4 root root 4096 Apr 30 23:22 lib64/
drwxr-xr-x. 5 root root 45 Apr 30 23:22 share/
[root@rockylinux9 gromacs-2023.1]#
[root@rockylinux9 gromacs-2023.1]# ls -l bin/
total 404
-rwxr-xr-x. 1 root root 3382 Apr 21 22:12 demux.pl
-rwxr-xr-x. 1 root root 118080 Apr 30 23:00 gmx
-rw-r--r--. 1 root root 139480 Apr 21 22:13 gmx-completion.bash
-rw-r--r--. 1 root root 37 Apr 30 23:22 gmx-completion-gmx.bash
-rwxr-xr-x. 1 root root 570 Apr 30 21:26 GMXRC
-rwxr-xr-x. 1 root root 3228 Apr 30 21:26 GMXRC.bash
-rwxr-xr-x. 1 root root 3045 Apr 30 21:26 GMXRC.csh
-rwxr-xr-x. 1 root root 120 Apr 30 21:26 GMXRC.zsh
-rwxr-xr-x. 1 root root 9008 Apr 21 22:12 xplor2gmx.pl
[root@rockylinux9 gromacs-2023.1]#
コンパイルはhttp://manual.gromacs.org/documentation/current/install-guide/index.htmlを参照します。
ここでは計算ノード一台を使って計算を目指すので MPI は有効にしてないです.
複数の計算ノードを使っての計算なら MPI の有効は必須かと.
本来なら「source /apps/gromacs-2023.1/bin/GMXRC」で実行環境の整備が行われますが、ここではいつもの Environment module を使いたいのでmodulefilesを用意してます
ファイルは「/apps/modulefiles/gromacs/2023.1」とします
#%Module
set gromacs /apps/gromacs-2023.1
setenv GMXBIN $gromacs/bin
setenv GMXDATA $gromacs/share/gromacs
setenv GMXLDLIB $gromacs/lib64
setenv GMXMAN $gromacs/share/man
setenv GROMACS_DIR $gromacs
prepend-path PATH $gromacs/bin
prepend-path LD_LIBRARY_PATH $gromacs/lib64
prepend-path MANPATH $gromacs/share/man
prepend-path PKG_CONFIG_PATH $gromacs/lib64/pkgconfig
系の準備は後ほど. 取り合えず動かし方として GROMACSのサイトで提供している Benchmark セットを実行してみたいと思う
場所はこちら https://ftp.gromacs.org/pub/benchmarks/
2023.04時点ではこんな感じ
この中で「ADH_bench_systems.tar.gz」を対象としてみます.
[saber@rockylinux9 ~]$ mkdir -p test/gromacs
[saber@rockylinux9 ~]$ cd test/gromacs/
[saber@rockylinux9 gromacs]$ wget https://ftp.gromacs.org/pub/benchmarks/ADH_bench_systems.tar.gz
[saber@rockylinux9 gromacs]$ tar xf ADH_bench_systems.tar.gz
[saber@rockylinux9 gromacs]$ ls -lF
total 13832
drwxr-xr-x. 6 saber saber 88 Oct 8 2016 ADH/
-rw-r--r--. 1 saber saber 14159933 Sep 24 2020 ADH_bench_systems.tar.gz
[saber@rockylinux9 gromacs]$
[saber@rockylinux9 gromacs]$ cd ADH/
[saber@rockylinux9 ADH]$ ls -l
total 16
drwxr-xr-x. 2 saber saber 4096 Oct 8 2016 adh_cubic
drwxr-xr-x. 2 saber saber 4096 Oct 8 2016 adh_cubic_vsites
drwxr-xr-x. 2 saber saber 4096 Oct 8 2016 adh_dodec
drwxr-xr-x. 2 saber saber 4096 Oct 8 2016 adh_dodec_vsites
[saber@rockylinux9 ADH]$
[saber@rockylinux9 ADH]$ cd adh_cubic
[saber@rockylinux9 adh_cubic]$ ls -l
total 15248
-rw-r--r--. 1 saber saber 9258297 Jul 4 2012 conf.gro
-rw-r--r--. 1 saber saber 706 Oct 8 2016 pme_verlet.mdp
-rw-r--r--. 1 saber saber 712 Oct 8 2016 rf_verlet.mdp
-rw-r--r--. 1 saber saber 1582031 Jul 4 2012 topol_Protein_chain_A.itp
-rw-r--r--. 1 saber saber 1582034 Jul 4 2012 topol_Protein_chain_B.itp
-rw-r--r--. 1 saber saber 1582031 Jul 4 2012 topol_Protein_chain_C.itp
-rw-r--r--. 1 saber saber 1582034 Jul 4 2012 topol_Protein_chain_D.itp
-rw-r--r--. 1 saber saber 1264 Jul 4 2012 topol.top
[saber@rockylinux9 adh_cubic]$
座標情報が入っている「conf.gro」をPyMOLで見てみるとこんな感じ
このフォルダには静電力の計算にPME(Particle-Mesh Ewald)方法(pme_verlet.mdp)か、反応力場(Reaction-Field)方法(rf_verlet.mdp)かで選べるようにしているみたい.
っで計算は下記のようにします
[saber@rockylinux9 adh_cubic]$ module load gromacs/2023.1
[saber@rockylinux9 adh_cubic]$ gmx grompp -f pme_verlet.mdp -o adh_cubic.tpr -p topol.top -c conf.gro
[saber@rockylinux9 adh_cubic]$ ls -l
total 23304
-rw-r--r--. 1 saber saber 8234020 May 1 00:39 adh_cubic.tpr
-rw-r--r--. 1 saber saber 9258297 Jul 4 2012 conf.gro
-rw-r--r--. 1 saber saber 10547 May 1 00:39 mdout.mdp
-rw-r--r--. 1 saber saber 706 Oct 8 2016 pme_verlet.mdp
-rw-r--r--. 1 saber saber 712 Oct 8 2016 rf_verlet.mdp
-rw-r--r--. 1 saber saber 1582031 Jul 4 2012 topol_Protein_chain_A.itp
-rw-r--r--. 1 saber saber 1582034 Jul 4 2012 topol_Protein_chain_B.itp
-rw-r--r--. 1 saber saber 1582031 Jul 4 2012 topol_Protein_chain_C.itp
-rw-r--r--. 1 saber saber 1582034 Jul 4 2012 topol_Protein_chain_D.itp
-rw-r--r--. 1 saber saber 1264 Jul 4 2012 topol.top
[saber@rockylinux9 adh_cubic]$ gmx mdrun -v -s adh_cubic.tpr -o adh_cubic.trr -c adh_cubic.gro -e adh_cubic.edr -g adh_cubic.log
:-) GROMACS - gmx mdrun, 2023.1 (-:
Executable: /apps/gromacs-2023.1/bin/gmx
Data prefix: /apps/gromacs-2023.1
Working dir: /home/saber/test/gromacs/ADH/adh_cubic
Command line:
gmx mdrun -v -s adh_cubic.tpr -o adh_cubic.trr -c adh_cubic.gro -e adh_cubic.edr -g adh_cubic.log
Reading file adh_cubic.tpr, VERSION 2023.1 (single precision)
Changing nstlist from 10 to 80, rlist from 0.9 to 1.035
1 GPU selected for this run.
Mapping of GPU IDs to the 2 GPU tasks in the 1 rank on this node:
PP:0,PME:0
PP tasks will do (non-perturbed) short-ranged interactions on the GPU
PP task will update and constrain coordinates on the GPU
PME tasks will do all aspects on the GPU
Using 1 MPI thread
Using 4 OpenMP threads
starting mdrun 'NADP-DEPENDENT ALCOHOL DEHYDROGENASE in water'
10000 steps, 20.0 ps.
step 2320: timed with pme grid 100 100 100, coulomb cutoff 0.900: 683.4 M-cycles
step 2480: timed with pme grid 84 84 84, coulomb cutoff 1.050: 797.6 M-cycles
step 2640: timed with pme grid 96 96 96, coulomb cutoff 0.919: 702.9 M-cycles
step 2800: timed with pme grid 100 100 100, coulomb cutoff 0.900: 674.4 M-cycles
optimal pme grid 100 100 100, coulomb cutoff 0.900
step 9900, remaining wall clock time: 0 s
Writing final coordinates.
step 10000, remaining wall clock time: 0 s
Core t (s) Wall t (s) (%)
Time: 104.670 26.168 400.0
(ns/day) (hour/ns)
Performance: 66.040 0.363
GROMACS reminds you: "Look, I don't want to compete, so let's divide up physics between us. I'll take auroras and you take the rest of the universe." (Joan Feynman to her brother Richard)
[saber@rockylinux9 adh_cubic]$
[saber@rockylinux9 adh_cubic]$ ls -l
total 35532
-rw-r--r--. 1 saber saber 11436 May 1 00:47 adh_cubic.edr
-rw-r--r--. 1 saber saber 9258297 May 1 00:47 adh_cubic.gro
-rw-r--r--. 1 saber saber 24504 May 1 00:47 adh_cubic.log
-rw-r--r--. 1 saber saber 8234020 May 1 00:47 adh_cubic.tpr
-rw-r--r--. 1 saber saber 9258297 Jul 4 2012 conf.gro
-rw-r--r--. 1 saber saber 10547 May 1 00:47 mdout.mdp
-rw-r--r--. 1 saber saber 706 Oct 8 2016 pme_verlet.mdp
-rw-r--r--. 1 saber saber 712 Oct 8 2016 rf_verlet.mdp
-rw-r--r--. 1 saber saber 3221884 May 1 00:47 state.cpt
-rw-r--r--. 1 saber saber 1582031 Jul 4 2012 topol_Protein_chain_A.itp
-rw-r--r--. 1 saber saber 1582034 Jul 4 2012 topol_Protein_chain_B.itp
-rw-r--r--. 1 saber saber 1582031 Jul 4 2012 topol_Protein_chain_C.itp
-rw-r--r--. 1 saber saber 1582034 Jul 4 2012 topol_Protein_chain_D.itp
-rw-r--r--. 1 saber saber 1264 Jul 4 2012 topol.top
[saber@rockylinux9 adh_cubic]$