OS が CentOS 6.5 で Tesla 20 が2枚刺さったやや高性能な linuxマシンに GROMACS 5.1.2 をインストールする機会があった(2016年2月の情報)ので手順をメモします。インストールした linuxマシンのスペックは以下の通りです。
OS: CentOS 6.5 64bit
CPU: Xeon(R) E5-2697 v2 @ 2.70GHz x 2 (24core 48thread)
GPU: NVIDIA Tesla K20 (5GB Memory 2496 CUDA core) x 2
Memory: 64GB
Compiler: gcc 4.4.7
ここでは、最終的に、GROMACS の single precision版で、openmpi と CUDA でインストールした版と、openmpi だけでインストールした版の2通りでインストールします。前者は、MPI + GPU で並列計算し、後者は、MPI だけで並列計算します。MPI は 1 ノードなので、thread-MPI とします。
cmake の準備
初めに、cmake のバージョンが古い場合は、cmake の最新版を予めインストールしておきます(cmakeをインストールしてない場合は新規インストールする)。その際に、以下のように一回 cmake を uninstallしてからインストールし直しました。今回は、ver.2.6-patch 4 —> ver.2.8.12.2 にしました。
(以下すべて、$ はユーザ領域でユーザ権限で実行、#はroot権限で実行。ここら辺は管理方針による。)
$ cmake --version
cmake version 2.6-patch 4
# yum remove cmake
# yum install cmake
# cmake --version
cmake version 2.8.12.2
cmake を updateしないで、一回 uninstallした理由は、cmake を以下のようにアップデートする方法では、cmake の
-DCMAKE_INSTALL_PREFIX などのパス設定が有効にならない不具合が生じたためです。
# yum update cmake
install openmpi by gcc
openmpi-1.10.2.tar.gz をダウンロード解凍してから、以下のコマンドを実行して、openmpi を gcc によりコンパイルしてインストールします。
$ cd openmpi-1.10.2
$ ./configure --enable-static --prefix=/opt/openmpi-1.10.2.gcc
CC=gcc CXX=g++ F77=gfortran FC=gfortran
$ make
$ su
# make install
(prefix で指定するインストール先のパスは適当に置き替えてください。)
install fftw by gcc & openmpi
fftw-3.3.4.tar.gz をダウンロード解凍してから、以下のコマンドを実行して、gcc, gfortran, openmpi で fftw をコンパイルしてインストール します。
$ cd fftw-3.3.4
$ export LD_LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/4.4.7:$LD_LIBRARY_PATH
$ export LD_LIBRARY_PATH=/opt/openmpi-1.10.2.gcc/lib:$LD_LIBRARY_PATH
$ ./configure --prefix=/work/app/fftw-3.3.4.openmpi.gcc CC=gcc CXX=g++
F77=gfortran FC=gfortran --enable-mpi --enable-threads --enable-sse2
--enable-openmp --enable-static --enable-shared --with-g77-wrappers
MPICC=/opt/openmpi-1.10.2.gcc/bin/mpicc
LDFLAGS=-L/opt/openmpi-1.10.2.gcc/lib
CPPFLAGS=-I/opt/openmpi-1.10.2.gcc/include
$ make
$ su
# make install
# make clean
# exit
$ ./configure --prefix=/work/app/fftw-3.3.4.openmpi.gcc CC=gcc CXX=g++
F77=gfortran FC=gfortran --enable-mpi --enable-threads --enable-sse2
--enable-openmp --enable-static --enable-shared --with-g77-wrappers
MPICC=/opt/openmpi-1.10.2.gcc/bin/mpicc
LDFLAGS=-L/opt/openmpi-1.10.2.gcc/lib
CPPFLAGS=-I/opt/openmpi-1.10.2.gcc/include
--enable-single
$ make
$ su
# make install
GROMACS の single precision版 を openmpi と CUDA でインストール
gromacs-5.1.2.tar.gz をダウンロード解凍してから、以下のコマンドを実行して、MPI + GPU で並列計算する GROMACSをインストールします。MPI は 1 ノードなので、thread-MPI とします。
(CUDA6.0 を予めインストールしてますが、この手順については省略します。)
$ cd gromacs-5.1.2
$ mkdir b4
$ cd b4
$ export LDFLAGS="-L/work/app/fftw-3.3.4.openmpi.gcc/lib"
$ export CPPFLAGS="-I/work/app/fftw-3.3.4.openmpi.gcc/include"
$ export LD_LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/4.4.7:$LD_LIBRARY_PATH
$ export LD_LIBRARY_PATH=/opt/openmpi-1.10.2.gcc/lib:$LD_LIBRARY_PATH
$ cmake ../ -DCMAKE_C_COMPILER=/opt/openmpi-1.10.2.gcc/bin/mpicc
-DCMAKE_CXX_COMPILER=/opt/openmpi-1.10.2.gcc/bin/mpicxx
-DGMX_THREAD_MPI=ON -DGMX_SIMD=AVX_256 -DGMX_DOUBLE=OFF -DGMX_OPENMP=ON -DGMX_GPU=ON
-DCMAKE_INSTALL_PREFIX=/work/app/gromacs-5.1.2.openmpi.gcc.gpu
-DBUILD_SHARED_LIBS=OFF -DGMX_PREFER_STATIC_LIBS=ON -DGMX_FFT_LIBRARY=FFTW3
-DCMAKE_PREFIX_PATH=/work/app/fftw-3.3.4.openmpi.gcc
$ make
$ su
# make install
GROMACS の single precision版 を openmpi だけでインストール
以下のコマンドを実行して、MPI だけで並列計算する GROMACSをインストールします。MPI は 1 ノードなので、thread-MPI とします。
$ cd gromacs-5.1.2
$ mkdir b2
$ cd b2
$ export LDFLAGS="-L/work/app/fftw-3.3.4.openmpi.gcc/lib"
$ export CPPFLAGS="-I/work/app/fftw-3.3.4.openmpi.gcc/include"
$ export LD_LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/4.4.7:$LD_LIBRARY_PATH
$ export LD_LIBRARY_PATH=/opt/openmpi-1.10.2.gcc/lib:$LD_LIBRARY_PATH
$ cmake ../ -DCMAKE_C_COMPILER=/opt/openmpi-1.10.2.gcc/bin/mpicc
-DCMAKE_CXX_COMPILER=/opt/openmpi-1.10.2.gcc/bin/mpicxx -DGMX_THREAD_MPI=ON
-DGMX_SIMD=AVX_256 -DGMX_DOUBLE=OFF -DGMX_OPENMP=ON -DGMX_GPU=OFF
-DCMAKE_INSTALL_PREFIX=/work/app/gromacs-5.1.2.openmpi.gcc
-DBUILD_SHARED_LIBS=OFF -DGMX_PREFER_STATIC_LIBS=ON -DGMX_FFT_LIBRARY=FFTW3
-DCMAKE_PREFIX_PATH=/work/app/fftw-3.3.4.openmpi.gcc
$ make
$ su
# make install
MPI + GPU 版 GROMACS の実行例
実行コマンドは以下の通り。ここでは、GROMACSによるMD計算実行に必要な、tpr file は、npt.tpl として作成済とします。
$ source /work/app/gromacs-5.1.2.openmpi.gcc.gpu/bin/GMXRC
$ gmx mdrun -ntmpi 8 -gpu_id 00002222 -deffnm npt
インストールしたマシンはGPUボードとして、計算用の NVIDIA Tesla K20 が2枚と、ディスプレイ表示用の NVIDIA Quadro K600 が1枚の合計3枚が実装されてましたが、そのうち Tesla K20 の Device ID (論理ID) は 0 と 2、Quadro K600 の Device ID (論理ID) は 1 だったため、
-gpu_id 00002222
と引数を指定します (Quadro K600 は計算に使用しない、thread-MPI 8 並列なので8個分)。
このとき、GROMACS は以下の実行時の log の通り、MPI、OpenMP、GPU を使って並列計算を実行します。
Using 8 MPI threads
Using 6 OpenMP threads per tMPI thread
2 GPUs user-selected for this run.
Mapping of GPU IDs to the 8 PP ranks in this node: 0,0,0,0,2,2,2,2
MPI 版 GROMACS の実行例
実行コマンドは以下の通り。ここでは、GROMACSによるMD計算実行に必要な、tpr file は、npt.tpl として作成済とします。
$ source /work/app/gromacs-5.1.2.openmpi.gcc/bin/GMXRC
$ gmx mdrun -deffnm npt
このとき、GROMACS は、インストールしたマシンで以下の実行時の log の通り、GPU を使わず MPI だけで並列計算を実行します。
Using 48 MPI threads
Using 1 OpenMP thread per tMPI thread