首页 > 解决方案 > 哪些 tensorflow 操作会触发内存分配?

问题描述

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

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

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

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

标签: pythontensorflowmachine-learningmemoryout-of-memory

解决方案


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

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

  • 没有 XLA
  • 与 XLA

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

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


推荐阅读