この機能
SWE-bench は、言語モデルが実際のリポジトリ内の実際のバグを修正できるかどうかをテストします。各タスクはパッチを適用し、テストスイートを実行して、修正が機能するかどうかを確認します。 Docker を使用してローカルで SWE-bench を実行できますが、マシンのリソースによって制限されます。CoreWeave のサンドボックスを使用すると、CoreWeave インフラストラクチャー上で大規模に評価を実行できます。自分で管理することなく、数十または数百のサンドボックスを同時に起動できます。各サンドボックスは、GitHub Container Registry (GHCR) 上の Epoch AI のレジストリにあるビルド済みのイメージから起動します。イメージをプルするのはお使いのマシンではなくサンドボックスプラットフォームなので、Docker もローカルでのビルド手順も必要ありません。セットアップ
評価を実行する前に、次の手順に従って必要なツールをインストールし、認証を設定します。-
Python 仮想環境を準備し、SDK と評価用の依存関係をインストールします。
-
サンプルの評価スクリプトを含むリポジトリをクローンします。
- Forge API キー
- CoreWeave API アクセストークン
W&B インテグレーションをインストールし、Forge APIキーをエクスポートします。
examples/swebench/run_evaluation.py で、cwsandbox からのインポートに AuthStrategy を追加し、既存の SandboxDefaults(...) 呼び出しに auth=AuthStrategy.WANDB を追加します。これにより、CWSANDBOX_API_KEY も設定されている場合でも、評価セッション内のすべてのサンドボックスで W&B 認証が使用されます。SandboxDefaults(...) 呼び出しに placement_mode="cks" を追加します。
クイックスタート
規模を拡大する前に、単一インスタンスの run から始めて、環境と認証情報が正常に機能すること、およびサンドボックスが GHCR のイメージから起動できることを確認してください。gold オプションは、データセット内の正しいことが確認済みの修正を使用します。
並列で実行
複数のインスタンスを同時に実行します。モデルの予測を評価する
カスタムモデル出力をテストするには:オプション
リソースを調整する
デフォルトはサンドボックスあたり CPU 2 個と 4Gi のメモリです。run_evaluation.py でこれを変更します:
仕組み
このセクションでは、スクリプトの背後にある仕組みを説明します。これにより、ご自身の評価ワークフローに適応させることができます。コンテナーイメージ
Epoch AI は、ビルド済みのイメージを GHCR でホストしています。インスタンスごとに専用のイメージが用意されており、リポジトリは該当するコミットでチェックアウト済み、依存関係もインストール済みで、テスト環境もすぐに使える状態になっています。 イメージ名の形式は次のとおりです:ghcr.io/epoch-research/swe-bench.eval.{arch}.{instance_id.lower()}:latest
スクリプトは、インスタンス ID を小文字に変換してイメージ名に使用します。arch はテスト仕様の arch 属性から取得します。この属性がない場合、スクリプトは x86_64 を使用します。
サンドボックスプラットフォームは、サンドボックスの起動時に各イメージを GHCR からプルします。独自の CKS キャパシティを使用する場合は、クラスターのノードがプルを実行します。お使いのマシンから ghcr.io にアクセスする必要はなく、ローカルでビルドする必要もありません。
評価フロー
各インスタンスは次のステップで処理されます。
ステップ 2~5 と 8 はリモートで実行され、ステップ 1、6、7 はローカルマシン上で実行されます。
並列実行
このスクリプトはThreadPoolExecutor を使用してインスタンスのワークフローを並行して実行します。各スレッドが 1 つのインスタンスを担当し、そのワークフローを進めます。あるインスタンスがテストを実行している間に、別のインスタンスはパッチの適用、さらに別のインスタンスはローカルでの採点や起動を進められます。このように処理を同時に進めることで、高速化を実現します。
結果は、ワークフローが完了するたびに as_completed() を通じて返されます。
クリーンアップ
スクリプトはサンドボックスSession を使用してサンドボックスをトラッキングします。セッションが終了すると (正常終了、例外、または Ctrl+C の場合)、セッションはすべてのサンドボックスをクリーンアップします。
出力
結果は{output-dir}/{run-id}/{model-name}/{instance-id}/ に保存されます:
report の形式
report.json には "errored": true と error_message 文字列も含まれます。この場合、テスト結果と sandbox_id は省略されることがあります。
この形式は、標準的な SWE-bench ツールと互換性があります。
トラブルシューティング
パッチの適用に失敗する
APPLY_PATCH_FAIL がログに表示される場合、パッチが不正な形式であるか、誤ったコミットを対象としているか、空白の問題がある可能性があります。ローカルで git apply --check を実行して問題を確認してください。インスタンス ID が予測と一致していることを確認してください。
テストのタイムアウト
テストスイートによっては、30分以上かかる場合があります。モデルが生成したコードに無限ループが含まれる可能性もあります。必要に応じて--timeout を増やすか、テスト出力を確認してどこで停止しているかを確認してください。
イメージプルエラー
サンドボックスプラットフォームがインスタンスのイメージをプルできない場合、そのサンドボックスは起動に失敗します。スクリプトは[astropy__astropy-12907] Error: ... のようにインスタンス ID とともにエラーをログし、そのインスタンスの report.json の error_message フィールドにも記録します。プルはお使いのマシンではなく CoreWeave のインフラストラクチャー上で実行されるため、ローカル環境から ghcr.io へのネットワークアクセスが原因になることはありません。エラーメッセージを確認したうえで、以下の考えられる原因を調べてください。
- イメージが見つからない: Epoch AI がそのインスタンス ID のイメージをパブリッシュしているかを検証してください。
--datasetで指定したデータセットに含まれていないインスタンス ID は、サンドボックスまで到達しません。この場合、スクリプトはInstance IDs not found in datasetをログし、そのインスタンスをスキップします。 - 独自の CKS キャパシティ:
placement_mode="cks"を設定している場合、イメージをプルするのはクラスターのノードです。そのため、ノードにはghcr.ioへのアウトバウンドアクセスが必要です。また、ランナーのサンドボックスポリシーでghcr.io/epoch-researchのイメージを許可しておく必要もあります。
関連項目
- コマンド実行ガイド:
exec()のパターンについて詳しく説明します。 - クリーンアップのパターン: サンドボックスのライフサイクルを管理する方法について説明します。