Mi aplicación tfjs-node falla debido a que se quedó sin memoria a pesar de usar tidy() y dispose() para evitar pérdidas de memoria. Me las arreglé para reproducir el problema en el siguiente código:
import * as tf from '@tensorflow/tfjs-node' let x = tf.variable(tf.scalar(1)) function model(){ for(let i = 0; i < 100; i++){ let b = tf.tidy(() => { return tf.mul(2, 3) }) b.dispose() console.log(tf.memory().numTensors) } return x } //this call shows just 2 tensors throughout each of model()'s iterations model() const optimizer = tf.train.sgd(0.001); optimizer.minimize(() => { //this call shows the number of tensors increasing each iteration up to about 200 return model() })Dentro de la función model(), hago un bucle 100 veces, cada vez creando un tensor y luego llamando inmediatamente a dispose() sobre él. La función model() luego devuelve una variable x.
Si llamo a mi función model() normalmente, la cantidad de tensores activos permanece en 2 en cada una de las 100 iteraciones. Esto es lo que espero que suceda. Sin embargo, cuando llamo a model() dentro deOptimizer.minimize(), parece que las llamadas a Dispose() simplemente se ignoran por completo. El número de tensores aumenta en cada iteración. Al final, hay aproximadamente 200 tensores acumulados.
Para este código de ejemplo en particular, la pérdida de memoria no es un gran problema, pero para mi aplicación real, la pérdida de memoria es enorme y hace que la aplicación se bloquee casi de inmediato. ¿Algún consejo sobre cómo puedo solucionar esto?