0. 概要

オープンソースのMPI実装である OpenMPI は、 Modular Component Architecture (以降 MCA と呼称します。)を採用することで、ビルド時に組み込むコンポーネントを介して集合通信を含む多彩な機能を提供し、この MCA パラメータにはMPI集合通信性能に影響するものがあります。

また OpenMPI は、高帯域・低遅延のMPIプロセス間通信を実現するためにその通信フレームワークに UCX を採用し、この UCX のパラメータにもMPI集合通信性能に影響するパラメータが存在します。

またMPI集合通信は、ノード内並列では実質的にメモリコピーとなるため、メモリ性能に影響するMPIプロセスのコア割当てや NUMA nodes per socket (以降 NPS と呼称します。)もその性能に影響します。

以上を踏まえて本パフォーマンス関連Tipsは、HPCワークロード向けベアメタルシェイプ BM.Optimized3.36 に於ける OpenMPI のMPI集合通信性能にフォーカスし、以下の 計測条件 を組合せたテストケース毎に以下の 実行時パラメータ を変えてその性能を Intel MPI Benchmarks で計測し、最適な 実行時パラメータ の組み合わせを導きます。

[計測条件]

  • ノード当たりMPIプロセス数 : 8163236
  • ノード数 : 12 (近日公開予定)・ 4 (近日公開予定)・ 8 (近日公開予定)・ 16 (近日公開予定)
  • MPI集合通信関数 : AlltoallAllgatherAllreduce

[実行時パラメータ]

  • UCX_RNDV_THRESHauto16kb32kb64kb128kb (※1)
  • coll_hcoll_enable01 (※2)
  • MPIプロセス分割方法 : ブロック分割・サイクリック分割(※3)
  • NPS1 (以降 NPS1 と呼称します。)・ 2 (以降 NPS2 と呼称します。)(※4)

※1) UCX のパラメータで、詳細は OCI HPCパフォーマンス関連情報OpenMPIのMPI通信性能に影響するパラメータとその関連Tips3-6. UCX_RNDV_THRESH を参照してください。
※2) MCA のパラメータで、詳細は OCI HPCパフォーマンス関連情報OpenMPIのMPI通信性能に影響するパラメータとその関連Tips3-1. coll_hcoll_enable を参照してください。
※3)NUMAノードに対するMPIプロセスの分割方法で、詳細は OCI HPCパフォーマンス関連情報パフォーマンスを考慮したプロセス・スレッドのコア割当て指定方法 を参照してください。
※4)NPS の設定方法は、 OCI HPCパフォーマンス関連情報パフォーマンスに関連するベアメタルインスタンスのBIOS設定方法 を参照してください。

また本パフォーマンス関連Tipsの検証は、以下の実行環境で実施しています。

[実行環境]

※5)SMT の設定方法は、 OCI HPCパフォーマンス関連情報パフォーマンスに関連するベアメタルインスタンスのBIOS設定方法 を参照してください。
※6)OCI HPCテクニカルTips集クラスタネットワーキングイメージの選び方1. クラスタネットワーキングイメージ一覧 のイメージ No.12 です。
※7) OCI HPCテクニカルTips集Slurm環境での利用を前提とするUCX通信フレームワークベースのOpenMPI構築方法 に従って構築された OpenMPI です。
※8) OCI HPCパフォーマンス関連情報Intel MPI Benchmarks実行方法1. OpenMPIでIntel MPI Benchmarksを実行する場合 に従って構築された Intel MPI Benchmarks です。

また Intel MPI Benchmarks は、 numactl コマンドを介して以下の実行時オプションを指定して起動し、

[Alltoall]

$ numactl -l IMB-MPI1 -msglog 0:25 -mem 2.3G -off_cache 39,64 -npmin num_of_procs alltoall

[Allgather]

$ numactl -l IMB-MPI1 -msglog 0:25 -mem 2.3G -off_cache 39,64 -npmin num_of_procs allgather

[Allreduce]

$ numactl -l IMB-MPI1 -msglog 0:30 -mem 2.3G -off_cache 39,64 -npmin num_of_procs allreduce

1種類の計測につき5回計測してその最大値と最小値を除く3回の計測結果の算術平均をその結果とします。

以降では、以下 計測条件 の順に解説します。

  1. 1ノード8 MPIプロセス
  2. 1ノード16 MPIプロセス
  3. 1ノード32 MPIプロセス
  4. 1ノード36 MPIプロセス

1. 1ノード8 MPIプロセス

1-0. 概要

本章は、1ノードに8 MPIプロセスを割当てる場合の最適な 実行時パラメータ の組み合わせを、MPI集合通信関数ごとに検証します。

下表は、MPI集合通信関数毎の最適な UCX_RNDV_THRESH を示しており、この設定値を使用することによりデフォルト値の auto に対する性能向上が見られます。
特に Alltoall は8KBから128KB、 Allreduce は32KBから16MBのメッセージサイズに於いて、性能が向上します。

MPI集合通信関数 UCX_RNDV_THRESH
Alltoall 32kb
Allgather 64kb
Allreduce 128kb

HCOLL 使用の有無は、以下の傾向がみられます。

  • Alltoall
    • 128Bまでのメッセージサイズで使用した場合が使用しない場合に対しておおむね優位
  • Allgather
    • 32Bから512Bのメッセージサイズで使用した場合が使用しない場合に対して優位
    • 8KBから32KBのメッセージサイズで使用しない場合が使用した場合に対して優位
  • Allreduce
    • 32Bから4KBのメッセージサイズで使用した場合が使用しない場合に対して優位
    • 32MBから1GBのメッセージサイズで使用した場合が使用しない場合に対して優位

NPS とMPIプロセス分割方法は、その違いによる有意な差はみられません。

1-1. Alltoall

以下のグラフは、 UCX_RNDV_THRESH を振ったときの Alltoall の結果を、 NPS とMPIプロセス分割方法の各組合せ毎に示しています。 coll_hcoll_enable は、ここでは 1 としています。

Alltoall 1 node 8 processes NPS1 Block

Alltoall 1 node 8 processes NPS1 Cyclic

Alltoall 1 node 8 processes NPS2 Block

Alltoall 1 node 8 processes NPS2 Cyclic

以上より、 UCX_RNDV_THRESH32kb とした場合が最も性能が良いと判断してこれを固定、メッセージサイズをSmall・Medium・Medium Large・Largeの範囲に分けて NPS 、MPIプロセス分割方法、及び HCOLL 使用の有無を比較したものが以下のグラフです。
なお HCOLL 使用の有無は、 NPS1 とブロック分割の組み合わせのみ使用する場合と使用しない場合をグラフにプロットし、それ以外は使用する場合のみグラフにプロットしています。

Alltoall 1 node 8 processes Small message

Alltoall 1 node 8 processes Medium message

Alltoall 1 node 8 processes Medium Large message

Alltoall 1 node 8 processes Large message

1-2. Allgather

以下のグラフは、 UCX_RNDV_THRESH を振ったときの Allgather の結果を、 NPS とMPIプロセス分割方法の各組合せ毎に示しています。 coll_hcoll_enable は、ここでは 1 としています。

Allgather 1 node 8 processes NPS1 Block

Allgather 1 node 8 processes NPS1 Cyclic

Allgather 1 node 8 processes NPS2 Block

Allgather 1 node 8 processes NPS2 Cyclic

以上より、 UCX_RNDV_THRESH64kb とした場合が最も性能が良いと判断してこれを固定、メッセージサイズをSmall・Medium・Medium Large・Largeの範囲に分けて NPS 、MPIプロセス分割方法、及び HCOLL 使用の有無を比較したものが以下のグラフです。
なお HCOLL 使用の有無は、 NPS1 とブロック分割の組み合わせのみ使用する場合と使用しない場合をグラフにプロットし、それ以外は使用する場合のみグラフにプロットしています。

Allgather 1 node 8 processes Small message

Allgather 1 node 8 processes Medium message

Allgather 1 node 8 processes Medium Large message

Allgather 1 node 8 processes Large message

1-3. Allreduce

以下のグラフは、 UCX_RNDV_THRESH を振ったときの Allreduce の結果を、 NPS とMPIプロセス分割方法の各組合せ毎に示しています。 coll_hcoll_enable は、ここでは 1 としています。

Allreduce 1 node 8 processes NPS1 Block

Allreduce 1 node 8 processes NPS1 Cyclic

Allreduce 1 node 8 processes NPS2 Block

Allreduce 1 node 8 processes NPS2 Cyclic

以上より、 UCX_RNDV_THRESH128kb とした場合が最も性能が良いと判断してこれを固定、メッセージサイズをSmall・Medium・Medium Large・Largeの範囲に分けて NPS 、MPIプロセス分割方法、及び HCOLL 使用の有無を比較したものが以下のグラフです。
なお HCOLL 使用の有無は、 NPS1 とブロック分割の組み合わせのみ使用する場合と使用しない場合をグラフにプロットし、それ以外は使用する場合のみグラフにプロットしています。

Allreduce 1 node 8 processes Small message

Allreduce 1 node 8 processes Medisum message

Allreduce 1 node 8 processes Medisum Large message

Allreduce 1 node 8 processes Large message


2. 1ノード16 MPIプロセス

2-0. 概要

本章は、1ノードに16 MPIプロセスを割当てる場合の最適な 実行時パラメータ の組み合わせを、MPI集合通信関数ごとに検証します。

下表は、MPI集合通信関数毎の最適な UCX_RNDV_THRESH を示しており、この設定値を使用することによりデフォルト値の auto に対する性能向上が見られます。
特に Alltoall は8KBから128KB、 Allreduce は64KBから16MBのメッセージサイズに於いて、性能が向上します。

MPI集合通信関数 UCX_RNDV_THRESH
Alltoall 32kb
Allgather 32kb
Allreduce 128kb

HCOLL 使用の有無は、以下の傾向がみられます。

  • Alltoall
    • 512Bまでのメッセージサイズで使用した場合が使用しない場合に対して優位
  • Allgather
    • 使用しない場合は8KBのメッセージサイズに特異点が発生
  • Allreduce
    • 4KBまでのメッセージサイズで使用した場合が使用しない場合に対して優位
    • 32MBから1GBのメッセージサイズで使用した場合が使用しない場合に対して優位

NPS とMPIプロセス分割方法は、以下の傾向がみられます。

  • Alltoall
    • 16MBから32MBのメッセージサイズで NPS1NPS2 に対して優位

2-1. Alltoall

以下のグラフは、 UCX_RNDV_THRESH を振ったときの Alltoall の結果を、 NPS とMPIプロセス分割方法の各組合せ毎に示しています。 coll_hcoll_enable は、ここでは 1 としています。

Alltoall 1 node 16 processes NPS1 Block

Alltoall 1 node 16 processes NPS1 Cyclic

Alltoall 1 node 16 processes NPS2 Block

Alltoall 1 node 16 processes NPS2 Cyclic

以上より、 UCX_RNDV_THRESH32kb とした場合が最も性能が良いと判断してこれを固定、メッセージサイズをSmall・Medium・Medium Large・Largeの範囲に分けて NPS 、MPIプロセス分割方法、及び HCOLL 使用の有無を比較したものが以下のグラフです。
なお HCOLL 使用の有無は、 NPS1 とブロック分割の組み合わせのみ使用する場合と使用しない場合をグラフにプロットし、それ以外は使用する場合のみグラフにプロットしています。

Alltoall 1 node 16 processes Small message

Alltoall 1 node 16 processes Medium message

Alltoall 1 node 16 processes Medium Large message

Alltoall 1 node 16 processes Large message

2-2. Allgather

以下のグラフは、 UCX_RNDV_THRESH を振ったときの Allgather の結果を、 NPS とMPIプロセス分割方法の各組合せ毎に示しています。 coll_hcoll_enable は、ここでは 1 としています。

Allgather 1 node 16 processes NPS1 Block

Allgather 1 node 16 processes NPS1 Cyclic

Allgather 1 node 16 processes NPS2 Block

Allgather 1 node 16 processes NPS2 Cyclic

以上より、 UCX_RNDV_THRESH32kb とした場合が最も性能が良いと判断してこれを固定、メッセージサイズをSmall・Medium・Medium Large・Largeの範囲に分けて NPS 、MPIプロセス分割方法、及び HCOLL 使用の有無を比較したものが以下のグラフです。
なお HCOLL 使用の有無は、 NPS1 とブロック分割の組み合わせのみ使用する場合と使用しない場合をグラフにプロットし、それ以外は使用する場合のみグラフにプロットしています。

Allgather 1 node 16 processes Small message

Allgather 1 node 16 processes Medium message

Allgather 1 node 16 processes Medium Large message

Allgather 1 node 16 processes Large message

2-3. Allreduce

以下のグラフは、 UCX_RNDV_THRESH を振ったときの Allreduce の結果を、 NPS とMPIプロセス分割方法の各組合せ毎に示しています。 coll_hcoll_enable は、ここでは 1 としています。

Allreduce 1 node 16 processes NPS1 Block

Allreduce 1 node 16 processes NPS1 Cyclic

Allreduce 1 node 16 processes NPS2 Block

Allreduce 1 node 16 processes NPS2 Cyclic

以上より、 UCX_RNDV_THRESH128kb とした場合が最も性能が良いと判断してこれを固定、メッセージサイズをSmall・Medium・Medium Large・Largeの範囲に分けて NPS 、MPIプロセス分割方法、及び HCOLL 使用の有無を比較したものが以下のグラフです。
なお HCOLL 使用の有無は、 NPS1 とブロック分割の組み合わせのみ使用する場合と使用しない場合をグラフにプロットし、それ以外は使用する場合のみグラフにプロットしています。

Allreduce 1 node 16 processes Small message

Allreduce 1 node 16 processes Medisum message

Allreduce 1 node 16 processes Medisum Large message

Allreduce 1 node 16 processes Large message


3. 1ノード32 MPIプロセス

3-0. 概要

本章は、1ノードに32 MPIプロセスを割当てる場合の最適な 実行時パラメータ の組み合わせを、MPI集合通信関数ごとに検証します。

下表は、MPI集合通信関数毎の最適な UCX_RNDV_THRESH を示しており、この設定値を使用することによりデフォルト値の auto に対する性能向上が見られます。
特に Alltoall は8KBから512KB、 Allreduce は128KBから16MBのメッセージサイズに於いて、性能が向上します。

MPI集合通信関数 UCX_RNDV_THRESH
Alltoall 16kb
Allgather 16kb
Allreduce 128kb

HCOLL 使用の有無は、以下の傾向がみられます。

  • Alltoall
    • 1KBまでのメッセージサイズで使用した場合が使用しない場合に対しておおむね優位
  • Allgather
    • 2KBから8KBまでのメッセージサイズで使用しない場合が使用した場合に対して優位
  • Allreduce
    • 32Bから4KBまでのメッセージサイズで使用した場合が使用しない場合に対して優位
    • 32MBから1GBまでのメッセージサイズで使用した場合が使用しない場合に対して優位

NPS とMPIプロセス分割方法は、以下の傾向がみられます。

  • Alltoall
    • 2MBから32MBまでのメッセージサイズで NPS1NPS2 に対して優位
  • Allgather
    • 32MBメッセージサイズでブロック分割がサイクリック分割に対して優位

3-1. Alltoall

以下のグラフは、 UCX_RNDV_THRESH を振ったときの Alltoall の結果を、 NPS とMPIプロセス分割方法の各組合せ毎に示しています。 coll_hcoll_enable は、ここでは 1 としています。

Alltoall 1 node 32 processes NPS1 Block

Alltoall 1 node 32 processes NPS1 Cyclic

Alltoall 1 node 32 processes NPS2 Block

Alltoall 1 node 32 processes NPS2 Cyclic

以上より、 UCX_RNDV_THRESH16kb とした場合が最も性能が良いと判断してこれを固定、メッセージサイズをSmall・Medium・Medium Large・Largeの範囲に分けて NPS 、MPIプロセス分割方法、及び HCOLL 使用の有無を比較したものが以下のグラフです。
なお HCOLL 使用の有無は、 NPS1 とブロック分割の組み合わせのみ使用する場合と使用しない場合をグラフにプロットし、それ以外は使用する場合のみグラフにプロットしています。

Alltoall 1 node 32 processes Small message

Alltoall 1 node 32 processes Medium message

Alltoall 1 node 32 processes Medium Large message

Alltoall 1 node 32 processes Large message

3-2. Allgather

以下のグラフは、 UCX_RNDV_THRESH を振ったときの Allgather の結果を、 NPS とMPIプロセス分割方法の各組合せ毎に示しています。 coll_hcoll_enable は、ここでは 1 としています。

Allgather 1 node 32 processes NPS1 Block

Allgather 1 node 32 processes NPS1 Cyclic

Allgather 1 node 32 processes NPS2 Block

Allgather 1 node 32 processes NPS2 Cyclic

以上より、 UCX_RNDV_THRESH16kb とした場合が最も性能が良いと判断してこれを固定、メッセージサイズをSmall・Medium・Medium Large・Largeの範囲に分けて NPS 、MPIプロセス分割方法、及び HCOLL 使用の有無を比較したものが以下のグラフです。
なお HCOLL 使用の有無は、 NPS1 とブロック分割の組み合わせのみ使用する場合と使用しない場合をグラフにプロットし、それ以外は使用する場合のみグラフにプロットしています。

Allgather 1 node 32 processes Small message

Allgather 1 node 32 processes Medium message

Allgather 1 node 32 processes Medium Large message

Allgather 1 node 32 processes Large message

3-3. Allreduce

以下のグラフは、 UCX_RNDV_THRESH を振ったときの Allreduce の結果を、 NPS とMPIプロセス分割方法の各組合せ毎に示しています。 coll_hcoll_enable は、ここでは 1 としています。

Allreduce 1 node 32 processes NPS1 Block

Allreduce 1 node 32 processes NPS1 Cyclic

Allreduce 1 node 32 processes NPS2 Block

Allreduce 1 node 32 processes NPS2 Cyclic

以上より、 UCX_RNDV_THRESH128kb とした場合が最も性能が良いと判断してこれを固定、メッセージサイズをSmall・Medium・Medium Large・Largeの範囲に分けて NPS 、MPIプロセス分割方法、及び HCOLL 使用の有無を比較したものが以下のグラフです。
なお HCOLL 使用の有無は、 NPS1 とブロック分割の組み合わせのみ使用する場合と使用しない場合をグラフにプロットし、それ以外は使用する場合のみグラフにプロットしています。

Allreduce 1 node 32 processes Small message

Allreduce 1 node 32 processes Medisum message

Allreduce 1 node 32 processes Medisum Large message

Allreduce 1 node 32 processes Large message


4. 1ノード36 MPIプロセス

4-0. 概要

本章は、1ノードに36 MPIプロセスを割当てる場合の最適な 実行時パラメータ の組み合わせを、MPI集合通信関数ごとに検証します。

下表は、MPI集合通信関数毎の最適な UCX_RNDV_THRESH を示しており、この設定値を使用することによりデフォルト値の auto に対する性能向上が見られます。
特に Alltoall は8KBから256KB、 Allreduce は64KBから16MBのメッセージサイズに於いて、性能が向上します。

MPI集合通信関数 UCX_RNDV_THRESH
Alltoall 16kb
Allgather 16kb
Allreduce 128kb

HCOLL 使用の有無は、以下の傾向がみられます。

  • Alltoall
    • 1KBまでのメッセージサイズで使用した場合が使用しない場合に対しておおむね優位
    • 256KBから2MBまでのメッセージサイズで使用しない場合が使用した場合に対して優位
  • Allgather
    • 1KBまでのメッセージサイズで使用した場合が使用しない場合に対して優位
  • Allreduce
    • 4KBまでのメッセージサイズで使用した場合が使用しない場合に対して優位
    • 8MBから1GBまでのメッセージサイズで使用した場合が使用しない場合に対して優位

NPS とMPIプロセス分割方法は、以下の傾向がみられます。

  • Allgather
    • 32MBメッセージサイズでブロック分割がサイクリック分割に対して優位
  • Allreduce
    • 1MBから8MBのメッセージサイズで NPS1NPS2 に対して優位

4-1. Alltoall

以下のグラフは、 UCX_RNDV_THRESH を振ったときの Alltoall の結果を、 NPS とMPIプロセス分割方法の各組合せ毎に示しています。 coll_hcoll_enable は、ここでは 1 としています。

Alltoall 1 node 36 processes NPS1 Block

Alltoall 1 node 36 processes NPS1 Cyclic

Alltoall 1 node 36 processes NPS2 Block

Alltoall 1 node 36 processes NPS2 Cyclic

以上より、 UCX_RNDV_THRESH16kb とした場合が最も性能が良いと判断してこれを固定、メッセージサイズをSmall・Medium・Medium Large・Largeの範囲に分けて NPS 、MPIプロセス分割方法、及び HCOLL 使用の有無を比較したものが以下のグラフです。
なお HCOLL 使用の有無は、 NPS1 とブロック分割の組み合わせのみ使用する場合と使用しない場合をグラフにプロットし、それ以外は使用する場合のみグラフにプロットしています。

Alltoall 1 node 36 processes Small message

Alltoall 1 node 36 processes Medium message

Alltoall 1 node 36 processes Medium Large message

Alltoall 1 node 36 processes Large message

4-2. Allgather

以下のグラフは、 UCX_RNDV_THRESH を振ったときの Allgather の結果を、 NPS とMPIプロセス分割方法の各組合せ毎に示しています。 coll_hcoll_enable は、ここでは 1 としています。

Allgather 1 node 36 processes NPS1 Block

Allgather 1 node 36 processes NPS1 Cyclic

Allgather 1 node 36 processes NPS2 Block

Allgather 1 node 36 processes NPS2 Cyclic

以上より、 UCX_RNDV_THRESH16kb とした場合が最も性能が良いと判断してこれを固定、メッセージサイズをSmall・Medium・Medium Large・Largeの範囲に分けて NPS 、MPIプロセス分割方法、及び HCOLL 使用の有無を比較したものが以下のグラフです。
なお HCOLL 使用の有無は、 NPS1 とブロック分割の組み合わせのみ使用する場合と使用しない場合をグラフにプロットし、それ以外は使用する場合のみグラフにプロットしています。

Allgather 1 node 36 processes Small message

Allgather 1 node 36 processes Medium message

Allgather 1 node 36 processes Medium Large message

Allgather 1 node 36 processes Large message

3-4. Allreduce

以下のグラフは、 UCX_RNDV_THRESH を振ったときの Allreduce の結果を、 NPS とMPIプロセス分割方法の各組合せ毎に示しています。 coll_hcoll_enable は、ここでは 1 としています。

Allreduce 1 node 36 processes NPS1 Block

Allreduce 1 node 36 processes NPS1 Cyclic

Allreduce 1 node 36 processes NPS2 Block

Allreduce 1 node 36 processes NPS2 Cyclic

以上より、 UCX_RNDV_THRESH128kb とした場合が最も性能が良いと判断してこれを固定、メッセージサイズをSmall・Medium・Medium Large・Largeの範囲に分けて NPS 、MPIプロセス分割方法、及び HCOLL 使用の有無を比較したものが以下のグラフです。
なお HCOLL 使用の有無は、 NPS1 とブロック分割の組み合わせのみ使用する場合と使用しない場合をグラフにプロットし、それ以外は使用する場合のみグラフにプロットしています。

Allreduce 1 node 36 processes Small message

Allreduce 1 node 36 processes Medisum message

Allreduce 1 node 36 processes Medisum Large message

Allreduce 1 node 36 processes Large message

更新日時: