gridengineのまとめ
無くなりそうでなくならないのでしぶとく使っています。
対応するパッケージはこれかな? (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 "*"
とすると,全てのユーザのジョブの情報が出力されます.
インストール
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と通信できない
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