LeRobot入门教程 11:LeRobot 评测
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.path | lerobot/pi0_libero_finetuned | Hub 上的策略仓库,也可以是本地训练产出的目录 |
--env.type | libero | 用哪个仿真环境(LeRobot 还支持 aloha、pusht 等) |
--env.task | libero_spatial | 哪个 suite,见 09 册第 2 节 |
--eval.n_episodes | 10 | 跑 10 条完整 episode 求平均。10 条的成功率误差很大,正式对比一般要 50–200 条 |
--eval.batch_size | 1 | 同时并行跑几个环境。显存够可以调大,评测速度近似线性提升 |
--policy.device | cuda | 用 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 |