如何减少 CUDA 和 Pytorch 的专用 GPU 内存使用量并使用共享 GPU 内存

Ege*_*Ege 14 python memory gpu pytorch

当我尝试使用 Huggingface 模型之一进行情感分析时,出现以下错误:

RuntimeError: CUDA out of memory. Tried to allocate 72.00 MiB (GPU 0; 3.00 GiB total capacity; 1.84 GiB already allocated; 5.45 MiB free; 2.04 GiB reserved in total by PyTorch)
Run Code Online (Sandbox Code Playgroud)

虽然我没有使用 CUDA 内存,但它仍然保持在同一水平。在此输入图像描述

我尝试使用torch.cuda.empty_cache(),但它并没有影响问题。当我关闭 jupyter 笔记本时,它减少到 0。所以我很确定它是 pytorch 和 python 的东西。

这是我的代码:

import joblib
import torch
from transformers import AutoTokenizer, AutoModelForSequenceClassification,pipeline
import torch.nn.functional as F
from torch.utils.data import DataLoader
import pandas as pd
import numpy as np
from tqdm import tqdm

tokenizer = AutoTokenizer.from_pretrained("savasy/bert-base-turkish-sentiment-cased")
model = AutoModelForSequenceClassification.from_pretrained("savasy/bert-base-turkish-sentiment-cased")

sa= pipeline("sentiment-analysis", tokenizer=tokenizer, model=model,device=0)
batcher = DataLoader(dataset=comments,
                      batch_size=100,
                      shuffle=True,
                      pin_memory=True)
predictions= []
for batch in tqdm(batcher):
     p = sa(batch)
     predictions.append(p)
Run Code Online (Sandbox Code Playgroud)

我有 GTX 1060、python 3.8 和 torch==1.7.1,我的操作系统是 Windows 10。评论数为 187K。我想知道是否有解决此内存问题的方法。也许以某种方式在 CPU 上保存张量,并且仅在 GPU 上使用批处理。使用并收到此错误后,内存使用仍然继续。当我关闭我的 jupyter 笔记本时它就消失了。有什么办法可以清除这段记忆吗?有什么方法可以利用共享 GPU 内存吗?

CuC*_*Rot 1

如何减少 CUDA 和 Pytorch 的专用 GPU 内存使用量并使用共享 GPU 内存

简短的回答:你不能。

详细信息:我相信这个答案涵盖了您需要的所有信息。

您可以通过降低批量大小(如@John Stud 评论)或使用自动混合精度(如@Dwight Foster 建议)来减少内存使用量。

训练时,可以通过梯度累加来减少batch size,而不影响性能。