1 アナロジー

Sun Grid Engine 本家の文書に銀行のアナロジーが出ているが、 これだと ユーザが execution host と直接対話しているように思ってしまうかもしれない。 しかし実際はそういうわけではない。 理解の助けにするために、別のアナロジーを出してみよう。

ここに、ピザ屋がある。 今、Grid Engine システムを構築しようとしている管理者の あなたはこのピザ屋のオーナーに相当する。 ピザ屋には、オーナー以外に店長、調理人、受付人の 3つの役職がある。 Grid Engine について知っている人には、 以下のような割り振りを示してしまった方が分かり易いだろう。

ピザ屋に来た客(ユーザ)は、受付人(submit host)に注文する。 客は、受付人のみと接触する。 客にとっては受付人に注文を出すとサービスが得られるという事 のみが重要で、それ以外はどうでも良いことだ。 オーナー・店長・調理人がどういう人であるか、 ピザ屋にどういう設備があるか、 ピザ屋の内部でどういう仕事の割り振りが行われるか、 客には分からないし、知ったことではない。

このピザ屋には複数台のオーブンと、 各オーブンに専属の調理人がいる。 「ベーコンピザ1枚、シーフードピザ2枚」 のように受付人が受けた注文(ジョブ)は、 店長の采配のもと適切に調理人に仕事が割り振られ、 焼かれていく。

ピザが出来上がれば製品棚(ファイルシステム)に並べられる。 この店では、客がそれを勝手に取って行け、というスタイルだ。 ただし、今焼いている途中か 焼き終わったかどうかは受付に聞けば(qstat)、分かる。

ピザ屋の設備を増設したり、 受付人や調理人を増員したり、 店長の采配の仕方を調整する(qconf)のがオーナーの仕事だ。

2 バージョン、配布形態

2.1 ソースからのインストール

ソースはおそらく、このへん。

3 キューの属性変更

qconf -aattr queue slots "1, [Ge00=1]" Ge.q
#=> root@Ir.atom modified "Ge.q" in cluster queue list

作成した Ge.q の属性を変更。 この例だと slot を変更している。

4 設定ファイルの保存場所

5 parallel environment の設定

qconf -ap なんだけど、 とりあえずなしでやってみる。

qconf -spl で全ての parallel environment が表示される。

6 ホストグループについて

6.1 ホストグループ [@Ir] の作成

ホストグループを作る場合、

qconf -ahgrp @Ir

上記コマンドでホストグループ [@Ir] を作る。 ここの [@Ir] はホスト名に拘束された名前でなく、abc のような適当な名前で良い筈。 以下のような編集画面が出る。

group_name @Ir
hostlist NONE

NONE の部分を登録する実際の個々のホストして Ir を書き換える。 すなわち、

group_name @Ir
hostlist Ir

以下のように 現在登録されているホストグループ一覧を表示するコマンド で確認しておこう。

qconf -shgrpl
#=> @Ir

qconf -shgrp @Ir
#=>
group_name @Ir
hostlist Ir.calc.atom

6.2 修正

NONE を手動で書き換えなかった場合や間違った場合など、 以下のようにコマンドでも修正できる。

qconf -aattr hostgroup hostlist Ir.atom @Ir  #追加
qconf -dattr hostgroup hostlist Ir.atom @Ir  #削除
qconf -dhgrp @Ir
qconf -mhgrp @Ir

習熟するまでは、-m* 系のオプションだけで戦った方が良いように思う。

7 発行ホストの追加

Re にインストール。

sudo apt-get install -y gridengine-client

これで qconf が入ったようだ。

Ir で qconf -ss すると、以下のように Re.calc.atom は登録されている。

Ir.calc.atom
Re.calc.atom

エラーが解決できなかったので、とりあえず候補になりそうなドメイン名全て入れておく。

# qconf -ss
Ir.atom
Ir.calc.atom
Re.atom
Re.calc.atom

たとえば、こんなエラー

ippei@Re % qstat
error: commlib error: access denied (server host resolves rdata host "Re" as "Re.calc.atom")
error: unable to contact qmaster using port 6444 on host "Ir.calc.atom"

/etc/hosts で以下をコメントアウトなどで無効にする。 これでいけた。

127.0.1.1>-----Re Re.calc.atom

たとえば、こんなエラー

error: commlib error: access denied (client IP resolved to host name "Re.calc.atom". This is not identical to clients host name "Re.atom")
error: unable to contact qmaster using port 6444 on host "Ir.calc.atom"

うまくいった。 ping Re などとして、 127.0.1.1 ではなく、ドメインの IP アドレス 192.168.1.75 に飛ばされることが必要 なのだろう。

7.1 Ir で発生[2014-11-27]

qconf -mq でキューをいじっている最中に席を離れて、 後でエディタを閉じたタイミングで生じたっぽい。

8 本家サイト

Open Grid Scheduler: The official Open Source Grid Engine Download Grid Engine/Grid Scheduler から、 Grid Engine 2011.11 binary for x64 (now with the GUI installer) で http://dl.dropbox.com/u/47200624/respin/ge2011.11.tar.gz をダウンロードしてみる。

source は http://sourceforge.net/projects/gridscheduler/ これっぽい。

9 リソース割り当て

Se{00..11} をセットアップして、qsub で投げてみると ジョブとして登録はされるが Se00 に投げられない。

デフォルトで、ユーザのジョブ数制限というのはよくある話らしい。

qquota コマンドでリソース割り当てを管理できるようだ。

root@Ir [0]# qquota -help                                            [14-05-20 15:20:06]
GE 6.2u5
usage: qquota [options]
  [-help]                              print this help
  [-h wc_host_list](wc_hostgroup_list)  display only selected hosts
  [-l resource_attributes]             request the given resources
  [-u wc_user]                         display only selected users
  [-pe wc_pe_list]                     display only selected parallel environments
  [-P wc_project_list]                 display only selected projects
  [-q wc_cqueue_list]                  display only selected queues
  [-xml]                               display the information in XML-Format

resource_attributes      resource_name,resource_name,...
wc_cqueue                wildcard expression matching a cluster queue
wc_cqueue_list           wc_cqueue[,wc_cqueue,...]
wc_host                  wildcard expression matching a host
wc_host_list             wc_host[,wc_host,...]
wc_hostgroup             wildcard expression matching a hostgroup
wc_hostgroup_list        wc_hostgroup[,wc_hostgroup,...]
wc_pe                    wildcard expression matching a parallel environment
wc_pe_list               wc_pe[,wc_pe,...]
wc_project               wildcard expression matching a project
wc_project_list          wc_project[,wc_project,...]

10 メモ

何台で並列計算しているかは vasp の OUTCAR の先頭の 1 nodes とか見ればよいか。

Trouble: 先頭ホストは Ga08 とかバラけて投げてくれるが、並列の相方は Ga00 固定になっている。 mpdboot などで、静的なファイルを指定しているからだろう。

10.1 PE のその他の操作

10.1.1 削除

qconf -dp を使う。

qconf -dp Ga.mpich2

10.1.2 修正

qconf -mp を使う。

qconf -mp Ga.mpich2

10.1.3 表示

-spl で全 PE のリストだが、個別の詳細表示は qconf -sp で指定する。

qconf -sp Ga.mpich2

10.2 参考

10.3 環境変数

printenv.sh を作って、

#! /bin/sh
#$ -S /bin/sh
#$ -q Ga.q

printenv

上記のように、pe なしだと、

ARC=lx26-amd64
ENVIRONMENT=BATCH
HOME=/home/ippei
HOSTNAME=Ga04.calc.atom
JOB_ID=56
JOB_NAME=printenv.sh
JOB_SCRIPT=/var/spool/gridengine/execd/Ga04/job_scripts/56
LOGNAME=ippei
NHOSTS=1
NQUEUES=1
NSLOTS=1
PATH=/home/ippei/bin:/tmp/56.1.Ga.q:/usr/local/bin:/bin:/usr/bin
PREVLEVEL=N
PWD=/home/ippei
QUEUE=Ga.q
REQNAME=printenv.sh
REQUEST=printenv.sh
RESTARTED=0
RUNLEVEL=2
SGE_ACCOUNT=sge
SGE_ARCH=lx26-amd64
SGE_BINARY_PATH=/usr/sbin/lx26-amd64
SGE_CELL=default
SGE_CWD_PATH=/home/ippei
SGE_EXECD_PIDFILE=/var/run/gridengine/execd.pid
SGE_JOB_SPOOL_DIR=/var/spool/gridengine/execd/Ga04/active_jobs/56.1
SGE_O_HOME=/home/ippei
SGE_O_HOST=Ir
SGE_O_LOGNAME=ippei
SGE_O_MAIL=/var/mail/ippei
SGE_O_PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/ippei/bin:/home/ippei/.gem/ruby/1.8/bin:/home/ippei/.gem/ruby/1.9.1/bin:/opt/intel/Compiler/11.1/072/bin/intel64:/opt/bin:/opt/mpich2/bin:/opt/openmpi-gcc/bin
SGE_O_SHELL=/usr/bin/zsh
SGE_O_WORKDIR=/home/ippei/tmp/gridengine
SGE_ROOT=/var/lib/gridengine
SGE_STDERR_PATH=/home/ippei/printenv.sh.e56
SGE_STDIN_PATH=/dev/null
SGE_STDOUT_PATH=/home/ippei/printenv.sh.o56
SGE_TASK_FIRST=undefined
SGE_TASK_ID=undefined
SGE_TASK_LAST=undefined
SGE_TASK_STEPSIZE=undefined
SHELL=/bin/sh
TERM=linux
TMP=/tmp/56.1.Ga.q
TMPDIR=/tmp/56.1.Ga.q
UPSTART_EVENTS=runlevel
UPSTART_INSTANCE=
UPSTART_JOB=rc
USER=ippei
VERBOSE=no
previous=N
runlevel=2

なんかは実行するたびに変化する。

pe で 1台指定だと、 以下が追加される。

PE=Ga.mpich2
PE_HOSTFILE=/var/spool/gridengine/execd/Ga03/active_jobs/55.1/pe_hostfile

2台指定だと、

NSLOTS=2
PE=Ga.mpich2
PE_HOSTFILE=/var/spool/gridengine/execd/Ga02/active_jobs/54.1/pe_hostfile

10.4 コマンド失敗したときのログ

コマンド失敗したときのログは、 /var/spool/gridengine/qmaster/messages に書き出される。 E.g.,

05/20/2014 15:14:45|worker|Ir|W|Modify operation can not be applied on job-array task 4973.1 in pending/hold state
05/20/2014 15:37:03|listen|Ir|E|commlib error: local host name error (IP based host name resolving "Re.calc.atom" doesn't match client host name from connect message "Re.atom")
05/20/2014 16:12:01|worker|Ir|E|denied: submit host "Re.calc.atom" does not exist
05/20/2014 16:12:17|worker|Ir|E|denied: submit host "Re.calc.atom" does not exist
05/20/2014 16:12:58|worker|Ir|E|denied: submit host "Re" does not exist
05/20/2014 16:13:08|worker|Ir|E|denied: submit host "Re" does not exist
05/20/2014 16:13:10|worker|Ir|E|denied: submit host "Re.atom" does not exist
05/20/2014 16:13:14|worker|Ir|E|denied: submit host "Re.calc.atom" does not exist

10.5 PE の slots を明に指定しない方法はなさそう

マニュアルページには、整数で指定しろ、としか書いてない。 ないんじゃないかな。

11 キューに入るけどジョブが実行されない。

11.1 sge_execd

特定のホストで負荷がかからない場合、 sge_execd が起動していない事がある。 sudo sge_execd で起動させてみた。 暫くすると サーバからジョブが飛んで負荷がかかった。

11.2 qconf -sh

Ir.calc.atom であるはずのところが、Ir.atom になっていたためにダメだったことがあった。

12 マスターサーバ再構築

Ir で qconf したときに以下のようなエラーが出るようになった。 たぶんデータベースが壊れてる。

error: commlib error: got select error (Connection refused)
unable to send message to qmaster using port 6444 on host "Ir.atom": got send error

作り直す。 が、情報の格納されるディレクトリを調べる。 locate gridengine で以下のようなのが挙がる。

/etc/default/gridengine に、以下のように書かれているので、ここが設定ファイルだろうか。 SGE_ROOT=/var/lib/gridengine

/var/spool/gridengine/qmaster/messages にログが残ってるな。 でもわからん。

apt-get remove --purge -y gridengine-master
apt-get remove --purge -y gridengine-client
rm -rf /var/spool/gridengine
apt-get install -y gridengine-master
apt-get install -y gridengine-client
qconf -sh # エラーなく「Ir.calc.atom」と出ることを確認。

qconf -as Ir.calc.atom

qconf -aq Fe.q
for i in Fe{00..04}; qconf -ae $i
qconf -ap Fe.openmpi

qconf -aq Fe.q すると、/var/spool/gridengine/spooldb 以下に書き込まれる模様。 ただし、バイナリファイルのデータベース