> ## Documentation Index
> Fetch the complete documentation index at: https://docs.coreweave.com/llms.txt
> Use this file to discover all available pages before exploring further.

# SWE-bench

> Run SWE-bench evaluations using CoreWeave sandboxes.

CoreWeave のサンドボックスを使用して、SWE-bench の評価を並列実行します。このガイドは、言語モデルによるコード修正のパフォーマンスを大規模に評価したい機械学習の実務者や研究者を対象としています。読み終える頃には、CoreWeave の多数のサンドボックスで SWE-bench の評価を同時に実行し、分析用の結果をローカルに書き出せる環境が整います。

<h2 id="what-this-does">
  この機能
</h2>

[SWE-bench](https://www.swebench.com/) は、言語モデルが実際のリポジトリ内の実際のバグを修正できるかどうかをテストします。各タスクはパッチを適用し、テストスイートを実行して、修正が機能するかどうかを確認します。

Docker を使用してローカルで SWE-bench を実行できますが、マシンのリソースによって制限されます。CoreWeave のサンドボックスを使用すると、CoreWeave インフラストラクチャー上で大規模に評価を実行できます。自分で管理することなく、数十または数百のサンドボックスを同時に起動できます。スクリプトは GHCR 上の Epoch AI のレジストリからビルド済みのイメージをプルするので、ローカルでの Docker ビルド手順は必要ありません。

<h2 id="setup">
  セットアップ
</h2>

評価を実行する前に、以下の手順に従って必要なツールのインストールと認証の設定を完了してください。

1. Python SDK と評価に必要な依存関係をインストールします。

   ```bash theme={"system"}
   uv pip install cwsandbox swebench datasets
   ```

2. 評価スクリプトのサンプルが含まれるリポジトリをクローンします。

   ```bash theme={"system"}
   git clone https://github.com/coreweave/cwsandbox-client.git
   cd cwsandbox-client
   ```

3. `CWSANDBOX_API_KEY` に [CoreWeave API アクセストークン](/security/authn-authz/manage-api-access-tokens)を設定します。`[API-ACCESS-TOKEN]` は、ご自身のトークンに置き換えてください。

   ```bash theme={"system"}
   export CWSANDBOX_API_KEY="[API-ACCESS-TOKEN]"
   ```

評価スクリプトは、デフォルトで CoreWeave の認証を使用します。Forge の APIキーを使用する場合は、[はじめに](/ja/products/sandboxes/get-started)に記載されている明示的な認証のセットアップ手順に従い、取得した `auth` の値を `examples/swebench/run_evaluation.py` 内の `SandboxDefaults(...)` に渡してください。

<h2 id="quick-start">
  クイックスタート
</h2>

規模を拡大する前に、単一インスタンスの run から始めて、環境、認証情報、GHCR へのネットワークアクセスがすべて正常に機能することを確認してください。`gold` オプションは、データセット内の正しいことが確認済みの修正を使用します。

```bash theme={"system"}
uv run python examples/swebench/run_evaluation.py \
    --predictions-path gold \
    --instance-ids astropy__astropy-12907 \
    --run-id test
```

この run は成功します。これにより、サンドボックスがイメージをプルし、パッチを適用して、テストスイートをエンドツーエンドで実行できることを確認できます。

<h3 id="run-in-parallel">
  並列で実行
</h3>

複数のインスタンスを同時に実行します。

```bash theme={"system"}
uv run python examples/swebench/run_evaluation.py \
    --predictions-path gold \
    --instance-ids \
        astropy__astropy-12907 \
        django__django-11039 \
        django__django-11099 \
        django__django-11283 \
        matplotlib__matplotlib-23476 \
        scikit-learn__scikit-learn-13142 \
        sympy__sympy-13031 \
        sympy__sympy-13647 \
    --run-id parallel-test \
    --max-workers 8
```

このコマンドは 8 個のサンドボックスを起動し、それらを並列で実行します。すべてがパスするのは、gold パッチが正しい修正であるためです。

<h3 id="evaluate-model-predictions">
  モデルの予測を評価する
</h3>

カスタムモデル出力をテストするには:

```bash theme={"system"}
uv run python examples/swebench/run_evaluation.py \
    --predictions-path predictions.json \
    --instance-ids django__django-11039 scikit-learn__scikit-learn-13142 \
    --run-id eval-run-1 \
    --max-workers 10
```

予測ファイルはインスタンス ID をパッチに対応付けます。

```json theme={"system"}
[
  {
    "instance_id": "django__django-11039",
    "model_name_or_path": "gpt-4",
    "model_patch": "diff --git a/..."
  }
]
```

<h2 id="options">
  オプション
</h2>

| オプション | デフォルト | 説明 |
| - | - | - |
| `--predictions-path` | 必須 | 予測 JSON へのパス、または gold パッチの場合は `gold` |
| `--instance-ids` | 必須 | スペース区切りのインスタンス ID |
| `--run-id` | 必須 | この run の識別子 |
| `--max-workers` | 10 | 最大並列サンドボックス数 |
| `--timeout` | 1800 | インスタンスごとのタイムアウト (秒単位、30 分) |
| `--output-dir` | `logs/swebench` | ログと report を書き込む場所 |
| `--dataset` | `princeton-nlp/SWE-bench_Lite` | Hugging Face データセット名 |
| `--force` | false | report.json が存在する場合でもインスタンスを再実行する |

<h3 id="adjust-resources">
  リソースを調整する
</h3>

デフォルトはサンドボックスあたり CPU 2 個と 4Gi のメモリです。`run_evaluation.py` でこれを変更します：

```python theme={"system"}
defaults = SandboxDefaults(
    tags=(f"swebench-{run_id}",),
    resources={"cpu": "4", "memory": "8Gi"},
)
```

<h2 id="how-it-works">
  仕組み
</h2>

このセクションでは、スクリプトの背後にある仕組みを説明します。これにより、ご自身の評価ワークフローに適応させることができます。

<h3 id="container-images">
  コンテナーイメージ
</h3>

Epoch AI は、ビルド済みのイメージを GHCR でホストしています。インスタンスごとに専用のイメージが用意されており、リポジトリは該当するコミットでチェックアウト済み、依存関係もインストール済みで、テスト環境もすぐに使える状態になっています。

イメージの形式: `ghcr.io/epoch-research/swe-bench.eval.x86_64.{instance_id}:latest`

サンドボックスはこれらのイメージを GHCR から直接プルするため、ローカルでビルドする必要はありません。

<h3 id="evaluation-flow">
  評価フロー
</h3>

各インスタンスは次のステップで処理されます。

| ステップ | 場所 | 処理内容 |
| - | - | - |
| 1. データセットを読み込む | ローカル | Hugging Face からインスタンスのメタデータを取得 |
| 2. サンドボックスを作成 | サンドボックス | インスタンスのイメージでサンドボックスを起動 |
| 3. パッチを書き込む | サンドボックス | パッチを `/tmp/patch.diff` に書き込み |
| 4. パッチを適用 | サンドボックス | `git apply` を実行 (必要に応じて `patch` にフォールバック) |
| 5. テストを実行 | サンドボックス | `/root/eval.sh` を実行 |
| 6. 結果を採点 | ローカル | `swebench.harness.grading` で出力を解析 |
| 7. report を書き出す | ローカル | 結果を `logs/swebench/` に保存 |
| 8. クリーンアップ | サンドボックス | サンドボックスを停止 |

ステップ 2～5 と 8 はリモートで実行され、ステップ 1、6、7 はローカルマシン上で実行されます。

<h3 id="parallel-execution">
  並列実行
</h3>

このスクリプトは `ThreadPoolExecutor` を使用してインスタンスのワークフローを並行して実行します。各スレッドが 1 つのインスタンスを担当し、そのワークフローを進めます。あるインスタンスがテストを実行している間に、別のインスタンスはパッチの適用、さらに別のインスタンスはローカルでの採点や起動を進められます。このように処理を同時に進めることで、高速化を実現します。

結果は、ワークフローが完了するたびに `as_completed()` を通じて返されます。

<h3 id="cleanup">
  クリーンアップ
</h3>

スクリプトはサンドボックス `Session` を使用してサンドボックスをトラッキングします。セッションが終了すると (正常終了、例外、または `Ctrl+C` の場合)、セッションはすべてのサンドボックスをクリーンアップします。

```python theme={"system"}
with cwsandbox.Session(defaults=defaults) as session:
    with ThreadPoolExecutor(max_workers=max_workers) as executor:
        # セッションの終了時に、ここで作成されたサンドボックスはクリーンアップされます
```

<h2 id="output">
  出力
</h2>

結果は `{output-dir}/{run-id}/{model-name}/{instance-id}/` に保存されます：

| ファイル | 内容 |
| - | - |
| `report.json` | 解決済みステータス、サンドボックス ID、期間 |
| `test_output.txt` | 完全なテスト出力 |
| `patch.diff` | 適用されたパッチ |

<h3 id="report-format">
  report の形式
</h3>

```json theme={"system"}
{
  "instance_id": {
    "resolved": true,
    "tests_status": {
      "PASSED": ["test_foo", "test_bar"],
      "FAILED": []
    }
  },
  "sandbox_id": "sb-abc123",
  "duration_seconds": 45.2
}
```

この形式は、標準的な SWE-bench ツールと互換性があります。

<h2 id="troubleshooting">
  トラブルシューティング
</h2>

<h3 id="patch-application-fails">
  パッチの適用に失敗する
</h3>

`APPLY_PATCH_FAIL` がログに表示される場合、パッチが不正な形式であるか、誤ったコミットを対象としているか、空白の問題がある可能性があります。ローカルで `git apply --check` を実行して問題を確認してください。インスタンス ID が予測と一致していることを確認してください。

<h3 id="test-timeouts">
  テストのタイムアウト
</h3>

テストスイートによっては、30分以上かかる場合があります。モデルが生成したコードに無限ループが含まれる可能性もあります。必要に応じて `--timeout` を増やすか、テスト出力を確認してどこで停止しているかを確認してください。

<h3 id="image-pull-errors">
  イメージプルエラー
</h3>

イメージプルエラーでコンテナーが起動しない場合、原因としては、インスタンス ID が Epoch AI のレジストリに存在しないか、ネットワークの問題で `ghcr.io` に接続できないことが考えられます。インスタンス ID が SWE-bench データセットに含まれていることを確認してください。

<h2 id="see-also">
  関連項目
</h2>

* [コマンド実行ガイド](/ja/products/sandboxes/client/guides/execution): `exec()` のパターンについて詳しく説明します。
* [クリーンアップのパターン](/ja/products/sandboxes/client/guides/cleanup-patterns): サンドボックスのライフサイクルを管理する方法について説明します。
