Work type: infra
Area: other
Scope: Large / Umbrella(只做 roadmap、依赖排序和边界确认,不直接授权开发)
完成状态
已于 2026-08-10 按依赖顺序完成全部 roadmap 工作,所有 implementation PR 均已合并到 dev/issue-933-gpu-resident-replay:
最终 dev 集成头为 64caa791。最后一个 child 的 make test-all 通过(1504 passed,33 skipped,1 xfailed),roadmap 不再保留 off-policy 多 GPU、CPU/XPU replay 替代路径或兼容 fallback。
Owner summary
这次只做一件事:让 SAC、TD3、FlashSAC 的 off-policy training 最终只保留单 learner device 的 GPU-resident replay。#934 先把单 CUDA/MPS replay 改为 device-authoritative bounded ingress;随后删除现有 off-policy 多 GPU 生产入口和分布式死代码,最后删除单 device CPU replay fallback 与 replay_pipeline 双分支。
明确不再支持 off-policy 多 GPU;PPO、APPO、RSL-RL 等其他 owner 的多 GPU 能力不在本 roadmap 范围。预计 5 个 implementation child、5 个聚焦 PR;#934 为 15 文件/789 行净手写改动,余下四个以删除为主,分别控制生产 support removal、distributed dead-code cleanup 和单 device CPU replay cleanup。长期只维护 bounded ingress、一个完整 device ring、CUDA side stream 与 MPS learner-thread submission,不再维护 rank fan-out、NCCL learner lifecycle 或第二套 replay pipeline。
产品决定与范围变化
原 roadmap 计划通过 #935 把多 GPU replay 迁移到 bounded ingress。maintainer 已决定不再需要该特性,因此:
这是 public support downgrade;创建/更新这些 issue 只授权规划。开始 #938 、#941 或 #936 仍需逐个单独确认。
现状依据与推荐方案
#901 已确认单 device gpu_resident 同时存在 host R 与 device R。#934 在 replay owner layer 引入固定两槽 ingress,并在 device copy 完成后才发布 committed pointer,从而让 host storage 与 capacity 解耦。
现有 multi-GPU runner 仍显式创建完整 CPU ReplayBuffer,并由每个 rank 建立 device mirror。跳过 #935 后若直接执行旧 #936 ,会删除该 runtime 仍依赖的 host owner;因此必须先用 #937 删除整个 off-policy multi-GPU execution path,再做单 device cleanup,不能用 silent fallback 或薄 adapter 假装迁移完成。
Roadmap 与 child issues
#934 单 GPU gpu_resident:device-authoritative bounded ingress
单 CUDA/MPS 使用固定深度 ingress 和唯一完整 device ring;保持同步/异步 collection、terminal patch、ring/freshness/seed、hot/cold batch 和 graph packed layout。当前候选与 CUDA/MPS 验证证据见 issue comments;本 child 不删除迁移期 fallback。
#937 移除 off-policy 多 GPU 生产入口与 runtime (依赖 Work: 单 GPU gpu_resident replay 改为 device-authoritative bounded ingress #934 )
删除 training.num_gpus 与 sync 配置、MultiGPUOffPolicyRunner、两个 multi-GPU replay pipeline、NCCL/rank lifecycle、对应测试和用户 support claim;旧 override 明确失败。PPO/APPO 等非 off-policy 多 GPU不受影响。
#938 删除 off-policy 分布式 learner hooks (依赖 Work: 移除 off-policy 多 GPU 生产入口与 runtime #937 )
删除 distributed contract、FastSAC/FlashSAC world-size、all-reduce/broadcast 分支,以及 FastTD3/HORA capability flags;不改变单 device 数值路径或 checkpoint payload。
#941 删除 off-policy logger 的分布式专属 metrics (依赖 Cleanup: 删除 off-policy 分布式 learner hooks #938 )
删除 rank barrier、parameter sync、world-size 与 multi-GPU sync-mode/interval 字段;保留单 device timing 和 throughput 指标。
#936 删除单 device CPU replay pipeline 与 replay_pipeline 配置分支 (依赖 Work: 单 GPU gpu_resident replay 改为 device-authoritative bounded ingress #934 /Work: 移除 off-policy 多 GPU 生产入口与 runtime #937 /Cleanup: 删除 off-policy 分布式 learner hooks #938 /Cleanup: 删除 off-policy logger 的分布式专属 metrics #941 )
删除 cpu_pinned_double_buffer、collector pack IPC、training.replay_pipeline 选择和 GPUResidentReplayPipeline 的 legacy CPU-authoritative mirror;所有 off-policy training 入口只构造 Work: 单 GPU gpu_resident replay 改为 device-authoritative bounded ingress #934 的单 device-authoritative pipeline。
依赖顺序:#934 → #937 → #938 → #941 → #936 。
取消项:#935 ,不再实施。
单 device 性能与时序契约
learner update(batch N) 窗口内必须完成下一批 add(N+1) → device copy/commit → sample/gather(N+1);下一 tick 边界只允许 event wait 与 hot/cold swap。
全局 non-goals
不保留或重新设计 off-policy 多 GPU、replay sharding、跨 GPU replay、NCCL transition broadcast 或 rank-local device ring。
不删除 PPO、APPO、RSL-RL 等其他 owner 的多 GPU 能力。
不改变 learner batch schema、网络结构、checkpoint payload、learning-start、replay freshness 或训练动力学。
不为 CPU/XPU 建替代 replay path;unsupported device 必须在创建 env、shared full replay 或 device R 前显式失败。
不新增 runner/lifecycle、collector/learner 同步协议、常规 CI 或永久 benchmark 基础设施。
全局 stop conditions
任一 child 若影响非 off-policy multi-GPU、需要 replacement execution path、新 runner/lifecycle、改变 checkpoint payload或单 device 数值语义、超过声明文件/非机械 LOC 预算、生产 consumer 未迁移,或单 device CUDA/MPS 稳态性能退化,立即暂停并回到本 umbrella 重新拆分;不得保留隐藏入口、兼容 alias 或 silent fallback。
证据与依赖
完成状态
已于 2026-08-10 按依赖顺序完成全部 roadmap 工作,所有 implementation PR 均已合并到
dev/issue-933-gpu-resident-replay:not_planned取消,未实现多 GPU replay。最终 dev 集成头为
64caa791。最后一个 child 的make test-all通过(1504 passed,33 skipped,1 xfailed),roadmap 不再保留 off-policy 多 GPU、CPU/XPU replay 替代路径或兼容 fallback。Owner summary
这次只做一件事:让 SAC、TD3、FlashSAC 的 off-policy training 最终只保留单 learner device 的 GPU-resident replay。#934 先把单 CUDA/MPS replay 改为 device-authoritative bounded ingress;随后删除现有 off-policy 多 GPU 生产入口和分布式死代码,最后删除单 device CPU replay fallback 与 replay_pipeline 双分支。
明确不再支持 off-policy 多 GPU;PPO、APPO、RSL-RL 等其他 owner 的多 GPU 能力不在本 roadmap 范围。预计 5 个 implementation child、5 个聚焦 PR;#934 为 15 文件/789 行净手写改动,余下四个以删除为主,分别控制生产 support removal、distributed dead-code cleanup 和单 device CPU replay cleanup。长期只维护 bounded ingress、一个完整 device ring、CUDA side stream 与 MPS learner-thread submission,不再维护 rank fan-out、NCCL learner lifecycle 或第二套 replay pipeline。
产品决定与范围变化
原 roadmap 计划通过 #935 把多 GPU replay 迁移到 bounded ingress。maintainer 已决定不再需要该特性,因此:
这是 public support downgrade;创建/更新这些 issue 只授权规划。开始 #938、#941 或 #936 仍需逐个单独确认。
现状依据与推荐方案
#901 已确认单 device gpu_resident 同时存在 host R 与 device R。#934 在 replay owner layer 引入固定两槽 ingress,并在 device copy 完成后才发布 committed pointer,从而让 host storage 与 capacity 解耦。
现有 multi-GPU runner 仍显式创建完整 CPU ReplayBuffer,并由每个 rank 建立 device mirror。跳过 #935 后若直接执行旧 #936,会删除该 runtime 仍依赖的 host owner;因此必须先用 #937 删除整个 off-policy multi-GPU execution path,再做单 device cleanup,不能用 silent fallback 或薄 adapter 假装迁移完成。
Roadmap 与 child issues
#934 单 GPU gpu_resident:device-authoritative bounded ingress
单 CUDA/MPS 使用固定深度 ingress 和唯一完整 device ring;保持同步/异步 collection、terminal patch、ring/freshness/seed、hot/cold batch 和 graph packed layout。当前候选与 CUDA/MPS 验证证据见 issue comments;本 child 不删除迁移期 fallback。
#937 移除 off-policy 多 GPU 生产入口与 runtime(依赖 Work: 单 GPU gpu_resident replay 改为 device-authoritative bounded ingress #934)
删除 training.num_gpus 与 sync 配置、MultiGPUOffPolicyRunner、两个 multi-GPU replay pipeline、NCCL/rank lifecycle、对应测试和用户 support claim;旧 override 明确失败。PPO/APPO 等非 off-policy 多 GPU不受影响。
#938 删除 off-policy 分布式 learner hooks(依赖 Work: 移除 off-policy 多 GPU 生产入口与 runtime #937)
删除 distributed contract、FastSAC/FlashSAC world-size、all-reduce/broadcast 分支,以及 FastTD3/HORA capability flags;不改变单 device 数值路径或 checkpoint payload。
#941 删除 off-policy logger 的分布式专属 metrics(依赖 Cleanup: 删除 off-policy 分布式 learner hooks #938)
删除 rank barrier、parameter sync、world-size 与 multi-GPU sync-mode/interval 字段;保留单 device timing 和 throughput 指标。
#936 删除单 device CPU replay pipeline 与 replay_pipeline 配置分支(依赖 Work: 单 GPU gpu_resident replay 改为 device-authoritative bounded ingress #934/Work: 移除 off-policy 多 GPU 生产入口与 runtime #937/Cleanup: 删除 off-policy 分布式 learner hooks #938/Cleanup: 删除 off-policy logger 的分布式专属 metrics #941)
删除 cpu_pinned_double_buffer、collector pack IPC、training.replay_pipeline 选择和 GPUResidentReplayPipeline 的 legacy CPU-authoritative mirror;所有 off-policy training 入口只构造 Work: 单 GPU gpu_resident replay 改为 device-authoritative bounded ingress #934 的单 device-authoritative pipeline。
依赖顺序:#934 → #937 → #938 → #941 → #936。
取消项:#935,不再实施。
单 device 性能与时序契约
learner update(batch N) 窗口内必须完成下一批 add(N+1) → device copy/commit → sample/gather(N+1);下一 tick 边界只允许 event wait 与 hot/cold swap。
全局 non-goals
全局 stop conditions
任一 child 若影响非 off-policy multi-GPU、需要 replacement execution path、新 runner/lifecycle、改变 checkpoint payload或单 device 数值语义、超过声明文件/非机械 LOC 预算、生产 consumer 未迁移,或单 device CUDA/MPS 稳态性能退化,立即暂停并回到本 umbrella 重新拆分;不得保留隐藏入口、兼容 alias 或 silent fallback。
证据与依赖