#pytorch #gpu #distributed #nvidia-docker
Вопрос:
Во время выполнения распределенного обучения на 4 графических процессорах A6000 я получаю следующую ошибку:
[E ProcessGroupNCCL.cpp:630] [Rank 3] Watchdog caught collective operation timeout: WorkNCCL(OpType=BROADCAST, Timeout(ms)=1800000) ran for 1803710 milliseconds before timing out. [E ProcessGroupNCCL.cpp:390] Some NCCL operations have failed or timed out. Due to the asynchronous nature of CUDA kernels, subsequent GPU operations might run on corrupted/incomplete data. To avoid this inconsistency, we are taking the entire process down. terminate called after throwing an instance of 'std::runtime_error' what(): [Rank 2] Watchdog caught collective operation timeout: WorkNCCL(OpType=BROADCAST, Timeout(ms)=1800000) ran for 1804406 milliseconds before timing out. [E ProcessGroupNCCL.cpp:390] Some NCCL operations have failed or timed out. Due to the asynchronous nature of CUDA kernels, subsequent GPU operations might run on corrupted/incomplete data. To avoid this inconsistency, we are taking the entire process down.
Я использую стандартный докер NVidia PyTorch. Интересно то, что обучение отлично работает для небольших наборов данных, но для больших наборов данных я получаю эту ошибку. Таким образом, я могу подтвердить, что обучающий код верен и действительно работает.
Нигде нет фактической ошибки во время выполнения или какой-либо другой информации, позволяющей получать фактические сообщения об ошибках.
Ответ №1:
Следующие два решили проблему:
- Увеличьте SHM по умолчанию (общую память) для CUDA до 10g (я думаю, что 1g также сработал бы). Вы можете сделать это в docker, выполнив команду, передав
--shm-size=10g
. Я тоже пасую--ulimit memlock=-1
. export NCCL_P2P_LEVEL=NVL
.
Советы по отладке
Для проверки текущего SHM,
df -h # see the row for shm
Чтобы просмотреть отладочные сообщения NCCL:
export NCCL_DEBUG=INFO
Запустите тест пропускной способности p2p для канала связи GPU-GPU:
cd /usr/local/cuda/samples/1_Utilities/p2pBandwidthLatencyTest sudo make ./p2pBandwidthLatencyTest
Для графического процессора A6000 4 это печатает:
Матрица показывает полосу пропускания между каждой парой графических процессоров, и при использовании P2P она должна быть высокой.