LeRobot入门教程 11:LeRobot 评测

目录:00_LeRobot入门教程_目录.md

1. 为什么要单独讲评测

自己写循环跑 20 步只能看个大概。要回答「这个策略到底会做几成任务」,必须跑固定数量的完整 episode、统计成功率。LeRobot 把这件事做成了命令行工具 lerobot-eval。

用命令行而不是 Python 的好处:它自动处理多个 episode、多个初始状态、并行环境、结果汇总,还不用你自己管显存回收。

2. 命令和参数

lerobot-eval \
    --policy.path=lerobot/pi0_libero_finetuned \
    --env.type=libero --env.task=libero_spatial \
    --eval.n_episodes=10 --eval.batch_size=1 --policy.device=cuda

逐参数看:

参数本例取值说明
--policy.pathlerobot/pi0_libero_finetunedHub 上的策略仓库,也可以是本地训练产出的目录
--env.typelibero用哪个仿真环境(LeRobot 还支持 aloha、pusht 等)
--env.tasklibero_spatial哪个 suite,见 09 册第 2 节
--eval.n_episodes10跑 10 条完整 episode 求平均。10 条的成功率误差很大,正式对比一般要 50–200 条
--eval.batch_size1同时并行跑几个环境。显存够可以调大,评测速度近似线性提升
--policy.devicecuda用 GPU 推理

3. 结果怎么看

跑完会打印类似:

eval 成功率 / 平均 episode 长度 / 每条 episode 的返回值

关注两个数:

  • 成功率(success rate):任务完成的比例。这个数必须和具体任务、随机种子一起看,不同任务之间可能差几十个百分点,不要拿单个数字下结论;
  • 平均步数:完成任务平均用多少步。步数接近上限(280)说明策略在「磨」,成功的可能是碰巧撞上的。

跑完要跨 suite 对比才算完整评测,比如 libero_spatial / libero_object / libero_goal / libero_10 各跑一遍,后面的长任务掉得最厉害。

4. 常见问题

现象原因处理
评测跑很久n_episodes × 每条最长 280/520 步先用 n_episodes=3 试跑通,再放大
显存不够batch_size 太大降到 1
成功率异常低suite 和权重不匹配pi0_libero_finetuned 是按 LIBERO 全家桶微调的,换别的环境要换权重
结果波动大样本太少提高 n_episodes,或固定 init_states