Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 부스트캠프
- VAD
- deep learning
- 인공지능 그랜드 챌린지
- Machine Learning
- 인공지능
- 부스트캠프ai
- End-To-End
- ai
- Learning rate Scheduler
- 머신러닝
- aitech
- 음성인식
- 네이버커넥트재단
- Lr Scheduler
- Cosine annealing
- 딥러닝
Archives
- Today
- Total
AI4NLP
따라하며 하는 Slurm 세팅 & 설명, Ubuntu 18.04 본문
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 [옵션..] | 노드 정보 확인 |
읽어주셔서 감사합니다.
'Machine Learning' 카테고리의 다른 글
파이썬을 활용한 베이지안 통계 를 읽고 나서 (2) | 2022.07.24 |
---|---|
Making Pre-trained Language Models Better Few-shot Learners (0) | 2021.10.24 |
코싸인 어닐링,Cosine annealing learning rate scheduler 간단 설명 (1) | 2020.12.13 |
GPT-3 paper를 읽고 써보는 간략한 리뷰 혹은 설명, Language Models are Few-Shot Learners (0) | 2020.09.06 |
추천 시스템(Recommendation System) - 협업 필터링 (Collaborative filtering) 설명 (1) (0) | 2020.07.19 |
Comments