猫になりたい

コンサルのデータ分析屋、計量経済とか機械学習をやっています。pyてょnは3.7を使ってマスコレルウィンストングリーン。

Jupyterのmatplotlib inlineのメモリリークバグ

先日jupyterでmatplotlibに画像を吐き出させ続けていたところ1000枚ぐらい吐き出したあたりで突然jupyterのkernelが落ちました。嫌な予感がしてメモリの使用量を追ってみると処理を繰り返すに連れメモリの使用量が増加していき画像1000枚処理したあたりでメモリを4GB喰っていました。その時は仮想環境でメモリを4GBしか設定していなかったのでそこでkernelが落ちたということだったのですが、きちんとplt.close()を毎回ループの中で行っているのにも関わらずこれだけメモリを喰うのはおかしくないかと思い調べてみました。

調べても殆どはちゃんとplt.close()呼べよみたいな記事しか見つからなくて困っていたのですがのですが最終的に
%matpolotlib inline
にメモリリークバグがあるとの記事に行き当たりました。
Memory leak with %matplotlib inline · Issue #7270 · ipython/ipython · GitHub
これはplot.show()するしないに関わらず発生するようです。私はループの中で

plt = make_plot(df)# dataframeを処理してplotを返す自作関数
plt.savefig(・)
plt.close()

してる最中にこのバグに遭遇しました。

うん千枚の画像をnotebook内に表示する必要は一切無いですし自身も画像を保存したいだけでしたので%matpolotlib inlineをコメントアウトすることで解決しました。 めでたしめでたし。