logo Mr.Robota 具身智能学习手册
第十六章:专题组队学习

仿真基准下载与统一目录

本章先完成所有 benchmark[评测基准]共用的存储、鉴权、断点下载和运行目录。后续 RoboCasa365、DexJoCo、DISCOVERSE、RoboWits 与 Unitree G1 教程都沿用这里的变量,避免把数据、checkpoint[检查点]和缓存写进源码仓库。

1. 推荐目录

先进入 Every Embodied 仓库根目录,再定义教程与大文件目录:

bashexport EVERY_EMBODIED_ROOT="$(git rev-parse --show-toplevel)"
export WORK_ROOT=${WORK_ROOT:-$HOME/physical-ai}

# AMD 开发者云的持久化 PVC 可使用:
# export WORK_ROOT=/workspace/physical-ai

# AUP 镜像若约定 /home/jovyan 持久化,可使用:
# export WORK_ROOT=/home/jovyan/physical-ai
export SRC_ROOT=$WORK_ROOT/src
export DATA_ROOT=$WORK_ROOT/datasets
export MODEL_ROOT=$WORK_ROOT/checkpoints
export RUN_ROOT=$WORK_ROOT/runs
export CACHE_ROOT=$WORK_ROOT/cache
export ENV_ROOT=$WORK_ROOT/envs
export HF_HOME=$CACHE_ROOT/huggingface
export PIP_CACHE_DIR=$CACHE_ROOT/pip
export UV_CACHE_DIR=$CACHE_ROOT/uv

test -f "$EVERY_EMBODIED_ROOT/README.md"
mkdir -p "$SRC_ROOT" "$DATA_ROOT" "$MODEL_ROOT" "$RUN_ROOT" "$ENV_ROOT" \
  "$HF_HOME" "$PIP_CACHE_DIR" "$UV_CACHE_DIR"

源码只保存代码和小配置。数据、模型、视频与训练输出分别放到独立目录,便于删除缓存而不误删训练结果。

2. AMD 设备预检

PyTorch[张量计算框架]在 ROCm[AMD 开放计算平台]上仍使用 torch.cuda 设备接口;判断后端时要同时检查 torch.version.hip。

bashpython - <<'PY'
import torch

print("torch:", torch.__version__)
print("hip:", torch.version.hip)
print("available:", torch.cuda.is_available())
print("device:", torch.cuda.get_device_name(0) if torch.cuda.is_available() else None)
assert torch.cuda.is_available()
assert torch.version.hip is not None
PY

JAX[高性能数组计算框架]项目另做矩阵预检:

bashJAX_PLATFORMS=rocm python - <<'PY'
import jax
import jax.numpy as jnp

print("jax:", jax.__version__)
print("backend:", jax.default_backend())
print("devices:", jax.devices())
x = jnp.ones((64, 64), dtype=jnp.float32)
print("sum:", float((x @ x).sum().block_until_ready()))
assert jax.default_backend() == "rocm"
PY

3. Hugging Face 鉴权与下载

公开模型可直接下载;受限数据集需要先在网页申请访问,再在终端登录。token[访问令牌]只写入本机凭据,不写进脚本或 Notebook[交互式笔记本]。

bashhf auth login
hf auth whoami

推荐使用 hf download 的 --local-dir,中断后重新执行同一命令即可续传。下面先定义仓库和本地目录,替换变量值后可直接运行:

bashexport HF_MODEL_REPO=robocasa/robocasa365_checkpoints
export HF_DATASET_REPO=DexJoCo/DexJoCo-Datasets-LeRobot
export LOCAL_MODEL_DIR="$MODEL_ROOT/robocasa365"
export LOCAL_DATASET_DIR="$DATA_ROOT/dexjoco-lerobot"

hf download "$HF_MODEL_REPO" \
  --repo-type model \
  --local-dir "$LOCAL_MODEL_DIR"

hf download "$HF_DATASET_REPO" \
  --repo-type dataset \
  --local-dir "$LOCAL_DATASET_DIR"

只取仓库中的一个目录时使用 --include:

bashexport HF_SUBDIR='pi05_pretrain_human300_multitask_75000/**'
hf download "$HF_MODEL_REPO" \
  --include "$HF_SUBDIR" \
  --local-dir "$LOCAL_MODEL_DIR"

4. 无头渲染

远端设备没有桌面窗口时使用 EGL[无窗口图形渲染接口]:

bashexport MUJOCO_GL=egl
export PYOPENGL_PLATFORM=egl
export TOKENIZERS_PARALLELISM=false

最小验证不是“程序可导入”,而是完成一次 reset → step → render → MP4:

bashffprobe -v error -select_streams v:0 \
  -show_entries stream=codec_name,width,height,r_frame_rate \
  -of default=noprint_wrappers=1 "$RUN_ROOT/robocasa365/smoke/episode_000.mp4"

5. 两层运行协议

每套 benchmark[评测基准]都分成两层:

层级 目的 最小输出
smoke[冒烟测试] 验证环境、资产、动作维度和视频链路 1 个任务、1 个短回合、MP4、环境信息
formal evaluation[正式评估] 统计模型能力 固定任务、固定 seed[随机种子]、完整分母、逐回合结果

训练前先通过 smoke[冒烟测试],但正式结果只从完整评估目录汇总。

6. 统一运行目录

textruns/{benchmark}/{model}/{run_name}/
├── run_config.json
├── environment.txt
├── train.log
├── metrics.jsonl
├── checkpoints/
├── eval/
│   └── {task}/
│       ├── eval_info.json
│       └── videos/
└── summary.json

run_config.json 至少记录上游版本、任务、模型、动作/观测维度、相机、控制频率、训练步数和评估 seed[随机种子]。summary.json 必须从逐回合文件聚合,不手填成功率。

7. 下载完成检查

bashexport PROJECT_DIR="$SRC_ROOT/robocasa"
export DATASET_DIR="$DATA_ROOT/dexjoco-lerobot"
export CHECKPOINT_DIR="$MODEL_ROOT/robocasa365"

test -d "$PROJECT_DIR/.git"
test -n "$(find "$DATASET_DIR" -type f -print -quit)"
test -n "$(find "$CHECKPOINT_DIR" -type f -print -quit)"
df -h "$WORK_ROOT"

确认源码、数据和模型目录都非空,并预留训练 checkpoint[检查点]与视频空间后,再进入对应教程。

8. 后续入口