首先,在网络更深或者训练时批量更大时,更容易出现out of memory的情况。因此,在模型参数初始化完成后,我们交替地进⾏正向传播和反向传播,并根据反向传播计算的梯度迭代模型参数。既然我们在反向传播中使⽤了正向传播中计算得到的中间变量来避免重复计算,那么这个重⽤也导致正向传播结束后不能⽴即释放中间变量内存。这也是训练要⽐预测占⽤更多内存的⼀个重要原因。另外需要指出的是,这些中间变量的...
在前面两个
神经网络
的运用例子中,我们主要使用
神经网络
对输入数据预测出一个离散性结果,也就是预测的结果都是0,1,要不就是1到46中任意一个数,这些结果都是离散化,相互间不兼容。我们这节要用
神经网络
对输入数据预测出一个连续型结果,例如我们预测下个月房价的价格区间,明天的温度区间等等。
本节我们使用网络对房价进行预测,判断房价在未来一段
时
间内
会
处于怎样的价格区间,当模型构建好后,你把所关心地区历年来...
最近写代码
时
遇到这个问题,研究了很久,最终还是解决了这个问题,这里放一下解决过程。
由于我这里做的工作并不是完全基于
神经网络
的,只是利用了反向传播,所以我的前向传播并不同于传统的传播方式,即输入经过网络得到输出,我的输出是经过一个更新公式得到的,即经过此更新公式得到的输出就是
神经网络
的输出,所以问题也就出在这里。
每次迭代
时
,输入经过更新公式前向传播,
内存
会
泄漏一些,我开始并不知道这是什么原因,以为只是计算所产生的
内存
占用,这里是用pip installmemory_profiler安装的一个监视
内存
.
如果你的计算机GPU很差(比如我的就很差很差),在
训练
模型
时
你
会
发现刚开始
训练
正常,但后面就
会
报下图的错误。
错误:numpy.core._exceptions.MemoryError: Unable to allocate 4.12 MiB for an array with shape (600, 600, 3) and data type float32
该错误是
内存
不足导致
训练
不能继续,我的bathsize==1了已经,但还是不行。真不知道这么垃圾的电脑怎么做
神经网络
。
1 中间产生的tensor过大导致
内存
不够
核心错误信息如下:
(1) Resource exhausted: OOM when allocating tensor with shape[4000,256,127,127] and type float on /job:localhost/replica:0/task:0/device:GPU:0 by allocator GPU_0_bfc
[[node Conv2D_1
最近跑的模型都比较大,尤其是Bert, 这真的是难为我 1080ti 了, 在Bert的Example中,官方提供了一些 Trick 来帮助我们加速
训练
,很良心, 但感觉还
不够
,于是花费一些
时
间整理出一个 Trick 集合,来帮助我们在显存不足的
时
候来嘿嘿嘿。
本文分为两大部分,第一部分引入一个主题:如何估计模型所需显存, 第二个主题:GPU显存不足
时
的各种 Trick 。
监控 GPU
后来换了一个电脑发现还是这样,考虑是代码的问题。
检查才发现我的代码两次存了loss,只有一个地方写的是loss.item()。问题就在loss,因为loss是variable类型。
要写成loss_train = loss_train + loss.item(),不能直接写loss_train = loss_train + loss。否则就
会
发现随着epoch的增加,占的
内存
也在一点一点增加。
算是一个小坑吧,