gridengineのまとめ
無くなりそうでなくならないのでしぶとく使っています。
Ubuntu 22.04
対応するパッケージはこれかな? (https://packages.ubuntu.com/search?keywords=gridengine)
% wget http://ftp.debian.org/debian/pool/main/g/gridengine/gridengine-client_8.1.9+dfsg-10+b1_amd64.deb
Ubuntu 20.04へのインストール
Ubuntu 18.04と同様apt installが失敗する。パッケージは変わっていないようなので、対応は以下のページ書いている方法(3.2. gridengine-clientの修正)でうまくいくようだ。ありがとうございます。とても助かりました。
手順: gridengine-clientが他のパッケージのインストールを阻害するということなので、
% sudo apt install gridengine-client % wget http://ftp.debian.org/debian/pool/main/g/gridengine/gridengine-client_8.1.9+dfsg-9_amd64.deb % mkdir gec % dpkg -X gridengine-client_8.1.9+dfsg-9_amd64.deb gec % cd gec/usr/lib/gridengine % sudo cp libspoolb.so libspoolc.so spooldefaults.bin /usr/lib/gridengine % sudo apt install gridengine-master gridengine-qmon gridengine-exec
(参照先に書いているシンボリックリンク先のファイルがある場合はシンボリックリンクは不要であるか)
qmonが以下のようにうまくいかない時は空の.Xauthorityを作れば良い(つまりtouch /root/.Xauthority
)。
% sudo qmon X11 connection rejected because of wrong authentication. Error: Can't open display: localhost:10.0
ワイルドカード
キューや並列環境を指定するときにワイルドカードが使えます(例えば*)。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 "*"
とすると,全てのユーザのジョブの情報が出力されます.
インストール
親ノード
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と通信できない
error: commlib error: access denied (client IP resolved to host name "localhost". This is not identical to clients host name "myhostname") unable to contact qmaster using port 6444 on host "myhostname"
gridengineがどの名前を優先しているかは、gridengine-masterを起動した時に/var/lib/gridengine/cluster-name/common/act_qmaster
に書き込まれるものを参考にする。
ゴールはシステム側の名前解決の優先順位との食い違いをなくすこと。
DNSから名前が降りてくる場合は、/etc/hosts
内にlocalhost以外にDNSから来る名前を書き込んで、/etc/hosts
内の順番を上にする。
kvmなどで固定IPアドレスと名前が決まっている場合は127.0.1.1をそのアドレスに変更したのち/etc/hosts
内の順番を上にする。
locahostへの設定
localhostの名前(仮myhostname)をチェックする。
% hostname myhostname
Submit hostへの追加。
% sudo qconf -as myhostname
arusersに自分のアカウント名(仮myname)を追加。
% sudo qconf -au myname arusers % qconf -su arusers name arusers type ACL fshare 0 oticket 0 entries myname
defaultという名前のqueueとdefaultという名前のpeを作る。 (名前はdefaultじゃなくてもなんでも良い。)
% sudo qconf -Ap default-pe % sudo qconf -Aq default-q
default-peとdefault-qはたとえば以下のような内容。
% qconf -spl default
% qconf -sp default pe_name default slots 1 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 default
(mylocalhost
を書き換えを忘れずに)
% qconf -sq default qname default hostlist mylocalhost seq_no 0 load_thresholds np_load_avg=1.75 suspend_thresholds NONE nsuspend 1 suspend_interval 00:05:00 priority 0 min_cpu_interval 00:05:00 processors UNDEFINED qtype BATCH INTERACTIVE ckpt_list NONE pe_list default make rerun FALSE slots 1 tmpdir /tmp shell /bin/csh prolog NONE epilog NONE shell_start_mode posix_compliant starter_method NONE suspend_method NONE resume_method NONE terminate_method NONE notify 00:00:60 owner_list NONE user_lists arusers xuser_lists NONE subordinate_list NONE complex_values NONE projects NONE xprojects NONE calendar NONE initial_state default s_rt INFINITY h_rt INFINITY s_cpu INFINITY h_cpu INFINITY s_fsize INFINITY h_fsize INFINITY s_data INFINITY h_data INFINITY s_stack INFINITY h_stack INFINITY s_core INFINITY h_core INFINITY s_rss INFINITY h_rss INFINITY s_vmem INFINITY h_vmem INFINITY
localhostのhostnameが変わった時 (queueの名前はdefaultとする)
sudo qconf -ds oldhostname sudo qconf -dh oldhostname sudo qconf -mq default # oldhostname -> newhostname sudo qconf -de oldhostname sudo qconf -as newhostname