자신의 로봇 데이터 세트에 OpenVLA를 정렬하는 방법
로라 정렬 OpenVLA-7B를 RLDS 로봇 데이터 세트에 적용하여 GPU 크기와 PEFT 구성, 데이터 로더, 훈련 루프 및 3시간 이내에 평가합니다.
OpenVLA-7B는 가장 인기있는 오픈 비전 언어 액션 모델입니다. 이 튜토리얼은 로라 기반의 미세 조정 작업을 통해 자신의 RLDS 데이터 세트를 진행합니다. 하드웨어 크기와 PEFT 구성, 데이터 로더 설정, 훈련 및 실제 로봇에 대한 평가.
VLA / 정비 정비 총 시간: 약 3시간 (더 이상 훈련 시간) 어려움: 고급 업데이트 2026년 4월
당신 이 성취 할 것
이 튜토리얼의 끝으로 여러분은 로라 정비된 OpenVLA-7B 체크포인트가 있습니다. 로라 (Low-Rank Adaptation) 는 대부분의 팀에 적합한 선택입니다. 그것은 전체 미세 조정에 대한 VRAM 요구 사항을 ~ 100 GB에서 약 24 GB로 줄이고, 소박한 데이터 세트 (몇 백 에피소드) 에 빠르게 공감하고, 배포하기 쉬운 작은 어댑터를 생산합니다.
OpenVLA는 스탠퍼드 IRIS 연구소와 협력자들이 관리하고 있다. 기본 7B 모델은 22개 실시예에 걸쳐 거의 백만 개의 궤도를 포함하는 데이터 세트인 Open X-Embodiment에서 미리 훈련되었다. 정교 조정은 특정 로봇, 객체 및 지침에 대한 사전 지식을 집중시킵니다.
전제 조건
- ** 24 GB+ VRAM GPU.** A100 40/80 GB, H100, RTX 4090, 또는 L40S 모두 작동합니다. 24 GB의 RTX 3090는 작동하지만 꽉 차 있습니다.
- RLDS 데이터 세트 적어도 50개의 에피소드 (200+가 권장된다) 를 포함하여 이미지 관찰, proprioception 및 자연어 작업 지침을 제공합니다.
- PyTorch, HuggingFace 트랜스포머, 그리고 모방 학습 기본에 대한 친숙함.
- Ubuntu 22.04 또는 20.04 CUDA 12.1+ 드라이버로
- 200GB 무료 디스크 모델 무게, 체크포인트, 그리고 데이터 세트
아직 데이터 세트를 가지고 있지 않다면 먼저 하나를 수집하세요. 먼저 [LeRobot 녹음 튜토리얼] (
단계
- 하드웨어와 환경을 확인해
GPU와 CUDA를 확인하세요:
```
nvidia-smi
python -c "import torch; print(torch.cuda.is_available(), torch.cuda.get_device_name(0), torch.version.cuda)"
```
```
conda create -n openvla python=3.10 -y
conda activate openvla
```
OpenVLA와 의존성을 설치
OpenVLA 코드베이스 및 PEFT 스택을 설치하십시오. 가장 최신 설치 목표에 대해 [github.com/openvla/openvla] (
```
git clone https://github.com/openvla/openvla.git
cd openvla
pip install -e .
pip install peft bitsandbytes accelerate wandb
```
PEFT는 LoRA 구현을 제공합니다. bitsandbytes는 기본 모델에 대한 8 비트 양자화를 제공합니다. 그래서 24 GB에 적합합니다. 가속 핸들 분산 훈련. wandb는 선택적이지만 추적 실행에 강력히 권장됩니다.
- RLDS 형식으로 데이터 세트를 준비하세요
OpenVLA는 구글 리서치에서 TFDS 지원된 형식을 사용한다. 각 에피소드는 단계의 순서를 포함하고 있으며, 각 단계에는
이미 레로봇이나 HDF5에 있는 데이터라면 변환해야 합니다. 오픈 X-Embodiment 저장소는 사용자 정의 할 수 있는 참조 변환기를 포함합니다. 최소한의 RLDS 빌더는 다음과 같습니다.
```
import tensorflow_datasets as tfds
class MyRobotDataset(tfds.core.GeneratorBasedBuilder):
VERSION = tfds.core.Version('1.0.0')
def _info(self):
return tfds.core.DatasetInfo(
builder=self,
features=tfds.features.FeaturesDict({
'steps': tfds.features.Dataset({
'observation': tfds.features.FeaturesDict({
'image': tfds.features.Image(shape=(224, 224, 3)),
'state': tfds.features.Tensor(shape=(7,), dtype=tf.float32),
}),
'action': tfds.features.Tensor(shape=(7,), dtype=tf.float32),
'language_instruction': tfds.features.Text(),
'is_terminal': tfds.features.Scalar(dtype=tf.bool),
}),
})
)
```
이 빌더를 에피소드 파일로 표시하고 OpenVLA 데이터 세트 구성에 데이터 세트 이름을 등록하십시오. 액션 정상화 통계는 (평균 / 주당 차원) 를 계산하고 저장해야합니다.
OpenVLA-7B 기본 중량을 다운로드
HuggingFace Hub에서 기본 모델을 꺼내:
```
huggingface-cli download openvla/openvla-7b --local-dir ./openvla-7b
```
이것은 약 15 GB입니다. 선택적으로 프로젝트에서 재사용을 위해
- 로라를 설정해
오프닝VLA의 기본 출발점은 주의 모듈을 대상으로 하는 LoRA 순위 32입니다. PEFT에서는 다음과 같습니다.
```
from peft import LoraConfig, get_peft_model
lora_config = LoraConfig(
r=32,
lora_alpha=16,
target_modules="all-linear",
lora_dropout=0.0,
bias="none",
task_type="CAUSAL_LM",
)
```
32 순위는 50~500 에피소드에서 상식적으로 기본 설정되어 있습니다. VRAM가 좁으면 16으로 떨어집니다. 더 큰 데이터 세트에서는 64으로 올라갑니다.
- 미세조정을 시작하라
OpenVLA 리포에서 참조 피네툰 스크립트를 사용하십시오. 정확한 입점점은 리포를 통해 이동합니다. 리포의 README를 확인합니다.
```
torchrun --standalone --nnodes 1 --nproc-per-node 1 \
vla-scripts/finetune.py \
--vla_path ./openvla-7b \
--data_root_dir /path/to/rlds \
--dataset_name my_robot_dataset \
--run_root_dir ./runs \
--adapter_tmp_dir ./adapter-tmp \
--lora_rank 32 \
--batch_size 16 \
--grad_accumulation_steps 1 \
--learning_rate 5e-4 \
--image_aug True \
--wandb_project openvla-finetune
```
A100 80 GB의 단일 A100에서 10k 단계에 1시간 정도를 예상합니다. 전형적인 200 에피소드 데이터 세트는 20~40k 단계로 공감합니다.
** 팁:** 작은 데이터 세트에서
훈련 모니터링
WandB 또는 텐서보드에서 세 가지 신호를 관찰하십시오. action MSE (당신의 기본 손실), gradient norm (정확해야 하며, 스피킹이 아니어야 한다) 및 per-dimension action accuracy (token accuracy for the tokenized action head)
- 로라를 합쳐서 평가해
훈련이 끝나면, 더 빠른 추론을 위해 LoRA 어댑터를 기본 모델에 통합하십시오.
```
from peft import PeftModel
from transformers import AutoModelForVision2Seq
base = AutoModelForVision2Seq.from_pretrained('./openvla-7b', torch_dtype=torch.bfloat16)
model = PeftModel.from_pretrained(base, './runs/my_robot_dataset/adapter')
merged = model.merge_and_unload()
merged.save_pretrained('./openvla-7b-my-robot')
```
이제 평가: 한 에피소드에서 통합 모델을 실행하고 예측된 동작을 기본 진실과 비교하거나 실제 로봇에 배치하여 20 번의 실험에서 작업 성공률을 측정하십시오. 실제 로봇의 배포를 위해 이미지 사전 처리 및 동작 비정상화를 처리하는 OpenVLA 추론 포장지를 사용하십시오.
다음으로 어떻게 해야 할까요?
로라 어댑터가 작동하면 자연스러운 세 가지 추적이 있습니다. (1) 더 많은 데이터에 확장하여 [오픈 X-엠보디먼트]
만약 당신의 데이터 세트가 LeRobot에 의해 수집되었다면, 우리의 LeRobot 녹음 튜토리얼 은 캡처 측면을 다루고 있습니다. 양동력 작업에 대해서는 [ALOHA 텔레오프 리그 튜토리얼](
일반적인 실패 모드
OOM 시작: 8 비트 양자화
** 액션 MSE가 감소하지 않습니다:** 액션 정상화 통계는 정확하는지 확인합니다. 빈번한 오류는 잘못된 분할에 대한 계산 통계를 의미합니다.
정책은 로봇을 공동의 한계에 몰고 있습니다: 데이터 세트에 언어 명령 분포는 너무 좁습니다. 학습 대신 모형을 기억합니다. 보다 다양한 작업에 섞입니다.
유출이 느립니다: 로라를 합친 후 항상
깊이 잠수: 로라 vs 풀 핏 튜닝 vs 처음부터
스펙트럼에 3가지 옵션이 있습니다. Full fine-tune는 7B 모델의 모든 매개 변수를 업데이트합니다. 일반적으로 충분한 데이터 (500+ 에피소드) 및 80 GB GPU를 가지고있을 때 가장 좋은 작업 성공률을 생성합니다. 왜냐하면 모델은 모든 표현을 구현에 적응 할 수 있기 때문입니다. LoRA는 하위 계층의 하위 계층에 낮은 순위 어댑터를 추가하고, 기반을 얼어붙이고, 작은 데이터 세트에 빠르게 공감합니다. 중형 조작 데이터 세트에 대한 실험에서, LoRA는 계산의 1/4에서 전체 미세조율 성능의 90~95%에 도달합니다. ** 처음부터** VLA 규모 모델에서는 거의 의미가 없습니다.
제4의 경로는 DoRA (중량 분해된 저급 적응) 이다. 이 방법은 무게를 규모와 방향 구성 요소로 분해한다. DoRA는 로라에 대한 작은 양의 매개 변수를 추가하고, 종종 전체 미세한 조화를 위해 격차를 더 닫는다. PEFT는 로라를 박스 밖으로 지원합니다.
깊이 심어지는: 데이터 세트의 품질은 데이터 세트의 크기를 능가한다
팀들은 에피소드 수를 과잉하고 에피소드 다양성에 과잉 투자한다. 20개의 조명 및 객체 위치 변종을 통해 200개의 에피소드는 같은 장면의 1000개의 에피소드를 이길 수 있다. VLA 정렬은 주로 무엇을 해야 하는지 배우지 않고 기본 모델은 이미 대략적인 조작 전례를 알고 있습니다.
작동하는 구체적인 요리법: 200 에피소드 내에 20cm x 20cm 그리드 (10개의 위치 최소) 에서 초기 객체 위치를 변경하고, 3개의 조명 조건에서 기록하고, 같은 명령어의 5개의 자연어 문장을 회전합니다. 이것은 수집 중에 약 50% 더 많은 작업이지만, 미세한 조율을 크게 향상시킵니다.
심층 다이빙: 평가하는 것이 팀들이 잘못하는 곳입니다
가장 흔한 오류는 같은 녹음 세션에서 지연된 에피소드를 평가하는 것입니다. 이는 일반화보다는 간섭을 측정합니다. 실제 평가에는 세 단계가 있습니다. (1) 동일한 세션에서 **제정된 **능력 제한의 하위 경계, (2) 다른 날 / 조명에서 *제정된 현실적 견고성 검증, (3) 새로운 작업 문장 또는 약간 새로운 객체*에서 **제정된 **제정된 **제정된 **제정된 **제정된 **제정된 VLA를 디모에서만 사용할 수 있는 VLA에서 분리하는 것. 적절한 평가에 대한 후보 체크포인트마다 최소 30분간의 실제 로봇 시간을 예산.
자주 묻는 질문
** 몇 에피소드가 필요합니까?** 50은 비 소소한 결과의 최소입니다. 200은 좋은 목표입니다. 500+는 대부분의 단일 작업에 대한 LoRA 용량을 포화합니다.
** 다중 작업 데이터에 미세조정을 할 수 있습니까?** 네, 그리고 보통 도움이 됩니다. 7B OpenVLA 척추는 어댑터당 여러 작업을 흡수 할 수 있는 헤드룸을 가지고 있습니다.
Pi-Zero는 피시컬 인텔리전스의 흐름에 맞는 VLA
설명 지연은 내 응용 프로그램에 중요합니다. OpenVLA-7B설명은 단일 A100에서 약 200 ms입니다. 너무 느린 경우, 더 작은 VLA, 양자화 또는 액션 쪼개기 전략을 확인하십시오.







