Mercurial > hg > Document > Growi
view software/Torque.md @ 119:254063df7e73
backup 2023-05-02
author | autobackup |
---|---|
date | Tue, 02 May 2023 00:10:03 +0900 |
parents | b6c284fd5ae4 |
children |
line wrap: on
line source
# Torque ## Torqueとは Torqueは、Job Schedulerである。Job Schedulerは、クラスターに次々と投入されるジョブを、キューなどを用い、スケジューリングを行って管理してくれる。 クラスターを利用して、実験を行う際には、Job Schedulerを用いる必要がある。 それは、他のクラスターユーザーが存在する場合に、同時に別スレッドで処理を実行してしまうならば、CPUなどのリソースを取り合うことになるため、台数効果などの実験結果が正確に得られないからである。 まず、[Torqueのインストール](./Torque/install)をする。 それでは、Torqueの使い方を見てみよう。 ## Torqueがインストールされたserverにログインする ``` ssh ie-user@tino-vm1.ads.ie.u-ryukyu.ac.jp ``` このvmはシス管か, 誰かに頼んで上げてもらう(自分のときは名嘉村研の先輩に頼みました ## queueの作成(サーバー側) テストとして"tqueue"という名前のqueueを作る。 ``` Qmgr: create queue tqueue queue_type = execution Qmgr: set queue tqueue enabled = true Qmgr: set queue tqueue started = true Qmgr: set server default_queue = tqueue Qmgr: set server scheduling = true Qmgr: set queue tqueue resources_max.ncpus = 2 Qmgr: set queue tqueue resources_max.nodes = 2 ``` 各コマンドの意味を以下に示す。 - `create queue <queue名> queue_type = <queueのタイプ>` - 指定された名前、タイプのqueueを作成する。 - タイプはE,executionを指定するとexecution queueになりR,routeを指定するとrouting queueとなる。 - `set queue <queue名> <Attributes>` - 指定したqueueの指定したAttributesを設定する。 例で設定したAttributesについて - `enabled = <true or false>` - trueにすると新しいjobを受け付ける。 - `started = <true or false>` - trueにするとqueueの中のjobの実行を許可する。 - `resources_max.ncpus = <cpu数>` - queueに割り当てるcpu数を設定する。 - `resources_max.nodes = <node数>` - queueに割り当てるnode数を設定する。 - `set server <Attributes>` - 指定したqueueの指定したAttributesを設定する。 例で設定したAttributesについて - `default_queue = <queue名>` - 指定したqueueをデフォルトqueueとする。 - `scheduling = <true or false>` - Schedulingを可能にする。 ここまでの設定の確認を行う。 ``` Qmgr: print server ``` これでサーバーの設定が確認できる。作成したqueueが表示されればうまくいっている。また、以下のコマンドqueueの確認ができる。 ``` Qmgr: list queue <queue名> ``` ### 設定の保存 以下のようにリダイレクトして保存する。 `#echo "p s" | <torqueのインストール先>/bin/qmgr > <ファイル名>` 次回以降はこのファイルを与えることで設定が楽になる。 ファイルの与え方もリダイレクト ` # <torqueのインストール先>/bin/qmgr < <ファイル名>` # Torque チュートリアル ## Torqueを使用する前に Torqueは、naha.ie.u-ryukyu.ac.jp上で使用することができる。 実験を行うためには、パスワードを使用せずにsshできるように、鍵認証の設定を行わなくてはならない。しかし、mauiユーザーでは既に設定が行われているため、Torqueをすぐに使用することができるようになっている。 ``` % ssh ie-user@tino-vm1.ads.ie.u-ryukyu.ac.jp ``` 尚、パスワードはサーバー班が管理しているので、サーバー班から教えてもらうことができる。 ログインすると、ホームディレクトリにProjectフォルダがあるので、その中に自分の学籍番号のフォルダを作成し、その中で作業を行うようにする。 ``` % mkdir student/eXX57XX % cd student/eXX57XX ``` 追記 ただし, Projectフォルダは分散環境上で共有されていないため, ファイルを共有したい場合は /mnt/data/* の中にworkspaceを作り, その中で作業を行うのが望ましい. ## Torque上でジョブを実行する ### ジョブを実行するための準備 jobs.shを作成する。 ``` - jobs.sh #!/bin/sh echo hello hostname ``` ### ジョブの実行 Torqueのジョブは、qsubコマンドによって投入される。 `% qsub jobs.sh` このように実行すると、1台のクラスターでのみ処理が行なわれる。 ### ジョブの実行結果 スクリプトの実行が終わると、jobs.sh.oXXX, jobs.sh.eXXXという2つのファイルが生成される。XXXは、Torqueによって割り振られたジョブ番号である。 ファイルにはそれぞれ、標準出力と、標準エラー出力の内容が出力されている。 ``` % cat jobs.sh.oXXX hello cls001.cs.ie.u-ryukyu.ac.jp ``` ### 複数のノードを用いた実験 また10台で実験を行うには次のように、実行すれば良い。 ``` % qsub -l nodes=10 jobs.sh % cat jobs.sh.oXXX hello cls010.cs.ie.u-ryukyu.ac.jp ``` 10台のノードを指定しても、実際には10台が使用可能になっただけであり、10台で実行された訳ではない。 このcls010.csは、親ノードである。この親ノード(cls010.cs)から、他のノード(cls001-cls009)に対して、命令を行うようにプログラミングする必要がある。 例えば、以下のような処理を行う必要がある。 ``` - jobs.sh #!/bin/sh #PBS -N ExampleJob #PBS -l nodes=10,walltime=00:01:00 for serv in `cat $PBS_NODEFILE` do ssh $serv hostname & done wait ``` #PBSを用いてコメントをつけると、その部分が、qsubコマンドのオプションとして認識される。 - -N: ExampleJob.oXXXのように、ジョブに名前を付けることができるようになる。 - -l: ジョブのオプション。nodes=ノード数、walltime=処理制限時間のように設定できる。 親ノードのシェルには、$PBS_NODEFILEという、環境変数が準備されている。 ``` - (例) % echo $PBS_NODEFILE /var/spool/torque/aux/XXX.naha.ie.u-ryukyu.ac.jp % cat $PBS_NODEFILE cls010.cs.ie.u-ryukyu.ac.jp cls009.cs.ie.u-ryukyu.ac.jp ...(略)... cls001.cs.ie.u-ryukyu.ac.jp ``` $PBS_NODEFILEの先頭行のホストが親ノードである。 このスクリプトを実行してみると、以下のようになった。 ``` % qsub jobs.sh % cat ExampleJob.oXXX cls003.cs.ie.u-ryukyu.ac.jp cls009.cs.ie.u-ryukyu.ac.jp cls008.cs.ie.u-ryukyu.ac.jp cls010.cs.ie.u-ryukyu.ac.jp cls007.cs.ie.u-ryukyu.ac.jp cls006.cs.ie.u-ryukyu.ac.jp cls004.cs.ie.u-ryukyu.ac.jp cls005.cs.ie.u-ryukyu.ac.jp cls002.cs.ie.u-ryukyu.ac.jp cls001.cs.ie.u-ryukyu.ac.jp ``` このように、10台のノードで、hostnameコマンドを実行した結果が表示されていることが分かる。 これらの他に、mpiを用いて、他のノードにジョブを割り振ることもできる。 ## 1ノード2CPUを用いた実験方法 クラスターはCoreDuoを搭載しているため、CPUを2つまで使用することができる。つまり、1ノードで、2つの処理を行なうことができる。 その場合は、以下のように実行する。 ``` % qsub -l nodes=10:ppn=2 jobs.sh ``` この場合、$PBS_NODEFILEには、同じホストが2つずつ登録されていることになる。 ## 1ジョブでマルチタスクの実行 また、1つのジョブで、複数の同じタスクを実行することもできる。 その場合は、以下のように実行する。 ``` % qsub -t 1-3 -l nodes=10 jobs.sh ``` この場合、出力結果も3つのタスクごとに出力される。 ## その他、便利なコマンド ``` - jobs.sh #!/bin/sh #PBS -N ExampleJob #PBS -l nodes=1,walltime=00:01:00 sleep 10 echo hello ``` ``` % qsub jobs.sh ``` sleepを行って、ジョブを長引かせてテストする。 ``` % qstat Job id Name User Time Use S Queue ___ XXX.naha ExampleJob maui 0 R batch ``` このように、ジョブの状態を確認することができる。 ## Error 対処メモ Nodeの数を4 9台に設定するとなぜかjobがうまく動かない。以下のようなエラーがでる。 ``` qsub: Job exceeds queue resource limits MSG=cannot satisfy queue max nodes requirement ``` 対処法はNodeの数の設定時に、一桁だった場合は 05 といったように0をつけることで解決する。 ``` % qsub -l nodes=05 test.sh ``` 全体で登録しているNodeの数が二桁になるとこうする必要がある。 また、Nodeの数を間違っていなくても、上のエラーがでるときがある。その時は今使っているqueueの設定をみる。 ``` % qmgr -c "p s" : create queue cqueue set queue cqueue queue_type = Execution set queue cqueue resources_max.ncpus = 184 set queue cqueue resources_max.nodes = 46 set queue cqueue enabled = True set queue cqueue started = True ``` ncpus の値やnodesの値を確認する。resource_max.nodes でなく、 resource_max.nodect も設定したほうがいいかもしれない。 ``` % sudo qmgr set queue cqueue resources_max.nodect = 46 ``` ## crとcsの両方のtorqueクラスタを1つで使う crで作成したtorqueのクラスタをcsの方でまとめて使うための方法。 以下の2つの設定変更により行える - クライアント側のserver_nameファイルとconfigファイルをmass00.cs(親)の設定に変更する。 - 親のtorqueのnodesの設定にcrのクラスタの情報を付け加える。 上記の変更をpbsをstopさせて変更を行う。 ``` % sudo /etc/init.d/torque stop ``` ### クライアント側のserver_nameファイルとconfigファイルをmass00.cs(親)の設定に変更する 変更するファイルは以下の2つ ``` /var/spool/torque/server_name /var/spool/torque/mom_priv/config ``` それぞれの中身をみてみる ``` mass01(cr) % cat /var/spool/torque/server_name mass00.cr.ie.u-ryukyu.ac.jp mass01(cr) % cat /var/spool/torque/mom_priv/config $logevent 0x1fff $max_load 1.2 $ideal_load 1.0 $pbsserver mass00.cr.ie.u-ryukyu.ac.jp $restricted mass00.cr.ie.u-ryukyu.ac.jp% ``` 上記のmass00.crをmass.csに変更すればよい ###親のtorqueのnodesの設定にcrのクラスタの情報を付け加える 変更するファイルは以下のもの /var/spool/torque/server_priv/nodes 中にはクライアントとなるサーバのドメインと使用するcpuの数の記述がある。 ``` % sudo cat /var/spool/torque/server_priv/nodes mass02.cs.ie.u-ryukyu.ac.jp np=4 mass03.cs.ie.u-ryukyu.ac.jp np=4 mass04.cs.ie.u-ryukyu.ac.jp np=4 :略 mass46.cs.ie.u-ryukyu.ac.jp np=4 mass47.cs.ie.u-ryukyu.ac.jp np=4 ``` これにmass01.cr.ie.u-ryukyu.ac.jp といったcr側のクライアントの情報を追加してあげればよい。 設定が終わったら ``` % sudo /etc/init.d/torque start ``` をして起動させる。 クライアント全部を手作業でやるのは面倒臭いのでcapistrano を使ってください。 ## workspaceの作り方 ### 力技(rootのゴリ押し) 例えばie-user@tino-vm1.ads.ie.u-ryukyu.ac.jp で ``` mkdir /mnt/data/fuga ``` と作成しようとしてもPermmision Errorになる. また, rootで作成しても ``` sudo mkdir /mnt/data/fuga ls -l /mnt/data 合計 48 ... drwxr-xr-x 2 ie-user ie-user 4096 8月 9 2016 examples drwxr-xr-x 2 nfsnobody nfsnobody 6 1月 24 06:08 fuga ... ``` となり, usernameとgroupが違うため, 他のvmがfugaにアクセスできない. (そもそも, このvmでもsudoがないとファイルが書き込めないはず. このファイルを管理しているのはtino-vm2の方なので, そこにアクセスしてファイル権限を書き換える ``` ssh tino-vm2.ads.ie.u-ryukyu.ac.jp # /exports/data がmountされていたため, この中のfugaを変える sudo chown -R ie-user:ie-user /exports/data/fuga exit ``` その後ファイルを見てみると書き換わっている ``` ls -l /mnt/data 合計 48 ... drwxr-xr-x 2 ie-user ie-user 4096 8月 9 2016 examples drwxr-xr-x 2 ie-user ie-user 6 1月 24 06:08 fuga ... ``` ただゴリ押しなので他の方法もあるかも. (というか普通は管理者に言うべきなんだろうなぁ.... ## Christie用メモ @tinovm1:/mnt/data/christie-workspace/の中で作業を行う。 christieを更新した際はjarファイルを置き換えること。(Jenkinsで自動化できるらしい。) ## 参考文献 http://docs.adaptivecomputing.com/torque/6-1-2/adminGuide/torque.htm#topics/torque/0-intro/introduction.htm%3FTocPath%3DChapter%25201%253A%2520Introduction%7C_____0