gridengineのまとめ

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

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