DataLoader中的Pytorch RNN内存分配错误

时间:2017-10-28 20:06:28

标签: pytorch

我正在Pytorch写一个RNN。 我有以下代码行:

data_loader = torch.utils.data.DataLoader(
    data,
    batch_size=args.batch_size,
    shuffle=True,
    num_workers=args.num_workers,
    drop_last=True)

如果我将num_workers设置为0,则会出现分段错误。 如果我将num_workers设置为> 0,然后我有追溯:

Traceback (most recent call last):
File "rnn_model.py", line 352, in <module>
train_model(train_data, dev_data, test_data, model, args)
File "rnn_model.py", line 212, in train_model
loss = run_epoch(train_data, True, model, optimizer, args)
File "rnn_model.py", line 301, in run_epoch
for batch in tqdm.tqdm(data_loader):
File "/home/username/miniconda3/lib/python2.7/site-packages/tqdm/_tqdm.py", 
line 872, in __iter__
for obj in iterable:
File "/home/username/miniconda3/lib/python2.7/site-
packages/torch/utils/data/dataloader.py", line 303, in __iter__
return DataLoaderIter(self)
File "/home/username/miniconda3/lib/python2.7/site-
packages/torch/utils/data/dataloader.py", line 162, in __init__
w.start()
File "/home/username/miniconda3/lib/python2.7/multiprocessing/process.py", line 130, in start
self._popen = Popen(self)
File "/home/username/miniconda3/lib/python2.7/multiprocessing/forking.py", line 121, in __init__
self.pid = os.fork()
OSError: [Errno 12] Cannot allocate memory

3 个答案:

答案 0 :(得分:1)

您正在尝试加载的数据超过系统可以容纳的RAM。 您可以尝试仅加载部分数据,也可以使用/写入仅加载当前批次所需数据的数据加载器。

答案 1 :(得分:0)

我的猜测是,批量大小和通过args传递的工作人员数量的任何值都被铸造或误解。

请打印出来并确保获得通过的值。

答案 2 :(得分:0)

以防出现内存错误消息。请运行torch.cuda.empty_cache()清除缓存并重新启动内核。