在您自己的机器人数据上微调来自 Physical Intelligence 的流匹配 VLA 模型 Pi0.5。包含 openpi 和 lerobot pi05 的实际命令、数据集格式陷阱、VRAM 和延迟限制。
Pi0.5 是当策略必须在从未见过的房间中工作时,您会选择的模型。它也是这里五种可训练策略中最难处理的一种,需要手动微调:上游仓库优先使用 JAX,LeRobot 端口在 0.6.0 版本中将部署从 lerobot-record 移出,并使基础安装包过小而无法用于训练,并且完整的微调无法在 4090 上进行。下面:流匹配在推理时的成本、两种命令路径,以及决定结果是否可用的 485 毫秒数字。
您需要了解什么
- •一个流匹配 VLA:一个 3B PaliGemma VLM 加上一个 300M 动作专家,用于解码连续动作块。有两种微调路径,openpi 和 LeRobot pi05,在 LIBERO 平均值上相差 0.65 点。
- •完整的微调需要超过 70 GB 的显存。openpi 列出的 LoRA 在 JAX 路径上需要 22.5 GB。
- •数据集必须是 LeRobotDataset v3.0,并在 meta/stats.json 中包含 q01 和 q99 分位数,否则批处理会报错。
- •首先检查您的 lerobot 版本:0.6.0 使基础包变得轻量化,并将部署从 lerobot-record 中移出。
- •它在这里以每个动作步 485 毫秒的速度运行,需要 50 个 episode,每次运行成本约为 4 到 12 美元。
Pi0.5 到底是什么
Physical Intelligence 于 2024 年 10 月发布了 pi0:一个流匹配视觉-语言-动作模型,基于预训练的 VLM:PaliGemma 拥有 30 亿参数,加上一个从头开始初始化的 3 亿动作专家,总计 33 亿参数。该论文报告了在 7 种机器人配置和 68 项任务上,超过 10,000 小时的机器人数据进行的预训练。更多内容请参见pi0 文章。
Pi0.5 (arXiv 2504.16054, 2025年4月22日) 保留了该骨架并改变了训练“食谱”:网络数据、目标检测、人类指导机器人的口头指令、子任务标签、来自许多家庭机器人的跨具身数据。结果是机器人能够在不在训练集中的房屋中清洁厨房。openpi 的 README 添加了一个标题中没有的细节:发布的 pi0.5 是通过知识隔离 (arXiv 2505.23705) 进行训练的。
| 属性 | pi0 | pi0.5 |
|---|---|---|
| VLM 主干变体 | gemma_2b (PaliGemma) | gemma_2b (PaliGemma) |
| 动作专家变体 | gemma_300m | gemma_300m |
| action_dim | 32 | 32 |
| 默认动作范围 | 50 | 50 |
| max_token_len | 48 | 200 |
| discrete_state_input | false | true,状态在提示中离散化为多个 bin |
| 基础检查点 | gs://openpi-assets/checkpoints/pi0_base | gs://openpi-assets/checkpoints/pi05_base |
openpi 的 README 明确指出:该仓库仅支持流匹配头,用于 pi0.5 的训练和推理。论文描述了两个阶段,而代码只包含了第二个阶段:预训练通过 FAST 分词器将每个动作表示为离散 token,在部署时模型在每个动作块之前推断一个高级子任务。这两个阶段都不在仓库中。lerobot/pi05_base 卡片给出了相同的列表并添加了 RL,尽管 pi0.5 论文根本没有描述任何强化学习阶段。LeRobot 端口继承了该范围,其上托管的每个训练器也如此,包括此处的训练器。许可也存在分歧:pi05 文档页面显示 Apache 2.0,而 lerobot/pi05_base 卡片标记为 license: gemma。
流匹配对训练和推理的改变
一个策略,您可以在SO-100上训练,它要么直接回归动作(ACT)或将其标记化并自回归解码(pi0-FAST)。流匹配则不然:它学习一个矢量场,将噪声传输到一个干净的动作块,然后对其进行积分。pi0论文使用10个积分步,步长为0.1;LeRobot的pi05配置也包含相同的`num_inference_steps: int = 10`。
- 训练:损失回归一个带噪声的动作块。无需调整分词器,无需对关节角度进行离散化。
- 推理:一个动作块需要通过动作专家进行十次前向传播。这是结构性的,而非调优问题。
- 输出:维度为32的连续动作,内部填充,损失取自机器人所拥有的维度。一个6-DoF自由度机械臂加上夹持器使用7个维度。
# openpi/src/openpi/models/pi0_config.py - the defaults every pi05 config inherits
@dataclasses.dataclass(frozen=True)
class Pi0Config(_model.BaseModelConfig):
dtype: str = "bfloat16"
paligemma_variant: _gemma.Variant = "gemma_2b"
action_expert_variant: _gemma.Variant = "gemma_300m"
action_dim: int = 32
action_horizon: int = 50
max_token_len: int = None # 200 if pi05 else 48
pi05: bool = False # flips discrete_state_input to TruePaliGemma 主干网络及其前端的门控
PaliGemma (arXiv 2407.07726) 是一个基于 Gemma-2B 语言模型的 SigLIP-So400m 视觉编码器,大约有 3B 个参数。Pi0.5 继承了它的分词器,并且该分词器位于一个受限的仓库中。这是首次运行最常见的失败方式,在第一次 训练步骤 之前。
LeRobot pi05 文档明确指出:pi0.5 使用受限的 google/paligemma-3b-pt-224 分词器,因此请先在 Hub 上接受其许可并运行 hf auth login。访问权限是手动授予的,而非即时。如果跳过此步骤,开始付费云运行,你将为一个无法下载分词器的 Pod 付费。
开始之前:数据集格式、剧集、硬件
LeRobot 中的 Pi0.5 读取 LeRobot 数据集 的 v3.0 布局,该布局随 lerobot 0.4.0 于 2025 年 10 月发布:每个 Parquet 和 MP4 文件包含多个剧集,而不是每个 剧集 一个文件,并且边界信息位于 meta/episodes/ 中,而非文件名。使用 桌面客户端 录制,或者遵循 录制你的第一个数据集 即可获得。
| 模式 | 所需 GPU 内存 | 示例 GPU |
|---|---|---|
| 推理 | more than 8 GB | RTX 4090 |
| 微调 (LoRA) | more than 22.5 GB | RTX 4090 |
| 微调 (完整) | more than 70 GB | A100 80 GB or H100 |
Pi0.5 和 SmolVLA 需要 LeRobot v3.0。GR00T N1.7 和 GR00T N1.5 需要 v2.0 或 v2.1,并且在 v3.0 数据集上会崩溃。一次录制会话无法在不进行转换的情况下同时满足两者,并且错误信息不会显示“数据集版本错误”。请参阅 数据集被拒绝:需要 v3。
# v2.1 -> v3.0, run against a dataset already on the Hub
python -m lerobot.scripts.convert_dataset_v21_to_v30 --repo-id=<HF_USER/DATASET_ID>
# aggregates episode-0000.parquet, episode-0001.parquet, ... -> file-0000.parquet
# aggregates episode-0000.mp4, episode-0001.mp4, ... -> file-0000.mp4
# rewrites meta/episodes/* with per-episode lengths, tasks and offsets该平台要求 Pi0.5 至少有 50 个 episode,与 GR00T 和 ACT 的最低要求相同。预训练承担了大部分工作,因此 50 个高质量的 episode 胜过 200 个粗糙的 episode。刚接触这个?请从数据收集指南开始。

路线 A:使用 openpi 仓库进行微调
参考实现:JAX 优先,仅在 Ubuntu 22.04 上测试,由配置对象而非标志驱动。PyTorch 路径于 2025 年 9 月推出,并在 LIBERO 上验证。分三步:转换数据、定义配置、训练和部署。
- 1克隆并安装
openpi 使用 uv。GIT_LFS_SKIP_SMUDGE 允许 LeRobot 作为依赖项引入,而无需 LFS blob。
bashgit clone --recurse-submodules git@github.com:Physical-Intelligence/openpi.git cd openpi GIT_LFS_SKIP_SMUDGE=1 uv sync GIT_LFS_SKIP_SMUDGE=1 uv pip install -e . - 2将您的数据转换为 LeRobot 数据集
上游提供了 LIBERO 和 DROID 的转换器,并期望您能进行适配。主要工作是键映射。
bashuv run examples/libero/convert_libero_data_to_lerobot.py --data_dir /path/to/your/data - 3添加训练配置
配置是 src/openpi/training/config.py 中的 TrainConfig 条目。此配置适配 pi05_droid_finetune,权重加载器指向 pi05_base。
pythonTrainConfig( name="pi05_so100", model=pi0_config.Pi0Config( pi05=True, action_dim=32, # pi05 is trained with 32-dim actions action_horizon=16, ), # Copy LeRobotLiberoDataConfig in the same file and rewrite the key # mapping for your camera names, then reference your copy here. data=LeRobotLiberoDataConfig( repo_id="your_hf_username/my_so100_dataset", base_config=DataConfig(prompt_from_task=True), ), weight_loader=weight_loaders.CheckpointWeightLoader( "gs://openpi-assets/checkpoints/pi05_base/params" ), batch_size=32, num_train_steps=20_000, ) - 4计算范数统计
针对配置名称运行,而非数据集。跳过此步骤是此处经典的首次失败原因。
bashuv run scripts/compute_norm_stats.py --config-name pi05_so100 - 5训练
该变量允许 JAX 使用 90% 的 GPU 内存,而非默认的 75%。在 80 GB 显卡上,这决定了运行能否成功。
bashXLA_PYTHON_CLIENT_MEM_FRACTION=0.9 uv run scripts/train.py pi05_so100 \ --exp-name=my_experiment \ --overwrite - 6部署
服务器监听端口 8000 并响应观测查询;您的机器人运行时是客户端。
bashuv run scripts/serve_policy.py policy:checkpoint \ --policy.config=pi05_so100 \ --policy.dir=checkpoints/pi05_so100/my_experiment/20000
openpi 的 PyTorch 实现不支持 pi0-FAST、混合精度、FSDP、LoRA 或 EMA 权重,因此达到 22.5 GB 的 LoRA 仅限于 JAX,通过 gemma_2b_lora 和 gemma_300m_lora 变体实现。更糟糕的是:该设置会将修补文件复制到您已安装的 transformers 4.53.2 上,并且 README 警告说,在 uv 的默认硬链接模式下,这会永久修改 uv 缓存中的 transformers,并可能泄露到其他项目中。使用 uv cache clean transformers 撤消此操作。
路线 B:使用 lerobot pi05 进行微调
LeRobot 端口将您已用于 ACT 和 SmolVLA 的 CLI 中封装了相同的权重。以下所有内容均已根据 lerobot 0.6.1(自 2026 年 8 月 3 日发布)和 2026 年 8 月 23 日的 pi05 文档进行了检查。版本在此处很重要:v3.0 数据集随 2025 年 10 月的 0.4.0 版本发布,2026 年 3 月 9 日的 0.5.0 博客介绍了 pi0-FAST 和实时分块,而 2026 年 7 月 6 日的 0.6.0 版本使基础包变得轻量化,并将部署移至 lerobot-rollout。
有一件事没有改变:lerobot-train 和 lerobot-record 在 2025 年 8 月的 0.3.2 版本中就已经是入口点。 仍然调用 python -m lerobot.scripts.train 的教程早于一年的变更,因此其余部分也值得怀疑。
- 1使用正确的额外功能进行安装
自 0.6.0 版本起,基础安装仅包含核心机器学习依赖项,而 pi 额外功能不添加数据集或训练代码,因此微调也需要训练额外功能。旧的一行命令在此处导入时会失败。
bash# policy dependencies plus the training stack pip install 'lerobot[pi,training]' # from a source checkout pip install -e ".[pi,training]" # driving an SO-100 afterwards needs the robot extras too pip install 'lerobot[core_scripts,feetech]' - 2身份验证
在浏览器中接受 paligemma-3b-pt-224 许可证,然后在训练机器上登录。
bashhf auth login - 3添加分位数统计数据
Pi0.5 使用分位数对 STATE 和 ACTION 进行归一化,因此 meta/stats.json 需要 q01 和 q99。旧的数据集只包含 min、max、mean、std。
bashlerobot-edit-dataset \ --repo_id your_dataset \ --new_repo_id your_dataset \ --operation.type recompute_stats \ --operation.overwrite true - 4从 lerobot/pi05_base 进行微调
将批处理大小设置为您的显卡能承受的值;文档中在 80 GB 的 LIBERO 上使用 64。显式传递 bfloat16,配置默认值为 float32。
bashlerobot-train \ --dataset.repo_id=${HF_USER}/my_so100_dataset \ --policy.type=pi05 \ --policy.pretrained_path=lerobot/pi05_base \ --policy.gradient_checkpointing=true \ --policy.dtype=bfloat16 \ --policy.device=cuda \ --policy.push_to_hub=false \ --output_dir=./outputs/pi05_so100 \ --job_name=pi05_so100 \ --batch_size=4 \ --num_workers=8 \ --steps=30000 \ --save_freq=5000 \ --seed=1000 - 5在机械臂上运行
在 0.6.x 版本中,这是 lerobot-rollout:lerobot-record 拒绝策略并拒绝 eval_ 数据集名称。Base 驱动机械臂,sentry 记录 rollout。
bashlerobot-rollout \ --strategy.type=base \ --policy.path=${HF_USER}/my_policy \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM1 \ --robot.cameras="{ up: {type: opencv, index_or_path: /dev/video10, width: 640, height: 480, fps: 30}}" \ --task="Put lego brick into the transparent box" \ --duration=60 # same run, recorded into an eval_ dataset lerobot-rollout \ --strategy.type=sentry \ --policy.path=${HF_USER}/my_policy \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM1 \ --dataset.repo_id=${HF_USER}/eval_so100 \ --dataset.single_task="Put lego brick into the transparent box" \ --duration=600
| 标志 | 作用 | 备注 |
|---|---|---|
| --policy.type=pi05 | 选择 Pi0.5 | 与 pretrained_path 一起使用时必需,与 --policy.path 一起使用时省略 |
| --policy.pretrained_path | 仅加载权重 | 从您的数据集中获取特征名称,存储的设置将被重置 |
| --policy.path | 权重加上检查点 config.json | 继承存储的设置,例如 n_action_steps |
| --policy.n_action_steps | 每个块消耗的步数 | 回退到 50,从不超过 chunk_size(默认 50) |
| --policy.train_expert_only | 冻结 VLM,训练专家 | 默认为 false,内存占用更少,成功率有一定代价 |
| --policy.gradient_checkpointing | 重新计算而不是存储激活 | 默认为 false,当运行不适合时,这是第一个杠杆 |
| --peft.method_type=LORA | LoRA 适配器而不是完整权重 | 需要 peft 额外功能,文档示例是 SmolVLA |
| --policy.rtc_training_max_delay | 用于 RTC 的动作前缀条件 | 仅限主分支,不在 0.6.1 中,必须保持在 chunk_size 以下 |
| --rename_map | 将数据集列映射到策略特征 | 当您的相机键不同时需要 |
如果没有分位数,您会在第一个批次中遇到 ValueError: QUANTILES normalization mode requires q01 and q99 stats 错误。重新计算统计数据,但结果会落在 $HF_LEROBOT_HOME/your_dataset 中,而不是 --dataset.repo_id 读取的缓存中,因此请使用指向该位置的 --dataset.root 进行训练或推送到 Hub。或者跳过分位数,使用 --policy.normalization_mapping='{"ACTION": "MEAN_STD", "STATE": "MEAN_STD", "VISUAL": "IDENTITY"}',就像 LIBERO 参考命令那样。
三组默认值,以及哪些会到达训练器
openpi 的 TrainConfig 是参考,LeRobot 的 PI05Config 是 lerobot-train 在未指定时使用的配置,而此处的表单发送的是第三组配置。令人惊讶的是学习率:上游的两个默认值都最高为 2.5e-5,而 openpi 自己的 pi05_libero 配置和此平台将其提高到 5e-5。
| 设置 | openpi TrainConfig | lerobot pi05 和 lerobot-train | AY-Robots 发送 |
|---|---|---|---|
| 批次大小 | 32 | 8 | 1 |
| 峰值学习率 | 2.5e-5,余弦衰减 | optimizer_lr 2.5e-5 | 5e-5 |
| 训练步数 | 30,000 | 100,000 | 30,000 |
| 检查点间隔 | 1,000 步 | 20,000 步 | 不在表单中 |
| 随机种子 | 42 | 1,000 | 在表单中 |
| 动作块 | action_horizon 50 | chunk_size 50, n_action_steps 50 | 不在表单中 |
| 权重数据类型 | bfloat16 | float32,直到您传递 --policy.dtype | 不在表单中 |
| 梯度累积 | 无此选项,改为 fsdp_devices | 迄今为止所有版本中均缺失 | 16,并且已删除 |
移植是否忠实?LeRobot 团队对 LIBERO 基础模型进行了额外的 6k 步微调,并与 openpi 在四个套件上的参考数据进行了比较:平均 97.5% 对 96.85%,在 Libero 10 上领先,在 Spatial 上落后。这条路线是工具选择,而非质量选择。
- 背后有超过 10,000 小时的机器人预训练,因此 50 个任务片段可能就足够了。
- 连续动作:无需调整分词器,关节角度没有离散化下限。
- LeRobot 移植在 LIBERO 平均分上达到 97.5%,而 openpi 为 96.85%,因此更友好的 CLI 没有可衡量的成本。
- 双方都有参数高效路径:openpi 的 JAX LoRA 变体,LeRobot 的 PEFT 集成。
- 完整微调需要超过 70 GB。22.5 GB 的 LoRA 数据是 openpi 的 JAX 数字;在 PEFT 下,pi05 尚未发布任何数据。
- 每个动作步 485 毫秒,是这里五个模型中最慢的:是 SmolVLA 的两倍,ACT 的二十四倍。
- 需要 LeRobot v3.0,因此为 GR00T 运行记录的数据集需要转换,反之亦然。
- 新选项首先在 main 分支上发布:训练时 RTC 和 MEM 内存不在 0.6.1 版本中,因此最新的文档可能意味着需要从 git 安装。
485 毫秒的现实,以及它何时变得不可用
这决定了你的项目,因此它排在成本表之前。此处测得的 Pi0.5 的每个动作步骤为 485 毫秒。与其他四个相比:
| 策略 | 每个动作步骤的推理时间 | 参数 | GPU 等级 | 最少剧集数 |
|---|---|---|---|---|
| ACT | 20 ms | ~80 M | RTX 4090 or any 24 GB card | 50 |
| GR00T N1.7 | 152 ms | ~3 B | A100 80 GB or H100 80 GB | 50 |
| GR00T N1.5 | 165 ms | ~3 B | A100 80 GB or H100 80 GB | 50 |
| SmolVLA | 245 ms | ~450 M | RTX 4090 or any 24 GB card | 30 |
| Pi0.5 | 485 ms | ~3 B | A100 80 GB or H100 80 GB | 50 |

这五个模型的控制循环每个动作步骤运行 20 到 485 毫秒。在 485 毫秒的基础上增加公共互联网往返时间,会将一个可用的策略变成一个犹豫不决的策略。远程推理适用于慢速的抓取放置任务,而不适用于快速的反应性运动。我们宁愿如实告知,也不愿销售一个只在局域网内有效的演示。如果您的机械臂在块之间暂停,请从策略在运动中冻结开始排查。
上游有一个解决方案,其中一半已经包含在您可以安装的版本中。实时分块(Real-Time Chunking)在机械臂仍在执行当前块时生成下一个块,然后引导新块的重叠步骤与已执行的部分保持紧密,从而使机械臂在衔接处不会停顿或抖动。推理时形式已在 Pi0、Pi0.5 和 SmolVLA 的 0.4.2 更新日志中发布,它是一个部署标志,而非需要重新训练:
lerobot-rollout \
--strategy.type=base \
--policy.path=${HF_USER}/my_policy \
--inference.type=rtc \
--inference.rtc.execution_horizon=10 \
--inference.rtc.max_guidance_weight=10.0 \
--robot.type=so100_follower \
--robot.port=/dev/ttyACM1 \
--robot.cameras="{ up: {type: opencv, index_or_path: /dev/video10, width: 640, height: 480, fps: 30}}" \
--task="Put lego brick into the transparent box" \
--duration=60它并不会让模型更快。它隐藏了延迟:485 毫秒仍然会消耗,但不在关键路径上,因此队列在块之间不会耗尽。来自 arXiv 2512.05964 的训练时变体更进一步:模型学习以一个干净的动作前缀为条件,因此在推理时,重叠部分通过每个动作的流时间步进行硬填充,而不是引导,并且引导反向传播消失。在训练期间,它为每个示例采样一个前缀长度,并计算剩余后缀的流损失。该标志仅存在于主分支中,不在 0.6.1 版本中,并且您训练的延迟必须保持在 chunk_size 以下。
获取 Pi0.5 检查点的两种方式
您租用或拥有一张 80 GB 显卡,安装上述堆栈之一,转换您的数据集并照看运行。您可以保留所有控制:openpi 的 JAX LoRA、LeRobot 的 PEFT 适配器、相对动作、自定义按键映射。您也将承担所有失败。
- 硬件:A100 80 GB 或 H100,或在 openpi 的 JAX LoRA 路径上使用 24 GB 显卡。
- 设置:首次运行需要一个下午,主要用于按键映射和门控分词器。
- 非托管形式:PEFT 适配器、相对动作、训练时 RTC、MEM 内存。
lerobot-train \
--dataset.repo_id=${HF_USER}/my_so100_dataset \
--policy.type=pi05 \
--policy.pretrained_path=lerobot/pi05_base \
--policy.rtc_training_max_delay=10 \
--policy.gradient_checkpointing=true \
--policy.dtype=bfloat16 \
--batch_size=4 --steps=30000 --seed=1000您在训练表单中选择模型和数据集,后端根据所需的显存从现货市场租用 GPU,运行训练器并将检查点写入对象存储。Pi0.5 在此处仅支持云端。有关SO-100、SO-101、Koch v1.1和LeKiwi的指南。
| 设置 | 平台为 Pi0.5 发送的内容 |
|---|---|
| 基础检查点 | lerobot/pi05_base |
| 策略类型 | pi05 |
| 批处理大小 | 1 |
| 学习率 | 5e-5 |
| 最大步数 | 30000 |
| 梯度累积 | 16,但请参阅下面的警告 |
| 表单中的额外控制 | seed, logFreq |
| 数据集格式 | LeRobot v3.0 |
| GPU 层级 | A100 80 GB or H100 80 GB |
训练器发送的梯度累积值为 16,而 lerobot 0.5.1 没有接收它的标志,因此它被丢弃。没有发布的 lerobot 版本有此功能:该控制仅存在于主分支上,作为 --accelerator.gradient_accumulation.steps。这里的有效批处理大小为 1,而 openpi 的 pi05_libero 配置使用的是 256。在阅读损失曲线之前值得了解。该控制适用于 GR00T N1.7 和 GR00T N1.5 运行。
推理工作方式相同:会预置一个 Pod 来提供策略服务,您的本地客户端与其通信。该 Pod 具有空闲看门狗并会自行销毁,因此被遗忘的标签页不会默默地产生费用。延迟警告适用,这就是为什么ACT在 20 毫秒内通常能赢得快速任务。
当它不起作用时
| 症状 | 最可能的原因 |
|---|---|
| 运行在开始前被拒绝 | 数据集为 v2.1 但 Pi0.5 需要 v3.0,或 GR00T 反之 |
| ImportError,缺少 datasets 包 | lerobot 0.6.x 缺少训练附加项 |
| 关于批处理一中 q01 和 q99 的 ValueError | meta/stats.json 中没有分位数;重新计算或使用 MEAN_STD |
| CUDA 在第 0 步内存不足 | 完整微调低于 70 GB;尝试检查点或 train_expert_only |
| 401 或门控仓库错误 | PaliGemma 分词器许可证未接受 |
| 损失下降,机器人无动作 | 归一化不匹配,或策略复制了状态 |
| 机械臂在块之间暂停 | 每步延迟加上往返时间;块队列耗尽 |
| 在一个设置中有效,在另一个设置中失败 | 剧集太少,或全部在一种配置中 |
单次运行的成本
Pi0.5 属于昂贵层级,因为它需要一张 80 GB 显卡,并且现货价格波动,因此这个数字是一个范围而不是一个固定价格。对于许多 SO-100 任务,请先训练 SmolVLA 或 ACT 在 24 GB 层级上,首先确认任务是否可学习,然后再投入 A100 小时。 训练你的第一个策略 介绍了这种更经济的循环,并且 定价 包含了当前的层级。
| 层级 | 策略 | 典型运行时间 | 每小时价格 | 每次运行成本 |
|---|---|---|---|---|
| A100 80 GB or H100 | Pi0.5, GR00T N1.7, GR00T N1.5 | 3 to 6 hours | 1.20 to 2.00 USD | about 4 to 12 USD |
| RTX 4090 或任何 24 GB 显卡 | SmolVLA, ACT | 2 to 5 hours | 0.30 to 0.60 USD | about 1 to 3 USD |

在投入一个晚上之前:GR00T N1.7 与 Pi0.5 的对比 和 Pi0.5 与 SmolVLA 的对比 并列出相同的数据进行对比。竞技场 包含 85 个 VLA 模型和 332 个基准测试结果,每个结果都链接到其来源,有关该系列的背景信息请参见 我们的 VLA 概述。
无需构建堆栈即可训练 Pi0.5
在表单中选择数据集和超参数。后端在现货市场租用一张 80 GB 显卡,运行训练器并将检查点写入对象存储。SO-100、SO-101、Koch v1.1 和 LeKiwi 的指南。
打开训练指南我可以在 RTX 4090 上微调 Pi0.5 吗?▾
不是完全微调:openpi 列出需要超过 70 GB,因此需要 A100 80 GB 或 H100。其 22.5 GB 的 LoRA 数据属于 JAX 路径;PyTorch 实现没有 LoRA。LeRobot 的 PEFT 集成存在,但其文档示例是 SmolVLA,并且没有发布 pi05 的显存数据。
我需要多少个剧集?▾
五十个,与 GR00T 和 ACT 的最低要求相同;只有 SmolVLA 更低,为 30 个。基础检查点承载了超过 10,000 小时的预训练,因此微调是适应而不是从零开始学习:50 个干净、多样的剧集胜过来自单一配置的 200 个剧集。
--policy.path 和 --policy.pretrained_path 有什么区别?▾
--policy.path 加载权重和检查点的 config.json,因此 n_action_steps 等存储设置会被继承,并且必须省略 --policy.type。--policy.pretrained_path 仅加载权重:特征名称来自您的数据集,存储设置重置,需要 --policy.type。这就是为什么 LIBERO 命令明确传递 n_action_steps=10 和 empty_cameras=1;否则它们会回退到 50 和 0。
开放版本是否提供了论文中完整的 Pi0.5?▾
不。两者都只支持流匹配动作头。带有 FAST 动作分词器和高级子任务预测的离散令牌预训练阶段尚未发布,lerobot/pi05_base 卡将 RL 添加到该列表中,尽管 pi0.5 论文没有描述强化学习阶段。您训练的是一个以您提供的语言字符串为条件的低级策略,而不是一个能够自行分解长任务的模型。
本指南是基于哪个版本编写的?▾
主分支上的 openpi 和 lerobot 0.6.1(自 2026 年 8 月 3 日发布)均于 2026 年 8 月 23 日读取。v3.0 数据集随 2025 年 10 月的 0.4.0 版本一同发布。0.6.0 版本使基础包变得轻量化,因此单独的 lerobot[pi] 不再安装训练堆栈,并将部署移至 lerobot-rollout。训练时 RTC 仅在主分支上;此处托管的训练器运行的是 0.5.1 版本。
Sources
- Physical-Intelligence/openpi: open-source models and packages for robotics
- openpi training configs, including pi05_libero and pi05_droid_finetune
- pi0: A Vision-Language-Action Flow Model for General Robot Control
- pi0.5: a Vision-Language-Action Model with Open-World Generalization
- Knowledge Insulating Vision-Language-Action Models: Train Fast, Run Fast, Generalize Better
- PaliGemma: A versatile 3B VLM for transfer
- Training-Time Action Conditioning for Efficient Real-Time Chunking
- LeRobot pi05 documentation on the main branch, including training-time RTC
- LeRobot documentation: parameter efficient fine-tuning with PEFT
- LeRobotDataset v3.0 format documentation
- LeRobot release notes: v0.3.2 through v0.6.1, with the v0.6.0 breaking changes
- LeRobot v0.5.0: Scaling Every Dimension
- lerobot/pi05_base model card
- LeRobot documentation: Real-Time Chunking (RTC)
- openpi Pi0Config: the model defaults pi0 and pi05 inherit
Ready for high-quality robotics data?
AY-Robots connects your robots to skilled operators worldwide.
Get Started