kakakakakku blog

Weekly Tech Blog: Keep on Learning!

Jupyter Notebook でパフォーマンスを計測するなら %%timeit と書こう

Python で実装した処理のパフォーマンスを計測するときに,たまに timeit を使っている.timeit は処理を繰り返し実行することにより,精緻な計測結果を把握できる.今までは timeitimport して直接実行していたけど,よく調べてみると,Jupyter Notebook (IPython) で「マジックコマンド」として %%timeit と書けることを最近知った.import も必要なく使えて便利だった!

ipython.readthedocs.io

%%time を使う

実行回数は「ループ数」「繰り返し数」から決まる.%%timeit にオプションを指定せず実行すると「ループ数」は適切な精度が得られるように自動的に決まる仕組みになっている.なお「繰り返し数」はデフォルト 7 となる.Jupyter Notebook で簡単なサンプルコードを実装し,セルの頭に %%timeit と書いて実行すると,以下のようになる.mean ± std と書いてあるため「平均実行時間」「標準偏差」だとわかる.なお「ループ数」1000000 になっていた.

%%timeit
sum(range(100))
1.42 µs ± 48.8 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

%%time -n を使う

%%timeit にオプション -n を指定すると「ループ数」を固定できる.今回は 10 に固定して実行した.

%%timeit -n 10
sum(range(100))
1.25 µs ± 30 ns per loop (mean ± std. dev. of 7 runs, 10 loops each)

%%time -n -r を使う

%%timeit にオプション -r を指定すると「繰り返し数」を固定できる.今回は 2 に固定して実行した.

%%timeit -n 10 -r 2
sum(range(100))
1.28 µs ± 66.9 ns per loop (mean ± std. dev. of 2 runs, 10 loops each)

Jupyter Notebook と VS Code

以下の記事に書いた通り,最近は Jupyter Notebook を実装するときに Visual Studio Code (VS Code) を使う機会が増えている.

kakakakakku.hatenablog.com

今回の %%timeit の検証も VS Code を使っている.

f:id:kakku22:20200224232058p:plain

まとめ

Jupyter Notebook でパフォーマンスを計測するときは「マジックコマンド」として %%timeit を使うと便利だった.オプションにより「ループ数」「繰り返し数」を固定できるけど,デフォルトで適切な精度が得られるように実行されるため,あまり気にしなくて良さそうに思う.