- Published on
Slurm 완전 정복: HPC/AI 클러스터 워크로드 매니저 실전 가이드
- Authors
- Name
- 1. Slurm이란
- 2. 아키텍처
- 3. 핵심 개념
- 4. 필수 명령어
- 5. 작업 스크립트 예제
- 6. GPU 스케줄링 (GRES)
- 7. AI/ML 분산 학습
- 8. 컨테이너 통합
- 9. 설정 (slurm.conf)
- 10. 고급 기능
- 11. 모니터링 및 트러블슈팅
- 12. 다른 스케줄러와 비교
- 13. References
1. Slurm이란
**Slurm(Simple Linux Utility for Resource Management)**은 리눅스 클러스터를 위한 오픈소스, 내결함성, 고확장성 워크로드 매니저다. HPC(High-Performance Computing)와 AI 학습 인프라 세계의 사실상 표준이다.
1.1 핵심 기능 3가지
- 리소스 할당: 사용자에게 지정 시간 동안 컴퓨트 노드의 독점/공유 접근 부여
- 작업 실행 프레임워크: 할당된 노드에서 병렬 작업을 시작·실행·모니터링
- 큐 관리: 정교한 스케줄링 알고리즘으로 리소스 경합 조정
1.2 역사
| 연도 | 이벤트 |
|---|---|
| 2002 | Lawrence Livermore National Laboratory(LLNL)에서 최초 릴리스 |
| 2010 | 핵심 개발자들이 SchedMD 설립 (상용 지원, 개발, 교육) |
| 2025.12 | NVIDIA가 SchedMD 인수 — 오픈소스·벤더 중립 유지 약속 |
1.3 누가 쓰나
- **TOP500 슈퍼컴퓨터의 ~60-65%**가 Slurm 사용
- 대표 시스템: Frontier (Oak Ridge, #1), Perlmutter (NERSC), Polaris (Argonne)
- 클라우드: AWS ParallelCluster, Google Cloud HPC, Azure CycleCloud
- AI 기업: 대규모 LLM 학습, 이미지 생성 모델 학습
- 산업: 자율주행, 헬스케어, 에너지, 금융, 정부 연구소
라이선스: GNU GPL v2 (오픈소스)
2. 아키텍처
┌─────────────────────────────────────────────────────────────┐
│ Slurm Architecture │
│ │
│ ┌────────────────┐ ┌────────────────┐ │
│ │ slurmctld │ │ slurmctld │ │
│ │ (Primary) │◄──────►│ (Backup) │ │
│ │ Head Node │ HA │ Backup Node │ │
│ └───────┬────────┘ └────────────────┘ │
│ │ RPC (TCP) │
│ ┌───────┼──────────────────────────────────┐ │
│ │ ▼ ▼ ▼ │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
│ │ │ slurmd │ │ slurmd │ │ slurmd │ │ Compute Nodes │
│ │ │ Node 01 │ │ Node 02 │ │ Node N │ │ │
│ │ └─────────┘ └─────────┘ └─────────┘ │ │
│ └──────────────────────────────────────────┘ │
│ │
│ ┌────────────────┐ ┌────────────────┐ │
│ │ slurmdbd │ │ slurmrestd │ │
│ │ (Database) │ │ (REST API) │ │
│ │ MySQL/MariaDB │ │ JSON / JWT │ │
│ └────────────────┘ └────────────────┘ │
└─────────────────────────────────────────────────────────────┘
2.1 데몬별 역할
| 데몬 | 역할 | 위치 |
|---|---|---|
| slurmctld | 중앙 관리 (스케줄링, 리소스 모니터링, 작업 큐) | 헤드 노드 |
| slurmd | 태스크 실행, 리소스 사용 모니터링, 상태 보고 | 모든 컴퓨트 노드 |
| slurmdbd | 작업 회계, 히스토리, 사용 통계 (MySQL/MariaDB 백엔드) | DB 서버 |
| slurmrestd | HTTP RESTful API (JSON, JWT 인증) | API 서버 |
2.2 플러그인 아키텍처
Slurm은 확장 가능한 플러그인 아키텍처를 지원한다:
- 인증 (auth/munge, auth/jwt)
- 컨테이너 (OCI, Singularity, Enroot)
- GPU/GRES 관리
- MPI 구현 (PMIx, PMI2)
- 스케줄링 알고리즘 (backfill, priority multifactor)
- 프로세스 추적 (cgroup, linuxproc)
3. 핵심 개념
3.1 Node, Partition, Job
| 개념 | 설명 |
|---|---|
| Node | 기본 컴퓨트 리소스. CPU, 메모리, GPU, 디스크 속성 보유 |
| Partition | 노드의 논리적 그룹 = 작업 큐. 접근 제어, 리소스 한도, 우선순위 설정 |
| Job | 사용자에게 지정 시간 할당된 리소스. 고유 ID, 리소스 요구사항, 상태 보유 |
| Job Step | 작업 내의 병렬 태스크 집합. 별도 Job보다 오버헤드 적음 |
Job 1234
├── Step 0: 데이터 전처리 (1 노드)
├── Step 1: 학습 (4 노드, 32 태스크)
└── Step 2: 평가 (1 노드)
3.2 Account, QoS, Fairshare
Account: 리소스 사용 추적을 위한 계층적 조직 단위
root
├── engineering
│ ├── ml-team
│ └── platform-team
└── research
├── physics
└── biology
QoS (Quality of Service): 작업 행동을 제어하는 한도와 우선순위 세트
- 스케줄링 우선순위
- 선점(Preemption) 정책
- 리소스 한도 (CPU, GPU, 메모리, 실행 작업 수)
Fairshare: 역사적 리소스 사용을 고려한 공정 할당 스케줄링
- 각 계정에 투자/자격에 비례한 share 할당
- 적게 사용한 사용자 → 높은 우선순위, 많이 사용한 사용자 → 낮은 우선순위
- 최근 사용에 더 큰 가중치 (감쇠 인자)
3.3 우선순위 계산 (Multifactor)
Job Priority = site_factor
+ (WeightAge) × age_factor -- 대기 시간
+ (WeightFairshare) × fairshare_factor -- 공정 분배
+ (WeightJobSize) × job_size_factor -- 작업 크기
+ (WeightPartition) × partition_factor -- 파티션 등급
+ (WeightQOS) × QOS_factor -- QoS 등급
+ TRES weights -- GPU 등 자원 가중치
- nice_factor -- 사용자 양보값
4. 필수 명령어
4.1 sbatch — 배치 작업 제출
# 기본 제출
sbatch job.sh
# 옵션 오버라이드
sbatch --partition=gpu --nodes=2 --gres=gpu:4 --time=24:00:00 train.sh
# 작업 이름과 출력 지정
sbatch --job-name=my_training --output=train_%j.log job.sh
# 특정 계정과 QoS
sbatch --account=ml-team --qos=high job.sh
4.2 srun — 병렬 작업/스텝 실행
# 3개 노드에서 호스트명 출력
srun -N3 -l /bin/hostname
# 인터랙티브 GPU 작업
srun --partition=gpu --gres=gpu:1 --pty bash
# GPU 바인딩으로 실행
srun --ntasks=4 --gpus-per-task=1 --gpu-bind=closest python train.py
4.3 salloc — 리소스 인터랙티브 할당
# GPU 노드 2개, 4시간 할당
salloc --nodes=2 --gres=gpu:4 --time=04:00:00 --partition=gpu
# 특정 기능 요구
salloc -N1 --constraint=a100 --gres=gpu:8 --mem=512G
4.4 squeue — 작업 큐 조회
# 내 작업만 표시
squeue -u $USER
# 커스텀 포맷
squeue -o "%.10i %.9P %.20j %.8u %.2t %.10M %.6D %R"
# PENDING 작업과 이유 표시
squeue -t PENDING -o "%.10i %.20j %.8u %.10M %R"
4.5 sinfo — 시스템 정보 조회
# 파티션 요약
sinfo
# GPU 리소스 표시
sinfo -o "%20N %10c %10m %20G %10t"
# 유휴 노드
sinfo -t idle
4.6 scancel — 작업 취소
scancel 12345 # 특정 작업 취소
scancel -u $USER # 내 작업 전부 취소
scancel -t PENDING -u $USER # PENDING 작업만 취소
scancel 12345_[1-10] # 특정 Array 태스크 취소
4.7 sacct — 작업 회계
# 완료된 작업 조회
sacct -u $USER
# 상세 포맷
sacct -j 12345 --format=JobID,JobName,Partition,State,Elapsed,MaxRSS,MaxVMSize,TotalCPU
# 날짜 범위 조회
sacct --starttime=2026-01-01 --endtime=2026-01-31 -u $USER
4.8 scontrol — 관리 제어
scontrol show job 12345 # 작업 상세 정보
scontrol show node gpu-001 # 노드 상세 정보
scontrol hold 12345 # 작업 보류
scontrol release 12345 # 보류 해제
scontrol update JobId=12345 TimeLimit=48:00:00 # 시간 변경
scontrol ping # 컨트롤러 연결 테스트
5. 작업 스크립트 예제
5.1 기본 CPU 작업
#!/bin/bash
#SBATCH --job-name=basic_job
#SBATCH --partition=compute
#SBATCH --nodes=1
#SBATCH --ntasks=4
#SBATCH --cpus-per-task=2
#SBATCH --mem=16G
#SBATCH --time=02:00:00
#SBATCH --output=output_%j.log
#SBATCH --error=error_%j.log
module load gcc/12.2.0
module load openmpi/4.1.5
echo "Job started on $(hostname) at $(date)"
echo "SLURM_JOB_ID: $SLURM_JOB_ID"
echo "SLURM_NODELIST: $SLURM_NODELIST"
srun ./my_simulation --input data.csv --output results/
echo "Job completed at $(date)"
5.2 단일 노드 GPU 작업
#!/bin/bash
#SBATCH --job-name=gpu_training
#SBATCH --partition=gpu
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=8
#SBATCH --mem=64G
#SBATCH --gres=gpu:a100:2
#SBATCH --time=12:00:00
#SBATCH --output=train_%j.log
module load cuda/12.2
module load anaconda/2024
conda activate ml_env
echo "Available GPUs: $CUDA_VISIBLE_DEVICES"
nvidia-smi
python train.py \
--model resnet50 \
--batch-size 256 \
--epochs 100 \
--data /shared/datasets/imagenet \
--output /scratch/$USER/checkpoints/
5.3 다중 노드 MPI 작업
#!/bin/bash
#SBATCH --job-name=mpi_job
#SBATCH --partition=compute
#SBATCH --nodes=8
#SBATCH --ntasks-per-node=32
#SBATCH --cpus-per-task=1
#SBATCH --mem-per-cpu=4G
#SBATCH --time=24:00:00
#SBATCH --exclusive
module load openmpi/4.1.5
echo "Running on $SLURM_NNODES nodes with $SLURM_NTASKS total tasks"
srun ./weather_simulation --grid-size 4096x4096x128 --timesteps 10000
5.4 Job Array (하이퍼파라미터 스윕)
#!/bin/bash
#SBATCH --job-name=hparam_sweep
#SBATCH --partition=gpu
#SBATCH --array=0-19%5 # 20개 태스크, 최대 5개 동시 실행
#SBATCH --nodes=1
#SBATCH --gres=gpu:1
#SBATCH --mem=32G
#SBATCH --time=06:00:00
#SBATCH --output=sweep_%A_%a.log # %A=Array ID, %a=Task ID
LEARNING_RATES=(0.1 0.01 0.001 0.0001 0.00001)
BATCH_SIZES=(32 64 128 256)
LR_IDX=$((SLURM_ARRAY_TASK_ID / 4))
BS_IDX=$((SLURM_ARRAY_TASK_ID % 4))
LR=${LEARNING_RATES[$LR_IDX]}
BS=${BATCH_SIZES[$BS_IDX]}
echo "Task $SLURM_ARRAY_TASK_ID: LR=$LR, BS=$BS"
python train.py --lr $LR --batch-size $BS \
--experiment-name "sweep_${SLURM_ARRAY_JOB_ID}_${SLURM_ARRAY_TASK_ID}"
5.5 Job Dependencies (파이프라인)
# Step 1: 전처리
JOB1=$(sbatch --parsable preprocess.sh)
# Step 2: 학습 (전처리 성공 후)
JOB2=$(sbatch --parsable --dependency=afterok:$JOB1 train.sh)
# Step 3: 평가 (학습 성공 후)
JOB3=$(sbatch --parsable --dependency=afterok:$JOB2 evaluate.sh)
# Step 4: 정리 (전부 완료 후, 성공/실패 무관)
JOB4=$(sbatch --parsable --dependency=afterany:$JOB1:$JOB2:$JOB3 cleanup.sh)
의존성 타입:
| 타입 | 의미 |
|---|---|
after:jobid | 작업 시작 후 |
afterok:jobid | 작업 성공 완료 후 |
afternotok:jobid | 작업 실패 후 |
afterany:jobid | 작업 완료 후 (성공/실패 무관) |
aftercorr:jobid | Array: 대응하는 태스크 성공 후 |
singleton | 같은 이름의 작업이 동시에 1개만 |
6. GPU 스케줄링 (GRES)
6.1 설정
slurm.conf:
GresTypes=gpu,mps,shard
NodeName=gpu-node[01-08] Gres=gpu:a100:8 CPUs=128 RealMemory=1024000
AccountingStorageTres=gres/gpu
gres.conf:
# 자동 감지 (권장)
AutoDetect=nvml # NVIDIA
# AutoDetect=rsmi # AMD
# AutoDetect=nrt # Intel Arc
6.2 GPU 요청 방법
# 아무 타입 GPU 2개
sbatch --gres=gpu:2 job.sh
# 특정 GPU 타입
sbatch --gres=gpu:a100:4 job.sh
# 노드당 GPU
sbatch --nodes=4 --gpus-per-node=8 job.sh
# 태스크당 GPU + CPU/메모리 어피니티
sbatch --ntasks=8 --gpus-per-task=1 --cpus-per-gpu=8 --mem-per-gpu=32G job.sh
Slurm은 GPU 격리를 위해 CUDA_VISIBLE_DEVICES를 자동 설정한다.
6.3 GPU 공유 옵션
| 방법 | 설명 | 설정 |
|---|---|---|
| MPS (Multi-Process Service) | 다중 프로세스 GPU 공유, 커널 병렬 실행 | Gres=gpu:a100:8,mps:800 |
| MIG (Multi-Instance GPU) | A100/H100을 독립 인스턴스로 분할 | AutoDetect=nvml (자동 감지) |
| Shard | 격리 없는 GPU 공유 (경량 추론) | Gres=gpu:2,shard:64 |
7. AI/ML 분산 학습
7.1 PyTorch DDP (다중 노드)
sbatch 스크립트 (4노드 × 8GPU = 32GPU):
#!/bin/bash
#SBATCH --job-name=ddp-multigpu
#SBATCH --partition=gpu
#SBATCH --nodes=4
#SBATCH --ntasks-per-node=1
#SBATCH --gres=gpu:8
#SBATCH --cpus-per-task=64
#SBATCH --mem=0
#SBATCH --exclusive
#SBATCH --time=72:00:00
#SBATCH --output=ddp_%j.log
export MASTER_PORT=$(( RANDOM % (50000 - 30000 + 1) + 30000 ))
export MASTER_ADDR=$(scontrol show hostnames $SLURM_JOB_NODELIST | head -n 1)
export WORLD_SIZE=$(( SLURM_NNODES * 8 ))
echo "MASTER_ADDR=$MASTER_ADDR, MASTER_PORT=$MASTER_PORT, WORLD_SIZE=$WORLD_SIZE"
# NCCL 설정
export NCCL_DEBUG=INFO
export NCCL_SOCKET_IFNAME=^docker0,lo
srun torchrun \
--nnodes $SLURM_NNODES \
--nproc_per_node 8 \
--rdzv_id $SLURM_JOB_ID \
--rdzv_backend c10d \
--rdzv_endpoint $MASTER_ADDR:$MASTER_PORT \
train.py \
--model llama-7b \
--data /shared/datasets/openwebtext \
--batch-size 32 \
--gradient-accumulation-steps 4
Python 학습 스크립트 패턴:
import os
import torch
import torch.distributed as dist
from torch.nn.parallel import DistributedDataParallel as DDP
from torch.utils.data.distributed import DistributedSampler
def setup():
dist.init_process_group(backend="nccl")
rank = dist.get_rank()
world_size = dist.get_world_size()
local_rank = int(os.environ["LOCAL_RANK"])
torch.cuda.set_device(local_rank)
return rank, world_size, local_rank
def main():
rank, world_size, local_rank = setup()
model = MyModel().cuda(local_rank)
model = DDP(model, device_ids=[local_rank])
dataset = MyDataset(...)
sampler = DistributedSampler(dataset, num_replicas=world_size, rank=rank)
dataloader = DataLoader(dataset, sampler=sampler, batch_size=32)
for epoch in range(num_epochs):
sampler.set_epoch(epoch) # 셔플링에 필수
for batch in dataloader:
...
dist.destroy_process_group()
7.2 DeepSpeed (다중 노드)
#!/bin/bash
#SBATCH --job-name=deepspeed-train
#SBATCH --partition=gpu
#SBATCH --nodes=4
#SBATCH --ntasks-per-node=1
#SBATCH --gres=gpu:8
#SBATCH --cpus-per-task=64
#SBATCH --mem=0
#SBATCH --exclusive
#SBATCH --time=96:00:00
export MASTER_ADDR=$(scontrol show hostnames $SLURM_JOB_NODELIST | head -n 1)
export MASTER_PORT=$(( RANDOM % (50000 - 30000 + 1) + 30000 ))
export NNODES=$SLURM_NNODES
export NUM_PROCESSES=$(( NNODES * 8 ))
srun bash -c 'accelerate launch \
--main_process_ip $MASTER_ADDR \
--main_process_port $MASTER_PORT \
--machine_rank $SLURM_NODEID \
--num_processes $NUM_PROCESSES \
--num_machines $NNODES \
--use_deepspeed \
--zero_stage 2 \
--mixed_precision fp16 \
train.py \
--model_name_or_path meta-llama/Llama-2-7b \
--per_device_train_batch_size 4 \
--gradient_accumulation_steps 8'
7.3 Horovod (MPI 기반)
#!/bin/bash
#SBATCH --job-name=horovod-train
#SBATCH --nodes=4
#SBATCH --ntasks-per-node=4
#SBATCH --gres=gpu:4
module load openmpi/4.1.5 cuda/12.2
srun --mpi=pmix python train_horovod.py --epochs 100 --batch-size 64
8. 컨테이너 통합
8.1 Singularity / Apptainer
#!/bin/bash
#SBATCH --job-name=container_job
#SBATCH --gres=gpu:1
#SBATCH --time=04:00:00
# --nv 플래그로 GPU 지원
srun singularity exec --nv \
--bind /scratch/$USER:/data \
--bind /shared/datasets:/datasets \
/shared/containers/pytorch_24.03.sif \
python train.py --data /datasets/imagenet
8.2 Enroot + Pyxis (NVIDIA)
Enroot는 NVIDIA의 경량 컨테이너 런타임, Pyxis는 Slurm SPANK 플러그인으로 srun --container-* 플래그를 제공한다.
#!/bin/bash
#SBATCH --nodes=4
#SBATCH --ntasks-per-node=8
#SBATCH --gres=gpu:8
#SBATCH --exclusive
srun --container-image=nvcr.io/nvidia/pytorch:24.03-py3 \
--container-mounts=/shared/data:/data,/scratch/$USER:/workspace \
--container-workdir=/workspace \
torchrun \
--nnodes=$SLURM_NNODES \
--nproc_per_node=8 \
--rdzv_backend=c10d \
--rdzv_endpoint=$(scontrol show hostnames $SLURM_JOB_NODELIST | head -n 1):29500 \
train.py --data /data
NVIDIA DGX SuperPOD과 DGX Cloud에서 광범위하게 사용된다.
9. 설정 (slurm.conf)
9.1 핵심 설정 파라미터
# 클러스터 식별
ClusterName=my_cluster
SlurmctldHost=controller01
SlurmctldHost=controller02 # 백업 컨트롤러
# 인증
AuthType=auth/munge
# 스케줄링
SchedulerType=sched/backfill
SelectType=select/cons_tres # 추적 가능한 소비형 리소스
SelectTypeParameters=CR_Core_Memory
PriorityType=priority/multifactor
PriorityWeightAge=1000
PriorityWeightFairshare=10000
PriorityWeightJobSize=500
PriorityWeightQOS=2000
PriorityDecayHalfLife=7-0 # 7일
# 리소스 관리
ProctrackType=proctrack/cgroup
TaskPlugin=task/cgroup,task/affinity
GresTypes=gpu,mps,shard
# 회계
AccountingStorageType=accounting_storage/slurmdbd
AccountingStorageTres=gres/gpu
# 작업 기본값
DefMemPerCPU=4096 # 4GB
MaxMemPerCPU=16384 # 16GB
DisableRootJobs=YES
MpiDefault=pmix_v4
# 노드 정의
NodeName=compute[001-100] CPUs=64 RealMemory=256000 State=UNKNOWN
NodeName=gpu[001-032] CPUs=128 RealMemory=1024000 Gres=gpu:a100:8 Feature=a100,nvlink
# 파티션 정의
PartitionName=compute Nodes=compute[001-100] Default=YES MaxTime=7-00:00:00
PartitionName=gpu Nodes=gpu[001-032] MaxTime=3-00:00:00 AllowGroups=gpu-users
PartitionName=debug Nodes=compute[001-004],gpu[001-002] MaxTime=01:00:00 PriorityTier=100
9.2 cgroup.conf
ConstrainCores=yes # CPU 코어 핀닝
ConstrainRAMSpace=yes # 메모리 한도 강제
AllowedRAMSpace=100 # 할당 메모리의 % (초과 시 OOM Kill)
ConstrainSwapSpace=yes
ConstrainDevices=yes # 디바이스 격리 (GPU)
10. 고급 기능
10.1 Backfill 스케줄링
Slurm의 보조 스케줄링 루프. 짧은 저우선순위 작업이 긴 고우선순위 작업을 지연시키지 않는 한 먼저 실행되도록 허용한다.
SchedulerType=sched/backfill
SchedulerParameters=bf_interval=30,bf_resolution=300,bf_max_job_test=1200
효과적으로 작동하려면 작업 시간 한도(--time)가 필수다.
10.2 Preemption (선점)
# slurm.conf
PreemptType=preempt/qos
PreemptMode=REQUEUE # CANCEL, REQUEUE, SUSPEND, GANG
PreemptExemptTime=00:05:00 # 선점 전 유예 시간
| 모드 | 동작 |
|---|---|
| CANCEL | 저우선순위 작업 종료 |
| REQUEUE | 가능하면 재큐, 불가하면 취소 |
| SUSPEND | 작업 일시 중지 |
| GANG | 시분할 공유 |
10.3 Job Array 대규모 제출
# 1000개 태스크, 최대 50개 동시 실행
sbatch --array=0-999%50 sweep.sh
# 환경변수: SLURM_ARRAY_JOB_ID, SLURM_ARRAY_TASK_ID
# MaxArraySize: 최대 4,000,001 (설정 가능)
11. 모니터링 및 트러블슈팅
11.1 진단 명령어
scontrol ping # 컨트롤러 연결 테스트
sdiag # 스케줄러 진단 (스레드, 큐, 백필 사이클)
scontrol show node X # 노드 상태 확인
sacct -j ID --format=JobID,Elapsed,TotalCPU,ReqMem,MaxRSS,State # 작업 효율
11.2 일반적인 문제와 해결
| 문제 | 진단 | 해결 |
|---|---|---|
| 노드 DRAIN | scontrol show node | 문제 수정 후 scontrol update NodeName=X State=RESUME |
| 작업 PENDING | squeue -j ID -o "%R" (Reason 확인) | 리소스, 파티션 한도, QoS, 의존성 확인 |
| GPU 미감지 | slurmd -C, slurmd -G | 드라이버, gres.conf AutoDetect, 디바이스 파일 확인 |
| OOM Kill | sacct --format=MaxRSS,ReqMem | 더 많은 메모리 요청 또는 cgroup 한도 조정 |
| slurmctld 과부하 | sdiag (스레드 수) | RPC rate limiting, 폴링 빈도 감소 |
11.3 일반적인 PENDING 사유
| 사유 | 의미 |
|---|---|
| Resources | 리소스 대기 중 |
| Priority | 더 높은 우선순위 작업이 앞에 있음 |
| Dependency | 의존 작업 완료 대기 |
| QOSMaxJobsPerUserLimit | QoS 작업 수 한도 도달 |
| PartitionTimeLimit | 요청 시간이 파티션 한도 초과 |
| ReqNodeNotAvail | 요청 노드 사용 불가 |
12. 다른 스케줄러와 비교
| 특성 | Slurm | PBS Pro / Torque | IBM LSF | Kubernetes |
|---|---|---|---|---|
| 라이선스 | GPL v2 (오픈소스) | AGPL / 상용 | 상용 (IBM) | Apache 2.0 |
| 주요 용도 | HPC, AI 학습 | HPC, 전통 배치 | 엔터프라이즈 HPC | 클라우드 마이크로서비스 |
| 확장성 | 100K+ 노드 | 50K+ | 100K+ | 5K+ |
| GPU 지원 | 네이티브 GRES, MIG, MPS | 훅 기반 | GPU-aware | Device Plugin |
| MPI 지원 | 네이티브 (PMIx) | 네이티브 | 네이티브 | MPI Operator |
| Fairshare | 내장 | Maui/Moab 필요 | 내장 | 미내장 |
| TOP500 채택 | ~60-65% | ~10-15% | ~10-15% | 드묾 |
트렌드: Slurm(학습) + Kubernetes(추론/서빙) 하이브리드 구성이 주류
13. References
공식 문서
- Slurm 공식 문서 — 모든 기능의 기준 레퍼런스
- Quick Start User Guide
- Quick Start Admin Guide
- Slurm GRES Scheduling
- Slurm Job Array
- Slurm Containers Guide
- Slurm Configuration Tool — 웹 기반 slurm.conf 생성기
- Slurm Rosetta Stone (PDF) — PBS/LSF/SGE 명령어 대조표
- GitHub: SchedMD/slurm
AI/ML 분산 학습
- PyTorch DDP Multi-Node Slurm Examples
- PyTorch Multi-Node Training Tutorial
- NVIDIA DGX Cloud DeepSpeed Examples
- Multi-Node Training on Slurm (GitHub Gist)