万人のためのハイパフォーマンスコンピューティング

HPC Do It Yourself Club

      HOMEE5-2600v3製品情報お役立ち情報購入案内お問い合わせ会社案内
      ムービーダウンロードドキュメント最新トピックスおもしろLinkHPCノウハウ

4 Node FDR Infiniband Cluster性能評価
OpenMPIとOpenMPのHybrid実行でのMustオプション
OpenMPIで別ノードの環境変数をセットするには

InfiniBand QDR vs. Gb Ethernet

その1: 基本性能を測定する

(最新のドライバーでの性能比較はコチラ

(FDR Infinibandでの性能評価はコチラ

 最初に基本性能を比較してみる。転送速度、転送遅延時間を測定し、それぞれの特徴を理解する。その前に行った、ネットワークカードの挿入、ケーブルの接続、ドライバーのインストール、OpenMPIの構築は、次回以降で詳しく説明する予定だ。現在最高速のInfiniBandはFDRだが、スイッチが36ポート以上のものしか無いため、8、18、36ポートのスイッチも存在するQDRを使って色々試していく。InfiniBandの基本的な解説はこちらを読むのが分かりやすい。QDRとFDRの差異なども詳しく説明されている。
 2台のコンピュータでクラスターを構築し、MPIで基本性能を測定する。コンピュータはHPCDIY-SWS87-8GB8を2台、それぞれにInfiniBand QDRカードを挿入しスイッチを使わずにケーブルのみでp2p接続してある。Gigabit Ethernetもeth0同士を接続してある。OSはCentOS6.2、InfiniBandドライバーはMellanox社製MLNX_OFED_LINUX-1.5.3-3.1.0-rhel6.2-x86_64.tgzを、MPIはOpen MPI: Version 1.6.2を使った。OpenMPIはインテル Composer XE 2013 Linux 版でビルドした。ベンチマークテストはOSU Micro-Benchmarks 3.7 (09/08/12)を使った。
 osu_bwを使って転送速度を測定する。マシン名はそれぞれhpc01とhpc02にしてある。OpenMPIのデフォールトだとInfiniBandを使って転送するようだ。
[hpc@hpc01 pt2pt]$ mpirun -H hpc01,hpc02 -np 2 ./osu_bw
# OSU MPI Bandwidth Test v3.7
# Size Bandwidth (MB/s)
1 1.54
2 3.09
4 6.12
8 19.88
16 44.93
32 87.89
64 163.91
128 337.52
256 588.25
512 920.19
1024 1596.46
2048 1255.95
4096 1581.76
8192 2133.17
16384 3062.07
32768 3254.44
65536 3349.68
131072 3377.25
262144 3373.66
524288 3372.78
1048576 3401.56
2097152 3393.75
4194304 3402.54
約3.4GB/sという速度になっている。
Gigabit Ethernetを使うとどうなるだろうか。
[hpc@hpc01 pt2pt]$ mpirun -H hpc01,hpc02 -np 2 -mca btl tcp,self,sm ./osu_bw
# OSU MPI Bandwidth Test v3.7
# Size Bandwidth (MB/s)
1 0.11
2 0.52
4 1.05
8 2.09
16 4.18
32 8.36
64 16.64
128 33.44
256 64.93
512 65.96
1024 80.64
2048 83.59
4096 85.15
8192 105.01
16384 113.96
32768 115.92
65536 115.37
131072 116.92
262144 117.74
524288 118.29
1048576 118.48
2097152 118.58
4194304 118.62
約118MB/sしか出ない。InfiniBand QDRの転送速度はGigabit Ethernetに比べると28倍以上高速なことがわかった。
 次に転送遅延時間を、osu_latencyを使って測定する。
はじめにはInfiniBandを計測する。
[hpc@hpc01 pt2pt]$ mpirun -H hpc01,hpc02 -np 2 ./osu_latency
# OSU MPI Latency Test v3.7
# Size Latency (us)
0 1.61
1 1.59
2 1.60
4 1.59
8 1.63
16 1.64
32 1.67
64 1.67
128 2.53
256 3.51
512 3.14
1024 3.65 
2048 5.69
4096 6.56
8192 8.64
16384 9.76
32768 14.72
65536 24.27
131072 43.60
262144 82.27
524288 159.65
1048576 314.24
2097152 623.57
4194304 1246.21
続いてGigabit Ethernetの場合を計測する
[hpc@hpc01 pt2pt]$ mpirun -H hpc01,hpc02 -np 2 -mca btl tcp,self,sm ./osu_latency
# OSU MPI Latency Test v3.7
# Size Latency (us)
0 25.32
1 25.47
2 25.46
4 25.77
8 25.52
16 25.55
32 25.55
64 26.29
128 26.13
256 26.62
512 31.27
1024 46.52
2048 216.09
4096 544.61
8192 549.05
16384 554.87
32768 565.93
65536 1066.47
131072 1384.72
262144 2536.79
524288 4648.97
1048576 9098.17
2097152 17991.93
4194304 35746.09
latencyにも大きな違いがあることがわかった。
 ところで、このマシンのCPUはSandybridgeが2つなので、InfiniBandのPCIEカードはどちらか1つのCPUに直接接続されている。直接接続されていないCPUからはQPIを通じて間接的にアクセスすることになる。どちらのCPUに接続されるかは、PCIEスロットの位置によって決まる。今回はnumactlのnode番号1(2つ目のCPU)にInfiniBandカードを接続されるように挿入位置を決めた。直接接続同士のCPU間(node1同士)で通信したのと、間接接続同士のCPU間(node0同士)で通信したのとでは、速度が異なるか試してみよう。
node1同士の直接接続では、
[hpc@hpc01 pt2pt]$ mpirun -H hpc01,hpc02 -np 2 numactl -N 1 ./osu_bw
# OSU MPI Bandwidth Test v3.7
# Size Bandwidth (MB/s)
1 1.69
2 3.40
4 6.99
8 28.60
16 57.53
32 110.34
64 216.26
128 477.35
256 847.13
512 1409.34
1024 2072.67
2048 2511.45
4096 2798.59
8192 2945.42
16384 3264.58
32768 3342.04
65536 3381.94
131072 3397.78
262144 3405.95
524288 3410.52
1048576 3413.06
2097152 3407.32
4194304 3409.82
node0同士の間接接続では、
[hpc@hpc01 pt2pt]$ mpirun -H hpc01,hpc02 -np 2 numactl -N 0 ./osu_bw
# OSU MPI Bandwidth Test v3.7
# Size Bandwidth (MB/s)
1 2.08
2 4.04
4 10.03
8 22.33
16 45.13
32 88.20
64 164.51
128 333.56
256 585.34
512 989.98
1024 1575.77
2048 1199.42
4096 1589.90
8192 2141.71
16384 3023.13
32768 3255.16
65536 3355.30
131072 3375.57
262144 3391.43
524288 3399.74
1048576 3401.69
2097152 3395.30
4194304 3397.40
となった。直接接続同士のほうがわずかに高速な結果が得られたが、殆ど差がないことがわかった。
 latencyに関してもPCIE直接接続と間接接続との違いを確かめておこう。
[hpc@hpc01 pt2pt]$ mpirun -H hpc01,hpc02 -np 2 numactl -N 1 ./osu_latency
# OSU MPI Latency Test v3.7
# Size Latency (us)
0 1.02
1 0.90
2 0.90
4 0.89
8 0.93
16 0.94
32 0.96
64 1.01
128 1.68
256 1.90
512 2.16
1024 2.60
2048 3.61
4096 4.43
8192 6.35
16384 8.94
32768 13.73
65536 23.31
131072 42.40
262144 80.98
524288 157.97
1048576 312.17
2097152 620.24
4194304 1248.10
[hpc@hpc01 pt2pt]$ mpirun -H hpc01,hpc02 -np 2 numactl -N 0 ./osu_latency
# OSU MPI Latency Test v3.7
# Size Latency (us)
0 1.61
1 1.61
2 1.60
4 1.60
8 1.64
16 1.66
32 1.68
64 1.66
128 2.53
256 3.50
512 3.11
1024 3.60
2048 5.68
4096 6.53
8192 8.59
16384 10.72
32768 15.52
65536 24.75
131072 43.63
262144 82.23
524288 159.57
1048576 314.28
2097152 623.55
4194304 1247.83
直接接続のほうが0.6usほど短縮されることがわかった。
 折角の機会なので、同一マシン内でのbwとlatencyも測っておこう。同一マシン内の同一ノード(ソケット)同士、異なるノード(ソケット)間、両方測定してみよう。なにかの役に立つかもしれない。
別々のソケット間で実行するには、mpirunで-np 2にして1ソケットから1つ使う-npersocket 1を指定する。-npersocketを使う場合は、ソケットが何個あるかmpirunに知らせるため-num-sockets 2も指定しないとエラーになる。
[hpc@hpc01 pt2pt]$ mpirun -H hpc01 -np 2 -num-sockets 2 -npersocket 1 -mca btl self,sm ./osu_bw
# OSU MPI Bandwidth Test v3.7
# Size Bandwidth (MB/s)
1 1.58
2 4.59
4 14.95
8 29.11
16 58.32
32 84.55
64 168.56
128 361.99
256 586.99
512 1072.23
1024 1840.86
2048 2788.66
4096 3067.49
8192 4259.77
16384 5739.33
32768 6948.76
65536 7293.76
131072 7649.28
262144 7829.01
524288 8085.22
1048576 8234.37
2097152 8150.66
4194304 8119.55
同一ソケット間では、1ソケットから2つ使えばいいので-npersocket 2を指定する。
[hpc@hpc01 pt2pt]$ mpirun -H hpc01 -np 2 -num-sockets 2 -npersocket 2 -mca btl self,sm ./osu_bw
# OSU MPI Bandwidth Test v3.7
# Size Bandwidth (MB/s)
1 2.18
2 7.95
4 26.50
8 53.34
16 106.89
32 206.64
64 412.09
128 763.55
256 1377.97
512 2486.23
1024 4258.37
2048 6235.89
4096 6747.54
8192 9292.30
16384 11561.64
32768 12997.55
65536 13013.90
131072 11936.82
262144 12153.39
524288 12220.72
1048576 12243.37
2097152 12254.53
4194304 12269.54
となった。同一マシン間は高速ではあるが、InfiniBandがかなり健闘しているのがわかる。
latencyも同様に調べてみる。
別々のソケット間、
[hpc@hpc01 pt2pt]$ mpirun -H hpc01 -np 2 -num-sockets 2 -npersocket 1 -mca btl self,sm ./osu_latency
# OSU MPI Latency Test v3.7
# Size Latency (us)
0 0.63
1 0.66
2 0.66
4 0.66
8 0.66
16 0.93
32 0.66
64 0.70
128 0.83
256 0.94
512 1.07
1024 1.05
2048 1.45
4096 2.11
8192 3.22
16384 5.40
32768 10.79
65536 12.44
131072 21.60
262144 39.55
524288 74.97
1048576 146.10
2097152 286.55
4194304 567.11
同一ソケット間、
[hpc@hpc01 pt2pt]$ mpirun -H hpc01 -np 2 -num-sockets 2 -npersocket 2 -mca btl self,sm ./osu_latency
# OSU MPI Latency Test v3.7
# Size Latency (us)
0 0.43
1 0.26
2 0.26
4 0.26
8 0.26
16 0.26
32 0.27
64 0.26
128 0.30
256 0.35
512 0.40
1024 0.48
2048 0.67
4096 0.96
8192 1.45
16384 2.77
32768 4.94
65536 8.11
131072 14.68
262144 27.63
524288 51.85
1048576 98.75
2097152 192.46
4194304 398.55
であることがわかった。
 データ転送に関して、同一マシン内、InfiniBand QDR、Gigabit Ethernetの特徴が理解できたのではないだろうか。
 これを踏まえて、次回は姫野ベンチでInfiniBand QDRとGigabit Ethernetを比較する。

(次回に続く)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Copyright (C) HPCシステムズ株式会社. All Rights Reserved.