当我尝试使用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)
字符串
虽然我没有使用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)
型
我有一个GTX 1060,Python 3.8和torch==1.7.1,我的操作系统是Windows 10。评论数为187K。我想知道是否有任何工作围绕这个内存问题。也许在CPU上以某种方式保存Tensor,只在GPU上使用批处理。使用并获得此错误后,内存使用仍在继续。当我合上我的jupyter笔记本它就消失了。有什么办法能让我清除这段记忆吗?有什么方法可以使用共享GPU内存吗?
3条答案
按热度按时间8e2ybdfx1#
如何减少专用GPU内存的使用并为CUDA和Pytorch使用共享GPU内存
简短回答:你不能。
详细信息:我相信this answer涵盖了您需要的所有信息。
您可以通过降低批量大小来减少内存使用量,@John Stud评论说,或者使用自动混合精度,@德怀特Foster建议。
在训练时,您可以实施梯度累积以减少批次大小而不影响性能。
nzkunb0c2#
简短回答:不,我不知道
我确实遇到了这个问题,但这是我的选择。我想检查GPU的最大训练容量。先说重要的事
下一个检查表
优化
你的记忆力很差,比如。3GB。共享内存在这里不适用,它是自动管理的。要在GPU上训练,Tensor必须位于GPU内存中,共享内存是系统内存。
我发现使用更多的内存并不意味着你的训练会更快完成。这取决于你的超参数和CUDA核心的速度。
推理
因为你只用于预测,你也可以尝试CPU推理,并使用
system memory
在这里你使用数据加载器这样。字符串
参考资料
https://superuser.com/questions/1416540/what-is-shared-gpu-memory-and-how-is-total-gpu-memory-calculated-windows-10的
Shared memory
来自pytorch论坛,具体见回复。https://discuss.pytorch.org/t/what-is-the-shared-memory/112212/8的dsekswqp3#
共享GPU(通常不是NVIDIA的)与专用GPU不同。CUDA仅适用于NVIDIA的GPU。
不过,你可以尝试DirectML(用于英特尔共享GPU),它可以帮助你在共享GPU上工作,而不是专用GPU。