pytorch训练中内存一直增加的原因

代码中存在累加loss,但是每步的loss没加item()
例如下面例子;

import torch
import torch.nn as nn
from collections import defaultdict

if torch.cuda.is_available():
    device = 'cuda'
else:
    device = 'cpu'

model = nn.Linear(100, 400).to(device)
criterion = nn.L1Loss(reduction='mean').to(device)
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)

train_loss = defaultdict(float)
eval_loss = defaultdict(float)

for i in range(10000):
    model.train()
    x = torch.rand(50, 100, device=device)
    y_pred = model(x) # 50 * 400
    y_tgt = torch.rand(50, 400, device=device)

    loss = criterion(y_pred, y_tgt)
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
    
    # 会导致内存一直增加,需改为train_loss['loss'] += loss.item()
    train_loss['loss'] += loss

    if i % 100 == 0:
        train_loss = defaultdict(float)
        model.eval()
        x = torch.rand(50, 100, device=device)
        y_pred = model(x) # 50 * 400

        y_tgt = torch.rand(50, 400, device=device)
        loss = criterion(y_pred, y_tgt)

        # 会导致内存一直增加,需改为eval_loss['loss'] += loss.item()
        eval_loss['loss'] += loss

对于以上代码会导致内存占用越来越大,解决的方法是train_loss[‘loss’] += loss.item() 以及 eval_loss[‘loss’] += loss.item()。值得注意的是,要复现内存越来越大的问题,模型中需要切换model.train() 和 model.eval(),train_loss以及eval_loss的作用是保存模型的平均误差(这里是累积误差),保存到tensorboard中

pytorch中,.item()方法 是得到一个元素张量里面的元素值
具体就是 用于将一个零维张量转换成浮点数

  • 11
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
当遇到PyTorch训练过程内存不足的问题时,有几种优化方法可以尝试: 1. 减小批次大小:通过减小每个批次的样本数,可以降低内存需求。可以通过减小batch_size参数来实现,但要注意不要将其设置得太小,否则可能会影响模型的性能。 2. 使用数据并行:如果你的机器有多个GPU,可以使用PyTorch的数据并行功能,将训练过程分布到多个GPU上。这样可以减少单个GPU上的内存压力。 3. 数据预处理和增强技术:在训练之前,可以对数据进行预处理和增强,以减少内存占用。例如,可以通过将图片进行裁剪、调整大小或降低分辨率来减小图像数据的大小。 4. 使用更小的模型:如果内存问题仍然存在,可以考虑使用更小的模型。可以尝试减少模型的宽度(减少通道数)或深度(减少层数),以减少内存使用量。 5. 清理缓存:在训练过程PyTorch会缓存间计算结果以加速反向传播。但这也会占用一定的内存空间。你可以尝试在每个训练步骤之后手动清理缓存,使用`torch.cuda.empty_cache()`来释放GPU上的缓存。 6. 使用分布式训练:如果你有多台机器可用,可以考虑使用分布式训练来分担内存负载。PyTorch提供了分布式训练的支持,可以将训练过程分布到多台机器上进行。 以上是一些常见的优化方法,你可以尝试根据你的具体情况选择合适的方法。如果问题仍然存在,可能需要考虑使用更高配置的机器或者使用其他技术手段来解决内存不足的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值