Machine learning 如何确定seq2seq tensorflow RNN培训模型的最大批量

Machine learning 如何确定seq2seq tensorflow RNN培训模型的最大批量,machine-learning,tensorflow,gpu,recurrent-neural-network,Machine Learning,Tensorflow,Gpu,Recurrent Neural Network,目前,我使用默认的64作为seq2seq tensorflow模型的批量大小。最大批量大小、层大小等是多少?我可以使用单个Titan X GPU,12 GB RAM和Haswell-E xeon 128GB RAM。将输入数据转换为嵌入。以下是我正在使用的一些有用参数,单元格输入大小似乎为1024: encoder_inputs: a list of 2D Tensors [batch_size x cell.input_size]. decoder_inputs: a list of 2D

目前,我使用默认的64作为seq2seq tensorflow模型的批量大小。最大批量大小、层大小等是多少?我可以使用单个Titan X GPU,12 GB RAM和Haswell-E xeon 128GB RAM。将输入数据转换为嵌入。以下是我正在使用的一些有用参数,单元格输入大小似乎为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%的内存被占用。

运行TensorFlow模型时的内存使用情况取决于模型中的变量数量,以及TensorFlow运行时用于计算激活、梯度等的中间张量。例如,在模型中,如果
input\u size
1024
,则用于每层变量的内存将为
4MB+4KB
(权重和偏差)。用于中间张量的内存将随批处理大小线性增长,但准确的内存量很难估计,因为它取决于运行时如何决定调度操作
12GB
应该能够适应相当大的模型,但是。

详细说明之前的答案,很难分析预测模型的确切最大RAM消耗,因为TF运行时可以同时安排独立的操作,这样做会比顺序执行相同的操作导致更高的最大RAM使用。Op调度是动态的,因此在一个训练步骤中使用的最大RAM量可以在一个步骤到另一个步骤之间不确定地变化。在实践中,对于非平凡模型,似乎有必要进行实验,以找到能够持续工作的最大批量

默认情况下,Tensorflow会占用所有可用的GPU内存。然而,有一种方法可以改变这一点。在我的模型中,我执行以下操作:

config = tf.ConfigProto()
config.gpu_options.allow_growth = True
然后,您可以在启动会话时使用此配置:

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

现在,模型将只使用所需的内存,然后你可以尝试使用不同的批处理大小,看看它什么时候内存不足。

目前GPU显示99%的内存被上述配置占用。@stackit我发现TF“占用”了整个GPU,即使它没有将所有内存都用于计算……如果你的模型超出GPU内存限制,它会抛出一个错误,这样你就可以弄清楚了你的最大模型尺寸是通过试错来确定的。没有任何拇指规则可以预测它,不管它有多不合适。