当前位置:   article > 正文

BrokenPipeError: [Errno 32] Broken pipe解决办法

brokenpipeerror: [errno 32] broken pipe

我在train的过程中。出现错误

  1. BrokenPipeError Traceback (most recent call last)
  2. ~\AppData\Local\Temp\ipykernel_15608\3724903352.py in <module>
  3. 37 checkpoint_dir=checkpoint_dir,
  4. 38 checkpoint_interval=hparams.syncnet_checkpoint_interval,
  5. ---> 39 nepochs=27)
  6. ~\AppData\Local\Temp\ipykernel_15608\843007753.py in train(device, model, train_data_loader, test_data_loader, optimizer, checkpoint_dir, checkpoint_interval, nepochs)
  7. 7 while global_epoch < nepochs:
  8. 8 running_loss = 0.
  9. ----> 9 prog_bar = tqdm(enumerate(train_data_loader))
  10. 10 for step, (x, mel, y) in prog_bar:
  11. 11 model.train()
  12. ~\.conda\envs\wav2lip\lib\site-packages\torch\utils\data\dataloader.py in __iter__(self)
  13. 436 return self._iterator
  14. 437 else:
  15. --> 438 return self._get_iterator()
  16. 439
  17. 440 @property
  18. ~\.conda\envs\wav2lip\lib\site-packages\torch\utils\data\dataloader.py in _get_iterator(self)
  19. 382 else:
  20. 383 self.check_worker_number_rationality()
  21. --> 384 return _MultiProcessingDataLoaderIter(self)
  22. 385
  23. 386 @property
  24. ~\.conda\envs\wav2lip\lib\site-packages\torch\utils\data\dataloader.py in __init__(self, loader)
  25. 1046 # before it starts, and __del__ tries to join but will get:
  26. 1047 # AssertionError: can only join a started process.
  27. -> 1048 w.start()
  28. 1049 self._index_queues.append(index_queue)
  29. 1050 self._workers.append(w)
  30. ~\.conda\envs\wav2lip\lib\multiprocessing\process.py in start(self)
  31. 110 'daemonic processes are not allowed to have children'
  32. 111 _cleanup()
  33. --> 112 self._popen = self._Popen(self)
  34. 113 self._sentinel = self._popen.sentinel
  35. 114 # Avoid a refcycle if the target function holds an indirect
  36. ~\.conda\envs\wav2lip\lib\multiprocessing\context.py in _Popen(process_obj)
  37. 221 @staticmethod
  38. 222 def _Popen(process_obj):
  39. --> 223 return _default_context.get_context().Process._Popen(process_obj)
  40. 224
  41. 225 class DefaultContext(BaseContext):
  42. ~\.conda\envs\wav2lip\lib\multiprocessing\context.py in _Popen(process_obj)
  43. 320 def _Popen(process_obj):
  44. 321 from .popen_spawn_win32 import Popen
  45. --> 322 return Popen(process_obj)
  46. 323
  47. 324 class SpawnContext(BaseContext):
  48. ~\.conda\envs\wav2lip\lib\multiprocessing\popen_spawn_win32.py in __init__(self, process_obj)
  49. 87 try:
  50. 88 reduction.dump(prep_data, to_child)
  51. ---> 89 reduction.dump(process_obj, to_child)
  52. 90 finally:
  53. 91 set_spawning_popen(None)
  54. ~\.conda\envs\wav2lip\lib\multiprocessing\reduction.py in dump(obj, file, protocol)
  55. 58 def dump(obj, file, protocol=None):
  56. 59 '''Replacement for pickle.dump() using ForkingPickler.'''
  57. ---> 60 ForkingPickler(file, protocol).dump(obj)
  58. 61
  59. 62 #
  60. BrokenPipeError: [Errno 32] Broken pipe

出现 BrokenPipeError 错误通常是因为在多进程环境中,父进程和子进程之间的通信管道中断导致的。在这种情况下,这个问题可能与 DataLoader 和多进程有关。

可以尝试以下方法来解决这个问题:

  1. 将 DataLoader 的 num_workers 参数设置为 0。这将使 DataLoader 在主进程中运行,而不是多个子进程中:
  1. train_data_loader = DataLoader(train_dataset, batch_size=hparams.syncnet_batch_size, shuffle=True, num_workers=0)
  2. test_data_loader = DataLoader(test_dataset, batch_size=hparams.syncnet_batch_size, shuffle=False, num_workers=0)

请注意,将 num_workers 设置为 0 可能会降低数据加载的速度。

  1. 如果你在 Jupyter Notebook 中运行代码,尝试将代码移到独立的 Python 脚本中,并在命令行中运行它。有时,Jupyter Notebook 与多进程不兼容。

  2. 确保所有函数和对象都是可序列化的。在多进程环境中,对象需要在进程之间序列化和传输。如果遇到不可序列化的对象,可能会导致通信错误。检查 DataLoader 和模型中使用的所有自定义函数和对象,确保它们可以使用 pickle 库进行序列化。

  3. 如果你使用的是 Windows 操作系统,请确保在运行训练代码时使用 if __name__ == '__main__': 语句来防止多进程的递归调用。这将确保只有在脚本作为主模块执行时,训练代码才会运行。例如:

  1. if __name__ == '__main__':
  2. train(device, model, train_data_loader, test_data_loader, optimizer,
  3. checkpoint_dir=checkpoint_dir,
  4. checkpoint_interval=hparams.syncnet_checkpoint_interval,
  5. nepochs=27)

 

解决方法二、

修改调用torch.utils.data.DataLoader()函数时的 num_workers 参数。 让参数设置为零。 

这将使 DataLoader 在主进程中运行,而不是多个子进程中。但请注意,这可能会降低数据加载速度,因为不再使用多进程并行加载数据。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/850903
推荐阅读
相关标签
  

闽ICP备14008679号