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