> ## 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

> CoreWeave 샌드박스를 사용하여 SWE-bench 평가를 실행하세요.

CoreWeave 샌드박스를 사용하여 SWE-bench 평가를 병렬로 실행하세요. 이 가이드는 대규모로 언어 모델의 코드 수정 성능을 평가하려는 ML 실무자와 연구자를 위한 것입니다. 이 가이드를 마치면, 여러 CoreWeave 샌드박스에서 SWE-bench 평가를 동시에 실행하고 결과를 로컬에 저장하여 분석할 수 있는 작동하는 설정을 갖추게 됩니다.

<h2 id="what-this-does">
  이 기능의 역할
</h2>

[SWE-bench](https://www.swebench.com/)는 언어 모델이 실제 저장소에서 실제 버그를 수정할 수 있는지 테스트합니다. 각 작업은 패치를 적용하고 테스트 스위트를 실행한 후 수정이 작동하는지 확인합니다.

도커로 SWE-bench를 로컬에서 실행할 수 있지만, 머신의 리소스가 제한됩니다. CoreWeave 샌드박스를 사용하면 CoreWeave infrastructure에서 평가를 대규모로 실행할 수 있습니다. 직접 관리하지 않고도 수십 또는 수백 개의 샌드박스를 동시에 시작할 수 있습니다. 스크립트는 GHCR의 Epoch AI 레지스트리에서 사전 구축된 이미지를 가져오므로 로컬 도커 구축 단계가 필요 없습니다.

<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 키를 사용하려면 [시작하기](/ko/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은 통과하여, 샌드박스가 이미지를 pull하고 패치를 apply하며, 테스트 스위트를 end to end로 실행할 수 있음을 확인합니다.

<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` | Required | 예측 JSON의 경로, 또는 gold 패치를 위한 `gold` |
| `--instance-ids` | Required | 공백으로 구분된 인스턴스 ID |
| `--run-id` | Required | 이 run의 식별자 |
| `--max-workers` | 10 | 최대 병렬 샌드박스 |
| `--timeout` | 1800 | 인스턴스당 timeout(초) (30분) |
| `--output-dir` | `logs/swebench` | 로그 및 리포트를 작성할 위치 |
| `--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">
  Container images
</h3>

Epoch AI는 GHCR에 사전 구축된 이미지를 호스팅합니다. 각 인스턴스에는 올바른 커밋에서 체크아웃된 저장소, 설치된 의존성, 준비된 테스트 환경이 포함된 자체 이미지가 있습니다.

이미지 형식: `ghcr.io/epoch-research/swe-bench.eval.x86_64.{instance_id}:latest`

샌드박스는 GHCR에서 직접 이를 가져옵니다. 로컬 구축은 필요하지 않습니다.

<h3 id="evaluation-flow">
  평가 flow
</h3>

각 인스턴스는 다음 단계를 거칩니다:

| 단계 | 위치 | 발생하는 일 |
| - | - | - |
| 1. 데이터셋 로드 | Local | Hugging Face에서 인스턴스 메타데이터 가져오기 |
| 2. 샌드박스 생성 | 샌드박스 | 인스턴스의 이미지로 샌드박스 시작 |
| 3. 패치 작성 | 샌드박스 | `/tmp/patch.diff`에 패치 작성 |
| 4. 패치 적용 | 샌드박스 | `git apply` 실행 (필요 시 `patch`로 대체) |
| 5. 테스트 실행 | 샌드박스 | `/root/eval.sh` 실행 |
| 6. 결과 채점 | Local | `swebench.harness.grading`으로 출력 파싱 |
| 7. 보고서 작성 | Local | 결과를 `logs/swebench/`에 저장 |
| 8. 정리 | 샌드박스 | 샌드박스 중지 |

단계 2\~5와 8은 원격으로 실행됩니다. 단계 1, 6, 7은 사용자 머신에서 실행됩니다.

<h3 id="parallel-execution">
  병렬 실행
</h3>

스크립트는 `ThreadPoolExecutor`를 사용하여 인스턴스 워크플로를 동시에 실행합니다. 각 스레드는 하나의 인스턴스를 워크플로를 통해 구동합니다. 한 인스턴스가 테스트하는 동안, 다른 인스턴스는 패치를 적용할 수 있고, 또 다른 인스턴스는 로컬에서 평가하고, 또 다른 인스턴스는 시작할 수 있습니다. 이러한 중첩이 속도의 원천입니다.

워크플로가 `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">
  보고서 형식
</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`이 표시되면 패치 형식이 잘못되었거나, 잘못된 커밋을 대상으로 하거나, whitespace 문제가 있을 수 있습니다. 로컬에서 `git apply --check`를 실행하여 문제를 확인하세요. 인스턴스 ID가 예측과 일치하는지 확인하세요.

<h3 id="test-timeouts">
  테스트 timeout
</h3>

일부 테스트 스위트는 30분 이상 걸립니다. 모델이 생성한 코드에 무한 루프가 있을 수도 있습니다. 필요한 경우 `--timeout`을 늘리거나 테스트 출력을 확인하여 어디에서 멈췄는지 파악하세요.

<h3 id="image-pull-errors">
  이미지 가져오기 오류
</h3>

이미지 가져오기 오류로 컨테이너가 시작되지 않으면 인스턴스 ID가 Epoch AI의 레지스트리에 없거나 네트워크 문제로 `ghcr.io`에 연결할 수 없는 것입니다. 인스턴스 ID가 SWE-bench 데이터셋에 있는지 확인하세요.

<h2 id="see-also">
  참고
</h2>

* [명령 실행 가이드](/ko/products/sandboxes/client/guides/execution): `exec()` 패턴에 대한 세부 정보.
* [정리 패턴](/ko/products/sandboxes/client/guides/cleanup-patterns): 샌드박스 라이프사이클 관리.
