Instructions to use dexverse/openvla-oft-dexverse with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use dexverse/openvla-oft-dexverse with Transformers:
# Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("dexverse/openvla-oft-dexverse", device_map="auto") - Notebooks
- Google Colab
- Kaggle
OpenVLA-OFT DexVerse baseline checkpoints
OpenVLA-OFT policies finetuned on the
DexVerse tabletop dexterous-manipulation
benchmark, for use with the online evaluation harness in scripts/eval/.
Two embodiments of a floating Shadow hand are covered:
| folder | embodiment | tasks | images | state | actions | unnorm_key |
|---|---|---|---|---|---|---|
single/ |
28-DoF Shadow right hand | 12 | 2 | (28,) |
(28,) |
dexbench_rlds/single |
bimanual/ |
56-DoF Shadow pair | 7 | 3 | (56,) |
(56,) |
dexbench_rlds/bimanual |
State is a single (non-stacked) frame β openvla-oft's RLDS transform clips
proprio to one frame. eval_policy.py --policy openvla truncates to 28/56
accordingly and applies no observation preset.
Download
# single-hand
hf download dexverse/openvla-oft-dexverse --include 'single/*' --local-dir ./openvla-ckpt
# bimanual
hf download dexverse/openvla-oft-dexverse --include 'bimanual/*' --local-dir ./openvla-ckpt
CKPT_DIR for serve_openvla.sh is then ./openvla-ckpt/single (or bimanual).
β οΈ unnorm_key must contain dexbench
openvla-oft selects its action and proprio dimensions by inspecting
sys.argv at import time (prismatic/vla/constants.py::detect_robot_platform).
It scans the joined argv for dexbench, libero, aloha, bridge in that
order and silently falls back to LIBERO's 7-dim constants when nothing
matches. The only argv token carrying that keyword is --unnorm_key.
So the key must be dexbench_rlds/single / dexbench_rlds/bimanual exactly β
these are also the only keys present in dataset_statistics.json. dexbench is
the benchmark's former name; renaming it here requires a matching change in
openvla-oft. serve_openvla.sh refuses to start when the key lacks the keyword.
Contents
single/
βββ model-0000{1,2,3,4}-of-00004.safetensors # merged 7B VLA backbone, ~15 GB
βββ model.safetensors.index.json
βββ action_head--3000_checkpoint.pt # L1-regression action head, 1.0 GB
βββ proprio_projector--3000_checkpoint.pt # proprio encoder, 68 MB
βββ dataset_statistics.json # action/proprio denorm stats
βββ lora_adapter/ # provenance only, see below
βββ config.json, configuration_prismatic.py, modeling_prismatic.py,
β processing_prismatic.py, preprocessor_config.json, processor_config.json
βββ tokenizer.json, tokenizer.model, tokenizer_config.json, ...
The LoRA adapter is already merged into the sharded safetensors that
deploy.py loads. lora_adapter/ is kept for provenance and is not needed to
serve the model.
Serving
The policy runs out of process β its torch/transformers pins are not compatible with Isaac Sim's. From a DexVerse checkout:
OPENVLA_OFT_ROOT=/path/to/openvla-oft \
PYTHON_BIN=/path/to/envs/openvla-oft/bin/python \
CKPT_DIR=$PWD/openvla-ckpt/single \
UNNORM_KEY=dexbench_rlds/single \
bash scripts/eval/serve_openvla.sh # add EMBODIMENT=bimanual for the pair
# in the DexVerse / Isaac Lab environment
python scripts/eval/eval_policy.py --policy openvla --enable_cameras --headless \
--unnorm_key dexbench_rlds/single --task Dexverse-GraspCup-v0 --num_episodes 20
EMBODIMENT=bimanual switches --num_images_in_input from 2 to 3. The server
was trained with --use_l1_regression True --use_proprio True --center_crop True
and LoRA rank 32; serve_openvla.sh passes all of these.
The wire format the server expects β produced by eval_policy.py:
POST /act (json_numpy body)
{"full_image": uint8 (256,256,3),
"wrist_image": uint8 (256,256,3), # left_wrist_image + right_wrist_image when bimanual
"state": float32 (28,), # (56,) when bimanual
"instruction": str,
"unnorm_key": "dexbench_rlds/single"} # -> list of 8 actions, already denormalized
The instruction strings are part of the benchmark definition and are listed in
scripts/eval/baseline_tasks.py; they are the RLDS language_instruction
values verbatim.
Training
LoRA-finetuned (rank 32) from openvla/openvla-7b for 3000 steps on
demonstrations recorded through the DexVerse VR teleoperation pipeline,
converted to RLDS. Backgrounds and table textures were held fixed during data
generation (create_demo_files_sequential.py --disable-bg-randomize); evaluate
with the matching setting (the harness default) or expect a visual domain gap.
License
MIT, inherited from the openvla/openvla-7b base model. The DexVerse code is
BSD-3-Clause.
Model tree for dexverse/openvla-oft-dexverse
Base model
openvla/openvla-7b