[[TORQUE]]のキューを作成します。
一般的なqueueの作成において、クラスターのリソース全体に対して、「全部のリソースを使うけど、利用可能な計算時間は少なめ」、
「リソースは少なめだけど、長時間計算が可能」とかでqueueが用意される場合が多い。
&size(10){Toqeueの「torque-scheduler」はこのタイプ};
&ref(2017y09m06d_015304513.png,nolink,noborder);
上の図では、queue[quick]が前者、[long]が後者に該当する。
だが、例えばgpuノードを追加した場合、別のサブクラスターとして用意され、しかも別のqueue名で実行したい。
あるいは、年度を跨いで新規に購入したより高性能なクラスターも別なqueue名で定義したいとなった場合、queue名で
マシンが限定されるのが望ましい。
&size(10){ここでは一つの管理ノードで管理する場合を述べてます。各サブクラスター毎に管理ノードを作るのもいいですが、面倒かなと思う};
&ref(2017y09m06d_022604921.png,nolink,noborder);
&size(10){Toqeueの「torque-scheduler」ではqueue名でマシンを指定できない。mauiは可能。};
&color(red){*};&size(10){「torque-scheduler」を使ってもqsub側で「property」を駆使すれば個別ノードで計算可能です};
ここではmauiスケジューラの下で単純なキューを作成してみます。
3台の計算ノード全部を使うキュー「batch」と3台の内、n1のみの「bio」とn2とn3から成る「chem」を作成する。
&color(orangered){nodes};ファイルは下記のように変更します。
#code(nonumber){{
[root@pbs ~]# vi /var/lib/torque/server_priv/nodes
n1.sybyl.local np=1 bio
n2.sybyl.local np=2 chem
n3.sybyl.local np=3 chem
[root@pbs ~]#
}}
この変更を反映させるために、管理ノードのpbs_serverサービスを再起動します。
#code(nonumber){{
[root@pbs ~]# systemctl restart pbs_server
[root@pbs ~]# pbsnodes
n1.sybyl.local
state = free
np = 1
properties = bio
ntype = cluster
status = rectime=1458433722,varattr=,jobs=,state=free,netload=2088432,gres=,loadave=0.00,ncpus=1,(略
mom_service_port = 15002
mom_manager_port = 15003
n2.sybyl.local
state = free
np = 2
properties = chem
ntype = cluster
status = rectime=1458433741,varattr=,jobs=,state=free,netload=3205,gres=,loadave=0.29,ncpus=2,(略
mom_service_port = 15002
mom_manager_port = 15003
n3.sybyl.local
state = free
np = 3
properties = chem
ntype = cluster
status = rectime=1458433736,varattr=,jobs=,state=free,netload=3455,gres=,loadave=0.15,ncpus=3,(略
mom_service_port = 15002
mom_manager_port = 15003
[root@pbs ~]#
}}
すると「&color(magenta){properties};」欄が追加される。
次に、キューを作成する。はじめにキー「batch」を作ります。全ノードを使用するキューです。
#code(nonumber){{
[root@pbs ~]# qmgr -c "create queue batch queue_type=execution"
}}
すると、&color(blueviolet){/var/lib/torque/server_priv/queues/};に「batch」ファイルが作成されます。
このままではキー「batch」は使用できず、設定をさらに加えます。
#code(nonumber){{
[root@pbs ~]# qmgr -c "set queue batch started=true" この[batch]は、スケジューラに投ずるか
[root@pbs ~]# qmgr -c "set queue batch enabled=true" この[batch]は、queueを受け付けるか
[root@pbs ~]# qmgr -c "set queue batch resources_default.nodes=1" この[batch]は、標準1計算ノード使います
[root@pbs ~]# qmgr -c "set queue batch resources_default.walltime = 240:00:00" 投下[batch]は10日間有効
[root@pbs ~]# qmgr -c "set queue batch resources_default.pcput = 480:00:01" 計算中[batch]は20日間実行可能
[root@pbs ~]# qmgr -c "set server default_queue = batch" この[batch]を既定のキューとする
}}
&color(red){*};「resources_default.&color(crimson){cput};」は計算に使用されるcpuらの合計時間を定義する。仮に 10:00:00(10時間) と定義され、10cpuを使って計算したら 1 時間で終了となる。代わりに「resources_default.&color(deeppink){pcput};」は計算に使用されるcpuらの中の計算時間を定義する。仮に 10:00:00(10時間) と定義され、10cpuを使って計算したら 10 時間で終了となる。
&color(red){*};「resources_default.&color(crimson){cput};」は計算に使用されるcpuらの合計時間を定義する。仮に 10:00:00(10時間) と定義され、10cpuを使って計算したら 1 時間で終了となる。代わりに「resources_default.&color(deeppink){pcput};」は計算に使用されるcpuらの中の計算時間を定義する。仮に 10:00:00(10時間) と定義され、10cpuを使って計算しても 10 時間後まで計算する。
キー「bio」「chem」は下記の様に作成します。
#code(nonumber){{
[root@pbs ~]# qmgr -c "create queue bio queue_type=execution"
[root@pbs ~]# qmgr -c "set queue bio resources_default.neednodes=bio"
[root@pbs ~]# qmgr -c "set queue bio started=true"
[root@pbs ~]# qmgr -c "set queue bio enabled=true"
[root@pbs ~]# qmgr -c "set queue bio resources_default.nodes=1"
[root@pbs ~]# qmgr -c "create queue chem queue_type=execution"
[root@pbs ~]# qmgr -c "set queue chem resources_default.neednodes=chem"
[root@pbs ~]# qmgr -c "set queue chem started=true"
[root@pbs ~]# qmgr -c "set queue chem enabled=true"
[root@pbs ~]# qmgr -c "set queue chem resources_default.nodes=1"
}}
この段階で&color(blueviolet){/var/lib/torque/server_priv/queues/};には3種のファイルが作成されます。
#code(nonumber){{
[root@pbs ~]# ls -l /var/lib/torque/server_priv/queues/
合計 12
-rw------- 1 root root 495 3月 20 09:38 batch
-rw------- 1 root root 469 3月 20 09:40 bio
-rw------- 1 root root 471 3月 20 09:40 chem
[root@pbs ~]#
}}
もしキー「batch」を削除したければ、コマンドラインから
#code(nonumber){{
[root@pbs ~]# qmgr -c "delete queue batch"
}}
とすれば削除されます。
***ジョブ発行ノードの登録 [#i47e4fde]
ジョブ発行ノード client からジョブを発行するので、そのホストを登録します。
管理ノードは既定でジョブの発行ができます。
#code(nonumber){{
[root@pbs ~]# qmgr -c 'set server submit_hosts = client'
}}
もし複数登録するなら
#code(nonumber){{
[root@pbs ~]# qmgr -c 'set server submit_hosts += n1'
[root@pbs ~]# qmgr -c 'set server submit_hosts += n2'
}}
とします。
削除は
#code(nonumber){{
[root@pbs ~]# qmgr -c 'set server submit_hosts -= n1'
[root@pbs ~]# qmgr -c 'set server submit_hosts -= n2'
}}
にて行います。確認は &color(orangered){qmgr -c 'p s'}; にて行います。
***ユーザ登録 [#a92b7130]
キューの作成は完了したが、このままでは誰もジョブを投入できない。
投入できるユーザを登録します。
#code(nonumber){{
[root@pbs ~]# qmgr -c "set server authorized_users = illya@*"
[root@pbs ~]# qmgr -c "set server authorized_users += saber@*"
}}
特定のキューに利用制限を課すなら
#code(nonumber){{
[root@pbs ~]# qmgr -c "set queue bio acl_user_enable=true"
[root@pbs ~]# qmgr -c "set queue bio acl_users=saber@*"
}}
とする。指定ユーザ以外がそのキューに投げようとすると、
#code(nonumber){{
[illya@client ~]$ echo "sleep 30" | qsub -q bio
qsub: submit error (Unauthorized Request MSG=user ACL rejected the submitting user: user illya@client.sybyl.local, queue bio)
[illya@client ~]$
}}
拒否される。
だれでもジョブ実行を許すのなら
#code(nonumber){{
[root@pbs ~]# qmgr -c "set server authorized_users = *@client.sybyl.local"
}}
とする
&color(red){*};&size(10){「set server authorized_users = *@*」で行けるかも知れないが、試していない};