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

Posted

技术标签:

【中文标题】如何在 TensorFlow 分析器中获取详细的内存细分?【英文标题】:How to get detailed memory breakdown in the TensorFlow profiler? 【发布时间】:2017-10-26 18:11:31 【问题描述】:

我正在使用新的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】:

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

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

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

【讨论】:

以上是关于如何在 TensorFlow 分析器中获取详细的内存细分?的主要内容,如果未能解决你的问题,请参考以下文章

如何在突触分析工作区的日志分析工作区中获取错误详细信息日志

如何从谷歌分析中获取我的特定链接详细信息

如何在 tensorflow 2.5 中运行 tensorflow 分析

最详细教程labview深度学习工业缺陷检测

如何通过浏览器从网络摄像头获取实时流视频详细信息到 python?

Tensorflow Serving 初探