当前位置: 首页 > 工具软件 > tfjs > 使用案例 >

tfjs 内存管理 tidy

红富
2023-12-01

原文链接: tfjs 内存管理 tidy

上一篇: python acm 常见输入输出

下一篇: python acm 代码片段

因为TensorFlow.js使用了GPU来加速数学运算,因此当tensorflow处理张量和变量时就有必要来管理GPU内存。在TensorFlow.js中,我们可以通过dispose 和 tf.tidy这两种方法来管理内存。

dispose

您可以在张量或变量上调用dispose来清除它并释放其GPU内存:

  const x = tf.tensor2d([[0.0, 2.0], [4.0, 6.0]]);
  const x_squared = x.square();
  console.log(x)
  console.log(x_squared)
  x.print()
  x_squared.print()
  x.dispose();
  x_squared.dispose();
  console.log(x)
  console.log(x.arraySync())  // 报错,已经销毁了
  console.log(x_squared)
  x.print() // 报错,已经销毁了
  x_squared.print() // 报错,已经销毁了

tf.tidy

进行大量的张量操作时使用dispose可能会很麻烦。 TensorFlow.js提供了另一个函数tf.tidy,它对JavaScript中的常规范围起到类似的作用,不同的是它针对GPU支持的张量。

tf.tidy执行一个函数并清除所有创建的中间张量,释放它们的GPU内存。 它不清除内部函数的返回值。

  const average = tf.tidy(() => {
    const y = tf.tensor1d([1.0, 2.0, 3.0, 4.0]);
    const z = tf.ones([4]);

    return y.sub(z).square().mean();
  });

  average.print()  //    3.5

使用tf.tidy将有助于防止应用程序中的内存泄漏。它也可以用来更谨慎地控制内存何时回收。

两个重要的注意事项

传递给tf.tidy的函数应该是同步的,并且不会返回Promise。我们建议在tf.tidy内不要有更新UI或在发出远程请求的代码。

tf.tidy不会清理变量。变量通常持续到机器学习模型的整个生命周期,因此TensorFlow.js不会清理它们,即使它们是在tidy中创建的。不过,您可以手动调用dispose处理它们。

 类似资料: