本家様http://www.pbspro.org/
ジョブスケジューラ
TORQUEもいいのだがmauiとの連携でGPUが残念な状態である。そうなるとslurmが選択肢になるのだが、ここにきて
商用品であるPBS Professionalがオープンソースとして提供されている。
ここではこのPBS Professionalについて取り上げる

特徴と言うかそのように作られたのでしょうけど、postgreSQLを利用しています
macOSではコンパイルできませんでした

pbspro/windows

pbsproパッケージ作成

https://github.com/PBSPro/pbsproから最新コードが入手可能であるが、
releaseされているtarball(pbspro-14.1.0.tar.gz)からパッケージを作ってみました。

このファイルには spec ファイルが含まれている

[root@c ~]# gzip -cd pbspro-14.1.0.tar.gz | tar tvf - | grep spec
-rw-rw-r-- root/root     12550 2016-06-16 10:34 pbspro-14.1.0/pbspro.spec
[root@c ~]#

なので、この spec ファイルを使ってrpmファイルを作ります。そして作ったrpmパッケージをクラスター内マシンに配布しようと思う
っで、まずは下準備

[root@c ~]# mkdir -p ~/rpmbuild/{SOURCES,SPECS}
[root@c ~]# 
[root@c ~]# gzip -cd pbspro-14.1.0.tar.gz | tar xvf - pbspro-14.1.0/pbspro.spec --strip=1
[root@c ~]# mv pbspro-14.1.0.tar.gz ~/rpmbuild/SOURCES/
[root@c ~]# mv pbspro.spec          ~/rpmbuild/SPECS/

一部 pbspro.spec の中身を修正します
(TORQUEと同じディレクトリ配置にしたかったので)

--- /root/rpmbuild/SPECS/pbspro.spec.orig       2016-06-16 10:34:25.000000000 +0900
+++ /root/rpmbuild/SPECS/pbspro.spec    2017-09-27 13:52:09.954357101 +0900
@@ -42,7 +42,7 @@
 %define pbs_version 14.1.0
 %define pbs_release 0
 %define pbs_prefix /opt/pbs
-%define pbs_home /var/spool/pbs
+%define pbs_home /var/lib/pbs
 %define pbs_dbuser postgres
 %define pbs_dist %{pbs_name}-%{pbs_version}.tar.gz

そうしてrpmbuildを実行します

[root@c ~]# rpmbuild -ba rpmbuild/SPECS/pbspro.spec

*コンパイルに必要なパッケージは gitサイトに記載されております
https://github.com/PBSPro/pbspro/blob/master/INSTALL

完成品がこれ

[root@c ~]# ls -lh rpmbuild/RPMS/x86_64/pbspro-*
-rw-r--r-- 1 root root 1.8M  9月 27 13:59 rpmbuild/RPMS/x86_64/pbspro-client-14.1.0-0.x86_64.rpm
-rw-r--r-- 1 root root 6.0M  9月 27 13:59 rpmbuild/RPMS/x86_64/pbspro-debuginfo-14.1.0-0.x86_64.rpm
-rw-r--r-- 1 root root 2.2M  9月 27 13:59 rpmbuild/RPMS/x86_64/pbspro-execution-14.1.0-0.x86_64.rpm
-rw-r--r-- 1 root root 2.9M  9月 27 13:59 rpmbuild/RPMS/x86_64/pbspro-server-14.1.0-0.x86_64.rpm
[root@c ~]#

品目が分かりやすくていい

導入

ジョブ管理ノードには (作業:pbspro/server)

  • pbspro-server-14.1.0-0.x86_64.rpm

計算ノードには (作業:pbspro/execution)

  • pbspro-execution-14.1.0-0.x86_64.rpm

ジョブ発行ノードには (作業:pbspro/client)

  • pbspro-client-14.1.0-0.x86_64.rpm

をそれぞれインストールする

hosts.equiv

計算ノードでの計算が終わった後に、標準出力、標準エラーとかのファイルは、
「/opt/pbs/sbin/pbs_rcp」もしくは「/bin/scp」を使って「ジョブを発行したノード」へコピーされます。

sshで計算ノードからジョブ発行ノードにパスワード無しとかでアクセスできればいいのですが、
そうで無い場合、rcpに対応すべく下記「/etc/hosts.equiv」を用意する

[root@pbspro ~]# cat /etc/hosts.equiv
+ +
 
[root@pbspro ~]# systemctl enable rexec.socket rsh.socket
[root@pbspro ~]# systemctl start rexec.socket rsh.socket

また、NFSで繋げていれば、計算ノードの「/var/lib/pbs/mom_priv/config」ファイルに

$usecp *:/home /home
$usecp *:/data /data

と記載していれば、rcp/scpなどネットワークを経由せずにcpコマンドでコピーされる

queueの作成

pbsproには2種類のqueueが用意されている。「routing」と「execution」
「routing」はジョブを他のqueueへ移す「queue」(宛先は再度「routing」でも構わなく、当然「execution」でもOK)
「execution」はジョブを待機中とか計算中とかにさせる「queue」 (「計算のqueue」とかと呼ばれるもの)
pbsproでは既定で queue「workq」が用意されている。

[root@pbspro ~]# qstat -Q
Queue              Max   Tot Ena Str   Que   Run   Hld   Wat   Trn   Ext Type
---------------- ----- ----- --- --- ----- ----- ----- ----- ----- ----- ----
workq                0     0 yes yes     0     0     0     0     0     0 Exec
[root@pbspro ~]#

とりあえず、この「workq」を使った簡単なテストジョブを発行してみる

[illya@pbspro ~]$ cat a.sh
#!/bin/sh
sleep 30
hostname
pwd
 
[illya@pbspro ~]$ qsub -q workq -N test -l select=1:ncpus=1:mem=1gb a.sh
14.pbspro
[illya@pbspro ~]$ qstat
Job id            Name             User              Time Use S Queue
----------------  ---------------- ----------------  -------- - -----
14.pbspro         test             illya             00:00:00 R workq
[illya@pbspro ~]$

となる。
queueの名称で特定の計算ノードにジョブが渡るようにするには下記のように「set node <node> queue = <queue>」とする
ここでは、queue「bio」が指定されると、計算ノード「n1」と「n2」が担当するようにした
もちろんジョブの指定方法では「n1」「n2」の2つを使えます

[root@pbspro ~]# qmgr
Max open servers: 49
Qmgr: create queue bio queue_type = execution
Qmgr: set queue bio started = true
Qmgr: set queue bio enabled = true
Qmgr: set node n1 queue = bio
Qmgr: set node n2 queue = bio
 
[root@pbspro ~]#

どの計算ノードがどのqueueに割り当てられているかは「pbsnodes」コマンドで確認可能

[root@pbspro ~]# pbsnodes -aS
vnode           state           OS       hardware host            queue        mem     ncpus   nmics   ngpus  comment
--------------- --------------- -------- -------- --------------- ---------- -------- ------- ------- ------- ---------
n1              free            --       --       n1              bio             2gb       1       0       0 --
n2              free            --       --       n2              bio             2gb       2       0       0 --
n3              free            --       --       n3              --              2gb       3       0       0 --
[root@pbspro ~]#

ノード指定を解除するには

[root@pbspro ~]# qmgr -c "unset node n2 queue"

とかで
1つの計算ノードを複数のqueueで共有する場合はvnode様式を使う
詳しくはPBSProのAdministrator's Guide「4.8.2.2.i Procedure to Associate Vnodes with Multiple Queues」を参照


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2017-10-21 (土) 14:14:18 (1d)