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

HPC Do It Yourself Club

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

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

OpenMPIをInfiniBand用にconfigureとmakeし、

通信速度を計測する

(過去のOpenMPIの記事はコチラ過去のInfiniBandの記事はコチラ

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

 2台以上のコンピュータを使って並列計算を行っても、思ったほど計算時間が短縮されない場合、コンピュータ間の通信速度がボトルネックになっている可能性がある。コンピュータ間の通信は、標準実装のGigabitEthernetを使うと、通信速度は最大で毎秒125Mバイトだが、QDR(Quad Data Rate) InfiniBandカードを追加することにより、最大で毎秒4000Mバイトと、32倍高速な通信が実現できる(もっと高速なFDR InfiniBandもある)。これをやろうとした場合、カードの追加やケーブルの接続などのハードウェア設定の他に、InfiniBandのドライバーのインストールと、MPIをInfiniBand用に設定する作業が必要になる。簡単な作業だが、初めて行うと時間がかかるかもしれない。この記事では、初めてでも迷わずできるよう、OpenMPIをInfiniBandで使うために必要な、ソフトウェア設定を解説する。InfiniBandカードはMellanox製のものを使っている

1.InfiniBandのドライバーをインストールする
 MellanoxのWebsiteからドライバーをダウンロードする。こちらにアクセスし、下の方にあるMLNX_OFED 2.0をクリックする。すると、.isoファイルと.tgzファイルがそれぞれ数種類のLinuxディストリビューション用に用意されているのがわかる。この記事で使っているコンピュータにインストールされているのはCentOSだが、CentOS用のドライバーはないので、コンパチなrhel用を使う。バージョンを知る必要があるが、/etc/centos-releaseに記述されているので、それを確認する。
[hpc@aegis ~ 1002]$ cat /etc/centos-release 
CentOS release 6.3 (Final)

バージョンは6.3であることがわかったので、MLNX_OFED_LINUX-2.0-2.0.5-rhel6.3-x86_64.isoをクリックしてダウンロードする。
ダウンロードしたファイルがあるディレクトリに移り、rootになって作業する。
[hpc@aegis07 ~ 1002]$ cd Downloads/
[hpc@aegis07 Downloads 1003]$ su
パスワード: <-rootのパスワードを入力

日本語表示になっていると、以降の作業がうまくいかないので、その場合は英語表示に変更する。
[root@aegis07 Downloads]# echo $LANG
ja_JP.UTF-8 <ー日本語表示になっている
[root@aegis07 Downloads]# LANG=en_US.UTF-8 <ー英語表示に変更
[root@aegis07 Downloads]# !echo <ー変更を確認
echo $LANG
en_US.UTF-8

InfiniBandカードが実装されていることを確認する。
[root@aegis07 Downloads]# lspci -v|grep -i mellanox
03:00.0 Network controller: Mellanox Technologies MT27500 Family [ConnectX-3]
Subsystem: Mellanox Technologies Device 0017
ダウンロードした.isoファイルを/mntなどにマウントし、そこに移動する。
[root@aegis07 Downloads]# ls
MLNX_OFED_LINUX-2.0-2.0.5-rhel6.3-x86_64.iso
[root@aegis07 Downloads]# mount -o ro,loop MLNX_OFED_LINUX-2.0-2.0.5-rhel6.3-x86_64.iso /mnt
[root@aegis07 Downloads]# cd /mnt
[root@aegis07 mnt]# ls
docs firmware mlnx_add_kernel_support.sh mlnxofedinstall repodata RPMS src uninstall.sh
そこにある、mlnxofedinstallを実行する。
[root@aegis07 mnt]# ./mlnxofedinstall 
The 2.6.32-279.14.1.el6.x86_64 kernel is installed, MLNX_OFED does not have drivers available for this kernel.
You can run mlnx_add_kernel_support.sh in order to to generate an MLNX_OFED package with drivers for this kernel.
すると上記のメッセージが表示され、インストールは実行されないかもしれない。これは、CentOS6.3をインストールした後、アップデートを行ったためにカーネルのバージョンが新しくなっていると起こる。その場合は、同じ場所にある.mlnx_add_kernel_support.shを実行し、アップデートされたカーネルをサポートする.isoファイルを作る。オプションは次のように指定する。
[root@aegis07 mnt]# ./mlnx_add_kernel_support.sh --mlnx_ofed /mnt --make-iso
Note: This program will create MLNX_OFED_LINUX ISO for rhel6.3 under /tmp directory.
All Mellanox, OEM, OFED, or Distribution IB packages will be removed.
Do you want to continue?[y/N]:y <ーyを入力
See log file /tmp/mlnx_ofed_iso.15709.log

Building OFED RPMs. Please wait...
Removing OFED RPMs...
Running mkisofs...
Created /tmp/MLNX_OFED_LINUX-2.0-2.0.5-rhel6.3-x86_64.iso
新しい.isoファイルは/tmpに作られる。古い.isoファイルをumountし、新しい.isoファイルを同様に/mntなどにmountしそこに移動する。
[root@aegis07 mnt]# cd /
[root@aegis07 /]# umount /mnt
[root@aegis07 /]# mount -o ro,loop /tmp/MLNX_OFED_LINUX-2.0-2.0.5-rhel6.3-x86_64.iso /mnt
[root@aegis07 /]# cd /mnt
[root@aegis07 mnt]# ls
docs firmware mlnx_add_kernel_support.sh mlnxofedinstall repodata RPMS src uninstall.sh
新しいmlnxofedinstallを実行する。
[root@aegis07 mnt]# ./mlnxofedinstall 
This program will install the MLNX_OFED_LINUX package on your machine.
Note that all other Mellanox, OEM, OFED, or Distribution IB packages will be removed.
Do you want to continue?[y/N]:y


Starting MLNX_OFED_LINUX-2.0-2.0.5 installation ...
この後メッセージが続くがここでは省略する。少しするとインストールが終了する。
InfiniBandのデーモンopenibdを起動する。
[root@aegis07 mnt]# service openibd start
Loading HCA driver and Access Layer: [ OK ]
Setting up service network . . . [ done ]
openibdがリブート後も起動されるよう、
[root@aegis07 mnt]# chkconfig openibd on
[root@aegis07 mnt]# chkconfig --list openibd
openibd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
を実行する。
以上で、1台のコンピュータへのInfiniBandドライバーのインストールと設定が終わった。残りのコンピュータでも同様の作業を繰り返す。/tmpへ新しいカーネルサポート.isoファイルを書き込む作業は共通なので、/tmpの.isoファイルをNFSで共有しているファイルにコピーしておけば、そこの作業は1回で済む。全部のコンピュータへドライバーのインストールと設定が終わったら、どれか1台だけのコンピュータ上でサブネットマネージャのデーモンopensmdサービスを起動する。
[root@aegis mnt]# service opensmd start
Starting IB Subnet Manager. [ OK ]
[root@aegis mnt]# chkconfig opensmd on
[root@aegis mnt]# chkconfig --list opensmd
opensmd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
これでInfiniBandを使って、通信を行う準備は整った。

2.OpenMPIをInfiniBand用にconfigureしmakeとmake installを行う
 続いてこちらからopenmpi-1.7.2.tar.bz2をダウンロードする。ダウンロードしたファイルのあるディレクトリに移り、ファイルを解凍し、できたディレクトリに移る。
[hpc@aegis ~ 1005]$ cd Downloads/
[hpc@aegis Downloads 1006]$ tar xjf openmpi-1.7.2.tar.bz2 
[hpc@aegis Downloads 1007]$ cd openmpi-1.7.2
 次にconfigureを行うが、それに必要なOpenMPIをインストールするディレクトリを決め、OpenMPI用のコンパイラーを決める。OpenMPIをインストールするディレクトリがNFSで共有されていれば、インストールはNFSのサーバーだけで済む。共有されていない場合、全てのコンピュータにインストールする必要がある。ここでは、/optがNFSで共有されているので、/opt/openmpiにインストールすることにする。OpenMPI用のコンパイラーは、何も指定しないと、gccやgfortranが使われる。ここではインテル・コンパイラーを使うことにする。使用するコンパイラーのパスは通ってないといけない。これらを決めたらconfigureを行う。オプションの、--prefix=でインストールするディレクトリを、CC=でcコンパイラーを、CXX=でc++コンパイラーを、F77=でfortran77コンパイラーを、FC=でfortran90コンパイラーを、--with-openib=でInfiniBandドライバーがあるディレクトリ(/usrにインストールされている)を指定する。
[hpc@aegis openmpi-1.7.2 1011]$ ./configure --prefix=/opt/openmpi CC=icc CXX=icpc F77=ifort FC=ifort --with-openib=/usr
実行するとメッセージが長々と表示され、時間も結構かかる。E5-2687Wで約5分30秒かかった。
 それが終わったらmakeを行う。これもメッセージが長々と表示され、時間も結構かかる。E5-2687Wで約18分25秒かかった。
[hpc@aegis07 openmpi-1.7.2 1008]$ make
 ここまでは一般ユーザーの権限で実行可能だが、次のmake installではOpenMPIをrootが所有するするディレクトリに書き込むので、rootになって行う。
[hpc@aegis07 openmpi-1.7.2 1007]$ su
パスワード: <ー rootのパスワードを入力
[root@aegis07 openmpi-1.7.2]# make install
メッセージが表示され、それほど待たずに終了する。E5-2687Wで約1分10秒かかった。
 最後に、.bashrcにOpenMPI用の設定(赤文字)を付け加え、OpenMPIが使えるようにする。
[hpc@aegis07 openmpi-1.7.2 1007]$ cat ~/.bashrc
# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi

# User specific aliases and functions
. /opt/intel/bin/compilervars.sh intel64
PATH=/opt/openmpi/bin:$PATH
LD_LIBRARY_PATH=/opt/openmpi/lib:$LD_LIBRARY_PATH
MANPATH=/opt/openmpi/share/man:$MANPATH
export PATH LD_LIBRARY_PATH MANPATH
loginしなおして.bashrcの設定を有効にする。
簡単なfortranプログラムをコンパイル後実行して、動作確認する方法はこちらの最後の方にある。

3.osu_benchmarkを使い、通信速度を計測する
 InfiniBandが使えるようになったので、Gigabit Ethernetと性能比較をしたいが、計測プログラムを自作するのは面倒だ。幸い有名な計測プログラムがこちらに既にある。そこからOSU Micro-Benchmarks 4.0.1 (05/06/13)をダウンロードする。ダウンロードしたファイルがあるディレクトリに移り、ファイルを解凍し、できたディレクトリに移る。
[hpc@aegis ~]$ cd Downloads/
[hpc@aegis Downloads]$ tar xzf osu-micro-benchmarks-4.0.1.tar.gz 
[hpc@aegis Downloads]$ cd osu-micro-benchmarks-4.0.1
[hpc@aegis osu-micro-benchmarks-4.0.1]$ ls
CHANGES Makefile.am README configure depcomp install-sh mpi upc
COPYRIGHT Makefile.in aclocal.m4 configure.ac get_local_rank missing openshmem
そこにあるREADMEに、インストール方法と詳しい使い方が書いてあるが、この記事ではconfigureとmakeだけを行い、make installはしない。実行は、実行ファイルがあるディレクトリに移って行う。
configureを実行する。
[hpc@aegis osu-micro-benchmarks-4.0.1]$ ./configure
メッセージは省略。
makeを実行する。
[hpc@aegis osu-micro-benchmarks-4.0.1]$ make
メッセージは省略。
mpi/pt2ptに移動する。
[hpc@aegis osu-micro-benchmarks-4.0.1]$ cd mpi/pt2pt
[hpc@aegis pt2pt]$ ls
Makefile osu_bibw osu_bw osu_latency osu_latency_mt osu_mbw_mr osu_multi_lat
Makefile.am osu_bibw.c osu_bw.c osu_latency.c osu_latency_mt.c osu_mbw_mr.c osu_multi_lat.c
Makefile.in osu_bibw.o osu_bw.o osu_latency.o osu_latency_mt.o osu_mbw_mr.o osu_multi_lat.o
osu_bwを使い2台のコンピュータ間のデータ転送速度を測定する。mpirunのデフォールトではInfiniBandが使われる。
[hpc@aegis pt2pt]$ mpirun -np 2 -H aegis01,aegis02 osu_bw
# OSU MPI Bandwidth Test v4.0.1
# Size Bandwidth (MB/s)
1 1.29
2 2.68
4 6.13
8 17.17
16 34.17
32 66.30
64 131.07
128 286.24
256 545.00
512 1051.96
1024 1909.01
2048 2429.00
4096 2997.33
8192 3268.66
16384 3097.32
32768 3313.34
65536 3460.37
131072 3693.55
262144 3751.95
524288 3781.65
1048576 3804.27
2097152 3811.37
4194304 3817.67
QDR InfiniBandは、最大で3817.67MB/sの転送速度であることがわかる。
InfiniBandの代わりにGigabit Ethernetを使うには、mpirunのオプションに-mca btl tcp,selfを追加する。
[hpc@aegis pt2pt]$ mpirun -np 2 -H aegis01,aegis02 -mca btl tcp,self osu_bw
# OSU MPI Bandwidth Test v4.0.1
# Size Bandwidth (MB/s)
1 0.25
2 0.62
4 1.21
8 2.47
16 5.17
32 10.34
64 20.65
128 38.82
256 64.94
512 80.93
1024 93.35
2048 100.32
4096 108.82
8192 112.67
16384 115.47
32768 117.77
65536 117.30
131072 117.93
262144 118.33
524288 118.49
1048576 118.58
2097152 118.62
4194304 118.64
Gigabit Ethernetは、最大で118.64MB/sの転送速度であることがわかる。
3817.67/118.64=32.179とQDR InfiniBandはGigabit Ethernetの約32倍高速という実測結果が出た。これは仕様通りであり、満足すべき結果といえる。
InfiniBand関連のお問い合わせはhpcdiyc_req@hpc.co.jpまで。

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

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