LabHub
배우기 러닝패스 코스

HPCとSlurm

slurm.confを書く

LabHub 에서 이어서 보기

한국어 원문으로 표시합니다.

목표

요구사항에 맞는 slurm.conf 를 처음부터 작성하고, 일관성 검증 스크립트를 직접 만듭니다.

왜 중요한가

Slurm 설정 오류는 에러가 늦게, 엉뚱한 곳에서 나타납니다. 노드가 INVAL 이나 DOWN 으로 빠지고 로그에 원인이 한 줄 찍혀 있는데, 그걸 안 보면 며칠 헤맵니다. 가장 흔한 두 가지는 CPUs 가 소켓×코어×스레드와 다른 것파티션이 정의되지 않은 노드를 참조하는 것입니다. 둘 다 사람이 손으로 계산하다 나는 실수이고, 둘 다 스크립트로 미리 잡을 수 있습니다.

실제 slurmd 는 돌리지 않습니다. 작성한 설정과 검증 스크립트를 채점합니다.

이 실습의 요구사항

단계

  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개를 정의하세요. batchDefault=YESMaxTime=24:00:00, shortMaxTime=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.key1024바이트 랜덤 데이터로 생성한 뒤 권한 0400, 소유자 munge:munge 로 설정하세요.
  8. /root/slurm/validate.sh 를 작성하세요. 첫 번째 인자로 slurm.conf 경로를 받아 다음 두 규칙을 검사하고, 위반이 없으면 종료 코드 0, 있으면 0 이 아닌 값으로 끝나야 합니다.
    • 규칙 1: 모든 NodeName= 줄에서 CPUsSockets × CoresPerSocket × ThreadsPerCore 와 같아야 한다
    • 규칙 2: 모든 PartitionName= 줄의 Nodes= 에 나오는 노드가 NodeName= 으로 정의돼 있어야 한다 (범위 표기 gpu-node[01-03] 를 전개해 확인할 것) 채점기가 여러분의 /etc/slurm/slurm.conf(통과해야 함)와 /opt/fixtures/slurm/broken/slurm.conf(실패해야 함) 양쪽으로 실행합니다.

참고

설정 디렉터리 준비

/etc/slurm/root/slurm 두 디렉터리를 만드세요.

표준 경로는 /etc/slurm 입니다. 작업용 디렉터리도 따로 만드세요.

기본 키 작성

/etc/slurm/slurm.conf 를 만들고 다음 키를 넣으세요. ClusterName=labhub-hpc, SlurmctldHost=ctl01, SlurmUser=slurm, StateSaveLocation=/var/spool/slurmctld, SlurmdSpoolDir=/var/spool/slurmd, AuthType=auth/munge

클러스터 이름, 컨트롤러 호스트, 실행 계정, 상태 저장 경로, 인증 방식이 기본입니다.

스케줄러와 자원 선택

스케줄링 관련 키를 추가하세요. SchedulerType=sched/backfill, SelectType=select/cons_tres, SelectTypeParameters=CR_Core_Memory, ProctrackType=proctrack/cgroup, TaskPlugin=task/cgroup,task/affinity

GPU 클러스터에서는 자원을 코어 단위로 쪼개는 선택 플러그인이 필요합니다. 메모리도 소비 자원에 포함해야 합니다.

노드 정의

노드 3대를 정의하세요. 각 줄은 NodeName= 으로 시작하고 Sockets, CoresPerSocket, ThreadsPerCore, CPUs, RealMemory, State 를 포함해야 합니다. CPUs 값이 소켓×코어×스레드와 일치해야 합니다.

CPUs 는 소켓 × 코어 × 스레드와 일치해야 합니다. 계산을 두 번 확인하세요.

파티션 정의

파티션 2개를 정의하세요. batchDefault=YESMaxTime=24:00:00, shortMaxTime=01:00:00 입니다. 두 파티션 모두 Nodes= 에 적은 노드가 4번에서 정의한 것이어야 합니다.

Nodes 에 적은 노드가 모두 정의돼 있어야 합니다. 기본 파티션은 하나만 지정합니다.

로그와 계정

로그와 계정 관련 키를 추가하세요. SlurmctldLogFile=/var/log/slurm/slurmctld.log, SlurmdLogFile=/var/log/slurm/slurmd.log, JobAcctGatherType=jobacct_gather/cgroup, ReturnToService=2

컨트롤러와 노드 각각의 로그 경로가 필요합니다. 자원 수집 플러그인도 지정하세요.

munge 키 준비

munge 사용자와 그룹을 만들고, /etc/munge/munge.key1024바이트 랜덤 데이터로 생성한 뒤 권한 0400, 소유자 munge:munge 로 설정하세요.

키 파일의 권한과 소유자가 정확해야 munged 가 뜹니다. 크기도 정해진 값이 있습니다.

일관성 검증 스크립트

/root/slurm/validate.sh 를 작성하세요. 첫 번째 인자로 slurm.conf 경로를 받아 다음 두 규칙을 검사하고, 위반이 없으면 종료 코드 0, 있으면 0 이 아닌 값으로 끝나야 합니다.

채점기가 정상 설정과 픽스처의 깨진 설정 양쪽으로 실행합니다. 종료 코드로 구분하세요.