解决pytorch训练的过程中内存一直增加的问题
2023-12-13 13:31:02
来自:解决pytorch训练的过程中内存一直增加的问题 - 知乎
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_l oss['loss'] += loss.item() 以及 eval_loss['loss'] += loss.item()。值得注意的是,要复现内存越来越大的问题,模型中需要切换model.train() 和 model.eval(),train_loss以及eval_loss的作用是保存模型的平均误差(这里是累积误差),保存到tensorboard中。
文章来源:https://blog.csdn.net/wdh315172/article/details/134965621
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!