WRFは、気象予測のための数値計算ソフトウェアです。 並列コンピューティングを強力にサポートしています。 DM (Distributed-Memory 並列処理) モードでビルドする場合、基本的には MPI プログラムです。 実際には、人々はクラスターで WRF を実行します。
この記事では、Linux クラスターの作成、WPS (WRF のデータ前処理モジュール)、WRF とその依存ライブラリの構築、WRF ジョブの実行など、HPC Pack を使用して WRF を実行する方法について説明します。 HPC Pack のノード管理機能とジョブ管理機能は、プロセスを簡素化し、効率を高めるのに役立ちます。
前提 条件
Linux コンピューティング ノードを準備します。 ARM テンプレートを使用して新しい Linux クラスターをデプロイすることも、既存のクラスターのクラスター マネージャーに Linux ノードを追加することもできます。 ワークロードで RDMA ネットワークが必要な場合は、VM が同じ仮想マシン スケール セットまたは可用性セットにデプロイされていることを確認し、VM が RDMA 対応になるように、
がサフィックス と が H シリーズ 配置されている必要があることに注意してください。 オプション 1: Linux ワークロード の単一ヘッド ノード クラスターを使用して、新しい Linux クラスターをデプロイします。
ARM テンプレート の
オプション 2: 既存のクラスターのクラスター マネージャーで、新しい IaaS ノード テンプレートを追加し、テンプレートを使用して新しいノードを追加します。 クラスターには、Windows ワークロードまたは Linux ワークロード用のクラスターを使用できます。
を追加する
を追加する
ノードをデプロイした後、ノード用の特定のグループを作成する必要があります。 これは、次のセクションの clusrun コマンドで、WRF 関連のノードではなくコマンドが実行されないようにするのに役立ちます。 ここでは、新しく追加されたノードの
WRFNodes
を作成します。を追加する
システム環境を準備します。システムに
gfortran コンパイラと、gcc とcpp をする必要があります。 CSH、 perl 、sh スクリプト言語も必要です。WRF ビルド システムでは、これらの言語で記述されたスクリプトがユーザー インターフェイスの最上位レベルとして使用されるためです。 WRFの公式 ウェブサイト は、コンパイラが互いに互換性があり、スクリプト言語がシステム上で適切に動作していることを検証するためのテストを提供します。 ホーム ディレクトリの下
WRFModel/Tests
新しいフォルダーを作成し、テスト ファイルをダウンロードし、clusrun を使用してテストを実行します。clusrun /nodegroup:WRFNodes "wget https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compile_tutorial/tar_files/Fortran_C_tests.tar; mkdir -p ~/WRFModel/Tests; tar -xf Fortran_C_tests.tar -C ~/WRFModel/Tests;"&&clusrun /nodegroup:WRFNodes "cd ~/WRFModel/Tests;gfortran TEST_1_fortran_only_fixed.f;./a.out;gfortran TEST_2_fortran_only_free.f90;./a.out;gcc TEST_3_c_only.c;./a.out;gcc -c -m64 TEST_4_fortran+c_c.c;gfortran -c -m64 TEST_4_fortran+c_f.f90;gfortran -m64 TEST_4_fortran+c_f.o TEST_4_fortran+c_c.o;./a.out;./TEST_csh.csh;./TEST_perl.pl;./TEST_sh.sh;"
WRF をダウンロードしてビルドする
環境変数を設定する
WRF またはライブラリをコンパイルする前に、これらのメイクファイル コンパイラ オプションを設定する必要があります。
名前 価値 CC gcc CXX g++ FC gfortran FCFLAGS -m64 F77 gfortran FFLAGS -m64 ホーム ディレクトリの下
WRFModel/Build_WRF/Libraries
新しいフォルダーを作成し、別のライブラリがインストールされる場所を含む親ディレクトリとして使用します。 その値を環境変数としてDIR
設定します。上記のすべてを達成するには、clusrun を使用します。
clusrun /nodegroup:WRFNodes "mkdir -p ~/WRFModel/Build_WRF/LIBRARIES;sed -i '$a export DIR=~/WRFModel/Build_WRF/LIBRARIES \nexport CC=gcc \nexport CXX=g++ \nexport FC=gfortran \nexport FCFLAGS=-m64 \nexport F77=gfortran \nexport FFLAGS=-m64' ~/.profile;source ~/.profile"
MPICH をダウンロードしてコンパイルする
原則として、MPI-2 標準の実装は、WRF の分散メモリ並列処理モードで動作する必要があります。 しかし、MPICHはWRFの公式 ウェブサイト 推奨しています。 MPICH をダウンロードしてビルドし、MPICH の
bin
フォルダーをPATH
に追加する必要があります。上記のすべてを達成するには、clusrun を使用します。
clusrun /nodegroup:WRFNodes "cd ~/WRFModel/Build_WRF/LIBRARIES;wget https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compile_tutorial/tar_files/mpich-3.0.4.tar.gz; tar xzvf mpich-3.0.4.tar.gz;cd mpich-3.0.4;./configure --prefix=`echo $(dirname $PWD)`/mpich;make;make install;sed -i '$a export PATH=$DIR/mpich/bin:$PATH' ~/.profile;source ~/.profile"
ライブラリのダウンロードとコンパイル
WRF をコンパイルする前に、インストールする必要があるさまざまな依存ライブラリがあります。
NetCDF
は、配列計算の基礎として使用されます。zlib
、libpng
、およびJasper
は、GRIB2 機能を使用して WPS をコンパイルするために必要な圧縮ライブラリです。NetCDF
をダウンロードしてコンパイルします。 次に、そのbin
フォルダーをPATH
に追加し、環境変数をNETCDF
追加します。 これらを実現するには、clusrun を使用します。clusrun /nodegroup:WRFNodes "cd ~/WRFModel/Build_WRF/LIBRARIES;wget https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compile_tutorial/tar_files/netcdf-4.1.3.tar.gz; tar zxvf netcdf-4.1.3.tar.gz;cd netcdf-4.1.3;./configure --prefix=`echo $(dirname $PWD)`/netcdf --disable-dap --disable-netcdf-4 --disable-shared;make;make install;sed -i '$a export PATH=$DIR/netcdf/bin:$PATH \nexport NETCDF=$DIR/netcdf' ~/.profile;source ~/.profile"
zlib
をダウンロードしてコンパイルします。 次に、メイクファイル コンパイラ オプションLDFLAGS
およびCPPFLAGS
を設定します。 これらを実現するには、clusrun を使用します。clusrun /nodegroup:WRFNodes "cd ~/WRFModel/Build_WRF/LIBRARIES;wget https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compile_tutorial/tar_files/zlib-1.2.11.tar.gz; tar xzvf zlib-1.2.11.tar.gz;cd zlib-1.2.11;./configure --prefix=`echo $(dirname $PWD)`/grib2;make;make install;sed -i '$a export LDFLAGS=-L$DIR/grib2/lib \nexport CPPFLAGS=-I$DIR/grib2/include \nexport LD_LIBRARY_PATH=$DIR/grib2/lib:$LD_LIBRARY_PATH ' ~/.profile;source ~/.profile"
clusrun を使用して
libpng
をダウンロードしてコンパイルします。clusrun /nodegroup:WRFNodes "cd ~/WRFModel/Build_WRF/LIBRARIES;wget https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compile_tutorial/tar_files/libpng-1.2.50.tar.gz; tar xzvf libpng-1.2.50.tar.gz;cd libpng-1.2.50;./configure --prefix=`echo $(dirname $PWD)`/grib2;make;make install;"
Jasper
をダウンロードしてコンパイルします。 次に、環境変数JASPERLIB
追加し、それに対応してJASPERINC=
します。 これらを実現するには、clusrun を使用します。clusrun /nodegroup:WRFNodes "cd ~/WRFModel/Build_WRF/LIBRARIES;wget https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compile_tutorial/tar_files/jasper-1.900.1.tar.gz; tar xzvf jasper-1.900.1.tar.gz;cd jasper-1.900.1;./configure --prefix=`echo $(dirname $PWD)`/grib2;make;make install;sed -i '$a export JASPERLIB=$DIR/grib2/lib \nexport JASPERINC=$DIR/grib2/include' ~/.profile;source ~/.profile"
ライブラリが構築されたら、WPS および WRF ビルドに使用するコンパイラでライブラリが動作できることを確認する必要があります。 WRFの ウェブサイトによって提供されるテストを使用してください.
clusrun /nodegroup:WRFNodes "wget https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compile_tutorial/tar_files/Fortran_C_NETCDF_MPI_tests.tar; tar -xf Fortran_C_NETCDF_MPI_tests.tar -C ~/WRFModel/Tests;"&&clusrun /nodegroup:WRFNodes "source ~/.profile;cd ~/WRFModel/Tests;cp ~/WRFModel/Build_WRF/LIBRARIES/netcdf/include/netcdf.inc .;gfortran -c 01_fortran+c+netcdf_f.f;gcc -c 01_fortran+c+netcdf_c.c;gfortran 01_fortran+c+netcdf_f.o 01_fortran+c+netcdf_c.o -L ~/WRFModel/Build_WRF/LIBRARIES/netcdf/lib -lnetcdff -lnetcdf;./a.out;mpif90 -c 02_fortran+c+netcdf+mpi_f.f;mpicc -c 02_fortran+c+netcdf+mpi_c.c;mpif90 02_fortran+c+netcdf+mpi_f.o 02_fortran+c+netcdf+mpi_c.o -L ~/WRFModel/Build_WRF/LIBRARIES/netcdf/lib -lnetcdff -lnetcdf;mpirun ./a.out"
WRF と WPS をダウンロードしてコンパイルする
Build_WRF
で、Github から WRF と WPS のソース コードを複製します。clusrun /nodegroup:WRFNodes "cd ~/WRFModel/Build_WRF;git clone https://github.com/wrf-model/WRF;git clone https://github.com/wrf-model/WPS"
WRF をコンパイルします。 コンパイルする前に、使用するコンパイラと WRF の構築方法を構成する必要があります。 WRF は DM モードでビルドするため、オプション 34 (gcc(dmpar) を使用する gfortran コンパイラ) を選択し、入れ子のオプションは "basic" にする必要があります。
WRF は構成で対話型モードを採用しているため、SSH (クラスター マネージャー -> リソース管理 -> ノード アクション -> リモート デスクトップ/SSH) 経由でノードにログインし、構成プログラムを手動で実行してコンパイルします。
source ~/.profile; cd ~/WRFModel/Build_WRF/WRF; ./configure #Here, you choose the compile option you want ./compile em_real >& log.compile #The compilation should take about 20-30 minutes
ls -ls main/*.exe
を実行してコンパイルが成功したかどうかを確認します。次の内容が表示されます。wrf.exe real.exe ndown.exe tc.exe
WPS をコンパイルします。 ここでも、コンパイラを構成する必要があります。 オプション1 (シリアル、WRF公式ウェブサイトが推奨)を選択してください。 WPS は CPU 負荷が少なく、1 つのプロセッサ ジョブとして実行できます。
SSH 経由でノードにログインし、構成プログラムを実行してコンパイルします。
source ~/.profile; cd ~/WRFModel/Build_WRF/WPS; ./configure #Here, you choose the compile option you want ./compile >& log.compile #The compilation should take a few minutes
コンパイルが成功した場合は、WPS 最上位ディレクトリに 3 つの実行可能ファイルが存在する必要があります。
geogrid.exe -> geogrid/src/geogrid.exe ngrib.exe -> ungrib/src/ungrib.exe metgrid.exe -> metgrid/src/metgrid.exe
WRF ワークロードを実行する
WRF ジョブのサンプル データを準備する
この記事では、ハリケーン マシューの単一ドメイン ケースを使用します。 背景の詳細については、この リンクを参照してください。
静的地理データ をダウンロードし、リアルタイム データをします。 clusrun
して各ノードのサンプル データをダウンロードできますが、ネットワーク帯域幅を節約するには、1 つのノードでのみダウンロードを実行し、NFS クラスターを構成し、NFS サービスを介してデータを共有することをお勧めします。サーバー側:
データのダウンロード:
mkdir -p ~/WRFModel/Build_WRF/DATA; cd ~/WRFModel/Build_WRF/DATA; wget https://www2.mmm.ucar.edu/wrf/src/wps_files/geog_high_res_mandatory.tar.gz; #Static geography data tar -xzvf geog_high_res_mandatory.tar.gz wget https://www2.mmm.ucar.edu/wrf/TUTORIAL_DATA/matthew_1deg.tar.gz #Real time data tar -xf matthew_1deg.tar.gz
sudo apt install nfs-kernel-server
を実行して nfs サーバーをインストールします。 次に、sudo systemctl status nfs-server
してサービスの状態を確認します。 サービスがアクティブな場合は、/etc/exports
を変更して、DATA
共有フォルダーへのアクセスを許可するクライアントを構成します。/home/hpcadmin/WRFModel/Build_WRF/DATA [client hostname1](rw,sync,no_subtree_check) ... /home/hpcadmin/WRFModel/Build_WRF/DATA [client hostnamen](rw,sync,no_subtree_check)
sudo exportfs -arv
を実行して変更を有効にし、showmount -e
してエクスポートリストを確認します。クライアント側:
nfs クライアントをインストールし、共有フォルダーをマウントし、Linux システムの起動時に共有フォルダーを自動的にマウントする行を
/etc/fstab
に追加します。 ノードのWRF-NFSClients
ノード グループを作成し、clusrun を使用してすべてを実現します。clusrun /nodegroup:WRF-NFSClients "sudo apt install nfs-common -y;mkdir -p ~/WRFModel/Build_WRF/DATA;cd ~/WRFModel/Build_WRF;sudo mount [server hostname]:/home/hpcadmin/WRFModel/Build_WRF/DATA DATA;sudo sed -i '$a [server hostname]:/home/hpcadmin/WRFModel/Build_WRF/DATA /home/hpcadmin/WRFModel/Build_WRF/DATA nfs defaults,_netdev 0 0' /etc/fstab"
手記
- 静的な地理データには、Windows の予約ファイル名の 1 つである "CON" という名前のサブフォルダーが含まれるため、WRF ワークロードでは SMB 共有ディレクトリを使用しないでください。
- このデモでは、データを 1 つのノード
DATA
ディレクトリにダウンロードします。これは、WPS
ディレクトリとWRF
ディレクトリと同じレベルです。 作業のために、ニーズに基づいて適切な NFS サーバー ノードとディレクトリを選択し、ディレクトリの下に十分な空き領域があることを確認してください。 静的地理データのサイズは 29G です。HBv2 シリーズの OS ディスクは 64G で、一時 データ ディスクサイズは 480 + 960G です。 OS ディスクにデータをダウンロードする必要がある場合は、Windows 仮想マシンに接続されている仮想ハード ディスクを展開 。
clusrun を使用して、データ ディレクトリの環境変数
WRFDATADIR
を設定します。clusrun /nodegroup:WRFNodes "sed -i '$a export WRFDATADIR=~/WRFModel/Build_WRF/DATA' ~/.profile;source ~/.profile"
設定ファイルの編集
WPS と WRF では、さまざまな変数を使用して、データ形式、計算の時間と空間のスコープなどを定義します。すべての変数の詳細な説明については、次のリンクを参照してください: WPS, WRF.
次の表に、WPS の設定ファイル namelist.wps
を変更して、ケース スタディに合わせる方法を示します。 複数の値を持つ変数の場合、最初の値のみを変更できることに注意してください。これは、単一ドメインの場合は最初のドメインのみを考慮するためです。
変数名 | 既定値 | 新しい値 |
---|---|---|
max_dom | 2 | 1 |
start_date | '2019-09-04_12:00:00','2019-09-04_12:00:00' | '2016-10-06_00:00:00' |
end_date | '2019-09-06_12:00:00','2019-09-04_12:00:00' | '2016-10-08_00:00:00' |
interval_seconds | 10800 | 21600 |
e_we | 150,220 | 91 |
e_sn | 130,214 | 100 |
dx | 15000 | 27000 |
dy | 15000 | 27000 |
map_proj | 'lambert' | 'mercator' |
ref_lat | 33.00 | 28.00 |
ref_lon | -79.00 | -75.00 |
stand_lon | -79.00 | -75.00 |
geog_data_path | '/glade/work/wrfhelp/WPS_GEOG/' | '$WRFDATADIR/WPS_GEOG' |
clusrun を使用して変更を行います。 独自の設定ファイルをアップロードしてノードにダウンロードし、既定の設定ファイルを置き換えることもできます。
clusrun /nodegroup:WRFNodes "source ~/.profile;sed -i -e 's/max_dom = 2/max_dom = 1/g' -e 's/2019-09-04_12:00:00/2016-10-06_00:00:00/g' -e 's/2019-09-06_00:00:00/2016-10-08_00:00:00/g' -e 's/interval_seconds = 10800/interval_seconds = 21600/g' -e 's/e_we = 150, 220/e_we = 91/g' -e 's/e_sn = 130, 214/e_sn = 100/g' -e 's/dx = 15000/dx = 27000/g' -e 's/dy = 15000/dy = 27000/g' -e """s/map_proj = 'lambert'/map_proj = 'mercator'/g""" -e 's/ref_lat = 33.00/ref_lat = 28.00/g' -e 's/ref_lon = -79.00/ref_lon = -75.00/g' -e 's/stand_lon = -79.0/stand_lon = -75.0/g' -e """s#/glade/work/wrfhelp/WPS_GEOG/#$WRFDATADIR/WPS_GEOG#g""" ~/WRFModel/Build_WRF/WPS/namelist.wps;"
次の表に、WRF の設定ファイル namelist.input
を変更して、ケース スタディに合わせる方法を示します。 複数の値を持つ変数の場合、最初の値のみを変更できることに注意してください。これは、単一ドメインの場合は最初のドメインのみを考慮するためです。
変数名 | 既定値 | 新しい値 |
---|---|---|
run_hours | 36 | 48 |
start_year | 2019,2019 | 2016 |
start_month | 09,09 | 10 |
start_day | 04,04 | 06 |
start_hour | 12,12 | 00 |
end_year | 2019,2019 | 2016 |
end_month | 09,09 | 10 |
end_day | 06,06 | 08 |
interval_seconds | 10800 | 21600 |
history_interval | 60,60 | 180 |
restart_interval | 7200 | 1440 |
time_step | 90 | 150 |
max_dom | 2 | 1 |
e_we | 150,220 | 91 |
e_sn | 130,214 | 100 |
num_metgrid_levels | 34 | 32 |
dx | 15000 | 27000 |
dy | 15000 | 27000 |
clusrun を使用して変更を行います。 独自の設定ファイルをアップロードしてノードにダウンロードし、既定の設定ファイルを置き換えることもできます。
clusrun /nodegroup:WRFNodes "sed -i -e 's/max_dom = 2/max_dom = 1/g' -e 's/run_hours = 36/run_hours = 48/g' -e 's/start_year = 2019, 2019/start_year = 2016/g' -e 's/start_month = 09, 09/start_month = 10/g' -e 's/start_day = 04, 04/start_day = 06/g' -e 's/start_hour = 12, 12/start_hour = 00/g' -e 's/end_year = 2019, 2019/end_year = 2016/g' -e 's/end_month = 09, 09/end_month = 10/g' -e 's/end_day = 06, 06/end_day = 08/g' -e 's/interval_seconds = 10800/interval_seconds = 21600/g' -e 's/history_interval = 60, 60/history_interval = 180/g' -e 's/restart_interval = 7200/restart_interval = 1440/g' -e 's/time_step = 90/time_step = 150/g' -e 's/max_dom = 2/max_dom = 1/g' -e 's/e_we = 150, 220/e_we = 91/g' -e 's/e_sn = 130, 214/e_sn = 100/g' -e 's/num_metgrid_levels = 34/num_metgrid_levels = 32/g' -e 's/dx = 15000/dx = 27000/g' -e 's/dy = 15000/dy = 27000/g' ~/WRFModel/Build_WRF/WRF/test/em_real/namelist.input"
シミュレーションを実行するジョブを作成する
ジョブを作成し、依存する 2 つのタスクを追加します。
タスク ID | タスク名 | 種類 | ノード | コア | Workdir | 命令 |
---|---|---|---|---|---|---|
1 | wps | NodePrep | なし | なし | source ~/.profile; ln -sf ungrib/Variable_Tables/Vtable.GFS Vtable; ./link_grib.csh $WRFDATADIR/matthew/fnl; ./ungrib.exe; ./geogrid.exe; ./metgrid.exe |
~/WRFModel/Build_WRF/WPS /name:wps |
2 | wrf | 基本的な | 4 | 64 | source ~/.profile; ln -sf ../../../WPS/met_em.d01.2016-10* .; mpirun -iface ib0 -np %CORE_NUMBER% -f $CCP_MPI_HOSTFILE ./real.exe; mpirun -iface ib0 -np %CORE_NUMBER% -f $CCP_MPI_HOSTFILE ./wrf.exe; mkdir -p $WRFDATADIR/results/matthew; cp wrfout_d01_2016-10-0* $WRFDATADIR/results/matthew; cp wrfrst_d01_2016-10-0* $WRFDATADIR/results/matthew; |
~/WRFModel/Build_WRF/WRF/test/em_real |
タスク 1 では、WPS の 3 つのサブモジュール (ungrib、geogrid、metgrid) を実行して、データの前処理タスクを処理します。 前処理結果は WRF シミュレーションの入力であるため、WRF ジョブに参加している各ノードに存在する必要があります。 そのため、タスクをノード準備タスクとして追加して、各ノードで実行します。
を追加する
タスク 2 では、MPI プログラムの real.exe と wrf.exe を実行して並列計算を実行し、出力ファイルを共有フォルダーの下の
results/matthew
フォルダーDATA
コピーします。mpirun
コマンドで-iface
は、プロセス間の通信に使用するネットワーク インターフェイスを指定します。-np
では、mamy が MPI プログラムの実行を処理する方法を指定します。 このデモでは、必要なノードのすべてのコアである 64 のプロセスを使用します。-f
ノード リストを含むファイル名を指定します。の詳細については、この を参照してください。
コマンドを使用して上記のすべてを実現します。
set NODE_NUMBER=4
set CORE_NUMBER=64
job new /numnodes:%NODE_NUMBER%
job add !! /workdir:~/WRFModel/Build_WRF/WPS /name:wps /type:NodePrep "source ~/.profile; ln -sf ungrib/Variable_Tables/Vtable.GFS Vtable; ./link_grib.csh ../DATA/matthew/fnl; ./ungrib.exe; ./geogrid.exe; ./metgrid.exe"
job add !! /workdir:~/WRFModel/Build_WRF/WRF/test/em_real /name:wrf /numnodes:%NODE_NUMBER% /requirednodes:[nodelist] "source ~/.profile; ln -sf ../../../WPS/met_em.d01.2016-10* .; mpirun -iface ib0 -np %CORE_NUMBER% -f $CCP_MPI_HOSTFILE ./real.exe; mpirun -iface ib0 -np %CORE_NUMBER% -f $CCP_MPI_HOSTFILE ./wrf.exe; mkdir -p $WRFDATADIR/results/matthew; cp wrfout_d01_2016-10-0* $WRFDATADIR/results/matthew"
job submit /id:!! /jobname:WRF
結果を取得する
HPC Pack 2019 クラスター マネージャーでジョブの結果を確認する
シミュレーション結果は、
/home/hpcadmin/WRFModel/Build_WRF/DATA/results/matthew
の下に "wrfout" ファイルとして生成され、NCL または Python で視覚化できます。 同じフォルダの下には、シミュレーションの再起動に使用できる"wrfrst"ファイルがあります。シミュレーションの再起動の詳細については、この参照してください。