cocolog:91640732
TensorFlow 2.0 を使っているとどんどん遅くなり、どうもメモリ消費が激しくメモリ不足が生じているようだ。ググると、tf.keras の model.predict() がメモリリークを起こしているらしい。 (JRF 0759)
JRF 2020年1月28日 (火)
なお、あまりそういうことはしないが、同じく Keras の model.fit() も、複数回使っているとメモリリークするようなことも書いてあった。
TensorFlow 2.1 でも直っているかどうかは微妙なところのようだ。↓など英語では複数のページに情報があるが、日本語では見つからなかったので「ひとこと」した。
JRF2020/1/288469
《Repeatedly calling model.predict(...) results in memory leak · Issue #13118 · keras-team/keras · GitHub》
https://github.com/keras-team/keras/issues/13118
JRF2020/1/289746
ちなみに私の環境は、Windows 10 で conda=4.8.1 python=3.7.6。tensorflow=2.0.0 で gpu は入っていない。が、そういうのに関係なく TensorFlow 2.0 では起こっているようだ。
JRF2020/1/280952
……。
私はこれまで TensorFlow 1.x 系で勉強・実験してきて、昨日、はじめて TensorFlow 2 系を使いはじめたところだった。
JRF2020/1/289344
だから、実行しているうちにメモリ使用量がすごく増えるのは、私のコードの問題かと疑い、@tf.function に渡す引数を tf.constant してからにしたり、いろいろ試したりしたのだった。あと、終了時の仮想メモリの解放がうまくいってないように見えたことから、python や matplotlib の gc 関連のバグかとも疑った。
JRF2020/1/288116
TensorFlow 2.0 は 1.x に比べメモリを食うという情報もあったので、いくらなんでもここまで違うのはおかしいと思いながらも、しかたないのかとも思ったりした。
日本語でググったりしてもなかなか解決策が見つからなかったが、[google: tensorflow 2.0 memory leak] でやっと原因がわかったのだった。
JRF2020/1/286301
解決法としては…、
<pre>
outputs = model.predict(inputs)
</pre>
…などのかわりに…
<pre>
outputs = model(inputs).numpy()
</pre>
…を使えば良いようだ。
JRF2020/1/287699