PyTorch自定义架构实验中内存占用持续累积攀升问题排查求助
PyTorch自定义架构实验中内存占用持续累积攀升问题排查求助
各位大佬好!我最近在训练一个针对特定问题的自定义模型架构,模型本身的表现一直很顺畅,但在做一个基于不同属性计算损失的实验时,遇到了棘手的内存问题:每次完成一组属性组合的迭代后,RAM占用都会小幅上涨,而且这种消耗会持续累积,到第20次左右就会占满内存直接崩溃。
我本来以为每次迭代都重写了变量,不应该出现这种内存泄漏的情况,但排查了很久都找不到根因,想请大家帮忙看看!
问题具体情况
实验逻辑是遍历不同的属性组合,针对每组属性重新训练模型(特征数量变化时会重置模型和优化器),计算对应损失。但每次迭代后内存都不会释放干净,累积到一定程度就崩了。
我的部分代码片段
prev_size = 1 for attribute_item in combined_attributes: NUM_FEATURES = len(attribute_item) print(attribute_item) if NUM_FEATURES != prev_size: reset_model_optimizer() prev_size = NUM_FEATURES start_time = time.time() for epoch in range(50): # 创建数据批次生成器 data_gen = data_generator(trainloader) for i, examples in enumerate(data_gen, 0): (inputs, desired_output) = examples # 清空参数梯度 optimizer.zero_grad() # 前向传播 output_predictions = model(inputs) # 计算损失 desired_output = desired_output.to(output_predictions.device) loss = torch.nn.MSELoss()(output_predictions, desired_output) # 反向传播+优化 loss.backward() optimizer.step() # 记录损失 output_loss.append(loss.item()) output_attribute.append(attribute_item) output_epoch.append(j for j in range(50)) # 计算并打印耗时 end_time = time.time() execution_time = end_time - start_time minutes = int(execution_time // 60) seconds = int(execution_time % 60) time_format = "{:02d}:{:02d}".format(minutes, seconds) print("Time elapsed:", time_format) # 重置记录列表 output_attribute = [] output_epoch = [] output_loss = [] # 手动删除变量 del inputs del desired_output del output_predictions del loss
我已经尝试过的排查步骤
- 逐一检查了代码中所有变量的内存占用情况,没有发现单个变量占用异常高的内存
- 每次迭代后手动删除了训练相关的变量,并重置了记录用的列表
- 确认特征数量变化时会调用
reset_model_optimizer()重置模型和优化器
目前实在找不到问题出在哪,真心希望能得到大家的排查思路或者解决方案,完整代码也可以提供参考!
备注:内容来源于stack exchange,提问作者Racchel
相关产品推荐
相关产品推荐

