PDF

IBM POWER8 システム上で Weather Research and
Forecasting をコンパイルして実行する
気象分析の処理時間を短縮してより迅速に通知を行えるようにする
Qiang Liu
Smart City SaaS Test Architect
IBM
2015年 2月 26日
並列コンピューティング機能を提供する IBM POWER8 システム上で WRF (Weather Research
and Forecasting) モデルとその依存パッケージをコンパイルしてインストールし、データを生
成してこのアプリケーションを実行してください。
WRF (Weather Research and Forecasting) モデルは、大気の研究や業務としての予報などのニーズ
に対処する目的で気象予測をするために使用できる主要なアプリケーションです。WRF はソー
ス・コードを tarball として提供するオープンソース・プログラムであるため、ユーザーは各種の
プラットフォーム上で tarball をバイナリーにコンパイルする必要があります。WRF は通常、並
列コンピューティングをサポートするハイパフォーマンス・コンピューティング環境で実行され
ます。Intel x86 プラットフォームと IBM Power プラットフォームは、どちらもハイパフォーマン
ス・コンピューティングを可能にします。
このチュートリアルでは、以下の内容を学びます。
• WRF とその依存ライブラリーを、IBM POWER8 プラットフォーム上で IBM XL Fortran コンパ
イラーと XL C/C++ コンパイラーによってコンパイルする方法。
• POWER8 プラットフォーム上で、IBM Parallel Environment (PE) を使用して WRF を実行する方
法。
オペレーティング・システムに関する情報とディレクトリーの設定
このチュートリアルのために私が使用したオペレーティング・システムは、Power 対応の Red Hat
Enterprise Linux Server リリース 6.5 (Santiago) です。使用したソフトウェアおよびソース・コード
のバージョンは以下のとおりです。
• IBM XL Fortran for Linux v15.1
• IBM XL C/C++ for Linux v13.1
• IBM Parallel Environment 1.3.0.8
• WRF 3.5.1
© Copyright IBM Corporation 2015
IBM POWER8 システム上で Weather Research and Forecasting をコ
ンパイルして実行する
商標
ページ 1 / 13
developerWorks®
ibm.com/developerWorks/jp/
• NetCDF 3.6.3
• WRF Preprocessing System (WPS) 3.5.1
• zlib 1.2.8
• JasPer 1.900.1
• libpng 1.2.34
図 1. ソフトウェアの依存関係
ヒント: コンパイルおよびインストールを実行するために、非 root ユーザーを作成することをお
勧めします。例えば、loadl という非 root ユーザーを作成すると、WRF とその関連ライブラリー
をコンパイルして loadl ホーム・ディレクトリーにインストールすることができます。PE を使用
して並列コンピューティング・ジョブを実行する際にも、非 root ユーザーとして実行する必要が
あります。
リスト 1. このチュートリアルでの定義
/home/loadl/project/bin --> The folder where the compiled binaries are installed.
/home/loadl/project/include --> The folder where the header files are installed.
/home/loadl/project/lib --> The folder where the libraries are installed.
/home/loadl/project/share --> The folder where the manual, document are installed.
/home/loadl/project/source --> The folder where the source code packages are saved.
/home/loadl/project/netcdf --> The folder where the compiled netcdf are installed.
It has sub folders such as bin,include,lib,share.
また、ユーザー loadl の SSH 鍵ペアを生成し、その鍵ペアの一方である公開鍵を、許可された鍵
に追加する必要もあります。こうすることにより、ユーザー loadl のサイレント・ログインが可
能になります。サイレント・ログインは、このノード上で PE ジョブを実行するための前提条件で
す。
WRF モデルのインストールとコンパイル
Linux 上に XL Fortran コンパイラーと XL C/C++ コンパイラーをインストールする
XL Fortran コンパイラーと XL C/C++ コンパイラーをインストールするには、root を使用しま
す。注: XL C/C++ コンパイラーには、以下のリストに示されているパッケージが必要です。これ
らのパッケージが用意されていない場合は、yum を使用してインストールしてください。32 ビッ
ト版パッケージには拡張子 *.ppc、64 ビット版パッケージには拡張子 *.ppc64 が使用されていま
す。
リスト 2. XL C/C++ コンパイラーに必要なパッケージ
yum
yum
yum
yum
yum
yum
yum
yum
yum
install
install
install
install
install
install
install
install
install
libstdc++*.ppc
gcc
gcc-c++
glibc-devel*.ppc64
glibc-devel*.ppc
libstdc++-devel*.ppc64
compat-libstdc++-33*.ppc
compat-libstdc++-33*.ppc64
ksh
IBM POWER8 システム上で Weather Research and Forecasting をコ
ンパイルして実行する
ページ 2 / 13
ibm.com/developerWorks/jp/
developerWorks®
Linux 上に PE をインストールする
まず始めに、必要なすべてのパッケージがインストールされていることを確認してください。PE
には、bind パッケージと xinetd パッケージが必要です。yum を使用して、yum install bind で
bind パッケージをインストールし、yum install xinetd で xinetd パッケージをインストールしま
す。それが終わったら、/etc/selinux/config ファイルを編集し、SELINUX=disabled を設定する
ことで、SELinux を無効にします。
これらの変更を適用するために、オペレーティング・システムをリブートします。
その後、root として以下のステップに従ってコマンドを実行し、PE をインストールします。
1. export
2. rpm -i
3. rpm -i
4. rpm -i
5. export
6. rpm -i
7. rpm -i
IBM_PPEDEV_LICENSE_ACCEPT=yes
ppedev_pa_license-1.3.0-0.ppc64.rpm
ppedev_pa_runtime-1.3.0-0.ppc64.rpm
ppedev_pa_hpct-1.3.0-0.ppc64.rpm
IBM_PPE_RTE_LICENSE_ACCEPT=yes
ppe_rte_license-1.3.0.8-s008a.ppc64.rpm
ppe_rte_1308-1.3.0.8-s008a.ppc64.rpm
このパッケージのインストールの終了時に、推奨されるシステム設定に変更するよう促すプロン
プトが出されます。これらのシステム設定の変更は、root として行ってください。ノード設定診
断スクリプトを開始して、以下のように変更します。
問題 1: net.core.wmem_max は 124928 に設定されていますが、推奨される値は 1048576 です。
sysctl -w net.core.wmem_max=1048576
問題 2: net.core.rmem_max は 124928 に設定されていますが、推奨される値は 8388608 です。
sysctl -w net.core.rmem_max=8388608
問題 3: net.ipv4.ipfrag_low_thresh は 196608 に設定されていますが、推奨される値は 1048576
です。
sysctl -w net.ipv4.ipfrag_low_thresh=1048576
問題 4: net.ipv4.ipfrag_high_thresh は 262144 に設定されていますが、推奨される値は 8388608
です。
sysctl -w net.ipv4.ipfrag_high_thresh=8388608
問題 5: nofile の ulimit は 1024 に設定されていますが、推奨される値は 4096 です。
Update nofile to be 4096 in /etc/security/limits.conf
問題 6: memlock の ulimit は 64 に設定されていますが、推奨される値は unlimited です。
IBM POWER8 システム上で Weather Research and Forecasting をコ
ンパイルして実行する
ページ 3 / 13
developerWorks®
ibm.com/developerWorks/jp/
Update memlock to be unlimited in /etc/security/limits.conf
service xinetd restart を実行して xinetd を再起動します。
問題 7: per_source は /etc/xinetd.conf で 10 に設定されていますが、推奨される値は 80 です。
Change per_source to 80 in /etc/xinetd.conf
service xinetd restart を実行して xinetd を再起動します。
ulimit 関連の設定に従って、/etc/profile の中で ulimit -n 4096 および ulimit -l unlimited
を設定します。その後、xinetd サービスを再起動します。
リスト 3. xinetd サービスを再起動する
rpm -i pperte-1.3.0.8-s008a.ppc64.rpm
rpm -i ppe_rte_samples-1.3.0.8-s008a.ppc64.rpm
rpm -i ppertesamples-1.3.0.8-s008a.ppc64.rpm
NetCDF をコンパイルする
loadl としてログインしてから、以降に説明するステップに従います。NetCDF をコンパイルする
には、その前に、以下に示すシステム環境変数を有効にする必要があります。
リスト 4. システム環境変数
export
export
export
export
export
export
export
export
export
export
CC="xlc_r"
CFLAGS="-q64 -O3 -qstrict -DIBMR2Fortran"
CPP="xlc_r -E"
CXX="xlC_r"
CXXFLAGS="-q64 -O3 -qstrict"
CXXCPP="xlC_r -E"
F77="xlf_r"
FC="xlf_r"
F90="xlf90_r"
FFLAGS="-q64 -O3 -qstrict"
C/C++ コンパイラーとしては xlc_r を使用し、Fortran コンパイラーとしては xlf_r を使用しま
す。この環境変数の設定は、NetCDF (およびその他の関連ライブラリー) から WRF へのコンパイ
ルのすべてに適用する必要があります。そうすることで、WRF の依存ライブラリーが WRF のコン
パイルに対応するようになります。そうしなかった場合には、WRF のコンパイル中に依存ライブ
ラリーが呼び出されたときに非対応のエラーが発生してしまいます。
コンパイルされた出力のインストール先フォルダーを指定するには、以下のコードを使用しま
す。
リスト 5. ターゲット・フォルダーでのコンパイル済み出力のインストール
./configure --prefix=/home/loadl/project/netcdf
make
make install
zlib をコンパイルする
以下のリストに示されているステップに従います。
IBM POWER8 システム上で Weather Research and Forecasting をコ
ンパイルして実行する
ページ 4 / 13
ibm.com/developerWorks/jp/
developerWorks®
リスト 6. zlib をコンパイルする
./configure --prefix=/home/loadl/project
make
make install
JasPer をコンパイルする
以下のリストに示されているステップに従います。
リスト 7. JasPer をコンパイルする
./configure --prefix=/home/loadl/project
make
make install
libpng をコンパイルする
以下のリストに示されているステップに従います。
リスト 8. libpng をコンパイルする
export LD_LIBRARY_PATH=/home/loadl/project/lib/:$ LD_LIBRARY_PATH
export LDFLAGS="-L/home/loadl/project/lib/ -L/home/loadl/project/netcdf/lib"
export CPPFLAGS="-I/home/loadl/project/include/ -I/home/loadl/project/netcdf/include"
./configure --prefix=/home/loadl/project
make
make install
WRF をコンパイルする
WRF をコンパイルするための前提条件として、以下の環境変数を有効にする必要があります。
リスト 9. WRF をコンパイルするために環境変数を有効にする
export
export
export
export
JASPERLIB=/home/loadl/project/lib
JASPERINC=/home/loadl/project/include
WRF_EM_CORE=1
NETCDF=/home/loadl/project/netcdf
WRF の並列コンピューティング機能を有効にするには、-lmpi を指定した xlc_r および xlf95_r
を使用してコンパイルを行います。
WRFV3.5.1.TAR.gz を解凍したら、make ファイルを作成できるようにするために、最初に構成スク
リプトを実行します。これによって、多数の変数定義が含まれる configure.wrf ファイルが生成
されます。このファイルは make の実行中に読み取られます。
configure を実行します。プラットフォームを選択するよう促されたら、サポートされている以
下のプラットフォームのいずれかを選択します。
1. Linux ppc64 BG /L blxlf compiler with blxlc (dmpar)
2. Linux ppc64 BG /P xlf compiler with xlc (smpar)
IBM POWER8 システム上で Weather Research and Forecasting をコ
ンパイルして実行する
ページ 5 / 13
developerWorks®
ibm.com/developerWorks/jp/
3. Linux ppc64 BG /P xlf compiler with xlc (dmpar)
4. Linux ppc64 BG /P xlf compiler with xlc (dm+sm)
5. Linux ppc64 IBM Blade Server xlf compiler with xlc (dmpar)
POWER8 はまだ新しいため、構成スクリプトが CPU として認識するのは (BlueGene) だけですが、
これによってコンパイル結果に影響が出ることはありません。3 番目の選択肢「Linux ppc64 BG /P
xlf compiler with xlc (dmpar)」を選択してください。
プラットフォームを選択すると、以下のプロンプトが出されます。
リスト 10. WRF のコンパイル構成での「ネスト用コンパイル」によるプロンプト
Compile for nesting?
1=basic
2=preset moves
3=vortex following
[default 1]
デフォルトの「1=basic」を選択します。この項目を選択することで、使用中のエディションに対
応する構成テンプレート・ファイルが生成されます。configure.wrf ファイルを編集して、以下
のようにフィールドを更新します。
リスト 11. 構成ファイルのフィールドを更新する
SFC
=
SCC
=
CCOMP =
DM_FC =
DM_CC =
CPP
=
xlf95_r -q64 -I/opt/ibmhpc/pecurrent/mpich2/gnu/include64 -L/opt/ibmhpc/pecurrent/
mpich2/gnu/fast/lib64
xlc_r -q64 -I/opt/ibmhpc/pecurrent/mpich2/gnu/include64 -L/opt/ibmhpc/pecurrent/
mpich2/gnu/fast/lib64
xlc_r -q64 -I/opt/ibmhpc/pecurrent/mpich2/gnu/include64 -L/opt/ibmhpc/pecurrent/
mpich2/gnu/fast/lib64
xlf95_r -q64 -I/opt/ibmhpc/pecurrent/mpich2/gnu/include64 -L/opt/ibmhpc/pecurrent/
mpich2/gnu/fast/lib64 -lmpi
xlc_r -q64 -I/opt/ibmhpc/pecurrent/mpich2/gnu/include64 -L/opt/ibmhpc/pecurrent/
mpich2/gnu/fast/lib64 -DMPI2_SUPPORT –lmpi
/opt/ibm/xlf/15.1.0/exe/cpp -C -P
構成ファイルのフィールドの更新が完了したら、./compile em_real >& compile.log を実行し
ます。これにより、コンパイルが実行されて、デバッグに使用できるようにコンパイル・ログ
が compile.log に書き込まれます。コンパイルが成功すると、以下の exe ファイルが生成されま
す。
リスト 12. exe の生成
-bash-4.1$
lrwxrwxrwx
lrwxrwxrwx
lrwxrwxrwx
lrwxrwxrwx
lrwxrwxrwx
ll run/*.exe
1 loadl loadl
1 loadl loadl
1 loadl loadl
1 loadl loadl
1 loadl loadl
17
15
16
14
15
Aug
Aug
Aug
Aug
Aug
22
22
22
22
22
07:55
07:55
07:55
07:55
07:53
run/ndown.exe -> ../main/ndown.exe
run/nup.exe -> ../main/nup.exe
run/real.exe -> ../main/real.exe
run/tc.exe -> ../main/tc.exe
run/wrf.exe -> ../main/wrf.exe
WPS をコンパイルする
WPSV3.5.1.TAR.gz を解凍し、make ファイルを作成するための構成スクリプトを実行します。構成
スクリプトを実行すると、プラットフォームを選択するよう求めるプロンプトが出されます。
IBM POWER8 システム上で Weather Research and Forecasting をコ
ンパイルして実行する
ページ 6 / 13
ibm.com/developerWorks/jp/
developerWorks®
リスト 13. 構成スクリプトの実行結果
Please select from among the following supported platforms.
1.
2.
3.
4.
5.
Linux
Linux
Linux
Linux
Linux
ppc64
ppc64
ppc64
ppc64
ppc64
Power775
Power775
Power775
Power775
BG bglxf
xl compilers & MPICH2
xl compilers & MPICH2
xl compilers & MPICH2
xl compilers & MPICH2
compiler with blxlc
comms (serial)
comms (serial_NO_GRIB2)
comms (dmpar)
comms (dmpar_NO_GRIB2)
(dmpar)
Enter selection [1-5] :
「3. Linux ppc64 Power775 xl compilers & MPICH2 comms (dmpar)」を選択します。
WPS3.5.1 ではまだ、最新の POWER8 システムを認識することができません。この構成スクリプ
トによって生成される configure.wps という名前のファイルには、多数の変数定義が含まれま
す。make の実行中にはこのファイルが読み取られるため、configure.wps 内の WRF 相対パスの
値を変更する必要があります。
WRF_DIR
=
../../wrf_arw/WRFV3
注: wrf_arw/WRFV3 の後にスペースがないようにしてください。スペースがあると、エラーが発生
します。
上記のフィールドを以下のように変更します。
リスト 14. フィールドを変更する
CPP
MPICH2_SYS
MPI_INC
MPI_LIB
FC
SFC
CC
CPPFLAGS
=
=
=
=
=
=
=
=
/opt/ibm/xlf/15.1.0/exe/cpp -C -P
/opt/ibmhpc/pecurrent/mpich2/gnu
-I$(MPICH2_SYS)/include64
-L$(MPICH2_SYS)/lib64 –lmpi
xlf95_r
xlf95_r
mpicc -DMPI2_SUPPORT -DFSEEKO64_OK
-DAIX -DIBM4 -DIO_NETCDF -DIO_BINARY -DIO_GRIB1 -DBIT32 -D_MPI
変更を保存して、execute ./compile > &compile.log を実行します。これで、コンパイルが開始
され、ログが compile.log ファイルに書き込まれます。WPS のコンパイルが完了すると、以下の
exe ファイルが生成されます。
リスト 15. コンパイルが成功すると生成される exe
[loadl@tul237p5 WPS]$ ll
lrwxrwxrwx 1 loadl loadl
lrwxrwxrwx 1 loadl loadl
lrwxrwxrwx 1 loadl loadl
*.exe
23 Aug 12 00:37 geogrid.exe -> geogrid/src/geogrid.exe
23 Aug 12 00:37 metgrid.exe -> metgrid/src/metgrid.exe
21 Aug 12 00:37 ungrib.exe -> ungrib/src/ungrib.exe
POWER8 上で WRF を実行する
WRF を実行するには、WRF の入力データを用意する必要があります。それには、気象入力デー
タを WPS で前処理しなければなりません。geogrid.exe を実行して地球の静的データを生成
し、ungrib.exe を実行して気象入力用の GRIB 気象データをアンパックします。WRF の入力デー
タを生成するには、さらに metgrid.exe を実行して気象データをモデル・ドメイン上で水平方向
に補間し、real.exe を実行してモデル座標上でデータを垂直方向に補間します。
IBM POWER8 システム上で Weather Research and Forecasting をコ
ンパイルして実行する
ページ 7 / 13
developerWorks®
ibm.com/developerWorks/jp/
図 2. WRF の入力データ生成処理
ungrib.exe、geogrid.exe、metgrid.exe は単一のプロセスで実行されます。real.exe と wrf.exe
は並列モードで実行されます。つまり、real.exe と wrf.exe は PE によって対話式で実行されま
す。
PE で WRF を対話式で実行する方法の例は以下のとおりです。
SMT4 が有効にされている POWER8 システム上では、CPU の数はコア数の 4 倍あります。20 コア
搭載の POWER8 システムでは、この例に示すように nmon を使用してシステム・リソースと使用状
況をモニターすることをお勧めします。
図 3. nmon ツールによる CPU 情報の読み込み
POWER8 チップは登場して間もないため、nmon はそのモデルを正しく認識することができません
が、CPU 周波数 (4.1GHz) と SMT 値 (SMT=4) を読み込むことはできます。
MP_TASK_AFFINITY=core が設定されている場合、並列タスクの最大数は、合計コア数と同じで
す。したがって、この 20 コアの POWER8 環境では、並列タスクの最大数は 20 となります。
IBM POWER8 システム上で Weather Research and Forecasting をコ
ンパイルして実行する
ページ 8 / 13
ibm.com/developerWorks/jp/
developerWorks®
MP_TASK_AFFINITY=cpu が設定されている場合、並列タスクの最大数は、合計 CPU 数と同じです。
したがって、この 20 コアの POWER8 (SMT4) 環境では、並列タスクの最大数は 80 となります。
poe コマンドは PE の主要な実行プログラムです。並列コンピューティング・タスクを呼び出すに
は、このコマンドを使用します。poe は、hostfile オプションに指定するファイルが必要です。こ
のファイルは、このホスト上で使用可能な合計 CPU リソースを記述するために使用されます。こ
のファイルには host.list という名前を付けて、各行に <ホスト名>*<数> という形でリソースを
記述することができます。以下はその一例です。
myhost01*20
myhost02*10
この例では、host.list の内容を myhost*80 として設定しています。
次に、以下の poe コマンドを使用して WRF の並列コンピューティングを開始します。
poe /home/loadl/project/wrf.exe -hostfile /home/loadl/project/host.list –procs 78
-procs 78 は、合計 78 の並列タスクが開始されることを意味します。この数は、hostfile オプショ
ンとして指定するファイルに記述されている合計リソース数より少なくなければなりません。
MP_TASK_AFFINITY=core を設定したにも関わらず、78 の並列タスクを開始しようとすると、以下
のようなエラーが発生します。
ERROR: 0031-758 AFFINITY: Oversubscribe: 78 tasks in total, each task requires 1 resource, but there
are only 20 available resource. Affinity can not be applied. (エラー: 0031-758 AFFINITY: オーバーサブ
スクライブ: 合計 78 タスクの各タスクに 1 リソースが必要ですが、使用可能なリソースは 20 しか
ありません。アフィニティーを適用できません。)
ERROR: 0031-161 EOF on socket connection with node myhost (エラー: 0031-161 myhost ノードとの
ソケット接続での EOF)
1 つの WRF ドメイン・モデルに対して、20 コア搭載 POWER8 ボックス上で設定をいろいろと変え
てテストしてみました。その結果、以下のことがわかりました。
• MP_TASK_AFFINITY=cpu および procs=78 を設定することで、最大のパフォーマンスを得るこ
とができます。WRF 実行中の CPU 使用率は以下のようになります。
IBM POWER8 システム上で Weather Research and Forecasting をコ
ンパイルして実行する
ページ 9 / 13
developerWorks®
ibm.com/developerWorks/jp/
図 4. MP_TASK_AFFINITY=cpu および procs=78 を設定した場合の CPU 使用率
• MP_TASK_AFFINITY=cpu および procs=80 を設定すると、すべての CPU リソースが使用される
ことになりますが、パフォーマンスは低下します。なぜなら、I/O 管理が委任される CPU リ
ソースがなくなるためです。これは、全体的なパフォーマンスに影響を及ぼします。
• MP_TASK_AFFINITY=core および procs = 20 は悪くない設定ですが、MP_TASK_AFFINITY=cpu を
設定した場合に比べるとパフォーマンスに劣ります。WRF 実行中の CPU 使用率は以下の出力
のようになります。
IBM POWER8 システム上で Weather Research and Forecasting をコ
ンパイルして実行する
ページ 10 / 13
ibm.com/developerWorks/jp/
developerWorks®
図 5. MP_TASK_AFFINITY=core を設定した場合の CPU 使用率
まとめ
このチュートリアルでは、基本的な WRF (Weather Research and Forecasting) モデルをコンパイル
して POWER8 システム上で実行する方法を説明しました。WRF の並列コンピューティングは、XL
C/Fortran コンパイラーと POWER8 CPU によってサポートされます。POWER8 CPU を使用すること
で、気象予測のプロセスに要する時間が短縮され、より大きなビジネス価値が生み出されます。
IBM POWER8 システム上で Weather Research and Forecasting をコ
ンパイルして実行する
ページ 11 / 13
developerWorks®
ibm.com/developerWorks/jp/
参考文献
• • • • IBM Power Systems
WRF (Weather Research and Forecasting) モデル
WPS (WRF Preprocessing System)
画像データを扱うためのツールキットである JasPer
IBM POWER8 システム上で Weather Research and Forecasting をコ
ンパイルして実行する
ページ 12 / 13
ibm.com/developerWorks/jp/
developerWorks®
著者について
Qiang Liu
Qiang Liu は 2005年に IBM に入社し、現在は IBM China Development Lab のクラウ
ド・デリバリー・チームの一員として働いています。アーキテクチャー設計と SaaS
オファリングに取り組んでいる彼は、x86-64 Linux や IBM Power Systems (POWER7
および POWER8) 上の Linux をはじめとする、さまざまなプラットフォーム上での
Weather Research and Forecasting データのコンパイルに取り組んだ経験があります。
© Copyright IBM Corporation 2015
(www.ibm.com/legal/copytrade.shtml)
商標
(www.ibm.com/developerworks/jp/ibm/trademarks/)
IBM POWER8 システム上で Weather Research and Forecasting をコ
ンパイルして実行する
ページ 13 / 13