【问题标题】:PyTorch RuntimeError: DataLoader worker (pid(s) 15332) exited unexpectedlyPyTorch RuntimeError: DataLoader worker (pid(s) 15332) 意外退出
【发布时间】:2020-05-22 20:46:05
【问题描述】:

我是 PyTorch 的初学者,我只是在尝试一些示例 on this webpage。但由于此错误,我似乎无法运行“super_resolution”程序:

RuntimeError: DataLoader worker (pid(s) 15332) exited unexpectedly

我在网上搜索了一下,发现有人建议将num_workers设置为0。但如果我这样做,程序会告诉我内存不足(CPU 或 GPU):

RuntimeError: [enforce fail at ..\c10\core\CPUAllocator.cpp:72] data. DefaultCPUAllocator: not enough memory: you tried to allocate 9663676416 bytes. Buy new RAM!

或

RuntimeError: CUDA out of memory. Tried to allocate 1024.00 MiB (GPU 0; 4.00 GiB total capacity; 2.03 GiB already allocated; 0 bytes free; 2.03 GiB reserved in total by PyTorch)

我该如何解决这个问题?


我在 Win10(64bit) 和 pytorch 1.4.0 上使用 python 3.8。


更完整的错误信息(--cuda 表示使用 GPU,--threads x 表示将x 传递给num_worker 参数):

  1. 带有命令行参数--upscale_factor 1 --cuda
  File "E:\Python38\lib\site-packages\torch\utils\data\dataloader.py", line 761, in _try_get_data
    data = self._data_queue.get(timeout=timeout)
  File "E:\Python38\lib\multiprocessing\queues.py", line 108, in get
    raise Empty
_queue.Empty

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "Z:\super_resolution\main.py", line 81, in <module>
    train(epoch)
  File "Z:\super_resolution\main.py", line 48, in train
    for iteration, batch in enumerate(training_data_loader, 1):
  File "E:\Python38\lib\site-packages\torch\utils\data\dataloader.py", line 345, in __next__
    data = self._next_data()
  File "E:\Python38\lib\site-packages\torch\utils\data\dataloader.py", line 841, in _next_data
    idx, data = self._get_data()
  File "E:\Python38\lib\site-packages\torch\utils\data\dataloader.py", line 808, in _get_data
    success, data = self._try_get_data()
  File "E:\Python38\lib\site-packages\torch\utils\data\dataloader.py", line 774, in _try_get_data
    raise RuntimeError('DataLoader worker (pid(s) {}) exited unexpectedly'.format(pids_str))
RuntimeError: DataLoader worker (pid(s) 16596, 9376, 12756, 9844) exited unexpectedly
  1. 带有命令行参数--upscale_factor 1 --cuda --threads 0
  File "Z:\super_resolution\main.py", line 81, in <module>
    train(epoch)
  File "Z:\super_resolution\main.py", line 52, in train
    loss = criterion(model(input), target)
  File "E:\Python38\lib\site-packages\torch\nn\modules\module.py", line 532, in __call__
    result = self.forward(*input, **kwargs)
  File "Z:\super_resolution\model.py", line 21, in forward
    x = self.relu(self.conv2(x))
  File "E:\Python38\lib\site-packages\torch\nn\modules\module.py", line 532, in __call__
    result = self.forward(*input, **kwargs)
  File "E:\Python38\lib\site-packages\torch\nn\modules\conv.py", line 345, in forward
    return self.conv2d_forward(input, self.weight)
  File "E:\Python38\lib\site-packages\torch\nn\modules\conv.py", line 341, in conv2d_forward
    return F.conv2d(input, weight, self.bias, self.stride,
RuntimeError: CUDA out of memory. Tried to allocate 1024.00 MiB (GPU 0; 4.00 GiB total capacity; 2.03 GiB already allocated; 954.35 MiB free; 2.03 GiB reserved in total by PyTorch)

【问题讨论】:

    标签: python python-3.x pytorch


    【解决方案1】:

    对于 GPU 内存不足错误没有“完整”的解决方案,但是您可以采取很多措施来缓解内存需求。另外,请确保您没有同时将训练集和测试集传递给 GPU!

    1. 将批量大小减少到 1
    2. 降低全连接层的维数(它们是最占用内存的)
    3. (图像数据)应用中心裁剪
    4. (图像数据)将 RGB 数据转换为灰度
    5. (文本数据)在 n 个字符处截断输入(这可能没有太大帮助)

    或者,您可以尝试在 Google Colaboratory(K80 GPU 上的使用限制为 12 小时)和 Next Journal 上运行,两者都提供高达 12GB 的免费使用。在最坏的情况下,您可能必须对 CPU 进行培训。希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      重新启动系统以使 GPU 重新获得内存。保存所有工作并重新启动系统。

      【讨论】:

        【解决方案3】:

        我尝试使用不同的组合对其进行微调。我的解决方案是 batch_size = 1 和 n_of_jobs=8

        【讨论】:

        • 这并不能真正回答问题。如果您有其他问题,可以点击 提问。要在此问题有新答案时收到通知,您可以follow this question。一旦你有足够的reputation,你也可以add a bounty 来引起对这个问题的更多关注。 - From Review
        • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。
        【解决方案4】:

        减少工人的数量,-- threads x 在你的情况下。

        【讨论】:

          【解决方案5】:

          这是对我有用的解决方案。它可能适用于其他 Windows 用户。 只需删除/评论 num workers 即可禁用并行加载

          【讨论】:

            猜你喜欢
            • 2022-11-10
            • 2020-11-23
            • 2021-10-26
            • 2020-10-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多