gridengineのまとめ

無くなりそうでなくならないのでしぶとく使っています。

ワイルドカード

キューや並列環境を指定するときにワイルドカードが使えます(例えば*)。man sge_types

例1:

qsub -q "queue*" calc.sh 

例2:

#$ -pe mpi* 4 

リソースオプション

h_rt 単位は秒。

qsub -l h_rt=3600 

は1時間。

qsub -l h_rt=1:20:30 

は1時間20分30秒。

qstatコマンド

qstat -f( -f はfullの意味)だとノード毎に自分のジョブの情報しか出力されません.

qstat -u "*"

とすると,全てのユーザのジョブの情報が出力されます.

インストール

Ubuntuならaptitudeで可能です。

親ノード

gridengine-client gridengine-common gridengine-master gridengine-qmon 

qmasterは/var/lib/gridengine/boston/common/act_qmasterに書いてある。hostnameで決まる名前を見て自動的にact_qmasterが書き換えられるもよう。qmasterへの接続にはこの名前が重要そうだ。

子ノード

gridengine-exec gridengine-client 

PEのパラメータ

  • slots: トータルの動かしたいコア数
  • Control Slaves: よく分からないけどとにかくTrueにする。
  • Allocation rule: $fill_upがよさそう。詳しくはman sge_pe。

ハブをまたがないようにする

ハブをまたがないホストグループごとに複数のキューを作ります。それに加え、別々の名前で作った並列環境(PE)をそれぞれのキューに割り当てます。ジョブを投げるときにアスタリスクつきのPEオプションを付けると、リソースマネージャが適当にジョブの分配をやってくれます。

スケジューリング、ポリシーの設定

Policy configuration --> Share Tree Policy を開く。ツリーのRoot --> defaultusers にユーザーを追加する。shareは他のユーザーのshareを見てバランスを見て決める。

ジョブの走っていないノードにのみジョブを配る

qconf -mcで次の行を追加

exclusive excl BOOL EXCL YES YES 1 1000 

各ノードにexclusive schedulingを理解させるために、qconf -me <hostname>

complex_values exclusive=true 

とします。実際はノードがたくさんあるのでqconf -Meを使ったほうが効率的です。

私のクラスタの上記defaultは1にしています。つまり、デフォルトスケジューリングがexclusiveになっています。例えば1コアだけの計算を大量に投げたいなど、exclusiveにスケジューリングする必要がないジョブに関しては、

qsub -l exclusive=false 

としてジョブを投げれば良いです。

コマンドラインからの設定

qconfで行う。Ubuntu18.04の場合、デフォルトの基本設定は/etc/gridengine/configurationに書いているが、このファイルを書き換えてもなにもおこらない。このファイルに対応する設定は、qocnf -mconfで行う。man qconfおよび、man sge_confを参照のこと。

administration hostの追加

qconf -ah 

Submit hostの追加

qconf -as 

execution hostの追加

qconf -ae 

execution hostの表示

qconf -sel 

execution hostのファイルを使った追加

qconf -seで表示された内容をファイルに書き出して、hostnameの部分だけ書き換えて、

qconf -Ae filename

で追加すると楽かもしれません。

usersetへの追加

qconf -au user-name userset-name 

usersetの表示

qconf -sul 

usersetの中身の表示

qconf -su userset-name 

defined userへの追加

qconf -auser 

defined userを表示する

qconf -suserl 

defined userの中身の表示

qconf -suser user-name 

ホストグループの追加

qconf -ahgrp group-name 

group-nameは@から始まるようにする。

ホストグループの変更

qconf -mhgrp group-name 

ホストグループのリスト

qconf -shgrpl 

PEのリスト

qconf -spl 

PEの内容の表示

qconf -sp pe_name 

ファイルからPEの追加

qconf -Ap pe-conf-file 

設定ファイルの例:

pe_name            mpia
slots              720
user_lists         arusers
xuser_lists        NONE
start_proc_args    /bin/true
stop_proc_args     /bin/true
allocation_rule    $fill_up
control_slaves     TRUE
job_is_first_task  FALSE
urgency_slots      min
accounting_summary FALSE
qsort_args         NONE

キューのリスト

qconf -sql 

キューの内容の表示

qconf -sq queue_name 

ファイルからのキューの追加

qconf -Aq queue_file 

Policyの内容の表示

qconf -sstree 

Policy内容の変更

qconf -mstree 

スケジューラの内容の表示

qconf -ssconf 

キューインスタンスのコントロール

マシンへジョブが走らないようにしたり、もとに戻したりするためにはqmodを使います。

キューインスタンスを止める(例えばqueue-aのnode05)

qmod -d queue-a@node05 

キューインスタンスの名前はqhost -qで見ることができます。

キューインスタンスの状態の確認

qhost -q 

トラブル

ジョブを大量投入したときにsge_qmasterがメモリを使いまくる

schedd_job_infoをfalseにすると改善する。qmonのスケジューラの設定で変更できる。もしくはqconf -msconf

ホスト名の食い違いでgridengine-masterと通信できない

名前解決の順番と関係があるみたい。たぶんDNSから名前が降りてくる場合は、 /etc/hosts内にlocalhost以外にDNSから来る名前を書き込んで、/etc/hosts内の順番を上にする。gridengineがどの名前を優先しているかは、gridengine-masterを起動した時に/var/lib/gridengine/cluster-name/common/act_qmasterに書き込まえるのでそれを参考にする。