24. 병렬처리 (SLURM)
SLURM 소개
- SLURM(Scheduler for Large-scale Resource Management)은 오픈 소스 클러스터 자원 관리 및 작업 스케줄링 시스템
- 대규모 HPC(High Performance Computing) 환경에서 병렬 작업 실행에 사용
- 작업 큐, 우선순위, 노드 상태 등을 제어하여 효율적인 병렬 실행을 지원
주요 개념
노드(Node)와 파티션(Partition)
- 노드: 실제 작업을 실행하는 서버 또는 컴퓨팅 유닛
- 파티션: 노드를 논리적으로 묶은 그룹 (예: GPU 파티션, CPU 전용 파티션)
작업(Job)과 배치 스크립트
- 작업(Job): SLURM에 제출되는 실행 단위
- 배치 스크립트: 실행 명령어 및 자원 요청 정보를 담은 셸 스크립트
SLURM 설치
sudo apt update
sudo apt install slurm-wlm munge
Munge 설정
# Munge key 생성
sudo dd if=/dev/urandom bs=1 count=1024 | sudo tee /etc/munge/munge.key > /dev/null
sudo chown -R munge:munge /etc/munge
sudo chmod 0700 /etc/munge
sudo chmod 400 /etc/munge/munge.key
# 로그 디렉토리 생성
sudo mkdir -p /var/log/munge
sudo chown munge:munge /var/log/munge
# munge 서비스 시작
sudo systemctl enable --now munge
SLURM 디렉토리 준비
sudo mkdir -p /var/spool/slurmd
sudo mkdir -p /var/spool/slurmctld
sudo mkdir -p /var/log/slurm
sudo chown slurm: /var/spool
sudo chown slurm: /var/spool/slurmd
sudo chown slurm: /var/spool/slurmctld
sudo chown slurm: /var/log/slurm
SLURM 설정 예시 (/etc/slurm/slurm.conf
)
ClusterName=single-cluster
ControlMachine={호스트이름}
AccountingStorageType=accounting_storage/none
JobAcctGatherType=jobacct_gather/none
NodeName={호스트이름} CPUs=2 State=UNKNOWN
PartitionName=debug Nodes={호스트이름} Default=YES MaxTime=INFINITE State=UP
SLURM 데몬 실행
# 마스터 노드에서 실행 (단일 노드 환경에서는 둘 다 실행)
sudo systemctl enable --now slurmctld
# 워커 노드에서 실행
sudo systemctl enable --now slurmd
SLURM 기본 명령어
명령어 | 설명 |
---|---|
sinfo | 노드 및 파티션 상태 확인 |
squeue | 실행 중인 작업 목록 확인 |
squeue -u | 특정 사용자 작업 확인 |
sbatch | 배치 스크립트 제출 |
srun | 직접 명령 실행 (인터랙티브 실행) |
scancel | 작업 취소 |
SLURM 배치 스크립트 예시
myjob.sh
#!/bin/bash
#SBATCH --job-name=test_job
#SBATCH --output=output.txt
#SBATCH --ntasks=1
#SBATCH --time=00:05:00
#SBATCH --partition=debug
echo "Hello from SLURM"
hostname
실행 및 확인
sbatch myjob.sh
cat output.txt
SLURM 자원 요청 옵션 요약
옵션 | 설명 | 예시 |
---|---|---|
--job-name=이름 | 작업 이름 지정 | --job-name=myjob |
--output=파일명 | 표준 출력 파일 지정 | --output=result.txt |
--ntasks=숫자 | 실행할 태스크 개수 | --ntasks=4 |
--cpus-per-task=숫자 | 태스크당 할당할 CPU 개수 | --cpus-per-task=2 |
--time=HH:MM:SS | 최대 실행 시간 | --time=01:00:00 |
--partition=이름 | 사용할 파티션 이름 | --partition=short |
SLURM 상태 확인 및 관리
# 현재 노드 상태
sinfo
# 현재 큐 상태
squeue
# 특정 사용자 작업 확인
squeue -u 사용자명
# 작업 취소
scancel <JOB_ID>