troushoo

Jupyter Notebook でのパフォーマンス調査

概要

Jupyter Notebook でのプロファイリング方法を紹介します。
%time: 実行時間を計測
%timeit: 複数回の結果を元に、実行時間を計測
%prun: プロファイリングを実行
%lprun: 行ごとにプロファイリングを実行
%memit: メモリ使用量を測定

内容


%time
実行時間を計測します。
User CPU time、Sys CPU time、Wall time がわかります。
import random
L = [random.random() for i in range(100000)]
%time L.sort()


%timeit
複数回の結果を元に、実行時間を計測します。
sum(range(100)) のテスト結果では、1000000 回テストが行われたことがわかります。
%timeit sum(range(100))


また、%timeit は、例えばガーベッジコレクションの時間を含めないようにする等、測定結果がより正確になるように実行時間を計測します。
以下は、%time を実行した同じコードを %timeit で実行した結果です。%time での測定結果より %timeit での測定結果のほうが早いことがわかります。


%prun
プロファイリングを実行します。
以下の例では「<ipython-input-6-6bc8640aa76a>:4(<listcomp>)」に一番時間がかかっていたことがわかります。
def sum_of_lists(N):
     total = 0
     for i in range(5):
         L = [j ^ (j >> i) for j in range(N)]
         total += sum(L)
     return total

%prun sum_of_lists(1000000)


%lprun
行ごとにプロファイリングを実行します。
実行には line_profiler のインストールと、モジュールの読み込みが必要です。
!pip install line_profiler
%load_ext line_profiler
「%lprun –f <関数名> 実行関数」という風に実行します。
以下の例では、「 L = [j ^ (j >>i) for j in range(N)]」の部分で時間がかかっていたことがわかります。
def sum_of_lists(N):
      total = 0
      for i in range(5):
          L = [j ^ (j >> i) for j in range(N)]
          total += sum(L)
      return total

%lprun -f sum_of_lists sum_of_lists(5000)


%memit
メモリ使用量を測定します。
実行には memory_profiler のインストールと、モジュールの読み込みが必要です。
!pip install memory_profiler
%load_ext memory_profiler
以下の例では、118.46 MiB 使用していたことがわかります。
def sum_of_lists(N):
      total = 0
      for i in range(5):
          L = [j ^ (j >> i) for j in range(N)]
          total += sum(L)
      return total

%memit sum_of_lists(1000000)



情報元
Profiling and Timing Code (英語)

関連記事
Pyflame: Python プロファイラー
cProfile を用いて実行した Python プロファイリングを KCacheGrind でビジュアル化
  1. 2018/09/01(土) 17:30:21|
  2. Python
  3. | トラックバック:0
  4. | コメント:0
<<プロセスダンプがとられたコンピューターのコンピューター名を表示 | ホーム | jcmd を使ってデッドロックのトラブルシューティング>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://troushoo.blog.fc2.com/tb.php/368-cf13b00c
この記事にトラックバックする(FC2ブログユーザー)

スポンサーリンク

最新記事

月別アーカイブ

カテゴリ

ツール (78)
ネットワーク (37)
Wireshark (43)
Visual Studio (55)
WinDbg (33)
SOS・Psscor2/Psscor4 (25)
Linux (19)
コンテナ (4)
Azure (17)
Tips (19)
AD (6)
.NET (24)
Python (5)
Java (5)
英語 (1)
About Me (1)
未分類 (0)

全記事表示リンク

全ての記事を表示する

検索フォーム

RSSリンクの表示

リンク

このブログをリンクに追加する