2024-12-23 13:38:06 -08:00
2024-12-23 13:38:06 -08:00
2024-12-23 13:38:06 -08:00
2024-12-23 13:38:06 -08:00
2024-12-23 13:38:06 -08:00
2024-12-23 13:38:06 -08:00
2024-12-23 13:38:06 -08:00
2024-12-23 13:38:06 -08:00
2024-12-23 13:38:06 -08:00
2024-12-23 13:38:06 -08:00
2024-12-23 13:38:06 -08:00
2024-12-25 15:40:59 -08:00
2024-12-23 13:38:06 -08:00

openpi

openpi holds open-source models and packages for robotics, published by the Physical Intelligence team.

Currently, it is focused on the pi0 model described in this blog post.

Setup

When cloning this repo, make sure to update submodules:

git clone --recurse-submodules git@github.com:Physical-Intelligence/openpi.git

# Or if you already cloned the repo:
git submodule update --init --recursive

Using uv

We use uv to manage Python dependencies. See the uv installation instructions to set it up.

Once uv is installed, run the following to set up the environment:

GIT_LFS_SKIP_SMUDGE=1 uv sync

NOTE: GIT_LFS_SKIP_SMUDGE=1 is needed to pull LeRobot as a dependency.

Docker Setup

All of the examples in this repo provide instructions for being run normally, and also using Docker. Although not required, the Docker option is recommended as this will simplify software installation, produce a more stable environment, and also allow you to avoid installing ROS and cluttering your machine, for examples which depend on ROS.

Docker installation instructions are here. If using a GPU you must also install the NVIDIA container toolkit. If your host machine is Ubuntu 22.04, you can use the convenience scripts scripts/install_docker_ubuntu22.sh and scripts/install_nvidia_container_toolkit.sh.

During the first run of any example, Docker will build the images. Go grab a coffee while this happens. Subsequent runs will be faster since the images are cached.

Downloading checkpoints

By default checkpoints are downloaded from s3://openpi-assets and are cached in ~/.cache/openpi when needed. You can overwrite the download path by setting the OPENPI_DATA_HOME environment variable.

Running Training

Training configs are defined in src/openpi/training/config.py and the training script is in scripts/train.py.

Each registered config is available as a command line argument to scripts/train.py. To find all available command line arguments for your config, run uv run scripts/train.py <config-name> --help, or look at the TrainConfig class in src/openpi/training/config.py.

For example, to train with the pi0_aloha_sim config, run the following;

(one time only) Compute the norm stats for the training data:

uv run scripts/compute_norm_stats.py --config-name pi0_aloha_sim

Run training:

uv run scripts/train.py pi0_aloha_sim --exp-name=my_experiment --overwrite

The pi0_aloha_sim config is optimized for training on a single H100 GPU. By default, JAX pre-allocates 75% of available GPU memory. We set XLA_PYTHON_CLIENT_MEM_FRACTION=0.9 to allow JAX to use up to 90% of GPU memory, which enables training with larger batch sizes while maintaining stability.

The training script automatically utilizes all available GPUs on a single node. Currently, distributed training across multiple nodes is not supported.

An example for how to train on your own Aloha dataset is provided in the ALOHA Real README.

Running examples

We provide example integrations with several robotics platforms. See the README in each example for more details:

Running the openpi server

The server can be configured to serve openpi policies in the following ways:

  • Serve a default policy for the given environment.
  • Serve a trained policy from a checkpoint.
  • Serve an exported model.

Serve the default policy for the LIBERO environment

uv run scripts/serve_policy.py --env LIBERO --default_prompt "my task"

Serve a trained policy from an openpi checkpoint

This option allows serving a model that was trained using the openpi training code.

uv run scripts/serve_policy.py --env ALOHA_SIM policy:checkpoint --policy.config=pi0_aloha_sim --policy.dir=checkpoints/pi0_aloha_sim/exp_name/10000

The training config is used to determine which data transformations should be applied to the runtime data before feeding into the model. The norm stats, which are used to normalize the transformed data, are loaded from the checkpoint directory.

Serve an exported model

There are also a number of checkpoints that are available as exported JAX graphs, which we trained ourselves using our internal training code. These can be served using the following command:

uv run scripts/serve_policy.py --env ALOHA policy:exported --policy.dir=s3://openpi-assets/exported/pi0_aloha/model [--policy.processor=trossen_biarm_single_base_cam_24dim]

For these exported models, norm stats are loaded from processors that are exported along with the model, while data transformations are defined in the corresponding default policy (see create_default_policy in scripts/serve_policy.py). The processor name is optional, and if not provided, we will do the following:

  • Try using the default environment processor name
  • Load a processor if there is only one available
  • Raise an error if there are multiple processors available and ask to provide a processor name

Running with Docker:

export SERVER_ARGS="--env ALOHA_SIM --default_prompt 'my task'"
docker compose -f scripts/compose.yml up --build
Description
No description provided
Readme Apache-2.0 25 MiB
Languages
Python 98.6%
Shell 0.9%
Dockerfile 0.5%