【问题标题】:Tensorflow: How to reduce memory footprint for inference only models?Tensorflow:如何减少仅推理模型的内存占用?
【发布时间】:2017-07-13 08:26:25
【问题描述】:

在推理期间,当我们通过网络传播时,我们不需要保留前一层的激活。但是,由于我们没有明确告诉程序丢弃它们,因此它没有区分训练和推理通过。有没有一种方法——也许是一个简单的标志、类、方法——在 Tensorflow 中进行这种内存管理?简单地使用tf.stop_gradient 会起作用吗?

【问题讨论】:

  • 这是自动完成的。 TensorFlow 会为每个 .run 调用创建新的执行计划,因此如果您不请求渐变,这些激活将被丢弃
  • @YaroslavBulatov 感谢您的澄清!

标签: memory memory-management tensorflow


【解决方案1】:

最简单的方法是使用他们的freeze_graph.py 脚本“freeze”(tensorflow 的术语)您的模型。

这个脚本基本上去掉了所有不必要的操作,也用常量替换了所有变量,然后将结果图导出回磁盘。

为此,您需要在图表中指定您在推理过程中使用的输出。无法到达输出的节点(可能是摘要、损失、梯度等)会被自动丢弃。

一旦消除了反向传递,tensorflow 就可以优化其内存使用,尤其是自动优化free or reuse memory taken by unused nodes

【讨论】:

  • 奇怪的是,我在 RAM 使用方面得到了完全相反的效果:当我 freeze_graph 时,推理的内存消耗增加了 1.5-2 倍。
猜你喜欢
  • 2018-11-24
  • 2014-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-04
相关资源
最近更新 更多