Skip to content

Bug: mjwarp off-policy collector Env Step 分解缺 Backend Step——done-gate host sync 计时误归入 Reset Done #2495

Closed

Description

@TATP-233

问题

运行 uv run train --algo flashsac --task g1_motion_tracking --sim mjwarp 时,终端 logger(OffPolicyLogger)collector Env Step 分解中缺少 Backend Step 行。

仓库证据

  • mjwarp 的 step_tensor 是全异步的:只发射 kernel/CUDA graph 并记录 event 型 CompletionToken 即返回(third-party/unisim/src/unisim/backend/mjwarp/backend.py step_tensor,无 synchronize),因此 TorchEnv.step 测得的 step_core_ms 只是 host 端发射开销(亚毫秒级)。
  • 第一个 host 同步点是 src/unilab/base/torch_env.py step 内 autoreset gate 的 bool((terminated | truncated).any()),它落在 reset_done_ms 计时窗口中——真实的 GPU 物理等待被误记入 Reset Done,Backend Step(env_step_backend_ms)接近 0。
  • 终端 logger 对非核心行有 1% collector-cycle 占比过滤(src/unilab/rl/logging/offpolicy.py _COLLECTOR_DIAGNOSTIC_TERMINAL_MIN_PCT),把接近 0 的 Backend Step 行隐藏,于是用户看到该行"缺失"。
  • 对照:mujoco 后端 step_tensor 是同步 CPU 物理,Backend Step 正常显示。

交付行为

TorchEnv.step 把 autoreset gate 的 done-mask host 读取从 reset_done_ms 窗口拆出,归因到 step_core_ms:事件型异步后端(mjwarp)的物理等待归 Backend Step,同步后端(mujoco/motrix)数值基本不变。终端 Backend Step 行按既有 1% 物化规则正常显示。

影响面

验收

  • 新增确定性测试:fake clock 下 done-gate 窗口计入 step_core_ms、不计入 reset_done_ms。
  • logger 测试:System 列按 manifest 证据渲染 MPS 行。
  • make check、focused tests、make test-all 通过。

PR base

main

Activity

  1. TATP-233 commented on Oct 22, 2026

    @TATP-233
    CollaboratorAuthor

    已修复,可以关闭:PR #2497 已合入当前 main(merge 50b8d9c1)。TorchEnv 现在将异步后端 done-gate/drain 的 host 同步窗口归因到 Backend Step,OffPolicyLogger 也会按 runtime manifest 渲染 CUDA MPS 状态;相关回归测试已随 PR 合入。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions