pytorch训练时内存被占满导致训练终止

错误信息

OSError: [Errno 12] Cannot allocate memory
RuntimeError: DataLoader worker (pid 10443) is killed by signal

原因分析

最后发现,所训练的数据集较大,每个epoch循环次数太多,在记录损失时不规范,导致内存占用越来越大

from timm.utils import AverageMeter
def train_one_epoch()
	loss_meter = AverageMeter()
	# # len(data_loader)较大
	for step, (samples, targets) in enumerate(data_loader):
		loss = model()
		loss_meter.update(loss)  # # 导致内存占用一直增大

正确做法

loss_meter.update(loss.item())

内存泄漏问题

早期版本的python或pytorch(如0.4.0)存在bug,在加载数据时容易内存泄漏,可尝试设置num_workers=0,增加交换内存缓解问题,治标不治本
不过经排查不是这个原因,现在应该已经修复了
https://github.com/pytorch/pytorch/issues/8976
https://github.com/prlz77/ResNeXt.pytorch/issues/5

你可能感兴趣的:(pytorch,分布式)