概要
東京工業大学GSICのスーパーコンピュータTSUBAME 2.5で,計算ノードに直接ログインします.通常はジョブスクリプトを作成しておいて,PBSが計算ノード上でジョブスクリプトを実行するのですが,GUIアプリケーションを利用するときはPBSから実行できないため,計算ノードに直接ログインする必要があります.また,細かいスクリプトを色々テストしたいときなどにも便利です.
方法は,
1. ジョブスクリプトにsleep 100000
とか書いておいて,
2. PBSで計算ノードに投げてもらい (t2sub
),
3. t2stat -n1
でどのノードに投げられたか確認し,
4. ssh node名
とする
という感じです.
TSUBAME利用の手引にも記載があるので,こちらも参照してください.
http://tsubame.gsic.titech.ac.jp/docs/guides/tsubame2/html/queues.html#queues-ssh
なお,本稿は有料サービスを想定しています.課金していない場合はお試しキューというものを利用できますが,10分しか使えないので,インタラクティブノードで実行したほうがマシかもしれません.
http://tsubame.gsic.titech.ac.jp/node/1269
もう少し便利に
前述の方法の通りなのですが,設定が色々あって割と面倒なので,一括して投げてくれるスクリプトを作成しました.
#!/usr/bin/bash
CMDNAME=`basename $0`
if [ $# -ne 1 ]; then
echo "Usage: ./$CMDNAME [Number_of_jobs] (if [Number_of_jobs] == 0, only ssh)"
exit 1
fi
echo -e "\n *** This script throws sleep-job & ssh to the sleep node. *** \n"
### settings ###
QUE=S
WTIME=23:00:00
ET=1
MEM=50gb
CPU=12
GPU=3
GROUP=t2gXXXXXXX
PRIORITY=0
################
if [ $1 -gt 0 ]; then
for i in `seq 1 $1`
do
echo "sleep 1000000" > sleep.sh
chmod 755 sleep.sh
t2sub -j oe -N sleep -W group_list=$GROUP -p $PRIORITY -q $QUE -l walltime=$WTIME -et $ET -l select=1:ncpus=$CPU:gpus=$GPU:mem=$MEM ./sleep.sh
rm -f sleep.sh
sleep 3s
done
fi
echo -e "\n *** Result of t2stat. *** \n"
IFS=$'\n'
LINES=( $( t2stat -n1 | grep "sleep" ) )
node=0
for line in ${LINES[@]}; do
echo $line
#echo $node
host=`echo $line | sed -e "s/^.*[^.]t2\(.*\)\/.*$/t2\1/"`
#echo $host
nodelist[$node]=$host
node=`expr ${node} + 1`
#echo $i
done
while:
do
echo -e "\n Node number\n"
node=0
for line in ${nodelist[@]}; do
echo "$node : ${LINES[$node]}"
node=`expr ${node} + 1`
done
echo "$node : end this script"
echo -e "\n Please input node number.\n"
read ans
if [ $ans -eq $node ]; then
break
fi
ssh="ssh ${nodelist[$ans]} -Y"
echo $ssh
eval $ssh
break
done
使い方
$ ./auto-sleep.sh 1
と実行すると,パラメータで設定されたキューを1ノード確保します.
今はSキューを23時間,50GB指定で12CPUコア3GPUで実行すると言って確保しています.
(コア数やGPU数,メモリ数の指定は,直接ログインする場合には全く意味はありません.)
*** This script throws sleep-job & ssh to the sleep node. ***
Checking accounting informations...
Checking requested resources...
Submitting a job to PBS...
1557728.t2zpbs01
*** Result of t2stat. ***
1557728.t2zpbs0 tonets S sleep -- 1 12 50gb 23:00 R -- t2a000122/0*12
Node number
0 : 1557728.t2zpbs0 tonets S sleep -- 1 12 50gb 23:00 R -- t2a000122/0*12
1 : end this script
Please input node number.
0
ssh t2a000122 -Y
tonets@t2a000122:~>
確保ができた(ステータスがRになった)ら,このように所望のノードの番号(今は0)を入力すると,そのノードにsshしてくれます.
$ ./auto-sleep.sh 0
とすると,ノードの確保は行わず,今確保されているノードに対して選択します.
使用後はwalltimeの時間が過ぎれば自動的に削除されますが,お金が勿体ないのでt2del
でジョブを削除しておきましょう.
パラメータについて
以下のパラメータについての解説です.
QUE=S
WTIME=23:00:00
ET=1
MEM=50gb
CPU=12
GPU=3
GROUP=t2gXXXXXXX
PRIORITY=0
キュー
QUE
のところに書きます.S/S96/G/L128/L128F/L256/L512という感じです.
各キューについては以下を参照してください.
http://tsubame.gsic.titech.ac.jp/docs/guides/tsubame2/html/overview.html#id2
http://tsubame.gsic.titech.ac.jp/docs/guides/tsubame2/html/resources.html#resources-batch
とりあえず.Sを指定しておくのが無難です.
walltimeとet
TSUBAMEのジョブ実行時間は,24時間,48時間,96時間と選べます.
0〜24時間はET=1
,24時間〜48時間はET=2
,48時間〜96時間はET=3
を指定しないと投げられません.ET=2
は通常の2倍,ET=3
は通常の4倍の課金係数がかかりますのでご注意を.
大規模実行予約ノードの余りであるXキューを狙いたい人は,Sキュー指定で翌朝9時までの残り時間より少ないwalltimeを指定しましょう.
GROUP
TSUBAMEグループを指定します.t2ghogehoge
です.
Priorityオプション
PRIORITY=1
とかPRIORITY=2
とすると,ジョブ投入の優先度が上がります.
が,課金係数も2倍,4倍と増えますのでご注意を.
ET=3
とPRIORITY=2
を両方指定すると,普段の16倍のお金がかかります.
etオプションとpriorityオプションについてはこちらも参照してください.
http://tsubame.gsic.titech.ac.jp/docs/guides/tsubame2/html/queues.html#id24
その他
TSUBAME利用の手引に色々詳しく書かれているので,スペック等はこちらから確認して下さい.
http://tsubame.gsic.titech.ac.jp/docs/guides/tsubame2/html/index.html