目次 >> 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ファイルに記載された順番に割り当てられていく。
最終更新日