错误信息
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) # # 导致内存占用一直增大
正确做法
利用.item()切断计算图,仅保留数值
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