PyTorch运行时错误:DataLoader工作进程(pid 15332)意外退出

jtw3ybtb  于 2022-11-09  发布在  其他
关注(0)|答案(6)|浏览(753)

我是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(64位)和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)
sqxo8psd

sqxo8psd1#

对于GPU内存不足的错误,没有“完整”的解决方案,但是有很多事情可以减轻内存需求。另外,请确保您没有同时将trainset和testset传递到GPU!
1.将批大小减少到1
1.减少完全连接的图层的维数(它们占用的内存最多)
1.(图像数据)应用中心裁剪
1.(图像数据)将RGB数据转换为灰度
1.(文本数据)在n个字符处截断输入(这可能没有多大帮助)
或者,您可以尝试在Google Colaboratory(K80 GPU上的使用时间限制为12小时)和Next Journal上运行,这两个平台都提供高达12 GB的免费使用空间。最坏的情况是,您可能需要对CPU进行培训。希望这对您有所帮助!

sulc1iza

sulc1iza2#

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

pcrecxhr

pcrecxhr3#

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

ee7vknir

ee7vknir4#

我试着使用不同的组合对它进行微调。

6jygbczu

6jygbczu5#

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

qacovj5a

qacovj5a6#

Aneesh Cherian的解决方案在Windows系统下适用于笔记本电脑(IPython)。但是如果你想使用num_worker〉0,你应该避免使用IPython这样的解释器,而把数据加载放在if __name__ == '__main__:中。另外,如果persistent_worker =True,那么在Windows系统下,如果num_worker〉0,数据加载速度会更快。
更多信息可在此主题中找到:https://github.com/pytorch/pytorch/issues/12831

相关问题