KUDPC
京大スパコンの使用方法メモ
Last modified: 2014/03/31
*** 以下の情報はすべて下記URLを参考に作成しています ***
スーパーコンピュータの使い方(本家マニュアル) http://web.kudpc.kyoto-u.ac.jp/manual/
A, B, 及び C System での違い
http://www.iimc.kyoto-u.ac.jp/ja/services/comp/services/supercomputer.html
以下の情報は、1ノードあたりを示す。
Aシステム
CPU:32 Cores (AMD Opteron 6200系、Interlagos)
Memory: 64 GB
Bシステム
CPU:16 Cores (Intel Xeon E5系、Sandy Bridge)
Memory: 64 GB
スパコンのログイン方法:
http://web.kudpc.kyoto-u.ac.jp/manual/ja/login
各システムのホスト名:
A: camphor.kudpc.kyoto-u.ac.jp
B: laurel.kudpc.kyoto-u.ac.jp
Mac, Linuxからログインする場合:
(RSA認証キーの作成方法)
http://web.kudpc.kyoto-u.ac.jp/manual/ja/login/pubkey#keygen_mac_linux
(SSH用公開鍵の登録方法)
http://web.kudpc.kyoto-u.ac.jp/manual/ja/login/pubkey#regist
環境設定:
ログインシェルの設定
http://web.kudpc.kyoto-u.ac.jp/manual/ja/config#login_shell
環境設定切り替えソフトウェアの利用
http://web.kudpc.kyoto-u.ac.jp/manual/ja/config#modules
各システムで使用できるコンパイラ・ライブラリ:
http://web.kudpc.kyoto-u.ac.jp/manual/ja/compiler
コンパイラ:
・Aシステムでは、Cray, Intel, PGI, GNU 各コンパイラが使用可能。
・Bシステムでは、Crayコンパイラを除く、上記コンパイラが使用可能。
MPIライブラリ:
・Aシステムでは、CrayのMPIライブラリのみ使用可能。
・Bシステムでは、IntelのMPIライブラリのみ使用可能。
移植されているソフトウェア:
http://web.kudpc.kyoto-u.ac.jp/manual/ja/application/software
・NetCDF
http://web.kudpc.kyoto-u.ac.jp/manual/ja/application/software#netcdf
・HDF4
http://web.kudpc.kyoto-u.ac.jp/manual/ja/application/software#hdf4
・HDF5
http://web.kudpc.kyoto-u.ac.jp/manual/ja/application/software#hdf5
使用可能なアプリケーションソフトウェア:
http://web.kudpc.kyoto-u.ac.jp/manual/ja/application
・WRF
http://web.kudpc.kyoto-u.ac.jp/manual/ja/application/software#wrf
プログラムの実行:
会話型処理(A,Bシステム共通)
http://web.kudpc.kyoto-u.ac.jp/manual/ja/run/interactive
Aシステムでのバッチ処理
http://web.kudpc.kyoto-u.ac.jp/manual/ja/run/batchjob/systema
Bシステムでのバッチ処理
http://web.kudpc.kyoto-u.ac.jp/manual/ja/run/batchjob/systembc
ユーザーのジョブを簡易確認
→ $ qs
ジョブを投入できるキューの確認
→ $ qstat -l
ジョブをキューに投入
→ $ qsub < sample.sh
(sample.sh はバッチ処理用ファイル。オススメ設定は以下の文章を参照)
ジョブの状態を確認
→ $ qjobs
投入したジョブをキャンセルする
→ $ qkill [qjobs で表示されるPID]
グループ内のジョブを確認
→ $ qgroup -l
いろいろ試してわかったことログ(for A system):
・WRFのコンパイル
本家情報(http://web.kudpc.kyoto-u.ac.jp/manual/ja/application/software#wrf)によると、
$ module load netcdf ; export NETCDF=/opt/app/cray/netcdf/4.1.3/intel/120
とすればインストール済みのNetCDFを使用可能(2013年6月20日追記)。
WRFの場合、OpenMP による計算が MPI 計算よりも劣るため、 dmpar のコンパイルがオススメ。
参考文献: http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6641457
・WRFを Intel Compiler でコンパイルする時は
コンパイル前に $ module swich PrgEnv-cray PrgEnv-intel と打つ。
この場合、V3.1.1 ならば configure 時に 8 を選択後、
DM_FC = ftn -f90=$(SFC)
DM_CC = cc -cc=$(SCC)
に変更する。
ちなみにおすすめのコンパイルフラグ( Intel Compilerの場合 )は、
FCOPTIM=-O3 -msse4.2 -unroll0 -fno-alias -ip
もしくは
FCOPTIM=-O3 -msse3 -unroll0 -fno-alias -ip
にすると良い。
・基本的には、qsub で投げる( Iさん, T先生情報 )。
以下のURLからサンプルプログラムを取得し、該当事項を編集する。
http://web.kudpc.kyoto-u.ac.jp/manual/ja/run/batchjob/systembc
・もっと効率良く計算させるためには、
・必要最低限のメモリ
・必要最低限のCPU時間
をあらかじめ計算しその値ぎりぎりに設定して、qsub に投げると良い。
qsub にジョブを投げる場合のバッチファイルの一例(オススメ設定)。
例:
######################################################
#!/bin/bash
#============ LSF Options ============
#QSUB -q gr10001a # 自分のグループIDに変更する
#QSUB -ug gr10001 # 自分のグループIDに変更する
#QSUB -W 48:00 # 経過時間上限値
#QSUB -A p=12:t=32:c=32:m=3840M # p:ノード数
# t:スレッド数
# c:コア数(基本的にtと同じ値を設定)
# m:ジョブ実行時のプロセスあたりの割り当てメモリ量上限値
#============ Shel Script ============
aprun -n $LSB_PROCS -d $LSB_CPUS -N $LSB_PPN ./wrf.exe # プログラムの実行部分
######################################################
いろいろ試してわかったことログ(for B and C system):
・WRFのコンパイル
・NetCDF, JASPERは自前でコンパイルし、HOME以下においておくほうが良いようだ。
本家情報(http://web.kudpc.kyoto-u.ac.jp/manual/ja/application/software#wrf)によると、
$ module load netcdf ; export NETCDF=/opt/app/cray/netcdf/4.1.3/intel/120
とすればインストール済みのNetCDFを使用可能(2013年6月20日追記)。
・WRFを Intel Compiler でコンパイルする時、mpif90, mpicc ではなく、
「mpiifort」,「mpiicc」 にする。
具体的には、./configure をした後に生成される、configure.wrf 内の
DM_FC = mpiifort
DM_CC = mpiicc
の部分を変更。
→この手法で、WRFV3.1.1、V3.2、V3.2.1、V3.3.1、V3.4、V3.5.1 のコンパイルに成功。
ちなみにおすすめのコンパイルフラグ( Intel Compilerの場合 )は、
FCOPTIM=-O3 -xAVX -unroll0 -fno-alias -ip
または
FCOPTIM=-O3 -xSSE4.2 -unroll0 -fno-alias -ip
にすると良い。
・コンパイル確認済み組み合わせ (2013/10/11追記)
GNU compiler ver.4.4.6, NetCDF ver.3.6.3
WRF ver.3.1.1, 3.2.1, 3.3.1, 3.4.1, 3.5.1
smpar(OpenMP)
PGI compiler ver. , NetCDF ver.3.6.3
WRF ver.3.1.1, 3.5.1
smpar(OpenMP), dmpar(MPICH), sm+dm(OpenMP+OpenMPI)
Intel compiler ver. , NetCDF ver.3.6.3
WRF ver.3.1.1, 3.2.1, 3.3.1, 3.4.1, 3.5.1
smpar(OpenMP), dmpar(MPICH), sm+dm(OpenMP+MPICH2)
・NetCDF4でアウトプットしたい場合 (2013/11/29 追記)
----------
前提条件:NetCDF4、HDF5、ZLIBがコンパイル済みであること
KUDPC内に用意してあるNetCDF ver.4.1.3 がどのようにコンパイルしてあるか不明なので
自前でZLIB, HDF5, NetCDF をそれぞれコンパイルする方が無難。
コンパイルには、こちらを使用すると便利です。
configure script を実行する前に以下の環境変数を設定。
$ export NETCDF4=1
$ export LD_LIBRARY_PATH=[path-to-netcdf]/netcdf-4.1.3/lib:[path-to-hdf5]/hdf5-1.8.7/lib:${LD_LIBRARY_PATH}
上記の環境設定後、
$ ./configure
を実行。
configure.wrf の以下の部分を編集
--- ここから --->
#### NETCDF4 pieces
NETCDF4_IO_OPTS = -DUSE_NETCDF4_FEATURES -DWRFIO_NCD_LARGE_FILE_SUPPORT
GPFS =
CURL =
HDF5 = -L/[path-to-hdf]/hdf5-1.8.7/lib -lhdf5_hl -lhdf5
ZLIB = -L/[path-to-zlib]/zlib-1.2.5/lib -lz -lm
DEP_LIB_PATH =
NETCDF4_DEP_LIB = $(DEP_LIB_PATH) $(HDF5) $(ZLIB) $(GPFS) $(CURL)
<--- ここまで ---
上記の設定を configure.wrf に施す。
さらに、WRFV3/external/io_netcdf/makefile を以下の様に編集する。
LIBS = -L$(NETCDFPATH) -lnetcdff -lnetcdf
以上までの設定が完了したら、通常通りコンパイルする。
上記の設定、コンパイルにより、デフォルトの出力がNetCDF4になる。
これまでのNetCDF出力に戻す場合は、
&time_control
use_netcdf_classic=.true.
/
を追記するだけでOK。
参考URL:http://www.mmm.ucar.edu/wrf/users/wrfv3.5/building_netcdf4.html
参考URL:http://blog.livedoor.jp/rootan2007/archives/51856995.html
----------
・プログラム実行時の注意
・システムBでプログラムを実行する際には、必ず「tssrun」または「qsub」でジョブを投げる。
これは、ログインノードと計算するノードが別々になっているため。
・I/Oに無茶苦茶時間がかかるような場合は、以下のURLを参考にCPUタイムとメモリ使用量を最大値にしてみる。
http://web.kudpc.kyoto-u.ac.jp/manual/ja/config#limit
・基本的には、qsub で投げる( Iさん, T先生情報 )。
以下のURLからサンプルプログラムを取得し、該当事項を編集する。
http://web.kudpc.kyoto-u.ac.jp/manual/ja/run/batchjob/systembc
・もっと効率良く計算させるためには、
・ジョブに必要な最大メモリ
・CPU時間
をあらかじめ計算しその値ぎりぎりに設定して、最大並列数でqsubに投げる。
・LSFオプションで重要なオプション
#QSUB -q gr10001b
→グループ名を指定。
#QSUB -ug gr10001
→アカウント名を指定。
#QSUB -W 12:00
→経過時間の上限値を変更する。
#QSUB -A p=4:t=16:c=16:m=60G
→プロセス数、スレッド数、メモリ使用量を変更する。
・MPI計算の場合、以下の設定をすると計算速度の向上が見込める場合がある。(2013/12/05 追記)
$ export I_MPI_OFA_NUM_ADAPTERS=2
参考URL: http://web.kudpc.kyoto-u.ac.jp/manual/ja/library/intelmpi#infiniband
qsub にジョブを投げる場合のバッチファイルの一例(オススメ設定)。
例:
######################################################
#!/bin/bash
#============ LSF Options ============
#QSUB -q gr10001b
#QSUB -ug gr10001
#QSUB -W 48:00
#QSUB -A p=16:t=1:c=1:m=3840M
#============ Shel Script ============
# 以下の部分がAシステムと異なるので注意
set -x
# for intel compiler
module load intel/12.1
mpiexec.hydra ./wrf.exe
######################################################
(2012/12/06追記)
OpemMPI+OpenMPの計算時の注意(PGI compilerでコンパイルしたもので確認)
module load pgi
module load openmpi/1.6_pgi-12.3
mpiexec -n $LSB_PROCS -npernode $LSB_PPN ./wrf.exe
参考URL:
https://web.kudpc.kyoto-u.ac.jp/manual/ja/library/openmpi#exec
本家へのLINK集:
情報環境機構
http://www.iimc.kyoto-u.ac.jp/ja/
情報環境機構 コンピューティングサービス
http://www.iimc.kyoto-u.ac.jp/ja/services/comp/
スーパーコンピュータシステム の使いかた