【问题标题】:Memory leak in TFJS application even after disposing unused tensors即使在处理未使用的张量后,TFJS 应用程序中的内存泄漏
【发布时间】:2021-07-05 12:26:50
【问题描述】:

问题

我在 Tensorflow JS 上运行一个多阶段对象检测网络。第一部分是一个单独的网络检测对象,然后将它们从主输入图像中删除。这些剪切图像的大小可能会有所不同,并直接馈送到执行另一次检测的第二个网络。
我的应用程序运行良好,但一段时间后内存不足。我发现内存增长的原因是剪切张量即使在处理它们之后仍然分配内存。

系统

  • @tensorflow/tfjs v.3.7.0
  • Microsoft Edge v.91.0.864.59

代码

while(running) {
   tf.engine().startScope()
   ...
   for(cutout count...)
      ...
      const cropped_image = input_tensor.slice([ymin, xmin], crop_size)
      const cropped_image_expanded = tf.expandDims(cropped_image, 0);
      const pred = await this.props.models.ssd_2nd_stage.executeAsync(cropped_image_expanded);

      tf.dispose(cropped_image);
      tf.dispose(cropped_image_expanded);
      ...
   }
   ...
   console.log(tf.memory())

   tf.engine().endScope()
   tf.engine().disposeVariables()
}

日志

开头tf.memory() 显示:

{unreliable: false, numBytesInGPU: 136710800, numBytesInGPUAllocated: 563751816, numBytesInGPUFree: 427041016, numTensors: 1517, …}

过了一会儿……

{unreliable: false, numBytesInGPU: 136710800, numBytesInGPUAllocated: 615142084, numBytesInGPUFree: 478431284, numTensors: 1517, …}

您可以清楚地看到 TFJS 不会释放之前的 GPU 分配,这会在一段时间后导致 OOM 错误。

我有什么遗漏的吗?

【问题讨论】:

    标签: javascript memory tensorflow.js


    【解决方案1】:

    几天来,我一直在努力解决我的 tfjs-node 预测服务器中的内存泄漏问题。我已经尝试了 dispose、startScope、endScope 等的每一种可能的组合。似乎没有解决方案,我开始认为 tfjs-node 本身存在固有缺陷。对我来说更糟糕的是 tf.memory() 为我提供了“不可靠”的内存使用统计信息,甚至没有提供它应该提供的原因。强烈考虑为我的服务器切换到 python,因为节点绑定似乎很不稳定。

    【讨论】:

      猜你喜欢
      • 2019-10-24
      • 1970-01-01
      • 1970-01-01
      • 2022-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-27
      相关资源
      最近更新 更多