python - 哪些 tensorflow 操作会触发内存分配?
问题描述
在阅读TensorArray类的文档后,我遇到了这一行:
如果为 True,则 TensorArray 将与首次写入时使用的 Tensor 位于同一设备上(写入操作包括写入、取消堆栈和拆分)。如果为 False,则 TensorArray 将放置在由初始化期间可用的设备上下文确定的设备上。
这让我想知道是否只有某些操作会触发实际的内存分配和读/写,以及是否有这些操作的列表。
我也想知道这一点,因为在创建临时非常大的张量时由于 OOM 错误而存在限制,但无论如何都是以批处理方式处理的,因此程序永远不需要实际保存张量的所有数据 - 类似于数据集 API 如何在按需加载所有内容时处理无限大的数据集。
解决方案
从 Tensorflow-GPU 的角度来看:没有列表。
TF 在 GPU 上运行有两种方式:
- 没有 XLA
- 与 XLA
如果没有 XLA,一旦操作 A0 完成,tensorflow 将根据 A0 分配所有操作的内存:B0、B1、B2 等。一旦这些操作完成,TF 将不再需要释放 A0 内存。如果你有卷积神经网络,你通常会保存所有的正向路径激活,直到反向路径开始。
使用 XLA,可以将多个操作合并到块中。在块内,可以合并/拆分/复制操作以减少内存使用。XLA 集群将有自己的内存管理例程,这取决于操作是如何混合在一起的。多个 XLA 集群将表现为多个非 XLA 操作:它们都将尽快启动,可能导致次优峰值内存使用。
推荐阅读
- node.js - 降级 Angular 版本 11-9
- powershell - 从 XML 中删除子节点
- javascript - 不和谐机器人 | 音乐机器人从语音频道中弹出
- matlab - 如何从复杂的垫子中提取数据并将它们保存到乘法表中
- javascript - 5 秒后在模板中隐藏 div
- python - 如何在 Pandas 的两个 Dataframe 上访问每个相同的索引单元格?
- postgresql - 将字符串日期(DD-MM-YYYY)与当前日期 postgress 进行比较
- php - 舍入/限制 ms-duration (DateTime::diff) 到一位
- python - Astropy transform_to 忽略春分
- c++ - “转换表达式”,我们必须将给定的中缀表达式转换为后缀表达式