Posted at

GridEngineの管理者ガイド その1

More than 3 years have passed since last update.


GridEngineとは

GridEngineとはジョブスケジューラーの一種で,たくさんのバッチジョブを分散して実行することが出来ます.これにより,空いている計算機を探すようなことをせずとも自動的に計算を実行したり,計算機が埋まっている場合でも空き次第ジョブを実行することが出来ます.また,各種リソース制限もありますので,メモリをたくさん使用するようなジョブが1つのノードに集中することも避けられます.科学計算用のスパコンでよく使用されていて,結果がすぐに帰ってくる必要のない計算で今までのソフトウエア資源を使い回したいときに向いています.HadoopやSparkのように短時間で計算結果を返す必要のあるものには向いていません.

元々は Sun Microsystems がオープンソース版と商用版開発していましたが, Oracle の買収以来オープンソース版がなくなってしまいました.商用版もUnivaに売却されてしまいました.オープンソース時代のソースコードを元に開発がされていたプロジェクトとして,Open Grid SchedulerSon of Grid Engineなどがあります.どれも最近はリリースがなされていないので,プロジェクトの継続性が心配ではありますが,現在稼働中のGridEngine用アプリケーションを移植するような場合には有用です.

ここではCent OS 6向けにパッケージが提供されているSon of Grid Engineを用いてセットアップしてみます.


マスターノードのセットアップ

まずはマスターとなるノードをセットアップします.RedHat系だとCent OS 6向けにしかバイナリが提供されていないので,Cent OS 6をインストールしてください.ここでは簡単にするためにVagrantを用いてセットアップします.また,計算ノードも一緒にセットアップしています.

以下のファイルをVagrantfileとして適当な空のディレクトリに配置し,vagrant upを実行することで GridEngine のセットアップの下準備が自動的に完了します.(完全な自動ではないので,この下の特にNIS関係の部分を確認してください)

# -*- mode: ruby -*-

# vi: set ft=ruby :

Vagrant.configure(2) do |config|
config.vm.box = "bento/centos-6.7"
config.vm.provider "virtualbox" do |vb|
vb.memory = "1024"
end

config.vm.define "master" do |master|
master.vm.network "private_network", ip: "10.1.212.10"

master.vm.provision "shell", inline: <<-SHELL
# install gridengine
curl -s -O http://arc.liv.ac.uk/downloads/SGE/releases/8.1.8/gridengine-8.1.8-1.el6.x86_64.rpm
curl -s -O http://arc.liv.ac.uk/downloads/SGE/releases/8.1.8/gridengine-qmaster-8.1.8-1.el6.x86_64.rpm
curl -s -O http://arc.liv.ac.uk/downloads/SGE/releases/8.1.8/gridengine-execd-8.1.8-1.el6.x86_64.rpm
curl -s -O http://arc.liv.ac.uk/downloads/SGE/releases/8.1.8/gridengine-qmon-8.1.8-1.el6.x86_64.rpm

sudo rpm -i gridengine-8.1.8-1.el6.x86_64.rpm
sudo rpm -i gridengine-qmaster-8.1.8-1.el6.x86_64.rpm
sudo rpm -i gridengine-execd-8.1.8-1.el6.x86_64.rpm
sudo rpm -i gridengine-qmon-8.1.8-1.el6.x86_64.rpm

sudo useradd sge
sudo chown -R sge:sge /opt/sge

# change hostname
sudo sed -i -e 's/localhost/gmaster/g' /etc/sysconfig/network
sudo service network restart

# setup nfs
echo '/opt/sge 10.1.212.0/24(rw,root_squash)'|sudo tee /etc/exports
sudo chkconfig nfs on
sudo service nfs start

# setup NIS
sudo yum install -y ypserv
SHELL

end

config.vm.define "calc1" do |calc1|
calc1.vm.network "private_network", ip: "10.1.212.11"
calc1.vm.provision "shell", inline: <<-SHELL
# change hostname
sudo sed -i -e 's/localhost/gcalc1/g' /etc/sysconfig/network
sudo service network restart

# mount nfs
sudo service nfs start
sudo chkconfig nfs on
sudo mkdir -p /opt/sge
sudo mount -t nfs 10.1.212.10:/opt/sge /opt/sge
echo '10.1.212.10:/opt/sge /opt/sge nfs defaults 0 0'|sudo tee -a /etc/fstab

# setup NIS
sudo yum -y install ypbind
SHELL

end

config.vm.provision "shell", inline: <<-SHELL
sudo yum update -y
sudo yum install -y epel-release
sudo yum install -y jemalloc dkms
sudo yum install -y man csh perl perl-XML-Simple hwloc openmotif libXt xorg-x11-xauth xorg-x11-server-Xorg xorg-x11-fonts-ISO8859-1-100dpi xorg-x11-fonts-ISO8859-1-75dpi tcsh tcl xterm mailx nfs-utils

echo '10.1.212.10 gmaster gmaster.localdomain'|sudo tee -a /etc/hosts
echo '10.1.212.11 gcalc1 gcalc1.localdomain'|sudo tee -a /etc/hosts

echo "NISDOMAIN=grid.master"|sudo tee -a /etc/sysconfig/network
SHELL
end


必須ライブラリなどのインストール

この節は上のVagrantfileを使ったときには不要です.

まず,Grid Engineが必要とするライブラリなどをインストールします.このときにEPELが必要となりますので,リポジトリを追加します.

# EPELの有効化

sudo yum install -y epel-release
# EPELにあるライブラリのインストール(もし,VirtualBoxで試しているときはdkmsも入れておくと良い)
sudo yum install -y jemalloc
# その他の必要なライブラリのインストール
sudo yum install -y man csh perl perl-XML-Simple hwloc openmotif libXt xorg-x11-xauth xorg-x11-server-Xorg xorg-x11-fonts-ISO8859-1-100dpi xorg-x11-fonts-ISO8859-1-75dpi tcsh tcl xterm mailx nfs-utils


ホスト名の設定

この節は上のVagrantfileを使ったときには不要です.

次にhostsファイルを書き込みます.以下のものを/etc/hostsに追記してください.ホスト名やIPアドレスは今回のGridEngineに追加するノードに合わせて網羅しておいてください.

10.1.212.10 gmaster gmaster.localdomain

10.1.212.11 gcalc1 gcalc1.localdomain

ホスト名を変更します./etc/sysconfig/networkを開いて,HOSTNAME=localhost.localdomainHOSTNAME=gmaster.localdomainなどのように,今回設定するホスト名に合わせてセットアップしてください.


NFSの設定

この節は上のVagrantfileを使ったときには不要です.

Grid Engineの設定などを一部共有するためにNFSが必要になります./opt/sge以下を共有できるようにしておきます.以下の行を/etc/exportsに書き込んでください.

/opt/sge    10.1.212.0/24(rw,root_squash)

その上で以下のコマンドを実行し,サービスを開始します.

sudo chkconfig nfs on

sudo service nfs start


NISの設定


NISに必要なライブラリのインストールと設定ファイルの書き込み

この節は上のVagrantfileを使ったときには不要です.



  1. yum install ypservを実行し,必要なライブラリを追加する.


  2. /etc/sysconfig/networkNISDOMAIN=grid.masterを追加.


NISのセットアップ

この節は上のVagrantfileを使ったときにも必要です.

まず,設定を始める前に再起動します.その後,以下のコマンドを実行します.

sudo /usr/lib64/yp/ypinit -m

sudo service ypserv start
sudo service ypxfrd start
sudo service yppasswdd start
sudo chkconfig ypserv on
sudo chkconfig ypxfrd on
sudo chkconfig yppasswdd on

sudo /usr/lib64/yp/ypinit -mを実行すると

At this point, we have to construct a list of the hosts which will run NIS

servers. gmaster is in the list of NIS server hosts. Please continue to add
the names for the other hosts, one per line. When you are done with the
list, type a <control D>.
next host to add: gmaster
next host to add:

のような画面が最初に出てきますが,ここではControl-Dを押してください.次に

The current list of NIS servers looks like this:

gmaster

Is this correct? [y/n: y]

となったらyを押してEnterを押します.


GridEngineのインストール

この節は上のVagrantfileを使ったときには不要です.

以下のコマンドを実行し,必要なファイルのダウンロードとインストールを行います.またインストールされたディレクトリのOwnerを変更しておきます.

# download RPMs

curl -O http://arc.liv.ac.uk/downloads/SGE/releases/8.1.8/gridengine-8.1.8-1.el6.x86_64.rpm
curl -O http://arc.liv.ac.uk/downloads/SGE/releases/8.1.8/gridengine-qmaster-8.1.8-1.el6.x86_64.rpm
curl -O http://arc.liv.ac.uk/downloads/SGE/releases/8.1.8/gridengine-execd-8.1.8-1.el6.x86_64.rpm
curl -O http://arc.liv.ac.uk/downloads/SGE/releases/8.1.8/gridengine-qmon-8.1.8-1.el6.x86_64.rpm

# install RPMs
sudo rpm -i gridengine-8.1.8-1.el6.x86_64.rpm
sudo rpm -i gridengine-qmaster-8.1.8-1.el6.x86_64.rpm
sudo rpm -i gridengine-execd-8.1.8-1.el6.x86_64.rpm
sudo rpm -i gridengine-qmon-8.1.8-1.el6.x86_64.rpm

# Add user and change owner
sudo useradd sge
sudo chown -R sge:sge /opt/sge

これでGridEngineを使うためのマスターノード側の下準備は終了です.


計算ノードの設定


必須ライブラリなどのインストール

この節は上のVagrantfileを使ったときには不要です.マスターノードと同様にセットアップします.


ホスト名の設定

この節は上のVagrantfileを使ったときには不要です.マスターノードと同様にセットアップします./etc/sysconfig/networkのホスト名は計算ノードのものにしてください.


NFSの設定

この節は上のVagrantfileを使ったときには不要です.

マスターノードでセットアップしたNFSをマウントします.以下のように実行してください.

sudo service nfs start

sudo chkconfig nfs on
sudo mkdir -p /opt/sge
sudo mount -t nfs 10.1.212.10:/opt/sge /opt/sge

最後に,10.1.212.10:/opt/sge /opt/sge nfs defaults 0 0/etc/fstabに追記することで,再起動後にも自動的にマウントされるようにします.


NISの設定


NISに必要なライブラリのインストールと設定ファイルの書き込み

この節は上のVagrantfileを使ったときには不要です.



  1. yum install ypbindを実行し,必要なライブラリを追加する.


  2. /etc/sysconfig/networkNISDOMAIN=grid.masterを追加.


NISのセットアップ

この節は上のVagrantfileを使ったときにも必要です.

まず,設定を始める前に再起動します.その後,以下のコマンドを実行します.

sudo authconfig --enablenis --nisdomain=grid.master --nisserver=gmaster --update


GridEngineのセットアップ


マスターノードのセットアップ

まず,マスターノードのセットアップを開始します.マスターノードにログインし,rootになってください.そして,/opt/sgeに移動します.もし,Vagrantを使っている場合のrootパスワードはvagrantです.そして,./install_qmasterを実行し,インストーラーを立ち上げます.基本的にはエンターキーを押し続ければよいですが,途中で管理者のメールアドレスを聞かれますので,必要であれば登録しましょう.

001.png

002.png

003.png

004.png

005.png

006.png

007.png

008.png

009.png

010.png

011.png

012.png

013.png

014.png

015.png

016.png

017.png

018.png

019.png

020.png

021.png

022.png

023.png

024.png

025.png

026.png

027.png

028.png

029.png

030.png

最後に,echo 'source /opt/sge/default/common/settings.sh' > /etc/profile.d/gridengine.shを実行し,必要な環境変数が自動的に設定されるようにします.

これでマスターノードのセットアップは終了です.


計算ノードのセットアップ


GridEngineへノードとして追加

このコマンドはマスターで実行します.以下のコマンドを実行してGridEngineに追加する予定の計算ノードを登録します.もし,qconfが見つからないときはsource /opt/sge/default/common/settings.shを実行してください.

qconf -ah gcalc1


計算ノードでのセットアップ

この節のコマンドは計算ノードで実行します.rootになった上で/opt/sgeに移動します.その後,./install_execdを実行し,インストーラーを起動します.こちらもエンターキーを押し続ければ大丈夫ですが,以下にスクリーンショットをのせておきます.途中でPermissionエラーのようなことを言われたときには,おそらくNISに問題があります.

x01.png

x02.png

x03.png

x04.png

x05.png

x06.png

x07.png

x08.png

x09.png

x10.png

x11.png

x12.png

最後に,こちらのノードでもecho 'source /opt/sge/default/common/settings.sh' > /etc/profile.d/gridengine.shを実行し,必要な環境変数が自動的に設定されるようにします.

これで計算ノードのセットアップは終了です.無事終了している場合にはqhostを実行すると

[root@gmaster sge]# qhost

HOSTNAME ARCH NCPU NSOC NCOR NTHR LOAD MEMTOT MEMUSE SWAPTO SWAPUS
----------------------------------------------------------------------------------------------
global - - - - - - - - - -
gcalc1 lx-amd64 1 1 1 1 0.00 996.3M 106.6M 928.0M 0.0

と表示されるはずです.もし,qhostが見つからないときはsource /opt/sge/default/common/settings.shを実行してください.なお,あまりお勧めはされませんが,マスターノードと計算ノードは兼ねることもできます.


やり残したこと


  • 計算ノードから必要なファイルがきちんと見えるようにする必要があります.具体的にはホームディレクトリをNFSでマウントしましょう.

  • 各種リソース制限などを行っていません.