如何在TensorFlow分析器中获取详细的内存故障?

Emm*_*ell 6 profiler profiling memory-management tensorflow

我正在使用新的TensorFlow探查器探查我的神经网络中的内存使用情况,该神经网络正在具有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%),     ...
Run Code Online (Sandbox Code Playgroud)

显然,这总计超过12GB,因此其中一些矩阵必须位于主内存中,而其他矩阵必须位于GPU上。我希望看到给定步骤中哪些变量的详细分类。是否有可能通过探查器或其他方式获得有关各种参数存储位置(主内存或GPU内存)的更详细的信息?

kni*_*ian 5

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

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

您还可以使用时间线来验证总内存使用量从未超过 12 GB。