首页 文章

如何判断我的神经网络是否因内存错误而崩溃?

提问于
浏览
2

我试图围绕一台笔记本电脑校准我的期望's ability to train a neural network. I am using tensorflow and keras and after about say 10 minutes, it crashes. I'已经看到 killsignal 9 exit code 137 ,我想知道这是否是由于内存不足?其他时候,当使用 np_utils.to_categorical() 进行单热编码时,我在控制台中看到了单词 memoryerror ,而's it and my script crashes. This is just trying to transform the outputs into what a neural net expects before it even runs. I have 6400 inputs and 1500 outputs and a small hidden layer of 100 nodes. Batch size 128. That'就是它了 . 它甚至都不深 . 无论是使用nvidia gpu还是4核心cpu,它都会崩溃 . 对于专业人士来说,我的网络太大了,无法在我的系统上进行训练(i7 4核,16gb ram,nvidia GT 750m,计算能力3.0) . 我的神经网络被认为是一个大的吗?我有300万个样本,顺便说一句 .

1)如何估算网络所需的内存量?是 6400 (# inputs) * 1500 (#outputs) * 4 bytes (per parameter) = 38.4 gb ?我可以在某个地方的Mac上看到实时使用了多少内存?我用过活动监视器,内存压力表正常 . 2)GPU通常最大容量为8gb-12gb RAM,而台式机上的CPU容易达到64GB . 因此,如果我的网络的内存需求超过8GB的RAM,那么在单个GPU上进行训练是不可能的? 3)batch_size和batch_training之间有什么区别,尤其是内存方面的差异?谢谢!

2 回答

  • 2

    你的计算是正确的乘法,除了你正在处理兆字节而不是千兆字节 . 实际要求是6400 * 100 * 4 100 * 1500 * 4,如果使用默认的float32,则应为~4 MB . 您将两个后续层的图层大小相乘,因为每个神经元都连接到后续图层中的每个神经元 . 然后将整个内存需求乘以批量大小 . 这就是卷积层用于训练深度网络的原因 .

    对于gpu我使用nvidia-smi来监控linux上的内存需求 . 谷歌搜索给了我这个mac:https://phvu.net/2015/03/30/nvidia-smi-on-macos/ . 如果内存要求超过GPU内存,则无法在gpu上进行训练 . 你可以在cpu上训练它,但这需要很长时间 .

    有多种方法可以训练大型训练集 . 通常,发电机用于批量训练 . 这意味着只加载您实际需要的训练集部分(https://keras.io/getting-started/faq/#how-can-i-use-keras-with-datasets-that-dont-fit-in-memory) .

  • 2

    查找神经网络的内存要求不仅取决于网络的大小或参数本身的数量 . 为了计算神经网络的记忆足迹,我经常去的一个文件是Stanford CS231n Convolutional Neural Networks for Visual Recognition课程笔记 . 请查看他们找到网络每层的内存要求的部分 .

    除此之外,批量大小(每批次的输入数量)是决定“内存使用”的关键因素 . 例如,在较新的NVIDIA P100 GPU中,如果我训练CIFAR10模型,如果我在ImageNet数据集上训练AlexNet,则每批可以多达2048个图像 . 输入大小很重要,批量大小也是如此,因为GPU内存需要考虑批量输入 .

    测试批量大小的一种方法是执行 nvidia-smi 并查看使用了多少内存 . 由于时不时地做这件事很无聊,我通常在我的Linux机器上做 watch nvidia-smi . 在我的MAC中,我没有安装NVIDIA GPU,因此我很少使用这些技巧 . 当我想,我会写这样的快速bash脚本:

    while true; do nvidia-smi; sleep 0.5; clear; done
    

    您也可以在Mac中移植 watch 端口 .

    另外,我最喜欢的两个工具是htopdstat .

    htop 为您提供了一个更好的图形界面,用于Linux中着名的 top 命令 . 它为您提供有关内存和处理器使用情况的实时信息,以及不同的流程 . 如果您对 htop 进行 sudo 访问,则可以直接从界面更改niceness和其他参数 .

    dstat 为您提供有关I / O的实时信息 . 在大多数情况下,我将添加两个标志 -d-n 以仅指定磁盘和网络使用情况 .

    幸运的是,可以通过运行以下方式在Mac上安装 htop

    brew install htop
    

    另一方面 dstat 不能直接使用 . 请查看 ifstatiostat 以了解类似的功能 .

    Mac中 htop 命令的屏幕截图 .
    enter image description here

相关问题