在Amazon集群上使用Theano耗尽VRAM

时间:2015-06-09 10:09:23

标签: python amazon-web-services neural-network theano

我尝试在运行ami-b141a2f5(Theano - CUDA 7)图片的Amazon群集上执行logistic_sgd.py代码。

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

在我看来,它已经没有了VRAM,但我的理解是代码应该已经在GPU上运行,而不需要我修改。在遵循错误消息中的建议后,错误仍然存​​在。

1 个答案:

答案 0 :(得分:0)

这里没什么特别奇怪的。错误消息几乎肯定是准确的:确实没有足够的VRAM。通常情况下,脚本在CP​​U上运行正常,但在GPU上就像这样失败,因为通常有比GPU内存更多的系统内存,特别是因为系统内存是虚拟化的(并且可以在需要时可以分页到磁盘)而GPU记忆不是。

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

  1. 减少这三个组件中的一个或多个所需的内存量。减少训练数据量通常是最容易的;接下来减小模型的大小。不幸的是,这两个选项通常都会影响正在寻找的结果的质量。减少中间结果所需的内存量通常超出了开发人员的控制范围 - 它由Theano管理,但是一旦很好地理解了Theano的内部结构,有时候可以通过改变计算来实现这一目标。

  2. 如果模型参数和工作内存可以适合GPU内存,那么最常见的解决方案是更改代码,以便数据不再存储在GPU内存中(即只将其存储为numpy数组,而不是Theano共享变量)然后将每批数据传递为inputs而不是givensLSTM sample code就是这种方法的一个例子。