基于RoboCasa365 Benchmark的强化学习#
本文档介绍 RLinf 中面向 benchmark 的 RoboCasa365 集成方式。它不会覆盖原有
RoboCasa 配方,而是新增独立的 robocasa365 环境目录与
配置,使用 RoboCasa 官方 dataset registry 选择任务。
主要目标是在 RoboCasa365 官方 benchmark split 上训练和评测视觉-语言-动作模型, 同时保持旧版 RoboCasa recipe 稳定。相比单任务 RoboCasa 示例,RoboCasa365 配方 更关注:
Benchmark split 控制:通过官方 registry 选择
pretrain或target任务。Task-soup 评测:评测
atomic_seen、composite_unseen等 benchmark 切片。运行时任务元信息:在环境观测中暴露 split、task-soup 等任务元信息。
环境说明#
RoboCasa365 Benchmark
环境: RoboCasa365 厨房操作 benchmark
任务选择方式: 使用 RoboCasa 官方
split+task_soupregistry机器人: 默认使用移动底座 Panda 配置
PandaOmron观测: 多视角 RGB 图像 + 可配置的 proprioceptive state 提取
动作空间: 可配置的 RoboCasa 移动操作 action schema
默认 RLinf 配方使用:
训练阶段
split=pretrain轻量评测配置使用
split=pretrain首个基准切片
task_soup=atomic_seen
如果需要切换到 composite_seen 或 composite_unseen,直接修改 YAML 即可。
观测结构
主相机图像:默认使用
robot0_agentview_left_image腕部相机图像:默认使用
robot0_eye_in_hand_image本体感知状态:通过
observation.state_layout中配置的 key 组装状态向量
动作结构
默认 OpenPI 配方使用 12 维动作 schema。wrapper 可以在 env stepping 前关闭底座控制, 并映射 OpenPI 输出中的有效动作 slice。
配置文件#
RoboCasa365 的环境配置位于:
examples/embodiment/config/env/robocasa365.yaml
关键字段包括:
task_source: RoboCasa365 应保持为dataset_registrydataset_source: RoboCasa 注册的数据来源,通常为humansplit: benchmark split,例如pretrain或targettask_soup: 官方 task soup 名称,例如atomic_seentask_filter: 可选的 include / exclude 过滤器task_mode: 可选的atomic或composite保护字段observation: RLinf 使用的相机 key 和 state-layout 映射action_space: env stepping 前的动作 schema 与 OpenPI slice 映射
依赖安装#
1. 克隆 RLinf#
git clone https://github.com/RLinf/RLinf.git
cd RLinf
2. 准备 RoboCasa 资源#
export ROBOCASA_ASSETS_PATH=/path/to/robocasa_assets
mkdir -p "$ROBOCASA_ASSETS_PATH"/{_downloads,objects}
hf download robocasa/robocasa-assets \
--repo-type dataset \
--include textures.zip generative_textures.zip fixtures.zip objaverse.zip aigen_objs.zip \
--local-dir "$ROBOCASA_ASSETS_PATH/_downloads"
hf download nvidia/PhysicalAI-Robotics-Manipulation-Objects-Kitchen-MJCF \
--repo-type dataset \
--include "fixtures_lightwheel/*.zip" \
--local-dir "$ROBOCASA_ASSETS_PATH/_downloads"
hf download nvidia/PhysicalAI-Robotics-Manipulation-Objects-Kitchen-MJCF \
--repo-type dataset \
--include "objects_lightwheel/*.zip" \
--local-dir "$ROBOCASA_ASSETS_PATH/_downloads"
for item in \
textures.zip:textures \
generative_textures.zip:generative_textures \
objaverse.zip:objects/objaverse \
aigen_objs.zip:objects/aigen_objs; do
zip_name="${item%%:*}"
target_rel="${item#*:}"
parent_rel="$(dirname "$target_rel")"
if [[ "$parent_rel" == "." ]]; then
unzip_dir="$ROBOCASA_ASSETS_PATH"
else
unzip_dir="$ROBOCASA_ASSETS_PATH/$parent_rel"
fi
mkdir -p "$unzip_dir"
unzip -q "$ROBOCASA_ASSETS_PATH/_downloads/$zip_name" \
-d "$unzip_dir"
done
mkdir -p "$ROBOCASA_ASSETS_PATH/fixtures"
find "$ROBOCASA_ASSETS_PATH/_downloads/fixtures_lightwheel" -name "*.zip" \
-exec unzip -q {} -d "$ROBOCASA_ASSETS_PATH/fixtures" \;
mkdir -p "$ROBOCASA_ASSETS_PATH/objects/lightwheel"
find "$ROBOCASA_ASSETS_PATH/_downloads/objects_lightwheel" -name "*.zip" \
-exec unzip -q {} -d "$ROBOCASA_ASSETS_PATH/objects/lightwheel" \;
3. 安装依赖#
export ROBOCASA_ASSETS_PATH=/path/to/robocasa_assets
bash requirements/install.sh embodied --model openpi --env robocasa365
source .venv/bin/activate
数据集任务选择#
RLinf 现在将任务选择委托给 RoboCasa 官方 registry。内部镜像的是如下调用方式:
from robocasa.utils.dataset_registry import get_ds_soup
task_names = get_ds_soup(
task_set="atomic_seen",
split="pretrain",
source="human",
)
RoboCasa 将这个参数命名为 task_set;它对应 RLinf YAML 中的
task_soup 字段。
参考文档:
RoboCasa 数据使用文档: https://robocasa.ai/docs/build/html/datasets/using_datasets.html
模型权重#
下载官方 RoboCasa365 Pi0 checkpoint:
hf download RLinf/RLinf-pi0-robocasa-pretrain-human300 \
--local-dir /path/to/pi0-robocasa-pretrain-human300
在 YAML 中将 rollout 和 actor 的模型路径都指向下载目录:
rollout:
model:
model_path: "/path/to/pi0-robocasa-pretrain-human300"
actor:
model:
model_path: "/path/to/pi0-robocasa-pretrain-human300"
训练#
bash examples/embodiment/run_embodiment.sh robocasa365_opendrawer_ppo_openpi
该配置使用 OpenPI 和 PPO 训练 RoboCasa365 单任务 OpenDrawer:
env.train.split=pretrainenv.train.task_soup=atomic_seenenv.train.task_filter=["OpenDrawer"]env.train.task_mode=atomic
OpenDrawer Batch 整除关系
修改 examples/embodiment/config/robocasa365_opendrawer_ppo_openpi.yaml 中的
GPU placement、rollout 数量或 actor batch size 时,先按下面的关系检查。
chunk_steps = env.train.max_steps_per_rollout_epoch / actor.model.num_action_chunks
rollout_size_per_actor_rank = (
env.train.total_num_envs * env.train.rollout_epoch / actor_world_size
) * chunk_steps
rollout_size_per_actor_rank % (actor.global_batch_size / actor_world_size) == 0
actor.global_batch_size % (actor.micro_batch_size * actor_world_size) == 0
端到端测试#
短版 PPO e2e 配置为 robocasa365_ppo_openpi:
bash tests/e2e_tests/embodied/run.sh robocasa365_ppo_openpi
评测#
轻量评测配置为 robocasa365_eval_openpi:
bash evaluations/run_eval.sh robocasa365_eval_openpi
该配置默认在以下切片上评测:
env.eval.split=pretrainenv.eval.task_soup=atomic_seenenv.eval.task_mode=atomic默认不设置
env.eval.task_filter,因此不会进一步缩小所选 pretrain 切片
如果要切换到其他 benchmark 切片,可以直接覆盖 YAML 字段:
env:
eval:
split: target
task_soup: composite_unseen
task_mode: composite
例如:
bash evaluations/run_eval.sh robocasa365_eval_openpi \
env.eval.task_soup=composite_unseen \
env.eval.task_mode=composite