Slurm(“Simple Linux Utility for Resource Management”)은 대표적인 HPC(High-Performance Computing) 잡 스케줄러입니다.
개인적으로 AWS EC2 인스턴스 두 대를 사용하여 Slurm 컨트롤러(Controller)와 컴퓨트(Compute) 노드를 기반으로 Slurm 클러스터를 구성해보았습니다.
AWS 리전(Region): 서울 리전(ap-northeast-2)
두 대의 EC2 인스턴스
SSH 키 페어(PEM 파일): ~/.ssh/jaehan-ec2-keypair.pem
호스트네임 /etc/hosts 설정
컨트롤러/컴퓨트 양쪽 인스턴스에 다음 내용을 /etc/hosts에 추가하여 서로를 이름으로 인식하도록 설정
sudo tee -a /etc/hosts << 'EOF'
172.31.54.171 slurm-controller
172.31.54.171 slurm-compute
EOF
sudo apt update && sudo apt upgrade -y
Slurm은 노드 간 통신을 암호화/인증하기 위해 Munge 인증 시스템을 사용합니다.
컨트롤러와 컴퓨트 노드에 동일한 munge.key 파일이 있어야 서로 통신이 가능합니다.
패키지 설치
sudo apt install -y libmunge2 libmunge-dev munge
munge.key 생성
sudo /usr/sbin/mungekey --create
만약 이미 키가 존재한다면, 에러가 발생할 수 있으니 새로 키를 생성하고 싶을 때 아래 명령어를 사용합니다.
sudo rm /etc/munge/munge.key
sudo /usr/sbin/mungekey --create
sudo ls /etc/munge -alh
munge.key 파일 유저, 그룹 및 권한 설정
sudo chown munge:munge /etc/munge/munge.key
sudo chmod 400 /etc/munge/munge.key
Munge 서비스 기동 및 활성화
sudo systemctl enable munge
sudo systemctl start munge
sudo systemctl status munge # active (running) 확인
컨트롤러에서 생성된 /etc/munge/munge.key 파일을 컴퓨트 노드로 복사합니다.
sudo scp -i ~/.ssh/jaehan-ec2-keypair.pem /etc/munge/munge.key ubuntu@slurm-compute:/tmp/
컴퓨트 노드에서 작업:
sudo mkdir -p /etc/munge /var/lib/munge /var/log/munge
sudo mv /tmp/munge.key /etc/munge/munge.key
sudo chown munge:munge /etc/munge/munge.key
sudo chmod 400 /etc/munge/munge.key
컴퓨트 노드에서 Munge 설치 및 기동
sudo apt install -y libmunge2 libmunge-dev munge
sudo systemctl enable munge
sudo systemctl start munge
sudo systemctl status munge # active (running) 확인
필요 패키지 설치
sudo apt install -y slurm-wlm slurm-wlm-basic-plugins
slurm 사용자/그룹 및 디렉터리 준비
sudo id slurm &>/dev/null || sudo useradd -m -U -r slurm
sudo mkdir -p /var/spool/slurmctld
sudo mkdir -p /var/log/slurm
sudo chown slurm:slurm /var/spool/slurmctld /var/log/slurm
기본 slurm.conf 파일 생성
sudo tee /etc/slurm/slurm.conf << 'EOF'
#
# Two-node Slurm cluster (controller + compute)
#
ClusterName=twoNodeCluster
ControlMachine=slurm-controller
# Slurm 사용자
SlurmUser=slurm
# 로그 파일 경로
SlurmctldLogFile=/var/log/slurm/slurmctld.log
SlurmdLogFile=/var/log/slurm/slurmd.log
# 인증 방식
AuthType=auth/munge
CryptoType=crypto/munge
# 포트 (기본값)
SlurmctldPort=6817
SlurmdPort=6818
# 상태 저장 위치
StateSaveLocation=/var/spool/slurmctld
# 스케줄러 및 리소스 선택
SchedulerType=sched/backfill
SelectType=select/cons_res
SelectTypeParameters=CR_Core
# 컨트롤러 노드(자기 자신)
NodeName=slurm-controller CPUs=4 RealMemory=8192 State=UNKNOWN
# 컴퓨트 노드
NodeName=slurm-compute CPUs=4 RealMemory=8192 State=UNKNOWN
# 파티션 정의: controller, compute 둘 다 debug 파티션에 포함
PartitionName=debug Nodes=slurm-controller,slurm-compute Default=YES MaxTime=INFINITE State=UP
EOF
파일 소유자와 권한 설정:
sudo chown slurm:slurm /etc/slurm-llnl/slurm.conf
sudo chmod 600 /etc/slurm-llnl/slurm.conf
slurmctld 데몬 활성화 및 기동
sudo systemctl enable slurmctld
sudo systemctl start slurmctld
sudo systemctl status slurmctld # active (running) 확인
필요 패키지 설치
sudo apt install -y slurm-wlm slurm-wlm-basic-plugins
slurm 사용자/그룹 및 디렉터리 준비
sudo id slurm &>/dev/null || sudo useradd -m -U -r slurm
sudo mkdir -p /var/spool/slurmctld
sudo mkdir -p /var/log/slurm
sudo chown slurm:slurm /var/spool/slurmctld /var/log/slurm
slurm.conf 파일 복사
컨트롤러에 작성한 /etc/slurm-llnl/slurm.conf 파일을 컴퓨트 노드로 가져옵니다.
컨트롤러에서:
sudo scp -i ~/.ssh/jaehan-ec2-keypair.pem /etc/slurm/slurm.conf ubuntu@slurm-compute:/tmp/
컴퓨트에서:
sudo mv /tmp/slurm.conf /etc/slurm/slurm.conf
sudo chown slurm:slurm /etc/slurm/slurm.conf
sudo chmod 600 /etc/slurm/slurm.conf
slurmd 데몬 활성화 및 기동
sudo systemctl enable slurmd
sudo systemctl start slurmd
sudo systemctl status slurmd # active (running) 확인
컨트롤러에서 파티션·노드 정보 조회(sinfo)

NODES=2, STATE=idle, NODELIST=slurm-controller,slurm-compute 로 두 노드가 모두 준비된 상태입니다.
slurm 구성 파일인 slurm.conf의 초기 세팅이 잘못되어 이를 수정 후, 기존 구성 파일을 제거하고 새로 slurm.conf를 생성 후 slurm을 구동시키려고 했으나, 기존 초기 세팅에서 나온 에러가 발생하였습니다.
ubuntu@slurm-controller:~$ sudo systemctl status slurmctld
× slurmctld.service - Slurm controller daemon
Loaded: loaded (/lib/systemd/system/slurmctld.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Tue 2025-06-03 02:26:51 UTC; 11s ago
Docs: man:slurmctld(8)
Process: 25690 ExecStart=/usr/sbin/slurmctld -D -s $SLURMCTLD_OPTIONS (code=exited, status=1/FAILURE)
Main PID: 25690 (code=exited, status=1/FAILURE)
CPU: 33ms
Jun 03 02:26:51 slurm-controller systemd[1]: Started Slurm controller daemon.
Jun 03 02:26:51 slurm-controller slurmctld[25690]: slurmctld: fatal: CLUSTER NAME MISMATCH.
Jun 03 02:26:51 slurm-controller slurmctld[25690]: slurmctld has been started with "ClusterName=twonodecluster", but read "cluster" from the state>
Jun 03 02:26:51 slurm-controller slurmctld[25690]: Running multiple clusters from a shared StateSaveLocation WILL CAUSE CORRUPTION.
Jun 03 02:26:51 slurm-controller slurmctld[25690]: Remove /var/spool/slurmctld/clustername to override this safety check if this is intentional (e>
Jun 03 02:26:51 slurm-controller systemd[1]: slurmctld.service: Main process exited, code=exited, status=1/FAILURE
Jun 03 02:26:51 slurm-controller systemd[1]: slurmctld.service: Failed with result 'exit-code'.
Slurm 컨트롤러는 매 기동 시 $StateSaveLocation 디렉터리(기본 /var/spool/slurmctld)를 확인하여,
이전에 사용된 클러스터 이름(ClusterName)을 기록한 “clustername” 파일(또는 디렉터리)을 읽어옵니다.
상태 디렉토리 초기화
sudo systemctl stop slurmctld
sudo rm -rf /var/spool/slurmctld/<clusteName>
sudo systemctl start slurmctld
sudo systemctl status slurmctld
정상 기동 시 아래와 같이 출력됩니다.
ubuntu@slurm-controller:~$ sudo systemctl status slurmctld
● slurmctld.service - Slurm controller daemon
Loaded: loaded (/lib/systemd/system/slurmctld.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2025-06-03 02:28:08 UTC; 3min 36s ago
Docs: man:slurmctld(8)
Main PID: 25989 (slurmctld)
Tasks: 10
Memory: 2.0M
CPU: 143ms
CGroup: /system.slice/slurmctld.service
├─25989 /usr/sbin/slurmctld -D -s
└─25995 "slurmctld: slurmscriptd" "" ""
Jun 03 02:28:08 slurm-controller systemd[1]: Started Slurm controller daemon.
Jun 03 02:28:08 slurm-controller slurmctld[25989]: slurmctld: No parameter for mcs plugin, default values set
Jun 03 02:28:08 slurm-controller slurmctld[25989]: slurmctld: mcs: MCSParameters = (null). ondemand set.
Jun 03 02:29:08 slurm-controller slurmctld[25989]: slurmctld: SchedulerParameters=default_queue_depth=100,max_rpc_cnt=0,max_sched_time=2,partition>
https://slurm.schedmd.com/documentation.html
https://blog.liam.kim/posts/2024/05/Slurm-Setup-Guide/#install-munge
https://grsn.tistory.com/493