LeRobot documentation

π₀ (Pi0)

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.6.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

π₀ (Pi0)

π₀ 是 Physical Intelligence 推出的用于通用机器人控制的视觉-语言-动作模型。LeRobot 的实现改编自其开源的 OpenPI 仓库。

模型概览

π₀ 代表了机器人领域的一项突破,它是 Physical Intelligence 开发的首个通用机器人基础模型。与那些被编程用于执行重复性动作的传统窄域机器人程序不同,π₀ 旨在成为一种通用策略,能够理解视觉输入、解析自然语言指令,并在多样化的任务中控制多种不同的机器人。

An overview of Pi0

物理智能的愿景

正如 Physical Intelligence 所述,尽管 AI 在数字领域取得了显著成功,从下棋到药物发现,但在物理世界中,人类智能仍然远远领先于 AI。借用 Moravec 悖论的说法,对 AI 而言,赢得一盘棋局是一个“简单”的问题,但叠衬衫或清理桌子则需要解决有史以来最棘手的工程难题之一。π₀ 是迈向开发人工物理智能的第一步,它使用户能够像使用大型语言模型一样,简单地要求机器人执行任何他们想要的任务。

架构与方法

π₀ 结合了多项关键创新:

  • Flow Matching:使用一种新颖的方法,通过流匹配(扩散模型的一种变体)为预训练的 VLM 增强连续动作输出
  • 跨本体训练:在来自 8 个不同机器人平台的数据上进行训练,包括 UR5e、双臂 UR5e、Franka、双臂 Trossen、双臂 ARX、移动 Trossen 和移动 Fibocom
  • 互联网规模预训练:从预训练的 3B 参数视觉语言模型中继承语义知识
  • 高频控制:以最高 50 Hz 的频率输出电机指令,实现实时灵巧操作

安装要求

  1. 按照我们的安装指南安装 LeRobot。

  2. 运行以下命令安装 Pi0 依赖项:

    pip install -e ".[pi]"

训练数据与功能

π₀ 是在迄今为止最大的机器人交互数据集上训练的,该数据集结合了三个关键数据源:

  1. 互联网规模预训练:用于语义理解的来自网络的视觉-语言数据
  2. Open X-Embodiment 数据集:开源机器人操作数据集
  3. Physical Intelligence 数据集:涵盖 8 种不同机器人的大规模、多样化灵巧操作任务数据集

用法

要在 LeRobot 中使用 π₀,请将策略类型指定为:

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: 您想要微调的基础 π₀ 模型,可选值为:
  • --policy.optimizer_fused=true:使用融合版 AdamW 以加快优化器步骤;在恢复运行时,此标志将被忽略

训练参数详解

参数默认描述
freeze_vision_encoderfalse不要冻结视觉编码器
train_expert_onlyfalse不要冻结 VLM,训练所有参数

💡 提示:设置 train_expert_only=true 会冻结 VLM,仅训练动作专家(action expert)和投影层,从而允许以较低的内存占用进行微调。

相对动作

默认情况下,π₀ 预测绝对动作。您可以启用相对动作,使模型预测相对于当前机器人状态的偏移量。这可以提高某些配置下的训练稳定性。

要使用相对动作,首先通过 CLI 在相对空间中重新计算数据集的统计数据:

lerobot-edit-dataset \
    --repo_id your_dataset \
    --new_repo_id your_dataset \
    --operation.type recompute_stats \
    --operation.overwrite true \
    --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 应与策略的 chunk_size 保持一致(π₀ 的默认值为 50)。relative_exclude_joints 列出了应保持在绝对空间中的关节名称(例如夹爪指令)。使用 --push_to_hub true 可将更新后的统计数据上传至 Hub。

然后启用相对动作进行训练:

lerobot-train \
    --dataset.repo_id=your_dataset \
    --policy.type=pi0 \
    --policy.use_relative_actions=true \
    --policy.relative_exclude_joints='["gripper"]' \
    ...

许可证

该模型遵循 Apache 2.0 许可证,与原始的 OpenPI 仓库 保持一致。

Update on GitHub