本ドキュメントは、HPCワークロードの実行に最適な、高帯域・低遅延RDMA対応RoCEv2採用の クラスタ・ネットワーク でHPCワークロード向けベアメタルインスタンスをノード間接続するHPCクラスタで、標準ベンチマークの Intel MPI Benchmark を実行する方法を解説します。


0. 概要

本ドキュメントで解説する Intel MPI Benchmark の実行は、HPC クラスタネットワーキングイメージ に含まれる OpenMPIIntel MPI Benchmark を使用する方法と、 Intel oneAPI HPC Toolkit (本ドキュメントで使用するバージョンは2023.2)をインストールしてこれに含まれる Intel MPI Library (本ドキュメントで使用するバージョンは2021.10)と Intel MPI Benchmark を使用する方法を、それぞれ解説します。
また Intel MPI Benchmark は、2ノード間のPingPongと4ノード間のAllreduceの計測方法をそれぞれ解説します。

本ドキュメントで Intel MPI Benchmark を実行するHPCクラスタは、HPCワークロード向けベアメタルシェイプ BM.Optimized3.36 4インスタンスを クラスタ・ネットワーク で接続した構成とし、 OCI HPCチュートリアル集 のカテゴリ HPCクラスタ のチュートリアルの手順に従う等により、計算ノード間でMPIが実行できるよう予め構築しておきます。
計算ノードのOSは、 Oracle Linux 8の HPCクラスタネットワーキングイメージ を使用します。

本ドキュメントは、以下の環境で Intel MPI Benchmark PingPongを実行し、以下の性能が出ています。

[実行環境]

  • シェイプ: BM.Optimized3.36
  • OS: Oracle Linux 8.8 (HPC クラスタネットワーキングイメージ )
  • MPI: OpenMPI (バージョン4.1.5a1)
  • ノード数: 2
  • ノード間接続: クラスタ・ネットワーク

[実行結果]

  • レイテンシ: 1.67 usec
  • 帯域幅(256 MiBメッセージサイズ): 12,233 MB/s

1. OpenMPIでIntel MPI Benchmarkを実行する場合

本章は、 クラスタネットワーキングイメージ に含まれる OpenMPIIntel MPI Benchmark を使用し、 Intel MPI Benchmark を実行する方法を解説します。
具体的には、以下の作業を実施します。

  • ホストリストファイル(※1)作成・配布
  • OS再起動
  • Intel MPI Benchmark 実行

※1)MPIを使用して Intel MPI Benchmark を実行するため、この際に必要となる。

  1. OCI HPCテクニカルTips集計算/GPUノードのホスト名リスト作成方法 の手順を実施し、以下のように全ての計算ノードのホスト名を含むホスト名リストを全計算ノードのopcユーザのホームディレクトリにファイル名hostlist.txtで作成します。

     $ cat ~/hostlist.txt
     inst-wyr6m-comp
     inst-9wead-comp
     inst-u6i7v-comp
     inst-sgf5u-comp
     $
    
  2. 以下コマンドを全計算ノードのopcユーザで実行し、OSを再起動します。

     $ sudo shutdown -r now
    
  3. 以下コマンドを計算ノードのどれか1ノードでopcユーザで実行します。
    ここでは、2ノードを使用したPingPongをメッセージサイズ0バイトから256 MiBまで計測し、レイテンシは0バイトメッセージの所要時間(ここでは1.67 usec)、帯域幅は256 MiBメッセージの帯域幅(12,232.55 MB/s)を以ってその結果とします。

     $ source /usr/mpi/gcc/openmpi-4.1.5a1/bin/mpivars.sh
     $ mpirun -n 2 -N 1 -hostfile ~/hostlist.txt -x UCX_NET_DEVICES=mlx5_2:1 /usr/mpi/gcc/openmpi-4.1.5a1/tests/imb/IMB-MPI1 -msglog 3:28 pingpong
     #------------------------------------------------------------
     #    Intel (R) MPI Benchmarks 2018, MPI-1 part    
     #------------------------------------------------------------
     # Date                  : Fri Jan 26 06:53:08 2024
     # Machine               : x86_64
     # System                : Linux
     # Release               : 4.18.0-477.27.1.el8_8.x86_64
     # Version               : #1 SMP Wed Sep 27 11:14:47 PDT 2023
     # MPI Version           : 3.1
     # MPI Thread Environment: 
    
    
     # Calling sequence was: 
    
     # /usr/mpi/gcc/openmpi-4.1.5a1/tests/imb/IMB-MPI1 -msglog 3:28 pingpong
    
     # Minimum message length in bytes:   0
     # Maximum message length in bytes:   268435456
     #
     # MPI_Datatype                   :   MPI_BYTE 
     # MPI_Datatype for reductions    :   MPI_FLOAT
     # MPI_Op                         :   MPI_SUM  
     #
     #
    
     # List of Benchmarks to run:
    
     # PingPong
    
     #---------------------------------------------------
     # Benchmarking PingPong 
     # #processes = 2 
     #---------------------------------------------------
            #bytes #repetitions      t[usec]   Mbytes/sec
                 0         1000         1.67         0.00
                 8         1000         1.67         4.79
                16         1000         1.67         9.56
                32         1000         1.71        18.68
                64         1000         1.82        35.09
               128         1000         1.88        68.10
               256         1000         2.13       120.09
               512         1000         2.21       232.19
              1024         1000         2.32       442.25
              2048         1000         3.03       676.38
              4096         1000         3.76      1088.83
              8192         1000         4.87      1682.39
             16384         1000         6.73      2433.61
             32768         1000         9.22      3555.13
             65536          640        10.80      6066.58
            131072          320        16.33      8027.34
            262144          160        28.72      9128.71
            524288           80        50.17     10449.49
           1048576           40        92.96     11279.41
           2097152           20       178.56     11744.90
           4194304           10       349.84     11989.14
           8388608            5       693.07     12103.49
          16777216            2      1379.28     12163.72
          33554432            1      2749.08     12205.71
          67108864            1      5489.58     12224.78
         134217728            1     10972.75     12231.91
         268435456            1     21944.35     12232.55
    
    
     # All processes entering MPI_Finalize
    
     $
    
  4. 以下コマンドを計算ノードのどれか1ノードでopcユーザで実行します。
    ここでは、4ノード144プロセス(ノードあたり36プロセス)を使用したAllreduceの所要時間をメッセージサイズ0バイトから256 MiBまで計測しています。

     $ source /usr/mpi/gcc/openmpi-4.1.5a1/bin/mpivars.sh
     $ mpirun -n 144 -N 36 -hostfile ~/hostlist.txt -x UCX_NET_DEVICES=mlx5_2:1 /usr/mpi/gcc/openmpi-4.1.5a1/tests/imb/IMB-MPI1 -msglog 3:28 -npmin 144 allreduce
     #------------------------------------------------------------
     #    Intel (R) MPI Benchmarks 2018, MPI-1 part    
     #------------------------------------------------------------
     # Date                  : Thu Jul 20 16:27:27 2023
     # Machine               : x86_64
     # System                : Linux
     # Release               : 4.18.0-425.13.1.el8_7.x86_64
     # Version               : #1 SMP Tue Feb 21 15:09:05 PST 2023
     # MPI Version           : 3.1
     # MPI Thread Environment: 
        
        
     # Calling sequence was: 
        
     # /usr/mpi/gcc/openmpi-4.1.2a1/tests/imb/IMB-MPI1 -msglog 3:28 -npmin 144 allreduce
        
     # Minimum message length in bytes:   0
     # Maximum message length in bytes:   268435456
     #
     # MPI_Datatype                   :   MPI_BYTE 
     # MPI_Datatype for reductions    :   MPI_FLOAT
     # MPI_Op                         :   MPI_SUM  
     #
     #
        
     # List of Benchmarks to run:
        
     # Allreduce
        
     #----------------------------------------------------------------
     # Benchmarking Allreduce 
     # #processes = 144 
     #----------------------------------------------------------------
        #bytes #repetitions  t_min[usec]  t_max[usec]  t_avg[usec]
             0         1000         0.03         0.03         0.03
             8         1000         4.50        18.59        11.69
            16         1000         5.39        17.63        11.63
            32         1000        10.11        13.13        11.63
            64         1000         8.32        15.24        11.89
           128         1000         8.09        16.58        12.42
           256         1000         9.89        16.40        13.13
           512         1000         9.82        17.86        13.83
          1024         1000         8.73        20.20        14.63
          2048         1000         9.93        22.23        16.15
          4096         1000        12.02        27.01        19.67
          8192         1000        31.39        32.95        32.13
         16384         1000        35.31        37.19        36.22
         32768         1000        45.48        47.47        46.45
         65536          640        55.95        57.01        56.52
        131072          320        80.63        87.40        82.04
        262144          160       129.56       133.52       131.70
        524288           80       208.77       220.54       215.39
       1048576           40       432.20       461.07       447.59
       2097152           20      3352.04      3795.60      3591.64
       4194304           10      5326.33      5896.00      5630.47
       8388608            5     11920.32     13331.59     12864.12
      16777216            2     14467.98     15429.07     15048.12
      33554432            1     36607.12     40731.76     38998.56
      67108864            1     75721.76     84852.59     80901.12
     134217728            1    151129.15    159549.19    155682.92
     268435456            1    331046.67    353256.68    343593.42
        
        
     # All processes entering MPI_Finalize
        
     $
    

2. Intel MPI LibraryでIntel MPI Benchmarkを実行する

本章は、 Intel oneAPI HPC Toolkit をインストールしてこれに含まれる Intel MPI LibraryIntel MPI Benchmark を使用し、 Intel MPI Benchmark を実行する方法を解説します。
具体的には、以下の作業を実施します。

  • Intel oneAPI HPC Toolkit インストール
  • ホストリストファイル[^hostlist]作成・配布
  • OS再起動
  • Intel MPI Benchmark 実行
  1. 以下コマンドを全計算ノードのopcユーザで実行し、 Intel oneAPI HPC Toolkit をインストールします。

     $ sudo yum-config-manager --add-repo https://yum.repos.intel.com/oneapi
     $ sudo rpm --import https://yum.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB
     $ sudo yum install -y intel-basekit
     $ sudo yum install -y intel-hpckit
    
  2. OCI HPCテクニカルTips集計算ノードのホスト名リスト作成方法 の手順を実施し、以下のように全ての計算ノードのホスト名を含むホスト名リストを全計算ノードのopcユーザのホームディレクトリにファイル名hostlist.txtで作成します。

     $ cat ~/hostlist.txt
     inst-wyr6m-comp
     inst-9wead-comp
     inst-u6i7v-comp
     inst-sgf5u-comp
    
  3. 以下コマンドを全計算ノードのopcユーザで実行し、OSを再起動します。

     $ sudo shutdown -r now
    
  4. 以下コマンドを計算ノードのどれか1ノードでopcユーザで実行します。
    ここでは、2ノードを使用したPingPongをメッセージサイズ0バイトから256 MiBまで計測し、レイテンシは0バイトメッセージの所要時間(ここでは1.71 usec)、帯域幅は256 MiBメッセージの帯域幅(12,240.91 MB/s)を以ってその結果とします。

     $ source /opt/intel/oneapi/setvars.sh
     $ mpirun -n 2 -ppn 1 -hostfile ~/hostlist.txt -genv UCX_NET_DEVICES=mlx5_2:1 IMB-MPI1 -msglog 3:28 pingpong
     #----------------------------------------------------------------
     #    Intel(R) MPI Benchmarks 2021.6, MPI-1 part
     #----------------------------------------------------------------
     # Date                  : Tue Jul 18 18:45:29 2023
     # Machine               : x86_64
     # System                : Linux
     # Release               : 4.18.0-425.13.1.el8_7.x86_64
     # Version               : #1 SMP Tue Feb 21 15:09:05 PST 2023
     # MPI Version           : 3.1
     # MPI Thread Environment: 
        
        
     # Calling sequence was: 
        
     # IMB-MPI1 -msglog 3:28 pingpong 
        
     # Minimum message length in bytes:   0
     # Maximum message length in bytes:   268435456
     #
     # MPI_Datatype                   :   MPI_BYTE 
     # MPI_Datatype for reductions    :   MPI_FLOAT 
     # MPI_Op                         :   MPI_SUM  
     # 
     # 
        
     # List of Benchmarks to run:
        
     # PingPong
        
     #---------------------------------------------------
     # Benchmarking PingPong 
     # #processes = 2 
     #---------------------------------------------------
            #bytes #repetitions      t[usec]   Mbytes/sec
                 0         1000         1.71         0.00
                 8         1000         1.72         4.64
                16         1000         1.72         9.28
                32         1000         1.76        18.16
                64         1000         1.88        34.00
               128         1000         1.94        65.86
               256         1000         2.19       116.90
               512         1000         2.28       224.34
              1024         1000         2.38       431.02
              2048         1000         3.12       656.17
              4096         1000         3.63      1128.55
              8192         1000         4.28      1912.25
             16384         1000         5.85      2798.76
             32768         1000         7.55      4342.28
             65536          640        12.94      5063.04
            131072          320        18.12      7232.15
            262144          160        28.27      9274.42
            524288           80        50.21     10441.60
           1048576           40        93.04     11269.83
           2097152           20       178.49     11749.09
           4194304           10       349.73     11993.04
           8388608            5       692.23     12118.21
          16777216            2      1377.06     12183.35
          33554432            1      2749.48     12203.92
          67108864            1      5490.82     12222.02
         134217728            1     10969.54     12235.50
         268435456            1     21929.37     12240.91
        
        
     # All processes entering MPI_Finalize
    
  5. 以下コマンドを計算ノードのどれか1ノードでopcユーザで実行します。
    ここでは、4ノード144プロセス(ノードあたり36プロセス)を使用したAllreduceの所要時間をメッセージサイズ0バイトから256 MiBまで計測しています。

     $ source /opt/intel/oneapi/setvars.sh
     $ mpirun -n 144 -ppn 36 -hostfile ~/hostlist.txt -genv UCX_NET_DEVICES=mlx5_2:1 IMB-MPI1 -msglog 3:28 -npmin 144 allreduce
     #----------------------------------------------------------------
     #    Intel(R) MPI Benchmarks 2021.6, MPI-1 part
     #----------------------------------------------------------------
     # Date                  : Thu Jul 20 17:06:33 2023
     # Machine               : x86_64
     # System                : Linux
     # Release               : 4.18.0-425.13.1.el8_7.x86_64
     # Version               : #1 SMP Tue Feb 21 15:09:05 PST 2023
     # MPI Version           : 3.1
     # MPI Thread Environment: 
        
        
     # Calling sequence was: 
        
     # IMB-MPI1 -msglog 3:28 -npmin 144 allreduce 
        
     # Minimum message length in bytes:   0
     # Maximum message length in bytes:   268435456
     #
     # MPI_Datatype                   :   MPI_BYTE 
     # MPI_Datatype for reductions    :   MPI_FLOAT 
     # MPI_Op                         :   MPI_SUM  
     # 
     # 
        
     # List of Benchmarks to run:
        
     # Allreduce
        
     #----------------------------------------------------------------
     # Benchmarking Allreduce 
     # #processes = 144 
     #----------------------------------------------------------------
        #bytes #repetitions  t_min[usec]  t_max[usec]  t_avg[usec]
             0         1000         0.04         0.04         0.04
             8         1000         3.82         3.99         3.89
            16         1000         3.84         3.97         3.90
            32         1000         3.88         4.02         3.94
            64         1000         4.59         5.84         4.90
           128         1000         4.59         6.17         5.13
           256         1000         5.63         6.98         6.01
           512         1000         5.93         7.43         6.43
          1024         1000         7.01         8.35         7.40
          2048         1000         8.29         9.82         8.74
          4096         1000        11.57        13.00        11.94
          8192         1000        17.99        19.95        18.70
         16384         1000        30.71        32.50        31.28
         32768         1000        40.09        41.80        40.63
         65536          640        58.15        60.29        58.95
        131072          320        95.01        97.25        95.75
        262144          160       174.82       178.72       176.52
        524288           80       324.98       334.57       327.82
       1048576           40       604.11       638.19       615.04
       2097152           20      1222.56      1280.38      1250.78
       4194304           10      2755.72      2793.37      2763.87
       8388608            5      5495.29      5583.16      5538.68
      16777216            2     11045.25     11199.33     11153.57
      33554432            1     24374.20     24531.76     24425.53
      67108864            1     49608.12     52453.49     50430.43
     134217728            1     99095.37    100175.72     99595.04
     268435456            1    196246.06    197505.86    196831.87
        
        
     # All processes entering MPI_Finalize
    

更新日時: