パッケージインストール

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

パッケージSummary備考管理ノード計算ノードジョブ投入ノードSlurmdbdノード
slurmSlurm Workload Managersystemctl対応
slurmdとslurmctldを含む
slurm-contribsPerl tool to print Slurm job state informationslurm-perlapiが必須---
slurm-develDevelopment package for Slurmヘッダーファイルを含む---
slurm-perlapiPerl API to Slurm--
slurm-torqueTorque/PBS wrappers for transitition
from Torque/PBS to Slurm
ラッパープログラム
qsub,qstatとか
slurm-perlapiが必須
--
slurm-openlavaopenlava/LSF wrappers for transitition
from OpenLava/LSF to Slurm
ラッパープログラム
slurm-perlapiが必須
-
slurm-slurmdbdSlurm database daemonsystemctl対応
slurmdbd
slurm-sqlSlurm SQL support
slurm-pam_slurmPAM module for restricting access
to compute nodes via Slurm
pam_slurm.so
pam_slurm_adopt.so

Obsoletes: slurm-lua slurm-munge slurm-plugins

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

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

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

[root@slurm ~]# yum install epel-release
[root@slurm ~]# yum localinstall slurm-20.11.2-1.el7.x86_64.rpm munge 

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

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

調整の例:slurm/slurm.conf
留意 このslurm.confで計算ノードとqueueの定義が行われる

インストールが完了すると、起動デーモンにslurmctldslurmdが登録される。
slurmctldは「Slurm controller daemon」
slurmdは「Slurm node daemon」

[root@slurm ~]# systemctl enable munge slurmctld 
[root@slurm ~]# systemctl start munge slurmctld

StateSaveLocationの場所(「/var/lib/slurm/ctld」)に各種のstateファイルが置かれます。

この段階で、sinfoとかで確認が出来る

[root@slurm ~]# sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
batch*       up   infinite      3   unk* n[1-3]
debug     inact    1:00:00      1   unk* n1
[root@slurm ~]#
[root@slurm ~]# sinfo -N -l
Tue Sep 26 16:39:05 2017
NODELIST   NODES PARTITION       STATE CPUS    S:C:T MEMORY TMP_DISK WEIGHT AVAIL_FE REASON
n1             1     debug    unknown*    1    1:1:1      1        0      1   (null) none
n1             1    batch*    unknown*    1    1:1:1      1        0      1   (null) none
n2             1    batch*    unknown*    2    2:1:1      1        0      1   (null) none
n3             1    batch*    unknown*    3    3:1:1      1        0      1   (null) none
[root@slurm ~]#

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

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

[root@n1 ~]# yum localinstall \
      ./slurm-17.02.7-1.el7.centos.x86_64.rpm \
      ./slurm-munge-17.02.7-1.el7.centos.x86_64.rpm \
      ./slurm-plugins-17.02.7-1.el7.centos.x86_64.rpm
 
[root@n1 ~]# mkdir -p /var/lib/slurm/spool /var/log/slurm
[root@n1 ~]# chown -R slurmuser:slurm /var/lib/slurm /var/log/slurm

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

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

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

[root@n1 ~]# systemctl enable munge slurmd
[root@n1 ~]# systemctl start munge slurmd

*他全ての計算ノードも同じように設定する。
考えるに、、、slurm.confの共通が求められるって計算ノードはdisklessClusterを念頭にしているような..

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

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

[root@client ~]# yum localinstall \
      ./slurm-17.02.7-1.el7.centos.x86_64.rpm \
      ./slurm-munge-17.02.7-1.el7.centos.x86_64.rpm \
      ./slurm-plugins-17.02.7-1.el7.centos.x86_64.rpm
 
[root@client ~]# systemctl enable munge
[root@client ~]# systemctl start munge

ジョブ投入ノードで稼動する関連デーモンは munge だけです
slurm関係のデーモンを起動する必要はないです

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

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

実行テスト

簡単なテストを行ってみます。
まず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だったのに...


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2021-01-16 (土) 08:05:46 (41d)