분산된 Ray 클러스터에 gVisor 샌드박스 도입
Andrew Sy Kim
Staff Software Engineer, Google
Philipp Moritz
Chief Technology Officer, Anyscale
*이 콘텐츠는 AI 번역 도구를 사용하여 번역되었습니다. 정확성을 기하기 위해 노력하고 있으나, 자동 번역에는 오류나 누락이 포함될 수 있습니다. 정확한 정보는 영문 원본을 참고해 주시기 바랍니다.
강화 학습 (RL) 생태계는 복잡한 학습 후 워크플로를 위한 통합 컴퓨팅 런타임으로 Ray를 빠르게 채택하고 있습니다. Google Cloud 전반에서 고객은 멀티모달 데이터 파이프라인부터 최첨단 RL에 이르는 다양한 워크로드에 Ray를 사용하고 있습니다. 그러나 에이전트 및 추론 모델이 발전함에 따라 중요한 병목 현상이 발생했습니다. 바로 동적 출시, 코드 생성, 멀티턴 도구 상호작용을 안전하게 실행하기 위해 격리된 안전한 샌드박스를 대규모로 조정하는 것입니다. 오늘 Google Cloud는 Anyscale과의 파트너십을 통해 Google에서 개발 중인 에이전트 AI 기술을 활용하여 분산된 Ray 클러스터에 기본 제공되는 고성능 샌드박스를 제공하는 Ray용 실험 라이브러리를 소개하게 되어 기쁩니다.
Ray 기본 요소로서의 샌드박스
Ray는 학습 후 워크로드를 조정하는 데 널리 사용되는 런타임이 되었습니다. veRL, NeMo-RL, SLIME, MILES, SkyRL 등의 프레임워크는 이미 Ray를 사용하여 분산된 학습자, 추론 엔진, 롤아웃 작업자 및 기타 구성요소를 조정하고 있습니다.
Ray 샌드박스를 설계할 때 중요한 목표는 격리된 실행을 위한 별도의 추상화를 도입하는 대신 기존 Ray 프로그래밍 모델에 자연스럽게 맞도록 만드는 것이었습니다. 샌드박스는 Ray가 관리하는 다른 리소스와 동일한 속성을 많이 가지고 있습니다. 즉, 머신에 배치되고, 리소스가 할당되고, 생성 및 소멸되고, 장애로부터 복구되고, 주변 워크로드에 따라 확장되어야 합니다. 이로 인해 각 상위 샌드박스를 Ray Actor를 통해 표현하게 되었습니다.


Ray 스케줄러는 샌드박스를 실행할 노드를 결정하고 해당 CPU 및 메모리 리소스를 예약합니다. 샌드박스 행위자는 수명 주기를 관리하고 gVisor는 해당 노드에서 격리된 실행 환경을 제공합니다.
Ray 2.58부터 프레임워크 작성자와 연구자는 나머지 워크로드에 이미 사용 중인 동일한 Ray API와 패턴을 사용하여 샌드박스 환경을 관리할 수 있습니다. 예를 들면 다음과 같습니다.
이렇게 하면 OCI 호환 이미지에서 gVisor 샌드박스가 생성되고 Ray Actor 핸들이 반환됩니다. exec에 대한 호출은 일반적인 Ray Actor 호출이므로 샌드박스는 클러스터의 어디에나 있을 수 있습니다. 생성된 행위자는 gVisor로 작업을 전달하는 프록시입니다.
샌드박스 API는 에이전트형 워크로드에 필요한 기본 수명 주기를 다룹니다.
-
OCI 컨테이너 이미지에서 환경 만들기
-
CPU 및 메모리 한도 설정
-
환경 변수, 작업 디렉터리, 네트워킹 구성
-
명령어 실행
-
파일 읽기, 쓰기, 업로드, 다운로드
-
샌드박스 상태 검사
-
환경을 종료하거나 삭제합니다.
하위 수준의 사용 사례의 경우 SandboxRuntime은 로컬 gVisor 샌드박스에 대한 직접 액세스를 제공하며 사용자가 OCI 사양을 gVisor에 전달하기 전에 수정할 수 있도록 합니다. 이 API를 사용하여 액터 내부에 로컬 샌드박스 풀을 빌드하는 방법의 예시는 다음과 같습니다.
gVisor를 사용해야 하는 이유
모델에서 생성된 코드를 실행한다는 것은 환경 내의 코드를 신뢰할 수 없는 것으로 취급한다는 의미입니다. Ray 샌드박싱은 Google의 오픈소스 애플리케이션 커널인 gVisor를 초기 샌드박스 런타임으로 사용합니다. gVisor는 사용자 공간에서 Linux 시스템 호출 인터페이스의 상당 부분을 구현하여 워크로드와 호스트 커널 사이에 추가적인 격리 경계를 설정합니다. OCI와 호환되며 표준 컨테이너 이미지로 작동하고 Docker 데몬이나 호스트 Docker 소켓을 샌드박스에 노출할 필요가 없습니다.
이 조합은 에이전트 워크로드에 특히 유용합니다. 환경은 동적으로 생성할 수 있을 만큼 가볍게 유지되면서도 생성된 코드를 일반 컨테이너에서 직접 실행하는 것보다 더 강력한 격리를 제공합니다. 또한 gVisor는 1초 미만의 샌드박스 시작 시간과 샌드박스당 낮은 메모리 오버헤드를 제공하므로 샌드박스를 비교적 세분화된 분산 리소스로 사용할 수 있습니다.
Ray의 향후 버전에서는 Agent Substrate 또는 Kata Containers와 같은 다른 샌드박싱 런타임으로 지원을 확장할 계획입니다.
GKE에서 Ray 샌드박싱 사용해 보기
Ray 샌드박스에 대해 자세히 알아보려면 Ray 문서를 참고하세요. GKE에서 이러한 샌드박싱 기능을 사용해 보려면 Ray 샌드박싱 사용자 가이드로 이동하세요. 의견이나 아이디어가 있으신가요? GitHub 문제에 대한 토론에 참여하여 강화 학습을 위한 Ray의 미래에 대해 공동작업하세요.

