AgentENV: Kimi K3의 강화학습을 구동하는 셀프호스팅 에이전트 샌드박스 런타임

AgentENV 소개

코딩 에이전트나 코드 인터프리터를 운영해 본 팀은 실행 환경에서 같은 딜레마를 만납니다. 모델이 만든 코드를 그대로 돌리려면 격리가 필요한데, 컨테이너는 호스트 커널을 공유하니 격리 경계가 얕고, 가상 머신은 경계가 확실한 대신 부팅이 느려 태스크마다 새 환경을 띄우기엔 비쌉니다. 에이전트 강화학습처럼 환경 수가 수천 개 단위로 올라가면 문제가 한 단계 더 커집니다. 환경 대부분은 모델이 다음 행동을 고민하는 동안 아무것도 하지 않으면서 CPU와 메모리를 붙들고 있고, 롤아웃마다 필요한 이미지가 달라 노드마다 이미지를 미리 받아 두는 비용도 함께 늘어납니다.

AgentENV(줄여서 AENV)는 이 지점을 겨냥한 셀프호스팅 샌드박스 런타임입니다. 샌드박스 하나가 Firecracker 마이크로VM 하나로 뜨기 때문에 격리는 커널 단위로 확보하고, 그 위에 스냅샷 기반 부팅을 얹어 시작과 재개를 50밀리초 안에 끝냅니다. 일시정지는 100밀리초 안에 완료되어, 쉬고 있는 환경이 자원을 붙들고 있을 이유가 사라집니다. 이미지는 overlaybd를 통해 필요한 블록만 그때그때 내려받고 로컬 디스크는 크기가 정해진 캐시로 동작하므로, 전체 이미지 용량이 디스크보다 커도 클러스터 전체에서 빠른 시작 속도가 유지됩니다.

만든 곳은 kvcache-ai이며, 프로젝트는 자신들이 "Kimi K3의 에이전트 강화학습(agentic RL) 학습을 구동한다" 고 밝히고 있습니다. 구현 언어는 Rust이고, 서버와 함께 aenv CLI가 제공되며 HTTP API는 E2B와 호환되도록 설계되어 있습니다. 현재 최신 릴리즈는 v0.1.1입니다.

AgentENV와 기존 샌드박스 방식의 차이

에이전트용 실행 환경을 마련하는 방법은 크게 두 갈래였습니다. 하나는 컨테이너를 태스크마다 띄우는 방식으로, 가볍고 익숙하지만 샌드박스가 호스트 커널을 공유합니다. 다른 하나는 E2B 같은 호스팅 서비스를 쓰는 방식으로, 운영 부담은 줄지만 모델이 만든 코드와 그 코드가 만지는 데이터가 자사 인프라 밖에서 실행됩니다.

AENV는 두 축을 각각 다르게 풉니다. 격리 쪽에서는 샌드박스마다 Firecracker 마이크로VM을 띄워 완전한 Linux 커널 격리를 두고, 가상 머신의 고질적인 약점인 시작 지연은 메모리와 디스크 스냅샷으로 상쇄합니다. 운영 위치 쪽에서는 E2B 호환 HTTP API를 노출해, E2B_API_URL 을 자체 서버로 바꾸기만 하면 기존 E2B Python·TypeScript SDK 코드가 수정 없이 그대로 동작합니다. 이미 E2B로 붙여 둔 애플리케이션을 자체 인프라로 옮길 때 코드를 다시 쓰지 않아도 된다는 뜻입니다.

여기에 강화학습 파이프라인을 겨냥한 기능이 하나 더 있습니다. 실행 중인 환경을 여러 개의 독립 샌드박스로 분기(fork)할 수 있어서, 같은 상태에서 출발하는 병렬 롤아웃을 환경 재구성 없이 만들어 낼 수 있습니다.

AgentENV의 네 가지 설계 목표

프로젝트가 내세우는 네 가지 목표는 각각 다른 병목을 겨냥합니다. 확장은 이미지 로딩 비용을, 유휴 비용은 자원 점유를, 스냅샷과 포크는 환경 재구성 비용을 줄이는 쪽입니다. 마지막 항목은 조금 다른 성격인데, 샌드박스가 오래 돌면서 원본 이미지에서 멀어질수록 성능과 집적도가 떨어지는 문제를 다룹니다. AENV는 ublk로 입출력 성능을 확보하면서 스토리지와 메모리 스냅샷 데이터가 호스트 페이지 캐시를 공유하게 하고, 메모리 벌루닝으로 게스트가 더 쓰지 않는 메모리를 호스트에 돌려주어 높은 오버커밋을 유지합니다.

AgentENV는 누구에게 유용한가

자체 인프라에서 에이전트를 대량으로 굴리는 팀에게 이득이 분명합니다. 코드 인터프리터, 도구 사용 에이전트, 자율 코딩 에이전트처럼 태스크마다 새 리눅스 환경이 필요한 워크로드, 그리고 환경 수천 개를 동시에 관리해야 하는 에이전트 강화학습 파이프라인이 정면 대상입니다. 이미 E2B SDK로 붙여 둔 코드가 있다면 옮기는 비용도 낮습니다.

반대로 요건이 까다로운 편이라 아무 서버에나 올릴 수는 없습니다. 실행 노드마다 Linux 커널 6.8 이상과 /dev/kvm 접근 권한이 필요하고, 설치 스크립트는 Ubuntu 24.04를 전제합니다. 표준 KVM을 쓸 수 없는 환경이라면 별도의 PVM 배포 가이드를 따라야 합니다. 샌드박스를 가끔 한두 개만 띄우는 정도라면 이 정도 인프라를 세울 이유가 크지 않고, 관리형 서비스를 쓰는 편이 간단합니다.

AgentENV의 주요 기능

샌드박스는 Firecracker 마이크로VM 위에서 각자 완전한 Linux 커널 격리를 갖습니다. 일시정지와 재개는 메모리와 디스크 스냅샷으로 처리되어 콜드 스타트가 즉각적이며, 스냅샷 자체도 증분으로 기록됩니다. 디스크 변경이 많은 상황에서도 100밀리초 안에 완료되고, S3 호환 오브젝트 스토리지나 공유 분산 파일시스템에 보관되어 노드가 죽어도 상태가 남습니다.

블록 장치는 overlaybd와 ublk를 조합한 계층 구조로, 이미지를 복사하지 않고 copy-on-write 방식으로 공유합니다. 미리 설정을 끝낸 런타임을 재사용 가능한 템플릿으로 만들어 두는 스냅샷 기반 템플릿 빌더도 함께 제공됩니다. 샌드박스 안에서 돌아가는 서비스에는 리버스 프록시를 통해 HTTP와 WebSocket으로 접근할 수 있습니다.

여러 대로 확장할 때는 게이트웨이와 스케줄러로 이루어진 제어 계층이 붙습니다. 게이트웨이는 클라이언트가 접속하는 HTTP·WebSocket 진입점이고, 스케줄러는 gRPC로 배치, 하트비트, 샌드박스 바인딩을 담당합니다. 다만 정적 디스커버리를 쓰는 배포에서는 스케줄러가 모르는 노드를 하트비트만으로 자동 등록하지 않으므로, 실행 노드를 추가하려면 scheduler.nodes 목록에 적고 스케줄러를 재시작해야 합니다.

AgentENV 설치 및 사용법

Ubuntu 24.04에서는 설치 스크립트가 서버와 CLI를 함께 깔고 systemd 서비스로 등록합니다.

curl -fsSL https://raw.githubusercontent.com/kvcache-ai/AgentENV/main/scripts/install.sh | sudo bash
sudo systemctl start aenv

Docker로 띄우는 경로도 있습니다. 이 경우 서버는 기본적으로 http://127.0.0.1:8000 에서 접근할 수 있습니다.

curl -fsSL https://raw.githubusercontent.com/kvcache-ai/AgentENV/main/scripts/docker-setup.sh | sudo bash
docker pull ghcr.io/kvcache-ai/aenv-server:latest
docker run -d --privileged -v /dev:/dev -p 8000:8000 ghcr.io/kvcache-ai/aenv-server:latest

서버가 뜨면 인증 정보를 설정하고 템플릿을 받아 샌드박스를 실행합니다.

aenv auth
# AENV server URL [http://localhost:8000]: http://127.0.0.1:8000
# API key: dummy

aenv pull ubuntu:22.04 --name ubuntu
aenv start ubuntu            # starts a sandbox and attaches an interactive shell

CLI는 템플릿과 샌드박스를 나누어 다룹니다. aenv start 는 템플릿 UUID와 사람이 읽을 수 있는 이름·별칭을 모두 받고, aenv list 는 TTY에서는 표를, 파이프로 넘기면 JSON을 출력합니다.

aenv start ubuntu --detach              # start, print sandbox ID, don't attach
aenv cn <sandbox-id>                    # reattach a shell
aenv exec <sandbox-id> ls -la /         # one-shot command
aenv pause   <sandbox-id>
aenv resume  <sandbox-id>
aenv timeout <sandbox-id> 600           # extend TTL to 600 s from now
aenv delete  <sandbox-id>               # alias: aenv rm

AgentENV 운영 시 주의할 점

저장소는 눈에 띄는 경고를 하나 달아 두고 있습니다. AgentENV는 현재 인가(authorization)를 지원하지 않습니다. API를 공개 네트워크에 노출하지 말고, 신뢰할 수 있는 네트워크 안에서만 돌리거나 적절한 네트워크 통제를 갖춘 인가 프록시 뒤에 두라는 안내입니다. 다중 노드 배포 문서에서도 게이트웨이와 스케줄러를 사설 주소나 신뢰 가능한 네트워크에 두라고 반복해 강조하고 있으므로, 도입을 검토한다면 이 부분을 먼저 설계해야 합니다.

보안 취약점을 발견했을 때의 절차는 SECURITY.md에 정리되어 있으며, 공개 이슈로 올리지 말고 비공개로 알리도록 안내하고 있습니다.

AgentENV의 라이선스

AgentENV는 MIT 라이선스로 공개되어 있어 개인 및 상업적 목적으로 자유롭게 사용할 수 있습니다.

:books: AgentENV 공식 문서 사이트

:github: AgentENV 프로젝트 GitHub 저장소

더 읽어보기




이 글은 GPT 모델로 정리한 초안을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 댓글로 알려주시기를 부탁드립니다. :hugs:

이 도구를 직접 설치해 사용해보셨다면, :pytorch:파이토치 한국 사용자 모임:south_korea: 회원들을 위해 경험이나 팁을 댓글로 남겨주세요! :folded_hands: