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内存)的更详细的信息?
“请求的字节”显示所有内存分配的总和,但可以分配和取消分配该内存。因此,仅仅因为“请求的字节”超过 GPU RAM 并不一定意味着内存正在传输到 CPU。
特别是,对于前馈神经网络,TF 通常会保留前向激活,以使反向传播高效,但不需要保留中间反向传播激活,即每层的 dL/dh,因此它可以丢弃这些完成这些之后的中间体。所以我认为在这种情况下你关心的是Conv2D使用的内存,它小于12 GB。
您还可以使用时间线来验证总内存使用量从未超过 12 GB。