« 前のひとこと | トップページ | 次のひとこと »

cocolog:91640732

TensorFlow 2.0 を使っているとどんどん遅くなり、どうもメモリ消費が激しくメモリ不足が生じているようだ。ググると、tf.keras の model.predict() がメモリリークを起こしているらしい。 (JRF 0759)

JRF 2020年1月28日 (火)

解決法としては…、

<pre>
outputs = model.predict(inputs)
</pre>

…などのかわりに…

<pre>
outputs = model(inputs).numpy()
</pre>

…を使えば良いようだ。

JRF2020/1/287699

なお、あまりそういうことはしないが、同じく 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

« 前のひとこと | トップページ | 次のひとこと »