DopeorNope 개발일지

Multi-GPU 훈련시 Timeout 문제 해결법 본문

에러 노트

Multi-GPU 훈련시 Timeout 문제 해결법

DopeorNope 2024. 1. 15. 07:56

torch는 분산학습 가지고 훈련하는데 매우 최적화가 잘되어 있다.

 

특히 보통 이제 torch.distributed를 활용하여 분산학습을 시작하게 되는데, 가끔 훈련시 이러한 문제점을 발생하는 경우가 있다.

 

 Watchdog caught collective operation timeout: WorkNCCL(OpType=BROADCAST, Timeout(ms)=1800000) ran for 1808499 milliseconds before timing out.

 

 

이 에러는 정말 단순하지만 보면 볼 수록 이해가 안가는 에러메세지이다.

 

왜 에러메세지가 생기는가?

 

그것은 바로, 기본적으로 분산학습을 활용하는 프레임워크로 accelerate를 활용하는데 여기에서 기본적으로 세팅되어 있는 시간이 30분이다. 

 

즉 한작업을 수행하는데 최대 30분까지 기다려주는것이고 그 이상일때는 바로 에러메세지를 밷어낸다.

 

그러면 이런 것을 어떻게 해결할 수 있는가?

 

 

코드 한줄이면 된다.

 

import datetime

dist.init_process_group(backend="nccl", timeout=datetime.timedelta(days=2))

 

여기서 dist는 torch.distributed를 dist라는 이름으로 import 한것이다.

 

즉 좀더 정확하게 작성해주면 아래와 같다.

import torch.distributed as dist
import datetime

dist.init_process_group(backend="nccl", timeout=datetime.timedelta(days=2))

 

 

즉 타임아웃 시간을 2일로 늘려주는데, 보통 긴 작업이 한 최대 1시간에서 2시간정도 걸리긴 하는데, 이건 상황에 맞추어 . 잘 활용하도록 하면 될것 같다.