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

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

$ hostname
Rick
$ hostname -I
10.23.2.97 

2.2. /etc/hosts の編集

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

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

sudo nano /etc/hosts

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

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

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

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

2.3. ポートの確認

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

grep sge /etc/services

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

$ 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をインストールしようとすると、以下のようなエラーが出てインストールできません。

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のインストール

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

sudo apt install gridengine-client

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

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

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

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

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

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

3.2. gridengine-clientの修正

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

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

    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のシンボリックリンクを作成します。

    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 をインストールします

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

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

4. Gridengineの設定

4.1. sgeadminでの起動の確認

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

$ 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が起動するように設定しておきます

export EDITOR=gedit

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

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

sudo -u sgeadmin qconf -am $USER

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

sgeadmin@Rick added "kiyotaka" to manager list

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

qconf -au $USER users

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

added "kiyotaka" to access list "users"

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

qconf -as $HOSTNAME

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

Rick added to submit host list

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

qconf -ae

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

added host Rick to exec host list

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

qconf -ahgrp @allhosts

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

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

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

qconf -aattr hostgroup hostlist Rick @allhosts

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

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

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

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

以下の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キューの追加

qconf -aq all.q

ここでエディタが立ち上がります。slots はデフォルトで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

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

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

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

verylong.q

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

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

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

long.q

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

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

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

short.q

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

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

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

veryshort.q

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

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

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

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

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

以下の表示になります

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. 設定の確認

qstat -f

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

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.

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください