本家様https://www.openpbs.org/
ジョブスケジューラ
TORQUEもいいのだが現状オープンソースではなく商用品のご様子. 2018.06に宣言

出来ればずっと継続的に開発され進化し続けてくれるものが望ましく、その一つにslurmがある.
これはこれでいいのだが、ここにきて商用品であるPBS Professionalがオープンソースとして提供されている. 名称は OpenPBS です.

ここではこの OpenPBS について取り上げる.

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

OpenPBS/windows ジョブ作成OpenPBS/job
OpenPBS/environment
OpenPBS/GPU
OpenPBS/vnode
OpenPBS/restrict_user
ドキュメント https://www.altairjp.co.jp/pbs-works-documentation/

OpenPBS/ubuntu

全体像

TORQUEslurm と同じように nis/samba-ad/ldapとかでノードのアカウント管理が行われ、nfsで/home, /appsらが共有されているとします.

ここでは ジョブを管理するOpenPBS管理ノードが1台、計算ノードはn1の1台、そしてジョブを投入するサイトが1台としてます

全ノードのOSは全てRockylinux8で、大事な時計は chrony で同期しています.

役目ホスト名IPアドレスcore数備考
管理ノードopenpbs192.168.0.701nis/samba-ad/ldapに参加する必要はありません
計算ノードpbs-node1192.168.0.1014GPUを1枚搭載
計算ノードpbs-node2192.168.0.1014
ジョブ発行ノードpbs-client192.168.0.451

rpmパッケージの作成

ソースからコンパイルして用意するのもありなのだが、全ノードでコンパイルは面倒至極.
なのでrpmパッケージを作ります.
OpenPBS/rpm

構築

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

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

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

をそれぞれインストールする
*pbspro-execution」は「pbspro-client」の機能を有してます。なので計算ノードからもジョブを発行できます。

リモートシェル

ジョブを流したら
qsub: Bad UID for job execution
と表示されるなら
計算ノード側に適切なアカウントがないのかも. nis/samba-ad/ldapとかで計算ノード間でアカウントと共有します

ジョブ発行ノードから計算ノードへ ssh/rsh でパスワード入力なしでログインできるようにする必要はない.

openmpiを使う計算の場合、TM Moduleが有効ならpbs_tmrshが仲介してくれるので.
参照https://community.openpbs.org/t/how-to-avoid-passwordless-ssh/2211/2
*計算結果を転送するのにscpを使われては困るので各計算ノードには「$usecp *:/home /home」とかの定義が必要です


またインターラクティヴモードで計算ノードへのログインする際にも ssh/rsh の設定らは不要です.
そのままで利用可能みたい.

ジョブの実行

使えるqueueは下記にて確認できる

[illya@client ~]$ 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 Exe*
[illya@client ~]$

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

例えば、簡単に「a.sh」なる下記のジョブファイルを用意します

#!/bin/bash
sleep 30
hostname
pwd
cat $PBS_NODEFILE

留意 複数の書式があります

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 ~]#

queueの名称で特定の計算ノードにジョブが渡るようにするには qmgrにて「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」を参照

queue「bio」を特定のユーザしか使わせないなら下記のように設定を施す

Qmgr: set queue bio acl_users="illya@client.sybyl.local,saber@*.sybyl.loca"
Qmgr: set queue bio acl_user_enable = true

もし定義以外のユーザが実行しようとすると下記のようになる

[archer@c ~/pbs]$ qsub d.sh
qsub: Unauthorized Request
 
[archer@c ~/pbs]$

メモ

管理ノードのホスト名が変わったらデータベースを作り直す
「/opt/pbs/libexec/pbs_habitat」
を実行する

一括ジョブ(Job Arrays)

参照先 https://www.cqu.edu.au/eresearch/high-performance-computing/hpc-sample-code-and-scripts/pbs-job-array-submission
1つのジョブで複数のqueueを出します。変数は「#PBS -J」で定義して、スクリプト内は「$PBS_ARRAY_INDEX」として扱われる。
キュー名「workq」の中に3台計算機(ncpus=16)があるとすれば、変数を変えて3つ同時にジョブが動きます。

計算のパラメータをこのジョブファイルで管理して、一括にジョブ投入できます

#!/bin/bash
#PBS -q workq
#PBS -N job_array_test
#PBS -l select=1:ncpus=16
#PBS -r y
#PBS -J 1-5           # 1,2,3,4,5と展開されて$PBS_ARRAY_INDEXに入ります
#PBS -R oe            # 標準出力、標準エラーをださない
 
cd $PBS_O_WORKDIR
hostname
date
echo echo $PBS_ARRAY_INDEX $(date) $(hostname) >  ${PBS_JOBNAME}.${PBS_ARRAY_INDEX}

結果は「job_array_test.1」「job_array_test.2」とかのファイルが作られる。

bashスクリプトで case 文を作って1ならこの変数、2ならこの変数とかパラメータをジョブに回せばいいのかなと.

参照先

https://www.adc.nao.ac.jp/MDAS/ug/mdas-ug_j/4-2.html

めも

qstat -Q -f -w workq | grep Running| awk '{print gensub(/(.*)Running:([0-9]+)(.*)/,"\\2","1")}'
最新の60件
2024-10-11 2024-10-10 2024-10-09 2024-10-08 2024-10-06 2024-10-05 2024-10-04 2024-10-03 2024-10-02 2024-10-01 2024-09-30 2024-09-29 2024-09-28 2024-09-27 2024-09-22 2024-09-20 2024-09-17 2024-09-12 2024-09-09 2024-09-08 2024-09-06 2024-09-05 2024-09-04 2024-09-02 2024-09-01 2024-08-31 2024-08-28 2024-08-18 2024-08-17 2024-08-16 2024-08-15 2024-08-14 2024-08-11

edit


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2024-10-09 (水) 19:31:35