# LIBERO评测复用环境致fixture漂移，需在episode循环内重设seed

> 原文链接：https://robotics.hellobike.com/pitfalls/2026-09-19-openvla-342
> 频道：pitfalls | 更新日期：2026-09-19 | 标签：auto, github-issue, openvla
> 核心摘要：LIBERO评测复用环境导致fixture位置随RNG流漂移，需在每个episode重置前调用env.seed(0)并断言body_pos一致性。

# LIBERO评测复用环境致fixture漂移，需在episode循环内重设seed

::: v-pre
> 本文由 AI 根据公开内容整理，可能有误，请以原文为准：[LIBERO eval: reusing one env across episodes changes results, because fixture placement is not restored](https://github.com/openvla/openvla/issues/342)（GitHub openvla/openvla #342）

**状态**：有绕过办法

## 问题

在run_libero_eval.py中复用环境进行多episode评测时，env.seed()仅执行一次导致RNG流推进，env.reset()采样的fixture位置无法被set_init_state()恢复。这造成libero_10 task 2中stove位置偏移约3mm，渲染图像像素差异显著，导致40%的评测结果翻转，破坏配对测试有效性。

## 环境

OpenVLA LIBERO评测脚本experiments/robot/libero/run_libero_eval.py，libero_10任务集，MuJoCo仿真环境，openvla-7b-finetuned-libero-10模型checkpoint。

## 解决办法

1. 在episode循环内部、env.reset()之前调用env.seed(0)而非cfg.seed，确保fixture采样与新建环境协议一致（libero_utils.py默认硬编码seed为0）。
2. 添加运行时断言验证fixture位置一致性：首个episode记录env.sim.model.body_pos副本，后续episode使用np.array_equal比对当前body_pos与参考值，不等则抛出异常。
3. 避免仅依赖代码顺序lint测试，必须通过上述运行时数值校验防止静默回归。
4. 将修复后的body_pos写入运行产物以便事后核查配对有效性。

讨论原作者：@VihaanAgarwal 等，版权归原作者所有。
:::

## 原始参考来源 (Sources)

- [GitHub openvla/openvla #342：LIBERO eval: reusing one env across episodes changes results, because fixture placement is not restored](https://github.com/openvla/openvla/issues/342)