RoboCasa365:ROCm 下载、训练与评估
RoboCasa365 是家庭场景机器人训练与 benchmark[评测基准]框架,包含 365 个任务、厨房资产、示教数据和 GR00T/Pi0.5 等策略入口。本章复现我们在 AMD Ryzen AI MAX+ 395 上完成的资产加载、无头渲染、官方 checkpoint[检查点]推理、16 任务正式评估和四视角视频。
1. 本章产出
- RoboCasa、RoboSuite 与 MuJoCo 环境;
- 约 10 GB 厨房资产和可选 AI 生成物体资产;
- GR00T N1.5 与 Pi0.5 多任务 checkpoint[检查点];
- 16 个任务 × 50 回合的同协议结果;
- 中央、左侧、右侧和手眼相机四视角视频;
- GR00T 或 Pi0.5 的继续训练入口。
版本与任务契约
在安装完成后记录源码版本:
bashgit -C "$SRC_ROOT/robosuite" rev-parse HEAD
git -C "$SRC_ROOT/robocasa" rev-parse HEAD
正式评估使用 PandaOmron、12 维动作、同一套 16 个任务和每任务 50 回合。任务成功由 RoboCasa 环境的任务检查器给出:物体状态、容器关系、关节开合和稳定帧必须同时满足相应任务定义。评估脚本将该字段原样写入逐回合结果。
2. 下载源码和资产
bash# 先在当前终端执行 README_10 中的 WORK_ROOT、SRC_ROOT 等目录变量。
test -n "$SRC_ROOT" && test -n "$DATA_ROOT" && test -n "$MODEL_ROOT"
cd "$SRC_ROOT"
git clone https://github.com/ARISE-Initiative/robosuite.git
git clone https://github.com/robocasa/robocasa.git
python -m pip install -e "$SRC_ROOT/robosuite"
python -m pip install -e "$SRC_ROOT/robocasa"
python -m pip install imageio imageio-ffmpeg
cd "$SRC_ROOT/robocasa"
python -m robocasa.scripts.setup_macros
python -m robocasa.scripts.download_kitchen_assets
资产下载较大,中断后重新执行下载命令。浏览厨房、物体和任务:
bashpython -m robocasa.demos.demo_kitchen_scenes
python -m robocasa.demos.demo_objects
python -m robocasa.demos.demo_tasks
训练 pretrain_human300 需要预训练划分中的人工示教。RoboCasa 会根据数据注册表下载全部对应任务:
bashcd "$SRC_ROOT/robocasa"
python -m robocasa.scripts.download_datasets \
--split pretrain \
--source human
这组数据体积很大。只学习一两个任务时,可先按任务名下载:
bashpython -m robocasa.scripts.download_datasets \
--tasks PickPlaceCounterToCabinet CloseFridge
下载完成后,使用注册表确认 pretrain_human300 已解析出数据目录:
bashpython - <<'PY'
from robocasa.utils.dataset_registry import DATASET_SOUP_REGISTRY
rows = DATASET_SOUP_REGISTRY["pretrain_human300"]
print("datasets:", len(rows))
print("first:", rows[0])
assert len(rows) > 0
PY
3. 下载官方策略
bashhf download robocasa/robocasa365_checkpoints \
--include 'gr00t_n1-5_multitask_120000/**' \
--local-dir "$MODEL_ROOT/robocasa365"
hf download robocasa/robocasa365_checkpoints \
--include 'pi05_pretrain_human300_multitask_75000/**' \
--local-dir "$MODEL_ROOT/robocasa365"
模型目录应包含:
textcheckpoints/robocasa365/
├── gr00t_n1-5_multitask_120000/
└── pi05_pretrain_human300_multitask_75000/
4. 环境与动作检查
公开配套脚本位于 Radeon Physical AI Evidence Suite:
bashgit clone https://github.com/Ethan-Chen-plus/radeon-physical-ai-evidence-suite.git \
"$SRC_ROOT/radeon-physical-ai-evidence-suite"
export MUJOCO_GL=egl
python "$SRC_ROOT/radeon-physical-ai-evidence-suite/scripts/robocasa_amd_smoke.py" \
--task PickPlaceCounterToCabinet \
--episodes 3 \
--steps 40 \
--out-dir "$RUN_ROOT/robocasa365/smoke"
PandaOmron 移动操作接口为 12 维:右臂 6、夹爪 1、平面底盘 3、升降躯干 1、底盘模式 1。使用配套脚本逐维检查动作:
bashpython "$SRC_ROOT/radeon-physical-ai-evidence-suite/scripts/robocasa_mobile_mvp.py" \
--env-name PickPlaceCounterToMicrowave \
--dataset-base-path "$DATA_ROOT/robocasa365" \
--output-dir "$RUN_ROOT/robocasa365/mobile_gate" \
--episodes 1 \
--steps 40
5. GR00T N1.5 训练
bashcd "$SRC_ROOT"
git clone https://github.com/robocasa-benchmark/Isaac-GR00T.git
python -m pip install -e "$SRC_ROOT/Isaac-GR00T"
cd "$SRC_ROOT/Isaac-GR00T"
python scripts/gr00t_finetune.py \
--output-dir "$RUN_ROOT/robocasa365/gr00t_train" \
--dataset_soup pretrain_human300 \
--max_steps 120000 \
--save_steps 5000 \
--batch_size 32 \
--report_to tensorboard
pretrain_human300 对应 RoboCasa365 的 300 任务人工示教数据组合。正式长训前先把 --max_steps 设为 10,确认 loss[损失值]、GPU[图形处理器]占用和 checkpoint[检查点]写入,再恢复 120000 步。官方建议训练显存 80 GB 以上;较小 AMD 设备适合推理、评估或降低 batch size[批大小]的实验。降低 batch size[批大小]后,要在运行配置中记录实际值。
6. Pi0.5 训练
Pi0.5 使用独立 JAX[高性能数组计算框架]环境:
bashcd "$SRC_ROOT"
git clone https://github.com/robocasa-benchmark/openpi.git robocasa-openpi
python -m pip install -e "$SRC_ROOT/robocasa-openpi"
python -m pip install -e "$SRC_ROOT/robocasa-openpi/packages/openpi-client"
cd "$SRC_ROOT/robocasa-openpi"
XLA_PYTHON_CLIENT_MEM_FRACTION=1.0 python scripts/train.py \
pi05_pretrain_human300 \
--exp-name=robocasa_pi05_amd
AMD JAX[AMD 平台高性能数组计算框架]必须先通过 README_10 的矩阵预检。模型、归一化统计和训练配置要保存在同一输出目录。
7. 正式评估
GR00T:
bashcd "$SRC_ROOT/Isaac-GR00T"
export MATCH16_SITE="$EVERY_EMBODIED_ROOT/16-专题组队学习/04-AMD-ROCm策略复刻专题/code/robocasa_match16"
export PYTHONPATH="$MATCH16_SITE${PYTHONPATH:+:$PYTHONPATH}"
python scripts/run_eval.py \
--model_path "$MODEL_ROOT/robocasa365/gr00t_n1-5_multitask_120000" \
--task_set amd_match16 \
--split pretrain \
--n_episodes 50 \
--n_envs 1 \
--video_dir "$RUN_ROOT/robocasa365/gr00t_eval"
python gr00t/eval/get_eval_stats.py \
--dir "$RUN_ROOT/robocasa365/gr00t_eval" \
--task_set amd_match16
sitecustomize.py 在 Python[编程语言]启动时注册 amd_match16,不修改 RoboCasa 上游源码。MATCH16_SITE 直接使用 README_10 中定义的 $EVERY_EMBODIED_ROOT,因此 Every Embodied 与仿真源码可以放在不同磁盘。
Pi0.5 分为策略服务与仿真客户端。策略服务会持续占用当前终端,因此需要分别打开两个终端,并在两个终端中激活同一个 ROCm JAX[AMD 平台高性能数组计算环境]。
终端 A 启动策略服务:
bashcd "$SRC_ROOT/robocasa-openpi"
python scripts/serve_policy.py \
--port=8000 policy:checkpoint \
--policy.config=pi05_pretrain_human300 \
--policy.dir="$MODEL_ROOT/robocasa365/pi05_pretrain_human300_multitask_75000"
看到端口 8000 开始监听后,保持终端 A 不动。终端 B 运行仿真客户端和结果汇总:
bashcd "$SRC_ROOT/robocasa-openpi"
export MATCH16_SITE="$EVERY_EMBODIED_ROOT/16-专题组队学习/04-AMD-ROCm策略复刻专题/code/robocasa_match16"
export PYTHONPATH="$MATCH16_SITE${PYTHONPATH:+:$PYTHONPATH}"
python examples/robocasa/main.py \
--args.port 8000 \
--args.task_soup amd_match16 \
--args.split pretrain \
--args.num_trials 50 \
--args.log_dir "$RUN_ROOT/robocasa365/pi05_eval"
python examples/robocasa/get_eval_stats.py \
--dir "$RUN_ROOT/robocasa365/pi05_eval"
我们的正式协议固定 16 个任务,每任务 50 回合,两个模型共享相同任务、分母和环境成功条件:
textArrangeTea, CloseFridge, CloseToasterOvenDoor, CoffeeSetupMug,
DeliverStraw, OpenCabinet, OpenDrawer, PackIdenticalLunches,
PickPlaceDrawerToCounter, PortionHotDogs, PrepareCoffee,
RecycleBottlesByType, RinseSinkBasin, ScrubCuttingBoard,
SeparateFreezerRack, SlideDishwasherRack
| 模型 | 成功数 | 总回合 | 成功率 |
|---|---|---|---|
| GR00T N1.5 | 230 | 800 | 28.75% |
| Pi0.5 | 142 | 800 | 17.75% |
8. 四视角长程视频
bashpython "$SRC_ROOT/radeon-physical-ai-evidence-suite/scripts/robocasa365_showcase.py" \
--help
展示脚本保持策略输入分辨率不变,只提高录像相机分辨率。推荐中央、左侧、右侧和手眼相机各 960×540,再拼成 1920×1080@20fps。完整示例见 PackIdenticalLunches 长程成功视频。
9. AMD 迁移重点
| 模块 | 上游假设 | AMD 处理 | 验收方式 |
|---|---|---|---|
| GR00T N1.5 | CUDA PyTorch | 安装 ROCm PyTorch,保留 cuda 设备字符串 |
前向、反向、优化器与模型保存 |
| Pi0.5 | JAX CUDA | 隔离安装 ROCm JAX | 64×64 矩阵、模型加载与策略服务 |
| MuJoCo | 本地图形窗口 | MUJOCO_GL=egl |
reset → step → render → MP4 |
| 数据 | 注册表中的相对路径 | 统一挂载到数据盘,并让两个策略仓库读取同一注册表 | 数据条目数、视频解码与动作维度 |
| 动作接口 | PandaOmron 12 维动作 | 保持右臂、夹爪、底盘、躯干和模式位顺序 | 固定动作逐维检查 |
| 评估 | 不同策略各自脚本 | 注册同一 amd_match16 任务集合 |
16×50 同分母汇总 |
PyTorch[张量计算框架]、JAX[高性能数组计算框架]和 MuJoCo[机器人动力学仿真器]最好分环境安装。策略加载成功后先做动作接口检查;动作归一化、机器人类型或控制频率决定闭环动作是否与环境一致。
10. 常见问题
| 现象 | 检查 |
|---|---|
| 创建环境时报资产缺失 | 重新运行 download_kitchen_assets,检查 macros_private.py |
| 远端渲染失败 | 设置 MUJOCO_GL=egl 和 PYOPENGL_PLATFORM=egl |
| 模型加载成功但动作异常 | 核对机器人类型、动作维度、归一化统计和控制频率 |
| 成功视频与统计不一致 | 视频文件必须来自同一回合目录,并读取环境 success 字段 |
| Pi0.5 找不到 AMD 设备 | 在隔离环境重装 ROCm JAX[AMD 平台 JAX 运行栈]并重跑矩阵预检 |