TSUBAME 2.5で計算ノードに直接入る

# 概要
東京工業大学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

# もう少し便利に
前述の方法の通りなのですが，設定が色々あって割と面倒なので，一括して投げてくれるスクリプトを作成しました．

```auto-sleep.sh
#!/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```は通常の２倍，```ET=3```は通常の４倍の課金係数がかかりますのでご注意を．
大規模実行予約ノードの余りであるXキューを狙いたい人は，Sキュー指定で翌朝9時までの残り時間より少ないwalltimeを指定しましょう．

## GROUP
TSUBAMEグループを指定します．```t2ghogehoge```です．

## Priorityオプション
```PRIORITY=1``` とか```PRIORITY=2```とすると，ジョブ投入の優先度が上がります．
が，課金係数も２倍，４倍と増えますのでご注意を．
```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