Twitterに投稿 はてなブックマークに追加 Yahoo!ブックマークに追加 Google Bookmarksに追加

目次 >> TORQUE

TORQUEのインストールと設定

TORQUE Resource Managerは計算機クラスターのジョブを管理するジョブスケジューラである。
現在は開発が停止したOpenPBSの後継ソフトであり、アップデートも頻繁に行われている。
開発元の詳細なマニュアルはここにある。
ここではUbuntu 12.04への導入方法を示す。
構成は、ジョブを管理するヘッドノード、および実際の計算を行う計算ノードから構成される。
今回は、node001がヘッドノードとなる。node001は計算ノードも兼用しており、計算ノードは001から005まである。
インストールは、apt-getで行える。
まず、ヘッドノードに、TORQUEサーバをインストールする。

$ sudo apt-get install torque-server
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  libtorque2 torque-common torque-scheduler
Suggested packages:
  torque-mom torque-client
The following NEW packages will be installed:
  libtorque2 torque-common torque-scheduler torque-server
0 upgraded, 4 newly installed, 0 to remove and 6 not upgraded.
Need to get 433 kB of archives.
After this operation, 1241 kB of additional disk space will be used.
Do you want to continue [Y/n]? y
Get:1 http://us.archive.ubuntu.com/ubuntu/ natty/universe libtorque2 amd64 2.4.8+dfsg-7 [115 kB]
Get:2 http://us.archive.ubuntu.com/ubuntu/ natty/universe torque-common amd64 2.4.8+dfsg-7 [36.8 kB]
Get:3 http://us.archive.ubuntu.com/ubuntu/ natty/universe torque-scheduler amd64 2.4.8+dfsg-7 [92.4 kB]
Get:4 http://us.archive.ubuntu.com/ubuntu/ natty/universe torque-server amd64 2.4.8+dfsg-7 [189 kB]
Fetched 433 kB in 25s (16.7 kB/s)                                              
Selecting previously deselected package libtorque2.
(Reading database ... 135735 files and directories currently installed.)
Unpacking libtorque2 (from .../libtorque2_2.4.8+dfsg-7_amd64.deb) ...
Selecting previously deselected package torque-common.
Unpacking torque-common (from .../torque-common_2.4.8+dfsg-7_amd64.deb) ...
Selecting previously deselected package torque-scheduler.
Unpacking torque-scheduler (from .../torque-scheduler_2.4.8+dfsg-7_amd64.deb) ...
Selecting previously deselected package torque-server.
Unpacking torque-server (from .../torque-server_2.4.8+dfsg-7_amd64.deb) ...
Processing triggers for man-db ...
Processing triggers for ureadahead ...
ureadahead will be reprofiled on next reboot
Setting up libtorque2 (2.4.8+dfsg-7) ...
Setting up torque-common (2.4.8+dfsg-7) ...
Setting up torque-scheduler (2.4.8+dfsg-7) ...
 * Starting Torque scheduler: 
   ...done.
Setting up torque-server (2.4.8+dfsg-7) ...
 * Starting Torque batch queue server
   ...done.
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place

そして計算を実際に行う各ノードにはtorque-momおよびtorque-clientをインストールする。

$ sudo apt-get install torque-mom
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  libtorque2 torque-common
The following NEW packages will be installed:
  libtorque2 torque-common torque-mom
0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
Need to get 277 kB of archives.
After this operation, 877 kB of additional disk space will be used.
Do you want to continue [Y/n]? y
Get:1 http://us.archive.ubuntu.com/ubuntu/ precise/universe libtorque2 amd64 2.4.16+dfsg-1build1 [91.6 kB]
Get:2 http://us.archive.ubuntu.com/ubuntu/ precise/universe torque-common amd64 2.4.16+dfsg-1build1 [12.7 kB]
Get:3 http://us.archive.ubuntu.com/ubuntu/ precise/universe torque-mom amd64 2.4.16+dfsg-1build1 [173 kB]
Fetched 277 kB in 1s (192 kB/s)          
Selecting previously unselected package libtorque2.
(Reading database ... 167727 files and directories currently installed.)
Unpacking libtorque2 (from .../libtorque2_2.4.16+dfsg-1build1_amd64.deb) ...
Selecting previously unselected package torque-common.
Unpacking torque-common (from .../torque-common_2.4.16+dfsg-1build1_amd64.deb) ...
Selecting previously unselected package torque-mom.
Unpacking torque-mom (from .../torque-mom_2.4.16+dfsg-1build1_amd64.deb) ...
Processing triggers for ureadahead ...
ureadahead will be reprofiled on next reboot
Processing triggers for man-db ...
Setting up libtorque2 (2.4.16+dfsg-1build1) ...
Setting up torque-common (2.4.16+dfsg-1build1) ...
Setting up torque-mom (2.4.16+dfsg-1build1) ...
 * Starting Torque Mom torque-mom
   ...done.
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place
$ sudo apt-get install torque-client
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  gawk libcurses-perl libsigsegv2
The following NEW packages will be installed:
  gawk libcurses-perl libsigsegv2 torque-client
0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
Need to get 953 kB of archives.
After this operation, 2,693 kB of additional disk space will be used.
Do you want to continue [Y/n]? y
Get:1 http://us.archive.ubuntu.com/ubuntu/ precise/main libsigsegv2 amd64 2.9-4ubuntu2 [14.6 kB]
Get:2 http://us.archive.ubuntu.com/ubuntu/ precise/main gawk amd64 1:3.1.8+dfsg-0.1ubuntu1 [465 kB]
Get:3 http://us.archive.ubuntu.com/ubuntu/ precise/universe libcurses-perl amd64 1.28-1build2 [107 kB]
Get:4 http://us.archive.ubuntu.com/ubuntu/ precise/universe torque-client amd64 2.4.16+dfsg-1build1 [366 kB]
Fetched 953 kB in 6s (156 kB/s)                                              
Selecting previously unselected package libsigsegv2.
(Reading database ... 167764 files and directories currently installed.)
Unpacking libsigsegv2 (from .../libsigsegv2_2.9-4ubuntu2_amd64.deb) ...
Setting up libsigsegv2 (2.9-4ubuntu2) ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place
Selecting previously unselected package gawk.
(Reading database ... 167772 files and directories currently installed.)
Unpacking gawk (from .../gawk_1%3a3.1.8+dfsg-0.1ubuntu1_amd64.deb) ...
Selecting previously unselected package libcurses-perl.
Unpacking libcurses-perl (from .../libcurses-perl_1.28-1build2_amd64.deb) ...
Selecting previously unselected package torque-client.
Unpacking torque-client (from .../torque-client_2.4.16+dfsg-1build1_amd64.deb) ...
Processing triggers for man-db ...
Setting up gawk (1:3.1.8+dfsg-0.1ubuntu1) ...
Setting up libcurses-perl (1.28-1build2) ...
Setting up torque-client (2.4.16+dfsg-1build1) ...

設定はヘッドノード、計算ノードとも/var/spool/torque/以下のディレクトリおよび、/etc/torqueディレクトリで行う。

まず、ヘッドノードおよび計算ノードにヘッドノードの名前を設定する。ファイルは、

/etc/torque/server_name

で、このファイル内に、ヘッドノードの名前を書く。今回の場合は

node001

のようになる。計算ノード側の設定はこれで終わりである。

ヘッドノードの設定は、まず、/var/spool/torque/server_privディレクトリ内に、nodesというファイルを作り

$ sudo vi nodes

下記のような内容を書き込む。

node001 np=8
node002 np=8
node003 np=8
node004 np=8
node005 np=8

最初がホスト名で(IPアドレスで書くとエラーになる)、np=のあとには最大ジョブ数を書く。具体的には、デュアルコアであれば2、クワッドコアであれば4、クワッドコアでHT対応なら8のように決めると良い。(GPUの個数を設定するgpusというパラメータもあるが、今回はこれを指定するとなぜかエラーが出てうまくいかなかった。)

もし/var/spool/torque/server_priv/arraysというディレクトリが作成されていなければ、作成する。Ubuntu 11.04ではすでに用意されていた。

$ sudo mkdir /var/spool/torque/server_priv/arrays

つぎに、/var/spool/torque/spoolおよび/var/spool/torque/undeliveredディレクトリのパーミッションを設定する。
(もしインストールした状態ですでに設定されていればやらなくてよい。Ubuntu 11.04では初期状態でこの状態になっており、設定の必要はなかった。)

chmod 777 /var/spool/torque/spool /var/spool/torque/undelivered
chmod o+t /var/spool/torque/spool /var/spool/torque/undelivered
chmod 777 /var/spool/torque/spool
chmod o+t /var/spool/torque/spool

特に、2つ目のスティッキービットの設定はあまりやらない操作なので忘れないように。

そしてtorqueサーバの設定を行う。

$ sudo pbs_server -t create
PBS_Server foo6134: Create mode and server database exists,
do you wish to continue y/(n)?y

$ sudo qmgr -c "set server scheduling=true"
$ sudo qmgr -c "create queue batch queue_type=execution"
$ sudo qmgr -c "set queue batch started=true"
$ sudo qmgr -c "set queue batch enabled=true"
$ sudo qmgr -c "set queue batch resources_default.nodes=1"
$ sudo qmgr -c "set queue batch resources_default.walltime=3600"
$ sudo qmgr -c "set server default_queue=batch"
$ qmgr -c 'set server allow_node_submit = True'

もしこのときに、

$ sudo pbs_server -t create
PBS_Server: LOG_ERROR::process_host_name_part, no valid IP addresses found for 'hoge' - check name service
PBS_Server: LOG_ERROR::pbsd_init(setup_nodes), could not create node "hoge", error = 15010
PBS_Server: LOG_ERROR::PBS_Server, pbsd_init failed

の様なエラーが出た場合、/etc/hostsの設定に問題がある可能性がある。
たとえば、/etc/hostsに

127.0.0.1        hoge
XXX.XXX.XXX.XXX  hoge

と書いた場合、最初の奉仕か有効にならないので注意。すなわち、hogeで問い合わせると、127.0.0.1が帰ってくる。

もし、

$ sudo pbs_server -t create
pbs_server: network: Address already in use
PBS_Server: LOG_ERROR::PBS_Server, init_network failed dis

の様なエラーが出た場合は、

$ ps -e |grep pbs
16440 ?        00:00:00 pbs_sched
16464 ?        00:00:00 pbs_server

と、動いているTORQUEサーバを探し、

$ sudo kill 16440
$ sudo kill 16464

と消せばよい。

もし、

$ sudo qmgr -c "set server scheduling=true"
Cannot resolve default server host 'torqueserver' - check server_name file.
qmgr: cannot connect to server  (errno=15008) Access from host not allowed, or unknown host

というエラーが出た場合、

/etc/torque/server_name

に正しいホスト名が書いてあるか確認する。

そして、

$ qstat -q

server: CID6134

Queue            Memory CPU Time Walltime Node  Run Que Lm  State
---------------- ------ -------- -------- ----  --- --- --  -----
batch              --      --       --      --    0   0 --   E R
                                               ----- -----
                                                   0     0

でキューが正常に設定されているか確かめる

$ qmgr -c 'p s'
#
# Create queues and set their attributes.
#
#
# Create and define queue batch
#
create queue batch
set queue batch queue_type = Execution
set queue batch resources_default.nodes = 1
set queue batch resources_default.walltime = 01:00:00
set queue batch enabled = True
set queue batch started = True
#
# Set server attributes.
#
set server scheduling = True
set server acl_hosts = torqueserver
set server acl_hosts += CID6134
set server default_queue = batch
set server log_events = 511
set server mail_from = adm
set server scheduler_iteration = 600
set server node_check_rate = 150
set server tcp_timeout = 6
set server allow_node_submit = True
set server next_job_number = 6

と打つと、サーバの設定状況が確認できる。
また、

$ pbsnodes -a
node001
     state = free
     np = 8
     ntype = cluster
     status = opsys=linux,uname=Linux node001 2.6.38-8-generic #42-Ubuntu SMP Mon Apr 11 03:31:24 UTC 2011 x86_64,sessions=1173 1202 1286 1297 1346 1537 3591 6159 6312 14470 27580 27581,nsessions=12,nusers=4,idletime=86758,totmem=13989328kb,availmem=13485132kb,physmem=4052436kb,ncpus=8,loadave=0.03,netload=11622678445,state=free,jobs=,varattr=,rectime=1306561304

node002
     state = free
     np = 8
     ntype = cluster
     status = opsys=linux,uname=Linux node002 2.6.38-8-generic #42-Ubuntu SMP Mon Apr 11 03:31:24 UTC 2011 x86_64,sessions=919 928,nsessions=2,nusers=1,idletime=83171,totmem=13989328kb,availmem=13708492kb,physmem=4052436kb,ncpus=8,loadave=0.00,netload=1100412080,state=free,jobs=,varattr=,rectime=1306561295

node003
     state = free
     np = 8
     ntype = cluster
     status = opsys=linux,uname=Linux node003 2.6.38-8-generic #42-Ubuntu SMP Mon Apr 11 03:31:24 UTC 2011 x86_64,sessions=1997 2101,nsessions=2,nusers=1,idletime=86316,totmem=13989328kb,availmem=13750820kb,physmem=4052436kb,ncpus=8,loadave=0.00,netload=306297791,state=free,jobs=,varattr=,rectime=1306561310

node004
     state = free
     np = 8
     ntype = cluster
     status = opsys=linux,uname=Linux node004 2.6.38-8-generic #42-Ubuntu SMP Mon Apr 11 03:31:24 UTC 2011 x86_64,sessions=1339 1340 1348 1369,nsessions=4,nusers=1,idletime=89916,totmem=13989328kb,availmem=13703432kb,physmem=4052436kb,ncpus=8,loadave=0.00,netload=409421784,state=free,jobs=,varattr=,rectime=1306561296

node005
     state = free
     np = 8
     ntype = cluster
     status = opsys=linux,uname=Linux node005 2.6.38-8-generic #42-Ubuntu SMP Mon Apr 11 03:31:24 UTC 2011 x86_64,sessions=1153 1593 1604 1629 1766 1775,nsessions=6,nusers=1,idletime=28600,totmem=13989328kb,availmem=13573900kb,physmem=4052436kb,ncpus=8,loadave=0.00,netload=422294921,state=free,jobs=,varattr=,rectime=1306561272

このとき、

$ pbsnodes -a
pbsnodes: Server has no node list MSG=node list is empty - check 'server_priv/nodes' file

と出た場合は再起動してみるとよい。

と打つと、全ノードの状況を知ることができる。

$ echo "sleep 30" | qsub
1.node001

と打ち、正常のジョブが投入し、

$ qstat
Job id                    Name             User            Time Use S Queue
------------------------- ---------------- --------------- -------- - -----
1.node001                STDIN            satod                  0 R batch    

正常に実行されているか確認する。

サンプルスクリプト

より詳細な設定を行ったジョブを投入するには、スクリプトを書いて

$ qsub scriptname

の様な形でジョブを投入する。下記が
サンプルスクリプトである。

#!/bin/sh
#PBS -V
#PBS -l nodes=1:ppn=8
#PBS -l walltime=720:00:00
#PBS -l nice=19
cd $PBS_O_WORKDIR
$PBS_O_WORKDIR/a.out

#PBS -V
は環境変数を現在の実行環境と同じものを引き継ぐよう、指定している。
#PBS -l nodes=1:ppn=8
は要求するCPUリソースである。この場合1つのノードと8つのプロセッサを要求している。
#PBS -l walltime=720:00:00
はジョブの有効期限である。
#PBS -l nice=19
はジョブのnice値である。
$PBS_O_WORKDIRは現在の作業ディレクトリ(カレントディレクトリ)を指す。最後の2つの行
cd $PBS_O_WORKDIR
$PBS_O_WORKDIR/a.out
で現在の作業ディレクトリに移動し、プログラムを実行することを指定している。

このようなスクリプトを書くこと自体をシェルスクリプトにより生成するとより簡単である。下記はそのサンプルである。

#!/bin/sh
FILENAME="$1.sh"
echo ${FILENAME}
printf "#!/bin/sh\n">${FILENAME}
printf "#PBS -V\n">>${FILENAME}
printf "#PBS -l nodes=1:ppn=8\n">>${FILENAME}
printf "#PBS -l walltime=720:00:00\n">>${FILENAME}
printf "#PBS -l nice=19\n">>${FILENAME}
printf 'cd $PBS_O_WORKDIR\n'>>${FILENAME}
printf '$PBS_O_WORKDIR'>>${FILENAME}
printf "/$1\n">>${FILENAME}
qsub ${FILENAME}

他のユーザーのジョブも見られるようにするには?

計算機クラスタの運用において、他のユーザーのジョブの状況を見られないのは不便である。
下記のコマンドを実行することによって、他のユーザーの状況も表示できるようになる。

sudo qmgr -c "set server query_other_jobs = True"

ジョブの割り当て方法を変更するには?

node_packを変更することによって、ジョブをどのノードに割り当てるかの挙動を変えることができる。

sudo qmgr -c 'set server node_pack=true'

上記のようにnode_packをtrueにするとジョブをできるだけ詰めて割り当てようとする。
例えば、1スレッドのジョブが2つあり、各ノードが2つコアを持っている場合、特定のノードに2つのジョブが割り当てられる。
この場合、完全に空きのノードを増やすことができる。

node_packをfalseにすると、スレッド数にかかわらず、ジョブが全く走っていないノードに優先的に割り当てようとする。
上記の条件の場合、2つのノードにひとつひとつのジョブが割り当てられる。
この場合、各ジョブはより多くのメモリが使え、またハイパースレッディングなどによる速度の低下も極力控えられる。

初期状態はunsetでこの場合、nodesファイルに記載された順番に割り当てられていく。



最終更新日


本文中のFC4はFedora ProjectのFedora Core 4を、FC5はFedora Core 5を、FC6はFedora Core 6をopenSUSEはNovellのSUSE Linux OSSを表します。Fedora7以降は、単にFedora7、Fedora8、Fedora9、Fedora10、Fedora11、Fedora12、Fedora13、Fedora14、Fedora15と表示しています。Ubuntuは、必要に応じて17.04、18.04のようにバージョン番号をつけて区別しています。

ここに登場するドメイン名やIPアドレスなどはフィクションです。実在の人物・団体等とは一切関係がありません。
実際に使用する際は、各自の環境に合わせて書き換えてください。
もし何か間違いなどありましたらこちらからご連絡ください
リンクに許可は不要です。
Copyright (C) 2014 Chikuma Engineering Co., Ltd. All Rights Reserved.