File size: 5,748 Bytes
78ed463
 
 
 
 
 
 
 
e3204d1
 
78ed463
 
 
 
 
 
 
 
e3204d1
78ed463
 
 
 
 
e3204d1
78ed463
 
 
 
e3204d1
78ed463
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e3204d1
78ed463
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e3204d1
78ed463
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# rSkill manifest β€” openral packaging format V1 (CLAUDE.md Β§6.4)
# Wraps: RLinf/RLinf-OpenVLAOFT-PPO-ManiSkill3-25ood
# Base:  Haozhan72/Openvla-oft-SFT-libero-goal-trajall (+ ManiSkill LoRA SFT + PPO)
#
# An OpenVLA-OFT bridge policy RL-tuned (PPO) on the ManiSkill3
# PutOnPlateInScene25 task with a WidowX 250 S. Its honest evaluation home is
# the SimplerEnv WidowX put-on-plate tasks OpenRAL already wires (same
# embodiment / EE-delta control / bridge_orig normalization) β€” NOT the Panda
# PickCube scenes (the task-data gate would correctly block that pairing; see
# the OpenVLA / OpenVLA-OFT policy family notes for the WidowX-vs-Panda rationale).
#
# IO contract (from the checkpoint's config.json + RLinf eval, 2026-06-19):
#   input:  one 224x224 RGB (the SimplerEnv 3rd-view, surfaced as camera1);
#           prompt "In: What action should the robot take to {instr}?\nOut: ";
#           no proprio (use_proprio=False).
#   output: 256-bin discrete action tokens -> [-1,1] -> de-normalized with the
#           embedded unnorm_key=bridge_orig (BOUNDS_Q99): 6 EE deltas rescaled,
#           gripper (mask False) passthrough. Action chunk 8 x 7-D.
# The in-tree `openvla` adapter loads this via transformers
# AutoModelForVision2Seq + trust_remote_code (gated by
# OPENRAL_ALLOW_REMOTE_CODE=1), NF4 for the 8 GB host.

# ── Identity ───────────────────────────────────────────────────────────────
schema_version: "0.1"
name: "OpenRAL/rskill-openvla_oft-widowx-simpler_env-nf4"
version: "0.1.0"
license: "mit"
role: "s1"
kind: "vla"  # learnable Vision-Language-Action policy
# Task-data gate: declare only the SimplerEnv WidowX task locally verified with
# success > 0. The sibling Bridge tasks remain plausible checkpoint targets, but
# they are not declared until reproduced locally.
evaluated_tasks:
  - "simpler_env/widowx_carrot_on_plate"
benchmarks:
  simpler_env_widowx: 0.4

# ── Policy identity ────────────────────────────────────────────────────────
model_family: "openvla"

# ── Compatibility contract ─────────────────────────────────────────────────
embodiment_tags:
  - "widowx"

sensors_required:
  - modality: "rgb"
    vla_feature_key: "observation.images.camera1"
    min_width: 224
    min_height: 224

actuators_required:
  - kind: "joint_position"
    control_mode_semantics:
      mode: "absolute"

# ── Runtime / weights ──────────────────────────────────────────────────────
runtime: "pytorch"
quantization:
  dtype: "int4"
  backend: "pytorch"
min_vram_gb:
  # OpenVLA-7B documented footprints (paper Table 2): bf16 16.8 GB, int4 7.0 GB
  # (int4 matches bf16 task accuracy). int4 + expandable_segments fits an 8 GB card.
  bf16: 16.8
  int4: 7.0
weights_uri: "hf://RLinf/RLinf-OpenVLAOFT-PPO-ManiSkill3-25ood@3697bf84eaa7a7c6072e07b9451ca4c780cf7bed"
source_repo: "hf://RLinf/RLinf-OpenVLAOFT-PPO-ManiSkill3-25ood"

# No `processors` block: OpenVLA is not a lerobot modern-processor family. Its
# PrismaticProcessor ships in the repo (custom code) and normalization stats are
# embedded in config.json (selected by unnorm_key), so there is nothing to point at.

# ── State / action contracts ───────────────────────────────────────────────
state_contract:
  # SimplerEnv WidowX (bridge_orig) wire schema: 8 scalar state keys. The RLinf
  # OpenVLA-OFT checkpoint does not consume proprio, but the backend surfaces it
  # and the dim keeps the simpler_widowx layout invariant happy.
  layout: "simpler_widowx"
  dim: 8
action_contract:
  # 6 cartesian EE deltas + 1 binary gripper (NOT 7 joint
  # positions) β€” matches the de-normalized predict_action output.
  dim: 7
  representation: "delta_ee_6d_plus_gripper"

# ── Execution semantics ────────────────────────────────────────────────────
# OpenVLA-OFT emits an 8-step action chunk per forward; replay the full chunk
# open-loop (RLinf's chunk_step executes all 8 before re-inferring).
chunk_size: 8
n_action_steps: 8
latency_budget:
  per_chunk_ms: 2000.0

# RLinf PPO eval path. These are adapter-owned knobs intentionally kept in the
# manifest instead of scene YAML so the rollout trace records exactly how the
# checkpoint was driven.
policy_extras:
  openvla_generation_method: "generate_action_verl"
  openvla_do_sample: true
  openvla_temperature: 0.6
  openvla_padding_max_length: 30
  openvla_action_scale: 2.0
  openvla_binarize_gripper: true
  openvla_gripper_threshold: 0.5
  openvla_torch_seed: 0

# ── Provenance ─────────────────────────────────────────────────────────────
paper_url: "https://huggingface.co/RLinf/RLinf-OpenVLAOFT-PPO-ManiSkill3-25ood"

description: >
  OpenVLA-OFT (RLinf, PPO on ManiSkill3 PutOnPlateInScene25) WidowX bridge
  policy, evaluated on SimplerEnv WidowX carrot-on-plate. Loaded
  in-process via transformers custom-code (trust_remote_code), NF4 for 8 GB
  hosts. MIT license.

# Action vocabulary for the reasoner LLM tool palette.
actions:
  - "pick"
  - "place"
objects:
  - "object"
scenes:
  - "tabletop"