Tensor runtime¶
SAC 与 FlashSAC 会在探测环境或构造 learner 之前解析所有面向进程
启动的 tensor-runtime 设置。owner YAML 中的值会被收敛为一个有边界的
RuntimeSettings 对象并传给 off-policy runner。因此,非法值、超出
边界的数据以及显存预算不可能满足的组合,都会在 collector 或 learner 进程
启动前失败。
该契约只覆盖当前 scoped 单 GPU off-policy runtime;它不是自动调参器,也不 提供多 GPU scaling。
Owner 默认值与边界¶
设置 |
默认值 |
有效范围或约束 |
|---|---|---|
|
|
正整数,最大 |
|
|
正整数,最大 |
|
|
正整数,最大 |
|
|
|
|
|
|
Learner 每次同步的行数 |
|
受 CUDA 显存预算约束 |
除 training.cuda_process_sharing 外,所有值必须是精确的正整数。布尔值、字符串、
浮点数、零和负数都会 fail closed。training.cuda_process_sharing 只接受 null
或显式字符串 mps。G1 Motion Tracking / MJWarp owner 仅有意将
collector_metrics_interval 覆盖为 100;其他 tensor-runtime 默认值仍保持
上表所示。
设备语义与解析¶
设备相关设置按消费层分离:
配置键 |
生效层 |
合法值 |
|---|---|---|
|
训练装配层,决定 collector tensor 驻留(HOST_BRIDGE Manager 载体与派生的 off-policy inference ring) |
|
|
HOST_BRIDGE 后端的 Manager 公共 tensor |
|
|
learner 与 rank-local 进程选择 |
具体 Torch device 标签 |
训练键是唯一面向用户的 collector tensor 驻留请求。auto 跟随已解析的 learner 设备:
CUDA 路由 rank-local 带序号设备,CPU 路由 CPU,torch.mps(Metal
Performance Shaders)保留 owner/default CPU 放置。显式 cpu/cuda 优先于
auto。cuda 是具体设备家族,绝不映射到 MPS;无 CUDA 主机上的 CUDA 请求
会 fail closed。
载体路由由能力声明驱动:MuJoCo、Motrix、Drake 与 SuperDex 声明了
in-process packed HOST_BRIDGE transfer plan,支持 cpu/cuda 载体。
其他后端忽略 auto/cpu,但 cuda 请求会 fail closed。请求超出所选后端
声明的 torch_devices 时同样 fail closed。run_config.json 保留组合后的
配置,并在 run.resolved_devices 的 collector_tensor 条目中记录
“配置值 → 解析值”映射;启动日志打印同一映射。
off-policy inference transport 是纯派生事实,不再是配置键:
collector_tensor_device=cpu 推导 host ring(观测与动作走 CPU inference
ring;默认合法配对中 learner 是 CPU 或 Apple MPS,CUDA learner 的配对约束
见下文的配对契约),cuda 推导 CUDA ring。cuda
遵循 Torch device type 语义,覆盖 NVIDIA CUDA 与 AMD ROCm。它不会放宽独立
平台 gate:CUDA-only tensor backend 在 ROCm/HIP 上仍 fail closed,
training.cuda_process_sharing 仍只开放给 NVIDIA 专属的 CUDA MPS daemon 与
native H2D 实现。
已移除键会带迁移错误 fail closed:用 training.collector_tensor_device 替代
training.sim_carrier_device 与 training.inference_transport,用
env.collector_tensor_device 替代 env.sim_carrier_device 与
manager_torch_device,并用已解析的 learner 设备替代
env.tensor_runtime_device。
迁移说明:默认 auto 下的 CUDA learner 会通过 packed host bridge 呈现 CUDA
tensor,并派生 CUDA inference ring。此时每个 collector 进程会在
learner GPU 上额外持有一个 CUDA context(拓扑见
Tensor Runtime 生产指南)。
配对契约(issue #2483,ADR-0019):在非 ROCm 的 Torch 构建上,显式
training.collector_tensor_device=cpu 与 CUDA learner 的组合会 fail
closed——CPU 载体不再是 CUDA learner 的性能路径(#2479 重测确认其与 CUDA
载体 + CUDA MPS 吞吐持平)。CPU 载体仍然合法的配对是:CPU learner、
torch.mps learner(Apple Silicon 上唯一的 host bridge 拓扑)与 ROCm/HIP
构建(无 CUDA MPS 等价物,CPU 载体是唯一进程共享缓解)。归因基线与调试
run 通过 UNILAB_ALLOW_CUDA_LEARNER_CPU_CARRIER=1 显式 opt-in 保留旧拓扑。
“worker”一词同样按层区分:
术语 |
含义 |
|---|---|
Collector worker |
APPO 或 off-policy 中推进环境并发布 rollout 的进程 |
Backend worker |
后端自有外部模拟器进程(例如 Isaac) |
torchrun rank |
PPO 多 GPU launcher 启动的分布式 learner rank |
Backend process device |
进程全局加速器绑定,不是 Manager carrier 键 |
Replay ingress 权衡¶
默认 replay_ingress_slot_rows: null 会解析为 algo.num_envs,并为每个
collector vector 发布一个 ingress chunk。这使 publication 与同步模式保持
可预测,是推荐的生产默认值。
将该字段设置为更小的值可以把一个 collector vector 切成连续 chunk,从而降低 常驻 ingress 内存。它只应用于显式的内存压力调参。chunk 数量增加意味着更多 publication、更多 producer backpressure 机会,并且在 CUDA 上每个发布的 chunk 都会引入一次 current-stream barrier。采用更小的值前,务必在目标 workload 上 重新 benchmark。
Ingress diagnostics 统计的是 publication chunk,而不是完整的逻辑 collector vector。shutdown 时可能保留一个尚未完整发布 vector 的有效行前缀,但不会发布 非法 transition 行。replay ingress 计数器与 shutdown schema 见 日志。
随机数生成¶
Manager 环境持有 unilab.managers.ManagerRng,它是训练 runtime 的
唯一 RNG。该适配器包装一个显式 CPU/CUDA torch.Generator,校验种子和
未支持的采样语义,并始终在该 generator 的设备上返回 tensor。它不是 NumPy
bitstream 兼容层。训练入口 seed 契约只 seed 全局 Python 与 Torch RNG,不再
修改 legacy 全局 NumPy RNG。
当前 scoped G1 Motion Tracking / FlashSAC owner 使用 CUDA
ManagerRng 驱动观测噪声、adaptive/mixed motion sampling 与
selected-row reset。因此 A/B 评估比较同一整数种子下的可复现性和分布,而不是
逐位比较 NumPy 轨迹。确定性运行必须显式设置 env.seed;algo.seed 只 seed
训练进程的全局 Python/Torch RNG,不会替换 owner 本地 generator 的种子。
ManagerRng.get_state() 返回 generator 的 CPU state tensor,
set_state() 负责恢复。可复现性的权威载荷就是精确的 generator state;
恢复或审计 RNG 的 owner 记录该 state tensor 即可。runtime 不再维护逐
transition 的版本号簿记。
Runtime evidence¶
Runtime manifest 记录审计 run 所需的有效证据:
runtime_limits包含已解析 tensor-runtime knob 的 configured、default、 effective 与 maximum 值。inference_memory_budget记录有边界的 CUDA inference-ring 预算。tensor_memory_budget记录 CUDA inference、replay storage、replay ingress、 learner batch 与 workspace 的组合预算计算。owner 显式请求
mps时,cuda_process_sharing记录已验证的 execution-sharing 证据;默认null模式下该字段不存在。
预算决策在 spawn 前写入 manifest。如果不安全的组合被拒绝,错误会指出具体 设置,且相关进程不会被启动。
单 GPU G1 FlashSAC/MJWarp 生产工作流的 benchmark 复现、artifact 与故障排查见 Tensor Runtime 生产指南。