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/LIBEROThe 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_filesDownload LIBERO dataset
huggingface-cli download lerobot/libero \
--repo-type dataset \
--local-dir /path/to/libero_allConfigure training YAML
cp workspace/example/libero.yml /path/to/my_libero_config.ymlReplace 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.safetensorsLIBERO 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: 10Generate 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.jsonAfter 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.shQuick smoke test:
SMOKE=1 \
CHECKPOINT_PATH=/path/to/checkpoint \
bash scripts/run_libero.shEnvironment 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.