RuntimeError: DataLoader worker (pid(s) *, *, *) exited unexpectedly 오류 해결

2023. 6. 29. 18:04오류해결

Problem

파이토치를 사용하다 보면 데이터를 불러오는 데 있어서 위와 같은 에러가 나올 때가 있다. 나도 몇 번 접해본 적이 있는데 이번에 글을 한 번 써보기로 했다.

Simple Solution

먼저 기본적인 해결법은 간단하다. 

 

파이토치의 DataLoader 파라메터 중 num_workers를 0으로 setting 해주면 해결된다.

 

Second Problem

하지만 내 경우는 mmsegmentation 모듈을 사용하고 있었는데, 내부적으로 persistent_workers를 사용하고 있어서 무조건 num_workers 1이상으로 사용하라는 에러가 다시 나타났다 ㅠㅠ. 

Solution

mmseg.datasets.dataloader 모듈이 workers_per_gpu라는 파라메터를 가지고 있는데 이를 0으로 맞춰준다. 걍 num_workers와 똑같은 개념이라고 보면 된다. 그리고 persistent_workers라는 파라메터가 default로 True로 되어있기 때문에 이를 False로 바꿔준다.

**만~~~약이라도 안된다면, torch.utils.data.dataloader.py 를 찾아가서 
(e.g. ~/anaconda3/envs/py38-cuda11.2/lib/python3.8/site-packages/torch/utils/data/dataloader.py) 
raise ValueError('persistent_workers option needs num_workers > 0') 구문을 지워보는 것도 한 방법이다.

그럼!!! 코드가 잘 돌아가는 것을 확인할 수 있다 ㅎㅎ

 

RuntimeError: DataLoader worker (pid(s)) exited unexpectedly