哪些张量流操作触发内存分配?

时间:2020-01-21 12:27:35

标签: python tensorflow machine-learning memory out-of-memory

在阅读TensorArray类的文档时,我遇到了这一行:

如果为True,则TensorArray将与首次写入时使用的Tensor位于同一设备上(写入操作包括写入,解栈和拆分)。如果为False,则TensorArray将放置在设备上,该设备由初始化期间可用的设备上下文确定。

这使我想知道是否只有某些操作会触发实际的内存分配和读取/写入,以及是否有这些操作的列表。

我也想知道这一点,因为创建张量临时存在非常大的OOM错误时会存在一些局限性,但无论如何都是以批处理方式处理的,因此从不需要程序实际保存张量的所有数据-与数据集API允许按需加载所有内容时无限大数据集的方式类似。

1 个答案:

答案 0 :(得分:0)

从Tensorflow-GPU角度来看:没有列表。

TF woudl有两种在GPU上运行的方式:

  • 没有XLA
  • 使用XLA

没有XLA,一旦操作A0完成,张量流将根据A0分配所有操作的内存:B0,B1,B2等。一旦完成,TF就会释放不再需要的A0内存。如果您使用卷积神经网络,通常会保存所有正向路径激活,直到反向路径开始。

使用XLA,可以将多个操作合并到块中。在该块内,可以合并/拆分/复制操作以减少记忆使用。 XLA集群将拥有自己的内存管理例程,这取决于如何将操作混合在一起。多个XLA群集的行为就像是多个非XLA的操作:它们都将尽快启动,这可能导致峰值内存使用情况欠佳。