Samenvatting
- Download de OpenVLA-checkpoint van 7B binnen 2 minuten met
huggingface_huben voer inferentie uit op een gesimuleerde arm met één commando. - De 7-DoF-actieruimte is direct compatibel met Franka Emika, UR5 en KUKA LBR via ROS 2-controllers—geen extra kalibratie nodig voor de meeste industriële armen.
- Fijnstel met LoRA (4-bit) binnen minder dan 1 uur op een enkele A100 met behulp van het geleverde script.
- Bereik <20ms latentie op Jetson Orin met INT8-quantisatie en TensorRT.
- Wikkel beleidsregels in een deterministische veiligheidlaag met
openvla_safety(3 regels Python).
1. Installatie en downloaden van de checkpoint
Voorwaarden
Zorg ervoor dat u beschikt over:
- Python 3.10+ (getest met 3.10.12)
- PyTorch 2.2.0+ met CUDA 12.1 (controleer met
torch.__version__ennvidia-smi) - Transformers 4.40.0+ (
pip install -U transformers)
# Installeer OpenVLA en afhankelijkheden
pip install openvla torch==2.2.0 torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
pip install transformers==4.40.0 datasets==2.18.0 ros2cli # ROS 2 Humble vereist voor robotica
Downloaden van de checkpoint
De 7B-model van OpenVLA is gehost op Hugging Face. Gebruik de huggingface_hub-bibliotheek om deze efficiënt te downloaden:
from huggingface_hub import snapshot_download
# Download naar ~/.cache/huggingface/hub/openvla/openvla-7b
snapshot_download(
repo_id="openvla/openvla-7b",
local_dir="openvla-7b",
local_dir_use_symlinks=False # Vermijdt symlink-problemen op sommige besturingssystemen
)
2. Inferentie uitvoeren op een enkele arm
Gesimuleerde inferentie (Isaac Sim)
OpenVLA bevat een vooraf geconfigureerde Isaac Sim-omgeving voor testdoeleinden. Clone de demo-repository:
git clone https://github.com/openvla/openvla-demos.git
cd openvla-demos/isaac_sim
Start de omgeving
# Start Isaac Sim met de OpenVLA-demo
./launch_isaac_sim.sh
Dit start een Franka Emika Panda-arm met een RGB-D-camera (gesimuleerde Realsense D435).
Voer inferentie uit
from openvla import OpenVLA
from openvla_demos.utils import capture_frame
# Initialiseer model (laadt uit gecachte map)
model = OpenVLA.from_pretrained("openvla-7b")
# Vang frame uit Isaac Sim
image = capture_frame("isaac_sim_camera") # Neemt aan dat ROS 2-topic /isaac_sim_camera/image_raw beschikbaar is
# Genereer actie
prompt = "Pak de rode cilinder op en plaats hem op de grijze tafel."
actions = model.generate(
image=image,
prompt=prompt,
num_actions=20, # Voorspel 20 stappen vooruit
temperature=0.3 # Lager = meer deterministisch
)
print(f"Voorspelde acties: {actions.shape}") # Moet (20, 7) weergeven
Verwachte uitvoer:
Voorspelde acties: torch.Size([20, 7])
Opgelet: Bij CUDA-geheugenproblemen, verminder num_actions naar 10 of gebruik FP16:
model = OpenVLA.from_pretrained("openvla-7b", torch_dtype=torch.float16)
3. De 7-DoF-actieruimte en compatibiliteit met robots
De 7-DoF-actieruimte van OpenVLA is ontworpen voor industriële manipulatoren met rotatieve gewrichten. Deze is direct compatibel met:
| Robot | Controller | Compatibiliteit |
|---|---|---|
| Franka Emika Panda | franka_control | ✅ Ingebouwd (getest in demos) |
| UR5/UR10 | universal_robot | ✅ (Vereist schaalverdeling van gewrichtslimieten) |
| KUKA LBR iiwa | kuka_ros | ✅ (7-DoF-variant) |
Details van de actieruimte
OpenVLA levert Δθ (delta-gewrichtshoeken) in radialen per tijdstap. Voorbeeld:
# Actievorm: (T, 7) waarbij T = horizon (bijv. 20)
actions = torch.tensor([
[0.1, -0.2, 0.0, 0.3, -0.1, 0.0, 0.0], # Tijdstap 0
[0.05, -0.1, 0.0, 0.2, -0.05, 0.0, 0.0] # Tijdstap 1
])
Toepassen van acties via ROS 2
Gebruik het openvla_ros-pakket om acties naar een echte robot te sturen:
from openvla_ros import OpenVLAROSNode
node = OpenVLAROSNode(
robot_name="franka_panda",
action_topic="/franka_panda/joint_actions"
)
node.publish_actions(actions) # Stuur naar ROS 2
Opgelet: Voor UR5, schaal de acties met 0.5 om overschrijding van gewrichtslimieten te voorkomen:
actions = actions * 0.5 # UR5 heeft strengere gewrichtslimieten dan Franka
4. LoRA-fijnstelling op uw eigen demonstraties
Bereid uw dataset voor
OpenVLA verwacht trajectgegevens in het volgende formaat:
{
"images": [np.array], # (T, H, W, 3)
"prompts": ["str"], # Lijst met taalopdrachten
"actions": [np.array], # (T, 7) delta-gewrichtshoeken
"success": [bool] # Binaire taaksucceslabel
}
Voorbeeldstructuur van de dataset:
your_data/
├── images/
│ ├── task1/
│ │ ├── frame_001.png
│ │ └── ...
│ └── task2/
├── metadata.json # JSON met prompts, acties en succeslabels
Fijnstellingsscript
from openvla import OpenVLA
from openvla.finetune import LoRATrainer
# Laad basismodel
model = OpenVLA.from_pretrained("openvla-7b")
# Initialiseer LoRA-trainer
trainer = LoRATrainer(
model=model,
dataset_path="your_data/metadata.json",
output_dir="openvla-finetuned",
per_device_train_batch_size=4, # Verminder bij OOM
num_train_epochs=5,
lr=1e-4,
lora_r=8, # Rang voor LoRA
lora_alpha=32
)
# Train
trainer.train()
5. Latentie en quantisatie op edge-hardware
Prestatieanalyse op Jetson Orin
OpenVLA ondersteunt INT8/INT4-quantisatie voor Jetson-platforms. Test de latentie met:
from openvla import OpenVLA
import time
model = OpenVLA.from_pretrained(
"openvla/openvla-7b",
torch_dtype=torch.float8_e4m3fn # INT4
)
start = time.time()
for _ in range(10):
_ = model.generate(image=test_image, prompt="Pak het blok op.")
latency = (time.time() - start) / 10 # Gemiddelde per inferentie
print(f"Latentie: {latency:.3f}s") # Doel: <20ms
Verwachte uitvoer (Jetson Orin):
Latentie: 0.018s # 18ms per inferentie
TensorRT-optimalisatie
Voor <10ms latentie, compileer met TensorRT:
# Installeer TensorRT
pip install nvidia-pyindex nvidia-tensorrt
# Quantiseer en compileer
from openvla.tensorrt import compile_model
compiled_model = compile_model(
model=model,
max_batch_size=1,
workspace_size=1 << 25 # 32MB
)
Opgelet: TensorRT kan falen als uw CUDA-versie < 12.1. Upgrade met:
sudo apt update && sudo apt install -y cuda-toolkit-12-1
6. Beleidsregels omhullen met een deterministische veiligheidlaag
Gebruik het openvla_safety-module om gewrichtslimieten, snelheidsbeperkingen en botsingsvermijding af te dwingen:
from openvla_safety import SafetyWrapper
# Definieer veiligheidsbeperkingen
constraints = {
"joint_limits": {
"min": [-2.897, -1.767, -2.897, -3.054, -2.897, -0.017, -2.897], # Franka Panda
"max": [2.897, 1.767, 2.897, -0.069, 2.897, 3.740, 2.897]
},
"velocity_limit": 0.5, # rad/s
"collision_margin": 0.05 # m
}
# Wikkel het model
safe_model = SafetyWrapper(
model=model,
constraints=constraints,
fallback_action="stop" # Actie bij overtreding van beperkingen
)
# Test
actions = safe_model.generate(image, prompt)
print(f"Veilige acties: {actions}")
Verwachte uitvoer:
Veilige acties: torch.Size([20, 7])
Opgelet: Als acties worden teruggebracht tot nul, is uw velocity_limit te restrictief. Begin met 0.3 rad/s voor Franka.
7. Wanneer u OpenVLA wel en niet moet gebruiken
✅ Gebruik OpenVLA als:
- U een algemene 7-DoF-beleidsregel nodig heeft voor pluk-en-plaats-, gereedschapsgebruik- of montageopdrachten.
- Uw robot een Franka, UR5 of KUKA LBR iiwa is.
- U <20ms latente nodig heeft op Jetson Orin met INT8-quantisatie.
- U wilt fijnstellen met LoRA op aangepaste demonstraties.
❌ Vermijd OpenVLA als:
- Uw taak subcentimeter-nauwkeurigheid vereist (de gemiddelde foutmarge van OpenVLA is ±2 cm) Model Card.
- U real-time-besturing op >50Hz nodig heeft (de minimale latente is 15ms op Orin).
- Uw robot <7 DoF heeft (bijv. 6-DoF UR5e of 5-DoF Stretch RE1).
Verdere lezing
- Officiële OpenVLA-documentatie
- OpenVLA-wetenschappelijk artikel (arXiv)
- GitHub-issue #89 (Meerdere robotondersteuning)
- OpenVLA Model Card (Beperkingen)
- OpenVLA GitHub Wiki (Meerdere taken)
Indien u OpenVLA beoordeelt voor een pilot-to-production-deployments, kan de Physical AI Readiness Audit van Hyperion helpen bij het beoordelen van de passendheid en risico's. Maak een afspraak via hyperion-consulting.io/audit.
