#author("2020-12-16T08:32:03+00:00","default:sysosa","sysosa")
#author("2020-12-16T08:33:17+00:00","default:sysosa","sysosa")
もやはOpenSourceではなくなったTORQUE.
でもCentOSとかで古いバージョンだけど yum で入手可能です.

ここでは&color(lightseagreen){''CentOS 7''}; で TORQUE を使ったジョブコントロールについて記す.

&size(10){過去記事 [[torque-4.2.10>TORQUE/180401]]. [[torque-2.5.x>TORQUE151107]]は、EOL(End of Life)/EOSL(End Of Service Life)の模様. [[manualページ>+http://www.adaptivecomputing.com/support/documentation-index/torque-resource-manager-documentation/]]から};
&size(10){GPUs対応 [[TORQUE/GPUs]]};

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

***全体像 [#wec964f1]
同一のネットワーク上に管理ノード、計算ノード、ジョブ発行ノードらが存在する
アカウント管理とかユーザのホームディレクトリは各ノードと共有されているとする
計算ノードへのジョブ投入にはsshかrshのいずれかを選ぶ
-ssh
公開鍵を作成してそれを「&color(magenta){~/.ssh/authorized_keys};」に記載する
-rsh
rsh-serverパッケージをインストールして「&color(orange){/etc/hosts.equiv};」に「+」のみ記載する。
&color(red){*};&size(10){セキュリティーに関わるので要注意箇所です。絶対に「+ +」と記載してはダメ};

&ref(2020y12m13d_191022362.png,noborder);

IPとか役目は下記参照
|BGCOLOR(yellow):役目|BGCOLOR(yellow):ホスト名|BGCOLOR(yellow):IPアドレス|BGCOLOR(yellow):core数|BGCOLOR(yellow):備考|
|管理ノード|pbs|192.168.0.57|1||
|計算ノード|n1|192.168.0.52|1|pbs_momが稼働&br;実際の計算を行う|
|~|n2|192.168.0.53|2|~|
|~|n3|192.168.0.54|3|~|
|ジョブ発行ノード|client|192.168.0.20|1|qsub,qstat|

管理ノード・計算ノードには下記のようにfirewallに穴をあけておきます
#code(nonumber){{
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
}}


***管理ノードの構築 [#z86def53]
toqrueパッケージは epel リポジトリで提供されているのでまずはepelリポジトリを登録します。
それから 管理ノードなので必要な「torque-server」「torque-scheduler」そして管理コマンドを含む「torque-client」をインストールします
#code(nonumber){{
[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」に管理ノードのホスト名を記載します
#code(nonumber){{
[root@pbs ~]# hostname > /var/lib/torque/server_name
[root@pbs ~]# cat /var/lib/torque/server_name
pbs
[root@pbs ~]#
}}

次に、ジョブコントロール向けのデータベースを作ります。
#code(nonumber){{
[root@pbs ~]# pbs_server -d /var/lib/torque -t create -f -D
pbs_server is up (version - 4.2.10, port - 15001)
}}
これでデータベースファイルは作成されますが、pbs_serverデーモンが稼動し続けています。
なのでここで &color(red){Ctrl-C}; によりpbs_serverデーモンを強制停止させます。

そして各計算ノードの情報を「/var/lib/torque/server_priv/nodes」に記載します
#code(nonumber){{
[root@pbs ~]# vi /var/lib/torque/server_priv/nodes
n1 np=1 num_node_boards=1 numa_board_str=1

[root@pbs ~]#
}}
&color(red){*};&size(10){ここに記載されるホスト名は、計算ノードで「hostname」と実行したときの値であることが大事みたい};


次に、qstat/qmgrコマンドの実行に必要な munge のキーファイルを作成します
&color(red){*};&size(10){ジョブ発行ノードにここで作った munge.key が必要になります};
#code(nonumber){{
[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 ~]#
}}

そして管理ノードでのデーモンを起動します。
#code(nonumber){{
[root@pbs ~]# systemctl start trqauthd.service pbs_server.service munge.service
[root@pbs ~]# systemctl enable trqauthd.service pbs_server.service munge.service
}}




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

#code(nonumber){{
[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」に管理ノードの名称を記載します
#code(nonumber){{
[root@n1 ~]# vi /var/lib/torque/mom_priv/config
$pbsserver pbs

[root@n1 ~]#
}}
#code(nonumber){{
[root@n1 ~]# systemctl enable pbs_mom.service
[root@n1 ~]# systemctl start pbs_mom.service
}}


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

#code(nonumber){{
[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」に記載します
#code(nonumber){{
[root@client ~]# echo pbs > /var/lib/torque/server_name
}}
そして、ジョブ管理ノードで作成した「munge.key」を貰い受けます
&color(red){*};要、所有者変更
#code(nonumber){{
[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らが使えます


~


~

***管理ノードの「&color(orangered){/var/lib/torque/server_priv/nodes};」 [#e6cf152c]
epelリポジトリから得られる Torque は NUMA 対応品です. そのためマルチコア、マルチダイ構成の計算機の場合はちょいと
手を加える必要があるみたい。
コマンド「&color(magenta){lscpu};」の出力に於いて
#code(nonumber){{
[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
}}
とか

#code(nonumber){{
CPU(s):                28
 :
NUMA node0 CPU(s):     0-13
NUMA node1 CPU(s):     14-27
}}

とか
#code(nonumber){{
 :
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」にて
#code(nonumber){{

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
}}
と明記します。
&color(red){*};各計算ノードで「hostname」を実行したときの値を付ける必要がある。
&color(red){*};各計算ノードで「&color(magenta){hostname};」を実行したときのホスト名で定義します

また運用的に 1core、1core、3core、3core とNUMAを利用して分けることも可能なようで
#code(nonumber){{
n5 np=8 num_node_boards=4 numa_board_str=1,1,3,3
}}
と表記もできる。
そしてこのNUMAの定義に従い 計算ノード側も調整します
場所は計算機ノードの「/var/lib/torque/mom_priv/mom.layout」になります。
#code(nonumber){{
[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 を実行すると
#code(nonumber){{
[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=&color(cadetblue){n5-0:ppn=1};''+''&color(mediumblue){n5-1:ppn=1};''+''&color(chocolate){n5-2:ppn=3};''+''&color(mediumseagreen){n5-3:ppn=3};」としないと1台丸ごと使えないです

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

***利用者登録 [#g582f1bc]
mungeを使うとjobを投入するにも確認するにもまずはTorqueへのユーザ登録が必要です。
&color(red){*};&size(10){CentOS提供のTorqueパッケージはデフォでmungeを採用しているので必須作業です};
参照:[[TORQUE/queue#a92b7130]]
管理ノードにて
#code(nonumber){{
[root@pbs ~]# qmgr
Max open servers: 9
Qmgr: set server authorized_users=illya@*
}}
1

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS