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!





'Backup > Software' 카테고리의 다른 글

Centos7에서 Slurm 설치  (4) 2017.09.02
  1. 질문있습니다. 2017.11.14 16:59

    안녕하세요?

    클러스러링 구축을 하는 사람입니다.

    원래 MPI통신규격을 사용하는 데 MPI + slurm 형식으로 사용을 하던 데, slurm을 예전에 설치를 하고 testing을 해보았는데요,

    slurm도 똑같이 job 매니지먼트 같더라고요.. 그래서 둘 중 하나만 사용을 하는 게 맞지 않나 싶어 여쭙니다.

    혹시 MPI + slurm 두 개를 묶어서 사용하시나요?

    그렇다면 왜 그래야하는 지 알고 싶습니다.

    서로 다른 것을 관리는 하는건가요.?



    • wonwooddo 2017.11.27 15:31 신고

      일단 slurm 은 작업 스케줄링과 리소스 매니지먼트를 하는게 목적입니다 . 그리고 mpi 는 작업을 분산 처리하는데 크게 두종류를 하용 합니다 mpd와 hydra 죠 이들도 리소스를 분할하고 관리하는데 목적이 이씁니다 . slrum 과 mpi 둘이 기능이 겹치는 부분이 있다면 저 부분 같네요.
      단일 작업만 돌릴 때는 상관이 없지만 노드에 복수 작업이 돌아 갈때는 상위단에사 스케줄러가 개입해야 합니다.
      질문이 두가지로 하석되서 하나더 다변 드려요
      혹시 slrum 에는 자체적으로 mpi런처가 있습니다. 이걸 말 씀 하시는지요 ? 둘다 어떤걸 사용해도 되지만 셋팅법이 조금 달라요. 왜냐면 slrum 은 보안쪽에 신경을 쓴터리 munge key 인증을 하기 때문에 위와같은 자체 런처 같은 기능을 하는게 탑제 되어 있습니다. Ssh key 를 노드에 설치하지 않아도 되거든요 ㅎㅎ. 아마 sge나 pbs사요해 보셨다면 키를 복사하는 과정을 하셨을 텐데 slurm도 해도 예전 처럼 하셔두 사용은 잘 됩니다. 부족하나마 다변이 되었으면 하네요. 틀린 내용이 있다면 알려주세요 ㄱㅅ합니다.

  2. djlee 2019.01.08 17:48

    안녕하십니까. 경북대학교에서 공부 중인 학생입니다 . 최근 몇 주간 slurm을 이용하여 hpc container인 shifter를 돌려보고자 slurm 환경을 구축하는 방법에 대해 구글링을 계속해오며 수십차례 도전해본결과 다 실패했습니다. 그래서 어디 도움을 요청할 곳이 있을까 하다가 유일하게 잘 정리되어있고 잘 설명되어있는 이 블로그의 주인분께 문의를 해볼까합니다. 블로거님이 보려고 올리는 기술 블로그인지라 중간에 설명의 비약이 있는 것 같습니다. 실례가 안된다면 디테일한 설정과정을 알려주시면 너무나 영광일 것 같습니다. 너무나 간절한 상황인지라 제 요청이 가능하시다면 먼저 사례금을 드리고 싶습니다

  3. Noki Lee 2019.06.05 01:21

    좋은 글 감사합니다.

    클러스터와 간접적으로 관련이 생겨서 몇가지 질문드려요.

    Delete failed installation of Slurm 과정을 Ubuntu의 경우도 동일할까요?

    그리고 개인PC의 경우 하나의 node에 cpu, gpu가 장착되면
    slurm.conf의 내부 작성시 주의할 점이나 다른 유의 사항이 있을까요?

    그리고 위 과정은 su, 계정 sudo 유무 등 어디서 진행해야할까요?

+ Recent posts