Physical Intelligence의 플로우 매칭 VLA인 Pi0.5를 자체 로봇 데이터로 미세 조정하세요. openpi 및 lerobot pi05를 위한 실제 명령어, 데이터셋 형식 함정, VRAM 및 지연 시간 제한.
Pi0.5는 정책이 한 번도 본 적 없는 방에서 작동해야 할 때 선택하는 모델입니다. 또한 여기 있는 다섯 가지 학습 가능한 정책 중에서 수동으로 미세 조정하기 가장 까다로운 모델입니다. 업스트림 저장소는 JAX 우선이며, LeRobot 포트는 0.6.0에서 lerobot-record에서 배포를 제외하여 기본 설치가 학습하기에는 너무 작아졌고, 전체 미세 조정은 4090에 맞지 않습니다. 아래: 플로우 매칭이 추론 시 얼마나 비용이 드는지, 두 가지 명령 경로, 그리고 결과의 사용 가능 여부를 결정하는 485 ms 숫자입니다.
알아야 할 사항
- •플로우 매칭 VLA: 3B PaliGemma VLM과 연속 동작 청크를 디코딩하는 300M 동작 전문가. 이를 미세 조정하는 두 가지 경로(openpi 및 LeRobot pi05)는 LIBERO 평균에서 0.65점 차이가 납니다.
- •전체 미세 조정에는 70GB 이상의 VRAM이 필요합니다. openpi는 JAX 경로에서만 LoRA를 22.5 GB로 나열합니다.
- •데이터셋은 meta/stats.json에 q01 및 q99 분위수를 포함하는 LeRobotDataset v3.0이어야 합니다. 그렇지 않으면 배치 하나가 오류를 발생시킵니다.
- •먼저 lerobot 버전을 확인하십시오. 0.6.0은 기본 패키지를 경량화하고 lerobot-record에서 배포를 제외했습니다.
- •여기서 각 동작 단계당 485 ms로 실행되며, 50개의 에피소드를 필요로 하고, 실행당 약 4 to 12 USD의 비용이 듭니다.
Pi0.5의 실제 모습
Physical Intelligence는 2024년 10월에 pi0를 발표했습니다. 이는 사전 훈련된 VLM 기반의 플로우 매칭 시각-언어-동작 모델입니다. 30억 개의 매개변수를 가진 PaliGemma와 처음부터 초기화된 3억 개의 동작 전문가를 포함하여 총 33억 개의 매개변수를 가집니다. 이 논문은 7가지 로봇 구성과 68가지 작업에 걸쳐 10,000시간 이상의 로봇 데이터로 사전 훈련했다고 보고합니다. 더 자세한 내용은 pi0 문서에서 확인하십시오.
Pi0.5 (arXiv 2504.16054, 22 April 2025)는 그 골격을 유지하고 훈련 방식을 변경합니다: 웹 데이터, 객체 감지, 로봇을 코칭하는 인간의 구두 지시, 하위 작업 레이블, 여러 가정에 있는 로봇의 교차 구현 데이터. 그 결과는 훈련 세트에 없던 집의 주방을 청소하는 로봇입니다. openpi README는 제목에 없는 세부 사항을 추가합니다: 출시된 pi0.5는 지식 단열(arXiv 2505.23705)로 훈련되었습니다.
| 속성 | pi0 | pi0.5 |
|---|---|---|
| VLM 백본 변형 | gemma_2b (PaliGemma) | gemma_2b (PaliGemma) |
| 액션 전문가 변형 | gemma_300m | gemma_300m |
| action_dim | 32 | 32 |
| action_horizon default | 50 | 50 |
| max_token_len | 48 | 200 |
| discrete_state_input | false | true, 프롬프트에서 상태가 빈으로 이산화됨 |
| Base checkpoint | gs://openpi-assets/checkpoints/pi0_base | gs://openpi-assets/checkpoints/pi05_base |
openpi README는 명확히 밝힙니다: 이 저장소는 pi0.5 훈련 및 추론 모두에 대해 플로우 매칭 헤드만 지원합니다. 논문은 두 단계를 설명하며 코드는 두 번째 단계만 포함합니다: 사전 훈련은 FAST 토크나이저를 통해 모든 동작을 이산 토큰으로 표현하고, 배포 시 모델은 각 동작 청크 전에 상위 수준 하위 작업을 추론합니다. 이들 중 어느 것도 저장소에 없습니다. lerobot/pi05_base 카드는 동일한 목록을 제공하고 RL을 추가하지만, pi0.5 논문은 강화 학습 단계를 전혀 설명하지 않습니다. LeRobot 포트는 해당 범위를 상속하며, 여기에 있는 모든 호스팅된 트레이너도 마찬가지입니다. 라이선스도 분리되어 있습니다: pi05 문서 페이지는 Apache 2.0이라고 명시하고, lerobot/pi05_base 카드는 license: gemma로 태그되어 있습니다.
플로우 매칭이 훈련 및 추론에 대해 변경하는 사항
SO-100에서 훈련할 수 있는 정책은(는) 동작을 직접 회귀시키거나 (ACT) 또는 토큰화하여 자동회귀적으로 디코딩합니다 (pi0-FAST). 플로우 매칭은 둘 다 아닙니다. 노이즈를 깨끗한 액션 청크로 전달하는 벡터 필드를 학습한 다음, 이를 통합합니다. pi0 논문은 스텝 크기 0.1로 10단계 통합을 사용합니다. LeRobot의 pi05 설정도 동일한 num_inference_steps: int = 10을 포함합니다.
- 훈련: 손실은 노이즈가 추가된 액션 청크를 회귀시킵니다. 튜닝할 토크나이저도, 관절 각도의 이산화도 없습니다.
- 추론: 하나의 청크는 액션 전문가를 통해 10번의 순방향 패스를 필요로 합니다. 이는 구조적인 문제이지 튜닝 문제가 아닙니다.
- 출력: 내부적으로 패딩된 32차원 연속 동작이며, 로봇이 가진 차원에 대해 손실이 계산됩니다. 6-자유도 팔과 그리퍼는 7을 사용합니다.
# openpi/src/openpi/models/pi0_config.py - the defaults every pi05 config inherits
@dataclasses.dataclass(frozen=True)
class Pi0Config(_model.BaseModelConfig):
dtype: str = "bfloat16"
paligemma_variant: _gemma.Variant = "gemma_2b"
action_expert_variant: _gemma.Variant = "gemma_300m"
action_dim: int = 32
action_horizon: int = 50
max_token_len: int = None # 200 if pi05 else 48
pi05: bool = False # flips discrete_state_input to TruePaliGemma 백본과 그 앞에 있는 게이트
PaliGemma (arXiv 2407.07726)는 Gemma-2B 언어 모델 기반의 SigLIP-So400m 비전 인코더로, 약 30억 개의 매개변수를 가집니다. Pi0.5는 이 토크나이저를 상속하며, 해당 토크나이저는 게이트된 저장소에 있습니다. 이는 첫 번째 학습 단계가 시작되기도 전에 첫 실행이 실패하는 가장 흔한 원인입니다.
LeRobot pi05 문서는 명확히 밝힙니다: pi0.5는 게이트된 google/paligemma-3b-pt-224 토크나이저를 사용하므로, 먼저 Hub에서 해당 라이선스를 수락하고 hf auth login을 실행해야 합니다. 접근 권한은 즉시 부여되지 않고 수동으로 승인됩니다. 이를 건너뛰고 유료 클라우드 실행을 시작하면, 토크나이저를 다운로드할 수 없는 파드에 비용을 지불하게 됩니다.
시작하기 전에: 데이터셋 형식, 에피소드, 하드웨어
LeRobot의 Pi0.5는 LeRobot 데이터셋을 v3.0 레이아웃으로 읽습니다. 이 레이아웃은 2025년 10월 lerobot 0.4.0과 함께 도입되었으며, 에피소드당 하나의 파일 대신 Parquet 및 MP4 파일당 여러 에피소드를 포함하고, 파일 이름 대신 meta/episodes/에 경계가 정의됩니다. 데스크톱 클라이언트를 사용하여 기록하거나 첫 데이터셋 기록하기를 따르면 됩니다.
| 모드 | 필요한 GPU 메모리 | 예시 GPU |
|---|---|---|
| 추론 | more than 8 GB | RTX 4090 |
| 미세 조정, LoRA | more than 22.5 GB | RTX 4090 |
| 미세 조정, 전체 | more than 70 GB | A100 80 GB or H100 |
Pi0.5 및 SmolVLA는 LeRobot v3.0을 필요로 합니다. GR00T N1.7 및 GR00T N1.5는 v2.0 또는 v2.1을 필요로 하며, v3.0 데이터셋에서는 충돌합니다. 하나의 녹화 세션은 변환 없이는 둘 다에 공급할 수 없으며, 오류 메시지는 "잘못된 데이터셋 버전"이라고 표시되지 않습니다. 데이터셋 거부됨: v3 필요를 참조하십시오.
# v2.1 -> v3.0, run against a dataset already on the Hub
python -m lerobot.scripts.convert_dataset_v21_to_v30 --repo-id=<HF_USER/DATASET_ID>
# aggregates episode-0000.parquet, episode-0001.parquet, ... -> file-0000.parquet
# aggregates episode-0000.mp4, episode-0001.mp4, ... -> file-0000.mp4
# rewrites meta/episodes/* with per-episode lengths, tasks and offsets플랫폼은 Pi0.5에 대해 최소 50개의 에피소드를 요구하며, 이는 GR00T 및 ACT와 동일한 최소 요구치입니다. 사전 학습이 대부분의 작업을 수행하므로, 50개의 깔끔한 에피소드가 200개의 부실한 에피소드보다 낫습니다. 이 분야가 처음이신가요? 다음을 참고하여 시작하십시오: 데이터 수집 가이드.

경로 A: openpi 저장소를 사용하여 미세 조정
참조 구현: JAX 우선, Ubuntu 22.04에서만 테스트되었으며, 플래그 대신 구성 객체로 구동됩니다. PyTorch 경로는 2025년 9월에 출시되었으며 LIBERO에서 검증되었습니다. 세 가지 단계: 데이터 변환, 구성 정의, 훈련 및 서비스.
- 1클론 및 설치
openpi는 uv를 사용합니다. GIT_LFS_SKIP_SMUDGE는 LeRobot이 LFS blob 없이 종속성으로 포함될 수 있도록 합니다.
bashgit clone --recurse-submodules git@github.com:Physical-Intelligence/openpi.git cd openpi GIT_LFS_SKIP_SMUDGE=1 uv sync GIT_LFS_SKIP_SMUDGE=1 uv pip install -e . - 2데이터를 LeRobot 데이터셋으로 변환
업스트림은 LIBERO 및 DROID용 변환기를 제공하며, 사용자가 하나를 개조하도록 예상합니다. 핵심 작업은 키 매핑입니다.
bashuv run examples/libero/convert_libero_data_to_lerobot.py --data_dir /path/to/your/data - 3훈련 구성 추가
구성은 src/openpi/training/config.py의 TrainConfig 항목입니다. 이 구성은 pi05_droid_finetune을 개조하며, 가중치 로더는 pi05_base를 가리킵니다.
pythonTrainConfig( name="pi05_so100", model=pi0_config.Pi0Config( pi05=True, action_dim=32, # pi05 is trained with 32-dim actions action_horizon=16, ), # Copy LeRobotLiberoDataConfig in the same file and rewrite the key # mapping for your camera names, then reference your copy here. data=LeRobotLiberoDataConfig( repo_id="your_hf_username/my_so100_dataset", base_config=DataConfig(prompt_from_task=True), ), weight_loader=weight_loaders.CheckpointWeightLoader( "gs://openpi-assets/checkpoints/pi05_base/params" ), batch_size=32, num_train_steps=20_000, ) - 4정규화 통계 계산
데이터셋이 아닌 구성 이름에 대해 실행됩니다. 이를 건너뛰는 것이 여기서 흔히 발생하는 첫 번째 실패입니다.
bashuv run scripts/compute_norm_stats.py --config-name pi05_so100 - 5훈련
이 변수는 JAX가 기본 75% 대신 GPU 메모리의 90%를 사용하도록 합니다. 80GB 카드에서는 이 설정이 실행 성공 여부를 결정합니다.
bashXLA_PYTHON_CLIENT_MEM_FRACTION=0.9 uv run scripts/train.py pi05_so100 \ --exp-name=my_experiment \ --overwrite - 6서비스
서버는 포트 8000에서 수신 대기하며 관측 쿼리에 응답합니다. 로봇 런타임이 클라이언트입니다.
bashuv run scripts/serve_policy.py policy:checkpoint \ --policy.config=pi05_so100 \ --policy.dir=checkpoints/pi05_so100/my_experiment/20000
openpi의 PyTorch 구현은 pi0-FAST, 혼합 정밀도, FSDP, LoRA 또는 EMA 가중치를 지원하지 않으므로, 22.5GB에 달하는 LoRA는 gemma_2b_lora 및 gemma_300m_lora 변형을 통해서만 JAX에서 사용할 수 있습니다. 더 나쁜 점은, 설정이 설치된 transformers 4.53.2 위에 패치된 파일을 복사하며, README는 uv의 기본 하드링크 모드를 사용할 경우 uv 캐시의 transformers를 영구적으로 수정하여 다른 프로젝트로 유출될 수 있다고 경고합니다. uv cache clean transformers 명령으로 되돌릴 수 있습니다.
경로 B: lerobot pi05로 미세 조정
LeRobot 포트는 이미 사용 중인 CLI에서 동일한 가중치를 래핑합니다. ACT 및 SmolVLA. 아래의 모든 내용은 2026년 8월 3일 이후 릴리스된 lerobot 0.6.1과 2026년 8월 23일의 pi05 문서를 기준으로 확인되었습니다. 여기서는 버전이 중요합니다. v3.0 데이터셋은 2025년 10월 0.4.0과 함께 출시되었고, 2026년 3월 9일의 0.5.0 블로그는 pi0-FAST와 실시간 청킹을 소개하며, 2026년 7월 6일의 0.6.0은 기본 패키지를 경량화하고 배포를 lerobot-rollout으로 옮겼습니다.
한 가지는 변하지 않았습니다. lerobot-train 및 lerobot-record는 2025년 8월 0.3.2 버전에서 이미 진입점(entry point)이었습니다. 여전히 python -m lerobot.scripts.train을 호출하는 튜토리얼은 1년 전의 변경 사항을 반영하지 않으므로, 나머지 내용도 신뢰하기 어렵습니다.
- 1올바른 추가 기능으로 설치
0.6.0 버전부터 기본 설치에는 핵심 ML 종속성만 포함되며, pi 추가 기능은 데이터셋이나 훈련 코드를 추가하지 않으므로 미세 조정을 위해서는 훈련 추가 기능도 필요합니다. 이전의 한 줄 설치 명령어는 임포트 시점에 실패합니다.
bash# policy dependencies plus the training stack pip install 'lerobot[pi,training]' # from a source checkout pip install -e ".[pi,training]" # driving an SO-100 afterwards needs the robot extras too pip install 'lerobot[core_scripts,feetech]' - 2인증
브라우저에서 paligemma-3b-pt-224 라이선스를 수락한 다음, 훈련을 수행할 머신에 로그인합니다.
bashhf auth login - 3분위수 통계 추가
Pi0.5는 분위수를 사용하여 STATE와 ACTION을 정규화하므로, meta/stats.json 파일에 q01과 q99가 필요합니다. 이전 데이터셋에는 min, max, mean, std만 포함되어 있습니다.
bashlerobot-edit-dataset \ --repo_id your_dataset \ --new_repo_id your_dataset \ --operation.type recompute_stats \ --operation.overwrite true - 4lerobot/pi05_base에서 미세 조정
배치 크기는 사용 중인 카드에서 처리 가능한 값으로 설정하십시오. 문서에서는 80GB LIBERO에서 64를 사용합니다. bfloat16을 명시적으로 전달해야 합니다. 구성 기본값은 float32입니다.
bashlerobot-train \ --dataset.repo_id=${HF_USER}/my_so100_dataset \ --policy.type=pi05 \ --policy.pretrained_path=lerobot/pi05_base \ --policy.gradient_checkpointing=true \ --policy.dtype=bfloat16 \ --policy.device=cuda \ --policy.push_to_hub=false \ --output_dir=./outputs/pi05_so100 \ --job_name=pi05_so100 \ --batch_size=4 \ --num_workers=8 \ --steps=30000 \ --save_freq=5000 \ --seed=1000 - 5로봇 팔에서 실행
0.6.x 버전에서는 `lerobot-rollout`을 사용합니다. `lerobot-record`는 정책을 거부하고 `eval_` 데이터셋 이름을 허용하지 않습니다. `base`는 로봇 팔을 구동하고, `sentry`는 롤아웃을 기록합니다.
bashlerobot-rollout \ --strategy.type=base \ --policy.path=${HF_USER}/my_policy \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM1 \ --robot.cameras="{ up: {type: opencv, index_or_path: /dev/video10, width: 640, height: 480, fps: 30}}" \ --task="Put lego brick into the transparent box" \ --duration=60 # same run, recorded into an eval_ dataset lerobot-rollout \ --strategy.type=sentry \ --policy.path=${HF_USER}/my_policy \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM1 \ --dataset.repo_id=${HF_USER}/eval_so100 \ --dataset.single_task="Put lego brick into the transparent box" \ --duration=600
| Flag | What it does | Note |
|---|---|---|
| --policy.type=pi05 | Pi0.5 선택 | pretrained_path와 함께 필수, --policy.path와 함께 생략 |
| --policy.pretrained_path | 가중치만 로드 | 데이터셋의 특징 이름 사용, 저장된 설정은 재설정됨 |
| --policy.path | 가중치와 체크포인트 config.json | n_action_steps와 같은 저장된 설정이 상속됨 |
| --policy.n_action_steps | 청크당 소모되는 스텝 수 | 50으로 폴백, chunk_size(기본값 50)를 초과하지 않음 |
| --policy.train_expert_only | VLM을 고정하고 전문가를 훈련 | 기본값 false, 메모리 절약, 성공률에 약간의 비용 발생 |
| --policy.gradient_checkpointing | 활성화 저장 대신 재계산 | 기본값 false, 실행이 메모리에 맞지 않을 때 첫 번째 조치 |
| --peft.method_type=LORA | 전체 가중치 대신 LoRA 어댑터 | peft 추가 기능 필요, 문서화된 예시는 SmolVLA |
| --policy.rtc_training_max_delay | RTC를 위한 액션-접두사 조건화 | 메인 브랜치 전용, 0.6.1에는 없음, chunk_size 미만이어야 함 |
| --rename_map | 데이터셋 열을 정책 특징에 매핑 | 카메라 키가 다를 때 필요 |
분위수 없이 훈련하면 첫 번째 배치에서 ValueError: QUANTILES normalization mode requires q01 and q99 stats 오류가 발생합니다. 통계를 다시 계산해야 하지만, 결과는 --dataset.repo_id가 읽는 캐시가 아닌 $HF_LEROBOT_HOME/your_dataset에 저장되므로, --dataset.root를 해당 경로로 지정하여 훈련하거나 Hub에 푸시해야 합니다. 또는 LIBERO 참조 명령처럼 --policy.normalization_mapping='{"ACTION": "MEAN_STD", "STATE": "MEAN_STD", "VISUAL": "IDENTITY"}'를 사용하여 분위수를 건너뛸 수 있습니다.
세 가지 기본값 세트와 트레이너에 도달하는 기본값
openpi의 TrainConfig가 기준이며, LeRobot의 PI05Config는 아무것도 지정하지 않을 때 lerobot-train이 사용하는 설정이고, 여기 양식은 세 번째 설정을 보냅니다. 놀라운 점은 학습률입니다. 두 업스트림 기본값 모두 최대 2.5e-5이지만, openpi 자체의 pi05_libero 설정과 이 플랫폼은 이를 5e-5로 높입니다.
| 설정 | openpi TrainConfig | lerobot pi05 및 lerobot-train | AY-Robots 전송 |
|---|---|---|---|
| 배치 크기 | 32 | 8 | 1 |
| 최대 학습률 | 2.5e-5, 코사인 감쇠 | optimizer_lr 2.5e-5 | 5e-5 |
| 훈련 단계 | 30,000 | 100,000 | 30,000 |
| 체크포인트 간격 | 1,000 steps | 20,000 steps | 양식에 없음 |
| 시드 | 42 | 1,000 | 양식에 있음 |
| 액션 청크 | action_horizon 50 | chunk_size 50, n_action_steps 50 | 양식에 없음 |
| 가중치 dtype | bfloat16 | float32 until you pass --policy.dtype | 양식에 없음 |
| 그라디언트 누적 | 해당 설정 없음, 대신 fsdp_devices 사용 | 현재까지 모든 릴리스에 없음 | 16, 그리고 삭제됨 |
포트가 충실한가요? LeRobot 팀은 LIBERO 기본 모델을 6천 단계 더 미세 조정하고 openpi의 참조 수치와 네 가지 스위트에서 비교했습니다. 평균 97.5% 대 96.85%로, Libero 10에서는 앞섰고 Spatial에서는 뒤처졌습니다. 이 경로는 품질 선택이 아닌 도구 선택입니다.
- 10,000시간 이상의 로봇 사전 훈련이 기반이므로, 50 에피소드의 작업만으로도 충분할 수 있습니다.
- 연속적인 액션: 튜닝할 토크나이저가 없으며, 관절 각도에 대한 이산화 하한선이 없습니다.
- LeRobot 포트는 LIBERO 평균에서 openpi의 96.85% 대비 97.5%를 기록하므로, 더 친숙한 CLI는 측정 가능한 비용이 들지 않습니다.
- 양측 모두에서 매개변수 효율적인 경로: openpi의 JAX LoRA 변형, LeRobot의 PEFT 통합.
- 전체 미세 조정에는 70GB 이상이 필요합니다. 22.5GB LoRA 수치는 openpi의 JAX 수치이며, PEFT 하의 pi05에 대해서는 게시된 바가 없습니다.
- 액션 단계당 485ms로, 여기 다섯 가지 중 가장 느립니다. SmolVLA의 두 배, ACT의 스물네 배입니다.
- LeRobot v3.0이 필요하므로, GR00T 실행을 위해 기록된 데이터셋은 변환해야 하며, 그 반대도 마찬가지입니다.
- 새로운 옵션은 main 브랜치에 먼저 적용됩니다. 훈련 시간 RTC 및 MEM 메모리는 0.6.1에 포함되어 있지 않으므로, 최신 문서는 git에서 설치해야 함을 의미할 수 있습니다.
485ms의 현실, 그리고 사용 불가능해지는 지점
이것이 프로젝트를 결정하므로, 비용 테이블보다 먼저 나옵니다. 은 Pi0.5에 대해 여기서 측정된 액션 단계당 485ms입니다. 다른 네 가지와 비교하면 다음과 같습니다:
| 정책 | 액션 단계당 추론 | 매개변수 | GPU 등급 | 최소 에피소드 |
|---|---|---|---|---|
| ACT | 20 ms | ~80 M | RTX 4090 or any 24 GB card | 50 |
| GR00T N1.7 | 152 ms | ~3 B | A100 80 GB or H100 80 GB | 50 |
| GR00T N1.5 | 165 ms | ~3 B | A100 80 GB or H100 80 GB | 50 |
| SmolVLA | 245 ms | ~450 M | RTX 4090 or any 24 GB card | 30 |
| Pi0.5 | 485 ms | ~3 B | A100 80 GB or H100 80 GB | 50 |

이 다섯 가지 모델의 제어 루프는 액션 단계당 20~485ms가 소요됩니다. 485ms에 더해 공용 인터넷 왕복 시간은 작동하는 정책을 주저하는 정책으로 만듭니다. 원격 추론은 느린 픽앤플레이스에는 적합하지만, 빠른 반응형 움직임에는 적합하지 않습니다. 저희는 LAN에서만 작동하는 데모를 판매하기보다는 이 사실을 말씀드리는 것이 낫다고 생각합니다. 팔이 청크 사이에 멈춘다면, 정책이 동작 중간에 멈춤에서 시작하세요.
업스트림에는 해답이 있으며, 그 절반은 이미 설치할 수 있는 릴리스에 포함되어 있습니다. 실시간 청킹(Real-Time Chunking)은 팔이 현재 청크를 실행하는 동안 다음 청크를 생성한 다음, 새 청크의 겹치는 단계가 이미 실행된 부분에 가깝게 유지되도록 안내하여 팔이 이음새에서 멈추거나 삐걱거리지 않도록 합니다. Pi0, Pi0.5 및 SmolVLA용 0.4.2 변경 로그에 포함된 추론 시간 형식은 재훈련이 아닌 롤아웃 플래그입니다:
lerobot-rollout \
--strategy.type=base \
--policy.path=${HF_USER}/my_policy \
--inference.type=rtc \
--inference.rtc.execution_horizon=10 \
--inference.rtc.max_guidance_weight=10.0 \
--robot.type=so100_follower \
--robot.port=/dev/ttyACM1 \
--robot.cameras="{ up: {type: opencv, index_or_path: /dev/video10, width: 640, height: 480, fps: 30}}" \
--task="Put lego brick into the transparent box" \
--duration=60이것은 모델을 더 빠르게 만들지 않습니다. 이는 간격을 숨깁니다. 485ms는 여전히 소요되지만, 중요 경로에서 벗어나므로 청크 사이에 큐가 고갈되지 않습니다. arXiv 2512.05964의 훈련 시간 변형은 더 나아가 모델이 깨끗한 액션 접두사에 조건을 부여하는 방법을 학습하여 추론 시 오버랩이 안내되는 대신 액션별 흐름 타임스텝으로 하드 인페인팅되고 안내 역전파가 사라집니다. 훈련 중에는 예제당 접두사 길이를 샘플링하고 나머지 접미사에 대한 흐름 손실을 취합니다. 이 플래그는 0.6.1이 아닌 main에만 있으며, 훈련하는 지연 시간은 chunk_size보다 작아야 합니다.
Pi0.5 체크포인트를 얻는 두 가지 방법
80GB 카드를 빌리거나 소유하고, 위에 언급된 스택 중 하나를 설치하고, 데이터셋을 변환하고, 실행을 관리합니다. openpi의 JAX LoRA, LeRobot의 PEFT 어댑터, 상대적 동작, 사용자 지정 키 매핑 등 모든 설정을 직접 제어합니다. 또한 모든 실패도 직접 감당합니다.
- 하드웨어: A100 80GB 또는 H100, 또는 openpi의 JAX LoRA 경로를 사용하는 24GB 카드.
- 설정: 첫 실행에 반나절 소요, 주로 키 매핑 및 게이트 토크나이저.
- 호스팅된 형식에서는 제공되지 않음: PEFT 어댑터, 상대적 동작, 훈련 시간 RTC, MEM 메모리.
lerobot-train \
--dataset.repo_id=${HF_USER}/my_so100_dataset \
--policy.type=pi05 \
--policy.pretrained_path=lerobot/pi05_base \
--policy.rtc_training_max_delay=10 \
--policy.gradient_checkpointing=true \
--policy.dtype=bfloat16 \
--batch_size=4 --steps=30000 --seed=1000사용자는 훈련 양식에서 모델과 데이터셋을 선택하면, 백엔드가 필요한 VRAM에 따라 스팟 시장에서 GPU를 임대하고, 트레이너를 실행하며, 체크포인트를 객체 스토리지에 기록합니다. Pi0.5는 여기에서 클라우드 전용입니다. SO-100, SO-101, Koch v1.1 및 LeKiwi에 대한 가이드가 있습니다.
| 설정 | 플랫폼이 Pi0.5에 보내는 값 |
|---|---|
| 기본 체크포인트 | lerobot/pi05_base |
| 정책 유형 | pi05 |
| 배치 크기 | 1 |
| 학습률 | 5e-5 |
| 최대 스텝 | 30000 |
| 그라디언트 누적 | 16, 하지만 아래 경고 참조 |
| 양식의 추가 설정 | seed, logFreq |
| 데이터셋 형식 | LeRobot v3.0 |
| GPU 티어 | A100 80 GB 또는 H100 80 GB |
트레이너는 그라디언트 누적 값 16을 보내지만 lerobot 0.5.1에는 이를 받을 플래그가 없어 무시됩니다. 출시된 lerobot 버전에는 해당 플래그가 없으며, --accelerator.gradient_accumulation.steps로 메인 브랜치에만 존재합니다. 여기서 유효 배치 크기는 1이며, openpi의 pi05_libero 구성이 사용하는 256과 대조됩니다. 손실 곡선을 읽기 전에 알아두면 좋습니다. 이 설정은 GR00T N1.7 및 GR00T N1.5 실행에는 적용됩니다.
추론도 동일하게 작동합니다. 정책을 제공하기 위해 포드가 프로비저닝되고 로컬 클라이언트가 포드와 통신합니다. 포드에는 유휴 감시자가 있어 스스로 파괴되므로, 잊어버린 탭으로 인해 조용히 요금이 청구되지 않습니다. 지연 시간 주의사항이 적용되며, 이것이 20ms의 ACT가 빠른 작업에서 자주 승리하는 이유입니다.
작동하지 않을 때
| 증상 | 가장 가능성 높은 원인 |
|---|---|
| 시작 전에 실행 거부됨 | 데이터셋 v2.1이지만 Pi0.5는 v3.0을 원하거나, GR00T의 경우 반대 |
| ImportError, datasets 패키지 누락 | 훈련 추가 기능이 없는 lerobot 0.6.x |
| 배치 1에서 q01 및 q99에 대한 ValueError | meta/stats.json에 분위수 없음; 다시 계산하거나 MEAN_STD 사용 |
| 스텝 0에서 CUDA 메모리 부족 | 70GB 미만에서 전체 미세 조정; 체크포인팅 또는 train_expert_only 시도 |
| 401 또는 게이트된 레포 오류 | PaliGemma 토크나이저 라이선스 미승인 |
| 손실 감소, 로봇이 아무것도 하지 않음 | 정규화 불일치 또는 정책이 상태를 복사함 |
| 청크 사이에 팔이 멈춤 | 스텝당 지연 시간과 왕복 시간; 청크 큐가 고갈됨 |
| 한 설정에서는 작동하고 다른 설정에서는 실패함 | 에피소드 수가 너무 적거나, 모두 한 가지 구성에 있음 |
한 번 실행 비용
Pi0.5는 80GB 카드가 필요하고 스팟 가격이 변동하기 때문에 비싼 티어에 속하며, 따라서 이 수치는 가격이라기보다는 범위입니다. 많은 SO-100 작업의 경우, SmolVLA 또는 24GB 티어에서 ACT를 먼저 훈련하여 작업이 학습 가능한지 확인한 다음 A100 시간을 투자하십시오. 첫 번째 정책 훈련하기는 더 저렴한 루프를 안내하며, 가격 책정에는 현재 티어가 포함되어 있습니다.
| 티어 | 정책 | 일반적인 실행 | 시간당 가격 | 실행당 비용 |
|---|---|---|---|---|
| A100 80 GB or H100 | Pi0.5, GR00T N1.7, GR00T N1.5 | 3 to 6 hours | 1.20 to 2.00 USD | about 4 to 12 USD |
| RTX 4090 or any 24 GB card | SmolVLA, ACT | 2 to 5 hours | 0.30 to 0.60 USD | about 1 to 3 USD |

저녁 시간을 투자하기 전에: GR00T N1.7과 Pi0.5 비교 및 Pi0.5와 SmolVLA 비교에서 동일한 수치를 직접 비교합니다. 아레나에는 332개의 벤치마크 결과가 있는 85개의 VLA 모델이 있으며, 각 결과는 출처에 연결되어 있고, 해당 계열에 대한 배경 정보는 저희 VLA 개요에 있습니다.
스택을 구축하지 않고 Pi0.5 훈련하기
양식에서 데이터셋과 하이퍼파라미터를 선택하세요. 백엔드는 현물 시장에서 80GB 카드를 임대하고, 트레이너를 실행하며, 체크포인트를 객체 스토리지에 기록합니다. SO-100, SO-101, Koch v1.1 및 LeKiwi 가이드가 있습니다.
훈련 가이드 열기RTX 4090에서 Pi0.5를 미세 조정할 수 있나요?▾
전체 미세 조정은 아닙니다. openpi는 이를 위해 70GB 이상을 요구하므로 A100 80GB 또는 H100이 필요합니다. 22.5GB LoRA 수치는 JAX 경로에 해당하며, PyTorch 구현에는 LoRA가 없습니다. LeRobot의 PEFT 통합은 존재하지만, 문서화된 예시는 SmolVLA이며 pi05에 대한 VRAM 수치는 공개되지 않았습니다.
몇 개의 에피소드가 필요한가요?▾
50개입니다. GR00T 및 ACT와 동일한 최소치이며, SmolVLA만 30개로 더 낮습니다. 기본 체크포인트는 10,000시간 이상의 사전 훈련을 포함하므로, 미세 조정은 아무것도 없는 상태에서 학습하는 것이 아니라 적응하는 것입니다. 50개의 깨끗하고 다양한 에피소드가 한 가지 구성에서 나온 200개보다 낫습니다.
--policy.path와 --policy.pretrained_path의 차이점은 무엇인가요?▾
--policy.path는 가중치와 체크포인트의 config.json을 로드하므로, n_action_steps와 같은 저장된 설정이 상속되며 --policy.type은 생략해야 합니다. --policy.pretrained_path는 가중치만 로드합니다. 피처 이름은 데이터셋에서 가져오고, 저장된 설정은 재설정되며, --policy.type이 필요합니다. 이것이 LIBERO 명령이 n_action_steps=10과 empty_cameras=1을 명시적으로 전달하는 이유입니다. 그렇지 않으면 50과 0으로 되돌아갑니다.
공개 버전이 논문에 나온 전체 Pi0.5를 제공하나요?▾
아니요. 둘 다 흐름 일치 액션 헤드만 지원합니다. FAST 액션 토크나이저를 사용한 이산 토큰 사전 훈련 단계와 고수준 하위 작업 예측은 출시되지 않았으며, pi0.5 논문에는 강화 학습 단계가 설명되어 있지 않음에도 불구하고 lerobot/pi05_base 카드는 해당 목록에 RL을 추가합니다. 긴 작업을 스스로 분해하는 모델이 아니라, 사용자가 제공하는 언어 문자열에 따라 조건화된 저수준 정책을 훈련하는 것입니다.
이 가이드는 어떤 버전을 기준으로 작성되었나요?▾
메인의 openpi와 2026년 8월 3일 이후 릴리스된 lerobot 0.6.1은 모두 2026년 8월 23일에 읽혔습니다. v3.0 데이터셋은 2025년 10월 0.4.0과 함께 출시되었습니다. 0.6.0은 기본 패키지를 경량화하여 lerobot[pi]만으로는 더 이상 훈련 스택을 설치하지 않으며, 배포를 lerobot-rollout으로 옮겼습니다. 훈련 시간 RTC는 메인에서만 가능하며, 여기 호스팅된 트레이너는 0.5.1을 실행합니다.
Sources
- Physical-Intelligence/openpi: open-source models and packages for robotics
- openpi training configs, including pi05_libero and pi05_droid_finetune
- pi0: A Vision-Language-Action Flow Model for General Robot Control
- pi0.5: a Vision-Language-Action Model with Open-World Generalization
- Knowledge Insulating Vision-Language-Action Models: Train Fast, Run Fast, Generalize Better
- PaliGemma: A versatile 3B VLM for transfer
- Training-Time Action Conditioning for Efficient Real-Time Chunking
- LeRobot pi05 documentation on the main branch, including training-time RTC
- LeRobot documentation: parameter efficient fine-tuning with PEFT
- LeRobotDataset v3.0 format documentation
- LeRobot release notes: v0.3.2 through v0.6.1, with the v0.6.0 breaking changes
- LeRobot v0.5.0: Scaling Every Dimension
- lerobot/pi05_base model card
- LeRobot documentation: Real-Time Chunking (RTC)
- openpi Pi0Config: the model defaults pi0 and pi05 inherit
Ready for high-quality robotics data?
AY-Robots connects your robots to skilled operators worldwide.
Get Started