[에러노트 / Pytorch] [W ProcessGroupNCCL.cpp:1618] Rank 1 using best-guess GPU 1 to perform barrier as devices used by this process are currently unknown.
Machine Learning/ML 개발 2021. 8. 10. 03:10반응형
[W ProcessGroupNCCL.cpp:1618] Rank 1 using best-guess GPU 1 to perform barrier as devices used by this process are currently unknown. This can potentially cause a hang if this rank to GPU mapping is incorrect.Specify device_ids in barrier() to force use of a particular device. 해결법
에러 메시지
[W ProcessGroupNCCL.cpp:1618] Rank 1 using best-guess GPU 1 to perform barrier as devices used by this process are currently unknown.
This can potentially cause a hang if this rank to GPU mapping is incorrect.Specify device_ids in barrier() to force use of a particular device.
이후 코드 돌아가다가 갑자기 사망.
에러 발생 지점
$python -m torch.distributed.launch
pytorch의 torch.distributed.launch, 즉 multi-gpu 상황일 때 발생한다.
일반적으로 torch.distributed.launch를 하게 되면, 자동으로 프로세스에 process local rank가 할당되고, local rank에 따라 cuda:0, cuda:1 형식으로 디바이스를 할당하게 된다. 그리고 다른 프로세스가 동시 점유 하여 문제가 발생하지 않도록, barrier라는 개념이 있는데, 이 barrier가 정상적으로 작동하지 못하게 되면 문제가 발생한다.
다양한 원인이 존재한다.
- NCCL, NVCC 버전 문제 / 드라이버 손상
- 동일한 Local Rank를 가진 Zombie 프로세스가 백그라운드에 살아있어서 발생하는 문제
- Pytorch 버전 문제(?)
해결법
- NCCL, NVCC 드라이버 문제
NCCL과 CUDA와 cuDNN을 다시 설치해주면 문제가 해결될 수 있다. - Zombie Process 문제
$ps -ef | grep python
위 명령어를 통해 Python이 사용되고 있는 프로세스를 찾고 종료시킨다.
일반적으로, 그래픽카드를 사용하여 생기는 문제이므로, 간단하게
$nvidia-smi
위 명령어를 통해 process의 pid를 얻어내고 종료시켜도 좋다. - Pytorch 버전 문제
물론 정상적인 방법은 아니다. 위 방법을 모두 시도했을때도 실패했다면 시도를 해보는 것이 바람직하다.
해당 이슈는 Pytorch가 1.9로 버전업되면서 분산학습에 torch elastic이 사용되는 경우가 있다. 여기서 문제가 발생하는 경우가 꽤 많은 것 같다.
완벽한 대응은 아니었지만, 필자는 huggingface의 BERT를 Tesla V100 2대로 분산학습 시키는 과정에서 위 에러를 만났고, 끝까지 해결법을 찾지 못해 torch 버전을 아예 1.6버전으로 낮춰버리고 다시 학습을 돌렸더니 정상적으로 동작을 하는 모습을 확인할 수 있었다.
코드에 버전 호환이 가능하다면, Torch 버전을 내려서 해결할 수도 있을 것 같다.
반응형