6.5. MPI
MPIの概要#
本サービスにおいて標準で利用可能なMPIの情報を記述します。
MPIに関する注意事項
Development Studio MPIはArmシステムのみで利用可能です。Intel MPIはx86システムとGPUシステムで利用できます。
利用方法#
MPIを利用する際は、module
コマンドで利用環境を設定します。module
コマンドを用いると、環境変数(コマンドやヘッダファイル、ライブラリのサーチパス)が自動で設定されます。
Development Studio MPIを使用する場合は、以下のコマンドで利用環境を設定してください。
$ module load development-studio/1.2.39
Intel MPIを使用する場合は、以下のコマンドで利用環境を設定してください。
$ module load mpi/2021.8.0
OpenMPIを使用する場合は、以下のコマンドで利用環境を設定してください。 OpenMPIを利用する際は、ビルドに使用しているIntel compiler version 2023.0.0も併せて環境設定してください。
$ module load compiler/2023.0.0 $ module load openmpi/4.1.4/icc-2023.0.0
MPI処理系ごとの注意事項と実行例#
Intel MPI、Open MPI、MPICH、Platform MPIなど、Development Studio以外のMPI処理系のMPIプログラムを本サービス上で実行する際の注意事項と実行例について説明します。詳細につきましては、Technical Computing Suite オンラインマニュアルで公開されている「エンドユーザ向けガイド」の付録Cもご参照ください。
注意事項#
-
ノードまたは仮想ノード上でMPIプロセスを実行するために、
rsh
、ssh
コマンドの代わりにジョブ運用ソフトウェアが提供するpjrsh
コマンドを使用してください。ただし、Intel MPI (Hydra)
などでmpiexec
プロセスの標準入力を利用した場合、pjrsh
コマンドがMPIプロセスへ標準入力を与えますが、標準入力のデータ量がおよそ8MBを超える場合、rsh
、ssh
コマンドと比べて、転送性能が劣化する可能性があります。このようなときは、mpiexec
プロセスの標準入力を利用するのではなく、各MPIプロセスからファイルで読み込んでください。 -
ジョブに割り当てるノード資源を、以下のように指定してください。
pjsub -L "node=N" ...
-
ホスト名を指定してMPIプログラムを実行する場合は、以下のように実施してください。
a. Armシステムで実行する場合
pjshowip
コマンドを使用してください。pjshowip
コマンドは、ジョブスクリプト内から実行することによって、ジョブに割り当てたノードリスト(ランク番号ごとのIPアドレス)をランク番号ごとに標準出力へ出力します。b. x86システム/GPUシステムで実行する場合
環境変数
PJM_O_NODEINF
を使用してください。 環境変数PJM_O_NODEINF
はジョブ運用ソフトウェアによって設定され、ジョブに割り当てたノードリスト(IPアドレスのリスト)を格納したファイルのパスを示します。 -
MPIジョブを削除する場合は、そのMPI処理系がクリーンアップ処理(各種資源の解放など)をするシグナルを送信してから、ジョブを削除してください。クリーンアップ処理をするシグナルを送信せずにジョブを削除した場合、後続のジョブが実行できないなどの影響をおよぼす可能性があります。 クリーンアップ処理をするシグナルは各MPI処理系の仕様を確認してください。一般的には、シグナル
SIGINT
またはSIGTERM
によりクリーンアップ処理が行われます。
実行例#
MPIプログラムの一般的な実行方法やバージョンによる違いについては、各MPI処理系の仕様を確認してください。
- Intel MPI: Scalable Process Management System(Hydra)を利用する場合
1. 環境変数の設定
Hydraの環境変数を以下のように設定します。
a. I_MPI_HYDRA_BOOTSTRAP=rsh b. I_MPI_HYDRA_BOOTSTRAP_EXEC=/bin/pjrsh c. I_MPI_HYDRA_HOST_FILE="${PJM_O_NODEINF}"
rsh
、ssh
コマンドの代わりにpjrsh
コマンドを使用するようになります。
2. MPIプログラム実行
Intel MPIで作成されたMPIプログラムを実行します。プログラム実行にはmpiexec.hydra
コマンドを利用します。
- [例] プロセス並列のMPIプログラム(a.out)を実行するジョブスクリプト(Hydra を利用する場合)
... export I_MPI_PERHOST=1 export I_MPI_HYDRA_BOOTSTRAP=rsh #1.a. export I_MPI_HYDRA_BOOTSTRAP_EXEC=/bin/pjrsh #1.b. export I_MPI_HYDRA_HOST_FILE="${PJM_O_NODEINF}" #1.c. mpiexec.hydra -n 4 a.out #2. ...
- OpenMPIを利用する場合
1. 環境変数の設定
OpenMPIのMCAパラメータを環境変数として以下のように設定します。
a. OMPI_MCA_plm_rsh_agent="/bin/pjrsh" b. OMPI_MCA_orte_default_hostfile=${PJM_O_NODEINF}
rsh
、ssh
コマンドの代わりにpjrsh
コマンドを使用するようになります。
2. MPIプログラム実行
OpenMPIで作成されたMPIプログラムを実行します。プログラム実行にはmpiexec
コマンドを利用します。
- [例] プロセス並列のMPIプログラム(a.out)を実行するジョブスクリプト
... export OMPI_MCA_plm_rsh_agent="/bin/pjrsh" #1.a. export OMPI_MCA_orte_default_hostfile=${PJM_O_NODEINF} #1.b. mpiexec -n 2 -npernode 1 a.out #2. ...