システムの紹介 各種手続き 使い方と注意事項 アプリケーション一覧 講習会情報 FAQ

Gromacs

機能概要

Gromacs は、分子動力学を実行するための汎用性のある計算パッケージです。

利用方法

利用範囲

特になし

利用キュー

すべて

実行方法

Gromacs の実行コマンドは gmx または gmx_mpi です。 コマンド実行前に、module コマンドで環境設定をしてください。

% module load gromacs/モジュール名

現在利用可能なバージョンとそれに対応したモジュール名は以下の通りです。

バージョンモジュール名
2020.42020.4

バッチスクリプトでの実行例(シングルノードでの実行)

シングルノードでの実行の場合は、通常gmxコマンドを利用します。 設定が比較的わかりやすいため、特に理由がなければ、まずはシングルノードでの実行例を参考にジョブを実行するのがおすすめです。

OpenMP + MPI での実行

以下にMD計算に対するバッチスクリプトのサンプルを示します。

#!/bin/csh
#PBS -q APC
#PBS -N title
#PBS -l select=1:ncpus=8:mpiprocs=2

source /etc/profile.d/modules.csh
module load gromacs/xxx   (xxx は、上記のモジュール名を参考にしてください。)

unsetenv OMP_NUM_THREADS
cd $PBS_O_WORKDIR

gmx mdrun -nt 8 -ntmpi 2 -deffnm md

  • -nt オプションは、全スレッド数を指定します。
  • -ntmpi オプションは、MPIプロセス数を指定します。
  • この例では、全スレッド数が8なので、2つのMPIプロセスから4つのOpenMPスレッドが生成されることがわかります。
  • OpenMPスレッド数の指定は -ntomp オプションで可能です。したがって、-nt 8 -ntmpi 2-ntomp 4 -ntmpi 2 としても同じ意味になります。
  • -ntomp を指定する代わりに、環境変数 OMP_NUM_THREADS でその値を設定することも可能です。

OpenMP + MPI + GPU(シングルプロセス) での実行

次にGPUを使ったMD計算に対するバッチスクリプトのサンプルを示します。 なお、先ほどと異なる行のみを表示しています。

#PBS -q APG
#PBS -l select=1:ncpus=8:mpiprocs=4:ngpus=1

gmx mdrun -nt 8 -ntmpi 4 -gpu_id 0 -deffnm md
  • GPUを使用する場合、#PBS -l では ngpus=1を追加してください。
  • GPUを使用する場合、gmx コマンドでは -gpu_id 0を追加してください。

OpenMP + MPI + GPU(複数プロセス)での実行

シングルノードであれば gmx コマンドでよいのですが、GPUで実行されるプロセスは1つになります。 もし、1枚のGPUカード内で複数のプロセスを実行させたい場合には、gmx_mpi コマンドを使います。

#PBS -q APG
#PBS -l select=1:ncpus=6:mpiprocs=2:ngpus=1

mpirun --hostfile $PBS_NODEFILE -np 2 gmx_mpi mdrun -ntomp 3 -gpu_id 0 -deffnm md
  • gmx_mpiを使ったMPIプロセスでの並列化では-ntmpiは利用できません。
  • mpirunコマンド行の見方は、gmx_mpi から最後までを1つの塊とみなし、その数を -npオプションで指定する、という意味になります。
  • 上記はmpirunによって2つのMPIプロセスが生成され、その各MPIプロセスが3つのOpenMPスレッドおよびGPUプロセスを生成します。したがって、OpenMPの全スレッド数は6となります。
  • -np 2なので、1枚のGPUカード内で2プロセスが生成されます。

バッチスクリプトでの実行例(複数ノードでの実行)

ノードをまたぐ、複数ノードでの実行の場合は、gmx_mpiコマンドを利用します。 設定が複雑であり、また性能が必ずしも向上するとは限りません。 本格的に複数ノードでの計算を実行する前に、まずはシングルノードよりも性能が向上することを最初にご確認いただくことをおすすめします。

OpenMP + MPI での実行

まずはmpirunコマンドの行で、利用したいOpenMPスレッド数や全体のMPIプロセス数を検討します。 その結果に応じて、#PBS -l select= での指定内容を検討することになります。

#PBS -q APC
#PBS -l select=3:ncpus=8:mpiprocs=4

mpirun --hostfile $PBS_NODEFILE -np 12 gmx_mpi mdrun -ntomp 2 -deffnm md
  • gmx_mpiを使ったMPIプロセスでの並列化では-ntmpiは利用できません。
  • -ntomp 2より各MPIプロセスが2つのOpenMPスレッドを生成します。
  • -np 12よりMPIプロセスを12生成します。
  • mpirunコマンド行の見方は、gmx_mpi から最後までを1つの塊とみなし、その数を -npオプションで指定する、という意味になります。
  • #PBS -l select= の見方は、ncpus= から最後までを1つの塊とみなし、その数を select=オプションで指定する、という意味になります。 つまり、この例では 3*(ncpus=8:mpiprocs=4)となります。
  • mpiprocs=4とすることで、各ノードに対して4つのMPIプロセスを割り振ります。
  • 全部で12のMPIプロセスが生成されることから、3つのノードが必要なので、select=3となります。

OpenMP + MPI + GPU(複数プロセス)での実行

#PBS -q APG
#PBS -l select=2:ncpus=6:mpiprocs=2:ngpus=1
#PBS -l place=scatter

mpirun --hostfile $PBS_NODEFILE -np 4 gmx_mpi mdrun -ntomp 3 -gpu_id 0 -deffnm md
  • gmx_mpiを使ったMPIプロセスでの並列化では-ntmpiは利用できません。
  • -ntomp 3より各MPIプロセスが3つのOpenMPスレッドを生成します。
  • -np 4よりMPIプロセスを4つ生成します。
  • mpiprocs=2とすることで、各ノードに対して2つのMPIプロセスを割り振ります。
  • 全部で4のMPIプロセスが生成されることから、2つのノードが必要なので、select=2となります。 なお、GPUノードは最大2つまでしか利用できませんので、ngpus=1の指定がある場合、select=では最大でも2となります。
  • -np 4なので、GPUは各ノード当たり(つまり各GPUカードあたり)2プロセスが生成されます。

マニュアル

Gromacs Documentation(公式ホームページ)

関連サイト

Gromacs(公式ホームページ)