スーパコンピュータシステムの使い方
使い方はこちら
(京都大学学術情報メディアセンター提供のサイト)
(京都大学学術情報メディアセンター提供のサイト)
Job Queue
ジョブのキュー名は以下のとおりです。
システムA: gr20001a
システムB: gr20001b
システムC: gr20001c
CPU Time
資源の公平配分の観点から、計算時間に上限を設けています。
年度はじめに各ユーザーは「基本計算時間」が割り当てられます。
基本計算時間は、標準コア数×7日間で定義されます。
例えば、2020年度のシステムAの標準コア数は12,648コアなので、88,536コア日の基本計算時間が割り当てられます。
計算時間が上限に近づくと、スパコンのアカウントに予告メールが発信されます。~/.forward ファイルに普段お使いのメールアドレスを記述し、予告メールを転送するようにしておくと便利です。
また、計算時間の使用状況は以下のコマンドで知ることができます。
/opt/KDK/bin/show_my_time [a|b|c]
使用率(rate)が90%を超えたら以下のサイトで計算時間の追加申請をすることができます。
ただし、追加申請の理由やシステムの負荷によっては保留または却下となる場合があります。
計算時間追加申請はこちら
Disk Storage
/LARGE0/gr20001 (926 TB) と/LARGE1/gr20001 (926 TB) が使えます。
ユーザー名のディレクトリを作成し、お使いください。
ディスク容量には限りがありますので、不要なファイルは消去してください。
Tips
連続実行ジョブ
同一のジョブを複数回並列に実行する方法
qsub -J "myjobary[1-3]" jobscript.shmyjobaryという名前(名前は何でも構いません)でジョブ配列が作成され、同じジョブIDで複数回jobscript.shが実行されます。上の例では3回実行されます。
同一のジョブを複数回順番に実行する方法
上記の方法ではリソースに余裕がある限り、次々と(配列中の)ジョブを実行してしまいます。そこで、次のように記述することで、一度に実行できるジョブの数を制限できます。qsub -J "myary[1-3]%1" jobscript.sh
この例では、ジョブ配列の後ろに「%1」と書いているので、ジョブ実行数は 最大1つとなります。つまり、ジョブが1つずつ順に実行されることになります。
ジョブスクリプト中で、$LSB_JOBINDEX という環境変数を利用いただけます。 この環境変数には、ジョブ配列のインデックスが格納されています。上の例で あれば、配列が1から始まるので、何番目のジョブを実行しているかの判別に 利用できます。 これにより、プログラムのinputやoutputを、ジョブ配列のインデックスに よって変えることができます。また、スクリプト中で分岐構文を記述すれば、 インデックスごとに異なる処理を詳細に指定することができます。
qdelコマンドの補完機能
UNIX シェルには、タブキーで引数を自動入力する補完機能が備わっています。 そして、bash の場合は、bash-completion という追加ライブラリを使って この補完機能を拡張することができます。 Bash-completion を使っている方は(bash-completion の設定をした後で) .bashrc に次の設定を追加してみてください。_qdel() {
local cur=`_get_cword`
COMPREPLY=( $(compgen -W "$(qstat | tail -n +3 | cut -d. -f1)" -- $cur) )
return 0
}
complete -F _qdel qdel
これを有効にすると、qdel の後でジョブ番号が補完されるようになります。
$ qsub ./3000.sh
397571.ja
$ qdel [TAB]
$ qdel 397571
(銭谷誠司さん提供)
システムCの活用事例
KDK System Cは1ノードあたり1.5 TBのメモリを搭載し、大規模な共有メモリを用いた計算や解析が可能です。KDK管理室ではSystem Cの利用を促進するため、活用事例を随時紹介していきます。今回は神戸大学の三宅洋平氏にMatlabを用いた大規模行列 (20万×20万) 計算について紹介して頂きます。計算ノード上で可視化ソフトウェアなどのGUIプログラムを実行することで、大規模な共有メモリや複数の計算コアを用いた解析が行えます(GUIプログラムが大規模メモリや複数計算コアの利用に対応している場合)。特にSystem Cでは、1ノードあたり最大1.44 TBの共有メモリが利用できるため、System B(1ノードあたり最大61.4 GB)に比べて格段に大規模なデータを取り扱うことが可能となっています。System Cの計算ノード上でGUIプログラムを実行する方法を次に示します(Matlabで例を示します)。
- kdk-bc.kudpc.kyoto-u.ac.jpにSSHでログイン
- コマンドライン上で次のように指定し、System Cの使用を宣言
module switch lsf/SystemB lsf/SystemC - コマンドライン上で次のように指定し、GUIプログラムを実行
xrun -q gr20001c -ug gr20001 -A c=32:m=1440G -W 6:00 matlab
上述の方法で起動したMatlab上で大規模な二次元配列を確保し、ごく基本的な行列演算を行う例を示します。下記の例では一辺200000の倍精度2次元配列を3つ用います。各配列のメモリサイズは320 GBなので合計でおよそ960 GBのメモリを用いた演算になります。
a = ones(200000, 200000)*2; % 要素が全て2である一辺200000の正方行列を確保
b = ones(200000, 200000); % 要素が全て1である一辺200000の正方行列を確保
c = a + b; % aとbの和を計算してcに代入
ans = c(1:10,1:10) % cの部分行列の要素を表示
ans =
3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3
whos % 確保した配列の情報を表示
Name Size Bytes Class Attributes
a 200000x200000 320000000000 double
ans 10x10 800 double
b 200000x200000 320000000000 double
c 200000x200000 320000000000 double
この他、GUIプログラムの計算ノード上での実行に関する詳細な情報は、 メディアセンターのウェブでご覧になれます。 なお、KDKキューgr20001cを指定してGUIプログラムの実行を行った場合、通常のバッチジョブでの使用の場合と同様に、使用CPU時間の積算の対象となります点にご留意いただけますようお願いいたします。
FAQ
ジョブが実行状態になりません
- 多くのジョブが先に投入されている。
qgroupコマンドを使い、システムの利用状況を確認してください。 - 要求資源が大きすぎる。
qgroup(又はqgroup -l)コマンド使い、要求コア数(REQUEST)と利用可能なコア数(READY)を比較してください。要求コア数が確保されるまで待ち続けます。要求コア数を利用可能なコア数より小さくすると、ジョブが実行状態に移りやすくなります。 - 大きな資源を要求するジョブが先に投入されている。
実行時間制限(-W)を小さくすることにより、先行ジョブに影響を及ぼさない範囲で追い越すことができます。 - 許可されたCPU時間を超過した。
CPU時間の延長をこちらから申請してください。 show_my_time [a|b|c]コマンドで許可されたCPU時間と利用時間が確認できます。 - 優先順位が低下している。
過去2週間の実行時間に基づき優先順位が動的に計算され、優先順位の高いユーザのジョブから順に実行されます。
ログインできません
- 利用者登録がされていない。
研究代表者に送付した「大型計算機システム利用申請書(KDK)」をkdk-id@rish.kyoto-u.ac.jpに送付してください。利用者番号の有効期限は3月末日までです。 - SSH公開鍵が登録されていない。
学術情報メディアセンターの利用者ポータルでSSH公開鍵を登録してください。