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

Torque:
   queue名称 + node(マシン数) + ppn(processors per node)
 
Slurm:
   queue名称 + ntasks(MPI数)

計算ノード/queue設定slurm/slurm.conf

参照先https://wiki.fysik.dtu.dk/niflheim/SLURM

全体像

TORQUEと同じようにsamba AD or NIS, LDAP/NFS環境で/home,/Applが共有され、計算ノードはn1,n2,n3の3台で、ジョブを投入するサイトが1台。
ジョブを管理するslurm管理ノードが1台とする。
各ノードはsamba(or nis, ldap)に登録されてホスト情報は共有する. アカウント情報も共有します. 登録方法はsamba/Linux参加とか参照

各マシンの時計は chrony or ntp とかで同期され、各マシンのOSは全てCentOS 7とします
2014y12m21d_132425146.png

役目ホスト名IPアドレスcore数備考
管理ノードslurm192.168.0.691slurmctldが起動
計算ノードn1192.168.0.521slurmdが起動
n2192.168.0.532
n3192.168.0.543
ジョブ発行ノードslurm-client192.168.0.201srun,sbatchの
他TORQUEコマンドも使用可能

queue構成

queue名対象ノード備考
workqn1,n2,n3
gpue
GPUカード1枚
gpuノード

下拵え:共通アカウントの作成とmungeのインストール

共通アカウントslurmmungeを用意します。samba/ユーザ登録とかNIS#df5a057bとかLDAP/dataとかで

ユーザ名UIDGIDホームディレクトリlogin shellコマンド(nisの場合)
slurm50005000/var/lib/slurm/sbin/nologingroupadd -g 5000 slurm
useradd -d /var/lib/slurm -s /sbin/nologin -u 5000 -g slurm slurm
munge50015001/var/lib/munge/bin/bashgroupadd -g 5001 munge
useradd -d /var/lib/munge -s /bin/bash -u 5001 -g munge munge

*mungeはyumでインストールした際にUID 1000以下でアカウントを作りますが、インストール前に1000以上でアカウントを作ります

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

[root@slurm ~]# yum install epel-release
[root@slurm ~]# yum install munge munge-libs

次に、munge.key(/etc/munge/munge.key)を作成して、mungeデーモンを起動させる

[root@slurm ~]# /usr/sbin/create-munge-key
Generating a pseudo-random key using /dev/urandom completed.
 
[root@slurm ~]# ls -l /etc/munge/
total 4
-r--------. 1 munge munge 1024 Apr 18 16:21 munge.key
 
[root@slurm ~]# systemctl enable munge.service
[root@slurm ~]# systemctl start munge.service

この作成したmunge.keyをクラスターに参加する全てのマシンに配布します
*n1,n2,n3,clientも同様にmungeパッケージのインストールも行う

例えば n1.sybyl.local マシンに対して、

[root@slurm ~]# ssh -l root n1 'yum install epel-release -y && yum install munge munge-libs -y'
[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サーバにAnsibleを入れて全参加ノードを仕立てさせた方がいいかも

slurmパッケージの構築とインストール

パッケージ作成 slurm/rpmbuild *epelリポジトリで公開済みなので作らなくてもいいみたい

パッケージインストール slurm/install

恐らく複数台になると思うので ansible を作ってみた slurm/ansible

gpu対応slurm/gpu

実行テスト

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

[illya@client ~]$ pbsnodes
n1
    state = free
    np = 1
    ntype = cluster
    status = rectime=1506418902,state=free,slurmstate=idle,size=0kb:0kb,ncpus=1,boards=1,sockets=1,(略
 
n2
    state = free
    np = 2
    ntype = cluster
    status = rectime=1506418902,state=free,slurmstate=idle,size=0kb:0kb,ncpus=2,boards=1,sockets=2,(略
 
n3
    state = free
    np = 3
    ntype = cluster
    status = rectime=1506418902,state=free,slurmstate=idle,size=0kb:0kb,ncpus=3,boards=1,sockets=3,(略
 
[illya@client ~]$
[illya@client ~]$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
batch*       up   infinite      3   idle n[1-3]
debug     inact    1:00:00      1   idle n1
[illya@client ~]$ sinfo -N -l
Tue Sep 26 18:42:47 2017
NODELIST   NODES PARTITION       STATE CPUS    S:C:T MEMORY TMP_DISK WEIGHT AVAIL_FE REASON
n1             1     debug        idle    1    1:1:1      1        0      1   (null) none
n1             1    batch*        idle    1    1:1:1      1        0      1   (null) none
n2             1    batch*        idle    2    2:1:1      1        0      1   (null) none
n3             1    batch*        idle    3    3:1:1      1        0      1   (null) none
[illya@client ~]$

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

[illya@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
[illya@client ~]$
[illya@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 ~]# systemctl stop slurmctld
[root@slurm ~]# slurmctld -c -D
 :
 :
<Ctrl+C>で中断
 
[root@slurm ~]# systemctl start slurmctld

と実施してみる
*以前は「/etc/init.d/slurm startclean」でOKだったのに...

構築における留意点

mungeのuid/gidは「yum install」で行うと1000番以内で発行される. それはそれで構わないのだが、
他のノード、計算ノード、ジョブ発行ノードでも同じuid/gidとは限らない. なのでnis/samba-adで共通アカウントを
作ってそこで任せた方がいいかも知れない.

その際、既にmungeが入っている場合は「/var/lib/munge」、「/run/munge」、「/var/log/munge」のuid/gidに注意が必要.

firewall, SELinuxは有効でも実行できる.
SELinuxの場合は home が nfs な事で「setsebool -P use_nfs_home_dirs 1」を全ノードで有効にする必要がある.

PrologおよびEpilog


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2021-05-13 (木) 04:18:03 (4d)