TensorFlow:如何测量每个张量占用多少 GPU 内存?
TensorFlow: How to measure how much GPU memory each tensor takes?
我目前正在实施 YOLO in TensorFlow and I'm a little surprised on how much memory that is taking. On my GPU I can train YOLO using their Darknet 批量大小为 64 的框架。在 TensorFlow 上,我只能使用批量大小 6 执行此操作,而 8 我已经 运行 内存不足。对于测试阶段,我可以 运行 批量大小为 64 而不会 运行 内存不足。
我想知道如何计算每个张量消耗了多少内存?默认情况下所有张量都保存在 GPU 中吗?我可以简单地将总内存消耗计算为形状 * 32 位吗?
我注意到因为我使用了动量,所以我所有的张量也有一个 /Momentum
张量。会不会也占用了很多内存?
我正在使用一种方法 distorted_inputs
扩充我的数据集,与 CIFAR-10 tutorial 中定义的方法非常相似。难道这部分占用内存很大?我相信 Darknet 会在 CPU.
中进行修改
参见本文中的描述 (commit)。
内存分配是原始信息,尽管它需要一个脚本以易于阅读的形式收集信息。
抱歉回复慢。不幸的是,现在设置日志级别的唯一方法是编辑 tensorflow/core/platform/logging.h 并重新编译,例如
#define VLOG_IS_ON(lvl) ((lvl) <= 1)
有一个 bug 1258 可以更优雅地控制日志记录。
MemoryLogTensorOutput
条目在每个 Op 执行结束时记录,并指示保存 Op 输出的张量。了解这些张量很有用,因为直到下游 Op 消耗张量时才会释放内存,这在大图中可能要晚得多。
现在1258已经关闭,可以在导入TensorFlow前通过设置环境变量在Python中启用内存记录:
import os
os.environ['TF_CPP_MIN_VLOG_LEVEL']='3'
import tensorflow as tf
因此会有 很多 的日志记录。您需要 grep 结果以找到合适的行。例如:
grep MemoryLogTensorAllocation train.log
我目前正在实施 YOLO in TensorFlow and I'm a little surprised on how much memory that is taking. On my GPU I can train YOLO using their Darknet 批量大小为 64 的框架。在 TensorFlow 上,我只能使用批量大小 6 执行此操作,而 8 我已经 运行 内存不足。对于测试阶段,我可以 运行 批量大小为 64 而不会 运行 内存不足。
我想知道如何计算每个张量消耗了多少内存?默认情况下所有张量都保存在 GPU 中吗?我可以简单地将总内存消耗计算为形状 * 32 位吗?
我注意到因为我使用了动量,所以我所有的张量也有一个
/Momentum
张量。会不会也占用了很多内存?我正在使用一种方法
distorted_inputs
扩充我的数据集,与 CIFAR-10 tutorial 中定义的方法非常相似。难道这部分占用内存很大?我相信 Darknet 会在 CPU. 中进行修改
参见本文中的描述 (commit)。 内存分配是原始信息,尽管它需要一个脚本以易于阅读的形式收集信息。
抱歉回复慢。不幸的是,现在设置日志级别的唯一方法是编辑 tensorflow/core/platform/logging.h 并重新编译,例如
#define VLOG_IS_ON(lvl) ((lvl) <= 1)
有一个 bug 1258 可以更优雅地控制日志记录。
MemoryLogTensorOutput
条目在每个 Op 执行结束时记录,并指示保存 Op 输出的张量。了解这些张量很有用,因为直到下游 Op 消耗张量时才会释放内存,这在大图中可能要晚得多。
现在1258已经关闭,可以在导入TensorFlow前通过设置环境变量在Python中启用内存记录:
import os
os.environ['TF_CPP_MIN_VLOG_LEVEL']='3'
import tensorflow as tf
因此会有 很多 的日志记录。您需要 grep 结果以找到合适的行。例如:
grep MemoryLogTensorAllocation train.log