St_Hakky’s blog

Data Science / Human Resources / Web Applicationについて書きます

【Python】使用メモリを計測するためにmemory_profilerを使う

こんにちは。

Pythonでメモリ使用量を調査する方法について、今回はmemory_profilerについて調べたのでまとめます。

本家のサイト

インストール

$ pip install memory_profiler

使い方

使い方としては、めちゃめちゃ簡単で、確認したい処理に @profileのデコレーターを使って記述します。今回は、PandasやNumpyを使っていますが、ここはなんでも大丈夫です。

import numpy as np
import pandas as pd
from memory_profiler import profile

@profile
def main():
    ## サンプルでデータを作っているので、ここの処理はなんでも良い
    print("Create Sample Data")
    df = pd.DataFrame(np.zeros((10000, 10000)))

    print("Show Sample Data")
    print(df)


if __name__ == '__main__':
    main()

これを、「 sample_memory_profiler.py」として保存します。

すると、以下のような感じで、どこでどのくらいメモリを使用しているかを見ることができます。

$ python sample_memory_profiler.py
--------------中略--------------

[10000 rows x 10000 columns]
Filename: sample_memory_profiler.py

Line #    Mem usage    Increment   Line Contents
================================================
     5     87.0 MiB     87.0 MiB   @profile
     6                             def main():
     7     87.0 MiB      0.0 MiB       print("Create Sample Data")
     8     87.3 MiB      0.3 MiB       df = pd.DataFrame(np.zeros((10000, 10000)))
     9                             
    10     87.3 MiB      0.0 MiB       print("Show Sample Data")
    11    151.5 MiB     64.3 MiB       print(df)

一行ずつ表示してくれるのが嬉しいですね。

matplotlibと併用する

matplotlibはPythonの可視化ツールですが、memory_profilerと連携して使うことで、可視化を行うことができます。

インストール
$ pip install matplotlib
実行する

mprofというコマンドを使うと、実行することができます。

$ mprof run sample_memory_profiler.py

実行すると、以下のようなグラフで可視化されます。

f:id:St_Hakky:20200501183133p:plain

便利ですね。

今日はこの辺で。