編集不可のページ History 添付ファイル

 

TUT HPC Cluster Wiki: "ClusterSystemTips"の差分

3と7のリビジョン間の差分 (その間の編集: 4回)
2015-10-31 23:17:44時点のリビジョン3
サイズ: 432
編集者: tsuchiya
コメント:
2015-11-01 19:30:54時点のリビジョン7
サイズ: 4770
編集者: my016
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 1: 行 1:
#acl Known:read,write,revert #acl Known:read,write,revert All:read
行 12: 行 12:

== 使用リソース(メモリ使用量など)の計測 ==

プロセスが使用したリソース(メモリ使用量など)は GNU 版 time コマンド(/usr/bin/time)で計測できます.オプション -v を利用することで,以下のようにプロセスが使用したリソースの詳細が表示されます([[http://linuxjm.osdn.jp/html/LDP_man-pages/man1/time.1.html|Man page of TIME]]).

{{{
-bash-4.1$ /usr/bin/time --version
GNU time 1.7

-bash-4.1$ /usr/bin/time -v whoami
my016
        Command being timed: "whoami"
        User time (seconds): 0.00
        System time (seconds): 0.00
        Percent of CPU this job got: 0%
        Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.00
        Average shared text size (kbytes): 0
        Average unshared data size (kbytes): 0
        Average stack size (kbytes): 0
        Average total size (kbytes): 0
        Maximum resident set size (kbytes): 3088
        Average resident set size (kbytes): 0
        Major (requiring I/O) page faults: 0
        Minor (reclaiming a frame) page faults: 243
        Voluntary context switches: 3
        Involuntary context switches: 1
        Swaps: 0
        File system inputs: 0
        File system outputs: 0
        Socket messages sent: 0
        Socket messages received: 0
        Signals delivered: 0
        Page size (bytes): 4096
        Exit status: 0
}}}

メモリの使用量は Maximum resident set size で知ることができますが, v1.7 には実際の4倍で表示される(実使用量は表示された値の4分の1)という既知のバグがあります([[http://qiita.com/guicho271828/items/2ad3df13e915ecbb9cac|参考]]).

GNU 版 time コマンドはクラスタの演算ノードでも利用できますが,結果が標準エラー出力であることに留意する必要があります.

== 投入しているジョブの一括削除 ==

一般のユーザには qdel コマンドのオプション all が許可されておらず,また,オプション -t が正常に作動しないため,投入しているジョブの一括削除には,以下のようなスクリプトを利用します.

{{{#!highlight sh
#!/bin/bash

if [ $# -ne 1 -a $# -ne 2 ]; then
    echo "Usage: bash $0 [ 'all' | firstId lastId | lastId ]"
    exit
fi

# 第一引数が数値か否か
if expr "$1" : '[0-9]*' > /dev/null ; then
    ids=`seq $1 $2`
else
    ids=`qstat | cut -d . -f 1 | tail -n +3 | column`
fi

echo qdel $ids
qdel $ids
}}}

第一引数に all を指定することにより,投入しているジョブ(実行中か否かは問いません)の全てを削除します.また,第一引数及び第二引数を利用することにより,削除するジョブIDの範囲を指定することもできます.

== 任意のコマンドをジョブ投入するスクリプト ==

qsub コマンドの -v オプションを利用すると,実行スクリプトに任意の環境変数を渡すことができます.この機能を利用し,演算ノードに任意のコマンドを実行できるようにしたものが以下のスクリプトです.なお,標準エラー出力は標準出力とともに出力し(-j oe),実行時間及び実行ノードを記録するためのコマンド(date, hostname)も含まれています.

{{{#!highlight sh
#!/bin/bash
#PBS -l nodes=1:ppn=1
#PBS -q wLrchq
#PBS -j oe

cd $PBS_O_WORKDIR

date
hostname
echo "$JOB_CMD"
eval "$JOB_CMD"
date
}}}

実行スクリプトを qsub.sh としたとき,以下のように JOB_CMD に任意のコマンドを指定してジョブを投入します.

{{{
-bash-4.1$ qsub -v JOB_CMD="/usr/bin/time -v perl i_love_cats.pl" qsub.sh

-bash-4.1$ qsub -v JOB_CMD="perl catching_cats.pl | perl counting_cats.pl" qsub.sh
}}}

== ジョブの実行状態を繰り返し表示 ==

投入したジョブがどのような状況かを表示する場合には, watch コマンドを併用すると便利です.以下のように実行すると,5秒間隔で繰り返し実行され,常に最新の状態を把握することができます.

{{{
-bash-4.1$ watch -n 5 qstat -a

-bash-4.1$ watch -n 5 qstat -Q
}}}

クラスタシステム利用の Tips

クラスタシステム利用にあたって気づいた便利なノウハウなどの記入をお願いします.

研究ユーザ情報交換用メーリングリストの過去ログ

研究ユーザの情報交換用メーリングリストの過去ログは, http://lists.imc.tut.ac.jp/pipermail/research-users/ で見れます.

使用リソース(メモリ使用量など)の計測

プロセスが使用したリソース(メモリ使用量など)は GNU 版 time コマンド(/usr/bin/time)で計測できます.オプション -v を利用することで,以下のようにプロセスが使用したリソースの詳細が表示されます(Man page of TIME).

-bash-4.1$ /usr/bin/time --version
GNU time 1.7

-bash-4.1$ /usr/bin/time -v whoami
my016
        Command being timed: "whoami"
        User time (seconds): 0.00
        System time (seconds): 0.00
        Percent of CPU this job got: 0%
        Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.00
        Average shared text size (kbytes): 0
        Average unshared data size (kbytes): 0
        Average stack size (kbytes): 0
        Average total size (kbytes): 0
        Maximum resident set size (kbytes): 3088
        Average resident set size (kbytes): 0
        Major (requiring I/O) page faults: 0
        Minor (reclaiming a frame) page faults: 243
        Voluntary context switches: 3
        Involuntary context switches: 1
        Swaps: 0
        File system inputs: 0
        File system outputs: 0
        Socket messages sent: 0
        Socket messages received: 0
        Signals delivered: 0
        Page size (bytes): 4096
        Exit status: 0

メモリの使用量は Maximum resident set size で知ることができますが, v1.7 には実際の4倍で表示される(実使用量は表示された値の4分の1)という既知のバグがあります(参考).

GNU 版 time コマンドはクラスタの演算ノードでも利用できますが,結果が標準エラー出力であることに留意する必要があります.

投入しているジョブの一括削除

一般のユーザには qdel コマンドのオプション all が許可されておらず,また,オプション -t が正常に作動しないため,投入しているジョブの一括削除には,以下のようなスクリプトを利用します.

   1 #!/bin/bash
   2 
   3 if [ $# -ne 1 -a $# -ne 2 ]; then
   4     echo "Usage: bash $0 [ 'all' | firstId lastId | lastId ]"
   5     exit
   6 fi
   7 
   8 # 第一引数が数値か否か
   9 if expr "$1" : '[0-9]*' > /dev/null ; then
  10     ids=`seq $1 $2`
  11 else
  12     ids=`qstat | cut -d . -f 1 | tail -n +3 | column`
  13 fi
  14 
  15 echo qdel $ids
  16 qdel $ids

第一引数に all を指定することにより,投入しているジョブ(実行中か否かは問いません)の全てを削除します.また,第一引数及び第二引数を利用することにより,削除するジョブIDの範囲を指定することもできます.

任意のコマンドをジョブ投入するスクリプト

qsub コマンドの -v オプションを利用すると,実行スクリプトに任意の環境変数を渡すことができます.この機能を利用し,演算ノードに任意のコマンドを実行できるようにしたものが以下のスクリプトです.なお,標準エラー出力は標準出力とともに出力し(-j oe),実行時間及び実行ノードを記録するためのコマンド(date, hostname)も含まれています.

   1 #!/bin/bash
   2 #PBS -l nodes=1:ppn=1
   3 #PBS -q wLrchq
   4 #PBS -j oe
   5 
   6 cd $PBS_O_WORKDIR
   7 
   8 date
   9 hostname
  10 echo "$JOB_CMD"
  11 eval "$JOB_CMD"
  12 date

実行スクリプトを qsub.sh としたとき,以下のように JOB_CMD に任意のコマンドを指定してジョブを投入します.

-bash-4.1$ qsub -v JOB_CMD="/usr/bin/time -v perl i_love_cats.pl" qsub.sh

-bash-4.1$ qsub -v JOB_CMD="perl catching_cats.pl | perl counting_cats.pl" qsub.sh

ジョブの実行状態を繰り返し表示

投入したジョブがどのような状況かを表示する場合には, watch コマンドを併用すると便利です.以下のように実行すると,5秒間隔で繰り返し実行され,常に最新の状態を把握することができます.

-bash-4.1$ watch -n 5 qstat -a

-bash-4.1$ watch -n 5 qstat -Q