TORQUE

Torque チュートリアル

★並列計算環境を使う際の注意

並列計算環境は個々に割り当てられているストレージ容量は少ないです。一人で数ギガ使ってしまうと、他の人が使えなくなる可能性があります。必要ないログ・使い終わったデータ等は、自分のPCにバックアップを取って計算機上から消して下さい。

Torqueとは

☆共有スペースの使い方(注意)☆
mass@mass00.cs.ie.u-ryukyu.ac.jp:~/share 以下をmass01~mass48までがマウントしているので、全マシンで共有したいファイルがある場合は/share/studentの下に自分のディレクトリを作成して使用して下さい。

massのホームに置いてあるファイルは消される可能性があります。studentの下などに自分のディレクトリを作成してそこに置いて下さい。

Torqueは、Job Schedulerである。Job Schedulerは、クラスターに次々と投入されるジョブを、キューなどを用い、スケジューリングを行って管理してくれる。
クラスターを利用して、実験を行う際には、Job Schedulerを用いる必要がある。

それは、他のクラスターユーザーが存在する場合に、同時に別スレッドで処理を実行してしまうならば、CPUなどのリソースを取り合うことになるため、台数効果などの実験結果が正確に得られないからである。
それでは、Torqueの使い方を見てみよう。

Torqueを使用する前に

Torqueは、mass00.cs.ie.u-ryukyu.ac.jp上で使用することができる。
実験を行うためには、パスワードを使用せずにsshできるように、鍵認証の設定を行わなくてはならない。しかし、massユーザーでは既に設定が行われているため、Torqueをすぐに使用することができるようになっている。
(mass->massユーザからクラスタにsshした際にパスワードが聞かれる場合はサーバ班までご連絡ください)

 % ssh mass@mass00.cs.ie.u-ryukyu.ac.jp

尚、パスワードはサーバー班が管理しているので、サーバー班から教えてもらうことができる。

ログインすると、ホームディレクトリにstudentフォルダがあるので、その中に自分の学籍番号のフォルダを作成し、その中で作業を行うようにする。

 % mkdir student/eXX57XX
 % cd student/eXX57XX

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つのタスクごとに出力される。

&ref(torque_qsub.png);

その他、便利なコマンド

-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

このように、ジョブの状態を確認することができる。

過去のサーバ班が作ってくれたTorqueの使用方法のページはこちらから
Torqueの使用方法(MPIの使用方法も載ってます)

参考リンク

最終更新日: 2013/07/23