Python 在Amazon群集上使用Theano耗尽VRAM

Python 在Amazon群集上使用Theano耗尽VRAM,python,amazon-web-services,neural-network,theano,Python,Amazon Web Services,Neural Network,Theano,我试图在运行ami-b141a2f5(Theano-Cuda7)映像的Amazon集群上执行该代码 我使用的不是包含的MNIST数据库,而是SD19数据库,它需要更改一些维度常量,但没有涉及任何代码。代码在我的CPU上本地运行良好,但一旦我将代码和数据SSH到Amazon集群并在那里运行,我就会得到以下输出: 在我看来,VRAM快用完了,但据我所知,该代码应该已经在GPU上运行了,而无需我进行任何必要的修补。遵循错误消息的建议后,错误仍然存在。这里没有什么特别奇怪的。错误信息几乎肯定是准确的:

我试图在运行ami-b141a2f5(Theano-Cuda7)映像的Amazon集群上执行该代码

我使用的不是包含的MNIST数据库,而是SD19数据库,它需要更改一些维度常量,但没有涉及任何代码。代码在我的CPU上本地运行良好,但一旦我将代码和数据SSH到Amazon集群并在那里运行,我就会得到以下输出:


在我看来,VRAM快用完了,但据我所知,该代码应该已经在GPU上运行了,而无需我进行任何必要的修补。遵循错误消息的建议后,错误仍然存在。

这里没有什么特别奇怪的。错误信息几乎肯定是准确的:VRAM确实不够。通常,脚本在CPU上可以正常运行,但在GPU上会像这样失败,原因很简单,因为通常有比GPU内存多得多的系统内存可用,特别是因为系统内存是虚拟化的(如果需要,可以分页到磁盘),而GPU内存不是

对于这个脚本,需要有足够的内存来存储训练、验证和测试数据集、模型参数,以及足够的工作空间来存储计算的中间结果。有两种选择:

  • 减少这三个组件中的一个或多个所需的内存量。减少训练数据量通常是最容易的;接下来减小模型的大小。不幸的是,这两种选择通常都会损害正在寻找的结果的质量。减少中间结果所需的内存量通常是开发人员无法控制的——它由Theano管理,但一旦对Theano的内部结构有了很好的理解,有时还可以通过改变计算来实现这一目标

  • 如果模型参数和工作内存可以放在GPU内存中,那么最常见的解决方案是更改代码,使数据不再存储在GPU内存中(即只将其存储为numpy数组,而不是作为非共享变量),然后将每批数据作为
    输入传递,而不是
    给定的
    。这是这种方法的一个例子