Skip to content

FastSAC: auto-reset 截断边界的正确 bootstrap 与 successor-slot 存储优化冲突 #97

Closed

Description

@wlgys8

问题

FastSAC 为减少 replay buffer 和异步 ring 的显存占用,可以只存每步的当前观测,并从下一条 transition 的观测推导 next_obs。这一布局在普通连续步上成立,但在 auto-reset + timeout/truncation 边界上不能直接成立:下一条 transition 的观测属于新 episode,bootstrap 所需的却是上一 episode 截断前的最后观测。

actor 与 critic 使用不对称观测时,两套观测都受影响。

最小例子

transition t:     obs=A, action=a, reward=r, terminated=False, truncated=True
截断前最后观测:   B
auto-reset 后观测: C
transition t+1:   obs=C

若把 successor slot 的 C 当成 transition t 的 next_obs,timeout target 会变为:

r + gamma * V(C)    # 新 episode 的初始状态

而正确的 timeout bootstrap 应使用:

r + gamma * V(B)    # 被截断 episode 的最后状态

物理 termination 不应 bootstrap;即使同一步也达到时间限制,termination 仍应优先。多步 return 应在 termination 或 truncation 的第一个边界停止奖励累积,不能把 reset 后新 episode 的奖励并入旧 episode。

存储约束

直接为每条 transition 增加完整的 next_obs 或 final_obs 能保留边界信息,但会基本抵消 successor-slot 布局节省的观测存储;异步 ring、共享 IPC 张量与 pinned staging 也会承担额外成本。

例如 2048 个环境、每环境 1024 条 transition、actor/critic 观测维度分别为 291/294、float32 时,额外两套 dense 观测约需 4.57 GiB,尚未计入 ring/staging 和临时张量。这只是规模示例,不应成为固定配置假设。

需要明确的契约

  • 普通步继续复用 successor observation,避免重复存储。
  • 需要 bootstrap 的截断边界能取得真实的截断前 actor/critic 观测,而非 reset 观测。
  • 环境返回给下一步 policy 的 reset 观测与提供给上一 transition 的边界观测必须区分。
  • 异步传输的边界数据在 slot 复用、wraparound、消费延迟及多 collector 情况下不能丢失或错配。
  • Replay 覆盖旧 transition 后,对应边界数据必须失效;n-step 采样应选择最终边界 transition 的观测。
  • 应明确额外存储的容量、最坏情况和超容量行为,避免静默退回错误的 reset bootstrap。

验证要求

用明显不同的 A/B/C 观测构造测试,验证 timeout bootstrap 使用 B、下一步 policy 使用 C;同时覆盖非对称 critic、纯 termination、termination+timeout、n-step、ring/replay wraparound 和异步消费。记录不同截断密度下 replay/ring/staging 的实际内存开销。

本 issue 聚焦 auto-reset 截断边界的观测语义与节省存储之间的矛盾,不预设具体实现方案。

Activity

  1. wlgys8 commented on Oct 14, 2026

    @wlgys8
    ContributorAuthor
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

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions