Memory management 如何将一个非常大的卷积神经网络应用到GPU中

Memory management 如何将一个非常大的卷积神经网络应用到GPU中,memory-management,neural-network,gpu,theano,large-data,Memory Management,Neural Network,Gpu,Theano,Large Data,我正试图在Theano(用于图像识别的几个大卷积层)中编程一个大型深层神经网络。整个网络不适合GPU,因此我需要以某种方式划分网络。我的问题是: 有人知道在哪里可以找到解决这个问题的教程或示例代码吗?有很多关于“小型网络”的好教程和代码,但我没有找到任何关于大型网络的 这不是一个简单的问题,在训练期间减少一批图像或减少层的数量或大小并不是一个解决方案 如果您能告诉我如何设计网络或管理GPU,我将不胜感激 非常感谢。虽然它会降低性能,但您可以使用theano.tensor.\u shared而不是

我正试图在Theano(用于图像识别的几个大卷积层)中编程一个大型深层神经网络。整个网络不适合GPU,因此我需要以某种方式划分网络。我的问题是:

有人知道在哪里可以找到解决这个问题的教程或示例代码吗?有很多关于“小型网络”的好教程和代码,但我没有找到任何关于大型网络的

这不是一个简单的问题,在训练期间减少一批图像或减少层的数量或大小并不是一个解决方案

如果您能告诉我如何设计网络或管理GPU,我将不胜感激


非常感谢。

虽然它会降低性能,但您可以使用
theano.tensor.\u shared
而不是
theano.shared
theano.tensor.\u shared
强制将数据存储在CPU RAM上。但是,您应该首先使用以下方法计算网络所需的内存量,然后将网络参数相应地分离为GPU和CPU RAM

import numpy as np
import theano.tensor as T
T.config.floatX = 'float32'
dataPoints = np.random.random((5000, 65536)).astype(T.config.floatX)
#float32 data type requires 4 bytes
sizeinGBs = 5000 * 65546 * 4 / 1024 / 1024 / 1024 + (some small over-head constant which we can ignore safely)

仅网络参数就适合GPU内存吗?不,它们不适合。这就是问题所在,网络有很多这样的功能。据我所知,在theano中不支持跨多个GPU划分网络。有一些关于解决这个问题的讨论,但这不是直截了当的,可能不会很快发生,请查看theano邮件列表。在beta版中有一个使用float16的PR,这可能会为您节省一些空间:否则,如果您绝对需要一个比硬件大的网络(Titan Xs为12 gb…),请查看torch7的nn和dp包,不太奇特的COVnet应该很容易配置,而且我相信,可以为多gpu处理设置。