0. 概要
オープンソースのMPI実装である OpenMPI は、 Modular Component Architecture (以降 MCA と呼称します。)を採用することで、ビルド時に組み込むコンポーネントを介して集合通信を含む多彩な機能を提供し、この MCA パラメータにはMPI集合通信性能に影響するものがあります。
特にMPI集合通信の高速化を意識して開発されている HCOLL や Unified Collective Communication (以降 UCC と呼称します。)は、その特性を理解して適切に利用することで、MPI集合通信性能を大幅に向上させることが可能です。
また OpenMPI は、高帯域・低遅延のMPIプロセス間通信を実現するためにその通信フレームワークに UCX を採用し、この UCX のパラメータにもMPI集合通信性能に影響するパラメータが存在します。
またMPI集合通信は、ノード内並列では実質的にメモリコピーとなるため、メモリ性能に影響するMPIプロセスのコア割当てや NUMA nodes per socket (以降 NPS と呼称します。)もその性能に影響します。
以上を踏まえて本パフォーマンス関連Tipsは、第5世代 AMD EPYC プロセッサを搭載するベア・メタル・シェイプ BM.Standard.E6.256 に於ける OpenMPI のMPI集合通信性能にフォーカスし、以下の 計測条件 を組合せたテストケース毎に以下の 実行時パラメータ を変えてその性能を Intel MPI Benchmarks で計測し、最適な 実行時パラメータ の組み合わせを導きます。
[計測条件]
- ノード数 : 1
- ノード当たりMPIプロセス数 : 32 ・ 64 ・ 128 ・ 256
- MPI集合通信関数 : Alltoall ・ Allgather ・ Allreduce
[実行時パラメータ]
- UCX_RNDV_THRESH : auto ・ 4kb ・ 8kb ・ 16kb ・ 32kb ・ 64kb ・ 128kb (※1)
- coll_hcoll_enable : 0 ・ 1 (※2)
- coll_ucc_enable : 0 ・ 1 (※3)
- MPIプロセス分割方法 : ブロック分割・サイクリック分割(※4)
- NPS : 1 (以降 NPS1 と呼称します。)・ 4 (以降 NPS4 と呼称します。)(※5)
※1) UCX のパラメータで、詳細は OCI HPCパフォーマンス関連情報 の OpenMPIのMPI通信性能に影響するパラメータとその関連Tips の 3-6. UCX_RNDV_THRESH を参照してください。
※2) MCA のパラメータで、詳細は OCI HPCパフォーマンス関連情報 の OpenMPIのMPI通信性能に影響するパラメータとその関連Tips の 3-1. coll_hcoll_enable を参照してください。
※3) MCA のパラメータで、詳細は OCI HPCパフォーマンス関連情報 の OpenMPIのMPI通信性能に影響するパラメータとその関連Tips の 3-9. coll_ucc_enable を参照してください。
※4)NUMAノードに対するMPIプロセスの分割方法で、詳細は OCI HPCパフォーマンス関連情報 の パフォーマンスを考慮したプロセス・スレッドのコア割当て指定方法(BM.Standard.E6.256編) を参照してください。
※5)NPS の設定方法は、 OCI HPCパフォーマンス関連情報 の パフォーマンスに関連するベアメタルインスタンスのBIOS設定方法 を参照してください。
また本パフォーマンス関連Tipsの検証は、以下の実行環境で実施しています。
[実行環境]
- シェイプ: BM.Standard.E6.256 ( Simultanious Multi Threading (以降 SMT と呼称します。)無効(※6))
- OS: プラットフォーム・イメージ Oracle-Linux-9.5-2025.04.16-0
- OpenMPI : 5.0.6(※7)
- Intel MPI Benchmarks : 2021.7(※7)
- HCOLL : HPC-X 2.22.1に含まれる HCOLL
- UCC : 1.3.0(※7)
※6) SMT の設定方法は、 OCI HPCパフォーマンス関連情報 の パフォーマンスに関連するベアメタルインスタンスのBIOS設定方法 を参照してください。
※7) OCI HPCテクニカルTips集 の Oracle Linuxプラットフォーム・イメージベースのHPCワークロード実行環境構築方法 に従って構築された OpenMPI 、 Intel MPI Benchmarks 、及び UCC です。
また Intel MPI Benchmarks の計測は、以下の実行時オプションを指定して起動します。
$ IMB-MPI1 -msglog 0:xx -mem 4.1G -off_cache 512,64 -npmin num_of_procs alltoall/allgather/allreduce
ここで計測するメッセージサイズの上限( xx )は、MPI集合通信関数とノード当たりMPIプロセス数に応じて以下の値を使用します。
この設定値は、計測可能な最大値から決定しています。
32 | 64 | 128 | 256 | |
---|---|---|---|---|
Alltoall | 25 | 24 | 23 | 22 |
Allgather | 25 | 24 | 23 | 22 |
Allreduce | 30 | 30 | 30 | 30 |
また Intel MPI Benchmarks の計測は、テストケース毎に5回実施し、その最大値と最小値を除く3回の算術平均をその結果とします。
以降では、以下 計測条件 の順に解説します。
1. 32 MPIプロセス
1-0. 概要
本章は、1ノードに32 MPIプロセスを割当てる場合の最適な 実行時パラメータ の組み合わせをMPI集合通信関数毎に検証し、その結果を考察します。
1-1. Alltoall
以下のグラフは、 UCX_RNDV_THRESH を変化させたときの Alltoall の結果を、 NPS と集合通信コンポーネントの組合せ毎に示しています。
以上より、各集合通信コンポーネントの UCX_RNDV_THRESH を下表の値とした場合が最も性能が良いと判断してこれを固定、
No COLL | UCC | HCOLL | |
---|---|---|---|
UCX_RNDV_THRESH | Auto | 32KB | 128KB |
NPS と集合通信コンポーネントの各組合せを比較したものが以下のグラフです。
以上の結果は、以下のように考察することが出来ます。
- NPS は何れの集合通信コンポーネントでも 4 が有利
- UCC は512KB以上で性能向上
- HCOLL は32KB以上で性能低下
1-2. Allgather
以下のグラフは、 UCX_RNDV_THRESH を変化させたときの Allgather の結果を、 NPS と集合通信コンポーネントの組合せ毎に示しています。
以上より、各集合通信コンポーネントの UCX_RNDV_THRESH を下表の値とした場合が最も性能が良いと判断してこれを固定、
No COLL | UCC | HCOLL | |
---|---|---|---|
UCX_RNDV_THRESH | Auto | 32KB | Auto |
NPS と集合通信コンポーネントの各組合せを比較したものが以下のグラフです。
以上の結果は、以下のように考察することが出来ます。
- NPS は何れの集合通信コンポーネントでも 4 が有利
- UCC は1KB以下で性能が低下し4MB以上で性能向上
- HCOLL は64Bから4KBで性能が向上し16B以下と16KB以上で性能が低下
1-3. Allreduce
以下のグラフは、 UCX_RNDV_THRESH を変化させたときの Allreduce の結果を、 NPS と集合通信コンポーネントの組合せ毎に示しています。
以上より、各集合通信コンポーネントの UCX_RNDV_THRESH を下表の値とした場合が最も性能が良いと判断してこれを固定、
No COLL | UCC | HCOLL | |
---|---|---|---|
UCX_RNDV_THRESH | Auto | 16KB | Auto |
NPS と集合通信コンポーネントの各組合せを比較したものが以下のグラフです。
以上の結果は、以下のように考察することが出来ます。
- NPS は何れの集合通信コンポーネントでも 4 が有利
- UCC は64B以下で性能が低下し8KB以上で性能向上
- HCOLL は64KB以下で性能が向上し256KB以上で性能が低下
2. 64 MPIプロセス
2-0. 概要
本章は、1ノードに64 MPIプロセスを割当てる場合の最適な 実行時パラメータ の組み合わせをMPI集合通信関数毎に検証し、その結果を考察します。
2-1. Alltoall
以下のグラフは、 UCX_RNDV_THRESH を変化させたときの Alltoall の結果を、 NPS 、MPIプロセス分割方法、及び集合通信コンポーネントの組合せ毎に示しています。
以上より、各集合通信コンポーネントの UCX_RNDV_THRESH を下表の値とした場合が最も性能が良いと判断してこれを固定、
No COLL | UCC | HCOLL | |
---|---|---|---|
UCX_RNDV_THRESH | Auto | 32KB | 128KB |
NPS とMPIプロセス分割方法の各組合せを集合通信コンポーネント毎に比較したものが以下のグラフです。
以上より、 NPS とMPIプロセス分割方法を下表の設定とした場合が最も性能が良いと判断してこれを固定、
No COLL | UCC | HCOLL | |
---|---|---|---|
NPS | 4 | 4 | 1 |
MPIプロセス分割方法 | ブロック分割 | ブロック分割 | ブロック分割 |
集合通信コンポーネントを比較したものが以下のグラフです。
以上の結果は、以下のように考察することが出来ます。
- UCC は256KB以上で性能が向上しそれ未満で顕著な傾向無し
- HCOLL は16KB以上で性能が低下しそれ未満で概ね性能が向上
2-2. Allgather
以下のグラフは、 UCX_RNDV_THRESH を変化させたときの Allgather の結果を、 NPS 、MPIプロセス分割方法、及び集合通信コンポーネントの組合せ毎に示しています。
以上より、各集合通信コンポーネントの UCX_RNDV_THRESH を下表の値とした場合が最も性能が良いと判断してこれを固定、
No COLL | UCC | HCOLL | |
---|---|---|---|
UCX_RNDV_THRESH | Auto | 128KB | Auto |
NPS とMPIプロセス分割方法の各組合せを集合通信コンポーネント毎に比較したものが以下のグラフです。
以上より、 NPS とMPIプロセス分割方法を下表の設定とした場合が最も性能が良いと判断してこれを固定、
No COLL | UCC | HCOLL | |
---|---|---|---|
NPS | 4 | 4 | 4 |
MPIプロセス分割方法 | ブロック分割 | ブロック分割 | ブロック分割 |
集合通信コンポーネントを比較したものが以下のグラフです。
以上の結果は、以下のように考察することが出来ます。
- UCC は全域で概ね性能が低下
- HCOLL は64KB以上で性能が低下しそれ未満で概ね性能が向上
2-3. Allreduce
以下のグラフは、 UCX_RNDV_THRESH を変化させたときの Allreduce の結果を、 NPS 、MPIプロセス分割方法、及び集合通信コンポーネントの組合せ毎に示しています。
以上より、各集合通信コンポーネントの UCX_RNDV_THRESH を下表の値とした場合が最も性能が良いと判断してこれを固定、
No COLL | UCC | HCOLL | |
---|---|---|---|
UCX_RNDV_THRESH | Auto | 64KB | 128KB |
NPS とMPIプロセス分割方法の各組合せを集合通信コンポーネント毎に比較したものが以下のグラフです。
以上より、 NPS とMPIプロセス分割方法を下表の設定とした場合が最も性能が良いと判断してこれを固定、
No COLL | UCC | HCOLL | |
---|---|---|---|
NPS | 4 | 4 | 4 |
MPIプロセス分割方法 | ブロック分割 | ブロック分割 | ブロック分割 |
集合通信コンポーネントを比較したものが以下のグラフです。
以上の結果は、以下のように考察することが出来ます。
- UCC は4KB以上で性能が向上しそれ未満で性能が低下
- HCOLL は2MB以上で性能が低下しそれ未満で性能が向上
3. 128 MPIプロセス
3-0. 概要
本章は、1ノードに128 MPIプロセスを割当てる場合の最適な 実行時パラメータ の組み合わせをMPI集合通信関数毎に検証し、その結果を考察します。
3-1. Alltoall
以下のグラフは、 UCX_RNDV_THRESH を変化させたときの Alltoall の結果を、 NPS 、MPIプロセス分割方法、及び集合通信コンポーネントの組合せ毎に示しています。
以上より、各集合通信コンポーネントの UCX_RNDV_THRESH を下表の値とした場合が最も性能が良いと判断してこれを固定、
No COLL | UCC | HCOLL | |
---|---|---|---|
UCX_RNDV_THRESH | Auto | 16KB | 128KB |
NPS とMPIプロセス分割方法の各組合せを集合通信コンポーネント毎に比較したものが以下のグラフです。
以上より、 NPS とMPIプロセス分割方法を下表の設定とした場合が最も性能が良いと判断してこれを固定、
No COLL | UCC | HCOLL | |
---|---|---|---|
NPS | 4 | 4 | 4 |
MPIプロセス分割方法 | サイクリック分割 | サイクリック分割 | サイクリック分割 |
集合通信コンポーネントを比較したものが以下のグラフです。
以上の結果は、以下のように考察することが出来ます。
- UCC は256KB以上で性能が向上しそれ未満で顕著な傾向無し
- HCOLL は8KB以上で性能が低下しそれ未満で顕著な傾向無し
3-2. Allgather
以下のグラフは、 UCX_RNDV_THRESH を変化させたときの Allgather の結果を、 NPS 、MPIプロセス分割方法、及び集合通信コンポーネントの組合せ毎に示しています。
以上より、各集合通信コンポーネントの UCX_RNDV_THRESH を下表の値とした場合が最も性能が良いと判断してこれを固定、
No COLL | UCC | HCOLL | |
---|---|---|---|
UCX_RNDV_THRESH | Auto | 128KB | 128KB |
NPS とMPIプロセス分割方法の各組合せを集合通信コンポーネント毎に比較したものが以下のグラフです。
以上より、 NPS とMPIプロセス分割方法を下表の設定とした場合が最も性能が良いと判断してこれを固定、
No COLL | UCC | HCOLL | |
---|---|---|---|
NPS | 4 | 4 | 4 |
MPIプロセス分割方法 | ブロック分割 | ブロック分割 | ブロック分割 |
集合通信コンポーネントを比較したものが以下のグラフです。
以上の結果は、以下のように考察することが出来ます。
- UCC は全域で概ね性能が低下
- HCOLL は16KB以上で性能が低下しそれ未満で概ね性能が向上
3-3. Allreduce
以下のグラフは、 UCX_RNDV_THRESH を変化させたときの Allreduce の結果を、 NPS 、MPIプロセス分割方法、及び集合通信コンポーネントの組合せ毎に示しています。
以上より、各集合通信コンポーネントの UCX_RNDV_THRESH を下表の値とした場合が最も性能が良いと判断してこれを固定、
No COLL | UCC | HCOLL | |
---|---|---|---|
UCX_RNDV_THRESH | Auto | 64KB | 128KB |
NPS とMPIプロセス分割方法の各組合せを集合通信コンポーネント毎に比較したものが以下のグラフです。
以上より、 NPS とMPIプロセス分割方法を下表の設定とした場合が最も性能が良いと判断してこれを固定、
No COLL | UCC | HCOLL | |
---|---|---|---|
NPS | 4 | 4 | 4 |
MPIプロセス分割方法 | ブロック分割 | ブロック分割 | ブロック分割 |
集合通信コンポーネントを比較したものが以下のグラフです。
以上の結果は、以下のように考察することが出来ます。
- UCC は512B以上で性能が向上しそれ未満で性能が低下
- HCOLL は16MB以上で性能が低下しそれ未満で性能が向上
4. 256 MPIプロセス
4-0. 概要
本章は、1ノードに256 MPIプロセスを割当てる場合の最適な 実行時パラメータ の組み合わせをMPI集合通信関数毎に検証し、その結果を考察します。
4-1. Alltoall
以下のグラフは、 UCX_RNDV_THRESH を変化させたときの Alltoall の結果を、 NPS 、MPIプロセス分割方法、及び集合通信コンポーネントの組合せ毎に示しています。
以上より、各集合通信コンポーネントの UCX_RNDV_THRESH を下表の値とした場合が最も性能が良いと判断してこれを固定、
No COLL | UCC | HCOLL | |
---|---|---|---|
UCX_RNDV_THRESH | 128KB | 16KB | 4KB |
NPS とMPIプロセス分割方法の各組合せを集合通信コンポーネント毎に比較したものが以下のグラフです。
以上より、 NPS とMPIプロセス分割方法を下表の設定とした場合が最も性能が良いと判断してこれを固定、
No COLL | UCC | HCOLL | |
---|---|---|---|
NPS | 4 | 4 | 4 |
MPIプロセス分割方法 | ブロック分割 | サイクリック分割 | サイクリック分割 |
集合通信コンポーネントを比較したものが以下のグラフです。
以上の結果は、以下のように考察することが出来ます。
- UCC は顕著な傾向無し
- HCOLL は4KB以上で性能が低下しそれ未満で顕著な傾向無し
4-2. Allgather
以下のグラフは、 UCX_RNDV_THRESH を変化させたときの Allgather の結果を、 NPS 、MPIプロセス分割方法、及び集合通信コンポーネントの組合せ毎に示しています。
以上より、各集合通信コンポーネントの UCX_RNDV_THRESH を下表の値とした場合が最も性能が良いと判断してこれを固定、
No COLL | UCC | HCOLL | |
---|---|---|---|
UCX_RNDV_THRESH | 128KB | 128KB | 64KB |
NPS とMPIプロセス分割方法の各組合せを集合通信コンポーネント毎に比較したものが以下のグラフです。
以上より、 NPS とMPIプロセス分割方法を下表の設定とした場合が最も性能が良いと判断してこれを固定、
No COLL | UCC | HCOLL | |
---|---|---|---|
NPS | 4 | 4 | 4 |
MPIプロセス分割方法 | ブロック分割 | ブロック分割 | ブロック分割 |
集合通信コンポーネントを比較したものが以下のグラフです。
以上の結果は、以下のように考察することが出来ます。
- UCC は全域で概ね性能が低下
- HCOLL は4KB以上で性能が低下しそれ未満で概ね性能が向上
4-3. Allreduce
以下のグラフは、 UCX_RNDV_THRESH を変化させたときの Allreduce の結果を、 NPS 、MPIプロセス分割方法、及び集合通信コンポーネントの組合せ毎に示しています。
以上より、各集合通信コンポーネントの UCX_RNDV_THRESH を下表の値とした場合が最も性能が良いと判断してこれを固定、
No COLL | UCC | HCOLL | |
---|---|---|---|
UCX_RNDV_THRESH | Auto | Auto | Auto |
NPS とMPIプロセス分割方法の各組合せを集合通信コンポーネント毎に比較したものが以下のグラフです。
以上より、 NPS とMPIプロセス分割方法を下表の設定とした場合が最も性能が良いと判断してこれを固定、
No COLL | UCC | HCOLL | |
---|---|---|---|
NPS | 4 | 4 | 4 |
MPIプロセス分割方法 | ブロック分割 | ブロック分割 | ブロック分割 |
集合通信コンポーネントを比較したものが以下のグラフです。
以上の結果は、以下のように考察することが出来ます。
- UCC は2MB以上で性能が向上しそれ未満で性能が低下
- HCOLL は8MB以上で性能が低下しそれ未満で概ね性能が向上