Learn(으)로 돌아가기

자신의 로봇 데이터 세트에 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 녹음 튜토리얼] (T18) 를 참조하거나 [오픈 데이터 세트] (T19) 를 RCSV 데이터 세트 허브에서 탐색하세요. 또한, 공개 데이터 세트를 자신의 작은 에피소드 세트와 혼합하여 모델에 목표한 사전을 줄 수 있습니다.

단계

  1. 하드웨어와 환경을 확인해

GPU와 CUDA를 확인하세요:

```
nvidia-smi
python -c "import torch; print(torch.cuda.is_available(), torch.cuda.get_device_name(0), torch.version.cuda)"
```

T8, GPU 이름, 그리고 PyTorch 빌드와 일치하는 CUDA 버전을 원하시면 깨끗한 환경이 필요하다면, 하나를 만들십시오:

```
conda create -n openvla python=3.10 -y
conda activate openvla
```
  1. OpenVLA와 의존성을 설치

OpenVLA 코드베이스 및 PEFT 스택을 설치하십시오. 가장 최신 설치 목표에 대해 [github.com/openvla/openvla] (T20) 상향 리포를 참조하십시오. 일반적인 패턴은 다음과 같습니다.

```
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는 선택적이지만 추적 실행에 강력히 권장됩니다.

  1. RLDS 형식으로 데이터 세트를 준비하세요

OpenVLA는 구글 리서치에서 TFDS 지원된 형식을 사용한다. 각 에피소드는 단계의 순서를 포함하고 있으며, 각 단계에는 T9 (사진, 상태), T10, T11, 그리고 T12이 있습니다.

이미 레로봇이나 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 데이터 세트 구성에 데이터 세트 이름을 등록하십시오. 액션 정상화 통계는 (평균 / 주당 차원) 를 계산하고 저장해야합니다.

  1. OpenVLA-7B 기본 중량을 다운로드

HuggingFace Hub에서 기본 모델을 꺼내:

```
huggingface-cli download openvla/openvla-7b --local-dir ./openvla-7b
```

이것은 약 15 GB입니다. 선택적으로 프로젝트에서 재사용을 위해 T13 아래 캐쉬하십시오.

  1. 로라를 설정해

오프닝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으로 올라갑니다. T14을 목표로 하는 것은 OpenVLA 참조 레시피와 일치합니다. 메모리가 제한이 있다면 단지 주의를 기울이는 프로젝션으로 제한할 수 있습니다.

  1. 미세조정을 시작하라

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 단계로 공감합니다.

** 팁:** 작은 데이터 세트에서 T15를 활성화하십시오. 50 에피소드 데이터 세트에서 무작위 작물과 색상의 이 큰 차이를 만듭니다.

  1. 훈련 모니터링

WandB 또는 텐서보드에서 세 가지 신호를 관찰하십시오. action MSE (당신의 기본 손실), gradient norm (정확해야 하며, 스피킹이 아니어야 한다) 및 per-dimension action accuracy (token accuracy for the tokenized action head)

  1. 로라를 합쳐서 평가해

훈련이 끝나면, 더 빠른 추론을 위해 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-엠보디먼트]T21) 또는 다른 공개 데이터 세트를 추가하여 모델에 더 넓은 전망을 제공합니다, (2) 80 GB GPU에 완전한 미세 조정을 시도합니다. 일반적으로 작업 성공의 2~5 퍼센트 포인트를 추가합니다. 그리고 (3) 다른 [VLA 모델]T22) Pi-Zero, Octo, RT-2 변종 모두 다른 강점을 가지고 있습니다.

만약 당신의 데이터 세트가 LeRobot에 의해 수집되었다면, 우리의 LeRobot 녹음 튜토리얼 은 캡처 측면을 다루고 있습니다. 양동력 작업에 대해서는 [ALOHA 텔레오프 리그 튜토리얼](T24 참조하십시오.

일반적인 실패 모드

OOM 시작: 8 비트 양자화 T16 또는 패치 크기를 떨어뜨리는 기능을 가능하게 합니다.

** 액션 MSE가 감소하지 않습니다:** 액션 정상화 통계는 정확하는지 확인합니다. 빈번한 오류는 잘못된 분할에 대한 계산 통계를 의미합니다.

정책은 로봇을 공동의 한계에 몰고 있습니다: 데이터 세트에 언어 명령 분포는 너무 좁습니다. 학습 대신 모형을 기억합니다. 보다 다양한 작업에 섞입니다.

유출이 느립니다: 로라를 합친 후 항상 T17와 bfloat16을 사용하세요.

깊이 잠수: 로라 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 다른 훈련 레시피입니다. 종종 에피소드 당 성공률이 높지만 독자적인 무게가 필요합니다. Octo는 연구에 유용한 작은 오픈 모델입니다. 우리의 [VLA 모델 비교](T25 참조).

설명 지연은 내 응용 프로그램에 중요합니다. OpenVLA-7B설명은 단일 A100에서 약 200 ms입니다. 너무 느린 경우, 더 작은 VLA, 양자화 또는 액션 쪼개기 전략을 확인하십시오.

관련 교과서 및 자원