Slurm IO Error Debugging

서울대학교 데이터사이언스대학원 GPU 클러스터의 Slrum I/O Error 디버깅 기록.

간헐적으로 srun 으로 실행한 작업이 노드는 할당받았지만 시작을 못하는 경우가 있다.

원하는 작업(프로세스)은 끝났는데 종료가 안 되는 경우도 있다.

이 스레드에 따르면 계산 노드와 로그인 노드간 패킷 로스나 연결 문제일 가능성이 커 보인다.

srun 에 -vvvv 옵션으로 문제가 발생한 상황을 좀 더 자세히 보면, IO 용으로 32971 번 포트를 쓰는 것을 확인할 수 있다.

이 포트는 클러스터에서 jupyter notebook 서비스를 위해 사용하는 포트 범위에 들어간다. 이게 문제가 되는 이유를 보기 위해 로그인 노드의 iptable 을 확인해보자.

로그인 노드의 30000-35200 번 포트로 연결하는 경우 특정 계산노드로 포워딩하는 규칙들이 있다. 그래서 srun 으로 작업을 실행시켰을 때 계산노드->로그인노드 접속을 원했지만 운이 나쁘면 이 포트포워딩 때문에 계산노드->다른계산노드 접속이 되는 것이다. 당연히 제대로 돌아갈 리가 없다.

이를 해결하려면 slurm.conf 에서 SrunPortRange 옵션을 수정해서 srun 이 특정 포트만 사용하도록 강제하면 된다.

수정 후 srun 을 실행해보면 의도한 대로 60000번대 포트를 쓰고 있는 것을 확인할 수 있다. 간헐적으로 발생하던 I/O 에러도 다 사라짐.