NVIDIA Cosmos 3 Physical AI 工厂:合成数据驱动的座舱感知模型闭环

来源:Build a Physical AI model factory with NVIDIA Cosmos 3 on SageMaker HyperPod
机构:NVIDIA + AWS
时间:2026年9月4日
许可证:OpenMDW-1.1 (Linux Foundation)


信息

项目 内容
标题 Build a Physical AI model factory with NVIDIA Cosmos 3 on SageMaker HyperPod
来源 AWS Machine Learning Blog
时间 2026-09-04
代码 github.com/awslabs/awsome-distributed-ai
许可证 OpenMDW-1.1 (Linux Foundation)
技术报告 research.nvidia.com/labs/cosmos-lab/cosmos3/technical-report.pdf

核心创新

NVIDIA Cosmos 3 不仅仅是一个世界模型——它是一个完整的 Physical AI 模型工厂,将合成数据生成、模型后训练和闭环评估统一到一个持续运行的管道中。

三大架构创新

  1. Mixture-of-Transformers (MoT) — 每层联合注意力,Reasoner(预测下一 token)和 Generator(去噪视频/动作)在每层都交互
  2. 单一 Token 流 — 视频、图像、动作、声音统一为一个序列
  3. 训练-推理不对称 — 训练时运行完整去噪+解码,推理时只运行几步去噪并跳过视频解码

架构详解

1. 整体设计

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
from dataclasses import dataclass
from enum import Enum

class ModalityType(Enum):
"""Cosmos 3 统一 Token 流的模态类型"""
TEXT = "text" # 文本(AR 区)
VISION_READ = "vision_read" # 图像理解(AR 区)
VIDEO_GEN = "video_gen" # 视频生成(DM 区)
AUDIO_GEN = "audio_gen" # 音频生成(DM 区)
ACTION = "action" # 动作向量(DM 区)

@dataclass
class Cosmos3Config:
"""
Cosmos 3 架构配置

核心设计:
- AR Zone (Autoregressive): 文本 + 视觉理解 token
- DM Zone (Diffusion Model): 视频/音频/动作生成 token
- 每层: Reasoner + Generator 双专家, 通过双流注意力联合
"""
# 共享参数
hidden_dim: int = 4096
num_heads: int = 32
num_layers: int = 32

# Reasoner 专家 (预测下一 token)
reasoner_dim: int = 4096
reasoner_experts: int = 8 # MoE

# Generator 专家 (去噪视频/音频/动作)
generator_dim: int = 4096
generator_experts: int = 8

# 视觉编码
vit_dim: int = 1024 # ViT 编码器
vae_dim: int = 512 # Wan2.2 视频 VAE (冻结)

# 动作编码
action_dim: int = 256 # 每个 embodiment 的动作向量

# 训练配置
denoise_steps_train: int = 1000 # 完整去噪
denoise_steps_infer: int = 4 # 推理时仅 4 步

# Token 流配置
ar_tokens: int = 0 # 动态, 取决于输入
dm_tokens: int = 0 # 动态, 取决于生成长度

config = Cosmos3Config()
print("Cosmos 3 Configuration:")
for field, value in config.__dict__.items():
print(f" {field}: {value}")

2. Mixture-of-Transformers (MoT)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import torch
import torch.nn as nn

class MoTLayer(nn.Module):
"""
Mixture-of-Transformers 层

论文核心: 每层都有 Reasoner 和 Generator 两个专家
通过双流注意力(Dual-Stream Attention)联合

与传统 DiT-on-VLM 的区别:
- 传统: DiT 只在最后 cross-attend VLM 的输出一次
- Cosmos 3: 每层都联合, 生成始终基于 Reasoner 的推理结果
"""

def __init__(self, dim=4096, num_heads=32):
super().__init__()

# Reasoner: 自回归预测下一 token
self.reasoner_attn = nn.MultiheadAttention(
dim, num_heads, batch_first=True
)
self.reasoner_ffn = nn.Sequential(
nn.Linear(dim, dim*4), nn.GELU(), nn.Linear(dim*4, dim)
)
self.reasoner_norm1 = nn.LayerNorm(dim)
self.reasoner_norm2 = nn.LayerNorm(dim)

# Generator: 去噪视频/音频/动作
self.generator_attn = nn.MultiheadAttention(
dim, num_heads, batch_first=True
)
self.generator_ffn = nn.Sequential(
nn.Linear(dim, dim*4), nn.GELU(), nn.Linear(dim*4, dim)
)
self.generator_norm1 = nn.LayerNorm(dim)
self.generator_norm2 = nn.LayerNorm(dim)

# 双流注意力: Generator 查询 Reasoner
self.cross_attn = nn.MultiheadAttention(
dim, num_heads, batch_first=True
)
self.cross_norm = nn.LayerNorm(dim)

def forward(self, ar_tokens, dm_tokens):
"""
Args:
ar_tokens: (B, L_ar, D) 自回归区 token (文本+视觉理解)
dm_tokens: (B, L_dm, D) 扩散区 token (视频+音频+动作)

Attention Mask:
- AR queries: 因果注意力, 只看前面的 AR token
- DM queries: 全注意力, 看所有 AR + DM token
"""
# Reasoner: AR 自注意力 (因果)
ar_normed = self.reasoner_norm1(ar_tokens)
ar_attn_out, _ = self.reasoner_attn(
ar_normed, ar_normed, ar_normed,
is_causal=True
)
ar_tokens = ar_tokens + ar_attn_out
ar_tokens = ar_tokens + self.reasoner_ffn(
self.reasoner_norm2(ar_tokens)
)

# Generator: DM 自注意力
dm_normed = self.generator_norm1(dm_tokens)
dm_attn_out, _ = self.generator_attn(
dm_normed, dm_normed, dm_normed
)
dm_tokens = dm_tokens + dm_attn_out

# 双流: Generator 查询 Reasoner (每层都做!)
cross_normed = self.cross_norm(ar_tokens)
cross_out, _ = self.cross_attn(
dm_tokens, # Generator 查询
cross_normed, # Reasoner 的 key
cross_normed # Reasoner 的 value
)
dm_tokens = dm_tokens + cross_out

dm_tokens = dm_tokens + self.generator_ffn(
self.generator_norm2(dm_tokens)
)

return ar_tokens, dm_tokens


# 测试
if __name__ == "__main__":
layer = MoTLayer(dim=512, num_heads=8)

B, L_ar, L_dm, D = 2, 100, 50, 512
ar = torch.randn(B, L_ar, D)
dm = torch.randn(B, L_dm, D)

ar_out, dm_out = layer(ar, dm)
print(f"AR output: {ar_out.shape}") # (2, 100, 512)
print(f"DM output: {dm_out.shape}") # (2, 50, 512)
print(f"Params: {sum(p.numel() for p in layer.parameters()):,}")

3. 训练-推理不对称

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
class Cosmos3Inference(nn.Module):
"""
Cosmos 3 推理模式: 极简去噪

训练: 1000 步去噪 + 视频解码 (完整 loss)
推理: 4 步去噪 + 跳过视频解码 (只输出动作)

关键: 视频潜变量仍然内部生成(用于 grounding 动作)
但不解码为像素——节省 90%+ 计算量
"""

def __init__(self, model, denoise_steps=4):
super().__init__()
self.model = model
self.denoise_steps = denoise_steps

def forward(self, text_tokens, vision_tokens, action_init):
"""
推理: 给定文本+图像, 生成动作

Args:
text_tokens: (B, L_text, D) 指令文本
vision_tokens: (B, L_vis, D) 当前场景图像
action_init: (B, L_action, D) 噪声动作 token

Returns:
action: (B, action_dim) 执行动作
"""
# AR 区: 文本 + 视觉理解
ar_tokens = torch.cat([text_tokens, vision_tokens], dim=1)

# DM 区: 动作 token (噪声)
dm_tokens = action_init

# 仅 4 步去噪
for step in range(self.denoise_steps):
ar_tokens, dm_tokens = self.model(ar_tokens, dm_tokens)
# 不解码视频! 只用 dm_tokens 中的动作部分

# 提取动作
action = dm_tokens[:, :1, :] # (B, 1, D)

return action


class Cosmos3Training(nn.Module):
"""Cosmos 3 训练模式: 完整去噪 + 视频解码"""

def __init__(self, model, denoise_steps=1000, vae=None):
super().__init__()
self.model = model
self.denoise_steps = denoise_steps
self.vae = vae # Wan2.2 视频 VAE (解码视频用于 loss)

def forward(self, text_tokens, vision_tokens,
video_target, action_target):
"""
训练: 完整管道

Args:
text_tokens: 指令
vision_tokens: 初始场景
video_target: 目标视频 (用于重建 loss)
action_target: 目标动作
"""
ar_tokens = torch.cat([text_tokens, vision_tokens], dim=1)

# 视频编码到潜空间
with torch.no_grad():
video_latents = self.vae.encode(video_target)

dm_tokens = torch.cat([
video_latents, # 视频潜变量 (用于 loss)
action_target # 动作 token
], dim=1)

# 完整去噪
for step in range(self.denoise_steps):
ar_tokens, dm_tokens = self.model(ar_tokens, dm_tokens)

# 解码视频 (训练时需要, 推理时跳过)
predicted_video = self.vae.decode(dm_tokens[:, :video_latents.shape[1]])

return predicted_video, dm_tokens[:, -1:]


if __name__ == "__main__":
print("Cosmos 3 Training vs Inference:")
print(f" Training: 1000 denoise steps + video decode")
print(f" Inference: 4 denoise steps, no video decode")
print(f" Compute reduction: {100*(1 - 4/1000):.1f}%")

Physical AI 工厂管道

闭环管道架构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
class PhysicalAIModelFactory:
"""
Physical AI 模型工厂: 持续闭环管道

三阶段循环:
1. 合成数据生成 (Cosmos 3 前向动力学)
2. 后训练感知/策略模型
3. 闭环仿真评估

关键: 三阶段共享一个 GPU 节点池
(不再是每阶段独立集群)
"""

def __init__(self):
self.stages = {
"data_generation": {
"model": "Cosmos 3 (forward dynamics)",
"input": "真实世界 corner case + 文本指令",
"output": "合成视频 + 场景变体",
"gpu_hours": "30% of total",
"关键指标": "多样性、物理一致性"
},
"post_training": {
"model": "感知/策略模型 (NVIDIA DriveOS)",
"input": "合成数据 + 真实数据混合",
"output": "改进后的感知/策略模型",
"gpu_hours": "50% of total",
"关键指标": "模型精度提升"
},
"evaluation": {
"model": "闭环仿真 (Omniverse + AlpaSim)",
"input": "改进后的模型 + 测试场景",
"output": "性能报告 + 失败案例",
"gpu_hours": "20% of total",
"关键指标": "通过率、安全裕度"
}
}

def run_cycle(self):
"""执行一轮闭环"""
print("Physical AI Model Factory Cycle:")
print("=" * 60)

for stage, config in self.stages.items():
print(f"\n📋 {stage}:")
for k, v in config.items():
print(f" {k}: {v}")

print("\n🔄 输出反馈到下一轮数据生成")
print("📊 关键指标: GPU goodput (有效管道进展/GPU小时)")


if __name__ == "__main__":
factory = PhysicalAIModelFactory()
factory.run_cycle()

SageMaker HyperPod 部署


对 IMS 数据合成的直接启示

1. 座舱数据合成管道

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
class CabinDataSynthesisPipeline:
"""
基于 Cosmos 3 架构的座舱数据合成管道

目标: 解决 IMS 训练数据稀缺问题
- CPD: 缺乏儿童在各种姿态下的雷达数据
- OOP: 缺乏异常姿态标注数据
- 酒驾: 无法在真实场景采集
- 认知分心: 难以标注
"""

def __init__(self):
self.pipeline = {
"Stage 1: 场景定义": {
"输入": "Euro NCAP 测试场景 + 边缘案例",
"工具": "Omniverse 座舱 3D 场景",
"输出": "场景描述 + 相机/雷达参数",
"示例": [
"CPD-06: 后向儿童座椅, 睡眠姿态, 0-1岁",
"OOP-03: 副驾前倾, 系安全带, 成人",
"ALC-01: 驾驶员 BAC=0.08%, 夜间"
]
},
"Stage 2: 合成数据生成": {
"输入": "场景描述 + 传感器参数",
"模型": "Cosmos 3 前向动力学",
"输出": "合成视频 + 雷达点云 + 动作标签",
"优势": "物理一致性, 传感器仿真"
},
"Stage 3: 自动标注": {
"输入": "合成数据",
"模型": "Cosmos 3 逆向动力学",
"输出": "自动标注 (姿态/状态/事件)",
"优势": "无需人工标注, 无限量"
},
"Stage 4: 模型训练": {
"输入": "合成+真实混合数据",
"模型": "DMS/OMS 感知模型",
"输出": "训练后的感知模型",
"混合比": "70% 合成 + 30% 真实"
},
"Stage 5: 闭环验证": {
"输入": "训练后模型 + 测试场景",
"工具": "Omniverse + AlpaSim",
"输出": "性能报告 + 失败案例",
"反馈": "失败案例 → Stage 1 (新场景)"
}
}

def estimate_data_generation(self):
"""估算合成数据生成能力"""
estimates = {
"场景复杂度": "中 (座舱内, 有限空间)",
"GPU": "1× A100 (80GB)",
"生成速度": "~1000 帧/小时 (Cosmos 3 4步去噪)",
"日产量": "~24,000 帧",
"月产量": "~720,000 帧",
"存储需求": "~500 GB/月 (视频+标注)",
"对比真实采集": "10x faster, 100x cheaper",
"标注成本": "$0 (自动标注)"
}
return estimates


if __name__ == "__main__":
pipeline = CabinDataSynthesisPipeline()
for stage, info in pipeline.pipeline.items():
print(f"\n{stage}:")
for k, v in info.items():
if isinstance(v, list):
print(f" {k}:")
for item in v:
print(f" - {item}")
else:
print(f" {k}: {v}")

print("\n📊 数据生成估算:")
for k, v in pipeline.estimate_data_generation().items():
print(f" {k}: {v}")

2. 与 NVIDIA 生态的对接

NVIDIA 工具 用途 IMS 场景
Cosmos 3 世界模型/合成数据生成 生成座舱场景视频
Omniverse 3D 场景构建 精确座舱 3D 模型
Isaac Sim 传感器仿真 摄像头/雷达点云
AlpaSim 闭环评估 感知模型验证
DriveOS 车载部署 端侧推理
Metahuman 人物生成 驾驶员/乘客模型
OpenUSD 场景格式 座舱场景交换标准

3. 落地路线图

阶段 时间 目标 硬件 产出
Phase 1: 验证 1-3月 Omniverse 座舱场景 + Cosmos 3 生成 1× A100 10K 合成帧
Phase 2: 训练 3-6月 合成+真实混合训练 DMS 模型 4× A100 模型精度 +5%
Phase 3: 闭环 6-9月 AlpaSim 闭环验证 8× A100 通过率报告
Phase 4: 部署 9-12月 QCS8295 端侧部署 车载 NPU 量产级 DMS

4. 成本估算

组件 月成本 说明
SageMaker HyperPod (4× A100) ~$15K 持续管道运行
存储 (10TB) ~$300 共享存储层
Omniverse 授权 需商谈 企业许可
Cosmos 3 模型 免费 OpenMDW-1.1 开源
总计/月 ~$15-20K 完整管道

对比真实数据采集:一次实车测试 ~$50K/天


与传统数据合成方案对比

方案 物理一致性 传感器仿真 自动标注 闭环验证 开放许可
Cosmos 3 ✅ 物理引擎 ✅ 全模态 ✅ 内置 ✅ AlpaSim ✅ OpenMDW
Anyverse ✅ 光学 ⚠️ 有限 ⚠️ 半自动 ❌ ❌ 商业
SkyEngine ✅ 光学 ⚠️ 摄像头 ⚠️ 半自动 ❌ ❌ 商业
rFpro ✅ 物理 ✅ 摄像头 ❌ ⚠️ ❌ 商业
NVIDIA Isaac Sim ✅ 物理 ✅ 全模态 ⚠️ ✅ ✅ 开源

Cosmos 3 的核心优势:统一模型覆盖生成→标注→部署→评估全链路。


对 IMS 路线图的影响

更新路线图

关键里程碑

里程碑 时间 验收标准
座舱 3D 场景完成 2026-12 Omniverse 渲染通过 Euro NCAP 场景验证
Cosmos 3 首批合成 2027-02 10K 帧, 物理一致性 > 95%
CPD 模型训练完成 2027-06 Recall > 95%, F1 > 90%
全场景部署 2027-12 QCS8295 30fps, 满足 Euro NCAP

总结

NVIDIA Cosmos 3 对 IMS 数据合成路线是一个改变游戏规则的技术:

  1. 统一管道 — 生成→标注→训练→评估不再需要不同工具链
  2. 物理一致性 — 世界模型保证生成的座舱场景物理合理
  3. 极简推理 — 4步去噪 + 跳过视频解码,端侧可部署
  4. 开源许可 — OpenMDW-1.1 允许商用
  5. AWS 集成 — SageMaker HyperPod 提供弹性 GPU 容量

核心判断: 2027年是 IMS 数据合成从”概念验证”转向”量产管道”的关键年。Cosmos 3 + Omniverse + AlpaSim 是可行路线,月成本 ~$15-20K 远低于真实数据采集。


参考文献

  1. NVIDIA. “Cosmos 3 Technical Report.” research.nvidia.com/labs/cosmos-lab/cosmos3/, 2026.
  2. AWS. “Build a Physical AI model factory with NVIDIA Cosmos 3 on SageMaker HyperPod.” 2026-09-04.
  3. NVIDIA. “Physical AI Takes the Wheel: How the World’s Robotaxi Leaders Are Building With NVIDIA Technologies.” NVIDIA Blog, 2026-09.
  4. github.com/awslabs/awsome-distributed-ai/tree/main/examples/use-cases/cosmos3

本文由 AI 研究助手自主生成,基于 NVIDIA Cosmos 3 + AWS SageMaker HyperPod 技术深度解读。