Simple Linux Utility for Resource Management 本家様 slurm
ジョブスケジューラ。SunGridEngineをいろいろ調整していたのだが、、、、良く分からん。
結局TORQUEを作ってみたが、ノード指定があるのに躊躇う。必要なコア数とメモリー量だけでノードが決まる代物が欲しくて調べてみた。

全体像

TORQUEと同じようにNIS/NFS環境で/home,/Applが共有され、計算ノードはn1,n2,n3の3台で、ジョブを投入するサイトが1台。
ジョブを管理するslurm管理ノードが1台とする。
皆ntpデーモンで時計が同期され、UIDとGIDが全てマシンで共有されている。OSは全てCentOS6
2014y12m21d_132425146.png

役目ホスト名IPアドレスcore数備考
管理ノードslurm.chaperone.jp192.168.0.571slurmctldが起動 nis参加は必須
計算ノードn1.chaperone.jp192.168.0.521slurmdが起動
openmpiは必須
n2.chaperone.jp192.168.0.532
n3.chaperone.jp192.168.0.543
ジョブ発行ノードclient.chaperone.jp192.168.0.201srun,sbatchの
他TORQUEコマンドも使用可能

NISのpasswd/groupにslurmユーザを追加します。

[root@slurm ~]# ypcat passwd |grep slurm
slurm:*:5000:5000:slurm:/var/lib/slurm:/bin/bash
[root@slurm ~]#

munge

全てのクラスターノード(slurm,n1,n2,n3,client)にmungeパッケージをインストールする。
標準リポジトリでは提供されていないようで、epelリポジトリを有効にしてインストールを行う。

[root@slurm ~]# rpm -Uvh http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
[root@slurm ~]# sed -i 's/enabled=1/enabled=0/' /etc/yum.repos.d/epel.repo
[root@slurm ~]# yum --enablerepo=epel install munge munge-libs
[root@slurm ~]# chkconfig munge on

*上記はslurmのみを書いている。n1,n2,n3,clientも同様にmungeパッケージのインストールを行う
次に、皆に同じmunge.keyを配布します。ここではslurmサイトでmunge.keyを作成してそれを配布する。

[root@slurm ~]# /usr/sbin/create-munge-key
[root@slurm ~]# scp /etc/munge/munge.key root@n1:/etc/munge/munge.key
[root@slurm ~]# ssh -l root n1 chown munge:munge /etc/munge/munge.key

*munge.keyファイルの所有者に留意する事

slurmパッケージ作成

http://slurm.schedmd.com/quickstart_admin.htmlを参照にしてみた。
PUIASリポジトリでCentOS向けのパッケージが置かれているのだが、自前で作る事にした。

[root@slurm ~]# yum groupinstall "Development tools" 
[root@slurm ~]# yum install gtk2-devel mysql-devel readline-devel numactl-devel hwloc-devel freeipmi-devel rrdtool-devel pam-devel
[root@slurm ~]# yum --enablerepo=epel install lua-devel hdf5-devel munge-devel
[root@slurm ~]# bzip2 -cd slurm-14.11.2.tar.bz2 | tar xf -  &&  cd slurm-14.11.2
[root@slurm slurm-14.11.2]#

このままconfigure,make,make installでもいいのだが、計算ノードすべてにこれらの手順を踏むのが面倒なので
rpmファイルを作って配布、インストールします。そのrpmファイルを作るために、必要なパッケージをインストールして
rpmファイルを作成します

[root@slurm ~]# yum install perl-ExtUtils-MakeMaker
[root@slurm ~]# rpmbuild -ta slurm-14.11.2.tar.bz2

作成されたrpmファイルは

[root@slurm ~]# ls -l rpmbuild/RPMS/x86_64/
合計 37472
-rw-r--r-- 1 root root 34609860 12月 21 14:02 2014 slurm-14.11.2-1.el6.x86_64.rpm
-rw-r--r-- 1 root root   139768 12月 21 14:02 2014 slurm-devel-14.11.2-1.el6.x86_64.rpm
-rw-r--r-- 1 root root    19116 12月 21 14:02 2014 slurm-munge-14.11.2-1.el6.x86_64.rpm
-rw-r--r-- 1 root root    13852 12月 21 14:02 2014 slurm-pam_slurm-14.11.2-1.el6.x86_64.rpm
-rw-r--r-- 1 root root   443024 12月 21 14:02 2014 slurm-perlapi-14.11.2-1.el6.x86_64.rpm
-rw-r--r-- 1 root root  1377928 12月 21 14:02 2014 slurm-plugins-14.11.2-1.el6.x86_64.rpm
-rw-r--r-- 1 root root     7676 12月 21 14:02 2014 slurm-sjobexit-14.11.2-1.el6.x86_64.rpm
-rw-r--r-- 1 root root    11544 12月 21 14:02 2014 slurm-sjstat-14.11.2-1.el6.x86_64.rpm
-rw-r--r-- 1 root root     6200 12月 21 14:02 2014 slurm-slurmdb-direct-14.11.2-1.el6.x86_64.rpm
-rw-r--r-- 1 root root  1331572 12月 21 14:02 2014 slurm-slurmdbd-14.11.2-1.el6.x86_64.rpm
-rw-r--r-- 1 root root   344916 12月 21 14:02 2014 slurm-sql-14.11.2-1.el6.x86_64.rpm
-rw-r--r-- 1 root root    39588 12月 21 14:02 2014 slurm-torque-14.11.2-1.el6.x86_64.rpm
[root@slurm ~]#

と結構な数。それぞれのrpmファイルに何が入っているかはrpm -qlpiにて確認できる
管理ノード、計算ノード、ジョブ投入ノードで必要なパッケージは下記でよさげ。全部入れても構わない。

パッケージSummary備考管理ノード計算ノードジョブ投入ノードSlurmdbdノード
slurmSlurm Workload Manager/etc/init.d/slurmを持つ
slurmdとslurmctldを含む
slurm-develDevelopment package for Slurmヘッダーファイルらがある
slurm-mungeSlurm authentication and crypto
implementation using Munge
slurm-pam_slurmPAM module for restricting access
to compute nodes via Slurm
slurm-perlapiPerl API to Slurm
slurm-pluginsSlurm plugins
(loadable shared objects)
設定ファイルで適用可能
slurm-sjobexitSlurm job exit code
management tools
完了ジョブのexit codeを調整
slurm-sjstatPerl tool to print
Slurm job state information
slurm-slurmdb-directWrappers to write directly
to the slurmdb
slurm-slurmdbdSlurm database daemon/etc/init.d/slurmdbdが提供
slurm-sqlSlurm SQL support
slurm-torqueTorque/PBS wrappers for transitition
from Torque/PBS to Slurm
qsub,qstatとか

*複数のqlurmクラスターを持ってデータベースで一元的にジョブの投入状況を見たいならslurm-slurmdbdらが必要みたい。ここではファイルベースでまずは試したいのでslurm-slurmdbdらを使わずに構築を進めてみる。

1. 管理ノードにslurmをインストール

slurmパッケージを構築した管理ノードでは、下記パッケージをインストールする
*全部のパッケージをインストールしても構わない

[root@slurm ~]# cd /root/rpmbuild/RPMS/x86_64
[root@slurm x86_64]# yum localinstall \
   ./slurm-14.11.2-1.el6.x86_64.rpm \
   ./slurm-plugins-14.11.2-1.el6.x86_64.rpm \
   ./slurm-munge-14.11.2-1.el6.x86_64.rpm
[root@slurm x86_64]#

稼働に必要なフォルダ類は別途作成して、所有者をslurm:slurmに変更しておく。そして、設定ファイルを調整する
設定ファイルの調整

[root@slurm ~]# mkdir -p /var/lib/slurm/spool /var/log/slurm
[root@slurm ~]# chown -R slurm:slurm /var/lib/slurm /var/log/slurm
 
[root@slurm ~]# cp /etc/slurm/slurm.conf.example /etc/slurm/slurm.conf

調整の例:slurm/slurm.conf
インストールが完了すると、起動デーモンにslurmが登録される。mungeデーモンを起動させ、slurmを起動させます。

[root@slurm ~]# chkconfig | egrep "slurm|munge"
munge           0:off   1:off   2:on    3:on    4:on    5:on    6:off
slurm           0:off   1:off   2:on    3:on    4:on    5:on    6:off
[root@slurm ~]# /etc/init.d/munge start
[root@slurm ~]# /etc/init.d/slurm start

2. 計算ノードにslurmをインストール

rpmパッケージを計算ノードにコピーしてインストール。品目は管理ノードと同じでOKみたい。

[root@slurm ~]# cd rpmbuild/RPMS/x86_64/
[root@slurm x86_64]#
[root@slurm x86_64]# scp \
   ./slurm-14.11.2-1.el6.x86_64.rpm \
   ./slurm-plugins-14.11.2-1.el6.x86_64.rpm \
   ./slurm-munge-14.11.2-1.el6.x86_64.rpm \
root@n1:
 
[root@slurm x86_64]#
[root@n1 ~]# yum --enablerepo=epel install hdf5
[root@n1 ~]# yum localinstall \
    ./slurm-14.11.2-1.el6.x86_64.rpm \
    ./slurm-plugins-14.11.2-1.el6.x86_64.rpm \
    ./slurm-munge-14.11.2-1.el6.x86_64.rpm
[root@n1 ~]# mkdir -p /var/lib/slurm/spool /var/log/slurm
[root@n1 ~]# chown -R slurm:slurm /var/lib/slurm /var/log/slurm

設定ファイルはslurmサイトのを引き継ぐ

[root@slurm ~]# scp /etc/slurm/slurm.conf root@n1:/etc/slurm/slurm.conf

そして計算ノードを稼働させる

[root@n1 ~]# /etc/init.d/munge start
[root@n1 ~]# /etc/init.d/slurm start

3. ジョブ投入ノードにslurmをインストール

rpmパッケージをコピーしてインストール。

[root@client ~]# yum --enablerepo=epel install hdf5
[root@client ~]# yum localinstall \
    ./slurm-14.11.2-1.el6.x86_64.rpm \
    ./slurm-plugins-14.11.2-1.el6.x86_64.rpm \
    ./slurm-munge-14.11.2-1.el6.x86_64.rpm \
    ./slurm-torque-14.11.2-1.el6.x86_64.rpm \
    ./slurm-perlapi-14.11.2-1.el6.x86_64.rpm \
    ./slurm-sjobexit-14.11.2-1.el6.x86_64.rpm \
    ./slurm-sjstat-14.11.2-1.el6.x86_64.rpm
[root@client ~]# mkdir -p /var/lib/slurm/spool /var/log/slurm
[root@client ~]# chown -R slurm:slurm /var/lib/slurm /var/log/slurm
[root@client ~]# /etc/init.d/munge start

slurm関係のデーモンを起動する必要はないです。

実行テスト

簡単なテストを行ってみます。
まずclientにslurm-torqueをインストールしたため、基本TORQUEのコマンドは使用可能です。

[saber@client ~]$ pbsnodes
n1
    state = free
    np = 1
    ntype = cluster
    status = rectime=1420122045,state=free,slurmstate=idle,size=0kb:0kb,ncpus=1,boards=1,sockets=1,cores=1,threads=1,(略
 
n2
    state = free
    np = 2
    ntype = cluster
    status = rectime=1420122045,state=free,slurmstate=idle,size=0kb:0kb,ncpus=2,boards=1,sockets=2,cores=1,threads=1,(略
 
n3
    state = free
    np = 3
    ntype = cluster
    status = rectime=1420122045,state=free,slurmstate=idle,size=0kb:0kb,ncpus=3,boards=1,sockets=3,cores=1,threads=1,(略
 
[saber@client ~]$
[saber@client ~]$ sinfo -l
Fri Jan  2 00:27:15 2015
PARTITION AVAIL  TIMELIMIT   JOB_SIZE ROOT    SHARE     GROUPS  NODES       STATE NODELIST
batch*       up   infinite 1-infinite   no       NO        all      3        idle n[1-3]
debug     inact    1:00:00 1-infinite   no       NO        all      1        idle n1
[saber@client ~]$

な感じで。
バッチジョブファイルを作ってみます。
http://www.ceci-hpc.be/slurm_tutorial.htmlこのサイトが非常に分かりやすかったです。
slurmでの[task]はプロセスと読み替えて、1つのジョブを2MPIプロセスで処理させるのなら-ntasks=2。1つのジョブを2スレッドで処理させるのなら--cpus-per-task=2と定義する。

[saber@client ~]$ vi a.sh
#SBATCH -J test_run           # --job-name=test_run
#SBATCH -o output_%j.txt      # --output=output_test_run.txt
#SBATCH -e errors_%j.txt      # --error=errors_test_run.txt
#SBATCH -p batch              # いわゆる使用するキュー名
#SBATCH -n 4                  # --ntasks=4 このジョブで4プロセスを実行する
#SBATCH -c 2                  # --cpus-per-task=2 1プロセス当たり2core使用する
 
mpirun mpirun.exe
[saber@client ~]$
[saber@client ~]$ sbatch a.sh    #これで実行される

Not responding

上手く動かない場合

[root@client ~]# pbsnodes
n1
    state = down
    np = 1
    ntype = cluster
    status = rectime=1419919109,state=down,slurmstate=down,size=0kb:0kb,(略
    note = Not responding
 
[root@client ~]#

と表示されるのなら

[root@slurm ~]# /etc/init.d/slurm startclean

と実施してみる


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2015-01-02 (金) 00:34:35 (960d)