もやはOpenSourceではなくなったTORQUE.
でもCentOSとかで古いバージョンだけど yum で入手可能です.

ここではCentOS 7 で TORQUE を使ったジョブコントロールについて記す.

過去記事 torque-4.2.10. torque-2.5.xは、EOL(End of Life)/EOSL(End Of Service Life)の模様. manualページから
GPUs対応 TORQUE/GPUs

キュー作成TORQUE/queue
TORQUE/Preemption
TORQUE/BLCR
TORQUE/memo
TORQUE/job script
TORQUE/macOS TORQUE/windows10

全体像

同一のネットワーク上に管理ノード、計算ノード、ジョブ発行ノードらが存在する
アカウント管理とかユーザのホームディレクトリは各ノードと共有されているとする
計算ノードへのジョブ投入にはsshかrshのいずれかを選ぶ

  • ssh
    公開鍵を作成してそれを「~/.ssh/authorized_keys」に記載する
  • rsh
    rsh-serverパッケージをインストールして「/etc/hosts.equiv」に「+」のみ記載する。
    *セキュリティーに関わるので要注意箇所です。絶対に「+ +」と記載してはダメ

2020y12m13d_191022362.png

IPとか役目は下記参照

役目ホスト名IPアドレスcore数備考
管理ノードpbs192.168.0.571
計算ノードn1192.168.0.521pbs_momが稼働
実際の計算を行う
n2192.168.0.532
n3192.168.0.543
ジョブ発行ノードclient192.168.0.201qsub,qstat

管理ノード・計算ノードには下記のようにfirewallに穴をあけておきます

firewall-cmd --add-port=15001/tcp --permanent
firewall-cmd --add-port=15002/tcp --permanent
firewall-cmd --add-port=15003/tcp --permanent
firewall-cmd --reload
 
(場合によっては)
firewall-cmd --add-service=rsh --permanent

管理ノードの構築

toqrueパッケージは epel リポジトリで提供されているのでまずはepelリポジトリを登録します。
それから 管理ノードなので必要な「torque-server」「torque-scheduler」そして管理コマンドを含む「torque-client」をインストールします

[root@pbs ~]# yum install epel-release
 
[root@pbs ~]# yum install torque-server torque-scheduler torque-client
  (付随して hwloc-libs, munge, munge-libs, tcl, torque, torque-libs もインストールされる)

設定を施します。「/var/lib/torque/server_name」に管理ノードのホスト名を記載します

[root@pbs ~]# hostname > /var/lib/torque/server_name
[root@pbs ~]# cat /var/lib/torque/server_name
pbs
[root@pbs ~]#

次に、ジョブコントロール向けのデータベースを作ります。

[root@pbs ~]# pbs_server -d /var/lib/torque -t create -f -D
pbs_server is up (version - 4.2.10, port - 15001)

これでデータベースファイルは作成されますが、pbs_serverデーモンが稼動し続けています。
なのでここで Ctrl-C によりpbs_serverデーモンを強制停止させます。

そして各計算ノードの情報を「/var/lib/torque/server_priv/nodes」に記載します

[root@pbs ~]# vi /var/lib/torque/server_priv/nodes
n1 np=1 num_node_boards=1 numa_board_str=1
 
[root@pbs ~]#

*ここに記載されるホスト名は、計算ノードで「hostname」と実行したときの値であることが大事みたい

次に、qstat/qmgrコマンドの実行に必要な munge のキーファイルを作成します
*ジョブ発行ノードにここで作った munge.key が必要になります

[root@pbs ~]# create-munge-key
Generating a pseudo-random key using /dev/urandom completed.
 
[root@pbs ~]# ls -l /etc/munge/
total 4
-r--------. 1 munge munge 1024 Dec 13 19:37 munge.key
[root@pbs ~]#

そして管理ノードでのデーモンを起動します。

[root@pbs ~]# systemctl start trqauthd.service pbs_server.service munge.service
[root@pbs ~]# systemctl enable trqauthd.service pbs_server.service munge.service

計算ノードの構築

管理ノードと同じく「epel」リポジトリを登録して、今度は「torque-mom」パッケージのみをインストールします

[root@n1 ~]# yum install epel-release
[root@n1 ~]# yum install torque-mom
  (連動して hwloc-lib, munge, munge-libs, torque, torque-libs もインストールされる)

設定としては、「/var/lib/torque/mom_priv/config」に管理ノードの名称を記載します

[root@n1 ~]# vi /var/lib/torque/mom_priv/config
$pbsserver pbs
 
[root@n1 ~]#
[root@n1 ~]# systemctl enable pbs_mom.service
[root@n1 ~]# systemctl start pbs_mom.service

ジョブ発行ノード

管理ノードならその場でジョブを発行できますが、それ以外のノードでもジョブを発行できます

[root@client ~]# yum install epel-release
 
[root@client ~]# yum install torque-client
  (付随して hwloc-libs, libtool-ltdl, munge, munge-libs, tcl, torque, torque-libs もインストールされる)

設定を施します。
まずジョブ管理ノードがどこなのかを「/var/lib/torque/server_name」に記載します

[root@client ~]# echo pbs > /var/lib/torque/server_name

そして、ジョブ管理ノードで作成した「munge.key」を貰い受けます
*要、所有者変更

[root@client ~]# scp root@pbs:/etc/munge/munge.key /etc/munge/munge.key
 
[root@client ~]# chown munge:munge /etc/munge/munge.key
 
[root@client ~]# systemctl enable trqauthd.service munge.service
[root@client ~]# systemctl start  trqauthd.service munge.service

これでジョブ発行ノードで qsub、pbsnode、qmgrらが使えます



管理ノードの「/var/lib/torque/server_priv/nodes

epelリポジトリから得られる Torque は NUMA 対応品です. そのためマルチコア、マルチダイ構成の計算機の場合はちょいと
手を加える必要があるみたい。
コマンド「lscpu」の出力に於いて

[root@n5 ~]# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                8
 :
 :
NUMA node0 CPU(s):     0-7

とか

CPU(s):                28
 :
NUMA node0 CPU(s):     0-13
NUMA node1 CPU(s):     14-27

とか

 :
CPU(s):                16
 :
NUMA node0 CPU(s):     0,2,4,6,8,10,12,14
NUMA node1 CPU(s):     1,3,5,7,9,11,13,15

とからがある. NUMAは極々あっさりなら core/memoryが密になっている単位で、mpi/threads計算に於いて遠くにあるcoreを使うより互いに近いcoreどうしで計算すればcore間もcore-memory間も距離が短くその分ロスが少なくなる. そんな単位かと思っている. 1筐体より細かい単位かな.

これを活用するには「/var/lib/torque/server_priv/nodes」にて

n5 np=8 num_node_boards=1 numa_board_str=8
 
n6 np=28 num_node_boards=2 numa_board_str=14
 
n7 np=16 num_node_boards=2 numa_board_str=8

と明記します。
*各計算ノードで「hostname」を実行したときのホスト名で定義します

また運用的に 1core、1core、3core、3core とNUMAを利用して分けることも可能なようで

n5 np=8 num_node_boards=4 numa_board_str=1,1,3,3

と表記もできる。
そしてこのNUMAの定義に従い 計算ノード側も調整します
場所は計算機ノードの「/var/lib/torque/mom_priv/mom.layout」になります。

[root@n5 ~]# cat /var/lib/torque/mom_priv/mom.layout
nodes=0
nodes=1
[root@n5 ~]#
 
(1core、1core、3core、3coreとnodesで定義したなら)
nodes=0
nodes=1
nodes=2
nodes=3

とします。

計算ノードのpbs_momと管理ノードのpbs_serverを再起動して pbsnodes を実行すると

[root@client ~]# pbsnodes n5
n5-0
     state = free
     np = 1
     ntype = cluster
     status = rectime=1607866020,varattr=,jobs=,state=free,(略
     mom_service_port = 15002
     mom_manager_port = 15003
 
n5-1
     state = free
     np = 1
     ntype = cluster
     status = rectime=1607866020,varattr=,jobs=,state=free,(略
     mom_service_port = 15002
     mom_manager_port = 15003
 
n5-2
     state = free
     np = 3
     ntype = cluster
     status = rectime=1607866020,varattr=,jobs=,state=free,(略
     mom_service_port = 15002
     mom_manager_port = 15003
 
n5-3
     state = free
     np = 3
     ntype = cluster
     status = rectime=1607866020,varattr=,jobs=,state=free,(略
     mom_service_port = 15002
     mom_manager_port = 15003
 
 
[root@client ~]#

と1台なのに複数のノードがあるように見えます。

...ただこのようにNUMAが有効になっているとジョブを出す側としては
「qsub -l nodes=n5-0:ppn=1+n5-1:ppn=1+n5-2:ppn=3+n5-3:ppn=3」としないと1台丸ごと使えないです

そうなるとslrumの方が便利かな。使用するqueueと幾つcoreを使うのかでジョブが流せますから。
Torque/openPBSはqueue名とホスト名(ホスト数)が必要で、NUMAが絡むとNUMA1つが1つのホスト(ホスト数)になる。
この辺も注意する必要があるので場合によってはNUMAのサポートを切ったバイナリを使うのもありかと. 参照TORQUE/180401

利用者登録

mungeを使うとjobを投入するにも確認するにもまずはTorqueへのユーザ登録が必要です。
*CentOS提供のTorqueパッケージはデフォでmungeを採用しているので必須作業です
参照:TORQUE/queue#a92b7130
管理ノードにて

[root@pbs ~]# qmgr
Max open servers: 9
Qmgr: set server authorized_users=illya@*

トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2020-12-16 (水) 17:33:17 (74d)