その他

Python 関数のプロファイラーユーティリティ

nnabla.utils.function_profile.profile(fn=None, condition=None, profile_class=<class 'cProfile.Profile'>, print_freq=0, sort_keys=None, print_restrictions=None)[ソース]

cProfile.Profile のように、Python プロファイラーでプロファイリングされた関数をデコレートします。

注意: ここでの 関数Function を指しません。Python 関数です。

パラメータ:
  • fn (function) -- プロファイリングされた関数。None (デフォルト) が指定された場合、新しいデコレーター関数が戻ります。本デコレーター関数のオプション引数を指定したい場合に使用します。

  • condition (function) -- デコレートした関数と同じ入力を受け取り、ブール値を返す関数オブジェクト。 condition 関数が True を返したときのみデコレートした関数がプロファイリングされます。デフォルトでは、常に True を返すため、デコレートした関数を呼び出す度にプロファイリングが実行されます。

  • profile_class (class) -- cProfile.ProfileProfile.Profile のようなプロファイラークラス。デフォルトは cProfile.Profile です。

  • print_freq (int) -- プロファイリング結果は、 print_freq で指定された時間間隔での関数呼び出しで出力されます。 0 (デフォルト) が指定された場合、プロファイリング結果は、 decorated_func.profiler.print_stats() が手動で呼び出されない限り、Python プロセスの最後部のみに出力されます。

  • sort_keys (iterable) -- pstats.Stats.sort_stats() に引数として受け渡す、リストまたは文字列のタプル。デフォルトは ('cumulative', 'time', 'calls')

  • print_restriction (iterable) -- pstats.Stats.print_stats() に引数として受け渡す、リストまたは文字列のタプル。デフォルトは``(40,)`` で、デコレートした関数内のうち 40 の関数がプロファイリング結果に出力されます。

戻り値: function

デコレート関数。 fnNone の場合、オプション引数付きの新しいデコレーター関数が指定されます。

サンプル

次のように関数をデコレートすると、プロファイリング結果は Python プロセスの最後部に出力されます。

from nnabla.utils import function_profile

@function_profile.profile
def foo(a, b, c=None, d=None):
    ...

これまでのプロファイリング結果を手動で出力するには、 profiler 属性としてデコレートした関数にアタッチされた FunctionProfile オブジェクトの FunctionProfile.print_stats() をご使用ください。

foo.profiler.print_stats()

特定の引数が受け渡されたときにのみ関数をプロファイリングする場合、次のように condition 引数を使用してください。

def profile_only_if_c_is_not_none(a, b, c=None, d=None):
    return c is not None

@function_profile.profile(condition=profile_only_if_c_is_not_none)
def foo(a, b, c=None, d=None):
    ...
class nnabla.utils.function_profile.FunctionProfile(fn, condition=None, profile_class=<class 'cProfile.Profile'>, print_freq=0, sort_keys=None, print_restrictions=None)[ソース]

関数プロファイラーオブジェクト

通常、ユーザーが直接使うことはありません。 profile() の実行を通じて生成され、属性 profiler ーとしてデコレートした関数にアタッチされます。詳しくは profile 関数をご覧ください。

print_stats(reset=True)[ソース]

手動でプロファインリング結果を出力します。

パラメータ:

reset (bool) -- False が指定された場合、これまでのプロファイリング統計が維持されます。 True (デフォルト) の場合、 reset_stats を呼び出してプロファイリング統計をリセットします。

reset_stats()[ソース]

これまでのプロファイリング統計を手動でリセットします。