如何在TensorFlow分析器中获得详细的内存细分?

时间:2017-10-26 18:11:32

标签: memory-management tensorflow profiling profiler

我正在使用新的TensorFlow profiler来分析我的神经网络中的内存使用情况,我在具有12GB RAM的Titan X GPU上运行。这是我描述主要训练循环时的一些示例输出:

==================Model Analysis Report======================
node name | requested bytes | ...
Conv2DBackpropInput        10227.69MB (100.00%, 35.34%),     ...
Conv2D                       9679.95MB (64.66%, 33.45%),     ...
Conv2DBackpropFilter         8073.89MB (31.21%, 27.90%),     ...

显然这超过12GB,因此其中一些矩阵必须在主内存中,而其他矩阵必须在GPU上。我很想看到在给定步骤中变量是什么的详细细分。是否可以通过分析器或其他方式获取有关各种参数存储位置(主存储器或GPU存储器)的更详细信息?

1 个答案:

答案 0 :(得分:3)

“请求的字节”显示所有内存分配的总和,但可以分配和取消分配该内存。因为“请求的字节数”超过GPU RAM并不一定意味着内存正在传输到CPU。

特别是对于前馈神经网络,TF通常会保持前向激活,使backprop高效,但不需要保持中间反向激活,即每层的dL / dh,所以它可以只是完成这些后,扔掉这些中间体。所以我认为在这种情况下你关心的是Conv2D使用的内存,它小于12 GB。

您还可以使用时间轴来验证总内存使用量是否永远不会超过12 GB。