LabHub

HPC 와 Slurm · Slurm 구성요소와 설정 파일 · 이론

slurm.conf 를 정확히 쓰기

LabHub 에서 이어서 보기

한 줄 요약

slurm.conf모든 노드에서 동일해야 하는 단일 진실이다. 한 노드만 다르면 그 노드가 조용히 빠진다.

왜 이게 필요했나

Slurm 설정 오류의 특징은 에러가 늦게, 엉뚱한 곳에서 나타난다는 것이다. 노드가 INVAL 이나 DOWN 으로 빠지고, 로그에는 원인이 한 줄 찍혀 있는데 그걸 안 보면 며칠 헤맨다.

어떻게 동작하나

필수 키

ClusterName=labhub-hpcSlurmctldHost=ctl01SlurmUser=slurmSlurmdUser=rootStateSaveLocation=/var/spool/slurmctldSlurmdSpoolDir=/var/spool/slurmdSlurmctldPidFile=/run/slurmctld.pidSlurmdPidFile=/run/slurmd.pidAuthType=auth/munge

스케줄링과 자원 선택

SchedulerType=sched/backfillSelectType=select/cons_tresSelectTypeParameters=CR_Core_MemoryProctrackType=proctrack/cgroupTaskPlugin=task/cgroup,task/affinity

노드 정의

NodeName=gpu-node01 Sockets=2 CoresPerSocket=16 ThreadsPerCore=2 CPUs=64 RealMemory=257000 Gres=gpu:a100:8 State=UNKNOWN

여기서 가장 자주 나는 실수 두 가지가 있다.

1. CPUsSockets × CoresPerSocket × ThreadsPerCore 와 다르다. 이 경우 slurmctld 가 Low socket*core*thread count 로 노드를 INVAL 상태에 넣는다.
2. RealMemory 를 실제 물리 메모리보다 크게 잡는다. 노드가 보고하는 값보다 크면 Low RealMemory 로 DOWN 된다. 반대로 너무 작게 잡으면 메모리를 낭비한다. OS 가 쓰는 몫을 빼고 잡는 것이 관례다 — 256GB 노드면 RealMemory=257000 정도(MB 단위).

노드의 실제 값은 slurmd -C 로 확인할 수 있다. 그 출력을 그대로 붙여 넣는 것이 가장 안전하다.

파티션 정의

PartitionName=batch Nodes=gpu-node[01-03] Default=YES MaxTime=24:00:00 State=UPPartitionName=short Nodes=gpu-node[01-03] MaxTime=01:00:00 Priority=100 State=UP

로깅과 상태

SlurmctldLogFile=/var/log/slurm/slurmctld.logSlurmdLogFile=/var/log/slurm/slurmd.logAccountingStorageType=accounting_storage/noneJobAcctGatherType=jobacct_gather/cgroupReturnToService=2

ReturnToService=2 는 DOWN 된 노드가 유효한 설정으로 다시 등록하면 자동 복귀하게 한다. 기본값 0 은 관리자가 명시적으로 RESUME 해야 한다.

변경 후

scontrol reconfigure            # 대부분의 변경은 이것으로 반영systemctl restart slurmctld     # 일부 핵심 변경은 재기동 필요scontrol show config | head -40

설정 파일을 모든 노드에 배포하는 것을 잊지 마라. 한 노드만 다르면 그 노드가 조용히 빠진다. 그래서 대부분의 클러스터는 /etc/slurm 을 공유 스토리지에 두거나 형상 관리로 배포한다.

현장에서 만나는 모습

slurmd -C 출력을 그대로 쓰지 않아 생기는 문제. 손으로 계산하다 ThreadsPerCore 를 빼먹거나 하이퍼스레딩을 잘못 세면 노드가 INVAL 로 빠진다. 그 노드에서 slurmd -C 를 돌려 나온 줄을 그대로 붙이는 것이 가장 확실하다.

다음 실습에서 할 것

요구사항에 맞는 slurm.conf 를 처음부터 작성하고, munge 키 권한을 맞추고, 일관성 검증 스크립트를 직접 만든다. 채점기가 그 스크립트를 정상 설정과 깨진 설정 양쪽으로 실행한다.