0
|
1 # Torque
|
|
2 ## Torqueとは
|
|
3 Torqueは、Job Schedulerである。Job Schedulerは、クラスターに次々と投入されるジョブを、キューなどを用い、スケジューリングを行って管理してくれる。
|
|
4 クラスターを利用して、実験を行う際には、Job Schedulerを用いる必要がある。
|
|
5 それは、他のクラスターユーザーが存在する場合に、同時に別スレッドで処理を実行してしまうならば、CPUなどのリソースを取り合うことになるため、台数効果などの実験結果が正確に得られないからである。
|
|
6
|
2
|
7 まず、[Torqueのインストール](./Torque/install)をする。
|
0
|
8 それでは、Torqueの使い方を見てみよう。
|
|
9
|
|
10 ## Torqueがインストールされたserverにログインする
|
|
11
|
|
12 ```
|
|
13 ssh ie-user@tino-vm1.ads.ie.u-ryukyu.ac.jp
|
|
14 ```
|
|
15
|
|
16 このvmはシス管か, 誰かに頼んで上げてもらう(自分のときは名嘉村研の先輩に頼みました
|
|
17
|
|
18 ## queueの作成(サーバー側)
|
|
19 テストとして"tqueue"という名前のqueueを作る。
|
|
20 ```
|
|
21 Qmgr: create queue tqueue queue_type = execution
|
|
22 Qmgr: set queue tqueue enabled = true
|
|
23 Qmgr: set queue tqueue started = true
|
|
24 Qmgr: set server default_queue = tqueue
|
|
25 Qmgr: set server scheduling = true
|
|
26 Qmgr: set queue tqueue resources_max.ncpus = 2
|
|
27 Qmgr: set queue tqueue resources_max.nodes = 2
|
|
28 ```
|
|
29 各コマンドの意味を以下に示す。
|
2
|
30 - `create queue <queue名> queue_type = <queueのタイプ>`
|
0
|
31 - 指定された名前、タイプのqueueを作成する。
|
|
32 - タイプはE,executionを指定するとexecution queueになりR,routeを指定するとrouting queueとなる。
|
2
|
33 - `set queue <queue名> <Attributes>`
|
0
|
34 - 指定したqueueの指定したAttributesを設定する。
|
|
35 例で設定したAttributesについて
|
2
|
36 - `enabled = <true or false>`
|
0
|
37 - trueにすると新しいjobを受け付ける。
|
2
|
38 - `started = <true or false>`
|
0
|
39 - trueにするとqueueの中のjobの実行を許可する。
|
2
|
40 - `resources_max.ncpus = <cpu数>`
|
0
|
41 - queueに割り当てるcpu数を設定する。
|
2
|
42 - `resources_max.nodes = <node数>`
|
0
|
43 - queueに割り当てるnode数を設定する。
|
2
|
44 - `set server <Attributes>`
|
0
|
45 - 指定したqueueの指定したAttributesを設定する。
|
|
46 例で設定したAttributesについて
|
2
|
47 - `default_queue = <queue名>`
|
0
|
48 - 指定したqueueをデフォルトqueueとする。
|
2
|
49 - `scheduling = <true or false>`
|
0
|
50 - Schedulingを可能にする。
|
|
51
|
|
52 ここまでの設定の確認を行う。
|
|
53
|
|
54 ```
|
|
55 Qmgr: print server
|
|
56 ```
|
|
57 これでサーバーの設定が確認できる。作成したqueueが表示されればうまくいっている。また、以下のコマンドqueueの確認ができる。
|
|
58
|
|
59 ```
|
|
60 Qmgr: list queue <queue名>
|
|
61 ```
|
|
62
|
|
63 ### 設定の保存
|
|
64 以下のようにリダイレクトして保存する。
|
|
65
|
2
|
66 `#echo "p s" | <torqueのインストール先>/bin/qmgr > <ファイル名>`
|
0
|
67
|
|
68 次回以降はこのファイルを与えることで設定が楽になる。
|
|
69
|
|
70 ファイルの与え方もリダイレクト
|
|
71
|
2
|
72 ` # <torqueのインストール先>/bin/qmgr < <ファイル名>`
|
|
73
|
|
74 # Torque チュートリアル
|
0
|
75
|
|
76
|
2
|
77 ## Torqueを使用する前に
|
0
|
78 Torqueは、naha.ie.u-ryukyu.ac.jp上で使用することができる。
|
|
79 実験を行うためには、パスワードを使用せずにsshできるように、鍵認証の設定を行わなくてはならない。しかし、mauiユーザーでは既に設定が行われているため、Torqueをすぐに使用することができるようになっている。
|
|
80
|
2
|
81 ```
|
0
|
82 % ssh ie-user@tino-vm1.ads.ie.u-ryukyu.ac.jp
|
2
|
83 ```
|
0
|
84
|
|
85 尚、パスワードはサーバー班が管理しているので、サーバー班から教えてもらうことができる。
|
|
86
|
|
87 ログインすると、ホームディレクトリにProjectフォルダがあるので、その中に自分の学籍番号のフォルダを作成し、その中で作業を行うようにする。
|
|
88
|
2
|
89 ```
|
0
|
90 % mkdir student/eXX57XX
|
|
91 % cd student/eXX57XX
|
2
|
92 ```
|
0
|
93
|
|
94 追記
|
|
95 ただし, Projectフォルダは分散環境上で共有されていないため, ファイルを共有したい場合は /mnt/data/* の中にworkspaceを作り, その中で作業を行うのが望ましい.
|
|
96
|
|
97
|
2
|
98 ## Torque上でジョブを実行する
|
|
99 ### ジョブを実行するための準備
|
0
|
100 jobs.shを作成する。
|
|
101
|
2
|
102 ```
|
0
|
103 - jobs.sh
|
|
104 #!/bin/sh
|
|
105 echo hello
|
|
106 hostname
|
2
|
107 ```
|
0
|
108
|
2
|
109 ### ジョブの実行
|
0
|
110 Torqueのジョブは、qsubコマンドによって投入される。
|
2
|
111
|
|
112 `% qsub jobs.sh`
|
|
113
|
0
|
114 このように実行すると、1台のクラスターでのみ処理が行なわれる。
|
|
115
|
2
|
116 ### ジョブの実行結果
|
0
|
117 スクリプトの実行が終わると、jobs.sh.oXXX, jobs.sh.eXXXという2つのファイルが生成される。XXXは、Torqueによって割り振られたジョブ番号である。
|
|
118 ファイルにはそれぞれ、標準出力と、標準エラー出力の内容が出力されている。
|
|
119
|
2
|
120 ```
|
0
|
121 % cat jobs.sh.oXXX
|
|
122 hello
|
|
123 cls001.cs.ie.u-ryukyu.ac.jp
|
2
|
124 ```
|
0
|
125
|
2
|
126 ### 複数のノードを用いた実験
|
0
|
127 また10台で実験を行うには次のように、実行すれば良い。
|
|
128
|
2
|
129 ```
|
0
|
130 % qsub -l nodes=10 jobs.sh
|
|
131 % cat jobs.sh.oXXX
|
|
132 hello
|
|
133 cls010.cs.ie.u-ryukyu.ac.jp
|
2
|
134 ```
|
0
|
135
|
|
136 10台のノードを指定しても、実際には10台が使用可能になっただけであり、10台で実行された訳ではない。
|
|
137 このcls010.csは、親ノードである。この親ノード(cls010.cs)から、他のノード(cls001-cls009)に対して、命令を行うようにプログラミングする必要がある。
|
|
138
|
|
139 例えば、以下のような処理を行う必要がある。
|
|
140
|
2
|
141 ```
|
0
|
142 - jobs.sh
|
|
143 #!/bin/sh
|
|
144 #PBS -N ExampleJob
|
|
145 #PBS -l nodes=10,walltime=00:01:00
|
|
146 for serv in `cat $PBS_NODEFILE`
|
|
147 do
|
|
148 ssh $serv hostname &
|
|
149 done
|
|
150 wait
|
2
|
151 ```
|
0
|
152
|
|
153 #PBSを用いてコメントをつけると、その部分が、qsubコマンドのオプションとして認識される。
|
|
154 - -N: ExampleJob.oXXXのように、ジョブに名前を付けることができるようになる。
|
|
155 - -l: ジョブのオプション。nodes=ノード数、walltime=処理制限時間のように設定できる。
|
|
156
|
|
157 親ノードのシェルには、$PBS_NODEFILEという、環境変数が準備されている。
|
|
158
|
2
|
159 ```
|
0
|
160 - (例)
|
|
161 % echo $PBS_NODEFILE
|
|
162 /var/spool/torque/aux/XXX.naha.ie.u-ryukyu.ac.jp
|
|
163 % cat $PBS_NODEFILE
|
|
164 cls010.cs.ie.u-ryukyu.ac.jp
|
|
165 cls009.cs.ie.u-ryukyu.ac.jp
|
|
166 ...(略)...
|
|
167 cls001.cs.ie.u-ryukyu.ac.jp
|
2
|
168 ```
|
0
|
169
|
|
170 $PBS_NODEFILEの先頭行のホストが親ノードである。
|
|
171
|
|
172 このスクリプトを実行してみると、以下のようになった。
|
|
173
|
2
|
174 ```
|
0
|
175 % qsub jobs.sh
|
|
176 % cat ExampleJob.oXXX
|
|
177 cls003.cs.ie.u-ryukyu.ac.jp
|
|
178 cls009.cs.ie.u-ryukyu.ac.jp
|
|
179 cls008.cs.ie.u-ryukyu.ac.jp
|
|
180 cls010.cs.ie.u-ryukyu.ac.jp
|
|
181 cls007.cs.ie.u-ryukyu.ac.jp
|
|
182 cls006.cs.ie.u-ryukyu.ac.jp
|
|
183 cls004.cs.ie.u-ryukyu.ac.jp
|
|
184 cls005.cs.ie.u-ryukyu.ac.jp
|
|
185 cls002.cs.ie.u-ryukyu.ac.jp
|
|
186 cls001.cs.ie.u-ryukyu.ac.jp
|
2
|
187 ```
|
0
|
188
|
|
189 このように、10台のノードで、hostnameコマンドを実行した結果が表示されていることが分かる。
|
|
190 これらの他に、mpiを用いて、他のノードにジョブを割り振ることもできる。
|
|
191
|
2
|
192 ## 1ノード2CPUを用いた実験方法
|
0
|
193 クラスターはCoreDuoを搭載しているため、CPUを2つまで使用することができる。つまり、1ノードで、2つの処理を行なうことができる。
|
|
194 その場合は、以下のように実行する。
|
2
|
195 ```
|
0
|
196 % qsub -l nodes=10:ppn=2 jobs.sh
|
2
|
197 ```
|
0
|
198 この場合、$PBS_NODEFILEには、同じホストが2つずつ登録されていることになる。
|
|
199
|
2
|
200 ## 1ジョブでマルチタスクの実行
|
0
|
201 また、1つのジョブで、複数の同じタスクを実行することもできる。
|
|
202 その場合は、以下のように実行する。
|
2
|
203 ```
|
0
|
204 % qsub -t 1-3 -l nodes=10 jobs.sh
|
2
|
205 ```
|
0
|
206 この場合、出力結果も3つのタスクごとに出力される。
|
|
207
|
|
208
|
2
|
209 ## その他、便利なコマンド
|
|
210 ```
|
0
|
211 - jobs.sh
|
|
212 #!/bin/sh
|
|
213 #PBS -N ExampleJob
|
|
214 #PBS -l nodes=1,walltime=00:01:00
|
|
215 sleep 10
|
|
216 echo hello
|
2
|
217 ```
|
0
|
218
|
2
|
219 ```
|
0
|
220 % qsub jobs.sh
|
2
|
221 ```
|
0
|
222 sleepを行って、ジョブを長引かせてテストする。
|
2
|
223 ```
|
0
|
224 % qstat
|
|
225 Job id Name User Time Use S Queue
|
|
226 ___
|
|
227 XXX.naha ExampleJob maui 0 R batch
|
2
|
228 ```
|
0
|
229
|
|
230 このように、ジョブの状態を確認することができる。
|
|
231
|
2
|
232 ## Error 対処メモ
|
0
|
233 Nodeの数を4 9台に設定するとなぜかjobがうまく動かない。以下のようなエラーがでる。
|
2
|
234 ```
|
0
|
235 qsub: Job exceeds queue resource limits MSG=cannot satisfy queue max nodes requirement
|
2
|
236 ```
|
0
|
237
|
|
238 対処法はNodeの数の設定時に、一桁だった場合は 05 といったように0をつけることで解決する。
|
2
|
239 ```
|
0
|
240 % qsub -l nodes=05 test.sh
|
2
|
241 ```
|
0
|
242
|
|
243 全体で登録しているNodeの数が二桁になるとこうする必要がある。
|
|
244 また、Nodeの数を間違っていなくても、上のエラーがでるときがある。その時は今使っているqueueの設定をみる。
|
2
|
245 ```
|
0
|
246 % qmgr -c "p s"
|
|
247 :
|
|
248 create queue cqueue
|
|
249 set queue cqueue queue_type = Execution
|
|
250 set queue cqueue resources_max.ncpus = 184
|
|
251 set queue cqueue resources_max.nodes = 46
|
|
252 set queue cqueue enabled = True
|
|
253 set queue cqueue started = True
|
2
|
254 ```
|
0
|
255
|
|
256 ncpus の値やnodesの値を確認する。resource_max.nodes でなく、 resource_max.nodect も設定したほうがいいかもしれない。
|
2
|
257 ```
|
0
|
258 % sudo qmgr
|
|
259 set queue cqueue resources_max.nodect = 46
|
2
|
260 ```
|
0
|
261
|
|
262
|
2
|
263 ## crとcsの両方のtorqueクラスタを1つで使う
|
0
|
264 crで作成したtorqueのクラスタをcsの方でまとめて使うための方法。
|
|
265
|
|
266 以下の2つの設定変更により行える
|
|
267 - クライアント側のserver_nameファイルとconfigファイルをmass00.cs(親)の設定に変更する。
|
|
268 - 親のtorqueのnodesの設定にcrのクラスタの情報を付け加える。
|
|
269
|
|
270 上記の変更をpbsをstopさせて変更を行う。
|
2
|
271 ```
|
0
|
272 % sudo /etc/init.d/torque stop
|
2
|
273 ```
|
|
274 ### クライアント側のserver_nameファイルとconfigファイルをmass00.cs(親)の設定に変更する
|
0
|
275 変更するファイルは以下の2つ
|
2
|
276 ```
|
0
|
277 /var/spool/torque/server_name
|
|
278 /var/spool/torque/mom_priv/config
|
2
|
279 ```
|
0
|
280 それぞれの中身をみてみる
|
2
|
281 ```
|
0
|
282 mass01(cr) % cat /var/spool/torque/server_name
|
|
283 mass00.cr.ie.u-ryukyu.ac.jp
|
|
284 mass01(cr) % cat /var/spool/torque/mom_priv/config
|
|
285 $logevent 0x1fff
|
|
286 $max_load 1.2
|
|
287 $ideal_load 1.0
|
|
288 $pbsserver mass00.cr.ie.u-ryukyu.ac.jp
|
|
289 $restricted mass00.cr.ie.u-ryukyu.ac.jp%
|
2
|
290 ```
|
0
|
291 上記のmass00.crをmass.csに変更すればよい
|
|
292
|
|
293 ###親のtorqueのnodesの設定にcrのクラスタの情報を付け加える
|
|
294 変更するファイルは以下のもの
|
|
295 /var/spool/torque/server_priv/nodes
|
|
296
|
|
297 中にはクライアントとなるサーバのドメインと使用するcpuの数の記述がある。
|
2
|
298 ```
|
0
|
299 % sudo cat /var/spool/torque/server_priv/nodes
|
|
300 mass02.cs.ie.u-ryukyu.ac.jp np=4
|
|
301 mass03.cs.ie.u-ryukyu.ac.jp np=4
|
|
302 mass04.cs.ie.u-ryukyu.ac.jp np=4
|
|
303 :略
|
|
304 mass46.cs.ie.u-ryukyu.ac.jp np=4
|
|
305 mass47.cs.ie.u-ryukyu.ac.jp np=4
|
2
|
306 ```
|
0
|
307
|
|
308 これにmass01.cr.ie.u-ryukyu.ac.jp といったcr側のクライアントの情報を追加してあげればよい。
|
|
309
|
|
310 設定が終わったら
|
2
|
311 ```
|
0
|
312 % sudo /etc/init.d/torque start
|
2
|
313 ```
|
0
|
314 をして起動させる。
|
|
315 クライアント全部を手作業でやるのは面倒臭いのでcapistrano を使ってください。
|
|
316
|
|
317 ## workspaceの作り方
|
|
318 ### 力技(rootのゴリ押し)
|
|
319
|
|
320 例えばie-user@tino-vm1.ads.ie.u-ryukyu.ac.jp で
|
2
|
321 ```
|
0
|
322 mkdir /mnt/data/fuga
|
2
|
323 ```
|
0
|
324
|
|
325 と作成しようとしてもPermmision Errorになる. また, rootで作成しても
|
2
|
326 ```
|
0
|
327 sudo mkdir /mnt/data/fuga
|
|
328 ls -l /mnt/data
|
|
329 合計 48
|
|
330 ...
|
|
331 drwxr-xr-x 2 ie-user ie-user 4096 8月 9 2016 examples
|
|
332 drwxr-xr-x 2 nfsnobody nfsnobody 6 1月 24 06:08 fuga
|
|
333 ...
|
2
|
334 ```
|
0
|
335
|
|
336 となり, usernameとgroupが違うため, 他のvmがfugaにアクセスできない. (そもそも, このvmでもsudoがないとファイルが書き込めないはず.
|
|
337
|
|
338 このファイルを管理しているのはtino-vm2の方なので, そこにアクセスしてファイル権限を書き換える
|
2
|
339 ```
|
0
|
340 ssh tino-vm2.ads.ie.u-ryukyu.ac.jp
|
|
341 # /exports/data がmountされていたため, この中のfugaを変える
|
|
342 sudo chown -R ie-user:ie-user /exports/data/fuga
|
|
343 exit
|
2
|
344 ```
|
0
|
345
|
|
346 その後ファイルを見てみると書き換わっている
|
2
|
347 ```
|
0
|
348 ls -l /mnt/data
|
|
349 合計 48
|
|
350 ...
|
|
351 drwxr-xr-x 2 ie-user ie-user 4096 8月 9 2016 examples
|
|
352 drwxr-xr-x 2 ie-user ie-user 6 1月 24 06:08 fuga
|
|
353 ...
|
2
|
354 ```
|
0
|
355
|
|
356 ただゴリ押しなので他の方法もあるかも. (というか普通は管理者に言うべきなんだろうなぁ....
|
|
357
|
|
358 ## Christie用メモ
|
|
359 @tinovm1:/mnt/data/christie-workspace/の中で作業を行う。
|
|
360 christieを更新した際はjarファイルを置き換えること。(Jenkinsで自動化できるらしい。)
|
|
361
|
|
362
|
|
363
|
|
364 ## 参考文献
|
|
365 http://docs.adaptivecomputing.com/torque/6-1-2/adminGuide/torque.htm#topics/torque/0-intro/introduction.htm%3FTocPath%3DChapter%25201%253A%2520Introduction%7C_____0
|