AI4NLP

따라하며 하는 Slurm 세팅 & 설명, Ubuntu 18.04 본문

Machine Learning

따라하며 하는 Slurm 세팅 & 설명, Ubuntu 18.04

nlp user 2021. 4. 18. 23:34

Slurm는 리눅스에서 사용하는 클러스터 관리 및 작업 스케쥴링 (job scheduling) 시스템이다. 

회사에서 GPU 클러스터를 구입하면서 Slurm 설정을 하다가 DSNG 시스템에서 도움 받아.. 막힌 부분들을 반영해서 작성한 글이다.

아래처럼 따라하며 설정했을 때에 글쓴이의 클러스터에서는 아무 문제 없이 잘 작동했었다.

 

 

우선 Slurm을 사용하기 위해서는 인증 오픈SW인 munge를 설치해야 한다.

$ export MUNGEUSER=991
$ groupadd -g $MUNGEUSER munge
$ useradd  -m -c "MUNGE Uid 'N' Gid Emporium" -d /var/lib/munge -u $MUNGEUSER -g munge  -s /sbin/nologin munge

그 후에 Slurm을 모든 노드에 설치해준다.

$ apt install slurm-wlm slurm-wlm-doc 

 

Munge - 마스터 노드 설정

$ dd if=/dev/urandom of=/etc/munge/munge.key bs=1c count=4M
$ 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
$ chown munge:munge /etc/munge/munge.key
$ munge –n
$ munge –n | unmunge
$ scp /etc/munge/munge.key node1:/etc/munge/
$ systemctl enable munge
$ /etc/init.d/munge restart

 

Munge - 일반 노드 설정

$ 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
$ chown munge:munge /etc/munge/munge.key
$ systemctl enable munge
$ /etc/init.d/munge restart

 

마스터 노드에서 Munge 작동 확인 ; status가 success로 나오면 설치 및 세팅 완료

$ munge –n | ssh node1 unmunge 

 

Slurm 설정

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

slurm.schedmd.com/configurator.html 를 열어서 config 파일을 생성해서 만들거나, 아래의 conf 예제를 참고해서 작성하면 된다. 

아래 conf 예제를 참고할 때에, $gpuname$과 CPU 관련된 부분의 숫자를 각 서버에 맞게 재작성해주면 된다.

# slurm.conf file generated by configurator easy.html.
# Put this file on all nodes of your cluster.
# See the slurm.conf man page for more information.
#
ControlMachine=node1
ControlAddr=IP주소
#
#MailProg=/bin/mail
MpiDefault=none
#MpiParams=ports=#-#
ProctrackType=proctrack/pgid
ReturnToService=1
#SlurmctldPidFile=/var/run/slurmctld.pid
SlurmctldPidFile=/var/run/slurm-llnl/slurmctld.pid
#SlurmctldPort=6817
# SlurmdPidFile=/var/run/slurmd.pid
#SlurmdPort=6818
SlurmdSpoolDir=/var/spool/slurmd
SlurmUser=slurm
#SlurmdUser=root
StateSaveLocation=/var/spool/slurmctld
SwitchType=switch/none
TaskPlugin=task/none
#
#
# TIMERS
#KillWait=30
#MinJobAge=300
#SlurmctldTimeout=120
#SlurmdTimeout=300
#
#
# SCHEDULING
FastSchedule=1
SchedulerType=sched/backfill
#SchedulerPort=7321
#SelectType=select/linear
SelectType=select/cons_res
SelectTypeParameters=CR_Core
#SelectTypeParameters=CR_Core_Memory
#
#
# LOGGING AND ACCOUNTING
AccountingStorageType=accounting_storage/none
ClusterName=cluster
#JobAcctGatherFrequency=30
JobAcctGatherType=jobacct_gather/none
#SlurmctldDebug=3
SlurmctldLogFile=/var/log/slurmctld.log
#SlurmdDebug=3
SlurmdLogFile=/var/log/slurmd.log
#
#
# COMPUTE NODES
GresTypes=gpu
NodeName=node1 CPUs=32 Boards=1 SocketsPerBoard=2 CoresPerSocket=16 ThreadsPerCore=1 Gres=gpu:$gpuname$:8 State=UNKNOWN
NodeName=node2 CPUs=32 Boards=1 SocketsPerBoard=2 CoresPerSocket=16 ThreadsPerCore=1 Gres=gpu:$gpuname$:8 State=UNKNOWN
NodeName=node3 CPUs=32 Boards=1 SocketsPerBoard=2 CoresPerSocket=16 ThreadsPerCore=1 Gres=gpu:$gpuname$:8 State=UNKNOWN
PartitionName=batch Nodes=node1,node2,node3 Default=YES MaxTime=INFINITE State=UP OverSubscribe=FORCE

 

 

GPU 추가 설정

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

###cgroup.conf###
CgroupAutomount=yes
CgroupReleaseAgentDir="/etc/slurm/cgroup"

ConstrainCores=yes
ConstrainDevices=yes
ConstrainRAMSpace=yes
#################
$ vim /etc/slurm-llnl/gres.conf  #각자 GPU에 맞게 설정 예제에선 한 서버당 #gpuname# 8대씩 총 3대로 설정

###gres.conf###
Nodename=node1 Name=gpu Type=$gpuname$ File=/dev/nvidia[0-7]
Nodename=node2 Name=gpu Type=$gpuname$ File=/dev/nvidia[0-7]
Nodename=node3 Name=gpu Type=$gpuname$ File=/dev/nvidia[0-7]
###############

 

 

 

Slurm master node 설정

$ mkdir /var/spool/slurmctld
$ chown slurm: /var/spool/slurmctld
$ chmod 755 /var/spool/slurmctld
$ touch /var/log/slurmctld.log
$ chown slurm: /var/log/slurmctld.log
$ touch /var/log/slurm_jobacct.log /var/log/slurm_jobcomp.log
$ chown slurm: /var/log/slurm_jobacct.log /var/log/slurm_jobcomp.log
$ systemctl enable slurmctld
$ /etc/init.d/slurmctld restart

 

slurm 일반 node 설정

$ mkdir /var/spool/slurmd
$ chown slurm: /var/spool/slurmd
$ chmod 755 /var/spool/slurmd
$ touch /var/log/slurmd.log
$ chown slurm: /var/log/slurmd.log
$ systemctl enable slurmd
$ /etc/init.d/slurmd restart
$ scontrol show nodes
$ sinfo –a

 

Slurm 예제 스크립트

$ su #name#
$ cd ~
$ mkdir slurm_test
$ cd slurm_test
$ vim sleep.sh

###sleep.sh###
#!/bin/bash
#
#SBATCH --job-name=test
#SBATCH --output=res.txt
#SBATCH --ntasks=1
#SBATCH --time=10:00

srun sleep 120
srun hostname
#############

$ sbatch sleep.sh
$ squeue

 

 

Slurm 명령어 정리

명령어 내용
$ sbatch [옵션..] 스크립트  작업 제출
$ scancel 작업ID 작업 삭제
$ squeue 작업 상태 확인 
$ smap 작업 상태 및 노드 상태 확인
$ sinfo [옵션..] 노드 정보 확인

 

 

읽어주셔서 감사합니다.

Comments