もやは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のいずれかを選ぶ
IPとか役目は下記参照
役目 | ホスト名 | IPアドレス | core数 | 備考 |
管理ノード | pbs | 192.168.0.57 | 1 | |
計算ノード | n1 | 192.168.0.52 | 1 | pbs_momが稼働 実際の計算を行う |
n2 | 192.168.0.53 | 2 | ||
n3 | 192.168.0.54 | 3 | ||
ジョブ発行ノード | client | 192.168.0.20 | 1 | qsub,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らが使えます
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@*