Python Jupyter Lab (Notebook) でメモリリーク?
5194 ワード
環境
- Kaggle Docker Python v86
https://console.cloud.google.com/gcr/images/kaggle-images/GLOBAL/python
現象
Jupyter Labを使っていて、変数を定義したのちdelしてgc.collect()してもメモリが解放されない。
再現手順
1つのセルの中に以下のようなコードを書いて実行する。
import numpy as np
import pandas as pd
import psutil
print(psutil.Process().memory_info().rss / 1024**2)
df = pd.DataFrame(np.arange(50000000).reshape(-1,5))
df.head()
最後にdf.head() としていることに注意。
次のセルで
print(psutil.Process().memory_info().rss / 1024**2)
del df
print(psutil.Process().memory_info().rss / 1024**2)
メモリの状況はすぐに表示されないので念のためさらに次のセルでも確認
print(psutil.Process().memory_info().rss / 1024**2)
※ちなみに引き続いてgc.collect()しても同じ。
原因
pandas.DataFrame の問題かと思ったが、そうではない。
「セル」の最後にJupyter Labの機能による出力表示を行うと、それ以後他のセルでdelしても解放されないようだ。
解決策
セルの最後でdf.head()しない。表示したければprintする。
コメント
- 地味に不安要素になる部分・挙動だけれど、きちんとJupyter 入門すると注意されていることなのだろうか(知らない)。
- 手元で調査して確認できたが、gc対象とならない理由はjupyterの画面表示機能に参照が保持されるか何かだろうか。IPythonに原因があるらしい。検索語をJupyter memory leakとすれば https://github.com/jupyter/notebook/issues/3713 が出てきて、この先に説明があるらしい(見てない)。
- 検索語をpandas memory leak とすると https://stackoverflow.com/questions/14224068/memory-leak-using-pandas-dataframe などが出てきて、迷い続ける(迷った)。
Author And Source
この問題について(Python Jupyter Lab (Notebook) でメモリリーク?), 我々は、より多くの情報をここで見つけました https://qiita.com/smina2018/items/1d8e95963e86b0948179著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .