Cosmos 3 · OmniMoT ▸ 生成路径 ▸ 训练 vs 推理

训练时 vs 推理时 —— 同一个速度场,两种调用方式

生成侧用 rectified flow。约定 x₀ = 噪声x₁ = 干净数据, 插值 x_t = t·x₀ + (1−t)·x₁t=1 纯噪声,t=0 干净)。 MoT 生成分支就是速度场预测器 v_θ训练在随机单个 t 处监督它, 推理沿 t: 1→0 反复查询它做 ODE 积分。权重完全相同,区别只在怎么调

🔗 共享 · v_θ v_θ(x_t, t, cond) → 预测速度
MoT 生成分支Cosmos3VFMNetwork + moe_gen 塔)——下方两列复用同一套权重。
TRAINING · flow-matching

训练时

1 次前向 / step

在随机时间点加噪一次,让网络学会预测速度。scripts.traintrainer/

1
编码干净数据 x₁
VAE / tokenizer 把 video·image·sound·action 编成 latent
2
采样时间 t 与噪声 x₀ TrainTimeSampler
TrainTimeSampler 取 t∈[0,1](默认 uniform,可选 logit-normal / waver / ltx2);x₀ ~ N(0,I)diffusion-forcing 时逐帧独立取 t
3
一次性插值 x_t get_interpolation
get_interpolationx_t = t·x₀ + (1−t)·x₁
4
MoT 前向 → 预测速度
▸ 调用 v_θ 一次
时间步嵌入 + und 上下文打包 → gen 分支输出 v_pred
5
flow-matching 损失 _compute_flow_matching_loss
compute_flow_matching_loss:时间加权 MSE(v_pred, x₀−x₁);文本 token 走 AR 交叉熵;MoE 加 load-balance 辅助损失
6
反向 → optimizer step
FSDP / TP / CP / PP 分布式;callbacks:grad-clip · 日志 · checkpoint 节奏
时间轴 · 每个 step 只在一个随机 t 取样
t=0 干净t=1 噪声
↑ 不同 step 落在不同随机点,合起来覆盖整条 [0,1]
INFERENCE · sampling

推理时

N 次前向 / 样本

从纯噪声出发,沿 t:1→0 多步积分去噪。scripts.inferenceinference/

1
编码条件 cond
prompt → Qwen3-VL tokenizer;可选条件帧 → VAE。组成 und 上下文(可先经 prompt upsampler)
2
初始化 x = 纯噪声
x ~ N(0,I),起点 t=1
3
采样器循环 t: 1 → 0(N 步)
◗ LOOP × N · fixed_step / UniPC / EDM
▸ 每步调用 v_θ 一次
嵌入当前 t + cond 打包 → v_pred;ODE 步进 x ← x − Δt·v_pred;可选 CFG 引导 🎲 展开采样内部 →
4
得到干净 latent x₁
积分抵达 t=0
5
解码回像素 / 波形 / 动作
VAE → video·image;sound tokenizer → audio;ActionProcessor → 动作序列
6
文本 / 推理:自回归解码
走 Reasoner 头 + ReasonerKVCache,逐 token 因果解码——无去噪循环
时间轴 · 单个样本扫过整条 [0,1],共 N 步
t=0 干净t=1 噪声
← 从 t=1 逐步积分到 t=0,每个 tick 一次网络前向
训练:监督一个点 随机 t 处造一个 (x_t, 目标速度) 对,单次前向算 MSE。并行看整个 batch、整条时间区间靠多 step 覆盖。
推理:积分整条轨迹 从噪声起串行调 v_θ 共 N 次,沿 ODE 把 x_t 一路推到 x₁。步数 N 决定质量/速度权衡。
一句话:训练是"给速度场喂随机时间点的监督",推理是"用学好的速度场做数值积分"。 同一套 moe_gen 权重,训练调 1 次、推理调 N 次——这正是扩散/流模型"训练便宜、采样贵"的来源。 文本模态则两侧都走自回归(训练 teacher-forcing、推理 KV-cache),不参与去噪循环。