目前,我使用默认的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%的内存被占用。
答案 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_size
为1024
,每层变量使用的内存为4MB + 4KB
(权重和偏差)。用于中间张量的内存将随批量大小线性增长,但确切的数量很难估计,因为它取决于运行时间决定如何安排操作。 12GB
应该能够适应相当大的模型。
答案 2 :(得分:0)
在先前的答案中略微阐述,很难分析预测模型的确切最大RAM消耗,因为TF运行时可以自由地同时调度独立操作,这样做可能导致最大RAM使用率高于执行相同的操作顺序。操作调度是动态的,因此在训练步骤中使用的最大RAM量可以在步骤之间非确定地变化。在实践中,对于非平凡的模型,似乎有必要进行试验以找到始终有效的最大批量大小。