Tensorflor.js をブラウザで動かし、モデルをループで推論(predict)させていると GPU のメモリがジワジワと増え続け最終的にクラッシュしてしまうという現象があった。結論としては tf.Tensor オブジェクトは状況によっては(WebGL バックエンドが自動的に選択された場合) GC されない仕様になっており、リソースの明示的な開放が必要だった。
記事末リンクの、メモリ管理で説明されている tf.tidy
を嚙ませてあげることでメモリリークが解消した。
ちなみに、WebGL バックエンドはブラウザでの実行時に選択されるらしい。現在使われているバックエンドはこのメソッドで取得できる。
console.log(tf.getBackend());
また Node.js や cpu バックエンドでは GC されるが tf.tidy
で開放してもデメリットはなく、むしろパフォーマンス的にメリットがあるようなのでとりあえず明示的に開放してあげる方が安全な気がする。