CIでのPython pytest-benchmarkベンチマークを追跡する方法

Everett Pompeii

Everett Pompeii


pytest-benchmarkでPythonコードをベンチマークする方法を学んだので、次に、それらのベンチマークをCIで追跡する方法を見てみましょう。 継続的ベンチマークは、パフォーマンスの低下を引き起こさないように、各変更セットでベンチマークを実行するプラクティスです。 pytest-benchmarkベンチマークを使用して継続的ベンチマークを実装する最も簡単な方法は、Bencherを使用することです。

Bencherとは何ですか?

Bencherは、連続ベンチマーキングツールのスイートです。 パフォーマンスの後退があなたのユーザーに影響を与えたことはありますか? Bencherなら、それが起こるのを防げた可能性があります。 Bencherは、パフォーマンスの低下を_productionに到達する_前に検出し、防止することを可能にします。

  • 実行: お気に入りのベンチマーキングツールを使用してベンチマークをローカルまたはCIで実行します。 bencher CLIは単にあなたの既存のベンチマークハーネスをラップし、その結果を保存します。
  • 追跡: ベンチマークの結果を時間と共に追跡します。ソースブランチ、テストベッド、測定基準に基づいてBencherのWebコンソールを使用して結果を監視、クエリ、グラフ化します。
  • キャッチ: CIでパフォーマンスの後退をキャッチします。Bencherは最先端のカスタマイズ可能な分析を使用して、パフォーマンスの後退がProductionに到達する前にそれを検出します。

機能の後退を防ぐためにユニットテストがCIで実行されるのと同じ理由で、Bencherを使用してCIでベンチマークを実行してパフォーマンスの後退を防ぐべきです。パフォーマンスのバグはバグです!

Bencher Cloud の手順

  1. Bencher Cloud アカウントを作成する
  2. API トークンを作成し、それを秘密として CI に追加する。
  3. GitHub ActionsGitLab CI/CD のような CI のワークフローを作成する。
  4. Bencher CLI をインストールして CI ワークフローに組み込む。
  5. CI ワークフロー内で bencher run サブコマンドを使ってベンチマークを実行し、 python_pytest アダプターを使用する。

Bencher Self-Hosted の手順

  1. Bencher Self-Hosted インスタンスを作成します
  2. Bencher Self-Hosted インスタンスでアカウントを作成します。
  3. API トークンを作成し、それをシークレットとして CI に追加します。
  4. GitHub ActionsGitLab CI/CD など、CI のワークフローを作成します。
  5. CI ワークフローで Bencher CLI をインストール します。CLI のバージョンが Bencher Self-Hosted インスタンスのバージョンと一致していることを確認してください。
  6. 次のサブコマンドを使用して CI ワークフローでベンチマークを実行します: bencher run python_pytest アダプターを使用して、 --host オプション を Bencher Self-Hosted インスタンスの URL に設定します。

🐍 Python Pytest

Python Pytest アダプタ (python_pytest) は、pytest-benchmark の出力を JSON 形式 (つまり --benchmark-json results.json) で期待します。 この JSON 出力はファイルに保存されるため、ファイルパスを指定するために bencher run CLI の --file 引数を使用する必要があります。 latency 測定(つまり ナノ秒 (ns))が収集されます。

Terminal window
bencher run --adapter python_pytest --file results.json "pytest --benchmark-json results.json benchmarks.py"

メトリックには2つのオプションがあります:

  • mean (デフォルト):lower_valueupper_value はそれぞれ平均値 (つまり value) の1標準偏差以下と上になります。
  • medianlower_valueupper_value はそれぞれ中央値 (つまり value) の1四分位範囲以下と上になります。

これは、オプションの --average 引数を使用して bencher run CLI サブコマンドで指定できます。

CIでベンチマークを追跡する

ユーザーに影響を与えるパフォーマンスの回帰が発生したことがありますか? Bencherは継続的なベンチマークでそれを防ぐことができました。

🤖 このドキュメントは OpenAI GPT-4 によって自動的に生成されました。 正確ではない可能性があり、間違いが含まれている可能性があります。 エラーを見つけた場合は、GitHub で問題を開いてください。.