

大量の画像データを取り込んでjupyter
notebookで解析しているのですが，コードの所々でdelコマンドとgc.collect()で変数を削除しているのですが，途中でメモリ不足になって停止してしまいます．

変数が占めているメモリを表示し，メモリをたくさん使っている変数をすべて削除しましたが，まだ全体の半分ほどメモリを使っています．

.pyファイルにして実行した場合はこんなことは起きないのですが，jupyter notebookの何かしらのキャッシュ的なものがたまっているのでしょうか？

ご教授お願いいたします．


CC BY-SA 4.0
2018-10-31T10:52:43.090
49825
2018-11-02T02:14:22.953
25518
question
jupyter-notebook メモリ管理 ipython
jupyter notebookでのメモリエラー


Jupyter
Notebookは、変数以外にもキャッシュしているものがあります。出力(Out)は間違いなくキャッシュしています。変数を出力した場合、その変数をキャシュしていると思われ、サイズの大きなものを出力した場合はそれがキャッシュに残ってしまうので、メモリ不足になりやすいと思われます。

例をあげると、Jupyter
Notebookでは、`memory_profiler`というパッケージを使うとメモリの消費量を測定できます。`memory_profiler`をインストールできていない場合は、まずインストールしておきます。

[code]

    pip install memory_profiler
    
[/code]

次のようなコードを実行させると、メモリーは回収できます。

[code]

    %load_ext memory_profiler
    import numpy as np
    import gc
    
    a = np.random.rand(10000,10000)
    %memit
    del a
    gc.collect()
    %memit
    
    peak memory: 839.47 MiB, increment: 0.22 MiB
    peak memory: 76.54 MiB, increment: 0.02 MiB
    
[/code]

しかし、次のようにしてOut:に出力してしまうと

[code]

    a = np.random.rand(10000,10000)
    a
    
    array([[0.23041043, 0.88022318, 0.61961303, ..., 0.23188055, 0.03481917,
        0.92450332],
       [0.8104011 , 0.52135031, 0.25772234, ..., 0.90955947, 0.64602805,
        0.10762479],
       [0.55358733, 0.50758164, 0.68215301, ..., 0.45746926, 0.43422664,
        0.24862533],
       ...,
       [0.11373284, 0.10500561, 0.1978364 , ..., 0.75755749, 0.18117871,
        0.3339833 ],
       [0.87190469, 0.54811619, 0.74330171, ..., 0.96712544, 0.30823596,
        0.13202881],
       [0.29832023, 0.6195654 , 0.34837866, ..., 0.51810623, 0.98901862,
        0.99977871]])
    
[/code]

同じように変数を削除しても、メモリーの消費量は減少しません。

[code]

    %memit
    del a
    gc.collect()
    %memit
    
    peak memory: 839.91 MiB, increment: 0.02 MiB
    peak memory: 839.91 MiB, increment: 0.00 MiB
    
[/code]

Jupyter
Notebookの場合は、`.py`ファイルを実行させる場合と比べると、メモリーにキャッシュさせるケースは多いと思います。`memory_profiler`を使ってメモリーの消費量を追跡していけばどこに問題があるのかは推測できるのではないかと思います。


CC BY-SA 4.0
2018-11-02T02:14:22.953
49880
2018-11-02T02:14:22.953
15171
49825
answer