LIBERO

LIBERO is included in the initial simulation support scope. This page uses Wall-OSS-0.5 and a LIBERO dataset in LeRobot format to cover environment setup, training configuration, model fine-tuning, and simulation evaluation. Detailed LIBERO procedures are presented in the page body rather than as third-level navigation items.

Environment setup

First install the Wall-OSS-0.5 environment as described in "Quick Start," then install the simulation dependencies.

pip install -r requirements-libero.txt
mkdir -p third_party
git clone https://github.com/Lifelong-Robot-Learning/LIBERO.git \
third_party/LIBERO

The evaluation script checks for LIBERO, robosuite, MuJoCo, PyOpenGL, BDDL, Gym, and h5py. If any dependency is missing, the script should fail before model loading and display installation instructions.

Initial setup after installing LIBERO

import libero.libero checks the configuration file at module import time, rather than only after a function is called. By default, it reads $LIBERO_CONFIG_PATH/config.yaml. If this variable is not set, it reads ~/.libero/config.yaml. If the file does not exist, the package calls input() to ask where the dataset is located. In non-interactive environments such as scripts, torchrun, nohup, and Cursor agent, stdin immediately reaches EOF, resulting in:

EOFError: EOF when reading a line

The top of the traceback consists entirely of imports, making this look like an import error, when the process is actually waiting for keyboard input.

Entering N at the interactive prompt does not resolve the issue. By default, datasets is set to <package>/../datasets, a directory that usually does not exist. get_libero_path() prints only one line, [Warning]: ... path does not exist!, and then continues; a later step fails because the path cannot be found.

Correct approach: Configure the YAML file before any import. If any required path is missing, get_libero_path() triggers an assertion. The first four must point to the cloned package; datasets is the root directory of LIBERO's own HDF5 demonstration data. Wall-X's LeRobot training does not use it, nor does evaluation read it, so providing an empty directory is sufficient.

assets: /path/to/LIBERO/libero/libero/assets
bddl_files: /path/to/LIBERO/libero/libero/bddl_files
benchmark_root: /path/to/LIBERO/libero/libero
datasets: /path/to/libero_sim
init_states: /path/to/LIBERO/libero/libero/init_files
Download LIBERO dataset
huggingface-cli download lerobot/libero \
  --repo-type dataset \
  --local-dir /path/to/libero_all
Configure training YAML
cp workspace/example/libero.yml /path/to/my_libero_config.yml

Replace the key paths:

model:
  config_path: /path/to/wall-oss-0.5/config.json
  processor_path: /path/to/Qwen2.5-VL-3B-Instruct
  pretrained_path: /path/to/Qwen2.5-VL-3B-Instruct

data:
  lerobot_config:
    repo_id: /path/to/libero_all
  norm_stats_path: /path/to/libero_all_norm_stats.json
  key_mappings:
    camera:
      observation.images.faceImg: face_view
      observation.images.rightImg: right_wrist_view
    state: observation.state
    action: action

checkpoint:
  save_path: /path/to/libero_training_output
  resume_from: /path/to/wall-oss-0.5/model.safetensors

LIBERO uses 7-dimensional single-arm actions. The existing example pads the actions to 26 dimensions:

task:
  dof_config:
    master_right_ee_cartesian_pos: 3
    master_right_ee_rotation: 3
    master_right_gripper: 1
    action_padding: 19

  ar_dof_config:
    master_right_ee_cartesian_pos: 3
    master_right_ee_rotation: 3
    master_right_gripper: 1
    action_padding: 19

  agent_pos_config:
    follow_right_ee_cartesian_pos: 3
    follow_right_ee_rotation: 3
    follow_right_gripper: 2
    action_padding: 18

  action_horizon: 10
  action_horizon_flow: 10
Generate normalization statistics
python scripts/compute_norm_stats.py \
  --train_config /path/to/my_libero_config.yml \
  --data_root /path/to/libero_all \
  --output_path /path/to/libero_all_norm_stats.json

After running the command, confirm that data.norm_stats_path matches the output path.

Start training

See Model Training

Simulation inference evaluation

Standard batch evaluation:

CHECKPOINT_PATH=/path/to/checkpoint \
TRAIN_CONFIG_PATH=/path/to/my_libero_config.yml \
TASK_SUITE_NAME=libero_spatial \
NUM_TRIALS_PER_TASK=50 \
bash scripts/run_libero.sh

Quick smoke test:

SMOKE=1 \
CHECKPOINT_PATH=/path/to/checkpoint \
bash scripts/run_libero.sh

Environment variables:

  • CHECKPOINT_PATH: Trained checkpoint.

  • TRAIN_CONFIG_PATH: YAML used for training.

  • TASK_SUITE_NAME: libero_spatial, libero_object, libero_goal, or libero_10.

  • ALL_SUITES=1: Runs the four standard task suites in sequence.

  • TASK_INDICES: Specifies task indices, such as 0, 1, 2.

  • CUDA_ID: GPU index.

Result Logging

Save at least the following:

  • Code, model, data, and configuration versions;

  • Checkpoint and evaluation task suite;

  • Number of trials, successes, and failure types for each task;

  • Environment startup or dependency errors;

  • Inference latency and GPU memory usage;

  • Representative success/failure videos.

Quick checklist
  • Wall-OSS-0.5 and Qwen processor weights are complete;

  • The LIBERO dataset is in LeRobot format;

  • All local paths in the YAML have been replaced;

  • The 7-dimensional actions are correctly mapped to the 26-dimensional pretraining action space;

  • Normalization statistics have been generated and match the configuration;

  • The checkpoint can be loaded;

  • Run batch evaluation only after the smoke test passes;

  • Evaluation results can be traced to the configuration and model version.

On this page