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/

スーパーコンピュータシステム の使いかた

http://web.kudpc.kyoto-u.ac.jp/manual/