“빨간 컵을 쟁반에 올려 줘"라는 문장과 카메라 이미지 한 장이 어떻게 로봇 팔의 관절 각도 변화로 바뀔까요? 이 글은 VLA(Vision-Language-Action) 모델의 내부를 세 단계로 나누고, 대표 모델들이 마지막 단계인 행동 생성을 어떻게 다르게 설계했는지 논문 수치로 비교합니다. 로봇에 쓸 VLA를 고르거나 논문을 읽기 전에 구조를 잡고 싶은 엔지니어를 위한 글입니다.
VLA를 세 단계로 나누어 보기
VLA는 Physical AI 구성 요소 중 “무엇을 할지"를 정하는 모델입니다. 내부는 대체로 아래 세 단계로 나눌 수 있습니다.
- 비전 인코더: 카메라 이미지를 시각 토큰으로 바꾼다. OpenVLA는 DINOv2와 SigLIP을 결합한 비전 백본을 쓴다고 README에 밝힌다.
- 언어 모델 백본: 시각 토큰, 지시문 토큰, 로봇 상태를 함께 읽고 장면과 과제를 이해한다. OpenVLA는 Llama 2, π0는 PaliGemma를 쓴다.
- 행동 헤드: 백본의 출력을 관절·그리퍼 명령으로 바꾼다. 모델 간 차이가 가장 큰 부분이다.
앞의 두 단계는 일반 VLM과 거의 같습니다. VLA가 VLM과 갈라지는 지점은 세 번째 단계이며, 여기서 크게 두 갈래가 나옵니다.
갈래 1: 행동을 언어처럼 토큰으로 출력하기 (RT-2, OpenVLA)
RT-2 논문은 로봇 행동을 텍스트 토큰으로 표현해 학습 데이터에 그대로 넣었습니다. 위치 변화, 회전 변화, 그리퍼 값을 숫자 구간으로 나눈 뒤 각 구간을 토큰으로 쓰는 방식입니다. 프로젝트 페이지는 “1 128 91 241 5 101 127 217” 같은 토큰열을 예로 보여 주며, PaLM-E(12B)와 PaLI-X(55B)를 백본으로 한 버전을 공개했습니다.
이 방식의 장점은 언어 모델 구조를 거의 바꾸지 않아도 된다는 것입니다. 행동은 “다음 토큰 예측"의 한 종류가 되고, 웹 데이터로 배운 지식이 그대로 이어집니다. RT-2는 6천 회 이상의 평가에서 처음 보는 물체에 대한 일반화가 크게 좋아졌다고 보고합니다.
OpenVLA는 같은 방식을 공개 모델로 구현했습니다. 7B 파라미터 모델을 97만 건의 실제 로봇 시연으로 학습했고, 29개 과제에서 RT-2-X(55B)보다 절대 성공률이 16.5% 높았다고 밝힙니다. 행동 토큰을 실제 값으로 되돌리는 과정은 개념적으로 아래와 같습니다.
import numpy as np
# 행동 한 차원을 [low, high] 범위의 N개 구간으로 나눈 토큰을 연속값으로 복원 (개념 코드)
def detokenize(token_ids, low, high, n_bins=256):
centers = np.linspace(low, high, n_bins)
return centers[np.asarray(token_ids)]
# 예: 7차원 행동 = 위치 변화 3 + 회전 변화 3 + 그리퍼 1
action = detokenize(model_output_tokens, low=action_low, high=action_high)
OpenVLA 저장소는 이 기본 방식을 “256-bin action discretization"이라고 부릅니다. 구간 수가 정해져 있으므로 아주 미세한 동작에서는 양자화 오차가 생길 수 있고, 한 번에 한 스텝씩 토큰을 생성하면 제어 주파수가 낮아질 수 있습니다. 저장소는 이를 개선한 후속 방법(OFT, FAST)이 추론 속도를 크게 높인다고 소개합니다.
갈래 2: 연속 행동을 생성 모델로 만들기 (π0, GR00T N1)
두 번째 갈래는 행동을 토큰으로 나누지 않고, 연속값 행동 시퀀스를 생성 모델로 직접 만듭니다. π0 논문이 대표적입니다.
| 항목 | π0 (논문 기준) |
|---|---|
| VLM 백본 | PaliGemma 3B |
| 행동 전문가(action expert) | 약 300M 파라미터 추가, 합계 약 3.3B |
| 행동 생성 방식 | 조건부 flow matching, 추론 시 오일러 10스텝 |
| 행동 묶음 길이 | H = 50 스텝 |
| 제어 주파수 | 최대 50Hz |
| 사전학습 데이터 | 1만 시간 이상, 자체 데이터 7개 로봇 구성·68개 과제 |
| 추론 지연 (RTX 4090) | 온보드 73ms, 원격 86ms |
핵심은 행동 묶음(action chunk)입니다. 한 번 추론으로 50스텝 분량의 연속 행동을 만들고, 로봇은 이를 고주파로 실행합니다. 덕분에 큰 VLM을 매 제어 주기마다 돌리지 않아도 됩니다. 확산·flow 계열로 여러 정답 행동을 다루는 원리는 디퓨전 정책 작동 원리에서 자세히 설명합니다.
이중 시스템: 생각하는 모델과 움직이는 모델 분리 (Helix, GR00T N1)
휴머노이드처럼 자유도가 많은 로봇에서는 이해와 제어를 아예 두 모델로 나누는 구조가 쓰입니다.
| 모델 | 느린 시스템 (이해) | 빠른 시스템 (행동) | 행동 공간 |
|---|---|---|---|
| Figure Helix | 7B VLM, 7~9Hz | 80M 트랜스포머 정책, 200Hz | 상체 35자유도 |
| GR00T N1 | VLM 기반 System 2 | Diffusion Transformer 기반 System 1 | 평가: Fourier GR-1 양팔 조작 |
Helix는 두 시스템을 저전력 임베디드 GPU 2개에 하나씩 나눠 올리고, 약 500시간의 원격조작 데이터로 학습했다고 밝힙니다. GR00T N1은 두 모듈을 함께 끝단까지 학습하며, 실제 로봇 궤적·사람 영상·합성 데이터를 섞어 학습한 공개 파운데이션 모델로 소개됩니다. 느린 시스템이 “무엇을 할지"를 잠재 표현으로 넘기면, 빠른 시스템이 이를 매끄러운 관절 명령으로 바꾸는 구조입니다.
세 방식을 한눈에 비교
| 기준 | 행동 토큰 (RT-2·OpenVLA) | 연속 생성 (π0) | 이중 시스템 (Helix·GR00T N1) |
|---|---|---|---|
| 행동 표현 | 구간화된 이산 토큰 | 연속값 행동 묶음 | 잠재 표현 → 연속 명령 |
| 구조 변경 | 언어 모델 그대로 사용 | 백본 + 행동 전문가 | 모델 2개 |
| 강점 | 단순, 웹 지식 이전 | 정밀·고주파 제어 | 많은 자유도·고주파 |
| 주의점 | 양자화 오차, 생성 속도 | 생성 스텝 수만큼 연산 | 두 모델 간 인터페이스 설계 |
내 로봇에 VLA를 고르기 전에 확인할 것
논문 성공률은 특정 로봇과 평가 과제에서 나온 값입니다. 내 로봇에서는 아래 순서로 따져 보는 편이 현실적입니다.
- 행동 차원과 제어 주파수: 7자유도 팔 하나인지, 35자유도 상체인지에 따라 맞는 구조가 다르다.
- 온보드 연산 예산: 7B 모델을 16비트로 올리면 가중치만 약 14GB가 필요하다(파라미터 수 × 2바이트로 계산한 추정). 계산 방법은 엣지 GPU VRAM·TOPS 산정 가이드를 참고한다.
- 미세조정 데이터와 자원: OpenVLA README는 LoRA 미세조정 예시가 A100 80GB 한 장에서 돌고, 배치를 줄이면 최소 약 27GB GPU로도 가능하다고 안내한다.
- 라이선스와 공개 범위: 가중치 공개 여부와 상업적 사용 조건을 확인한다.
VLA가 고른 행동이 어떤 결과를 낳을지 미리 예측하는 쪽은 월드 모델입니다. 두 모델의 관계는 월드 모델 작동 원리에서 이어서 볼 수 있습니다.