## 问题 异步训练的权重通道(learner → collector 的 seqlock 双缓冲通道,含 host 与 CUDA-IPC 两种介质)目前位于 `motrix_rl_builtin` 的 fastsac 插件内,且 payload 形状是硬编码的: - `WeightChannelShared(obs_dim)` 按"一个 actor 的 flat params + 恰好一个 obs normalizer 的统计(mean/std/var/count)"定容; - `publish(actor, obs_normalizer)` 的签名把"一个模块 + 一个 normalizer"写死在协议里。 与 #159 解决的 transition 侧对称,这带来两个问题:携带多个推理模块、多个 normalizer 统计段或版本计数的异步后端无法复用这套已验证的 seqlock 实现;公共传输基建住在具体算法插件包里。 另外,checkpoint 的 manifest 契约只有单一用途维度,没有区分"完整训练态 artifact(resume 用:全部模块 + optimizer + 进度 + RNG)"与"推理 artifact(export/play 用:仅推理模块 + normalizer)",export/play 路径只能从完整训练态里解析。 ## 方案 1. 新增 `motrix_rl/transport/inference_bundle.py`:`InferenceBundleSpec`(命名模块段 + 命名 normalizer 段 + 命名计数器); 2. weight channel 原语上移 `motrix_rl/transport`,构造与 publish/receive 改为按 spec 声明、按名寻址;**seqlock 协议、双缓冲、介质选择逻辑一行不动**; 3. fastsac 声明 `actor + obs_norm` 的 spec 迁为首个消费者,运行时行为不变; 4. checkpoint manifest 契约支持双轨 artifact kind(训练态 / 推理),export/play 的选取逻辑优先解析推理 artifact,无则回退现状(对现有 provider 零影响)。 ## 验收 - fastsac 既有测试全绿;训练回归(epyc + 4090,g1-walk-flat / g1-wbt-dance,同 seed A/B)吞吐与奖励曲线不倒退——seqlock 通道是热路径; - 新增非 fastsac 形状的合成 bundle(多模块段 + 多 normalizer 段 + 计数器)契约测试:publish/receive 一致性、版本号、lag 语义; - manifest 双轨 kind 的单元测试。 ## 边界 - 不写任何新算法后端的代码; - 不动 transition ring(#159 已完成); - play/export 的完整 policy runtime(历史管理等)不在本 issue。
Activity
feat: generalize the async weight channel into a spec-driven inferenc…