LeRobot documentation

π₀ (Pi0)

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

π₀ (Pi0)

π₀는 Physical Intelligence에서 개발한 일반적인 로봇 제어를 위한 Vision-Language-Action 모델입니다. LeRobot 구현은 해당 오픈소스 OpenPI 저장소를 기반으로 조정되었습니다.

모델 개요

π₀는 Physical Intelligence가 개발한 최초의 범용 로봇 파운데이션 모델로서 로봇공학 분야의 돌파구를 의미합니다. 반복적인 동작을 수행하도록 프로그래밍된 좁은 범위의 전문가인 기존 로봇 프로그램과 달리, π₀는 시각적 입력을 이해하고 자연어 지시를 해석하며 다양한 작업을 수행하기 위해 여러 종류의 로봇을 제어할 수 있는 범용 정책으로 설계되었습니다.

An overview of Pi0

물리적 지능의 비전

Physical Intelligence에서 설명하듯, AI는 체스부터 신약 발견에 이르기까지 디지털 영역에서 놀라운 성공을 거두었지만, 물리적 세계에서는 여전히 인간 지능이 AI를 압도적으로 앞서고 있습니다. Moravec의 역설을 다시 말하자면, 체스 게임을 이기는 것은 AI에게 “쉬운” 문제이지만, 셔츠를 접거나 테이블을 정리하는 것은 인류가 고안해 낸 가장 어려운 엔지니어링 문제 중 일부를 해결해야 합니다. π₀는 사용자가 대규모 언어 모델처럼 로봇에게 원하는 작업을 단순히 요청할 수 있도록 하는 인공 물리 지능을 개발하기 위한 첫걸음을 의미합니다.

아키텍처 및 접근 방식

π₀는 여러 가지 핵심 혁신을 결합합니다:

  • Flow Matching: flow matching(확산 모델의 변형)를 통해 연속된 동작 출력을 추가하여 사전 학습된 VLM을 증강하는 새로운 방법을 사용합니다
  • 크로스-엠보디먼트 학습: UR5e, 양팔 UR5e, Franka, 양팔 Trossen, 양팔 ARX, 모바일 Trossen, 모바일 Fibocom을 포함한 8개의 서로 다른 로봇 플랫폼 데이터로 학습
  • 인터넷 규모 사전 학습: 사전 학습된 3B 파라미터 Vision-Language Model에서 의미론적 지식을 상속
  • 고주파 제어: 실시간 정교한 조작을 위해 최대 50 Hz의 모터 명령을 출력

설치 요구 사항

  1. LeRobot은 설치 가이드를 참고하여 설치하세요.

  2. 다음 명령을 실행하여 Pi0의 종속성을 설치합니다:

    pip install -e ".[pi]"

학습 데이터 및 기능

π₀는 지금까지 가장 큰 로봇 상호작용 데이터셋으로 학습되며, 세 가지 주요 데이터 소스를 결합합니다:

  1. 인터넷 규모 사전 학습: 의미 이해를 위한 웹 기반 비전-언어 데이터
  2. Open X-Embodiment Dataset: 오픈소스 로봇 조작 데이터셋
  3. Physical Intelligence Dataset: 8개의 서로 다른 로봇을 아우르는 다양한 숙련형 작업으로 구성된 대규모 데이터셋

사용

LeRobot에서 π₀를 사용하려면 정책 유형을 다음과 같이 지정하세요:

policy.type=pi0

학습

π₀ 학습을 위해 적절한 구성을 사용하여 표준 LeRobot 학습 스크립트를 사용할 수 있습니다:

lerobot-train \
    --dataset.repo_id=your_dataset \
    --policy.type=pi0 \
    --output_dir=./outputs/pi0_training \
    --job_name=pi0_training \
    --policy.pretrained_path=lerobot/pi0_base \
    --policy.repo_id=your_repo_id \
    --policy.compile_model=true \
    --policy.gradient_checkpointing=true \
    --policy.dtype=bfloat16 \
    --policy.freeze_vision_encoder=false \
    --policy.train_expert_only=false \
    --steps=3000 \
    --policy.device=cuda \
    --batch_size=32

주요 학습 매개변수

  • --policy.compile_model=true: 더 빠른 훈련을 위해 모델 컴파일을 활성화합니다
  • --policy.gradient_checkpointing=true: 학습 중 메모리 사용량을 크게 줄입니다
  • --policy.dtype=bfloat16: 효율성을 위해 혼합 정밀도 학습 사용
  • --batch_size=32: 학습용 배치 크기입니다. GPU 메모리에 따라 이 값을 조정하세요.
  • --policy.pretrained_path=lerobot/pi0_base: 파인튜닝할 기본 π₀ 모델입니다. 선택할 수 있는 옵션은 다음과 같습니다:
  • --policy.optimizer_fused=true: 더 빠른 옵티마이저 스텝을 위해 fused AdamW를 사용합니다. 실행을 재개할 때 이 플래그는 무시됩니다

학습 매개변수 설명

매개변수기본값설명
freeze_vision_encoderfalse비전 인코더를 동결하지 마세요
train_expert_onlyfalseVLM을 동결하지 않고 모든 매개변수를 학습

💡 팁: train_expert_only=true를 설정하면 VLM이 동결되고 action expert와 projections만 학습되어, 메모리 사용량이 줄어든 상태에서 finetuning을 수행할 수 있습니다.

상대적 동작

기본적으로 π₀은 절대 동작을 예측합니다. 상대 동작을 활성화하여 현재 로봇 상태에 대한 오프셋을 예측하도록 모델을 설정할 수 있습니다. 이는 특정 구성에서 학습 안정성을 향상시킬 수 있습니다.

상대적 동작을 사용하려면 먼저 CLI를 통해 상대 공간에서 데이터셋 통계를 다시 계산해야 합니다:

lerobot-edit-dataset \
    --repo_id your_dataset \
    --new_repo_id your_dataset \
    --operation.type recompute_stats \
    --operation.overwrite true \
    --operation.relative_action true \
    --operation.chunk_size 50 \
    --operation.relative_exclude_joints "['gripper']" \
    --push_to_hub true

또는 Python으로 표현하면 다음과 같습니다:

from lerobot.datasets import LeRobotDataset, recompute_stats

dataset = LeRobotDataset("your_dataset")
recompute_stats(dataset, relative_action=True, chunk_size=50, relative_exclude_joints=["gripper"])
dataset.push_to_hub()

chunk_size는 정책의 chunk_size와 일치해야 합니다(π₀의 기본값은 50입니다). relative_exclude_joints는 절대 공간에 유지되어야 하는 조인트 이름을 나열합니다(예: 그리퍼 명령). 업데이트된 통계를 Hub에 업로드하려면 --push_to_hub true를 사용하세요.

그런 다음 상대 동작을 활성화하여 학습합니다:

lerobot-train \
    --dataset.repo_id=your_dataset \
    --policy.type=pi0 \
    --policy.use_relative_actions=true \
    --policy.relative_exclude_joints='["gripper"]' \
    ...

라이선스

이 모델은 원래의 OpenPI 저장소와 일치하는 Apache 2.0 라이선스를 따릅니다.

Update on GitHub