如何确定seq2seq tensorflow RNN训练模型的最大批量大小

时间:2016-02-03 07:57:57

标签: machine-learning tensorflow gpu-programming recurrent-neural-network

目前,我使用默认的64作为seq2seq tensorflow模型的批量大小。什么是最大批量大小,层大小等我可以使用具有12 GB RAM和Haswell-E xeon 128GB RAM的单个Titan X GPU。输入数据将转换为嵌入。以下是我正在使用的一些有用参数,似乎单元格输入大小为1024:

encoder_inputs: a list of 2D Tensors [batch_size x cell.input_size].
 decoder_inputs: a list of 2D Tensors [batch_size x cell.input_size].
 tf.app.flags.DEFINE_integer("size", 1024, "Size of each model layer.")

所以基于我的硬件,我可以去的最大批量大小,层数,输入大小是多少?目前GPU显示99%的内存被占用。

3 个答案:

答案 0 :(得分:5)

默认情况下,Tensorflow占用所有可用的GPU内存。但是,有一种方法可以改变这种状况。在我的模型中,我这样做:

config = tf.ConfigProto()
config.gpu_options.allow_growth = True

然后您可以在开始会话时使用此配置:

with tf.Session(config=config) as sess:

现在,模型将只使用所需的内存,然后您可以尝试使用不同的批量大小,并查看内存何时耗尽。

答案 1 :(得分:0)

运行TensorFlow模型时的内存使用量取决于模型中有多少变量,以及TensorFlow运行时用于计算激活,渐变等的中间张量。例如,在模型中,如果input_size1024,每层变量使用的内存为4MB + 4KB(权重和偏差)。用于中间张量的内存将随批量大小线性增长,但确切的数量很难估计,因为它取决于运行时间决定如何安排操作。 12GB应该能够适应相当大的模型。

答案 2 :(得分:0)

在先前的答案中略微阐述,很难分析预测模型的确切最大RAM消耗,因为TF运行时可以自由地同时调度独立操作,这样做可能导致最大RAM使用率高于执行相同的操作顺序。操作调度是动态的,因此在训练步骤中使用的最大RAM量可以在步骤之间非确定地变化。在实践中,对于非平凡的模型,似乎有必要进行试验以找到始终有效的最大批量大小。