이 기능의 역할
SWE-bench는 언어 모델이 실제 저장소에서 실제 버그를 수정할 수 있는지 테스트합니다. 각 작업은 패치를 적용하고 테스트 스위트를 실행한 후 수정이 작동하는지 확인합니다. 도커로 SWE-bench를 로컬에서 실행할 수 있지만, 머신의 리소스가 제한됩니다. CoreWeave 샌드박스를 사용하면 CoreWeave 인프라에서 평가를 대규모로 실행할 수 있습니다. 직접 관리하지 않고도 수십 또는 수백 개의 샌드박스를 동시에 시작할 수 있습니다. 각 샌드박스는 GitHub Container Registry(GHCR)에 있는 Epoch AI 레지스트리의 사전 구축된 이미지로 시작됩니다. 이미지는 사용자의 머신이 아니라 샌드박스 플랫폼에서 가져오므로 도커나 로컬 구축 단계가 필요 없습니다.설정
평가를 실행하기 전에 다음 단계에 따라 필요한 도구를 설치하고 인증을 설정하세요.-
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에서 이를 변경하세요:
작동 방식
이 섹션에서는 스크립트의 동작 원리를 설명하므로, 사용자가 자신의 평가 워크플로에 맞게 조정할 수 있습니다.Container images
Epoch AI는 GHCR에 사전 구축된 이미지를 호스팅합니다. 각 인스턴스에는 올바른 커밋에서 체크아웃된 저장소, 설치된 의존성, 준비된 테스트 환경이 포함된 자체 이미지가 있습니다. 이미지 이름 형식은 다음과 같습니다:ghcr.io/epoch-research/swe-bench.eval.{arch}.{instance_id.lower()}:latest
스크립트는 인스턴스 ID를 소문자로 변환해 이미지 이름에 사용합니다. arch 값은 테스트 사양의 arch 속성에서 가져오며, 이 속성이 없으면 x86_64를 사용합니다.
샌드박스 플랫폼은 샌드박스를 시작할 때 GHCR에서 각 이미지를 가져옵니다. 자체 CKS 용량을 사용하는 경우에는 클러스터의 노드가 이미지를 가져옵니다. 사용자의 머신에서 ghcr.io에 액세스할 필요가 없으며, 로컬 구축도 필요하지 않습니다.
평가 flow
각 인스턴스는 다음 단계를 거칩니다:
단계 2~5와 8은 원격으로 실행됩니다. 단계 1, 6, 7은 사용자 머신에서 실행됩니다.
병렬 실행
스크립트는ThreadPoolExecutor를 사용하여 인스턴스 워크플로를 동시에 실행합니다. 각 스레드는 하나의 인스턴스를 워크플로를 통해 구동합니다. 한 인스턴스가 테스트하는 동안, 다른 인스턴스는 패치를 적용할 수 있고, 또 다른 인스턴스는 로컬에서 평가하고, 또 다른 인스턴스는 시작할 수 있습니다. 이러한 중첩이 속도의 원천입니다.
워크플로가 as_completed()를 통해 종료하면 결과가 반환됩니다.
정리
이 스크립트는 샌드박스Session을 사용해 샌드박스를 추적합니다. 세션이 종료되면(정상 종료, 예외 발생 또는 Ctrl+C) 세션이 모든 샌드박스를 정리합니다.
출력
결과는{output-dir}/{run-id}/{model-name}/{instance-id}/에 저장됩니다:
보고서 형식
report.json에 "errored": true와 error_message 문자열도 함께 포함됩니다. 이 경우 테스트 결과와 sandbox_id는 생략될 수 있습니다.
이 형식은 표준 SWE-bench 도구와 호환됩니다.
문제 해결
패치 적용 실패
로그에APPLY_PATCH_FAIL이 표시되면 패치 형식이 잘못되었거나, 잘못된 커밋을 대상으로 하거나, whitespace 문제가 있을 수 있습니다. 로컬에서 git apply --check를 실행하여 문제를 확인하세요. 인스턴스 ID가 예측과 일치하는지 확인하세요.
테스트 timeout
일부 테스트 스위트는 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의 이미지를 허용해야 합니다.