基于RL的仿真-真机协同训练#
仿真-真机协同训练总览。#
仿真-真机协同训练通过在仿真中用 PPO 与在真机数据上用 SFT 相结合来训练 π₀.₅ 策略: 在提升仿真任务成功率的同时保留真机先验,避免仅靠仿真过拟合而损害 sim-to-real 迁移。技术细节详见 Beyond Imitation: RL-Based Sim-Real Co-Training for VLA Models。
概览#
在 ManiSkill 数字孪生上协同训练 π₀.₅——仿真中 PPO + 50 条真机轨迹 SFT(仿真成功率约 35%→50%)。
PPO + SFT (RL-Co)
π₀.₅
ManiSkill digital twin
两阶段 sim-real
env/success_once。设置#
本示例仅提供单一演示环境;用于自己的机器人时,请采集数据并构建匹配的仿真场景。
部分 |
说明 |
|---|---|
任务 |
抓取放置——将桌上的物体放入碗中。 |
真机 |
Franka Emika Panda + RealSense;第三人称 RGB(640×480);7 自由度动作(x, y, z, roll, pitch, yaw, 夹爪)。 |
仿真 |
基于 ManiSkill3 的数字孪生,在布局、相机视角、任务逻辑、语言与动作空间上与真机对齐;动力学经过调校以逼近真实物理。 |
安装#
1. 克隆 RLinf 仓库#
# 为提高国内下载速度,可以使用:
# git clone https://ghfast.top/github.com/RLinf/RLinf.git
git clone https://github.com/RLinf/RLinf.git
cd RLinf
2. 安装依赖#
选项 1:Docker 镜像
使用 Docker 镜像运行实验。
docker run -it --rm --gpus all \
--shm-size 20g \
--network host \
--name rlinf \
-v .:/workspace/RLinf \
rlinf/rlinf:agentic-rlinf0.3-maniskill_libero
# 如果需要国内加速下载镜像,可以使用:
# docker.1ms.run/rlinf/rlinf:agentic-rlinf0.3-maniskill_libero
请通过镜像内置的 switch_env 工具切换到对应的虚拟环境:
source switch_env openpi
选项 2:自定义环境
# 为提高国内依赖安装速度,可以添加`--use-mirror`到下面的install.sh命令
bash requirements/install.sh embodied --model openpi --env maniskill_libero
source .venv/bin/activate
Maniskill 资源下载#
请先参考 ManiSkill 示例 下载基础资源。随后下载本示例所需的特定资源:
cd <path_to_RLinf>/rlinf/envs/maniskill/assets
# 为提升国内下载速度,可以设置:
# export HF_ENDPOINT=https://hf-mirror.com
hf download --repo-type dataset RLinf/RLCo-maniskill-assets --include "custom_assets/*" --local-dir .
运行#
Stage I:SFT 预训练#
第一阶段旨在通过监督学习快速注入真机与仿真知识,为后续 RL 训练奠定基础。您可以选择 自行训练 或 下载权重。
方法A: 使用真机-仿真数据进行 SFT 训练
我们提供了 LeRobot 格式数据集(50 条真机轨迹 + 1499 条仿真轨迹),托管于 RLinf/RLCo-Example-Mix-Data。
下载数据集:
# 为提升国内下载速度,可以设置:
# export HF_ENDPOINT=https://hf-mirror.com
hf download --repo-type dataset RLinf/RLCo-Example-Mix-Data --local-dir RLCo-Example-Mix-Data
执行训练:
训练方法请参考 OpenPi 官方代码 或 RLinf 文档中的 监督训练微调 章节。
方法 B:使用 SFT 预训练权重
跳过训练步骤,直接使用我们提供的 SFT Checkpoint:
# 下载 Spatial-Object-Goal 模型(选择以下任一方式)
# 方式1:使用 git clone
git lfs install
git clone https://huggingface.co/RLinf/RLinf-Pi05-RLCo-PandaPutOnPlateInScene25DigitalTwin-V1-SFT
# 方式2:使用 huggingface-hub
# 为提升国内下载速度,可以设置:
# export HF_ENDPOINT=https://hf-mirror.com
hf download RLinf/RLinf-Pi05-RLCo-PandaPutOnPlateInScene25DigitalTwin-V1-SFT --local-dir RLinf-Pi05-RLCo-PandaPutOnPlateInScene25DigitalTwin-V1-SFT
Stage II:仿真-真机协同 RL 训练#
本阶段在 PPO 训练循环中加入 SFT 损失,实现协同优化。
数据准备
下载用于 Co-Training 的 50 条真机轨迹数据(LeRobot 格式):
# 为提升国内下载速度,可以设置:
# export HF_ENDPOINT=https://hf-mirror.com
hf download --repo-type dataset RLinf/RLCo-Example-Real-Data --local-dir RLCo-Example-Real-Data
关键参数配置
我们提供 maniskill_ppo_co_training_openpi_pi05.yaml 配置文件。通用路径、集群和 runner 字段见 训练配置;PPO 训练相关参数可参照 π0 和 π0.5 模型强化学习训练。另外需关注以下参数:
模型加载路径
将 model_path 指向 SFT 权重目录,sft_data_path 指向真机数据路径:
rollout:
model:
model_path: /path/to/RLinf-Pi05-RLCo-PandaPutOnPlateInScene25DigitalTwin-V1-SFT
actor:
sft_data_path: /path/to/RLCo-Example-Real-Data
model:
model_path: /path/to/RLinf-Pi05-RLCo-PandaPutOnPlateInScene25DigitalTwin-V1-SFT
Co-Training 策略配置
actor:
model:
openpi:
config_name: "pi05_maniskill_sim_real_co_training"
# 开启真机数据协同训练
enable_sft_co_train: True
# SFT Loss 权重系数 (beta)
sft_loss_weight: 0.2
enable_sft_co_train: 设为True开启协同训练。若为False,则退化为纯 PPO 训练。sft_loss_weight: 控制 SFT Loss (\(\mathcal{L}_{SFT}\)) 在总 Loss 中的占比权重 \(\beta\)。
Python 配置类参考
在代码层面,pi05_maniskill_sim_real_co_training 对应的配置位于 rlinf/models/embodiment/openpi/dataconfig/__init__.py。需确保 model 架构与 normalization 状态与 SFT 阶段保持一致。
关于 Batch Size 的说明:
配置文件中的 batch_size 指的是梯度累积前的微批次大小。 实际更新是单批次数据量计算公式为:
对于 global_batch_size 和 micro_batch_size 的具体数值设定请参考 π0和π0.5模型强化学习训练。
运行脚本
我们提供了预设脚本,直接运行即可启动训练:
bash examples/embodiment/run_embodiment.sh maniskill_ppo_co_training_openpi_pi05
可视化与结果#
TensorBoard
tensorboard --logdir ./logs --port 6006
指标
除标准指标外(见 训练指标),协同训练还新增以下指标:
train/ppo_loss: PPO(RL)损失。train/sft_loss: 真机数据上的 SFT 损失。actor/total_loss: \(\mathcal{L}_{Total} = \mathcal{L}_{RL} + \beta \mathcal{L}_{SFT}\)。train/loss_ratio: \(\frac{\beta \lvert \mathcal{L}_{SFT} \rvert}{\lvert \mathcal{L}_{RL} \rvert}\)。若该值持续过大(如 \(> 10^5\)),日志会触发警告,此时应降低sft_loss_weight。
示例结果
加载 Stage I 权重后:仿真中零样本成功率约 35%。
经过 100 步协同训练后:仿真成功率约 50%。
更多关于真机部署效果及消融实验,请参考论文:Beyond Imitation: Reinforcement Learning-Based Sim-Real Co-Training for VLA Models。