IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> Hugging Face的BERT模型进行文本嵌入内存爆炸的解决方法 -> 正文阅读

[人工智能]Hugging Face的BERT模型进行文本嵌入内存爆炸的解决方法

hugging face中很多预训练好的transformer模型,可以直接下载使用,节省大量时间与算力。昨天使用BERT模型进行文本嵌入。其实很简单,核心代码就几行(text是文本,batch_size是500,总共三万条文本,只取每条文本的[CLS]作文本的整体表示):

    encoded_input = tokenizer(text[start * 500: min(start * 500 + 500, len(text))], padding=True, truncation=True, return_tensors="pt")
    output = model(**encoded_input)
    batch_embed = output[0]
    batch_embed = batch_embed.index_select(1, torch.tensor([0])).squeeze(dim=1)

然后就出现了问题,2分钟后程序就停了。我以为跑完了,将整个文本的嵌入打出来看看情况,结果显示没有此变量,再一看,jupyter内核挂了。连续跑了两次都是这样。

于是乎我用top命令查看情况:

直接被吓死。内存占用111.4,且不断在飙升,最后升到200多G,然后内核就挂了。

最后定位原因,发现是上一个batch的所有输出都被系统保留,没有被回收。然后随着batch的增多数据越来越多,内存就爆了。

使用del命令尝试删掉不需要的output,不行;使用gc.collect()强制进行垃圾回收,还是不行。最后查看博客,发现gc不一定能够回收掉,决定回不回收内存的是引用计数。于是重复进行100次垃圾回收,还是没有用(此处没有细看垃圾回收机制,迫切想解决问题,其实回收多少次都不会影响到引用计数。此外,使用del output后,打印ouput会报没有这个变量的错误,说明del成功,而垃圾回收机制没有启动。垃圾回收机制详细请看:Python垃圾回收机制详解 - Xjng - 博客园 (cnblogs.com)https://www.cnblogs.com/Xjng/p/5128269.html

最后实在没有办法,将上述的核心代码封装成一个函数。随着函数生命周期的结束,临时变量内存被回收,至此问题解决。

def fun(start):
    encoded_input = tokenizer(text[start * 500: min(start * 500 + 500, len(text))], padding=True, truncation=True, return_tensors="pt")
    output = model(**encoded_input)
    batch_embed = output[0].index_select(1, torch.tensor([0])).squeeze(dim=1)
    joblib.dump(batch_embed, f'text_embed.pkl_{start}')

破案了,少了一句with torch.no_grad(),保存了大量梯度数据。。。。。。

添加之后,不使用函数进行封装,内存也没有爆炸。

果然菜是原罪。。。。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-04-01 00:02:58  更:2022-04-01 00:06:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/9 0:55:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码