このトピックでは、Intel MPI Benchmarks(IMB)と Message Passing Interface(MPI)ライブラリを使用して、Elastic High Performance Computing(E-HPC)クラスタの通信パフォーマンスをテストする方法について説明します。
背景情報
IMB は、さまざまなメッセージ粒度について、HPC クラスタにおけるポイントツーポイント通信とグローバル通信のパフォーマンスを測定するために使用されるソフトウェアアプリケーションです。
MPI は、並列コンピューティング用の標準化されたポータブルなメッセージパッシング標準です。 MPI は複数のプログラミング言語をサポートし、高性能、並行性、移植性、スケーラビリティなどの利点を提供します。
準備
SCC ベースの E-HPC クラスタを作成します。詳細については、「ウィザードを使用してクラスタを作成する」をご参照ください。
以下のパラメータを設定します。
パラメータ
説明
ハードウェア設定
1 つの管理ノードと 2 つの計算ノードで構成される小規模クラスタをデプロイします。 計算ノードとして 8 つ以上の vCPU を持つ Elastic Compute Service(ECS)インスタンスタイプを指定します。 この例では、2 つの ecs.c7.2xlarge インスタンスが使用されています。
ソフトウェア設定
CentOS 7.6 パブリックイメージと PBS スケジューラをデプロイします。
クラスタユーザーを作成します。詳細については、「ユーザーを作成する」をご参照ください。
ユーザーは、クラスタへのログオン、LAMMPS のコンパイル、ジョブの送信に使用されます。 この例では、次の情報を使用してユーザーを作成します。
ユーザー名: mpitest
ユーザーグループ: sudo 権限グループ
ソフトウェアをインストールします。詳細については、「ソフトウェアをインストールする」をご参照ください。
以下のソフトウェアをインストールします。
Intel MPI 2018
Intel MPI Benchmarks 2019
手順 1: クラスタに接続する
次のいずれかの方法を使用してクラスタに接続します。この例では、ユーザー名として mpitest を使用します。 クラスタに接続すると、/home/mpitest
に自動的にログオンします。
E-HPC クライアントを使用してクラスタにログオンする
クラスタのスケジューラは PBS である必要があります。 E-HPC クライアントをダウンロードしてインストールし、クライアントに必要な環境をデプロイしていることを確認してください。 詳細については、「E-HPC クライアントの環境をデプロイする」をご参照ください。
E-HPC クライアントを起動してログオンします。
左側のナビゲーションペインで、[セッション管理] をクリックします。
[セッション管理] ページの右上隅にある [ターミナル] をクリックして、ターミナルウィンドウを開きます。
E-HPC コンソールを使用してクラスタにログオンする
E-HPC コンソール にログオンします。
上部ナビゲーションバーの左上隅で、リージョンを選択します。
左側のナビゲーションペインで、[クラスタ] をクリックします。
[クラスタ] ページで、クラスタを見つけて [接続] をクリックします。
[接続] パネルで、ユーザー名とパスワードを入力し、[SSH 経由で接続] をクリックします。
手順 2: ジョブを送信する
次のコマンドを実行して、IMB.pbs という名前のジョブスクリプトファイルを作成します。
vim IMB.pbs
サンプルスクリプト:
#!/bin/sh #PBS -j oe // 標準出力と標準エラー出力を結合 #PBS -l select=2:ncpus=8:mpiprocs=1 // 2ノードを選択、各ノードで8 vCPUと1 MPIプロセスを使用 export MODULEPATH=/opt/ehpcmodulefiles/ module load intel-mpi/2018 module load intel-mpi-benchmarks/2019 echo "run at the beginning" // 開始時に実行 /opt/intel/impi/2018.3.222/bin64/mpirun -genv I_MPI_DEBUG 5 -np 2 -ppn 1 -host compute000,compute001 /opt/intel-mpi-benchmarks/2019/IMB-MPI1 pingpong > IMB-pingpong # パラメータを実際の構成に置き換えます。
// この例では、テストに 2 つの計算ノードが使用されます。 各ノードは 8 つの vCPU と 1 つの MPI を使用して高性能コンピューティングジョブを実行します。 実際のノード構成に基づいて、
#PBS -l select=2:ncpus=8:mpiprocs=1
パラメータを指定します。要件に基づいて、スクリプト内の
/opt/intel/impi/2018.3.222/bin64/mpirun
コマンドのパラメータを指定します。 以下のパラメータを設定します。-ppn: ノードあたりのプロセス数。
-host: ジョブノードリスト。
-npmin: 実行できる最小プロセス数。
-msglog: セグメント粒度の範囲。
説明/opt/intel-mpi-benchmarks/2019/IMB-MPI1 -h
コマンドを実行して、IMB のパラメータの説明と IMB がサポートする通信モードを表示できます。例:
例 1: N 個のノード間での all-reduce 通信のパフォーマンスをテストします。 各ノードで 2 つのプロセスが開始され、さまざまなメッセージ粒度のメッセージを通信するのにかかる時間が取得されます。
/opt/intel/impi/2018.3.222/bin64/mpirun -genv I_MPI_DEBUG 5 -np <N*2> -ppn 2 -host <node0>,...,<nodeN> /opt/intel-mpi-benchmarks/2019/IMB-MPI1 -npmin 2 -msglog 19:21 allreduce
例 2: N 個のノード間の all-to-all 通信のパフォーマンスをテストします。 各ノードでプロセスが開始され、さまざまな粒度のメッセージを通信するのにかかる時間が取得されます。
/opt/intel/impi/2018.3.222/bin64/mpirun -genv I_MPI_DEBUG 5 -np <N> -ppn 1 -host <node0>,...,<nodeN> /opt/intel-mpi-benchmarks/2019/IMB-MPI1 -npmin 1 -msglog 15:17 alltoall
次のコマンドを実行してジョブを送信します。
qsub imb.pbs
次のコマンド出力が返されます。これは、生成されたジョブ ID が 0.scheduler であることを示しています。
0.manager
手順 3: ジョブ結果を表示する
ジョブの実行状態を表示します。
qstat -x 0.manager
次のようなコードが返されます。
S
列のR
はジョブが実行中であることを示し、S
列のF
はジョブが完了したことを示します。Job id Name User Time Use S Queue ---------------- ---------------- ---------------- -------- - ----- 0.manager imb.pbs mpitest 00:00:04 F workq
ジョブ結果を表示します。
cat /home/mpitest/IMB-pingpong
テストでは次の結果が生成されます。