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のシンボリックリンクを作成します。
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
If this doesnt work, add
export SGE_ROOT=”/var/lib/gridengine”
to your ~/.bashrc
助かりました。ありがとうございました。
ご丁寧にありがとうございます。
Thank you! Thanks to google translate I was able to read this and get sge this installed. Please accept my sincere gratitude.
Thank you for your comment. Glad this article helped you install gridengine.