前言
25 年 2 月 4 日,Physical Intelligence (π) 宣布正式开源π0 及π0-FAST。该模型基于超过 10,000 小时的机器人数据进行了预训练。
GitHub 代码仓库包含四个方面:
- π0 本身的代码和权重
- 特定平台上特定任务的微调 checkpoint
- 推理代码
- 微调代码

第一部分 如何基于各种开源数据集微调π0
1.1 π0 及π0-FAST 对外开源的具体内容:2 套代码、4+3 套权重且支持远程推理
1.1.1 开源基础模型π0 及π0-FAST,可自行微调
-
π0 基础模型的代码及权重 可用于微调的扩散π0「标准的预训练π0 模型,该模型在 OXE 和他们的 7 个机器人平台上进行训练」。 其对应的 checkpoint 路径为:s3://openpi-assets/checkpoints/pi0_base 注意,这个π0 基础版本身就已经具备了一定的指令跟随能力
-
π0-FAST 基础模型的代码及权重 可用于微调的π0_FAST——基于 FAST 分词器的自回归模型。 该模型使用 FAST tokenizer 通过自回归离散化实现控制。 它提供了更好的语言跟踪性能,但推理成本更高 (根据他们的经验,大约高出 4-5 倍),如果你更喜欢使用 discretization 而不是流匹配,这是一个不错的选择。 其对应的 checkpoint 路径为:s3://openpi-assets/checkpoints/pi0_fast_base
1.1.2 已经微调好的模型分类:可直接推理——π0 DROID/π0 ALOHA/π0 Libero
且他们还提供了专门为 ALOHA 和 DROID 平台上一些简单任务做了微调的 checkpoint,相当于在 ALOHA 和 DROID 收集的相对较小的数据集上进行了微调。
-
π0 DROID:在 DROID 数据集上微调过的扩散π0 DROID 数据集由 Franka 机械臂在不同环境中执行的不同任务组成的开源数据集。 其对应的 checkpoint 路径为:s3://openpi-assets/checkpoints/pi0_droid 推理速度比π0-FAST-DROID 快,但可能不遵循语言命令。
-
π0-FAST DROID:在 DROID 数据集微调过的π0-FAST 可以在 DROID 机器人平台上的新场景中执行各种简单的零样本桌面操控任务。 其对应的 checkpoint 路径为:s3://openpi-assets/checkpoints/pi0_fast_droid
-
π0 ALOHA:含三套权重 根据 ALOHA(适合灵巧操作的低成本双臂系统) 数据进行了微调。
- 折叠毛巾:s3://openpi-assets/checkpoints/pi0_aloha_towel
- 从容器中取出食物:s3://openpi-assets/checkpoints/pi0_aloha_tupperware
- 打开笔帽:s3://openpi-assets/checkpoints/pi0_aloha_pen_uncap
-
π0 Libero 此检查点针对 Libero 基准进行了微调,并且可以在 Libero 任务上进行开箱即用的评估。
1.1.3 对预训练模型进行推理:还可连远程 GPU 进行推理
以下是跑π0-FAST-DROID 模型的预训练检查点示例:
from openpi.training import config
from openpi.policies import policy_config
from openpi.shared import download
config = config.get_config("pi0_fast_droid")
checkpoint_dir = download.maybe_download("s3://openpi-assets/checkpoints/pi0_fast_droid")
policy = policy_config.create_trained_policy(config, checkpoint_dir)
example = {
"observation/exterior_image_1_left": ...,
"observation/wrist_image_left": ...,
"prompt": "pick up the fork"
}
action_chunk = policy.infer(example)["actions"]
此外,特别值得一提的是:他们还提供了远程推理的示例和代码。 安装 openpi-client:
cd $OPENPI_ROOT/packages/openpi-client
pip install -e .
然后,便可以使用客户端查询远程策略服务器:
from openpi_client import image_tools
from openpi_client import websocket_client_policy
client = websocket_client_policy.WebsocketClientPolicy(host="localhost", port=8000)
for step in range(num_steps):
observation = {
"observation/image": image_tools.convert_to_uint8(image_tools.resize_with_pad(img, 224, 224)),
"observation/wrist_image": image_tools.convert_to_uint8(image_tools.resize_with_pad(wrist_img, 224, 224)),
"observation/state": state,
"prompt": task_instruction,
}
action_chunk = client.infer(observation)["actions"]
要启动远程策略服务器,只需运行以下命令:
uv run scripts/serve_policy.py --env=[DROID | ALOHA | LIBERO]
后台脚本执行示例:
uv run scripts/serve_policy.py policy:checkpoint --policy.config=pi0_fast_droid --policy.dir=s3://openpi-assets/checkpoints/pi0_fast_droid
如果使用 docker:
export SERVER_ARGS="--env ALOHA_SIM"
docker compose -f examples/simple_client/compose.yml up --build
1.2 安装与运行
1.2.1 如何安装本 openpi 开源库
要运行此存储库中的模型,需要至少具有以下规格的 NVIDIA GPU。
| 模式 | 所需内存 | 示例 GPU |
|---|---|---|
| 推理 | > 8 GB | RTX 4090 |
| 微调(LoRA) | > 22.5 GB | RTX 4090 |
| 微调(完整版) | > 70 GB | A100(80GB)/H100 |
PS,他们说该 repo 已在 Ubuntu 22.04 上测试过,其他操作系统可能不支持。
以下是安装过程: 使用 uv 来管理 Python 依赖项。
GIT_LFS_SKIP_SMUDGE=1 uv sync
GIT_LFS_SKIP_SMUDGE=1 uv pip install -e
克隆此 repo 时,请确保更新子模块:
git clone --recurse-submodules [email protected]:Physical-Intelligence/openpi.git
git submodule update --init --recursive
1.2.2 如何把该库的 ALOHA sim 环境跑起来
如没有 docker,则采用 C/S 架构。
终端窗口 1:建立策略客户端
uv venv --python 3.10 examples/aloha_sim/.venv
source examples/aloha_sim/.venv/bin/activate
uv pip sync examples/aloha_sim/requirements.txt
uv pip install -e packages/openpi-client
MUJOCO_GL=egl python examples/aloha_sim/main.py
终端窗口 2:建立策略服务器
uv run scripts/serve_policy.py --env ALOHA_SIM
1.3 基于自己的数据集微调π0 基础模型
1.3.1 利用 Libero 数据集微调π0 基础模型的三个步骤
Physical Intelligence (π) 认为,1 到 20 小时的数据足以微调各种任务。
第一步,将 Libero 数据集转换为 LeRobot 数据集 v2.0 格式
作者提供了一个脚本 convert_libero_data_to_lerobot.py,用于将 Libero 数据转换为 LeRobot 数据集 v2.0 格式。
uv run examples/libero/convert_libero_data_to_lerobot.py --data_dir /path/to/your/libero/data
第二步,定义使用自定义数据集的训练配置,并运行训练 提供 pi0_aloha_pen_uncap 配置作为示例。
XLA_PYTHON_CLIENT_MEM_FRACTION=0.9 uv run scripts/train.py pi0_fast_libero --exp-name=my_experiment --overwrite
第三步,启动策略服务器并运行推理
uv run scripts/serve_policy.py policy:checkpoint --policy.config=pi0_fast_libero --policy.dir=checkpoints/pi0_fast_libero/my_experiment/20000
1.3.2 在 UR5 数据集上微调 pi0
// 待更
第二部分 进一步实战:如何基于你自己的私有数据集微调π0
2.1 如何在真实环境中采集数据,一步一步微调π0 然后部署到机械臂上
2.1.1 准备环境、硬件、安装依赖、采集环境
在新环境里安装 uv:
pip install uv
同步依赖并安装:
cd project_root
GIT_LFS_SKIP_SMUDGE=1 uv sync
GIT_LFS_SKIP_SMUDGE=1 uv pip install -e .
安装 Git 并下载源码:
sudo apt update
sudo apt install git
git clone https://github.com/Physical-Intelligence/openpi.git
在源码中,新建并切换到 pi0 环境(openpi 0.1.0 明确要求 Python >= 3.11):
conda create -n pi0 python=3.11 -y
conda activate pi0
修改 pyproject.toml,解决 lerobot 依赖冲突问题。
2.1.2 数据的采集与转换
从 convert_aloha_data_to_lerobot.py 脚本中可以看出,Aloha 机器人的数据是以 HDF5 格式存储的,并且需要转换成 LeRobot 数据集格式才能用于训练。
数据转换:
uv run examples/aloha_real/convert_aloha_data_to_lerobot.py --raw-dir /path/to/your/episodes --repo-id your-org/your-dataset-name
设置数据采集环境:
cd /path/to/openpi-main
source examples/aloha_real/.venv/bin/activate
roslaunch aloha ros_nodes.launch
2.1.3 定义训练配置
下面是一个很好的示例配置 pi0_aloha_pen_uncap。
如果是本地数据集:
base_config = DataConfig(
local_files_only=False,
),
weight_loader = weight_loaders.CheckpointWeightLoader("s3://openpi-assets/checkpoints/pi0_base/params"),
num_train_steps = 20_000,
根据你的数据集结构定义重包装转换:
repack_transforms = _transforms.Group(
inputs=[
_transforms.RepackTransform({
"images": { "cam_high": "observation.images.cam_high", ... },
"state": "observation.state",
"actions": "action",
})
]
),
创建自定义训练配置:
TrainConfig(
name="pi0_your_custom_task",
model=pi0.Pi0Config(),
data=LeRobotAlohaDataConfig(
repo_id="your-org/your-dataset-name",
assets=AssetsConfig(...),
default_prompt="你的任务指令",
)
)
2.1.4 开始训练
uv run scripts/train.py --config pi0_your_custom_task --exp_name your_experiment_name
2.1.5 测试和部署训练好的模型
启动 ROS 节点,并在另一个终端运行机器人控制程序:
python -m examples.aloha_real.main
启动策略服务器:
uv run scripts/serve_policy.py --env ALOHA --checkpoint_path ./checkpoints/pi0_your_custom_task/your_experiment_name/latest/params --default_prompt "你的任务指令"
2.2 部分实际落地实践:过程中涉及微调 openpi
团队内部从 24 年 q3 开始,一直给各种工厂做场景落地和定制开发。
2.2.1 一周,完成 openpi 在国产臂上的部署:含训练和推理,最终自主抓零食
长沙具身分部在短短 3 天内,便把 openpi 在国产 piper 机械臂上部署好了,并完成数据的采集。 于 7.10-7.11 两天完成了训练、推理。
2.2.2 openpi 自主做智能分拣,即便被分拣物品被换了位置,也能分拣
昨天通过 openpi 抓零食,今天又训了一个任务,openpi 自主做智能分拣。 即便被分拣物体被交换了位置,也能成功分拣,毕竟 vla 还是比单纯 il 更智能些。


