Official implementation of VLA Grounder: Language-Conditioning Space Optimization for Black-Box VLA Models.
Project page · OpenReview · arXiv
VLA Grounder learns to rewrite a task instruction into a concise command for a frozen vision-language-action policy. The grounder is trained with Group Relative Policy Optimization (GRPO) using sparse rewards from complete robot rollouts; the downstream π0 or OpenVLA policy is never updated.
Clone the repository with its benchmark submodules:
git clone --recurse-submodules https://github.com/CognitiveAISystems/VLA-Grounder.git
cd VLA-GrounderBuild and enter the container:
docker/build.sh
docker/start.sh
docker/exec.shPython packages are installed after the container starts:
scripts/install.shThe installation creates two virtual environments because the frozen VLA implementations and Qwen3.5/GRPO require incompatible versions of PyTorch and Transformers:
envs/vla-groundercontains ManiSkill, SimplerEnv, π0, and OpenVLA.envs/grpocontains Qwen3.5, PEFT, and TRL.
Baseline evaluation without a grounder requires only the first environment:
scripts/install.sh --eval-onlyExact package versions are recorded in requirements.lock and requirements-training.lock. Runtime dependencies are intentionally installed by scripts/install.sh, not through the package metadata, because the two environments require incompatible dependency stacks.
The benchmark scenes and assets come from the pinned BlindVLA and RL4VLA submodules. Install the required asset links with:
scripts/install_assets.shThe container reads models from a read-only Hugging Face cache and runs with offline loading enabled. Set HF_HOME before starting it and download the models to that cache on the host:
export HF_HOME=/path/to/huggingface/cache
hf download Qwen/Qwen3.5-9B
hf download juexzz/INTACT-pi0-finetune-bridge
hf download gen-robot/openvla-7b-rlvla-rl
hf download Damirchik/vla-grounder-qwen3.5-9b-vl-think-pi0Download the grounder checkpoint selected in the evaluation configuration. Private or gated models require a Hugging Face token on the host.
The article experiments are defined by four configurations:
scripts/train.sh configs/train/vl_think_pi0.yaml
scripts/train.sh configs/train/vl_think_openvla.yaml
scripts/train.sh configs/train/rl4vla_pi0.yaml
scripts/train.sh configs/train/rl4vla_openvla.yamlThe provided configurations use one GPU for frozen-VLA rollouts and one GPU for GRPO. Set environment.device and model.device to the desired device indices. Checkpoints are saved every 400 steps for VL-Think and every 300 steps for RL4VLA. Training follows training.max_steps; when this exceeds the number of samples collected at startup, the Trainer continues over the same rollout dataset in the next epoch.
Three rollout modes reproduce the execution schemes used in the experiments:
singlekeeps one simulator batch for one scene.efficientshares one frozen policy and recreates the simulator batch for each rollout.parallelshares one frozen policy and retains one simulator batch per scene.
Within each GRPO group, all generated commands use the same scene, split, episode ID, and initial object configuration. The implementation also retains the original command parsing and repeated-policy-rollout (RPP) behavior used in the experiments.
Run the three-seed benchmark suites with:
scripts/evaluate.sh configs/eval/vl_think_pi0.yaml
scripts/evaluate.sh configs/eval/rl4vla_pi0.yaml
scripts/evaluate.sh configs/eval/vl_think_openvla.yaml
scripts/evaluate.sh configs/eval/rl4vla_openvla.yamlVL-Think evaluates Arrow, Color, Laundry, Public Info, Shape, Traffic, and Weather. RL4VLA evaluates MultiCarrot and MultiPlate. Each scene and seed loads a fresh frozen VLA policy and writes a YAML result with episode IDs, parsed commands, outcomes, and aggregate metrics. Evaluation does not record videos.
Run the frozen-VLA baselines without installing the GRPO environment:
scripts/evaluate.sh configs/eval/vl_think_pi0_baseline.yaml
scripts/evaluate.sh configs/eval/rl4vla_pi0_baseline.yaml
scripts/evaluate.sh configs/eval/vl_think_openvla_baseline.yaml
scripts/evaluate.sh configs/eval/rl4vla_openvla_baseline.yamlBaseline configurations contain only grounder.enabled: false; model and checkpoint fields are not required.
Merge a training adapter into a standalone Qwen3.5 checkpoint with:
scripts/merge_lora.sh \
--adapter outputs/train/rl4vla_pi0/checkpoint-1200 \
--output outputs/merged/rl4vla_pi0The base model is read from adapter_config.json; pass --base-model to override it. Evaluation accepts either an adapter or a merged checkpoint through grounder.checkpoint.
| Benchmark | Reward VLA | Checkpoint |
|---|---|---|
| VL-Think | π0 | vla-grounder-qwen3.5-9b-vl-think-pi0 |
| VL-Think | OpenVLA | vla-grounder-qwen3.5-9b-vl-think-openvla |
| RL4VLA | π0 | vla-grounder-qwen3.5-9b-rl4vla-pi0 |
| RL4VLA | OpenVLA | vla-grounder-qwen3.5-9b-rl4vla-openvla |
Selected commands can be recorded as a grid of raw environment frames:
scripts/record_video.sh \
--config configs/eval/rl4vla_pi0.yaml \
--scene PutOnPlateInScene25MultiCarrot-v1 \
--prompts prompts.txt \
--output outputs/multicarrot.mp4@inproceedings{shodievvla,
title={VLA Grounder: Language-Conditioning Space Optimization for Black-Box VLA Models},
author={Shodiev, Damir and Staroverov, Aleksei and Kachaev, Nikita and Kovalev, Alexey and Panov, Aleksandr},
booktitle={Decision-Making from Offline Datasets to Online Adaptation: Black-Box Optimization to Reinforcement Learning}
}This code builds on BlindVLA, RL4VLA, INT-ACT, ManiSkill, SimplerEnv, LeRobot, and OpenVLA. The π0 policy wrapper and supporting pipeline code under third_party/ are adapted from INT-ACT. The experiments use Qwen3.5-9B, INT-ACT π0, and the RL4VLA OpenVLA checkpoint. We thank the authors for making their code, environments, assets, and models available.
Except for the third-party components identified below, this repository is released under the Apache License 2.0. Third-party components retain their original terms. In particular, the files under third_party/agent, third_party/experiments, and third_party/utils are derived from INT-ACT, remain copyright of their original authors, and are not covered by this repository's Apache-2.0 license. See third_party/NOTICE for provenance details.
