在阅读TensorArray类的文档时,我遇到了这一行:
如果为True,则TensorArray将与首次写入时使用的Tensor位于同一设备上(写入操作包括写入,解栈和拆分)。如果为False,则TensorArray将放置在设备上,该设备由初始化期间可用的设备上下文确定。
这使我想知道是否只有某些操作会触发实际的内存分配和读取/写入,以及是否有这些操作的列表。
我也想知道这一点,因为创建张量临时存在非常大的OOM错误时会存在一些局限性,但无论如何都是以批处理方式处理的,因此从不需要程序实际保存张量的所有数据-与数据集API允许按需加载所有内容时无限大数据集的方式类似。
答案 0 :(得分:0)
从Tensorflow-GPU角度来看:没有列表。
TF woudl有两种在GPU上运行的方式:
没有XLA,一旦操作A0完成,张量流将根据A0分配所有操作的内存:B0,B1,B2等。一旦完成,TF就会释放不再需要的A0内存。如果您使用卷积神经网络,通常会保存所有正向路径激活,直到反向路径开始。
使用XLA,可以将多个操作合并到块中。在该块内,可以合并/拆分/复制操作以减少记忆使用。 XLA集群将拥有自己的内存管理例程,这取决于如何将操作混合在一起。多个XLA群集的行为就像是多个非XLA的操作:它们都将尽快启动,这可能导致峰值内存使用情况欠佳。