This repository serves as the official artifact for the paper A Systematic Evaluation of Vision Language Action Models Across Workspace and Data Regimes. It provides a comprehensive suite of tools for dataset generation, model fine-tuning, and simulation-based evaluation of Vision-Language-Action (VLA) models.
The goal of this repository is to ensure full reproducibility of the experiments reported in the paper. The codebase follows a client-server architecture to decouple simulation from model inference, allowing for flexible evaluation of heavy VLA models.
| High Camera View | ||
|---|---|---|
high_1.mp4 |
high_2.mp4 |
high_3.mp4 |
| Front Camera View | ||
front_1.mp4 |
front_2.mp4 |
front_3.mp4 |
The repository allows for versioned experimentation. The folders v1 and v2 correspond to the specific experimental iterations discussed in the paper. Both versions have identical directory structures, differing only in configuration choices and model checkpoints.
.
βββ v1/ # Version 1 experiments (See details below)
βββ v2/ # Version 2 experiments (Identical structure to v1)
βββ Isaac-GR00T/ # Simulator Submodule (pinned to paper version)
βββ groot_service.py # Server: Main entrypoint for the VLA model
βββ install.md # Setup: Environment & dependency instructions
βββ datasets/ # Data
β βββ v1_test_dataset/ # Example evaluation dataset (not included in the repository)
βββ models/ # Fine-tuned Weights
β βββ v1_gr00t/ # Example fine-tuned model (not included in the repository)
βββ README.md
Below is the detailed structure for the experiment folders.
v1
βββ config/ # Simulation configurations
β βββ cameras.py # Camera intrinsics/extrinsics
β βββ trossen_robots.py # Robot specifications
β βββ ...
βββ data_creation/ # Dataset generation pipeline
β βββ create_data.sh # ENTRYPOINT: Script to generate datasets
β βββ multi_gpu_controller.sh # Parallel generation for large scale data
β βββ ...
βββ inference/ # Evaluation pipeline
β βββ run_inference.py # ENTRYPOINT: Run single-model evaluation
β βββ inference_service_adapters/
β β βββ groot.py # Adapter for GR00T model
β β βββ pi0.py # Adapter for Pi0 model
β β βββ sample.py # Template for adding new models
β βββ ...
βββ usd/ # Universal Scene Description assets
βββ utils/ # Shared utility scripts
This repository relies on Isaac-GR00T as a core simulation backend. It is included as a Git submodule and pinned to the exact commit used in our experiments to guarantee deterministic behavior.
# Clone the repository
git clone git@github.com:purwar-lab/vla.git
cd vla
# Initialize and update submodules
git submodule update --init --recursivePlease refer to install.md for exact environment specifications. Do not deviate from the package versions listed there, as this may break physics determinism or model loading.
We generate synthetic datasets for "Pick and Place" and other manipulation tasks.
- Navigate to:
v1/data_creation/ - See
v1/data_creation/README.mdfor generation scripts and configuration details.
Training code is decoupled by model architecture to handle specific dependency requirements.
- Locate your model: Go to the specific model folder (e.g.,
v1/models/gr00t). - Follow local instructions: Each model folder contains a
READMEwith training commands.
We utilize a Client-Server architecture for evaluation. This allows the simulator (Client) to run in a lightweight environment while the VLA model (Server) runs in a heavy GPU environment.
This service loads the model weights and listens for observations from the simulator.
python groot_service.py \
--model_path models/v1_gr00t/checkpoint-70000 \
--port 4545--model_path: Path to your fine-tuned checkpoint.--port: The socket port for communication.
In a separate terminal (and potentially a separate environment), launch the evaluator.
python v1/inference/run_inference.py \
--inference_service_name groot \
--inference_server_port 4545 \
--hdf5_file_or_folder_path datasets/v1_test_dataset \
--num_episodes 100 \
--enable_cameras \
--headless | tee v1_infer.log| Argument | Description |
|---|---|
inference_service_name |
Matches the adapter name (e.g., groot, pi0). |
hdf5_file_or_folder_path |
The dataset containing initial states/prompts. |
enable_cameras |
Renders visual observations for the VLA. |
headless |
Runs without GUI. |
The pipeline is model-agnostic. To benchmark a new architecture:
- Create an Adapter: Write a Python wrapper that standardizes inputs/outputs.
- Save: Place it in
v1/inference/inference_service_adapters/. - Reference: Use
sample.pyas a template or look atgroot.pyfor a complex example.
Bulk Evaluation: To evaluate multiple models sequentially, use the multi-model runner: "" python v1/inference/run_multi_model_inference.py ""
The evaluation script generates v1_infer.log that contains metrics containing:
- β Episode Success Rates (SR)
- β±οΈ Runtime Statistics
- π Task-specific failure modes
These metrics correspond directly to the tables in the paper.
- Determinism: While we pin submodules, results may vary slightly based on GPU hardware (floating point non-associativity).
- Headless Mode: We strongly recommend
headlessmode for large-scale evaluation (100+ episodes) to reduce rendering overhead.