gWorld: Trillion Labs가 공개한, 실행 가능한 코드로 모바일 세상을 시뮬레이션하는 생성형 월드 모델

gWorld 소개

gWorld는 한국의 초지능 연구 스타트업 Trillion Labs에서 공개한 혁신적인 인공지능 모델로, 세계 최초로 오픈 웨이트(Open-weight)로 공개된 시각적 모바일 GUI 월드 모델(World Model) 입니다. 이 모델은 모바일 환경에서 사용자의 특정 행동(Action)이 주어졌을 때, 그 결과로 나타날 다음 화면의 상태(Next State)를 예측하는 데 특화되어 있습니다. gWorld가 기존의 AI 모델들과 근본적으로 다른 점은 예측의 결과물이 픽셀(Pixel)로 이루어진 이미지가 아니라, 실행 가능한 웹 코드(Executable Web Code) 형태라는 것입니다.

일반적으로 월드 모델은 에이전트가 환경과 상호작용하며 미래를 시뮬레이션하는 데 사용됩니다. 기존의 비전 기반 월드 모델들은 다음 장면을 픽셀 단위로 생성(Generation)하는 방식을 택했습니다. 하지만 이러한 방식은 텍스트가 뭉개지거나(Text Hallucination), 버튼이나 레이아웃의 구조가 미세하게 왜곡되는 등의 고질적인 문제를 안고 있었습니다. 반면, gWorld는 화면을 구성하는 논리를 이해하고 이를 HTML과 CSS 코드로 작성하여 출력합니다. 이렇게 생성된 코드는 브라우저 엔진을 통해 렌더링되므로, 텍스트는 픽셀 단위로 완벽하게 선명하며 레이아웃 또한 구조적으로 정확성을 유지합니다.

gWorld는 모델의 크기에 따라 gWorld-8BgWorld-32B의 두 가지 버전으로 제공됩니다. 이들은 각각 Qwen3-VL-8B-InstructQwen3-VL-32B라는 강력한 비전-언어 모델(VLM)을 기반으로 파인튜닝되었습니다.

특히 주목할 만한 점은 모델의 효율성입니다. gWorld-8B 모델은 자신보다 무려 50배 이상 큰 모델(예: Llama 4 402B)보다 모바일 GUI 예측 작업에서 더 뛰어난 성능을 발휘하며, 새로운 파레토 프론티어(Pareto Frontier)를 개척했습니다. 이는 단순히 모델의 크기를 키우는 경쟁에서 벗어나, 데이터의 표현 방식(Modality)을 혁신함으로써 효율성을 극대화한 사례로 평가받고 있습니다.

Property gWorld-8B gWorld-32B
Base Model Qwen/Qwen3-VL-8B-Instruct Qwen/Qwen3-VL-32B
Parameters 9B 33B
Tensor Type BF16 BF16
License Apache 2.0 Apache 2.0
HuggingFace trillionlabs/gWorld-8B trillionlabs/gWorld-32B

gWorld vs. 기존 Pixel-based World Models와 비교

기존의 픽셀 기반 생성 방식과 gWorld가 채택한 코드 기반 생성 방식의 차이는 단순히 기술적인 구현의 차이를 넘어, 결과물의 품질과 활용성 면에서 큰 격차를 만듭니다.

가장 먼저 가독성과 정합성(Legibility and Consistency) 측면을 살펴보면, 기존의 픽셀 생성 모델(예: Diffusion 기반)은 이미지 전체의 통계적 패턴을 학습하여 그려내는 방식이기에, 화면 내의 작은 글씨나 복잡한 UI 요소를 정확하게 재현하는 데 한계가 있었습니다. 생성된 이미지 속 텍스트는 사람이 읽을 수 없는 외계어처럼 변형되거나, 직선이어야 할 UI 경계선이 흐물거리는 현상이 자주 발생했습니다. 하지만 gWorld는 텍스트를 문자열(String) 그 자체로 처리하고, UI 요소를 HTML 태그로 정의하기 때문에 렌더링 결과물에서 텍스트 깨짐이나 구조적 왜곡이 원천적으로 차단됩니다.

또한 속도와 효율성(Speed and Efficiency) 면에서도 큰 차이가 있습니다. 고품질의 이미지를 얻기 위해 수십 단계의 디노이징(Denoising) 과정을 거쳐야 하는 확산 모델은 생성 속도가 느릴 수밖에 없습니다. 반면, gWorld는 텍스트(코드)를 한 번에 생성(Autoregressive)한 뒤, Playwright와 같은 최적화된 브라우저 엔진을 통해 순식간에 렌더링합니다. 공식 벤치마크에 따르면 gWorld의 렌더링 속도는 약 0.3초 수준으로, 실시간성이 중요한 모바일 에이전트 시뮬레이션 환경에 훨씬 적합합니다.

gWorld의 주요 특징

gWorld는 시각적 정보와 사용자의 의도를 입력받아, 논리적 추론을 거쳐 실행 가능한 코드를 출력하는 정교한 파이프라인을 갖추고 있습니다.

입력 처리와 좌표계 시스템 (Input & Coordinate Space)

모델은 현재 시점의 모바일 스크린샷사용자의 행동(User Action) 을 동시에 입력받습니다. 이때 가장 중요한 것은 사용자가 화면의 어느 지점을 조작했는지 모델이 정확히 이해하는 것입니다.

이를 위해 gWorld는 [0, 1000] 범위로 정규화된(Normalized) 좌표계를 사용합니다. 예를 들어, 사용자가 화면 중앙의 버튼을 눌렀다면 {"action_type": "TAP", "coordinates": [512, 890]}와 같은 JSON 형식의 행동 데이터가 이미지와 함께 입력됩니다. 이 외에도 텍스트 입력(TYPE), 스크롤(SCROLL) 등 다양한 모바일 제스처를 처리할 수 있습니다.

추론 우선 생성 전략 (Reasoning-First Generation)

gWorld는 단순히 결과 코드만을 바로 뱉어내지 않습니다. 입력된 행동이 화면에 어떤 변화를 가져올지 먼저 논리적으로 서술(Reasoning) 하는 과정을 거칩니다.

예를 들어, "사용자가 '검색' 버튼을 눌렀으므로, 현재 화면은 검색 결과 페이지로 전환되어야 하며, 상단에는 검색어 입력창이 유지되고 하단에는 리스트 형태의 결과 항목들이 나타나야 한다"는 식의 추론을 먼저 생성합니다. 이러한 추론 과정(Chain of Thought)은 뒤이어 생성될 HTML 코드의 개연성을 높이고, 복잡한 화면 전환에서도 논리적인 오류를 줄이는 데 결정적인 역할을 합니다.

코드 생성 및 렌더링 (Code Generation & Rendering)

추론이 끝나면 모델은 HTML5CSS로 구성된 웹 코드를 생성합니다. 모델은 상황에 따라 Bootstrap, Tailwind CSS, 혹은 인라인(Inline) CSS 중 가장 적합한 스타일링 방식을 선택하여 원본 스크린샷과 가장 유사한 디자인을 구현합니다. 이미지가 들어갈 자리에는 SVG 플레이스홀더를 사용하여 레이아웃을 잡고, 색상과 크기 정보를 코드에 반영합니다.

이렇게 생성된 코드는 Playwright 라이브러리를 통해 실제 이미지로 렌더링됩니다. GitHub에 공개된 렌더링 스크립트를 보면, 모바일 기기의 해상도(Viewport)에 맞춰 자동으로 스케일링 팩터(Scale Factor)를 조절하는 로직이 포함되어 있어, 다양한 디바이스 환경에서도 일관된 시각적 결과를 보장합니다.

성능 지표 (Performance Benchmark)

gWorld의 성능은 다양한 벤치마크를 통해 입증되었습니다. 특히 지시 이행 정확도(Instruction Accuracy) 측면에서 베이스 모델인 Qwen3-VL 대비 획기적인 향상을 이뤘습니다.

gWorld-8B 모델은 베이스 모델보다 45.7% 높은 정확도를 기록했으며, gWorld-32B 모델 역시 27.1%의 성능 향상을 보였습니다. 또한, 학습 과정에서 보지 못한 새로운 환경(Out-of-Distribution)인 AndroidWorld나 한국어 기반 벤치마크인 KApps에서도 추가적인 학습 없이(Zero-shot) 높은 일반화 성능을 보여주었습니다.

이러한 결과는 gWorld가 단순히 특정 데이터셋을 암기한 것이 아니라, 모바일 GUI의 구성 원리를 깊이 있게 이해하고 있음을 시사합니다.

gWorld 모델 설치 및 사용

gWorld는 vllm 라이브러리를 통해 효율적으로 추론할 수 있습니다. 사용자는 모델에 입력할 프롬프트를 구성할 때, 반드시 모델이 추론(Reasoning) 및 HTML 코드 생성을 순서대로 출력하도록 유도하는 템플릿을 사용해야 합니다. 다음은 실제 추론을 수행하는 Python 코드의 예시 코드입니다:

from vllm import LLM, SamplingParams
from transformers import AutoProcessor
from PIL import Image

# 1. 모델 및 설정 로드
# gWorld-32B 모델을 사용하며, 텐서 병렬화(TP)를 8로 설정하여 대규모 연산을 분산 처리합니다.
MODEL_PATH = "trillionlabs/gWorld-32B"
BASE_MODEL = "Qwen/Qwen3-VL-32B"

llm = LLM(
    model=MODEL_PATH,
    tokenizer=BASE_MODEL,
    tensor_parallel_size=8, 
    gpu_memory_utilization=0.9,
    max_model_len=19384, # 긴 컨텍스트 처리를 위한 설정
    trust_remote_code=True,
    enable_chunked_prefill=True # 긴 프롬프트 처리 효율화
)

# 2. 프로세서 및 입력 데이터 준비
processor = AutoProcessor.from_pretrained(BASE_MODEL, trust_remote_code=True)
image = Image.open("screenshot.png").convert('RGB')
action = '{"action_type": "TAP", "coordinates": [512, 890]}'

# 3. 프롬프트 구성 (System Prompt)
# 모델에게 전문가 역할을 부여하고, 출력 형식을 엄격하게 제한합니다.
user_content = f"""You are an expert mobile UI World Model that can accurately predict the next state given an action.
... (중략: HTML5 코드 생성 규칙, 모바일 우선 디자인 원칙 등 상세 지침) ...
Action: {action}
Output format:
# Next State Reasoning: <your reasoning>
# HTML: <valid_html_code>
Generate the next state reasoning and the next state in html:"""

# 4. 추론 실행
# 이미지와 텍스트가 결합된 멀티모달 입력을 처리합니다.
messages = [{"role": "user", "content": [{"type": "image", "image": image}, {"type": "text", "text": user_content}]}]
prompt = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)

sampling_params = SamplingParams(max_tokens=15000, temperature=0) # 결정론적(Deterministic) 출력을 위해 temperature를 0으로 설정
outputs = llm.generate([{"prompt": prompt, "multi_modal_data": {"image": image}}], sampling_params=sampling_params)

print(outputs[0].outputs[0].text)

추론이 완료된 후, 생성된 HTML 코드는 별도의 Python 함수(Playwright 활용)를 통해 이미지로 변환되어 최종적인 시뮬레이션 결과를 확인할 수 있습니다.

:house: Trillion Labs 홈페이지

:scroll: gWorld 논문: Generative Visual Code Mobile World Models

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

:hugs: gWorld 모델 다운로드 (gWorld-8B)

:hugs: gWorld 모델 다운로드 (gWorld-32B)

더 읽어보기




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

:pytorch:파이토치 한국 사용자 모임:south_korea:이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일:love_letter:로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)

:wrapped_gift: 아래:down_right_arrow:쪽에 좋아요:+1:를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~ :star_struck: