TensorFlow:如何衡量每个张量需要多少GPU内存?

Cla*_*ash 8 tensorflow

我目前正在TensorFlow中实现YOLO,我对于需要多少内存感到有些惊讶.在我的GPU上,我可以使用批量大小为64 的Darknet框架训练YOLO .在Te​​nsorFlow上,我只能使用批量大小为6,而8我已经用完了内存.对于测试阶段,我可以使用批量大小64运行而不会耗尽内存.

  1. 我想知道如何计算每个张量消耗的内存量?默认情况下,所有张量都保存在GPU中吗?我可以简单地将总内存消耗计算为*32位的形状吗?

  2. 我注意到,因为我使用动量,我的所有张量都有一个/Momentum张量.这可能也会占用大量内存吗?

  3. 我用一种方法扩充我的数据集distorted_inputs,非常类似于CIFAR-10教程中定义的方法.可能是这部分占据了大量的记忆吗?我相信Darknet会对CPU进行修改.

小智 7

抱歉,回复缓慢.不幸的是,现在设置日志级别的唯一方法是编辑tensorflow/core/platform/logging.h并重新编译,例如:

#define VLOG_IS_ON(lvl) ((lvl) <= 1)
Run Code Online (Sandbox Code Playgroud)

有一个错误打开1258来更优雅地控制日志记录.

MemoryLogTensorOutput在每个操作执行结束时记录条目,并指示保存操作输出的张量.知道这些张量是有用的,因为直到下游Op消耗张量时才释放存储器,这可能在稍后的大图中.


Eri*_*lts 6

现在1258已关闭,您可以通过在导入TensorFlow之前设置环境变量来启用Python中的内存日志记录:

import os
os.environ['TF_CPP_MIN_VLOG_LEVEL']='3'
import tensorflow as tf
Run Code Online (Sandbox Code Playgroud)

由此会有很多日志记录.您需要grep结果以找到合适的行.例如:

grep MemoryLogTensorAllocation train.log
Run Code Online (Sandbox Code Playgroud)