병렬 클로드 에이전트 팀을 활용한 C 컴파일러 구축
TL;DR
안트로픽 연구원 니콜라스 카를리니는 16개의 병렬 클로드 오퍼스 4.6 인스턴스를 활용해 러스트 기반의 C 컴파일러를 처음부터 자율적으로 구축하는 능력을 입증했다. 결과적으로 생성된 10만 줄 규모의 컴파일러는 x86, ARM, RISC-V 아키텍처에서 Linux 6.9를 빌드할 수 있으며, 자율 에이전트 팀이 지속적인 인간 개입 없이 거대하고 장시간에 걸친 기술 프로젝트를 수행할 수 있음을 입증한다.
에이전트 팀 아키텍처
인간 운영자의 지속적인 피드백이 필요 없도록 하기 위해, 카를리니는 클로드를 지속적인 루프에 배치하는 하드웨어를 개발했다. 한 작업이 완료되면 에이전트는 즉시 다음 작업을 시작하며, 문제를 작은 단위로 나누고 자신의 진행 상황을 추적하도록 지시하는 프롬프트에 따라 행동한다.
병렬 실행과 동기화
여러 에이전트를 병렬로 실행하면 여러 문제를 동시에 디버깅하고 전문화된 역할을 활용할 수 있다. 기술적 구현은 최소한의 git 저장소와 도커 컨테이너를 사용한다.
- 인프라스트럭처: 각 에이전트는 저장소가 마운트된 고유의 도커 컨테이너에서 작동한다. 에이전트는 로컬 복사본을 클론하고 작업을 수행한 후 업스트림 저장소에 변경 사항을 푸시한다.
- 동기화: 중복 작업을 방지하기 위해 에이전트는
current_tasks/디렉터리에 텍스트 파일을 써서 간단한 잠금 메커니즘을 사용한다. 두 에이전트가 동일한 작업을 요청하면 git 동기화가 두 번째 에이전트가 다른 작업을 선택하도록 강제한다. - 워크플로우: 에이전트는 업스트림에서 풀하고 다른 에이전트의 변경 사항을 병합한 후 업데이트를 푸시하고 잠금을 제거한다. 클로드는 발생할 수 있는 병합 충돌을 해결하도록 지시된다.
자율적 진전을 위한 공학적 설계
성공적인 자율 개발을 위해서는 모델이 스스로 방향을 잡고 인간의 지도 없이 자신의 작업을 검증할 수 있는 환경이 필요하다.
고품질 검증
클로드는 주어진 문제를 해결하므로, 작업 검증기는 거의 완벽해야 하며, 모델이 잘못된 문제를 해결하는 것을 방지해야 한다. 카를리니는 지속적 통합(CI) 파이프라인과 엄격한 강제 조건을 도입하여 새로운 기능이 기존 기능을 깨뜨리지 않도록 했다.
LLM 제약에 최적화
이 하드웨어는 특정 언어 모델의 제약을 고려해 설계되었다.
- 컨텍스트 창 오염: 토큰 낭비를 방지하기 위해 하드웨어는 최소한의 출력만 표시하고 상세한 정보는 파일에 기록한다. 로그는
grep을 통해 오류를 쉽게 검색할 수 있도록 형식화되어 있다. - 시간 무지: LLM은 시간을 추적할 수 없으므로, 하드웨어는
--fast옵션을 제공하여 테스트의 결정론적 1% 또는 10% 샘플을 빠르게 실행하여 전체 테스트 세트를 수시간 동안 실행하지 않고도 회귀를 신속히 식별할 수 있도록 한다.
복잡한 작업으로의 확장
독립적인 테스트는 병렬화가 쉽지만, Linux 커널 컴파일과 같은 단일 작업은 에이전트들이 서로의 작업을 덮어쓰는 경향이 있다. 이를 해결하기 위해 카를리니는 GCC를 "온라인의 잘 알려진 좋은 컴파일러 오라클"로 사용했다.
대부분의 커널을 GCC로 무작위로 컴파일하고, 일부만 클로드의 컴파일러로 컴파일함으로써 에이전트들은 특정 파일의 버그를 병렬로 고칠 수 있었다. 이 과정은 델타 디버깅 기법을 사용하여 함께 작동할 때 실패하지만 개별적으로는 작동하는 파일을 식별하는 방식으로 더욱 정교화되었다.
결과 컴파일러의 능력과 한계
클로드 오퍼스 4.6을 사용해 프로젝트는 20억 개의 입력 토큰과 1억 4천만 개의 출력 토큰을 소비했으며, 두 주 동안 약 $20,000의 비용이 들었다.
기술적 성취
- 범위: 러스트 표준 라이브러리만 사용한 클린룸 구현.
- 호환성: x86, ARM, RISC-V에서 부팅 가능한 Linux 6.9를 빌드할 수 있다. 또한 QEMU, FFmpeg, SQLite, Postgres, Redis를 컴파일할 수 있다.
- 벤치마크: 대부분의 컴파일러 테스트 세트에서 99%의 성공률을 달성했으며, GCC 토르처 테스트 세트도 통과했고, Doom을 성공적으로 컴파일하고 실행했다.
현재의 한계
- 부팅 프로세스: 리얼 모드에서 Linux를 부팅하기 위해 필요한 16비트 x86 컴파일러가 부족하며, 현재 이 특정 단계에서는 GCC를 호출하고 있다.
- 툴체인: 자체적으로 완전히 기능하는 어셈블러와 링커가 없으며, 데모 영상에서는 GCC에 의존하고 있다.
- 효율성: 생성된 코드는 모든 최적화가 비활성화된 GCC 코드보다 효율성이 낮다.
- 코드 품질: 러스트 소스 코드는 합리적이지만 전문가 수준의 러스트 프로그래머의 수준에는 미치지 못한다.
자율 개발에 대한 함의
이 실험은 LLM이 탭 완성 도구나 페어 프로그래밍 도구에서 자율적인 프로젝트 실행자로 전환되는 전환점을 의미한다. 생산성 잠재력은 막대하지만, 카를리니는 인간이 직접 검증하지 않은 자율적으로 생성된 소프트웨어의 배포에 대해 심각한 안전 우려를 제기하며, 펜테스트 전문가로서의 경험을 이유로 조심스러운 태도를 취해야 한다고 강조한다.
Sources
관련
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트
- Dispatch