Pytorch内存管理、CNNLSTM型号和FHD视频(内存不足问题)

2024-05-05 00:33:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我想解决这个问题。 我使用pytorch和[(3, 1920, 1080), 60fps, 10sec]视频数据制作了CNN-LSTM架构。 CNN架构如下

1

1。数据拆分

我将60fps的视频分为1个批量大小(因此,它总共有10块),并用2个批量大小测试了样本模型

2。模型培训

培训代码如下

def train(dataloader, cnn_model, lstm_model, loss_fn, optimizer):

    for batch, (X, y) in enumerate(dataloader):

        cnn_results = torch.zeros(BATCH_SIZE,FPS*SEC,CNN_OUTPUT, device=device)

        # CNN forward
        for idx, batch in enumerate(X):
            batch = batch.type(torch.FloatTensor).to(device).permute(0, 3, 1, 2)
            cnn_result = cnn_model(batch)
            cnn_results[idx] = cnn_result

        # LSTM forward
        lstm_results = torch.zeros(BATCH_SIZE, 3, device=device)
        for idx, result in enumerate(cnn_results):
            (lstm_hidden, lstm_cell) = lstm_model.module.initLSTM()
            l_output, (lstm_hidden, lstm_cell) = lstm_model(result.unsqueeze(0), lstm_hidden, lstm_cell)
            lstm_results[idx] = l_output[-1]
        y = y.to(device)
        loss = criterion(lstm_results, y)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        print(loss)

loss_fn = torch.nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=1e-3)
epochs = 5
for t in range(epochs):
    print(f"Epoch {t+1}\n-------------------------------")
    train(train_loader, model, lstm, loss_fn, optimizer)
print("Done!")

首先,利用CNN对60fps图像进行处理。这些都储存在一个火炬。零容器(大小:批量大小,60,64)

这些东西用于LSTM的输入。最终输出为(批量大小,3)

3。硬件

我使用2080TI超级GPU*8,所以GPU的总内存是11019MiB*8

问题

我真的不知道为什么火炬说“失去记忆”。 我想处理我的视频数据就足够了。 我想有一件事是,由于我的代码,每个时代都会存储内存

增补1-nvidia smi映像 enter image description here

附加2-模型参数比较

  1. enter image description here\n
  2. enter image description here

Tags: informodeldevicebatchtorch批量result