본문 바로가기

Backup/Software

Centos7에서 Slurm 설치

Cluster Server and Compute Nodes



1. 아래 파일에서 원하는 hostname으로 수정

vi /etc/hostname

wonwooddo

또 아래 파일에서 subdomain이 있다면 아래에 hostname과 ip를 추가하자

vi /etc/hosts

네트워크 재시작

systemctl restart network

확인해보자:

hostnamectl status


1
2
3
4
5
6
7
8
9
Static hostname: wonwooddo Transient hostname: localhost.localdomain Icon name: computer-desktop Chassis: desktop Machine ID: 3c3d6999caaa4b74a731306fcba50423 Boot ID: b71d4586e8b544d69c3f08e92e730243 Operating System: CentOS Linux 7 (Core) CPE OS Name: cpe:/o:centos:centos:7 Kernel: Linux 3.10.0-514.26.1.el7.x86_64 Architecture: x86-64

NetworkManager가 예전의 nameservers을 삭제했을수도 있음으로 nameserver도 다시 설정해야된다. Nameserver는  subdomains and domains 를 접속하게 한다

vi /etc/resolv.conf

nameserver 203.248.252.2
nameserver 164.124.101.2
nameserver 8.8.8.8

The clients are:

wwhpc1 wwhpc2 wwhpc3 wwhpc4 wwhpc5 wwhpc6

 


Delete failed installation of Slurm

실패를 했건 업데이트를 하기위해 재설치를 하건 기존의 슬럼이 설치가 되어있다면 dependency때문에 일단 재설치 전에 완전히 지우는 다시 시작하는게 좋다.

일단, Slurm accounting 보관했던 database를 지워야 한다.

yum remove mariadb-server mariadb-devel -y

그리고 Slurm and Munge를 지운다. Munge 는 Slurm 시스템에서 메시징을 식별하는 데 사용되는 인증 도구다.

yum remove slurm munge munge-libs munge-devel -y

slurm and munge users 가 있는지 확인해라

cat /etc/passwd | grep slurm

있다면 user와 해단 user의 폴더를 지우자

userdel - r slurm
userdel -r munge
userdel: user munge is currently used by process 26278
kill 26278
userdel -r munge

Slurm, Munge 및 Mariadb를 완전히 지우고 이제 실제로 작동하는 새로운 설치를 시작해보자.



Install MariaDB

일단 MariaDB를 설치하면 Slurm이 제공하는 계정을 저장할 수 있다. 이건  accounting file(db)저장하는거여서 client말고 서버노드에서만 하자. 설치하고나면 이따가 slurm RPM깔고 다시 돌아와서 작업하자

yum install mariadb-server mariadb-devel -y

Create the global users

Slurm and Munge 설치 전에 모든 노드에 같은 UID and GID 가 필요하다.

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
export SLURMUSER=992
groupadd -g $SLURMUSER slurm
useradd  -m -c "SLURM workload manager" -d /var/lib/slurm -u $SLURMUSER -g slurm  -s /bin/bash slurm



Install Munge

CentOS 7이니까 일단 최신 EPEL repository를 추가하자.

yum install epel-release

그리고 Munge 를 설치하자.

yum install munge munge-libs munge-devel -y

Munge 설치 후엔 서버의 secret key를 만들어야 한다. 서버노드가 될 노드하나를 선정하자. 지금 나같은 경우엔 단일노드여서 wonwooddo가 서버노드다

우선 키를 만들기 위해서 rng-tools를 설치하자. 

yum install rng-tools -y
rngd -r /dev/urandom

이제 secret key를 서버에서만 만들면 된다.

/usr/sbin/create-munge-key -r
dd if=/dev/urandom bs=1 count=1024 > /etc/munge/munge.key
chown munge: /etc/munge/munge.key
chmod 400 /etc/munge/munge.key

secret key 만들고 나서 키를 모든 compute nodes에 보내야 한다.

scp /etc/munge/munge.key root@1.wwhpc.com:/etc/munge scp /etc/munge/munge.key root@2.wwhpc.com:/etc/munge scp /etc/munge/munge.key root@4.wwhpc.com:/etc/munge scp /etc/munge/munge.key root@5.wwhpc.com:/etc/munge scp /etc/munge/munge.key root@6.wwhpc.com:/etc/munge

이젠 모든 노드에  SSH  해서 permissions을 수정하고 Munge service도 시작.

chown -R munge: /etc/munge/ /var/log/munge/
chmod 0700 /etc/munge/ /var/log/munge/
systemctl enable munge
systemctl start munge

Munge를 테스트하기 위해, Munge를 통해서 다른 노드에 접속해보자

munge -n munge -n | unmunge munge -n | ssh 3.wwhpc.com unmunge remunge

에러가 없다면 Munge가 잘 작동한다는 뜻!!



Install Slurm

Slurm 을 설치하기전에 의존도에 필요한 것들을 설치해야한다.

yum install openssl openssl-devel pam-devel numactl numactl-devel hwloc hwloc-devel lua lua-devel readline-devel rrdtool-devel ncurses-devel man2html libibmad libibumad -y

Slurm을 이제 최신 shared folder에 다운받자. 최신버전은 아래와 다를수도 있다.

cd /nfs
wget http://www.schedmd.com/download/latest/slurm-15.08.9.tar.bz2

rpmbuild 이 아직 없다면 : 

yum install rpm-build
rpmbuild -ta slurm-15.08.9.tar.bz2

rpmbuild로 부터 만들어진 rpms을 확인해본다.

cd /root/rpmbuild/RPMS/x86_64

Slurm rpms을 모두 이제 server and computer nodes에 옮기자.

mkdir /nfs/slurm-rpms
cp slurm-15.08.9-1.el7.centos.x86_64.rpm slurm-devel-15.08.9-1.el7.centos.x86_64.rpm slurm-munge-15.08.9-1.el7.centos.x86_64.rpm slurm-perlapi-15.08.9-1.el7.centos.x86_64.rpm slurm-plugins-15.08.9-1.el7.centos.x86_64.rpm slurm-sjobexit-15.08.9-1.el7.centos.x86_64.rpm slurm-sjstat-15.08.9-1.el7.centos.x86_64.rpm slurm-torque-15.08.9-1.el7.centos.x86_64.rpm /nfs/slurm-rpms

모든 서버노드 계산노드에 이 rpms들을 다 설치해야한다.

yum --nogpgcheck localinstall slurm-15.08.9-1.el7.centos.x86_64.rpm slurm-devel-15.08.9-1.el7.centos.x86_64.rpm slurm-munge-15.08.9-1.el7.centos.x86_64.rpm slurm-perlapi-15.08.9-1.el7.centos.x86_64.rpm slurm-plugins-15.08.9-1.el7.centos.x86_64.rpm slurm-sjobexit-15.08.9-1.el7.centos.x86_64.rpm slurm-sjstat-15.08.9-1.el7.centos.x86_64.rpm slurm-torque-15.08.9-1.el7.centos.x86_64.rpm

모든 머신에 Slurm 을 설치했다면 재대로 Slurm이 잘 작동되는지 확인해보자

http://slurm.schedmd.com/configurator.easy.html 에 접속하여 Slurm configuration file을 만들어라

아래 뺴곤 default로 냅둔다.

ControlMachine: buhpc3
ControlAddr: 128.197.116.18
NodeName: buhpc[1-6]
CPUs: 4
StateSaveLocation: /var/spool/slurmctld
SlurmctldLogFile: /var/log/slurmctld.log
SlurmdLogFile: /var/log/slurmd.log
ClusterName: buhpc

Submit을 누르고나면 전체 Slurm configuration file을 받을 볼 수 있다.

wwhpc인 서버노드는 아래 위치에서 configuration file을 복사해서 slurm.conf를 만든다. 그리고 아직 하나를 더 수정해야한다.

cd /etc/slurm
vim slurm.conf

slurm.conf에서  “# COMPUTE NODES,”를 보면 Slurm 이 한줄로서 자동으로 IP address들을 다 알아내려 한다.

NodeName=buhpc[1-6] CPUs = 4 State = UNKOWN

여기선 IP address가 순서대로 되어있지 않아있다, 그래서 저 줄은 지우고 직접 아래와 같이 바꿨다

명시적으로 NodeAddr IP addresses를 적고나서 저장하고 나온다.

아래 전체 slurm.conf 파일이다

이제 서버노드는 slurm.conf를 잘 가지고 있다. 이를 다른 client에도 보내야 한다.

scp slurm.conf root@1.wwhpc.com/etc/slurm/slurm.conf scp slurm.conf root@2.wwhpc.com/etc/slurm/slurm.conf scp slurm.conf root@4.wwhpc.com/etc/slurm/slurm.conf scp slurm.conf root@5.wwhpc.com/etc/slurm/slurm.conf scp slurm.conf root@6.wwhpc.com/etc/slurm/slurm.conf

이제 서버노드를 설정하자, wonwooddo. 모든 노드들이 올바른 configuration 과 file을 가지고 있어야 한다.

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

이제 컴퓨팅 노드들을 설정하자 wwhpc[1-6]. 모든 컴퓨팅 노드들이 똑같은 설정을 가지고 있어야 한다.

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

slurmd 잘 설정되어있는지 아래 명령어로 확인하자

slurmd -C

You should get something like this:

ClusterName=(null) NodeName=buhpc3 CPUs=4 Boards=1 SocketsPerBoard=2 CoresPerSocket=2 ThreadsPerCore=1 RealMemory=7822 TmpDisk=45753
UpTime=13-14:27:52

노드간에 방화벽이 막혀있을거다. 그래서 wonwooddo 마스터노드뺴곤 다 방화벽을 풀어주자

systemctl stop firewalld
systemctl disable firewalld

서버노드에서는, wonwooddo, Slurm이 사용하는 default port를 열어준다.

firewall-cmd --permanent --zone=public --add-port=6817/udp
firewall-cmd --permanent --zone=public --add-port=6817/tcp
firewall-cmd --permanent --zone=public --add-port=6818/tcp
firewall-cmd --permanent --zone=public --add-port=6818/tcp
firewall-cmd --permanent --zone=public --add-port=7321/tcp
firewall-cmd --permanent --zone=public --add-port=7321/tcp
firewall-cmd --reload

만약 포트가 안열린다면, 테스트를 위한 firewalld 방화벽을 멈춰라. 그리고 모든 cluster의 clocks sync 가 잘되는지 확인해야한다.

모든 노드에:

yum install ntp -y
chkconfig ntpd on
ntpdate pool.ntp.org
systemctl start ntpd

clocks이 synced되어야한다, 그러면 Slurm을 시작할수있다!!  컴퓨팅노드에서는 wwhpc[1-6]:

systemctl enable slurmd.service systemctl start slurmd.service systemctl status slurmd.service

(만약 에러가 뜬다면:

cgroup.conf
[root@amber600 slurm]# cat cgroup.conf| grep -v '#'
CgroupMountpoint="/sys/fs/cgroup"
CgroupAutomount=yes
CgroupReleaseAgentDir="/etc/slurm/cgroup"
AllowedDevicesFile="/etc/slurm/cgroup_allowed_devices_file.conf"
ConstrainCores=no
TaskAffinity=no
ConstrainRAMSpace=yes
ConstrainSwapSpace=no
ConstrainDevices=no
AllowedRamSpace=100
AllowedSwapSpace=0
MaxRAMPercent=100
MaxSwapPercent=100
MinRAMSpace=30

[root@amber600 slurm]# cat cgroup_allowed_devices_file.conf | grep -v '#'
/dev/null
/dev/urandom
/dev/zero
/dev/sda*
/dev/cpu/*/*
/dev/pts/*



서버노드에서는 wwhpc3:

systemctl enable slurmctld.service
systemctl start slurmctld.service
systemctl status slurmctld.service

slurmd와 slurmctld 를 확인해보면  잘되었는지 안되었는지 확인할수 있다. 만약 문제가 되면 로그파일을 보자!

Compute node bugs: tail /var/log/slurmd.log
Server node bugs: tail /var/log/slurmctld.log



Use Slurm

컴퓨팅 노드 확인

scontrol show nodes

-N 은 얼마만큼의 컴퓨팅 노드를 쓸지 정한다. 서버노드,. wwhpc3에서 작업을 던지려면:

srun -N5 /bin/hostname

wwhpc3 wwhpc2 wwhpc4 wwhpc5 wwhpc1

큐의 작업확인하려면:

scontrol show jobs
JobId=16 JobName=hostname
UserId=root(0) GroupId=root(0)
Priority=4294901746 Nice=0 Account=(null) QOS=(null)
JobState=COMPLETED Reason=None Dependency=(null)
Requeue=1 Restarts=0 BatchFlag=0 Reboot=0 ExitCode=0:0
RunTime=00:00:00 TimeLimit=UNLIMITED TimeMin=N/A
SubmitTime=2016-04-10T16:26:04 EligibleTime=2016-04-10T16:26:04
StartTime=2016-04-10T16:26:04 EndTime=2016-04-10T16:26:04
PreemptTime=None SuspendTime=None SecsPreSuspend=0
Partition=debug AllocNode:Sid=buhpc3:1834
ReqNodeList=(null) ExcNodeList=(null)
NodeList=buhpc[1-5]
BatchHost=buhpc1
NumNodes=5 NumCPUs=20 CPUs/Task=1 ReqB:S:C:T=0:0:*:*
TRES=cpu=20,node=5
Socks/Node=* NtasksPerN:B:S:C=0:0:*:* CoreSpec=*
MinCPUsNode=1 MinMemoryNode=0 MinTmpDiskNode=0
Features=(null) Gres=(null) Reservation=(null)
Shared=0 Contiguous=0 Licenses=(null) Network=(null)
Command=/bin/hostname
WorkDir=/root
Power= SICP=0

script로 작업을 제출하려면 script를 작성하고 아래와같이 한다

sbatch -N2 script-file

Slurm has a lot of useful commands. You may have heard of other queuing tools like torque. Here’s a useful link for the command differences: http://www.sdsc.edu/~hocks/FG/PBS.slurm.html

 

Accounting in Slurm

We’ll worry about accounting in Slurm with MariaDB for next time. Let me know if you encounter any problems with the above steps!