TORQUE

提供: ArchWiki
ナビゲーションに移動 検索に移動

関連記事

ノート: TORQUE はフリーソフトウェアではありません。

TORQUE はバッチジョブや分散された計算ノードを制御します。TORQUE を使うことで、ホーム・スモールオフィス用の Linux クラスタを構築してジョブを管理することができます。クラスタは一つのヘッドノードと多数の計算ノードから成ります。ヘッドノードでは torque-server デーモンを実行させ計算ノードでは torque-client デーモンを実行させます。ヘッドノードではスケジューラデーモンも実行します。

インストール

ノート: TORQUE はとても強力なキューイングシステムですが、コンパイルのスループットを高めるためにクラスタを組むだけなら、distcc の方が遥かに簡単で洗練されたソリューションです。

AURtorqueAUR パッケージをインストールしてください。

要件

/etc/hosts

クラスタの全てのマシンの /etc/hosts に、クラスタの全てのマシンのホストネームを記述してください。例えば、クラスタを3つのマシン (mars, phobos, deimos) で構成する場合:

192.168.0.20   mars
192.168.0.21   phobos
192.168.0.22   deimos

ファイアウォールの設定 (インストールしている場合)

TORQUE を使用する全てのマシンの TCP を開いてください。

pbs_server (サーバー) と pbs_mom (クライアント) はデフォルトでは TCP と UDP のポート 15001-15004 を使用します。また、特権ポートが設定されている場合 (デフォルト) pbs_mom (クライアント) は UDP ポート 1023 以下も使用します。

NFS

技術的には、NFS を必ずしも使う必要はありませんが、使ったほうが設定が簡単になります。ビルドに使用するディスク領域を共有するために NFS の共有をサーバーや他のマシンで設定することを強く推奨します。

セットアップ

サーバー (ヘッドノード) の設定

ヘッドノード/スケジューラで以下の手順に従ってください。

/var/spool/torque/server_name を編集してヘッドノードに名前を付けます。分かりやすいように /etc/hostname のホストネームと一緒の名前にすることを推奨します。

torque サーバーを作成・設定:

# pbs_server -t create
PBS_Server localhost.localdomain: Create mode and server database exists,
do you wish to continue y/(n)?y

以下を実行して trqauthd を起動:

# trqauthd

最小限必要なオプションは以下の通りです。最初の行の "mars" を /var/spool/torque/server_name で入力したホストネームに置き換えてください:

qmgr -c "set server acl_hosts = mars"
qmgr -c "set server scheduling=true"
qmgr -c "create queue batch queue_type=execution"
qmgr -c "set queue batch started=true"
qmgr -c "set queue batch enabled=true"
qmgr -c "set queue batch resources_default.nodes=1"
qmgr -c "set queue batch resources_default.walltime=3600"
qmgr -c "set server default_queue=batch"

完了したジョブは一定期間キューの中に保持すると良いでしょう:

qmgr -c "set server keep_completed = 86400"

上記の場合、86400秒 = 24時間後に、キューからジョブが自動的に削除されます。qstat の -f スイッチを使うことでキューから削除されたジョブのログを確認することができます:

qstat -f

サーバーの設定を確認したい場合は次のコマンドを実行:

# qmgr -c 'p s'

/var/spool/torque/server_priv/nodes を編集して計算ノードを全て追加してください。ヘッドノードと同じように、LAN 上のマシンのホストネームと同じ名前を使うことを推奨します。構文は HOSTNAME np=x gpus=y properties です。

  • HOSTNAME=マシンのホストネーム
  • np=プロセッサの数
  • gpus=gpu の数
  • properties=コメント

ホストネームだけが必須で、後のフィールドは任意です。

例:

mars np=4
phobos np=2
deimos np=2
ノート:
  • 同じマシンでサーバーとクライアントの両方を動作させることもできます。
  • pbs_server -t create を再実行することで nodes ファイルを削除することができます。

サーバーを再起動して新しいオプションを読み込ませてください。

クライアント (計算ノード) の設定

クラスタ内の全ての計算ノードで以下の手順に従ってください。

ノート: 同一マシンでサーバーとクライアントの両方を動作させる場合、クラスタ内の純粋なクライアントだけでなくサーバーマシンでも以下の設定を行なってください。

/var/spool/torque/mom_priv/config を編集してサーバーに関する基本的な情報を記述:

$pbsserver      mars          # note: this is the hostname of the headnode
$logevent       255           # bitmap of which events to log

サーバーの再起動

サーバーを再起動すると設定が適用されます:

# killall -s 9 pbs_server
# pbs_server

クライアントの起動

クライアントマシンで以下を実行することでクライアントが起動します:

# pbs_mom

クラスタの状態を確認

クラスタの状態を確認したいときは、以下を実行:

$ pbsnodes -a

statefree となっていればノードはジョブを受け取る準備が出来ています。ノードが落ちている場合、state は down となります。

出力例:

     mars
     state = free
     np = 4
     ntype = cluster
     status = rectime=1308479899,varattr=,jobs=0.localhost.localdomain,state=free,netload=1638547057,
gres=,loadave=2.69,ncpus=4,physmem=8195892kb,availmem=7172508kb,totmem=8195892kb,
idletime=24772,nusers=1,nsessions=5,sessions=1333 1349 1353 1388 9095,
uname=Linux mars 2.6.39-ck #1 SMP PREEMPT Sat Jun 18 14:19:01 EDT 2011 x86_64,opsys=linux
     mom_service_port = 15002
     mom_manager_port = 15003
     gpus = 2

phobos
     state = free
     np = 2
     ntype = cluster
     status = rectime=1308479933,varattr=,jobs=,state=free,netload=1085755815,
gres=,loadave=2.84,ncpus=2,physmem=4019704kb,availmem=5753552kb,totmem=6116852kb,
idletime=7324,nusers=2,nsessions=6,sessions=1565 1562 1691 1716 1737 1851,
uname=Linux phobos 2.6.37-ck #1 SMP PREEMPT Sun Apr 3 17:16:35 EDT 2011 x86_64,opsys=linux
     mom_service_port = 15002
     mom_manager_port = 15003
     gpus = 1

deimos
     state = free
     np = 2
     ntype = cluster
     status = rectime=1308479890,varattr=,jobs=2.localhost.localdomain,state=free,netload=527239670,
gres=,loadave=0.52,ncpus=2,physmem=4057808kb,availmem=3955624kb,totmem=4057808kb,
idletime=644,nusers=1,nsessions=1,sessions=865,
uname=Linux deimos 2.6.39-ck #1 SMP PREEMPT Sat Jun 11 12:36:21 EDT 2011 x86_64,opsys=linux
     mom_service_port = 15002
     mom_manager_port = 15003
     gpus = 1

ジョブをキューに追加

クラスタのキューにジョブを登録するには qsub コマンドを使います。

sleep を実行するだけの簡単なテスト:

$ echo "sleep 30" | qsub

キューの状態は下に書かれているように qstat コマンドで確認できます。待機中のジョブの状態は "Q" になります。ジョブを開始するには、スケジューラを実行:

# pbs_sched

torque-serversystemd デーモンを修正することで起動時に pbs_sched を有効にすることができます。

また、qsub にはジョブに名前をつけてスクリプトをキューに入れるという使い方もあります:

$ qsub -N x264 /home/facade/bin/x264_HQ.sh
ノート: キューに入れられたジョブの STDOUT と STDERR は、デフォルトで、それぞれの出力 pid.o および pid.e に対応する形式のテキストファイルに記録され、qsub コマンドが発行されたパスに書き込まれます

別の例では、ラッパースクリプトを使用して、作業を まとめて 自動的に作成してキューに入れることができます。

ジョブの状態の確認

作業状況を確認するには qstat を使います:

$ qstat
Job id                    Name             User            Time Use S Queue
------------------------- ---------------- --------------- -------- - -----
13.localhost               generic-i686.pbs facade         00:05:06 R batch          
14.localhost               atom-i686.pbs    facade         00:03:09 R batch          
15.localhost               core2-i686.pbs   facade         00:01:02 R batch          
16.localhost               k7-i686.pbs      facade                0 Q batch          
17.localhost               k8-i686.pbs      facade                0 Q batch          
18.localhost               k10-i686.pbs     facade                0 Q batch          
19.localhost               p4-i686.pbs      facade                0 Q batch          
20.localhost               pentm-i686.pbs   facade                0 Q batch          
21.localhost               ...ic-x86_64.pbs facade                0 Q batch          
22.localhost               atom-x86_64.pbs  facade                0 Q batch          
23.localhost               core2-x86_64.pbs facade                0 Q batch          
24.localhost               k8-x86_64.pbs    facade                0 Q batch          
25.localhost               k10-x86_64.pbs   facade                0 Q batch          

-n スイッチを追加することでどのノードがどのジョブを実行しているのか確認できます:

$ qstat -n
localhost.localdomain:
405.localhost.lo     facade  batch    i686-generic       3035     1   0    --  01:00 C 00:12
   mars/3+mars/2+mars/1+mars/0
406.localhost.lo     facade  batch    i686-atom          5768     1   0    --  01:00 C 00:46
   phobos/1+phobos/0
407.localhost.lo     facade  batch    i686-core2        22941     1   0    --  01:00 C 00:12
   mars/3+mars/2+mars/1+mars/0
408.localhost.lo     facade  batch    i686-k7           10152     1   0    --  01:00 C 00:12
   mars/3+mars/2+mars/1+mars/0
409.localhost.lo     facade  batch    i686-k8           29657     1   0    --  01:00 C 00:12
   mars/3+mars/2+mars/1+mars/0
410.localhost.lo     facade  batch    i686-k10          16838     1   0    --  01:00 C 00:12
   mars/3+mars/2+mars/1+mars/0
411.localhost.lo     facade  batch    i686-p4           25340     1   0    --  01:00 C 00:46
   deimos/1+deimos/0
412.localhost.lo     facade  batch    i686-pentm        12544     1   0    --  01:00 R 00:20
   phobos/1+phobos/0
413.localhost.lo     facade  batch    x86_64-generic     4024     1   0    --  01:00 C 00:13
   mars/3+mars/2+mars/1+mars/0
414.localhost.lo     facade  batch    x86_64-atom       19330     1   0    --  01:00 C 00:13
   mars/3+mars/2+mars/1+mars/0
415.localhost.lo     facade  batch    x86_64-core2       2146     1   0    --  01:00 C 00:13
   mars/3+mars/2+mars/1+mars/0
416.localhost.lo     facade  batch    x86_64-k8         17234     1   0    --  01:00 R 00:11
   mars/3+mars/2+mars/1+mars/0
417.localhost.lo     facade  batch    x86_64-k10          --      1   0    --  01:00 Q   -- 
    -- 

参照