π₀ 是来自 Physical Intelligence 的用于通用机器人控制的视觉-语言-action 模型。LeRobot 实现改编自其开源的 OpenPI 仓库。
π₀ 是 Physical Intelligence 开发的首个通用机器人基础模型,代表了机器人技术的一项突破。与那些为重复运动编程的狭窄专用传统机器人程序不同,π₀ 被设计为一个通用 policy,能够理解视觉输入、解读自然语言指令,并在多样化任务中控制各种不同的机器人。
正如 Physical Intelligence 所描述的,尽管 AI 在数字领域(从下棋到药物发现)已取得显著成功,但在物理世界中,人类智能仍大幅领先于 AI。用莫拉维克悖论的话来说,赢一盘棋对 AI 而言是一个“简单”问题,但叠一件衬衫或清理一张桌子却需要解决一些有史以来最困难的工程问题。π₀ 代表了在开发人工物理智能方面迈出的第一步,使用户能够像使用大语言模型那样,直接要求机器人执行他们想要的任何任务。
π₀ 融合了多项关键创新:
按照我们的安装指南安装 LeRobot。
通过运行以下命令安装 Pi0 依赖:
pip install -e ".[pi]"π₀ 在迄今为止最大的机器人交互 dataset 上训练,融合了三个关键数据源:
要在 LeRobot 中使用 π₀,请将 policy 类型指定为:
policy.type=pi0要训练 π₀,你可以使用标准的 LeRobot 训练脚本并配置合适的参数:
lerobot-train \
--dataset.repo_id=your_dataset \
--policy.type=pi0 \
--output_dir=./outputs/pi0_training \
--job_name=pi0_training \
--policy.pretrained_path=lerobot/pi0_base \
--policy.repo_id=your_repo_id \
--policy.compile_model=true \
--policy.gradient_checkpointing=true \
--policy.dtype=bfloat16 \
--policy.freeze_vision_encoder=false \
--policy.train_expert_only=false \
--steps=3000 \
--policy.device=cuda \
--batch_size=32--policy.compile_model=true:启用模型编译以加快训练--policy.gradient_checkpointing=true:在训练期间显著减少内存占用--policy.dtype=bfloat16:使用混合精度训练以提高效率--batch_size=32:训练的批次大小,请根据你的 GPU 内存进行调整--policy.pretrained_path=lerobot/pi0_base:你想 fine-tune 的基础 π₀ 模型,选项包括: | 参数 | 默认值 | 说明 |
|---|---|---|
freeze_vision_encoder | false | 不冻结视觉编码器 |
train_expert_only | false | 不冻结 VLM,训练所有参数 |
💡 提示:设置 train_expert_only=true 会冻结 VLM,仅训练 action expert 和投影层,从而在降低内存占用的情况下进行 fine-tune。
默认情况下,π₀ 预测 absolute action。你可以启用relative action,让模型预测相对于当前机器人 state 的偏移量。对于某些设置,这可以提高训练稳定性。
要使用 relative action,首先通过 CLI 在相对空间中重新计算 dataset 统计信息:
lerobot-edit-dataset \
--repo_id your_dataset \
--operation.type recompute_stats \
--operation.relative_action true \
--operation.chunk_size 50 \
--operation.relative_exclude_joints "['gripper']" \
--push_to_hub true或在 Python 中等效地执行:
from lerobot.datasets import LeRobotDataset, recompute_stats
dataset = LeRobotDataset("your_dataset")
recompute_stats(dataset, relative_action=True, chunk_size=50, relative_exclude_joints=["gripper"])
dataset.push_to_hub()chunk_size 应与你的 policy 的 chunk_size 匹配(π₀ 默认为 50)。relative_exclude_joints 列出应保持绝对空间的关节名称(例如 gripper 命令)。使用 --push_to_hub true 将更新后的统计信息上传到 Hub。
然后启用 relative action 进行训练:
lerobot-train \
--dataset.repo_id=your_dataset \
--policy.type=pi0 \
--policy.use_relative_actions=true \
--policy.relative_exclude_joints='["gripper"]' \
...该模型遵循 Apache 2.0 许可证,与原始的 OpenPI 仓库一致。
在 GitHub 上更新