에러 노트
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시간정도 걸리긴 하는데, 이건 상황에 맞추어 . 잘 활용하도록 하면 될것 같다.