Ubuntu 20.4 에 SLURM 스케줄러 설치하기

By | 2021년 07월 30일

update: 10/12/2023

0. 준비

클러스터에 slurm을 설치할 때 munge도 같이 설치되는데 munge는 서버-노드 간 인증과 관련된 프로그램이다. munge 프로그램 실행 시 사용자 munge 가 권한을 갖고 프로그램을 실행하게 된다. 각 노드 컴퓨터에서 사용자는 계정을 만들 때 부여된 고유의 번호로 구분되는데 만약 각 노드에 만들어진 munge 사용자가 다른 고유번호를 갖고 있으면 서로 정보를 주고 받을 때 문제가 발생하게 된다. 그래서 먼저 각 노드에 munge 사용자가 같은 고유번호 (uid)를 갖도록 만들어 줄 필요가 있다.

크러스터에 속한 각 노드에서 다음의 명령을 실행한다.

 sudo groupadd -g 991 munge
 sudo useradd -u 991 munge

1. SLURM 설치 - 통제컴퓨터 (master)

통제컴퓨터(master computer)에 slurmctld 을 설치하고 필요에 따라 클라이언트 slurmd 를 설치한다.

먼저 페키지 메타데이타를 업데이트한다.

sudo apt update

그고 SLURM workloard Manager 를 설치한다.

sudo apt install slurm-wlm 

SLURM 문서 패키지를 설치한다.

sudo apt install slurm-wlm-doc

문서 편집기를 사용하여 다음의 두파일을 수정한다.

sudo apt install vim
sudo vim /lib/systemd/system/slurmctld.service

다음을 수정하여 준다.

ConditionPathExists=/etc/slurm-llnl/slurm.conf
PIDFile=/var/run/slurm-llnl/slurmctld.pid

client를 설치한 경우

sudo vim /lib/systemd/system/slurmd.service

ConditionPathExists=/etc/slurm-llnl/slurm.conf
PIDFile=/var/run/slurm-llnl/slurmd.pid

로 수정하고 저장한다.

2. slurm.conf 를 설정

sudo dpkg -L slurm-wlm-doc

를 실행하여 configurator.easy.html 의 위치를 확인한다.

Hostname이 필요한데 /etc/hosts 파일내에 있는 127.0.1.1 의 이름을 사용한다. Hostname이 없는 상태이고 이름을 ruby 로 하려면 아래와 같이 수정한다.

127.0.0.1 localhost
127.0.1.1 ruby

그리고 /etc/hostname 을

alpha 

로 변경하고, /etc/machine-name 내용을

PRETTY_HOSTNAME=alpha

로 수정한다.

이제 다음의 명령을 실행한다.

firefox /usr/share/doc/slurm-wlm/html/configurator.easy.html

웹브라우져 화면에사 다음과 같이 입력 또는 선택한다.

Control Machine
SlurmctldHost --> 'hostname'
Compute Machine
NodeName --> 'hostname'
NodeAddr --> empty
PartitionName --> jobs
MaxTime --> INFINITE

CPUs --> 사용가능 CPU 수 (core * thread)
Sockets --> board 상 physical chip의 수
CorePerSocket --> cores per one physical CPU chpis
ThreadsPerCore --> number of thread per core
RealMemory --> from slurmd -C

Slurm User
SlurmUser --> slurm

State Preservation
StateSaveLocation --> /var/lib/slurm-llnl/slurmctld
SlurmdSpoolDir --> /var/lib/slurm-llnl/slurmd
ReturnToService --> 1

Scheduling
SchedulerType --> Backfill

Interconnect
SwitchType --> None

Default MPI TYpe
MpiDefault --> None

Process Tracking
ProctrackType --> Pgid

Resource Selection
SelectType --> Linear

SelectTypeParameters # works only for non Linear

Task Launch --> None

Event Logging
SlurmctldLogFile --> /var/log/slurm-llnl/slurmctld.log
SlurmdLogFile --> /var/log/slurm-llnl/slurmd.log

Job Accounting Gather
AccountingStorageType --> None

ClusterName --> cluster

Process ID Logging
SlurmctldPidFile --> /var/run/slurm-llnl/slurmctld.pid
SlurmdPidFile --> /var/run/slurm-llnl/slurmd.pid

만약 CPU수를 잘 모르겠다면 commanline에서

slurmd -C

를 실행한다.

웹페이지에 입역사항을 모두 입력한 후 "submit" 을 클릭한다. 변경된 화면에 나온 내용을 복사하여 /etc/slurm-llnl/slurm.conf 에 넣어준다

sudo vim /etc/slurm-llnl/slurm.conf 
#
# slurm.conf for ubuntu 20.04 
#
ClusterName=cluster1
SlurmctldHost=alpha
#
MpiDefault=none
AuthType=auth/munge
ProctrackType=proctrack/linuxproc
ReturnToService=1
SlurmctldPidFile=/run/slurm-llnl/slurmctld.pid
#SlurmctldPort=6817
SlurmdPidFile=/run/slurm-llnl/slurmd.pid
#SlurmdPort=6818
SlurmdSpoolDir=/var/lib/slurm-llnl/slurmd
SlurmUser=slurm
StateSaveLocation=/var/spool/slurm-llnl
TaskPlugin=task/none
# SCHEDULING
SchedulerType=sched/backfill
SelectType=select/cons_res
SelectTypeParameters=CR_Core_Memory
# LOGGING AND ACCOUNTING
AccountingStorageType=accounting_storage/none
JobCompType=jobcomp/none
JobAcctGatherType=jobacct_gather/linux
SlurmctldLogFile=/var/log/slurm-llnl/slurmctld.log
SlurmdLogFile=/var/log/slurm-llnl/slurmd.log
#
DebugFlags=NO_CONF_HASH
#
# COMPUTE NODES
NodeName=alpha NodeAddr=192.168.0.12 CPUs=8 Boards=1 SocketsPerBoard=1 CoresPerSocket=8 ThreadsPerCore=1 RealMemory=64000
PartitionName=batch Nodes=alpha Default=YES MaxTime=INFINITE State=UP

그리고 아래와 같이 파일을 수정해 준다.

cd /usr/lib/tmpfiles.d
sudo vim slurm.conf
# Directory for slurmctld sockets, lockfiles and stats tempfiles
d /var/run/slurm-llnl 0775 slurm slurm - -
d /var/log/slurm-llnl 0775 slurm slurm - -

를 입력하고 저장한다.

다음의 명령을 실행하여 에러 메시지가 없이 진행되는지 확인한다.

slurmctld -Dcvvv

에러가 없이 진행되면 설치가 정상적으로 된 것이다.

3. MUNGE 설치

먼저 munge 설치가 필요하면 다음의 명령으로 설치한다.

sudo apt-get update
sudo apt-get install munge

그리고 다음과 같이 key를 설치한다.

sudo su -
dd if=/dev/urandom of=/etc/munge/munge.key bs=1c count=4M

클러스터 내 각 노드에 이렇게 생성된 key를 복사해준다.

 scp /etc/munge/munge.key "node_id":/etc/munge/munge.key 

그리고 각 노드에서 munge.key 의 퍼미션을 아래와 같이 수정한다.

ls -l /etc/munge/munge.key
chmod a-r /etc/munge/munge.key
chmod u-w /etc/munge/munge.key
chmod u+r /etc/munge/munge.key

그리고 munge.key 의 소유권을 변경한다.

sudo chown munge:munge /etc/munge/munge.key

그리고

sudo vim /usr/lib/tmpfiles.d/slurm.conf

d /var/run/munge 0775 munge munge - 

를 추가하고 저장한다.

4. 추가 수정

slurm.conf 에서 지정한 폴더들을 만들어 준다.

sudo mkdir -p /var/run/slurm-llnl
sudo mkdir -p /var/spool/slurm-llnl
sudo touch /var/log/slurm_jobacct.log
sudo chown slurm:slurm /var/run/slurm-llnl
sudo chown slurm:slurm /var/spool/slurm-llnl /var/log/slurm_jobacct.log

그리고 slurmctld를 시작할 때 워닝 메시지가 나오지 않도록 mailutils 을 설치하자.

sudo apt install -y mailutils

5. slurmctld 와 slurmd 실행

sudo systemctl start slurmctld
sudo systemctl start slurmd
sudo systemctl status slurmctld

slurmctld.service - Slurm controller daemon
   Loaded: loaded (/lib/systemd/system/slurmctld.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2020-08-03 20:39:07 KST; 45min ago
   Docs: man:slurmctld(8)
   .

같이 active (running) 이 나오면 정상적으로 설지 된 것이다.

만약

slurmctld.service: Can't open PID file /run/slurmctld.pid (yet?) after start

와 같은 에러가 나면 override.conf 를 만드어 다음의 내용을 넣어준다.

$ sudo mkdir /etc/systemd/system/slurmd.service.d 
$ sudo vim /etc/systemd/system/slurmd.service.d/override.conf

[Service]
PIDFile=/var/run/slurm-llnl/slurmd.pid
RuntimeDirectory=slurm-llnl
RuntimeDirectoryMode=0775
$ sudo mkdir /etc/systemd/system/slurmctld.service.d 
$ sudo vim /etc/systemd/system/slurmctld.service.d/override.conf

[Service]
PIDFile=/var/run/slurm-llnl/slurmctld.pid
RuntimeDirectory=slurm-llnl
RuntimeDirectoryMode=0775

6. 클러스터 연산노드에 설치하기

연산노드가 여러개 있는 클러스터의 경우에는 각 연산노드에 다음의 pkg를 설치하여 준다.

 sudo apt install slurmd slurm-client munge

그리고 slurm.conf 에 아래와 같이 각 노드의 정보를
더해 준다.

NodeName=alpha Procs=8 Sockets=1 CoresPerSocket=8 ThreadsPerCore=1
RealMemory=14000 Weight=4
NodeName=beta Procs=8 Sockets=1 CoresPerSocket=8 ThreadsPerCore=1
RealMemory=14000 Weight=3

PartitionName=base Nodes=alpha,beta Default=YES MaxTime=72:00:00 State=UP
#PartitionName=long Nodes=alpha,beta Default=No MaxTime=UNLIMITED
Priority=1 State=UP AllowGroups=long
#PartitionName=debug Nodes=alpha,beta  Default=No MaxTime=INFINITE State=UP

그리고 master node (slurmctld) 에서 slurm.conf, Munge.key 를 연산노드의 /etc/slurm-llnl 및 /etc/munge 에 복사해 준다.

그리고 연산노드에서 munge의 소유주를 재설정한 후 service를 다시 시작한다.

$ sudo chown munge:munge /etc/munge/munge.key
$ sudo systemctl restart munge 

이제 slurmd service 를 다시 시작한다.

$ sudo systemctl restart slurmd.service
$ sudo systemctl status slurmd.service

만약 slurmctld 및 slurmd 가 구동이 않되면 다음과 같이
/etc/slurm-llnl 폴더에 cgroup.conf 파일을 만들어 다음의 내용을 넣어 준다.

$ sudo vim /etc/slurm-llnl/cgroup.conf 

#####################################################
# Slurm cgroup support configuration file
# See man slurm.conf and man cgroup.conf for further
# information on cgroup configuration parameters
#####################################################
CgroupAutomount=yes
ConstrainCores=yes

4. 참고문헌

  1. Webinar_2_Slurm_II--Ubuntu16.04_and_18.04.pdf
  2. Basic Beowulf HPC Installation and Configuration Guide with SLURM

답글 남기기