TORQUE のセットアップ

2018年10月10日

はじめに

TORQUE のセットアップをする。

環境

  • Ubuntu 16.04 LTS/TORQUE 2.4.16
  • Red Hat Enterprise Linux Server 7.3/TORQUE 4.2.10

TORQUE のセットアップ (Ubuntu)

ここでは、サーバーとクライアントを同一マシン (host01) とする。

パッケージのインストール。

$ sudo apt-get install torque-server torque-mom

サーバーを止める。

$ sudo service torque-server stop
$ sudo service torque-scheduler stop
$ sudo service torque-mom stop

/etc/torque/server_name にサーバーの名前を設定する。

/etc/torque/server_name

host01

/var/spool/torque/server_priv/nodes を作成し、ノードの設定をする。

/var/spool/torque/server_priv/nodes

host01 np=6

サーバーの設定。

/var/spool/torque/mom_priv/config

$pbsserver host01

サーバーを起動。

$ sudo service torque-server start
$ sudo service torque-scheduler start
$ sudo service torque-mom start

それぞれ status でログを確認してみて、失敗していたら、それぞれに対応する pbs デーモンを止めてやりなおす。

ノードの確認。

$ pbsnodes

"state = free" と出ればよい。

キューの作成。

$ sudo qmgr
Qmgr: create queue q1
Qmgr: set queue q1 queue_type = Execution
Qmgr: set queue q1 enabled = True
Qmtr: set queue q1 started = True

ここで、"Unauthorized Request" というエラーが出た。

/etc/hosts で host01 の IP アドレスを設定。

127.0.0.1       localhost
#127.0.1.1      host01
192.168.1.1     host01

DHCP でアドレスを取得している場合は、次のようにする。

#127.0.0.1       localhost
#127.0.1.1      host01
127.0.0.1       host01  localhost

これでキューを作成できるはず。

実行スクリプトを作成。

run

#!/bin/sh
cd $PBS_O_WORKDIR
sleep 10

投入。

$ qsub -q q1 run

次のようなエラーが出るかもしれない。

qsub: Bad UID for job execution MSG=ruserok failed validating xxxx/xxxx from host01

この場合は、次のように設定を追加。

$ sudo qmgr
Qmgr: set server submit_hosts = host01

ジョブ投入。

$ qsub -q q1 run
$ qstat
Job id                    Name             User            Time Use S Queue
------------------------- ---------------- --------------- -------- - -----
1.host01                  run              xxxx                   0 Q q1

ステータスが "Q" のまま実行されない。

設定追加。

$ sudo qmgr
Qmgr: set server scheduling = True

ジョブ投入。

$ qsub -q q1 run
$ qstat
Job id                    Name             User            Time Use S Queue
------------------------- ---------------- --------------- -------- - -----
2.host01                  run              xxxx                   0 R q1

OK。

参考

TORQUE のセットアップ (RHEL)

ここでは、サーバーとクライアントを同一マシン (host01) とする。

EPEL は導入済み。パッケージのインストール。

# yum install torque-server torque-scheduler torque-mom torque-client

/etc/hosts に host01 の IP アドレスを設定しておく。

pbs_server を実行。

# pbs_server -t create
# killall pbs_server

/etc/torque/server_name にサーバーの名前を設定する。

/etc/torque/server_name

host01

/var/lib/torque/server_priv/nodes を作成し、ノードの設定をする。

/var/lib/torque/server_priv/nodes

host01 np=40 num_node_boards=1 numa_board_str=40

サーバーの設定。

/var/spool/torque/mom_priv/config

$pbsserver host01

サーバーを起動。

# systemctl start pbs_server
# systemctl start pbs_sched
# systemctl start pbs_mom
# systemctl start trqauthd
# create-munge-key
# systemctl start munge

ノードの確認。

$ pbsnodes

"state = free" と出ればよい。

スケジューリングの有効化。

$ sudo qmgr
Qmgr: set server scheduling = True

キューの作成。

$ sudo qmgr
Qmgr: create queue q1
Qmgr: set queue q1 queue_type = Execution
Qmgr: set queue q1 enabled = True
Qmgr: set queue q1 started = True

実行スクリプトを作成。

run

#!/bin/sh
cd $PBS_O_WORKDIR
sleep 10

投入。

$ qsub -q q1 run

実行されれば OK。

サーバーの自動起動の設定。

# systemctl enable pbs_server pbs_sched pbs_mom trqauthd munge

確認。

# systemctl list-unit-files -t service

参考

運用例

ここでは管理サーバーと計算ノードが同じ 1 台のマシンからなる運用を考える。

キューの設定

create queue q1
set queue q1 queue_type = Execution
set queue q1 enabled = True
set queue q1 started = True
set queue q1 resources_default.nodes=1:ppn=1
set server default_queue = q1

ジョブの投入は、次のようにする。

$ qsub -l nodes=1:ppn=4 run

リソースとしてノード 1 台、プロセス 4 つ (4 並列) を指定している。リソースの指定は、スクリプトに書くこともできる。

run

#!/bin/sh
#PBS -l nodes=1:ppn=4
...

その場合は、オプションなしで実行できる。

$ qsub run

スクリプトの中でコマンド実行時にプロセス数が必要になるが、環境変数 PBS_NODEFILE の示すファイルに必要な数のノード名が入っているので、この行数を数えればよい。たとえば、あるプログラム prog を MPI で実行する場合は、次のように書ける。

run

#!/bin/sh
cd $PBS_O_WORKDIR

NPROCS=`wc $PBS_NODEFILE | cut -d' ' -f2`

mpirun -np $NPROCS -hostfile $PBS_NODEFILE prog

空き状況の確認

pbsnodes で各ノードにおいてどんなジョブが流れているのかわかるので、これで計算機の空き状況を見ることができる。

たとえば、シェルスクリブトで次のようにすれば、使用中のコア数が得られる。

NODE=host01
USED=`pbsnodes $NODE | grep "jobs =" | awk -F',' '{print NF}'`

USED をノードのコア数 (np) から引けば、空き状況がわかる。np は次のようにすれば得られる。

NP=`pbsnodes $NODE | grep np | awk '{print $3}'`

メモ

ジョブの操作

ジョブの投入

$ qsub run

ジョブの状態

$ qstat

細かい情報

$ qstat -a

ジョブの情報

$ qstat -f <ID>

ジョブの削除

$ qdel <ID>

全部削除

$ qdel all

qmgr メモ

server の設定表示

print server

ノードの情報表示

print node host01

キューの表示

print queue @default

キューの作成

create queue q1

キューの削除

delete queue q1

最大 CPU 数

set queue q1 resources_max.ncpus = 1

最小 CPU 数

set queue q1 resources_min.ncpus = 1

実行可能ジョブ数

set queue q1 max_running = 1

1 ユーザーの実行可能ジョブ数

set queue q1 max_user_run = 1

デフォルトキューの設定

set server default_queue = q1

設定を解除する場合は unset を使う。

サーバーログ

  • /var/spool/torque/server_logs/
  • /var/spool/torque/sched_logs/
  • /var/spool/torque/mom_logs/