【问题标题】:How to fit a very large convolutional neural network into the GPU with Theano如何使用 Theano 将非常大的卷积神经网络拟合到 GPU 中
【发布时间】:2016-03-28 18:08:57
【问题描述】:

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

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

这不是一个小问题,在训练时减少图像的batch或者减少层的数量或大小都不是解决方案。

如果有任何关于如何设计网络或管理 GPU 的想法,我将不胜感激。

非常感谢。

【问题讨论】:

  • 单独的网络参数是否适合 GPU 内存?
  • 不,他们没有。这就是问题所在,网络上有很多。
  • 据我所知,theano 不支持跨多个 GPU 划分网络。有一些关于解决这个问题的讨论,但它不是直截了当的,可能不会很快发生,请查看 theano 邮件列表。在 beta 中有一个 PR 可以使用 float16,这可能会为您节省一些空间:github.com/Theano/Theano/issues/2908 否则,如果您绝对需要比硬件更大的网络(Titan X 为 12 gb ......)请查看 torch7 的 nn 和 dp 包,即 covnets “不要太奇葩”应该很容易配置,而且我相信可以设置为多 GPU 处理。

标签: memory-management neural-network gpu theano large-data


【解决方案1】:

虽然会降低性能,但您可以使用theano.tensor._shared 代替theano.sharedtheano.tensor._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)

【讨论】:

    猜你喜欢
    • 2015-05-16
    • 2018-07-16
    • 2016-07-21
    • 1970-01-01
    • 1970-01-01
    • 2020-10-19
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    相关资源
    最近更新 更多