plasma-umass/scalene
Scalene: a high-performance, high-precision CPU, GPU, and memory profiler for Python with AI-powered optimization proposals
Scalene – Python向け高速・行レベルのCPU/GPU/メモリプロファイラ
概要 – Scaleneは、以下の3つの要素を同時に測定するネイティブコード対応のPythonプロファイラです:
- CPU時間(純粋なPythonの処理と、ネイティブライブラリの呼び出しおよびシステムI/Oを分離)
- GPU時間(NVIDIA GPU向け)
- メモリ使用量(行ごとの割り当て、コピー量、および潜在的なメモリリークを含む)
サンプリング方式を採用しているため、オーバーヘッドはわずか10〜20%程度に抑えられており、コードに計測用のコードを埋め込むことなく、実際のワークロードをプロファイリングできます。
重要性 – ほとんどのPythonプロファイラは、以下のいずれかの問題を抱えています:
- すべての行に計測コードを挿入する(低速)
- 関数レベルのデータしか提供しない
- C拡張やGPUにどれだけの時間が費やされているかを示せない Scaleneは、CPU、GPU、メモリにわたる行単位の詳細な洞察を提供し、Pythonとネイティブのスタックを統合した視覚的なフレームチャートを表示します。これにより、開発者は実際に変更可能なコードに集中できます。
AIによる提案 – プロファイリング結果の生成後、ScaleneはLLM(OpenAI, Azure, Bedrock, Ollamaなど)を呼び出し、ハイライトされた行や領域に対して具体的な最適化案を提示できます。Web UIで稲妻(⚡)または爆発(💥)のアイコンをクリックするだけで、モデルが短い提案を返し、クリップボードにコピーできます。
使用方法
pip install -U scaleneまたは Conda でインストールします。- コマンドラインから実行:
scalene run my_script.py(scalene-profile.jsonが生成されます)。 - 結果はブラウザ (
scalene view) またはターミナル (scalene view --cli) で確認できます。 - オプション:VS Code拡張機能を使用して、エディタ内でプロファイリングを開始し、インタラクティブなUIを表示できます。
- プログラミングによる埋め込み (
scalene_profiler.start()/stop()) や、特定の関数への@profileデコレータの使用も可能です。 - 設定はYAMLファイル (
-c config.yaml) で指定できます。
主な機能 (README記載)
| 機能 | 内容 |
|---|---|
| 行レベルのCPUプロファイリング | 行ごとの正確なPython対ネイティブの時間、およびシステムI/O時間。 |
| GPUプロファイリング | NVIDIA GPUの時間(存在する場合)をレポート。 |
| メモリプロファイリング | 行ごとの割り当て、コピー量、リーク検出、およびPython対ネイティブのメモリ分割。 |
| Async/await の洞察 | コルーチンが中断される行にウォールクロックの待機時間を割り当て、並行性統計を表示。 |
| 統合されたPython + Cスタック | PythonのフレームとデマングルされたC/C++のフレームを組み合わせたフレームチャートとタイムライン。 |
| プロファイル削減 | --reduced-profile により、設定した閾値を超える行のみを出力。 |
| マルチプロセッシング & スレッド対応 | multiprocessing モジュールおよびPythonスレッドに対応。 |
| Free-threaded Python (3.13t/3.14t) 対応 | 次世代のfree-threadedインタプリタでの完全なCPU + メモリプロファイリング。 |
| オフラインWeb UI | すべてのアセットがバンドルされています。--standalone で単一の自己完結型HTMLファイルを作成可能。 |
| AI最適化 | さまざまなプロバイダーからのLLM提案をワンクリックで生成。 |
典型的なワークフロー
scalene run my_app.py– プロファイリングを実行。scalene view– インタラクティブなGUIを開く。- ボトルネックとなる行、メモリリークの候補、またはGPUのボトルネックを調査。
- 行上のAIアイコンをクリックして、GPT-4(またはその他のモデル)の提案を取得。
- 提案された変更を適用し、再度プロファイリングして改善を繰り返す。
推奨されるユーザー – データサイエンスのノートブック、Webサービス、科学シミュレーション、または純粋なPython、C拡張(NumPy, PyTorchなど)、およびオプションのGPU処理が混在するコードに対して、高解像度のパフォーマンスデータが必要なPython開発者。AI提案機能は、プロファイラを離れることなく迅速なヒントを得たいチームに特に便利です。
リンク
- PyPI: https://pypi.org/project/scalene/
- Conda-forge: https://anaconda.org/conda-forge/scalene
- VS Code extension: https://marketplace.visualstudio.com/items?itemName=EmeryBerger.scalene
- Web UI demo: https://scalene-gui.github.io/scalene-gui/
- Talk (PyCon 2021): https://youtu.be/5iEf-_7mM1k
関連
- Dispatch
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト