Physical Intelligence openpi 机器人 VLA 模型部署与微调指南
Physical Intelligence 团队发布的 openpi 项目是机器人学领域的重要开源项目,专注于视觉 - 语言 - 动作(VLA)模型的开发与应用。该项目包含π₀、π₀-FAST 和π₀.₅三种核心模型,这些模型经过超过 10,000 小时机器人数据的预训练,为机器人控制提供了强大的基础能力。
Physical Intelligence 发布的 openpi 是专注于视觉 - 语言 - 动作(VLA)模型的开源项目。其核心架构包括π₀、π₀-FAST 和π₀.₅,详细说明了环境配置、5 步快速部署流程、模型推理实战及远程配置。内容涵盖自定义数据微调方法、PyTorch 支持、多 GPU 训练配置以及故障排除建议,旨在帮助开发者快速上手并应用于 ALOHA、DROID 等机器人平台。
Physical Intelligence 团队发布的 openpi 项目是机器人学领域的重要开源项目,专注于视觉 - 语言 - 动作(VLA)模型的开发与应用。该项目包含π₀、π₀-FAST 和π₀.₅三种核心模型,这些模型经过超过 10,000 小时机器人数据的预训练,为机器人控制提供了强大的基础能力。
openpi 项目的核心是基于视觉 - 语言 - 动作的流式扩散模型和自回归模型。π₀模型采用流式扩散架构,而π₀-FAST 则基于 FAST 动作分词器的自回归模型,π₀.₅则是π₀的升级版本,通过知识隔离技术实现了更好的开放世界泛化能力。
π₀模型架构:
π₀-FAST 模型架构:
| 使用模式 | 内存需求 | 推荐 GPU |
|---|---|---|
| 推理 | > 8 GB | RTX 4090 |
| 微调(LoRA) | > 22.5 GB | RTX 4090 |
| 全参数微调 | > 70 GB | A100/H100 |
步骤 1:克隆项目仓库
git clone --recurse-submodules https://github.com/physical-intelligence/openpi.git
cd openpi
步骤 2:安装 uv 依赖管理工具 按照官方文档安装 uv 工具。
步骤 3:配置 Python 环境
GIT_LFS_SKIP_SMUDGE=1 uv sync
GIT_LFS_SKIP_SMUDGE=1 uv pip install -e .
步骤 4:验证安装
uv run python -c "import openpi; print('安装成功')"
步骤 5:Docker 部署(可选)
docker-compose -f scripts/docker/compose.yml up
以下是使用π₀.₅-DROID 模型进行推理的完整示例:
from openpi.training import config
from openpi.policies import policy_config
from openpi.shared import download
# 获取配置并下载检查点
config = config.get_config("pi05_droid")
checkpoint_dir = download.maybe_download("gs://openpi-assets/checkpoints/pi05_droid")
# 创建训练好的策略
policy = policy_config.create_trained_policy(config, checkpoint_dir)
# 运行推理示例
example = {
"observation/exterior_image_1_left": "图像数据",
"observation/wrist_image_left": "手腕图像数据",
"prompt": "拿起叉子"
}
action_chunk = policy.infer(example)["actions"]
openpi 支持远程推理模式,模型可以在独立的服务器上运行,通过 WebSocket 连接向机器人发送动作。这种架构的优势在于可以利用更强大的 GPU 资源,同时保持机器人和策略环境的分离。
# 启动策略服务器
uv run scripts/serve_policy.py policy:checkpoint \
--policy.config=pi05_droid \
--policy.dir=checkpoints/pi05_droid/experiment/20000
将自定义数据转换为 LeRobot 数据集格式:
# 参考 examples/libero/convert_libero_data_to_lerobot.py
# 修改适配您的数据格式
def convert_your_data_to_lerobot(data_dir, output_dir):
"""自定义数据转换函数示例"""
# 实现数据格式转换逻辑
pass
在 src/openpi/training/config.py 中定义微调配置:
# π₀.₅在 LIBERO 数据集上的微调配置
TrainConfig(
name="pi05_libero",
model=pi0_config.Pi0Config(
pi05=True,
action_horizon=10,
discrete_state_input=False
),
data=LeRobotLiberoDataConfig(
repo_id="physical-intelligence/libero",
base_config=DataConfig(prompt_from_task=True),
extra_delta_transform=False,
),
batch_size=256,
num_train_steps=30_000
)
计算归一化统计:
uv run scripts/compute_norm_stats.py --config-name pi05_libero
启动训练:
XLA_PYTHON_CLIENT_MEM_FRACTION=0.9 uv run scripts/train.py pi05_libero \
--exp-name=my_experiment \
--overwrite
uv run examples/convert_jax_model_to_pytorch.py \
--checkpoint_dir /path/to/jax/checkpoint \
--config_name pi05_droid \
--output_path /path/to/converted/pytorch/checkpoint
| 框架 | 推理精度 | 训练精度 |
|---|---|---|
| JAX | bfloat16 为主,部分 float32 | 混合精度(默认) |
| PyTorch | 匹配 JAX 精度 | 全 bfloat16 或全 float32 |
单节点多 GPU 训练:
uv run torchrun --standalone --nnodes=1 --nproc_per_node=2 scripts/train_pytorch.py pi0_aloha_sim \
--exp_name pytorch_ddp_test
内存不足问题:
# 设置 JAX 使用更多 GPU 内存
XLA_PYTHON_CLIENT_MEM_FRACTION=0.9 uv run scripts/train.py ...
训练发散问题: 检查 norm_stats.json 中的 q01、q99 和 std 值,确保归一化参数合理。
# ALOHA 毛巾折叠任务
policy = policy_config.create_trained_policy(
config.get_config("pi0_aloha_towel"),
checkpoint_dir
)
# DROID 桌面操作任务
policy = policy_config.create_trained_policy(
config.get_config("pi0_fast_droid"),
checkpoint_dir
)
openpi 项目与多个机器人平台和数据集深度集成:
通过本指南的完整部署流程和实战示例,您可以快速上手 openpi 项目,利用其强大的 VLA 模型能力推动机器人技术的研究与应用。项目的模块化设计和丰富的配置选项使其能够适应各种机器人平台和任务需求。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online