出力のカスタマイズ
FormatterとReporter
EasyBenchでは、レポーター(Reporter)という仕組みを使用してベンチマーク結果の出力を行います。デフォルトではConsoleReporterが使用されます。
ConsoleReporterはコンソール画面にデータを出力するレポーターで、デフォルトでは表形式(TableFormatter)でデータを整形して表示します。EasyBenchでは、このFormatter(出力形式)とReporter(出力方法)を変更することで、様々な形式での出力が可能になります。
Reporterの使用
レポーターを使用するには、ベンチマーク設定(BenchConfigまたは@bench.config)のreportersパラメータにリストとして設定します。reportersはリスト形式であり、複数の出力方法を同時に指定できます。
Reporterを指定する方法は3種類あります:
-
文字列で指定:レポーター名を文字列として指定する
"console": 標準的なテーブル形式のコンソール出力"simple": シンプルなコンソール出力"boxplot": ボックスプロットによる可視化"violinplot": バイオリンプロットによる可視化"lineplot": ラインプロットによる可視化"histplot": ヒストプロット(ヒストグラム)による可視化"barplot": バープロットによる可視化"boxplot-sns": seabornスタイルのボックスプロットによる可視化"violinplot-sns": seabornスタイルのバイオリンプロットによる可視化"lineplot-sns": seabornスタイルのラインプロットによる可視化"histplot-sns": seabornスタイルのヒストプロットによる可視化"barplot-sns": seabornスタイルのバープロットによる可視化"*.csv"または"*.json": ファイル出力
-
引数付きで指定:
(reporter_name, parameter_dict)の形式で指定
(例:("boxplot", {"log_scale": False})) -
Reporterオブジェクトで指定:Reporterクラスのインスタンスを直接指定
(例:FileReporter("results.json"))
使用例:
from easybench import BenchConfig
from easybench.reporters import FileReporter
# 様々な指定方法による複数の出力フォーマット
config = BenchConfig(
...
reporters=[
"console", # 文字列として指定
("simple", {"metric": "min"}), # 引数付きで指定
("boxplot", {"log_scale": False}), # 引数付きでプロット
"results.csv", # ファイルパスとして指定
FileReporter("results.json"), # オブジェクトとして指定
]
)
カスタムReporterの作成
高度なユースケースでは、レポーターを自作できます。
詳細は ReporterやFormatterを自作するを参照してください。
カスタムReporterの登録
カスタムレポーターを名前をつけて登録すると、文字列で指定して使用できるようになります:
from easybench import BenchConfig, set_reporter
from easybench.reporters import ConsoleReporter, SimpleFormatter
from easybench.visualization import PlotReporter, LinePlotFormatter
# [方法1] 関数呼び出しを使用
# 1. レポーターオブジェクトを返す関数を作成
def create_log_plot(**kwargs):
return PlotReporter(LinePlotFormatter(log_scale=True, **kwargs))
# 2. その関数を名前をつけて登録
set_reporter("log-lineplot", create_log_plot) # "log-lineplot"として登録
# [方法2] デコレーター構文を使用
# 1. レポータオブジェクトを返す関数にデコレータを適用
@set_reporter("custom-simple") # "custom-simple"として登録
def create_simple_reporter(**kwargs):
return ConsoleReporter(SimpleFormatter(**kwargs))
# 登録したレポーターを使用
bench_config = BenchConfig(
reporters=[
"console",
"log-lineplot",
("custom-simple", {"metric": "min"}),
]
)