본문 바로가기
딥러닝\머신러닝/에러 디버깅

[Torch] RuntimeError DataLoader worker pids 15332 exited unexpectedly 에러가 나는 이유?

by 인포메틱스 2023. 9. 26.
반응형

1. Introduction 

 딥러닝을 하다보면 다음과같은 에러가 발생할 때가 있다.

 

 RuntimeError : DataLoader worker pids * exited unexpectedly

 

 구글에 찾아보면 dataloader에 num_workers = 0 으로 수정하면 된다는 포스팅이 보인다. 혹은 에러나는 부분의 구문을 삭제하라는등.. 이런 해결책이 보인다. 

 

dataloader에서 사용하고 있는 num_workers는 병렬로 처리해서 분석해주는 것이기 때문에 데이터가 클 때 빠르게 분석하고 싶다면 필수적으로 사용해야한다. 대신 무턱대로 숫자를 올리면 서버가 너무 느려지니 고려해야한다.

 

2. 이유가 뭔데?

 에러의 이유는 다양하다. 

- 이것저것 많이 돌려서 메모리가 충분하지 않거나

- 데이터의 문제가 있거나

- 다른 일과 충돌이 일어나거나

이외에도 다양한 이유가 있을 것이다. 결과적으로 어떤 일로 인해서 일이 중지되었다는 이야기다.

 

3. 해결책은?

 첫 번째 해결책은 num_workers를 늘리는 방법이다. 충분하게 늘리게 되면 메모리 사용량을 늘릴 수 있지만, 단점으로는 CPU도 그만큼 load되기 때문에 많이 느려진다. (서버가 아닌이상 num_workers를 10이상으로 두지말것..)

 

 두 번째 해결책은 배치의 크기를 줄이는 방법이다. 메모리가 부족하기때문에 발생한 문제이기 때문에 batch size를 줄이게 된다면 메모리가 부족해질 가능성이 줄어들게 된다. 혹은 이미지 데이터의 경우 이미지 데이터의 크기를 조절하는 방법도 적용할 수 있다.

 

 

 세 번째 해결책은 분석하려는 데이터들을 확인해보기. 데이터가 손상이 되었는지 하나하나 확인해보거나, dataloader를 통해 읽어보는것도 하나의 방법이다.

 

from torch.utils.data import DataLoader
from custom_dataset import Customdataset

dataset = Customdataset()
dataloader = DataLoader(dataset,batch_size = 32,num_workers= 4)

for batch in dataloader:
	try:
    
    except Exception as e:
    	print('Error:', e)

 

네 번째 해결책은 서버 혹은 컴퓨터의 하드웨어 업그레이드이다. 램이나 cpu를 좋은 것으로 구매하면 된다.

728x90
반응형

댓글