mpitune ユーティリティーの実行時間を軽減する

HPCインテル® MPI ライブラリー

この記事は、インテル® デベロッパー・ゾーンに公開されている「Reducing the runtime of mpitune」(https://software.intel.com/en-us/blogs/2015/11/26/reducing-the-runtime-of-mpitune/) の日本語参考訳です。


インテル® MPI ライブラリーには、インテル® MPI ライブラリー自身の実行パラメーターを最適化するのを支援するツール mpitune が含まれています。mpitune ユーティリティーによって適切なパラメーターを見つけることは利用者には大きな助けとなりますが、広範囲な調査を行うため実行に時間がかかる場合があります。

そのため、mpitune が調査する範囲を合理的な大きさに制限し、ユーザーが必要とするパラメーターのみを対象とするのは、ツールを上手く利用する鍵となります。これは、特に mpitune のアプリケーション固有モードでは重要です。

mpitune の現在の調査範囲を理解するには、mpitune の “スケジュールのみ” モード (-so) でアプリケーションを実行します。

$ mpitune –so –a \“mpirun …\”

出力例:

…
----------------------------------------------------------------------
 # |              Option              |           Test           | S |
----------------------------------------------------------------------
 1|I_MPI_RDMA_TRANSLATION_CACHE       |...the best range options | - |
 2|I_MPI_WAIT_MODE                    |...the best range options | - |
 3|I_MPI_RDMA_SCALABLE_PROGRESS       |...the best range options | - |
 4|I_MPI_EAGER_THRESHOLD              |Tuning thresholds         | - |
 5|I_MPI_INTRANODE_EAGER_THRESHOLD    |Tuning thresholds         | - |
 6|I_MPI_RDMA_EAGER_THRESHOLD         |Tuning thresholds         | - |
 7|I_MPI_DYNAMIC_CONNECTION           |...the best range options | - |
 8|I_MPI_ADJUST_ALLGATHER             |... I_MPI_ADJUST_* family | - |
 9|I_MPI_ADJUST_BARRIER               |... I_MPI_ADJUST_* family | - |
----------------------------------------------------------------------

11'Dec'15 07:13:32 INF | Tuner has finished its work. It was provided by scheduler only limitation.
(チューナーは作業を完了しました。スケジューラーのみ限定で提供されました)

mpitune の全体の実行時間は次のように推測できます:

オプション数 x オプションのパラメーター数 x 反復数 (デフォルトは 3) x アプリケーションの実行時間

オプション毎のパラメーター数は、各オプション毎に異なるため、全体の実行時間を正確に予測するのは容易ではありません。例えば、I_MPI_ADJUST_ALLGATHER オプションは 5 つのパラメーターを持っています (Allgather ルーチンを 5 つの異なるアルゴリズムで実装)。そのため、すべてのオプションの近似として 5 つのパラメーターの平均値を取ります。

上記の例では、9 つのオプションをチューニングし、ターゲット・アプリケーション (9 x 5 x 3) の一度の実行あたりおよそ 135 倍となります。調査範囲を制限しないと、これよりはるかに長くなります。

従って、次の mpitune パラメーターの表は、調査範囲を制限することで実行時間を短縮するのに役立ちます。

パラメーター 効果
–fabric-list / -fl ファブリック数の範囲を限定ほとんどの HPC アプリケーションは単一のファブリック上で実行されるため、最も高速なファブリックが選択されてその他は無視されます。
例:-fl shm:dapl – TCP などのファブリックを無視し、共有メモリーと DAPL のみをチューニングします。
–host-range / -hr 使用する計算ノードの数を定義します。
例:-hr 4:4 – ノードのサブセットだけで始まる代わりに、4 つのノードでのみ実行します。
–perhost-range / -pr 使用するノードあたりのランク数を定義します。
例:-pr 28:28 – 少ないノード数で開始する代わりに、ノードあたり 28 ランクで実行します。
–collectives-only / -co アプリケーション内部の集合操作のみをチューニングします。
–iterations / -i 各ステップの反復数を定義デフォルトでは、設定ごとの反復数は 3 ですが、値を減らすことで mpitune の全体の実行時間を減らすことができます。しかし、反復数を減らすことは、最終結果にノイズの影響を与える可能性が高まります。
–options-set / -os mpitune でチューニングする独自の操作セットを定義します。
例:-os I_MPI_ADJUST_ALLGATHER,I_MPI_WAIT_MODE

高速チューニング

インテル® MPI ライブラリーの実行パラメーターをチューニングには、全く異なる手法を取ることができます。高速チューニングは、インテル® MPI 5.1.1 以降で利用でき、mpitune の実装とは異なる用途に使用できます。実装が異なるため、コマンドラインのパラメーターは mpitune とは異なることに注意してください。

高速チューニングは集合操作のチューニングのみに注目し、デフォルトの集合操作で最低 10% の追加時間が生じる可能性があります。高速チューニングのワークフローを以下に示します。

  1. [Statistics (統計)] を有効にしてターゲット・アプリケーションを一度実行します
  2. [Statistics (統計)] 出力を理解します
  3. ターゲット・アプリケーション内部の集合操作をチューニングするため、インテル® MPI ベンチマークを実行します

3 番目のステップは、ターゲット・アプリケーション内で使用される MPI ランク数とメッセージサイズにのみ適用され、使用される集合操作を再現します。しかし、これはインテル® MPI ベンチマークのパラメーターの実行時間を減少させる目的のみに使用します。

高速チューニングを行うには、’–fast’ フラグを使用します。

$ mpitune –fast on -a \”mpirun …\”

Mpitune のパラメーターとユーティリティーの使い方については、インテル® MPI ライブラリーのインストールで展開されるリファレンス・マニュアルを参照するか、https://software.intel.com/en-us/articles/intel-mpi-library-documentation の MPI Tuner の追加チュートリアルをご覧ください。また、mpitune ユーティリティーのコマンドライン・ヘルプは、fast チューニング・オプションの組み合わせを理解するのに役立ちます。

コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

タイトルとURLをコピーしました