HPC 와 Slurm · Slurm 구성요소와 설정 파일 · 실습
slurm.conf 작성하기
목표
요구사항에 맞는 slurm.conf 를 처음부터 작성하고, 일관성 검증 스크립트를 직접 만듭니다.
왜 중요한가
Slurm 설정 오류는 에러가 늦게, 엉뚱한 곳에서 나타납니다. 노드가 INVAL 이나 DOWN 으로 빠지고 로그에 원인이 한 줄 찍혀 있는데, 그걸 안 보면 며칠 헤맵니다. 가장 흔한 두 가지는 CPUs 가 소켓×코어×스레드와 다른 것과 파티션이 정의되지 않은 노드를 참조하는 것입니다. 둘 다 사람이 손으로 계산하다 나는 실수이고, 둘 다 스크립트로 미리 잡을 수 있습니다.
실제 slurmd 는 돌리지 않습니다. 작성한 설정과 검증 스크립트를 채점합니다.
이 실습의 요구사항
- 클러스터 이름
labhub-hpc, 컨트롤러 호스트ctl01 - 노드 3대:
gpu-node01~gpu-node03, 각각 소켓 2 / 소켓당 코어 16 / 코어당 스레드 2 / 메모리 257000MB / GPU a100 4장 - 파티션 2개:
batch(전체 노드, 기본, 최대 24시간),short(전체 노드, 최대 1시간)
단계
1. /etc/slurm 과 /root/slurm 두 디렉터리를 만드세요.
2. /etc/slurm/slurm.conf 를 만들고 다음 키를 넣으세요.ClusterName=labhub-hpc, SlurmctldHost=ctl01, SlurmUser=slurm, StateSaveLocation=/var/spool/slurmctld, SlurmdSpoolDir=/var/spool/slurmd, AuthType=auth/munge
3. 스케줄링 관련 키를 추가하세요.SchedulerType=sched/backfill, SelectType=select/cons_tres, SelectTypeParameters=CR_Core_Memory, ProctrackType=proctrack/cgroup, TaskPlugin=task/cgroup,task/affinity
4. 노드 3대를 정의하세요. 각 줄은 NodeName= 으로 시작하고 Sockets, CoresPerSocket, ThreadsPerCore, CPUs, RealMemory, State 를 포함해야 합니다. CPUs 값이 소켓×코어×스레드와 일치해야 합니다.
5. 파티션 2개를 정의하세요. batch 는 Default=YES 와 MaxTime=24:00:00, short 는 MaxTime=01:00:00 입니다. 두 파티션 모두 Nodes= 에 적은 노드가 4번에서 정의한 것이어야 합니다.
6. 로그와 계정 관련 키를 추가하세요.SlurmctldLogFile=/var/log/slurm/slurmctld.log, SlurmdLogFile=/var/log/slurm/slurmd.log, JobAcctGatherType=jobacct_gather/cgroup, ReturnToService=2
7. munge 사용자와 그룹을 만들고, /etc/munge/munge.key 를 1024바이트 랜덤 데이터로 생성한 뒤 권한 0400, 소유자 munge:munge 로 설정하세요.
8. /root/slurm/validate.sh 를 작성하세요. 첫 번째 인자로 slurm.conf 경로를 받아 다음 두 규칙을 검사하고, 위반이 없으면 종료 코드 0, 있으면 0 이 아닌 값으로 끝나야 합니다.
- 규칙 1: 모든
NodeName=줄에서CPUs가Sockets × CoresPerSocket × ThreadsPerCore와 같아야 한다 - 규칙 2: 모든
PartitionName=줄의Nodes=에 나오는 노드가NodeName=으로 정의돼 있어야 한다 (범위 표기gpu-node[01-03]를 전개해 확인할 것)
채점기가 여러분의 /etc/slurm/slurm.conf(통과해야 함)와 /opt/fixtures/slurm/broken/slurm.conf(실패해야 함) 양쪽으로 실행합니다.
참고
- 랜덤 키 생성:
dd if=/dev/urandom of=/etc/munge/munge.key bs=1 count=1024 - 범위 표기 전개:
gpu-node[01-03]→gpu-node01 gpu-node02 gpu-node03. bash 의 중괄호 확장이나 seq 로 처리할 수 있습니다. - 실제 노드의 값은 그 노드에서
slurmd -C를 돌리면 그대로 나옵니다. 손 계산보다 안전합니다. - 흔한 실수 1: 4번에서
CPUs=32처럼 계산을 틀리는 경우. 2×16×2 = 64 입니다. - 흔한 실수 2: 8번 스크립트가 범위 표기를 전개하지 않아 정상 설정도 실패로 판정하는 경우.
단계 8개
- 설정 디렉터리 준비
- 기본 키 작성
- 스케줄러와 자원 선택
- 노드 정의
- 파티션 정의
- 로그와 계정
- munge 키 준비
- 일관성 검증 스크립트