巨省显存的重计算技巧在TF、Keras中的正确打开方式

一只小狐狸带你解锁 炼丹术&NLP 秘籍

作者:苏剑林(来自追一科技,人称“苏神”)

前言

在前不久的文章《BERT重计算:用22.5%的训练时间节省5倍的显存开销(附代码)》中介绍了一个叫做“重计算”的技巧(附pytorch和paddlepaddle实现)。简单来说重计算就是用来省显存的方法,让平均训练速度慢一点,但batch_size可以增大好几倍,该技巧首先发布于论文《Training Deep Nets with Sublinear Memory Cost》。

最近笔者发现,重计算的技巧在tensorflow也有实现。事实上从tensorflow1.8开始,tensorflow就已经自带了该功能了,当时被列入了tf.contrib这个子库中,而从tensorflow1.15开始,它就被内置为tensorflow的主函数之一,那就是tf.recompute_grad。找到 tf.recompute_grad 之后,笔者就琢磨了一下它的用法,经过一番折腾,最终居然真的成功地用起来了,居然成功地让 batch_size 从48增加到了144!然而,在继续整理测试的过程中,发现这玩意居然在tensorflow 2.x是失效的...于是再折腾了两天,查找了各种资料并反复调试,最终算是成功地补充了这一缺陷。

最后是笔者自己的开源实现:

Github地址:

https://github.com/bojone/keras_recompute

该实现已经内置在bert4keras中,使用bert4keras的读者可以升级到最新版本(0.7.5+)来测试该功能。

使用

笔者的实现也命名为recompute_grad,它是一个装饰器,用于自定义Keras层的 call函数,比如

from recompute import recompute_gradclass MyLayer(Layer):
@recompute_grad
def call(self, inputs):
return inputs * 2

对于已经存在的层,可以通过继承的方式来装饰:

from recompute import recompute_grad
class MyDense(Dense):@recompute_graddef call(self, inputs):return super(MyDense, self).call(inputs)

自定义好层之后,在代码中嵌入自定义层,然后在执行代码之前,加入环境变量RECOMPUTE=1来启用重计算。

注意:不是在总模型里插入了@recomputr_grad,就能达到省内存的目的,而是要在每个层都插入@recomputr_grad才能更好地省显存。简单来说,就是插入的@recomputr_grad越多,就省显存。具体原因请仔细理解重计算的原理。

效果

bert4keras0.7.5已经内置了重计算,直接传入环境变量RECOMPUTE=1就会启用重计算,读者可以自行尝试,大概的效果是:

1、在BERT Base版本下,batch_size可以增大为原来的3倍左右;

2、在BERT Large版本下,batch_size可以增大为原来的4倍左右;

3、平均每个样本的训练时间大约增加25%;

4、理论上,层数越多,batch_size可以增大的倍数越大。

环境

在下面的环境下测试通过:

tensorflow 1.14 + keras 2.3.1

tensorflow 1.15 + keras 2.3.1

tensorflow 2.0 + keras 2.3.1

tensorflow 2.1 + keras 2.3.1

tensorflow 2.0 + 自带tf.keras

tensorflow 2.1 + 自带tf.keras

确认不支持的环境:

tensorflow 1.x + 自带tf.keras

欢迎报告更多的测试结果。

顺便说一下,强烈建议用keras2.3.1配合tensorflow1.x/2.x来跑,强烈不建议使用tensorflow 2.x自带的tf.keras来跑

  • 算法工程师的效率神器——vim篇

  • 硬核推导Google AdaFactor:一个省显存的宝藏优化器

  • 数据缺失、混乱、重复怎么办?最全数据清洗指南让你所向披靡

  • LayerNorm是Transformer的最优解吗?

  • ACL2020|FastBERT:放飞BERT的推理速度

夕小瑶的卖萌屋

_

关注&星标小夕,带你解锁AI秘籍

订阅号主页下方「撩一下」有惊喜哦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/480592.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文浅尝 | 用可微的逻辑规则学习完成知识库推理

Citation:Fan Yang,Zhilin Yang, William W. Cohen. Differentiable Learning of Logical Rules for Knowledge Base Reasoning. ICLR 2017.动机本文提出了一个可微的基于知识库的逻辑规则学习模型。现在有很多人工智能和机器学习的工作在研究如何学习一阶逻辑规则&…

一点关于cloze-style问题的简谈

一个小任务:给出一个问题和诺干个候选句子,从候选句子中选出答案,有没有好的实现方案? 一个小任务:类似于:“中国最大的内陆湖是哪个?”给出候选句子1.”中国最大的内陆湖,就是青海湖…

中文词语概念上下位图谱项目

HyponymyExtraction 项目地址:https://github.com/liuhuanyong/HyponymyExtraction HyponymyExtraction and Graph based on KB Schema, Baike-kb and online text extract, 基于知识概念体系,百科知识库,以及在线搜索结构化方式的词语上下位…

POJ 1007 DNA排序解题

题目链接 http://poj.org/problem?id1007 C代码实现 #include<string> #include<iostream> using namespace std; struct DNAdata //定义结构体 {char name[51];double sum;DNAdata(){sum 0;} }; void swapDNA(DNAdata *a, DNAdata *b) {DNAdata tempDNA;tempDN…

DeepMatch:用于推荐广告的深度召回匹配算法库

一只小狐狸带你解锁 炼丹术&NLP 秘籍前言今天介绍一下我们的一个开源项目DeepMatch&#xff0c;提供了若干主流的深度召回匹配算法的实现&#xff0c;并支持快速导出用户和物品向量进行ANN检索。非常适合同学们进行快速实验和学习&#xff0c;解放算法工程师的双手&#xf…

史上最全Spring面试71题与答案

1.什么是spring? Spring是个java企业级应用的开源开发框架。Spring主要用来开发Java应用&#xff0c;但是有些扩展是针对构建J2EE平台的web应用。Spring框架目标是简化Java企业级应用开发&#xff0c;并通过POJO为基础的编程模型促进良好的编程习惯。 2.使用Spring框架的好处…

论文浅尝 | 近期论文精选

本文转载自公众号 PaperWeekly, 对我们近期的论文浅尝进行了精选整理并附上了相应的源码链接&#xff0c;感谢 PaperWeekly&#xff01;TheWebConf 2018■ 链接 | https://www.paperweekly.site/papers/1956■ 解读 | 花云程&#xff0c;东南大学博士&#xff0c;研究方向为自然…

海马体what where记忆推理模型

Generalisation of structural knowledge in theHippocampal-Entorhinal systemhttps://www.groundai.com/project/generalisation-of-structural-knowledge-in-the-hippocampal-entorhinal-system/海马 - 内嗅系统结构知识的泛化 实体概念信息和位置及虚拟位置信息组成记忆保存…

快速排序quicksort算法细节优化(一次申请内存/无额外内存排序)

文章目录1.只申请一次内存&#xff0c;避免多次递归调用时反复的申请和释放内存&#xff0c;提高程序运行效率2.不申请内存&#xff0c;在原数组上直接排序优化比较总结对链接中快速排序进行代码优化 https://blog.csdn.net/qq_21201267/article/details/80993672#t6 1.只申请…

在深度学习顶会ICLR 2020上,Transformer模型有什么新进展?

一只小狐狸带你解锁炼丹术&NLP秘籍大数据文摘出品来源&#xff1a;medium编译&#xff1a;一一、AndyICLR是机器学习社群最喜爱的会议平台之一。如今&#xff0c;机器学习领域的会议已成为预印本里论文质量的标志和焦点。但即使这样&#xff0c;论文的发表数量还是越来越庞…

领域应用 | 人工智能+知识图谱:如何规整海量金融大数据?

本文转载自公众号&#xff1a;恒生技术之眼。21世纪以来&#xff0c;人类社会信息资源的开发范围持续扩大&#xff0c;经济、社会信息随着经济活动加剧得到空前的开发&#xff0c;信息资源总量呈爆炸式增长&#xff0c;我们从最初的“信息匮乏”一步踏入到“信息过量”时代。个…

神经网络不应视为模型,推理过程当为机器学习问题一等公民

首发于论智关注专栏写文章神经网络不应视为模型&#xff0c;推理过程当为机器学习问题一等公民编者按&#xff1a;Microsoft Semantic Machines资深研究科学家、UC Berkeley计算机科学博士Jacob Andreas指出&#xff0c;神经网络不应视为模型&#xff0c;因为神经网络的模型和推…

2019最全BAT资深Java面试题答案合集,建议收藏~

马上进入求职招聘高峰&#xff0c;总结了一份BAT&#xff08;阿里、百度等&#xff09;资深Java相关的面试题答案合集给到大家。 该板块的各面试章节&#xff0c;后续会持续迭代更新最新一线互联网公司的面试题目&#xff0c;建议收藏该页面&#xff0c;不定期更新查看~ Java…

中国古代诗词文本挖掘项目

PoemMining 项目地址&#xff1a;https://github.com/liuhuanyong/PoemMining Chinese Classic Poem Mining Project including corpus buiding by spyder and content analysis by nlp methods, 基于爬虫与nlp的中国古代诗词文本挖掘项目 项目介绍 中国古代诗词文化无疑是…

推荐系统的价值观

一只小狐狸带你解锁炼丹术&NLP秘籍 前言 推荐系统作为满足人类不确定性需求的一种有效工具&#xff0c;是具有极大价值的&#xff0c;这种价值既体现在提升用户体验上&#xff0c;又体现在获取商业利润上。对绝大多数公司来说&#xff0c;提升用户体验的最终目标也是为了获…

POJ1003/1004/1005/1207/3299/2159/1083/3094/2388解题(刷一波水题)

POJ 1003 题目链接 http://poj.org/problem?id1003 大意&#xff1a;长度1/21/3…1/n&#xff0c;给定长度值&#xff0c;求n #include<iostream> using namespace std; int main() {float len 0,sum;int n;while(cin >> len && len ! 0){for(n2,sum0;s…

论文浅尝 | 远程监督关系抽取的生成式对抗训练

动机远程监督关系抽取方法虽然可以使用知识库对齐文本的方法得到大量标注数据&#xff0c;但是其中噪声太多&#xff0c;影响模型的训练效果。基于 bag 建模比基于句子建模能够减少噪声的影响&#xff0c;但是仍然无法克服 bag 全部是错误标注的情形。为了换机噪声标注&#xf…

谷歌最强NLP模型BERT官方代码来了!GitHub一天3000星

新智元报道 来源&#xff1a;GitHub 作者&#xff1a;Google Research 编辑&#xff1a;肖琴 【新智元导读】谷歌AI团队终于开源了最强NLP模型BERT的代码和预训练模型。从论文发布以来&#xff0c;BERT在NLP业内引起巨大反响&#xff0c;被认为开启了NLP的新时代。 BERT的官方…

Java经典基础与高级面试36题和答案

在Java面试的首轮&#xff0c;经常会问很多关于Java面试基础以及高级的问题&#xff0c;今天收集相关Java面试36题和答案分享出来。 1.”static”关键字是什么意思&#xff1f;Java中是否可以覆盖&#xff08;override&#xff09;一个private或者是static的方法&#xff1f; …

论文浅尝 | 问题生成(QG)与答案生成(QA)的结合

本文转载自公众号&#xff1a;徐阿衡。梳理一下 MSRA 3 篇关于 QG 的 paper&#xff1a;Two-Stage Synthesis Networks for Transfer Learning in Machine ComprehensionQuestion Answering and Question Generation as Dual TasksA Joint Model for Question Answering and Qu…