AdrianLlopart's picture
docs: HF model card β€” best-of-both front-matter derived from manifest
f7cf181 verified
|
Raw
History Blame Contribute Delete
5.45 kB
---
language:
- en
license: mit
pipeline_tag: robotics
tags:
- OpenRAL
- rskill
- openvla
- vision-language-action
- nf4
- 4-bit
- widowx
- openral
- openvla-oft
- vla
- simpler
- maniskill3
- manipulation
inference: false
---
# rskill-openvla-oft-simpler-widowx-nf4
> OpenVLA-OFT bridge policy (RLinf, PPO-tuned on ManiSkill3 PutOnPlateInScene25),
> packaged for OpenRAL and locally verified on SimplerEnv WidowX carrot-on-plate.
## What this skill does
Wraps [`RLinf/RLinf-OpenVLAOFT-PPO-ManiSkill3-25ood`](https://huggingface.co/RLinf/RLinf-OpenVLAOFT-PPO-ManiSkill3-25ood)
β€” an [OpenVLA-OFT](https://openvla-oft.github.io/) (arXiv:2502.19645) policy,
RL-tuned with PPO on the ManiSkill3 `PutOnPlateInScene25` task using a WidowX
250 S β€” and runs it on the [SimplerEnv](https://github.com/simpler-env/SimplerEnv)
WidowX (Bridge V2) carrot-on-plate task that shares its embodiment, EE-delta
control, and `bridge_orig` normalization. The sibling Bridge tasks are not
declared in `evaluated_tasks` until locally reproduced.
**Why WidowX and not Panda/PickCube:** this checkpoint is a *bridge* policy. The
ManiSkill3 Panda `PickCube-v1` scenes are a different embodiment and task; the
ADR-0060 task-data gate correctly refuses that pairing (it would produce a
plausible-but-unsolvable rollout). See [ADR-0063](../../docs/adr/0063-openvla-oft-policy-family.md)
for the full rationale.
## How it works
Loaded in-process by OpenRAL's `openvla` policy adapter
(`python/sim/src/openral_sim/policies/openvla.py`) as a transformers
*custom-code* model (`AutoModelForVision2Seq` + `trust_remote_code`, gated by
`OPENRAL_ALLOW_REMOTE_CODE=1`). NF4 (4-bit) quantization plus the CUDA
expandable-segments allocator bring the 7.5 B backbone within an 8 GB GPU.
The RLinf checkpoint currently needs a 4.40-era transformers runtime; the
default OpenRAL workspace pins transformers 5.3 for lerobot families, so keep
OpenVLA validation in a dedicated environment rather than syncing it together
with the default VLA groups.
### Observation β†’ action contract
- **Input:** one 224Γ—224 RGB frame (the SimplerEnv 3rd-view, surfaced as
`camera1`) and the prompt
`In: What action should the robot take to {instruction.lower()}?\nOut: `. No
proprioception (`use_proprio=False`).
- **Output:** 256-bin discrete action tokens decoded to `[-1, 1]`, then
de-normalized with the embedded `unnorm_key=bridge_orig` stats (BOUNDS_Q99):
6 end-effector deltas (3 position + 3 rotation) rescaled, gripper passed
through. The manifest drives RLinf's `generate_action_verl` path with
right-padded prompts (`max_length=30`), temperature sampling (`0.6`), torch
seed `0`, `action_scale=2.0` on the first six dimensions, and binary gripper
threshold `0.5`. Action chunk = 8 Γ— 7-D, replayed open-loop.
## Upstream model / training
Upstream base `Haozhan72/Openvla-oft-SFT-libero-goal-trajall`, ManiSkill LoRA
SFT, then PPO on `PutOnPlateInScene25Main-v3` (WidowX 250 S). RLinf model-index
success: train 0.977; OOD vision 0.921 / semantic 0.648 / position 0.736. See
the upstream card for the full protocol.
## Supported robots
- `widowx` (WidowX 250 S, Bridge V2 flat-table setup).
## Sensors required
- One RGB stream, β‰₯224Γ—224, mapped to `observation.images.camera1`.
## Manifest summary
See [`rskill.yaml`](./rskill.yaml). Key fields: `model_family: openvla`,
`license: mit`, `quantization.dtype: int4`, `chunk_size: 8`,
`evaluated_tasks` = `simpler_env/widowx_carrot_on_plate`,
`benchmarks.simpler_env_widowx: 0.4`, `policy_extras` = the RLinf generation
and action-transform knobs, `action_contract` = `delta_ee_6d_plus_gripper`
(dim 7).
## Quick start
```bash
just sync --all-packages --group simpler-env
hf download RLinf/RLinf-OpenVLAOFT-PPO-ManiSkill3-25ood
OPENRAL_ALLOW_REMOTE_CODE=1 openral benchmark run \
--suite simpler_env_widowx --task simpler_env/widowx_carrot_on_plate \
--rskill openvla-oft-simpler-widowx-nf4
```
## Reproduction
```bash
# Single SimplerEnv WidowX scene (carrot-on-plate):
OPENRAL_ALLOW_REMOTE_CODE=1 openral benchmark run \
--suite simpler_env_widowx --task simpler_env/widowx_carrot_on_plate \
--rskill openvla-oft-simpler-widowx-nf4
```
## Evaluation
Local seeded validation on an RTX 4070 Laptop GPU (8 GB), NF4, SimplerEnv
ManiSkill3 `PutCarrotOnPlateInScene-v1`, 5 episodes, seeds 0..4, 60-step
horizon, `generate_action_verl`, torch seed 0 reapplied on each policy reset,
`action_scale=2.0`:
- `simpler_env/widowx_carrot_on_plate`: **2/5 success (40%)**.
Public `widowx_carrot_on_plate` without the RLinf action transform scored 0/5,
and the exact upstream `PutOnPlateInScene25Main-v3` registration needs RLinf
assets that were not present in the public source checkout. Those numbers are
not claimed here.
## License
MIT (upstream `RLinf/RLinf-OpenVLAOFT-PPO-ManiSkill3-25ood`). The OpenRAL
packaging is Apache-2.0. The checkpoint is a `trust_remote_code` custom-code
model; loading executes repo-shipped Python and requires
`OPENRAL_ALLOW_REMOTE_CODE=1` (provenance: rSkill signature verification is not
yet implemented β€” ADR-0006).
## See also
- [ADR-0063 β€” OpenVLA / OpenVLA-OFT policy family](../../docs/adr/0063-openvla-oft-policy-family.md)
- [ADR-0060 β€” benchmark task-data compatibility gate](../../docs/adr/0060-benchmark-task-data-compatibility-gate.md)
- [`rldx1-ft-simpler-widowx-nf4`](../rldx1-ft-simpler-widowx-nf4) β€” the sibling WidowX bridge rSkill.