Slurm 잡 실행 시 IO 타임아웃 발생 및 해결

Slurm 잡 실행 시 IO 타임아웃 발생 및 해결

Slurm 잡 실행 시 IO 타임아웃 발생 및 해결 방법에 대해 정리해 봤습니다.
2026.07.14

안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 Slurm 잡 실행 시 IO 타임아웃 발생 및 해결 방법에 대해 정리해 봤습니다.

Slurm을 검증한 내용은 아래 블로그에서 확인할 수 있습니다.

https://dev.classmethod.jp/articles/jw-rhel9-ec2-slurm-job-scheduler-validation/

Slurm 잡 실행 시 connect io: Connection timed out 오류 해결

Slurm 클러스터를 구성한 후 간단한 srun 테스트를 진행하던 중, 예상치 못한 I/O 타임아웃 오류를 만났습니다.

처음에는 Slurm 데몬(slurmctld, slurmd)이 정상적으로 실행 중이었고, 필요한 포트도 모두 열려 있는 것으로 보여 원인을 쉽게 찾지 못했습니다. 하지만 문제는 Slurm이 작업 실행 시 사용하는 Ephemeral Port(임시 포트) 에 있었습니다.

이번 글에서는 발생했던 오류와 원인, 그리고 해결 방법을 정리해보겠습니다.

문제 상황

클러스터 구성이 끝난 후 간단하게 hostname을 실행해 보았습니다.

srun --nodes=1 --ntasks=1 hostname

하지만 아무런 출력도 나오지 않은 채 수십 초 동안 멈춰 있다가 다음과 같은 오류가 발생했습니다.

error: connect io: Connection timed out
error: _fork_all_tasks: IO setup failed: Slurmd could not connect IO

처음에는 다음과 같은 문제를 의심했습니다.

  • slurmd가 실행되지 않은 경우
  • slurmctld와의 통신 문제
  • DNS 또는 Hostname 설정 문제
  • Munge 인증 문제

하지만 이 모든 항목은 정상적으로 동작하고 있었습니다.

원인

원인은 Slurm의 I/O 연결 방식에 있었습니다.

많은 사람들이 Slurm은 6817, 6818 포트만 열면 된다고 생각합니다.

대표적으로 사용하는 포트는 다음과 같습니다.

포트 용도
6817 slurmctld
6818 slurmd
6819 slurmdbd(선택)

실제로 저 역시 보안 그룹(Security Group)에 위 포트들을 모두 허용해 두었습니다.

그래서 처음에는 네트워크 문제가 아니라고 생각했습니다.

Slurm은 작업 실행 시 별도의 I/O 채널을 만든다

srun으로 작업을 실행하면 단순히 slurmctld와 통신만 하는 것이 아닙니다.

실행 과정은 대략 다음과 같습니다.

srun


slurmctld (Master)


slurmd (Worker)


Task 실행

여기까지는 대부분 알고 있는 구조입니다.

하지만 작업이 시작되는 순간 하나의 과정이 더 있습니다.

Worker

   │  (Ephemeral Port)

Master

워커 노드에서 실행된 프로세스의 표준 입력(stdin), 표준 출력(stdout), 표준 에러(stderr) 를 전달하기 위해 별도의 I/O 연결을 생성합니다.

이 연결은 Slurm 전용 포트(6817, 6818)가 아니라 운영체제가 할당하는 Ephemeral Port(임시 포트) 를 사용합니다.

Linux에서 일반적으로 사용하는 Ephemeral Port 범위는 다음과 같습니다.

1024-65535

환경에 따라 다를 수 있지만 대부분의 배포판에서는 이 범위 또는 이와 유사한 범위를 사용합니다.

Worker

   ├── 6818 → slurmd 통신

   └── 임시 포트 → IO 통신

처럼 두 종류의 연결이 동시에 이루어집니다.

왜 타임아웃이 발생했을까?

제가 구성한 환경은 AWS EC2 기반의 Slurm 클러스터였습니다.

Master Security Group에는 다음 포트만 열려 있었습니다.

6817
6818

Slurm 데몬끼리의 통신은 정상적으로 이루어졌습니다.

하지만 Worker가 Master로 새로운 I/O 연결을 생성하려고 하자,

Worker

   │ 54321

Master

보안 그룹이 해당 포트를 차단하면서 연결이 이루어지지 않았습니다.

결국 일정 시간 동안 재시도하다가 다음 오류를 출력했습니다.

error: connect io: Connection timed out

error: _fork_all_tasks: IO setup failed:
Slurmd could not connect IO

즉, Slurm 자체는 정상 동작하고 있었지만 I/O 채널만 생성하지 못했던 것입니다.

이 때문에 잡이 시작되지 않은 것처럼 보였습니다.

해결 방법

해결 방법은 매우 간단했습니다.

Master 노드의 Security Group 인바운드 규칙에 다음 항목을 추가했습니다.

포트 범위 프로토콜 소스
1024-65535 TCP Worker Security Group

중요한 점은 인터넷 전체(0.0.0.0/0) 에 개방하는 것이 아니라 Worker Security Group만 허용하는 것입니다.

이렇게 하면 필요한 노드끼리만 Ephemeral Port 통신이 가능하므로 보안도 유지할 수 있습니다.

적용 후 테스트

보안 그룹을 수정한 직후 다시 동일한 명령을 실행했습니다.

srun --nodes=1 --ntasks=1 hostname

이번에는 즉시 정상적으로 실행되었습니다.

ip-10-0-yyy-yyy.ap-northeast-1.compute.internal

별다른 Slurm 설정 변경 없이 Security Group 수정만으로 문제가 해결되었습니다.

왜 처음에는 원인을 찾기 어려웠을까?

이 문제는 Slurm을 처음 구성할 때 흔히 겪을 수 있는 함정입니다.

대부분의 설치 가이드에서는 다음 포트만 설명합니다.

  • 6817 (slurmctld)
  • 6818 (slurmd)
  • 6819 (slurmdbd, 선택)

그래서 "필요한 포트는 모두 열려 있다"고 생각하기 쉽습니다.

하지만 srun을 통한 작업 실행에서는 워커 노드가 마스터 노드로 별도의 I/O 연결을 생성하며, 이 연결은 운영체제가 동적으로 할당하는 임시 포트를 사용합니다.

온프레미스 환경에서는 방화벽 정책이 비교적 느슨하거나 내부 네트워크에서 자유롭게 통신할 수 있는 경우가 많아 문제가 드러나지 않을 수 있습니다. 반면 AWS Security Group처럼 기본적으로 허용된 포트만 통신 가능한 환경에서는 이 제약이 그대로 나타나 connect io: Connection timed out 오류로 이어질 수 있습니다.

마무리

error: connect io: Connection timed outSlurmd could not connect IO 오류가 발생한다고 해서 반드시 Slurm 설정이나 Munge 인증에 문제가 있는 것은 아닙니다.

클러스터의 기본 통신은 정상이어도 잡 실행 시 생성되는 I/O 채널이 방화벽이나 Security Group에 의해 차단되면 동일한 증상이 발생할 수 있습니다.

AWS 환경에서 Slurm 클러스터를 운영한다면 다음 사항을 함께 확인해 보시기 바랍니다.

  • 6817, 6818 포트가 정상적으로 열려 있는지
  • Master와 Worker 간 Security Group 규칙이 올바른지
  • Worker에서 Master 방향으로 Ephemeral Port(1024–65535/TCP) 통신이 허용되는지
  • srun hostname과 같은 간단한 명령으로 먼저 실행 테스트를 수행하는지

이번 사례처럼 Slurm 설정에는 문제가 없었지만 네트워크 정책 때문에 잡이 실행되지 않는 경우가 생각보다 흔합니다. connect io: Connection timed out 오류를 만난다면 Slurm 설정뿐 아니라 보안 그룹과 방화벽 정책까지 함께 점검해 보는 것을 추천합니다.

5%off
library

この記事をシェアする

関連記事