#author(“2019-06-11T07:17:58+00:00”,“game”,“game”)
# Torque
# Torqueとは
Torqueは、Job Schedulerである。Job Schedulerは、クラスターに次々と投入されるジョブを、キューなどを用い、スケジューリングを行って管理してくれる。~ クラスターを利用して、実験を行う際には、Job Schedulerを用いる必要がある。~ それは、他のクラスターユーザーが存在する場合に、同時に別スレッドで処理を実行してしまうならば、CPUなどのリソースを取り合うことになるため、台数効果などの実験結果が正確に得られないからである。~ まず、[Torqueのインストール]する。 それでは、Torqueの使い方を見てみよう。~
# Torqueがインストールされたserverにログインする
ssh ie-user@tino-vm1.ads.ie.u-ryukyu.ac.jp
このvmはシス管か, 誰かに頼んで上げてもらう(自分のときは名嘉村研の先輩に頼みました
# queueの作成(サーバー側)
テストとして"tqueue"という名前のqueueを作る。
|
|
各コマンドの意味を以下に示す。
- create queue <queue名> queue_type = <queueのタイプ>
- 指定された名前、タイプのqueueを作成する。
- タイプはE,executionを指定するとexecution queueになりR,routeを指定するとrouting queueとなる。
- set queue <queue名>
- 指定したqueueの指定したAttributesを設定する。 例で設定したAttributesについて
- enabled =
- trueにすると新しいjobを受け付ける。
- started =
- trueにするとqueueの中のjobの実行を許可する。
- resources_max.ncpus = <cpu数>
- queueに割り当てるcpu数を設定する。
- resources_max.nodes = <node数>
- queueに割り当てるnode数を設定する。
- set server
- 指定したqueueの指定したAttributesを設定する。 例で設定したAttributesについて
- default_queue = <queue名>
- 指定したqueueをデフォルトqueueとする。
- scheduling =
- Schedulingを可能にする。 ここまでの設定の確認を行う。
|
|
これでサーバーの設定が確認できる。作成したqueueが表示されればうまくいっている。また、以下のコマンドqueueの確認ができる。
|
|
# 設定の保存
以下のようにリダイレクトして保存する。
|
|
次回以降はこのファイルを与えることで設定が楽になる。
ファイルの与え方もリダイレクト
|
|
# Torque チュートリアル
# Torqueを使用する前に
Torqueは、naha.ie.u-ryukyu.ac.jp上で使用することができる。~ 実験を行うためには、パスワードを使用せずにsshできるように、鍵認証の設定を行わなくてはならない。しかし、mauiユーザーでは既に設定が行われているため、Torqueをすぐに使用することができるようになっている。
|
|
尚、パスワードはサーバー班が管理しているので、サーバー班から教えてもらうことができる。
ログインすると、ホームディレクトリにProjectフォルダがあるので、その中に自分の学籍番号のフォルダを作成し、その中で作業を行うようにする。
|
|
追記 ただし, Projectフォルダは分散環境上で共有されていないため, ファイルを共有したい場合は /mnt/data/* の中にworkspaceを作り, その中で作業を行うのが望ましい.
# Torque上でジョブを実行する
# ジョブを実行するための準備
jobs.shを作成する。
- jobs.sh
|
|
# ジョブの実行
Torqueのジョブは、qsubコマンドによって投入される。
|
|
このように実行すると、1台のクラスターでのみ処理が行なわれる。
# ジョブの実行結果
スクリプトの実行が終わると、jobs.sh.oXXX, jobs.sh.eXXXという2つのファイルが生成される。XXXは、Torqueによって割り振られたジョブ番号である。 ファイルにはそれぞれ、標準出力と、標準エラー出力の内容が出力されている。
|
|
# 複数のノードを用いた実験
また10台で実験を行うには次のように、実行すれば良い。
|
|
10台のノードを指定しても、実際には10台が使用可能になっただけであり、10台で実行された訳ではない。~ このcls010.csは、親ノードである。この親ノード(cls010.cs)から、他のノード(cls001-cls009)に対して、命令を行うようにプログラミングする必要がある。
例えば、以下のような処理を行う必要がある。
- jobs.sh
|
|
#PBSを用いてコメントをつけると、その部分が、qsubコマンドのオプションとして認識される。
- -N: ExampleJob.oXXXのように、ジョブに名前を付けることができるようになる。
- -l: ジョブのオプション。nodes=ノード数、walltime=処理制限時間のように設定できる。
親ノードのシェルには、$PBS_NODEFILEという、環境変数が準備されている。
- (例)
|
|
$PBS_NODEFILEの先頭行のホストが親ノードである。
このスクリプトを実行してみると、以下のようになった。
|
|
このように、10台のノードで、hostnameコマンドを実行した結果が表示されていることが分かる。 これらの他に、mpiを用いて、他のノードにジョブを割り振ることもできる。
# 1ノード2CPUを用いた実験方法
クラスターはCoreDuoを搭載しているため、CPUを2つまで使用することができる。つまり、1ノードで、2つの処理を行なうことができる。~ その場合は、以下のように実行する。
|
|
この場合、$PBS_NODEFILEには、同じホストが2つずつ登録されていることになる。
# 1ジョブでマルチタスクの実行
また、1つのジョブで、複数の同じタスクを実行することもできる。 その場合は、以下のように実行する。
|
|
この場合、出力結果も3つのタスクごとに出力される。
# その他、便利なコマンド
- jobs.sh
|
|
|
|
sleepを行って、ジョブを長引かせてテストする。
|
|
このように、ジョブの状態を確認することができる。
# Error 対処メモ
Nodeの数を4~9台に設定するとなぜかjobがうまく動かない。以下のようなエラーがでる。
|
|
対処法はNodeの数の設定時に、一桁だった場合は 05 といったように0をつけることで解決する。
|
|
全体で登録しているNodeの数が二桁になるとこうする必要がある。 また、Nodeの数を間違っていなくても、上のエラーがでるときがある。その時は今使っているqueueの設定をみる。
|
|
ncpus の値やnodesの値を確認する。resource_max.nodes でなく、 resource_max.nodect も設定したほうがいいかもしれない。
|
|
# crとcsの両方のtorqueクラスタを1つで使う
crで作成したtorqueのクラスタをcsの方でまとめて使うための方法。
以下の2つの設定変更により行える
- クライアント側のserver_nameファイルとconfigファイルをmass00.cs(親)の設定に変更する。
- 親のtorqueのnodesの設定にcrのクラスタの情報を付け加える。
上記の変更をpbsをstopさせて変更を行う。
|
|
# クライアント側のserver_nameファイルとconfigファイルをmass00.cs(親)の設定に変更する
変更するファイルは以下の2つ
|
|
それぞれの中身をみてみる
|
|
上記のmass00.crをmass.csに変更すればよい
# 親のtorqueのnodesの設定にcrのクラスタの情報を付け加える
変更するファイルは以下のもの
|
|
中にはクライアントとなるサーバのドメインと使用するcpuの数の記述がある。
|
|
これにmass01.cr.ie.u-ryukyu.ac.jp といったcr側のクライアントの情報を追加してあげればよい。
設定が終わったら
|
|
をして起動させる。 クライアント全部を手作業でやるのは面倒臭いのでcapistrano を使ってください。
# workspaceの作り方
# 力技(rootのゴリ押し)
例えばie-user@tino-vm1.ads.ie.u-ryukyu.ac.jp で
|
|
と作成しようとしてもPermmision Errorになる. また, rootで作成しても
|
|
となり, usernameとgroupが違うため, 他のvmがfugaにアクセスできない. (そもそも, このvmでもsudoがないとファイルが書き込めないはず.
このファイルを管理しているのはtino-vm2の方なので, そこにアクセスしてファイル権限を書き換える
|
|
その後ファイルを見てみると書き換わっている
|
|
ただゴリ押しなので他の方法もあるかも. (というか普通は管理者に言うべきなんだろうなぁ….
# Christie用メモ
@tinovm1:/mnt/data/christie-workspace/の中で作業を行う。 christieを更新した際はjarファイルを置き換えること。(Jenkinsで自動化できるらしい。)