모바일 GUI 에이전트 연구에서 가장 성가신 문제 하나는 “실험 환경”이다. Android 에뮬레이터를 띄우려면 자원을 많이 먹고, 한 대의 머신에서 동시에 여러 에이전트를 돌리기 어렵다. 평가도 골칫거리인데, 에이전트가 앱을 올바르게 조작했는지 판정하려면 VLM 기반 judge를 돌려야 하니 비용과 비결정성이 따라온다.
MobileGym(CAS, PKU, CUHK)은 이 두 가지 병목을 동시에 해결하려는 시뮬레이션 플랫폼이다. 브라우저에서 돌아가는 가벼운 환경 위에 구조화된 상태 모델을 얹고, 상태를 JSON으로 직렬화해 저장·복원·포크까지 가능하게 만들었다. 단일 서버에서 수백 개 인스턴스를 병렬로 띄울 수 있고, 태스크 성공 여부를 결정론적으로 판정한다.
논문의 핵심 내용을 Q&A로 정리해봤다.
기존 모바일 에이전트 환경은 뭐가 문제였나요?
Android 에뮬레이터 기반 환경(AndroidWorld, AppAgent 등)은 무겁다. 인스턴스 하나당 수 GB의 메모리를 요구하고, 부팅에도 수십 초가 걸린다. GPU 자원은 또 따로 필요하고요. 연구자가 하이퍼파라미터 하나 튜닝하려고 해도 실험 한 판 돌리는 데 시간이 너무 오래 걸린다.
평가 쪽도 문제다. “연락처에 새 사람을 추가했는가?” 같은 태스크를 검증하려면 스크린샷을 VLM에 넣고 판정을 받아야 한다. VLM judge 자체가 불확실하고, 호출 비용도 만만치 않다. 같은 에이전트 행동을 두 번 평가했을 때 결과가 다르게 나올 수도 있다.
MobileGym은 어떻게 가벼워졌나요?
핵심은 Android 에뮬레이터를 쓰지 않는다는 것이다. 대신 브라우저 기반 시뮬레이션 환경을 구축했다. 모바일 앱의 UI와 동작을 웹에서 모사하는 방식이다.
결과적으로 인스턴스당 메모리 약 400MB, 콜드스타트 3초 수준이다. 단일 서버에서 수백 개 인스턴스를 동시에 돌릴 수 있다. GPU도 필요 없다. 이 정도면 강화학습의 데이터 수집 병목을 상당히 해소할 수 있다.
상태를 JSON으로 직렬화한다는 게 정확히 뭔가요?
모바일 앱의 전체 환경 상태—연락처 목록, 설정값, 앱 내부 데이터, 현재 화면의 위젯 트리 등—을 구조화된 JSON 객체로 표현한다.
이게 되면 여러 가지가 편해진다. 특정 상태를 저장해두고 나중에 복원할 수 있다. 같은 상태에서 다른 에이전트를 돌려서 공정하게 비교할 수도 있다. 상태를 “포크”해서 분기 실험을 하는 것도 가능하다. RL에서 replay buffer를 구성하거나 curriculum learning을 설계할 때 유용하다.
검증은 어떻게 “결정론적”으로 하나요?
VLM judge를 쓰지 않는다. 대신 AnswerSheet 프로토콜이라는 걸 도입했다.
기존 방식은 “연락처를 추가하라” 같은 자연어 지시에 대해, 에이전트가 스크린샷에 나타난 결과가 맞는지를 VLM이 판정한다. MobileGym은 태스크를 선언적으로 정의하고, 에이전트가 채워야 할 타입 기반 폼(AnswerSheet)을 명시한다. 정답은 환경 상태 JSON에서 직접 읽어서 비교한다.
결과가 결정론적이고 재현 가능하다. 평가 비용도 거의 0에 수렴한다.
태스크 난이도는 어떻게 나뉘나요?
4단계 계층 구조(L1–L4)로 설계됐다.
- L1: 단일 앱, 단일 스텝 (예: 설정에서 Wi-Fi 켜기)
- L2: 단일 앱, 다중 스텝 (예: 연락처에 정보 입력 후 저장)
- L3: 다중 앱 (예: 메시지에서 받은 정보를 메모 앱에 옮기기)
- L4: 복잡한 다중 앱 + 조건 분기
전체 27,000개 이상의 개별 태스크 인스턴스가 준비돼 있다. 템플릿 기반 생성이 아니라 실제 앱 시나리오에서 파생된 것들이라고 한다.
시뮬레이션에서 훈련한 에이전트, 실제 디바이스에서도 통하나요?
이게 아마 가장 중요한 질문이다. MobileGym은 에뮬레이터가 아니라 시뮬레이션이니까, 실제 Android 환경과의 갭이 걱정될 수 있다.
논문에서는 시뮬레이션 환경에서 학습한 에이전트를 실제 디바이스에 배포했을 때 95.1%의 성능 유지율을 보고했다. 시뮬레이션이 모바일 앱의 핵심 인터랙션 패턴을 충분히 잘 모사하고 있다는 의미다.
다만 이 수치는 논문이 제공하는 태스크 범위 내에서의 결과이고, 훨씬 복잡한 실제 앱(커스텀 UI 컴포넌트, 애니메이션 기반 인터랙션 등)으로 확장하면 갭이 벌어질 수 있다.
계층형 상태 모델은 뭔가요?
MobileGym은 환경을 계층형 트리 구조로 모델링한다. 최상위에 디바이스 상태가 있고, 그 아래에 앱 상태, 화면 상태, 위젯 상태가 내려간다. 각 레벨에서 상태를 독립적으로 읽고 쓸 수 있다.
태스크 정의도 선언적이다. “어떤 상태에서 어떤 액션을 거쳐 어떤 상태로 가야 한다”를 JSON 스키마로 기술한다. 이렇게 하면 새 태스크를 추가할 때 코드를 많이 안 짜도 된다.
핵심 시사점
- 실험 속도: 에뮬레이터 기반 대비 수백 배 많은 병렬 실험이 가능하다. RL 훈련 파이프라인에 바로 붙여 쓸 수 있는 수준.
- 재현 가능한 평가: VLM judge 의존도를 없앴다. 논문 간 성능 비교가 공정해진다.
- 시뮬레이션→실제 전이: 95.1% 성능 유지율은 시뮬레이션 기반 훈련이 실용적임을 보여준다.
- 확장성 한계: 시뮬레이션이므로 실제 앱의 모든 엣지 케이스를 커버할 수는 없다. 복잡한 앱, 커스텀 렌더링, 네이티브 게임 등은 여전히 실제 기기 테스트가 필요하다.
MobileGym은 모바일 GUI 에이전트 연구의 인프라 병목을 상당 부분 해소하는 플랫폼이다. 특히 강화학습 기반 접근을 고려하는 연구자에게는 실험 환경으로서의 가치가 높아 보인다.
Paper: MobileGym: A Verifiable and Highly Parallel Simulation Platform for Mobile GUI Agent Research