Skip to main content

概述

Cosmos3-Nano-Policy-DROID 是 Cosmos3 系列里的 policy model。Cosmos3 本身是面向 Physical AI 的 omnimodal world model;policy 版本接收语言指令和 DROID 机器人平台的视觉 observation,生成用于 manipulation 和 control 的 robot action trajectory。 本页讲的是 Cosmos3 policy 的多卡路径,也就是 cosmos3_policy_wn plugin。它覆盖 policyforward_dynamicsinverse_dynamics 三种 mode:视频 latent 和 action latent 在同一个 denoise loop 里推进,最终返回 action;如果开启 decode_video=True,还会返回 rollout video。 PhyAI 目前在这条路径上支持两类并行:policy transformer 沿 tp 轴做 tensor parallel;当 cfg=2guidance_scale > 1 时,cond / uncond 两个 CFG branch 会被分到两个 TP group 上并行运行。rollout video 的 VAE decode 也会按 rank 做空间 tile 切分,并用 halo overlap 合并边界。

Mode 与输出

三种 mode 的 clean / noisy 规则如下: 输出始终包含 action。decode_video=True 时,plugin 会额外返回 video latent 和 decoded pixels。 Cosmos3 policy 内部 action 宽度默认是 action_dim=64。真实机器人动作宽度由 raw_action_dim 决定,scheduler 会在输出前裁掉 padding tail。

并行拓扑

下面用 TP=4CFG=2world_size=8 作为例子。rank 0-3 是 cond branch 的一个 TP group,rank 4-7 是 uncond branch 的另一个 TP group。每个 denoise step 里,同一 branch 的 4 个 TP rank 会一起跑 transformer forward,不是流水顺序。 Cosmos3 WN TP=4 CFG=2 的 8 卡并行拓扑 P.all_gather(axis="cfg") 使用 engine 初始化时创建的 parallel mesh。ParallelConfig(world_size=cfg_size * tp_size, cfg_size=cfg_size, tp_size=tp_size) 会把 rank 映射成 (cfg_rank, tp_rank);沿 cfg 轴 gather 时,只收集相同 tp_rank、不同 cfg_rank 的 rank。这样每个 TP 分片都能拿到 cond / uncond velocity,再在本地完成 CFG combine。 VAE 的 8 卡切分示意如下,cfg 作为 outer axis,tp 作为 inner axis: Cosmos3 WAN VAE 8 卡空间切分示意

运行路径

1

准备权重和输入

准备一份 Cosmos3-Nano-Policy-DROID checkpoint。如果需要输出 rollout video,checkpoint 里还需要 vae/
policyinverse_dynamics 可以输入 observation image 或 video;forward_dynamics 还需要 action JSON。
2

构造多卡 Policy Engine

插件名是 "cosmos3_policy_wn"torchrun --nproc_per_node 必须等于 cfg_size * tp_size
3

构造输入处理器

Cosmos3PolicyProcessor 负责 observation resize/pad、prompt tokenization、domain id、action padding 和输出后处理。
4

构造 Request

Cosmos3ActionRequest 不包含并行信息。并行拓扑来自 engine config;request 只描述这次 policy 请求。
5

所有 rank 同时运行

每个 rank 都必须调用 engine.step(request)。scheduler 内部会在 tpcfg 轴上触发 collective,不能只让 rank 0 运行。
6

只在 rank 0 保存结果

示例脚本只让 rank 0 做 postprocess、action JSON 和 mp4 写入,避免多个进程写同一个文件。

运行示例

TP-only 的 4 卡 policy 推理:
CFG parallel + TP 的 8 卡 policy 推理:
Forward dynamics 需要传入 action 文件:
Inverse dynamics 通常传 observation video,并指定 clean latent frame:
--nproc_per_node 必须等于 --cfg * --tp。Policy 示例默认 guidance_scale=1.0,这时 cfg=2 没有收益;只有把 --guidance-scale 设到大于 1,CFG parallel 才有意义。

实现注意

  • decode_video=True 需要 checkpoint 里有 vae/;否则只能返回 action 和 video latent。
  • forward_dynamics 必须提供 cond_action,processor 会负责把原始 action pad 到 action_dim
  • 这条路径仍然是一次处理一个 request 的示例/基线路径,不是 continuous batching scheduler。