Ошибка при обходе Pytorch DataLoader [BrokenPipeError: [Errno 32]Broken pipe]

PyTorch

описание проблемы

  • После обучения модели в среде графического процессора и успешного развертывания среды ЦП при попытке пройти через DataLoader появляется следующее сообщение об ошибке. детали следующим образом:
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/multiprocessing/resource_sharer.py", line 142, in _serve
    with self._listener.accept() as conn:
  File "/usr/local/lib/python3.6/multiprocessing/connection.py", line 455, in accept
    deliver_challenge(c, self._authkey)
  File "/usr/local/lib/python3.6/multiprocessing/connection.py", line 720, in deliver_challenge
    connection.send_bytes(CHALLENGE + message)
  File "/usr/local/lib/python3.6/multiprocessing/connection.py", line 200, in send_bytes
    self._send_bytes(m[offset:offset + size])
  File "/usr/local/lib/python3.6/multiprocessing/connection.py", line 404, in _send_bytes
    self._send(header + buf)
  File "/usr/local/lib/python3.6/multiprocessing/connection.py", line 368, in _send
    n = write(self._handle, buf)
BrokenPipeError: [Errno 32] Broken pipe

анализ проблемы

  • Пошаговая отладка точки останова находит код ошибки, вызванный Pytorch при обходе DataLoader.
loader =DataLoader(dataset,
	batch_size = batch_size,
    shuffle=shuffle,
    num_workers = 4,
    pin_memory=True)
  • DataLoader num_workers включает чтение данных несколькими процессами, а Python имеет глобальную блокировку GIL во время разработки, поэтому многопроцессорность не может использовать многоядерность, и проблема примерно в этом. вывод кода ошибки try-catch:
[Errno 11] Resource temporarily unavailable
  • При обучении большими партиями значение num_workers=4 повышает эффективность обучения графического процессора и не требуется для логического вывода ЦП.

проблема решена

  • Просто установите num_workers равным 0.

приложение