NCCL WARN Ошибка Cuda «недопустимая функция устройства» и «неверный порядковый номер устройства»
Среда:
Фреймворк: TensorFlow Версия Framework: 2.4.0 Версия Horovod: 0.25.0 Версия MPI: 4.0.0 Версия CUDA: 11.0 Версия NCCL: 2.8.3 Версия Python: 3.6 ОС и версия: Ubuntu 18.04 Версия GCC: 7.5.0
Привет, я использую hovorod и TensorFlow2.4 для проведения параллельного обучения на графических процессорах NVIDIA GeForce GTX 1080 Ti. Я использую этот общий параметр «NCCL_DEBUG=WARN mpirun -n 2 python3 train.py», но он выдает следующую ошибку.
Предпочитайте tf.tensor_scatter_nd_update, который предлагает ту же функциональность с четко определенной семантикой чтения и записи. 2023-07-2617:30:24.238869: Itensorflow/stream_executor/platform/default/dso_loader.cc:49] Успешно открыта динамическая библиотека libcublas.so.11 2023-07-2617:30:24.516433: Itensorflow/stream_executor/platform/default/dso_loader.cc:49] Динамическая библиотека libcublasLt.so.11 успешно открыта 26 июля 2023 17:30:24.728742: Itensorflow/stream_executor/platform/default/dso_loader.cc:49] Динамическая библиотека успешно открыта libcudnn.so.8 26.07.2023 17:30:28.026432: Itensorflow/stream_executor/platform/default/dso_loader.cc:49] Динамическая библиотека libcublas.so.11 успешно открыта 26.07.2023 17:30:28.277099: Itensorflow/stream_executor/platform/default/dso_loader.cc:49] Динамическая библиотека libcublasLt.so.11 успешно открыта 2023-07-2617:30:28.470335: Itensorflow/stream_executor/platform/default/dso_loader.cc:49] Динамическая библиотека libcudnn.so.8 успешно открыта.
администратор:3274:3298 [0] misc/ibvwrap.cc:63 NCCL WARN Не удалось открыть libibverbs.so[.1] NCCL версии 2.8.3+cuda10.0
администратор:3275:3301 [1] misc/ibvwrap.cc:63 NCCL WARN Не удалось открыть libibverbs.so[.1]
администратор: 3275:3301 [1] enqueue.cc:231 NCCL WARN Ошибка Cuda «недопустимая функция устройства»
администратор: 3274:3298 [0] enqueue.cc:231 NCCL WARN Ошибка Cuda «недопустимая функция устройства»
администратор:3274:3298 [0] misc/argcheck.cc:14 NCCL WARN AllReduce: sendbuff не является допустимым указателем
администратор: 3274:3298 [0] init.cc:956 NCCL WARN Ошибка Cuda «неверный порядковый номер устройства»
администратор:3275:3301 [1] misc/argcheck.cc:39 NCCL WARN AllReduce: неверный корень 0 (корень должен находиться в диапазоне 0..0)
[администратор:03275] *** Обработка полученного сигнала ***
[администратор:03275] Сигнал: ошибка сегментации (11)
[администратор:03275] Код сигнала: Адрес не сопоставлен (1)
[администратор:03275] Ошибка по адресу: 0x1.
[администратор:03275] [0]/lib/x86_64-linux-gnu/libpthread.so.0(+0x12980)[0x7fa2f9ef1980]
[администратор:03275] [1]/home/ASR/.conda/envs/tensorflow2/lib/python3.6/site-packages/horovod/tensorflow/mpi_lib.cpython-36m-x86_64-linux-gnu.so(+0x14cf2c)[0x7fa293addf2c]
[администратор:03275] [2]/home/ASR/.conda/envs/tensorflow2/lib/python3.6/site-packages/horovod/tensorflow/mpi_lib.cpython-36m-x86_64-linux-gnu.so(_ZN7horovod6common11NCCLContext10ErrorCheckESs12ncclResult_tRP8ncclComm+0x50)[0x7fa293abbbb0]
[администратор:03275] [3]/home/ASR/.conda/envs/tensorflow2/lib/python3.6/site-packages/horovod/tensorflow/mpi_lib.cpython-36m-x86_64-linux-gnu.so(_ZN7horovod6common13NCCLAllreduce7ExecuteERSt6vectorINS0_16TensorTableEntryESaIS3_EERKNS0_8ResponseE+0x1e8)[0x7fa293abd4d8]
[администратор:03275] [4]/home/ASR/.conda/envs/tensorflow2/lib/python3.6/site-packages/horovod/tensorflow/mpi_lib.cpython-36m-x86_64-linux-gnu.so(_ZNK7horovod6common16OperationManager16ExecuteAllreduceERSt6vectorINS0_16TensorTableEntryESaIS3_EERKNS0_8ResponseE+0x71)[0x7fa293a78dc1]
[администратор:03275] [5]/home/ASR/.conda/envs/tensorflow2/lib/python3.6/site-packages/horovod/tensorflow/mpi_lib.cpython-36m-x86_64-linux-gnu.so(_ZNK7horovod6common16OperationManager16ExecuteOperationERSt6vectorINS0_16TensorTableEntryESaIS3_EERKNS0_8ResponseERNS0_10ProcessSetE+0xf1)[0x7fa293a79471]
[администратор:03275] [6]/home/ASR/.conda/envs/tensorflow2/lib/python3.6/site-packages/horovod/tensorflow/mpi_lib.cpython-36m-x86_64-linux-gnu.so(+0xb29f6)[0x7fa293a439f6]
[администратор:03275] [7]/home/ASR/.conda/envs/tensorflow2/lib/python3.6/site-packages/tensorflow/python/../libtensorflow_framework.so.2(+0x1832eff)[0x7fa2c7208eff]
[администратор:03275] [8]/lib/x86_64-linux-gnu/libpthread.so.0(+0x76db)[0x7fa2f9ee66db]
[администратор:03275] [9]/lib/x86_64-linux-gnu/libc.so.6(clone+0x3f)[0x7fa2f9c0f61f]
[администратор:03275]
Основное задание завершилось нормально, но 1 процесс вернул ненулевой код выхода. По указанию пользователя задание было прервано. mpirun заметил, что процесс ранга 1 с PID 0 на администраторе узла завершился по сигналу 11 (ошибка сегментации).
Я установил nccl2.8.3-1+cuda11.0, используйте команду «dpkg -l | grep nccl» может просмотреть информацию о libnccl2 и libnccl-dev. введите сюда описание изображения
И я также протестировал nccl, выполнив следующие шаги:
- клон git https://github.com/NVIDIA/nccl-tests.git
- компакт-диск nccl-тест
- make MPI=1 MPI_HOME=/путь/к/mpi CUDA_HOME=/путь/к/cuda NCCL_HOME=/путь/к/nccl
- ./build/all_reduce_perf -b 8 -e 128M -f 2 -g 6
- mpirun -np 6 ./build/all_reduce_perf -b 8 -e 128M -f 2 -g 1
Все в порядке!введите сюда описание изображения введите сюда описание изображения
Я также выполнил инструкции в https://github.com//issues/1171 и подтвердил, что в библиотеке NCCL есть разделы sm_61 (вычислительная способность графического процессора NVIDIA GeForce GTX 1080 Ti равна 6.1). Введите описание изображения здесь.
Я также переустановил хоровод 0.25.0 с помощью HOROVOD_GPU_ALLREDUCE=NCCL HOROVOD_CUDA_HOME=/usr/local/cuda-11.0 HOROVOD_NCCL_HOME=/usr/local/cuda-11.0 pip install --no-cache-dir horovod, но все равно выдает ту же ошибку.
В чем дело? Кто-нибудь может мне помочь? Большое спасибо. Кстати, я установил nccl2.8.3+cuda11.0, но почему NCCL_DEBUG выдает информацию о версии NCCL 2.8.3+cuda10.0? Хотя на моей машине установлены CUDA10.0 и CUDA11.0, но я не устанавливал эту версию nccl и не могу найти nccl в каталоге CUDA10.0.