Python TensorFlow GPU(bi LSTM和CRF)上无法解释的内存分配过多

Python TensorFlow GPU(bi LSTM和CRF)上无法解释的内存分配过多,python,tensorflow,gpu,tensorboard,Python,Tensorflow,Gpu,Tensorboard,我正在使用TensorFlow开发一个NLP模型。这是张黑板上显示的模型图。该模型被进一步称为“简单模型” 为了改进结果,我想训练一个关节模型,在上面的图中复制标有“要复制的模板模型”的块。该区块包括两个双向LSTM。关节模型如下所示 在联合模型中,我们有来自简单模型的模板块的两个实例,在上面显示的联合模型图中标记为“副本1”和“副本2”。简单模型和联合模型之间的唯一区别在于,在联合模型中,“CRF”块的输入是两个副本输出的平均值。因此,如果联合模型中只有一个副本,那么它应该产生与简单模型相

我正在使用TensorFlow开发一个NLP模型。这是张黑板上显示的模型图。该模型被进一步称为“简单模型”

为了改进结果,我想训练一个关节模型,在上面的图中复制标有“要复制的模板模型”的块。该区块包括两个双向LSTM。关节模型如下所示

在联合模型中,我们有来自简单模型的模板块的两个实例,在上面显示的联合模型图中标记为“副本1”和“副本2”。简单模型和联合模型之间的唯一区别在于,在联合模型中,“CRF”块的输入是两个副本输出的平均值。因此,如果联合模型中只有一个副本,那么它应该产生与简单模型相同的结果

对于这个平均值,我只使用
tf.stack
tf.reduce\u mean
,如下所示:

with tf.name_scope("average_logits"):
    # Stack the list of logits tensors with rank R into a single
    # tensor with rank R+1
    logits = tf.stack(logits,
                      axis=0,
                      name="stacked_logits")
    # Average out this tensor over dimension 0 (models dimension)
    self.logits = tf.reduce_mean(logits,
                                 axis=0,
                                 name="average_logits")
现在,在GPU上运行,简单模型占用大约700MB的空间,而联合模型占用大约4GB的空间,我找不到对此的解释,因为“context_bi-lstm”和“chars”块中的变量总共最多占用200MB。这种过度分配现在对我来说是个问题,因为我有一个8GB的GPU,并且想要运行一个具有2个以上副本的模型,这会产生OOM错误


所以我不知道记忆的急剧增长是从哪里来的。我可能正在使用
tf.stack
tf.mean\u reduce
执行一些内存非常昂贵的操作吗?

模型是否包含优化节点?不确定是否是这种情况,但可能与梯度计算的复杂性增加有关(如果第一个问题的答案是肯定的,可能您可以在不进行优化的情况下比较每种情况下推理体系结构所需的内存)。模型是否包括优化节点?不确定是否是这种情况,但可能与梯度计算的复杂性增加有关(如果第一个问题的答案是肯定的,可能您可以比较每种情况下推理架构所需的内存,而无需优化)。