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 だけで並列計算します。

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をインストールします。
(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をインストールします。

$ 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 は 0 と 2、Quadro K600 の Device ID は 1 だったため、
-gpu_id “00002222”
と引数を指定します (Quadro K600 は計算に使用しない、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