Gridengine の Ubuntu 18.04LTS へのインストール方法

1. はじめに

FSLやそれを利用したHCPパイプラインでは、計算を高速化するためにCPUあるいはGPUを介した並列分散処理を行います。CPUの並列分散化には、Sun Microsystemsが開発していたオープンソースのSun Grid Engine(SGE)が使われます。しかし、同社は2010年にOracleが買収し、ソースコードがクローズドになってしまいました(現在はUnivaが引き継いでいますが、これもクローズドです)。これを受けて、リバプール大のグループがSun Grid Engineのオープンソースの最終版である6.2u5をベースに、オープンソースでの開発を継続し、Son of Grid Engineとして公開しています。(https://arc.liv.ac.uk/trac/SGE/wiki )しかし、Son of Grid Engineも2016年を最後に開発が停止しています。一方、Debian/Ubuntu系では、”gridengine” として同様の試みがなされてきており、現在も開発が継続されています。そこで、Ubuntu18.04LTSへのgridengineのインストール方法について紹介します。なお、本稿は京都大学精神科の宮田淳先生が作成した「Son of Grid EngineのUbuntu18.04LTSへのインストール方法」をベースに、筑波大学精神科の根本清貴が改変したものです。この場を借りて宮田淳先生に御礼申し上げます。なお根本は(もちろん宮田先生も)本マニュアルの内容に関して一切の責任を負いません。あくまで自己責任でこのマニュアルをご使用下さい。

2. 環境・条件

Ubuntu18.04に、スタンドアローンとしてgridengineをインストールした際の手順を記します。主に以下のウェブサイトを参照しました。

https://fsl.fmrib.ox.ac.uk/fsl/fslwiki/FslSge
https://launchpad.net/ubuntu/+source/gridengine

基本事項として、SGE(および派生ソフトすべて)はもともと、ネットワーク内にあるたくさんのマシンをつないでクラスター化し、並列分散処理により計算力を増幅する目的で設計されています。そのためには各マシンがネットワーク上で互いに連絡し合う必要があり、この時に使われるのがホスト名(マシンのネットワーク上での名前)です。このため、ホスト名とIPアドレスを把握する必要があります。また、SGE用のポートがあいているかどうかを確認します。

2.1. ホスト名、IPアドレスの確認

ホスト名およびIPアドレスは以下のコマンドで確認できます。

  • ホスト名 hostname

  • そのホストが使用しているIPアドレス hostname -I

筆者の環境では以下のとおりであったため、今後は、これで説明していきます。($で始まる行は、実際に入力した行です)

1
2
3
4
$ hostname
Rick
$ hostname -I
10.23.2.97

2.2. /etc/hosts の編集

Gridengineを使う場合、/etc/hostsを編集する必要があります。

ターミナルから以下のようにタイプします。

1
sudo nano /etc/hosts

すると、以下のような画面になります

ここで、 127.0.1.1 Rickとなっているところが問題となります。先ほど得られたIPアドレスに変更します。

ちなみに行頭に半角#をつけると、コメントになるため、元々の表記はコメントで扱うこととします。 以下のようになります。

Ctrl-Oで保存し、Ctrl-Xで終了します。この後、この設定を反映するためにシステムを再起動します。

2.3. ポートの確認

上記で説明した様に、ネットワークを介して情報をやりとりするために、SGE専用のポートがデフォルトで設定されています。ターミナルから

1
grep sge /etc/services

とタイプし、以下の表示がなされるかどうかを確認します。

1
2
3
4
5
$ grep sge /etc/services
sge-qmaster        6444/tcp        sge_qmaster        # Grid Engine Qmaster Service
sge-qmaster        6444/udp        sge_qmaster
sge-execd        6445/tcp        sge_execd        # Grid Engine Execution Service
sge-execd        6445/udp        sge_execd

3. Gridengineのインストール

これからgridengineをインストールします。しかし、gridengine-masterをインストールしようとすると、以下のようなエラーが出てインストールできません。

1
gridengine-master package post-installation script subprocess returned error exit status 139

このバグに対するworkaroundは以下に記載されています https://bugs.launchpad.net/ubuntu/+source/gridengine/+bug/1774302

以下の方法をとることで回避できます。 なお、gridengineのインストールにあたっては、SGEと違い、sgeadminは作成する必要はありません。インストーラーが自動で作成します。

3.1. gridengine-clientのインストール

以下のコマンドでインストールします

1
sudo apt install gridengine-client

インストールの途中で以下の画面が出ます

この画面は、メール設定ですので、「設定なし」を選んでEnterを押します

これはデフォルトのままでよいので、そのままEnterを押します。

これもデフォルトのまま default でよいので、Enterを押します。

マスターホスト名は、先ほど自分で調べたホスト名です。筆者の場合はRickと入力し、Enterを押しました。

これで gridengine-client のインストールは終了します。

3.2. gridengine-clientの修正

gridengine-clientのファイルにgridengine-masterのインストールを阻害するファイルがあるバグが知られています。これを回避するために、以下の作業を行います。

  • Debian版のgridengine-clientのパッケージを入手
  • ターミナルに以下をコピペし、問題が修正されているファイルを入手します。

    1
    2
    3
    4
    5
    6
    cd Downloads #ダウンロードディレクトリに移動
    wget http://ftp.debian.org/debian/pool/main/g/gridengine/gridengine-client_8.1.9+dfsg-9_amd64.deb #wgetでファイルを入手
    mkdir gec #任意の名前のディレクトリを作成、今の場合はgec
    dpkg -X gridengine-client_8.1.9+dfsg-9_amd64.deb gec #debファイルの中身を展開
    cd gec/usr/lib/gridengine #gridengineのライブラリがインストールされているディレクトリに移動
    sudo cp libspoolb.so libspoolc.so spooldefaults.bin /usr/lib/gridengine #ファイルの置き換え
  • libjemalloc.so.2のシンボリックリンクを作成
  • ターミナルに以下をコピペし、libjemalloc.so.2のシンボリックリンクを作成します。

    1
    2
    cd /usr/lib/x86_64-linux-gnu
    sudo ln -s libjemalloc.so.1 libjemalloc.so.2

3.3. gridengine-masterとその他のファイルをインストール

以下のコマンドで、gridengine-master, gridengine-qmon, gridengine-exec をインストールします

1
sudo apt install gridengine-master gridengine-qmon gridengine-exec

これでクラスタ設定が自動で行われます。(再起動は不要かもしれませんが)、ここで一度再起動を行います。

4. Gridengineの設定

4.1. sgeadminでの起動の確認

qmaster, execdともにsgeadminアカウントから起動する必要があります。Ubuntuの場合、自動で設定されるため、エラーはないと考えられますが、ps aux | grep sgeで確認できます。

1
2
3
$ ps aux | grep sge
sgeadmin  1398  0.0  0.0 211436 11888 ?        Sl   07:26   0:04 /usr/lib/gridengine/sge_qmaster
sgeadmin  9060  0.0  0.0 163144  6108 ?        Sl   09:49   0:00 /usr/lib/gridengine/sge_execd

sge_qmaster, sge_execdの行頭が sgeadmin になっていれば大丈夫です。

以下、/usr/share/doc/gridengine-common/README.Debian に従った設定を行っていきます

最初にエディタでgeditが起動するように設定しておきます

1
export EDITOR=gedit

4.2. マネージャーとなるユーザーのマネージャーリストへの追加

gridengineの設定および操作ができるユーザーをマネージャーとして追加します。

1
sudo -u sgeadmin qconf -am $USER

以下のような表示になり、無事にマネージャーリストに追加されたことがわかります。

1
sgeadmin@Rick added "kiyotaka" to manager list

4.3. ユーザーアカウントをユーザーリストに追加

1
qconf -au $USER users

以下のような表示になり、ユーザーリストに追加されたことがわかります

1
added "kiyotaka" to access list "users"

4.4. クライアントをサブミットホストとして追加

1
qconf -as $HOSTNAME

以下のような表示になります。

1
Rick added to submit host list

4.5. クライアントを実行ホストとして追加

1
qconf -ae

ここでエディタが起動します。 hostname の template → ホスト名に変更して、保存すると、以下が表示されます。

1
added host Rick to exec host list

4.6. 新規ホストグループを追加

1
qconf -ahgrp @allhosts

以下のような表示になります

1
kiyotaka@Rick added "@allhosts" to host group list

4.7. 実行ホストを@allhosts リストに追加

1
qconf -aattr hostgroup hostlist Rick @allhosts

以下のような表示になります

1
kiyotaka@Rick modified "@allhosts" in host group list

4.8. 並列環境のインストール

1
for pe in /usr/share/gridengine/util/resources/pe/*; do qconf -Ap $pe; done

以下の3行が表示されます

1
2
3
kiyotaka@Rick added make to parallel environment list
kiyotaka@Rick added mpi to parallel environment list
kiyotaka@Rick added smp to parallel environment list

5. キューの追加・設定

5.1. all.qキューの追加

1
qconf -aq all.q

ここでエディタが立ち上がります。slots はデフォルトで1になっていますが、これを使用したいコア数に変更します。そして、保存します。そうすると、ターミナルに以下が表示されます。

1
kiyotaka@Rick added "all.q" to cluster queue list

5.2. キューの修正および追加

今、作成したall.qをベースにして、以下のようにパラメータを変更します

キュー 項目 変更前 変更後
all.q priority 0 20
shell_start_mode posix_compliant unix_behavior
verylong.q qname all.q verylong.q
long.q qname all.q long.q
priority 20 15
short.q qname all.q short.q
priority 20 10
veryshort.q qname all.q veryshort.q
priority 20 5

方針として、以下のようにします。

  • qconf -sq all.q の後に sed でパラメータの変更を行い、それらを /tmp に、 q.tmp という名前で保存する。
  • q.tmp を利用して、{verylong,long,short,veryshort}.q を設定し、追加する。

all.q

1
2
3
qconf -sq all.q | sed -e 's/posix_compliant/unix_behavior/' | \
 sed -e 's/priority *0/priority 20/' > /tmp/q.tmp
qconf -Mq /tmp/q.tmp

ターミナルに以下が表示されます

1
kiyotaka@Rick modified "all.q" in cluster queue list

verylong.q

1
2
sed -e 's/all.q/verylong.q/' /tmp/q.tmp > /tmp/verylong.q
qconf -Aq /tmp/verylong.q

ターミナルに以下が表示されます

1
kiyotaka@Rick added "verylong.q" to cluster queue list

long.q

1
2
3
sed -e 's/all.q/long.q/' /tmp/q.tmp | \
 sed -e 's/priority *20/priority 15/' > /tmp/long.q
qconf -Aq /tmp/long.q

ターミナルに以下が表示されます

1
kiyotaka@Rick added "long.q" to cluster queue list

short.q

1
2
3
sed -e 's/all.q/short.q/' /tmp/q.tmp | \
 sed -e 's/priority *20/priority 10/' > /tmp/short.q
qconf -Aq /tmp/short.q

ターミナルに以下が表示されます

1
kiyotaka@Rick added "short.q" to cluster queue list

veryshort.q

1
2
3
sed -e 's/all.q/veryshort.q/' /tmp/q.tmp | \
 sed -e 's/priority *20/priority 5/' > /tmp/veryshort.q
qconf -Aq /tmp/veryshort.q

ターミナルに以下が表示されます

1
kiyotaka@Rick added "veryshort.q" to cluster queue list

5.3. ホストグループをキューに追加

1
qconf -aattr queue hostlist @allhosts all.q verylong.q long.q short.q veryshort.q

以下の表示になります

1
2
3
4
5
kiyotaka@Rick modified "all.q" in cluster queue list
kiyotaka@Rick modified "verylong.q" in cluster queue list
kiyotaka@Rick modified "long.q" in cluster queue list
kiyotaka@Rick modified "short.q" in cluster queue list
kiyotaka@Rick modified "veryshort.q" in cluster queue list

5.4. 設定の確認

1
qstat -f

以下のような表示になっていれば正しく設定されています

01
02
03
04
05
06
07
08
09
10
11
queuename                      qtype resv/used/tot. load_avg arch          states
---------------------------------------------------------------------------------
all.q@Rick                     BIP   0/0/1          0.59     lx-amd64     
---------------------------------------------------------------------------------
long.q@Rick                    BIP   0/0/1          0.59     lx-amd64     
---------------------------------------------------------------------------------
short.q@Rick                   BIP   0/0/1          0.59     lx-amd64     
---------------------------------------------------------------------------------
verylong.q@Rick                BIP   0/0/1          0.59     lx-amd64     
---------------------------------------------------------------------------------
veryshort.q@Rick               BIP   0/0/1          0.59     lx-amd64           

Gridengine の Ubuntu 18.04LTS へのインストール方法” へのコメント

  1. Thank you! Thanks to google translate I was able to read this and get sge this installed. Please accept my sincere gratitude.

kiyotaka へ返信するコメントをキャンセル

This site uses Akismet to reduce spam. Learn how your comment data is processed.