GPU가 10개있는 서버가 있어서 6개 정도를 device 에 할당해서 python train.py 했는데 epoch가 전혀 돌아가질 않았다.그런데 device 2개로 할당하면 train이 되면서 epoch가 나온다. 이는 무슨 문제일까?
->이는 NCCL의 문제이다.
NCCL은 NVIDIA Collective Communications Library의 약자로, "Nickel"이라고 발음합니다3. 이는 NVIDIA가 개발한 GPU 간 통신을 최적화하기 위한 라이브러리
-> 여러 GPU가 동시에 통신하면서 데이터 동기화 과정에서 교착 상태(deadlock)가 발생
NCCL이 GPU 간 직접 통신을 시도하지만 하드웨어적 제한으로 실패
해결
.bashrc에 export NCCL_P2P_DISABLE=1 이거 넣어서 NCCL이 제어 못하도록 막음