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

 

TUT HPC Cluster Wiki: "ClusterSystemTips"の差分

26と28のリビジョン間の差分 (その間の編集: 2回)
2019-09-13 09:49:38時点のリビジョン26
サイズ: 8911
編集者: my016
コメント:
2019-09-18 05:24:27時点のリビジョン28
サイズ: 7126
編集者: my016
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 52: 行 52:
== 投入しているジョブの一括削除 ==
一般のユーザには qdel コマンドのオプション all が許可されていないように見えるものの,実際は投入している全てのジョブを削除することができます.

{{{
-bash-4.1$ qdel all
}}}

== キューにあるすべてのユーザのジョブ一覧 ==
{{{/usr/local/maui/bin/showq}}} コマンドを使うと,キューにある他のユーザも含めたジョブ一覧を確認することができます.
行 95: 行 85:
-bash-4.1$ mkdir ~/bin
-bash-4.1$ ln -s /gpfs/work/my016/tool/qcmd.sh ~/bin/qcmd
-bash-4.1$ ln -s /gpfs/work/my016/tool/qwatch.pl ~/bin/qwatch
$ mkdir ~/bin
$ ln -s /work/my016/tool/qcmd.sh ~/bin/qcmd
行 107: 行 96:
~/.bashrc に以下の3行を追記する.
{{{
alias qdelall='bash /work/my016/tool/qdel.sh all'
alias qdelqueue='bash /work/my016/tool/qdel.sh queue'
alias qdelrun='bash /work/my016/tool/qdel.sh run'
}}}
行 109: 行 105:
=== ジョブ投入ツール(qcmd) === === ジョブ投入コマンド(qcmd) ===
行 114: 行 110:
-bash-4.1$ qcmd
Usage: [Q=QueueName] [N=nodes or NodeID] [P=ppn] [M=pmem or Req'd Memory (gb)] [W=Req'd Time (hour)] [J=JobName] [AO=afterok:JobID] qcmd command
$ qcmd
Usage: [Q=QueueName] [S=select] [V=vhost] [C=ncpus] [G=ngpus] [M=Req'd Memory (gb)] [W=Req'd Time (hour)] [J=JobName] [AO=afterok:JobID] qcmd command
行 118: 行 114:
 * Q: ジョブを投入するキュー名(default: wLrchq)
 * N: 必要ノード数 または 実行するノード名(default: 1,最大値: 30)
 * P
: 1ノードあたりの必要コア数(default: 1)
 * M: 1コアあたりの必要メモリ量(default: 5,単位: GB,最大値: P*M <= 100
 * W: ジョブの制限時間(default: 24,単位: hour,最大値: 336)※短いほど優先度が高くなる
 * J: ジョブ名(default: qcmd)※qstatやqwatchで表示される名前
 * Q: ジョブを投入するキュー名(default: gLrchq)
 * S: 必要ノード数(default: 1)
 * V:
実行するノード(default: 未指定)
 * C
: 1ノードあたりの必要CPU数(default: 1)
 * G: 1ノードあたりの必要GPU数(default: 0)
 *
M: 1ノードあたりの必要メモリ量(default: 8,単位: GB)
 * W: ジョブの制限時間(default: 24,単位: hour
 * J: ジョブ名(default: qcmd)※qstatなどで表示される名前
行 127: 行 125:
-bash-4.1$ qcmd pa aux
-bash-4.1$ qcmd /usr/bin/time -v perl i_love_cats.pl
-bash-4.1$ M=20 qcmd /usr/bin/time -v perl i_love_fat_cats.pl
-bash-4.1$ qcmd "perl catching_cats.pl | perl counting_cats.pl"
$ qcmd pa aux
$ qcmd /usr/bin/time -v perl i_love_cats.pl
$ M=20 qcmd /usr/bin/time -v perl i_love_fat_cats.pl
$ qcmd "perl catching_cats.pl | perl counting_cats.pl"
行 133: 行 131:
 * 通常は qcmd の後ろに実行したいコマンドを指定すれば,(Nによるノードの指定がなければ)任意のノードで実行されます.その実行結果(標準出力の内容)は,カレントディレクトリの [JobName].o[JobID] というファイルに出力されます.  * 通常は qcmd の後ろに実行したいコマンドを指定すれば,(Vによるノードの指定がなければ)任意のノードで実行されます.その実行結果(標準出力の内容)は,カレントディレクトリの [JobName].o[JobID] というファイルに出力されます.
行 137: 行 135:
=== クラスタ確認ツール(qwatch) === === ジョブ削除コマンド(qdelall, qdelqueue, qdelrun) ===
行 139: 行 137:
qwatch はクラスタの稼働状況を確認するためのツールです. ~/.bashrc で設定したエイリアスにより,以下の3コマンドが利用可能になります.
行 141: 行 139:
{{{
-bash-4.1$ qwatch -h
Usage:
    qwatch [Options]

Options:
    -h, --help
        標準出力に使用方法のメッセージを出力して正常終了する。

    -a, --all
        全てのステータスを表示する。引数を指定しない場合のデフォルトである。

    -n, --node
        ノードに関するステータスを表示する。 wdev0 以外のサーバで実行した場合は Users が常に空になる。

    -u, --user
        ユーザに関するステータスを表示する。 wdev0 以外のサーバで実行した場合は常に空になる。

    -j, --job
        自身が投入したジョブに関するステータスを表示する。

    -v, --verbose
        自身が投入したジョブに関するステータスを表示する際、ジョブ名のフルネームを表示する。
}}}

実行例
{{{
-bash-4.1$ qwatch
}}}

あなたのジョブが実行されているノードは,UsersやNodesを確認することで分かります.

あなたが指定した ppn と loadave との間に,著しい乖離がないかを確認してください(ほかのユーザも実行している場合があるので,すべてがあなたのジョブに起因しているわけではありません).もし, ppn=20 を指定しているにもかかわらず(CPUs が 20 になります),ロードアベレージ loadave が 1 であれば,非常に非効率な実行になっています.逆に, ppn=1 を指定して loadave が 100 になっていれば,他のユーザに迷惑をかける可能性が高いです.
 * qdelall
  * 投入したジョブを全て取り消す
 * qdelqueue
  * 投入したジョブのうち,実行待ちジョブ(キュー)のみを取り消す
 * qdelrun
  * 投入したジョブのうり,実行中のジョブのみを取り消す

[Japanese|English]

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

クラスタシステム利用にあたって気づいた便利なノウハウなどの記入をお願いします.ログインすることで編集できるようになります.

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

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

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

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

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

$ /usr/bin/time -v perl -e '"x" x 400 x 1024 x 1024'
        Command being timed: "perl -e "x" x 400 x 1024 x 1024"
        User time (seconds): 0.08
        System time (seconds): 0.15
        Percent of CPU this job got: 98%
        Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.24
        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): 411772
        Average resident set size (kbytes): 0
        Major (requiring I/O) page faults: 0
        Minor (reclaiming a frame) page faults: 47885
        Voluntary context switches: 15
        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

$ /usr/bin/time -f %M perl -e '"x" x 400 x 1024 x 1024'
411900

メモリの使用量は Maximum resident set size で知ることができます.また, -f %M を指定することでメモリの使用量のみを出力することもできます.

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

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

投入したジョブがどのような状況かを表示する場合には, watch コマンドを併用すると便利です.以下のように実行すると,5秒間隔で繰り返し実行され,常に最新の状態を把握することができます.また,オプション -d を指定すると,前回との差分がハイライトされます.なお,繰り返し実行するコマンドにエイリアスは指定できません.

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

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

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

ulimit -t (cpu time) による制限

開発ノードには ulimit による cpu time の制限が存在します.この制限値は time コマンドで表示される値とは異なる値(隠れた値)に対して適用されるようです.原因のよくわからない「強制終了」が発生した場合,この制限が原因である可能性があります.例えば,大量のデータを rsync で同期すると以下のようなエラーが発生します.

-bash-4.1$ rsync --progress -avh /tmp/source /destination/
sending incremental file list

...

rsync: writefd_unbuffered failed to write 4 bytes to socket [sender]: Broken pipe (32)
rsync: connection unexpectedly closed (96 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(600) [sender=3.0.6]

rsync が消費する cpu time は --bwlimit の指定に関係なく,概ねデータ転送量で決まるようです.リモート同期の場合は ssh による経路暗号化処理が入るため,ローカル同期よりも cpu time を2倍程度消費する傾向にあります.

ラッパーツールの設定・利用

3系の 吉田 が作成した,クラスタを対話式に近い形で利用するためのツールの設定方法と利用方法.

設定方法

ホームディレクトリ直下の bin にツールへのシンボリックリンクを作る.

$ mkdir ~/bin
$ ln -s /work/my016/tool/qcmd.sh ~/bin/qcmd

~/.bash_profile に以下の3行を追記する(ホームディレクトリ直下の bin に PATH を設定).

if [ -d "$HOME/bin" ] ; then
  export PATH="$HOME/bin:$PATH"
fi

~/.bashrc に以下の3行を追記する.

alias qdelall='bash /work/my016/tool/qdel.sh all'
alias qdelqueue='bash /work/my016/tool/qdel.sh queue'
alias qdelrun='bash /work/my016/tool/qdel.sh run'

再度,ログインする.

ジョブ投入コマンド(qcmd)

qcmd は任意のコマンドをクラスタのノード上で実行するためのツールです.

$ qcmd
Usage: [Q=QueueName] [S=select] [V=vhost] [C=ncpus] [G=ngpus] [M=Req'd Memory (gb)] [W=Req'd Time (hour)] [J=JobName] [AO=afterok:JobID] qcmd command
  • Q: ジョブを投入するキュー名(default: gLrchq)
  • S: 必要ノード数(default: 1)
  • V: 実行するノード(default: 未指定)
  • C: 1ノードあたりの必要CPU数(default: 1)
  • G: 1ノードあたりの必要GPU数(default: 0)
  • M: 1ノードあたりの必要メモリ量(default: 8,単位: GB)
  • W: ジョブの制限時間(default: 24,単位: hour)
  • J: ジョブ名(default: qcmd)※qstatなどで表示される名前

実行例

$ qcmd pa aux
$ qcmd /usr/bin/time -v perl i_love_cats.pl
$ M=20 qcmd /usr/bin/time -v perl i_love_fat_cats.pl
$ qcmd "perl catching_cats.pl | perl counting_cats.pl"
  • 通常は qcmd の後ろに実行したいコマンドを指定すれば,(Vによるノードの指定がなければ)任意のノードで実行されます.その実行結果(標準出力の内容)は,カレントディレクトリの [JobName].o[JobID] というファイルに出力されます.

  • オプションは qcmd の手前に記述します.
  • パイプ(|)やリダイレクト(>)を利用する場合には,コマンド全体をダブルクォート(")で括ります.

ジョブ削除コマンド(qdelall, qdelqueue, qdelrun)

~/.bashrc で設定したエイリアスにより,以下の3コマンドが利用可能になります.

  • qdelall
    • 投入したジョブを全て取り消す
  • qdelqueue
    • 投入したジョブのうち,実行待ちジョブ(キュー)のみを取り消す
  • qdelrun
    • 投入したジョブのうり,実行中のジョブのみを取り消す