基于Behavior评测平台的强化学习训练#
BEHAVIOR 是一个基于 NVIDIA IsaacSim / OmniGibson 的日常 家居活动基准。双臂 R1 Pro 机器人执行长程操作任务;RLinf 借助它对视觉-语言-动作(VLA)策略进行 强化学习微调。
概览#
在 BEHAVIOR 家居任务上用 PPO 对 VLA 进行强化学习微调。
OpenVLA-OFT · π₀ / π₀.₅
PPO
50 个 BEHAVIOR-1K 任务
1 节点 · 支持光追的 GPU
run_embodiment.sh → 观察 env/success_once。任务#
字段 |
说明 |
|---|---|
任务 |
来自 BEHAVIOR-1K 的 50 个家居操作任务(通过 |
机器人 |
IsaacSim / OmniGibson 上的双臂 R1 Pro。 |
观测与动作#
字段 |
说明 |
|---|---|
观测 (Observation) |
头部相机 RGB(720×720)以及左右腕部 RealSense RGB(480×480)。 |
动作 (Action) |
23 维连续动作:3 自由度底盘(x, y, rz)、4 自由度躯干、2×7 自由度手臂、2×1 自由度平行夹爪。 |
安装#
警告
安装前先检查 IsaacSim 软硬件要求:
https://docs.isaacsim.omniverse.nvidia.com/4.5.0/installation/requirements.html
https://docs.omniverse.nvidia.com/dev-guide/latest/common/technical-requirements.html
Hopper 架构 GPU 需要 NVIDIA driver 570 或更高版本。A100、H100 等不支持光线追踪的 GPU 可能会让 BEHAVIOR 场景出现严重渲染伪影。优先使用 RTX 30/40 系列或更新的 GPU,以获得更稳定的视觉效果和训练体验。
首先,克隆 RLinf 仓库:
# 为提高国内下载速度,可以使用镜像:
# git clone https://ghfast.top/github.com/RLinf/RLinf.git
git clone https://github.com/RLinf/RLinf.git
cd RLinf
然后,使用下列两种方式之一准备依赖:预构建的 Docker 镜像(推荐)或自定义环境。
通用的安装流程(前置依赖、GPU 驱动、镜像内置的 switch_env 工具、镜像加速、常见问题排查)
在 安装说明 中统一说明;本方案中的命令仅在 Docker
镜像标签和 --env 取值上有所不同。
选项 1:Docker 镜像 — BEHAVIOR 提供 两个独立镜像,每个对应一个模型:
agentic-rlinf0.3-behavior``(OpenVLA-OFT)和 ``agentic-rlinf0.3-behavior-openpi
(OpenPI)。每个镜像只内置各自的虚拟环境,因此请根据要训练的模型拉取对应镜像
(两者之间无法通过 switch_env 互相切换):
# OpenVLA-OFT 模型:
docker run -it --rm --gpus all \
--shm-size 20g \
--network host \
--name rlinf \
-v .:/workspace/RLinf \
rlinf/rlinf:agentic-rlinf0.3-behavior
# 国内镜像:docker.1ms.run/rlinf/rlinf:agentic-rlinf0.3-behavior
# OpenPI 模型(独立镜像):
docker run -it --rm --gpus all \
--shm-size 20g \
--network host \
--name rlinf \
-v .:/workspace/RLinf \
rlinf/rlinf:agentic-rlinf0.3-behavior-openpi
# 国内镜像:docker.1ms.run/rlinf/rlinf:agentic-rlinf0.3-behavior-openpi
# 两个镜像都会默认激活各自对应的虚拟环境。
选项 2:自定义环境 — 安装 --env behavior 依赖组合:
# 国内用户可以添加 --use-mirror 加速下载。
bash requirements/install.sh embodied --model openvla-oft --env behavior
# 或安装 OpenPI 环境:
# bash requirements/install.sh embodied --model openpi --env behavior
source .venv/bin/activate
下载资产#
下载 IsaacSim 4.5,并在每次运行前设置 ISAAC_PATH:
export ISAAC_PATH=/path/to/isaac-sim
mkdir -p $ISAAC_PATH && cd $ISAAC_PATH
curl https://download.isaacsim.omniverse.nvidia.com/isaac-sim-standalone-4.5.0-linux-x86_64.zip -o isaac-sim.zip
unzip isaac-sim.zip && rm isaac-sim.zip
下载 BEHAVIOR-1K 资产,并在每次运行前设置 OMNIGIBSON_DATA_PATH:
# 数据集会占用超过 30 GB。
export OMNIGIBSON_DATA_PATH=/path/to/BEHAVIOR-1K-datasets
# 之后的 python 命令会下载数据集到 $OMNIGIBSON_DATA_PATH 中。
mkdir -p $OMNIGIBSON_DATA_PATH
# 在已激活的 venv 中运行。国内用户可设置 HF_ENDPOINT=https://hf-mirror.com。
python -c "from omnigibson.utils.asset_utils import download_omnigibson_robot_assets; download_omnigibson_robot_assets()"
python -c "from omnigibson.utils.asset_utils import download_behavior_1k_assets; download_behavior_1k_assets(accept_license=True)"
python -c "from omnigibson.utils.asset_utils import download_2025_challenge_task_instances; download_2025_challenge_task_instances()"
这些命令会:
下载 OmniGibson 需要的 IsaacSim runtime。
下载 BEHAVIOR 机器人资产、任务资产和 2025 challenge instances。
创建训练和评估脚本需要的两个环境变量。
下载模型#
下载对应模型族的检查点(任选一种方式):
# 方法 1:git clone
git lfs install
git clone https://huggingface.co/RLinf/RLinf-OpenVLAOFT-Behavior
git clone https://huggingface.co/RLinf/RLinf-Pi0-Behavior
# 方法 2:huggingface-hub(国内用户可设置 HF_ENDPOINT=https://hf-mirror.com)
# export HF_ENDPOINT=https://hf-mirror.com
pip install huggingface-hub
hf download RLinf/RLinf-OpenVLAOFT-Behavior --local-dir RLinf-OpenVLAOFT-Behavior
hf download RLinf/RLinf-Pi0-Behavior --local-dir RLinf-Pi0-Behavior
下载完成后,在配置 YAML 中指向该检查点——为 rollout 与 actor 两处模型设置相同的路径:
rollout:
model:
model_path: /path/to/downloaded-checkpoint
actor:
model:
model_path: /path/to/downloaded-checkpoint
运行#
警告
将 BEHAVIOR env worker 放在从 0 开始的 GPU 上。IsaacSim 在 env worker 从更靠后的 GPU rank 启动时可能卡住。
每个配方都是 examples/embodiment/config/ 下的一个 YAML 配置:
模型 / 用途 |
算法 |
配置 |
|---|---|---|
OpenVLA-OFT |
PPO |
|
π₀ |
PPO |
|
π₀.₅ |
PPO |
|
使用 run_embodiment.sh 启动一个配置:
export ISAAC_PATH=/path/to/isaac-sim
export OMNIGIBSON_DATA_PATH=/path/to/BEHAVIOR-1K-datasets
bash examples/embodiment/run_embodiment.sh behavior_ppo_openvlaoft
这个命令会:
加载
examples/embodiment/config/behavior_ppo_openvlaoft.yaml及共享环境配置examples/embodiment/config/env/behavior_r1pro.yaml。按组件放置配置启动 actor、rollout 和 BEHAVIOR env 的 Ray worker。
运行 PPO 训练,并把日志和检查点写入
runner.logger.log_path。
进一步配置
警告
已知问题:在当前 BEHAVIOR 设置下,OpenVLA-OFT / π₀ 的训练成功率
(env/success_once)可能保持为 0。该问题会在后续版本修复。
独立评测#
原则上,任何在 BEHAVIOR 上有非零成功率、并且已经转换为 PyTorch
格式的 pi05 checkpoint 都可以使用该配置评估。我们只将
OpenPI-Comet 作为示例来源:
下载后,可参考以下仓库将权重转换为 PyTorch 格式:
感谢 OpenPI-Comet 作者开源模型和工具,这有助于 RLinf 中的可复现评估。
转换完成后,按如下方式更新 behavior_openpi_pi05_eval.yaml:
将
actor.model.model_path和rollout.model.model_path设置为转换后的模型目录。在
env.train和env.eval中提高max_episode_steps与max_steps_per_rollout_epoch,例如设置为4096。
env:
train:
max_episode_steps: 4096
max_steps_per_rollout_epoch: 4096
eval:
max_episode_steps: 4096
max_steps_per_rollout_epoch: 4096
独立评估请走 BEHAVIOR-1K 评测指南。
该指南负责 ISAAC_PATH / OMNIGIBSON_DATA_PATH 设置、
behavior_openpi_pi05_eval 启动命令和结果解读。
配置参考#
BEHAVIOR 环境由 examples/embodiment/config/env/behavior_r1pro.yaml 驱动。RLinf 先加载
OmniGibson 的基础配置(base_config_name),再应用 omni_config 覆盖项(见
rlinf/envs/behavior/utils.py 中的 setup_omni_cfg)。下表中的字段控制 reset 行为、场景
加载、仿真器频率与吞吐,大多有合理默认值,仅在自定义任务或调优性能时需要修改。
配置项 |
含义 |
|---|---|
|
在 |
|
显式保留 |
|
当前任务 id(0–49)。RLinf 将其映射到 |
|
reset 时的实例切换: |
|
缓存实例 JSON 目录( |
|
缓存实例格式: |
|
为 |
|
头部 / 腕部相机分辨率(默认 720×720 / 480×480,应用到 R1Pro 传感器)。 |
|
动作 / 渲染 / 物理步进频率(常用默认 30 / 30 / 120)。越高越慢。 |
|
保持 |
|
保持 |
|
|
|
|
|
保持 |
|
|
|
|
|
为 |
|
将 |
生成缓存任务实例#
rlinf/envs/behavior/instance_generator.py 直接从 behavior_r1pro.yaml 生成
*_template.json 与 *_template-tro_state.json 文件(它读取 scene_model、
activity_name、activity_definition_id、机器人配置与房间加载设置,并临时切换为在线物体采样)。
若设置了 activity_instance_dir 则写入该目录,否则写入 OMNIGIBSON_DATA_PATH 默认的
2025-challenge-task-instances 目录;可用 --output-dir 覆盖。
cd /path/to/RLinf
python rlinf/envs/behavior/instance_generator.py \
--config examples/embodiment/config/env/behavior_r1pro.yaml \
--output-format template \
--start-idx 1 --end-idx 50
python rlinf/envs/behavior/instance_generator.py \
--config examples/embodiment/config/env/behavior_r1pro.yaml \
--output-format tro_state \
--start-idx 1 --end-idx 50
生成的文件名遵循
<scene_model>_task_<activity_name>_<activity_definition_id>_<activity_instance_id>_template(.json|-tro_state.json),
因此 --start-idx / --end-idx 决定 activity_instance_id 范围。tro_state 输出仅在任务
元数据提供时包含顶层 robot_poses,否则省略该键,reset 回退到任务默认机器人位姿。BEHAVIOR-1K 上游的
multiply_b1k_tasks.py 仍可使用,但推荐 RLinf 的生成器,因为它直接读取 RLinf YAML 并保留
activity_definition_id。
可视化与结果#
启动 TensorBoard 实时观察训练:
tensorboard --logdir ./logs --port 6006
最值得关注的指标是 ``env/success_once`` —— 任务成功率。每个日志指标的含义见 训练指标。
如需保存评估视频,在配置中启用:
env:
eval:
video_cfg:
save_video: True
video_base_dir: ${runner.logger.log_path}/video/eval
对于 BEHAVIOR 实验,我们受到了 Behavior-1K baselines 的启发, 仅进行了少量修改。感谢作者发布开源代码。