我是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)
6条答案
按热度按时间sqxo8psd1#
对于GPU内存不足的错误,没有“完整”的解决方案,但是有很多事情可以减轻内存需求。另外,请确保您没有同时将trainset和testset传递到GPU!
1.将批大小减少到1
1.减少完全连接的图层的维数(它们占用的内存最多)
1.(图像数据)应用中心裁剪
1.(图像数据)将RGB数据转换为灰度
1.(文本数据)在n个字符处截断输入(这可能没有多大帮助)
或者,您可以尝试在Google Colaboratory(K80 GPU上的使用时间限制为12小时)和Next Journal上运行,这两个平台都提供高达12 GB的免费使用空间。最坏的情况是,您可能需要对CPU进行培训。希望这对您有所帮助!
sulc1iza2#
这是对我有效的解决方案。它可能对其他Windows用户也有效。只需删除/注解
num workers
即可禁用并行加载pcrecxhr3#
重新启动系统以使GPU重新获得其内存。保存所有工作并重新启动系统。
ee7vknir4#
我试着使用不同的组合对它进行微调。
6jygbczu5#
减少工人的数量,在你的情况下是
-- threads x
。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