LabHub

HPC 와 Slurm · 장애 진단 · 이론

노드가 빠졌을 때 읽는 순서

LabHub 에서 이어서 보기

한 줄 요약

Slurm 장애 진단은 sinfo 로 범위를 좁히고 slurmctld.log 에서 이유를 읽는 것으로 대부분 끝난다.

왜 이게 필요했나

"작업이 안 돕니다" 라는 신고를 받으면 확인할 곳이 여럿이다. 작업이 큐에서 대기 중인가, 노드가 빠졌는가, 인증이 깨졌는가, 설정이 잘못됐는가. 그런데 순서가 있다.

어떻게 동작하나

1단계 — 전체 상태

sinfosinfo -R                        # DRAIN/DOWN 이유만sinfo -N -l                     # 노드별 상세

sinfo -R 이 특히 유용하다. 빠진 노드와 그 이유 문자열만 보여 준다.

노드 상태의 의미.

| 상태 | 뜻 |
| --- | --- |
| idle | 정상, 작업 없음 |
| alloc / mix | 전체/일부 자원이 할당됨 |
| drain | 관리자 또는 시스템이 뺐다. 자동 복귀 안 함 |
| down | 응답 없음 또는 등록 실패 |
| inval | 설정이 실제와 맞지 않음 |
| fail / failg | 하드웨어 문제 보고 |

2단계 — 이유 읽기

scontrol show node gpu-node01 | grep -i reasontail -100 /var/log/slurm/slurmctld.logtail -100 /var/log/slurm/slurmd.log     # 해당 노드에서

로그에 나오는 대표 메시지와 원인.

| 메시지 | 원인 |
| --- | --- |
| Low socket*core*thread count | CPUs 가 소켓×코어×스레드와 불일치 |
| Low RealMemory | 설정한 메모리가 노드의 실제보다 큼 |
| gres/gpu count reported lower than configured | slurm.confgres.conf 개수 불일치 |
| Munge decode failed: Expired credential | 시계 불일치 |
| Munge decode failed: Invalid credential | 키 불일치 |
| partition X has unknown node Y | 정의되지 않은 노드를 파티션이 참조 |
| Node unexpectedly rebooted | 노드 재부팅 후 등록 |

munge 오류의 두 종류를 구분하는 것이 중요하다. Expired credential 은 시계 문제라 NTP 를 보고, Invalid credential 은 키 문제라 /etc/munge/munge.key 를 비교한다. 완전히 다른 대응이다.

3단계 — 작업이 안 도는 경우

노드는 멀쩡한데 작업이 대기만 한다면 squeue 의 REASON 열을 본다.

| REASON | 대응 |
| --- | --- |
| Resources | 요청한 자원이 아직 안 남았다. 정상 대기 |
| Priority | 우선순위가 높은 작업이 앞에 있다 |
| Dependency | 선행 작업 대기 |
| PartitionTimeLimit | --time 이 파티션 최대치를 넘었다 |
| PartitionNodeLimit | 요청 노드 수가 파티션 한도를 넘었다 |
| ReqNodeNotAvail | 지정한 노드가 사용 불가 |
| QOSMax... | QOS 제한에 걸렸다 |

PartitionTimeLimit 같은 것은 영원히 대기한다. 자원이 생겨도 절대 시작하지 않으므로, 사용자가 요청을 고쳐 다시 제출해야 한다.

4단계 — 복구

원인을 고쳤으면 노드를 명시적으로 복귀시킨다.

scontrol update NodeName=gpu-node01 State=RESUMEscontrol update NodeName=gpu-node[01-03] State=RESUMEscontrol reconfigure                     # 설정 변경 반영

설정 파일을 고쳤다면 모든 노드에 배포한 뒤 scontrol reconfigure 를 해야 한다. 한 노드만 다르면 그 노드가 다시 빠진다.

현장에서 만나는 모습

시계 문제는 주기적으로 재발한다. NTP 가 죽어 있거나 방화벽이 123 포트를 막으면 며칠에 걸쳐 서서히 어긋나다가 어느 날 munge 가 거부하기 시작한다. 클러스터 모니터링에 시계 동기화 상태를 넣어 두는 것이 좋다.

DRAIN 이유 문자열을 지우지 않고 남겨 두는 습관. scontrol update ... State=RESUME 만 하면 이유가 사라진다. 조사 기록을 위해 사유를 어딘가에 남긴 뒤 복귀시키는 팀이 많다.

다음 실습에서 할 것

깨진 설정과 로그가 담긴 픽스처를 받아 원인 네 개를 각각 특정하고, 수정본을 만들고, 복구 절차를 작성하고, RCA 보고서를 남긴다.