我尝试在运行ami-b141a2f5(Theano - CUDA 7)图片的Amazon群集上执行logistic_sgd.py代码。
我使用SD19数据库而不是包含的MNIST数据库,这需要更改一些维度常量,但是没有触及任何代码。代码在我的CPU上本地运行良好,但是一旦我将代码和数据SSH到Amazon集群并在那里运行它,我得到这个输出:
在我看来,它已经没有了VRAM,但我的理解是代码应该已经在GPU上运行,而不需要我修改。在遵循错误消息中的建议后,错误仍然存在。
答案 0 :(得分:0)
这里没什么特别奇怪的。错误消息几乎肯定是准确的:确实没有足够的VRAM。通常情况下,脚本在CPU上运行正常,但在GPU上就像这样失败,因为通常有比GPU内存更多的系统内存,特别是因为系统内存是虚拟化的(并且可以在需要时可以分页到磁盘)而GPU记忆不是。
对于此脚本,需要有足够的内存来存储训练,验证和测试数据集,模型参数以及足够的工作空间来存储计算的中间结果。有两种选择:
减少这三个组件中的一个或多个所需的内存量。减少训练数据量通常是最容易的;接下来减小模型的大小。不幸的是,这两个选项通常都会影响正在寻找的结果的质量。减少中间结果所需的内存量通常超出了开发人员的控制范围 - 它由Theano管理,但是一旦很好地理解了Theano的内部结构,有时候可以通过改变计算来实现这一目标。
如果模型参数和工作内存可以适合GPU内存,那么最常见的解决方案是更改代码,以便数据不再存储在GPU内存中(即只将其存储为numpy数组,而不是Theano共享变量)然后将每批数据传递为inputs
而不是givens
。 LSTM sample code就是这种方法的一个例子。