从零开始学习MXnet(五)MXnet的黑科技之显存节省大法
写完发现名字有点拗口。。- -#
大家在做deep learning的时候,应该都遇到过显存不够用,然后不得不去痛苦的减去batchszie,或者砍自己的网络结构呢? 最后跑出来的效果不尽如人意,总觉得自己被全世界针对了。。遇到这种情况怎么办? 请使用MXnet的天奇大法带你省显存! 鲁迅曾经说过:你不去试试,怎么会知道自己的idea真的是这么糟糕呢?
首先是传送门附上 mxnet-memonger,相应的paper也是值得一看的 Training Deep Nets with Sublinear Memory Cost。
实际上repo和paer里面都说的很清楚了,这里简单提一下吧。
一、Why?
节省显存的原理是什么呢?我们知道,我们在训练一个网络的时候,显存是用来保存中间的结果的,为什么需要保存中间的结果呢,因为在BP算梯度的时候,我们是需要当前层的值和上一层回传的梯度一起才能计算得到的,所以这看来显存是无法节省的?当然不会,简单的举个例子:一个3层的神经网络,我们可以不保存第二层的结果,在BP到第二层需要它的结果的时候,可以通过第一层的结果来计算出来,这样就节省了不少内存。 提醒一下,这只是我个人的理解,事实上这篇paper一直没有去好好的读一下,有时间在再个笔记。不过大体的意思差不多就是这样。
二、How?
怎么做呢?分享一下我的trick吧,我一般会在symbol的相加的地方如data = data+ data0这种后面加上一行 data._set_attr(force_mirroring='True'),为什么这么做大家可以去看看repo的readme,symbol的地方处理完以后,只有如下就可以了,searchplan会返回一个可以节省显存的的symbol给你,其它地方完全一样。
import mxnet as mx
import memonger # configure your network
net = my_symbol() # call memory optimizer to search possible memory plan.
net_planned = memonger.search_plan(net) # use as normal
model = mx.FeedForward(net_planned, ...)
model.fit(...)
PS:使用的时候要注意,千万不要在又随机性的层例如dropout后面加上mirror,因为这个结果,再算一次就和上一次不同了,会让你的symbol的loss变得很奇怪。。
三、总结
天奇大法吼啊!
从零开始学习MXnet(五)MXnet的黑科技之显存节省大法的更多相关文章
- 从零开始学习jQuery (五) 事件与事件对象
本系列文章导航 从零开始学习jQuery (五) 事件与事件对象 一.摘要 事件是脚本编程的灵魂. 所以本章内容也是jQuery学习的重点. 本文将对jQuery中的事件处理以及事件对象进行详细的讲解 ...
- 从零开始学习jQuery(转)
本系列文章导航 从零开始学习jQuery (一) 开天辟地入门篇 从零开始学习jQuery (二) 万能的选择器 从零开始学习jQuery (三) 管理jQuery包装集 从零开始学习jQuery ( ...
- 从零开始学习jQuery
转自:http://www.cnblogs.com/zhangziqiu/archive/2009/04/30/jQuery-Learn-1.html 本系列文章导航 从零开始学习jQuery (一) ...
- 从零开始学习MXnet(四)计算图和粗细粒度以及自动求导
这篇其实跟使用MXnet的关系不大,但对于我们理解深度学习的框架设计还是很有帮助的. 首先还是对promgramming models的一个简单介绍,这个东西实际上是在编译里面经常出现的东西,我们在编 ...
- 从零开始学习MXnet(三)之Model和Module
在我们在MXnet中定义好symbol.写好dataiter并且准备好data之后,就可以开开心的去训练了.一般训练一个网络有两种常用的策略,基于model的和基于module的.今天,我想谈一谈他们 ...
- 文本分类学习 (五) 机器学习SVM的前奏-特征提取(卡方检验续集)
前言: 上一篇比较详细的介绍了卡方检验和卡方分布.这篇我们就实际操刀,找到一些训练集,正所谓纸上得来终觉浅,绝知此事要躬行.然而我在躬行的时候,发现了卡方检验对于文本分类来说应该把公式再变形一般,那样 ...
- 黑科技!仅需 3 行代码,就能将 Gitter 集成到个人网站中,实现一个 IM 即时通讯聊天室功能?
欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 高级架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 个人网站: https://www.ex ...
- 国庆出游神器:魔幻黑科技换天造物,让vlog秒变科幻大片!
摘要:国庆旅游景点人太多,拍出来的照片全是人人人.车车车,该怎么办?不妨试试这个黑科技,让你的出游vlog秒变科幻大片. 本文分享自华为云社区<国庆出游神器,魔幻黑科技换天造物,让vlog秒变科 ...
- ASP.NET从零开始学习EF的增删改查
ASP.NET从零开始学习EF的增删改查 最近辞职了,但是离真正的离职还有一段时间,趁着这段空档期,总想着写些东西,想来想去,也不是很明确到底想写个啥,但是闲着也是够 ...
随机推荐
- zabbix监控MySQL服务状态
Mysql模板使用 在zabbix_agent配置文件中加入监控配置 vim etc/zabbix_agentd.conf ... UserParameter=mysql.version,mysqla ...
- Python学习 :文件操作
文件基本操作流程: 一. 创建文件对象 二. 调用文件方法进行操作 三. 关闭文件(注意:只有在关闭文件后,才会写入数据) fh = open('李白诗句','w',encoding='utf-8') ...
- Andrew Ng Machine Learning Coursera学习笔记
课程记录笔记如下: 1.目前ML的应用 包括:数据挖掘database mining.邮件过滤email anti-spam.机器人autonomous robotics.计算生物学computati ...
- python2.7入门---file(文件)&OS 文件&目录方法
首先file 对象使用 open 函数来创建,下表列出了 file 对象常用的函数: 序号 方法及描述 1 file.close() 关闭文件.关闭后文件不能再进行读写操作. 2 file.f ...
- 50道基础的java面试题
Java程序员面试题集(1-50) 一.Java基础部分 1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: 1)抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象 ...
- babel配置
首页 首页 首页 博客园 博客园 博客园 联系我 联系我 联系我 demo demo demo GitHub GitHub GitHub 管理 管理 管理 魔魔魔芋芋芋铃铃铃 [02]websto ...
- 读取Excel错误,未在本地计算机上注册 oledb.4.0
以前写的一个读取Excel的程序,现在在另外一台机器上运行,竟然报错说"未在本地计算机上注册 oledb.4.0" 最后才知道,原来是因为现在运行的那台电脑 ...
- python语句和语法
python语句和语法 python程序结构: 1.程序由模块构成. 2.模块包含语句. 3.语句包含表达式. 4.表达式建立并处理对象. python的语法实质上是有语句和表达式组成的.表达式处理对 ...
- python基础——列表、字典
Python核心数据类型--列表 列表是一个任意类型的对象的位置相关的有序集合,它没有固定的大小.大小可变的,通过偏移量进行赋值以及其他各种列表的方法进行调用,能够修改列表.其他更多的功能可以查阅py ...
- (4)分布式下的爬虫Scrapy应该如何做-规则自动爬取及命令行下传参
本次探讨的主题是规则爬取的实现及命令行下的自定义参数的传递,规则下的爬虫在我看来才是真正意义上的爬虫. 我们选从逻辑上来看,这种爬虫是如何工作的: 我们给定一个起点的url link ,进入页面之后提 ...