概述
Cosmos3 的生成路径把一段文字变成视频;当开启 sound stream 时,同一次去噪也会生成与画面同步的音频。T2V 只生成视频,T2AV 则让视频 latent 和 sound latent 在同一条时间轴上一起被 UniPC 推进:画面在噪声里慢慢显影,声音也在同一个节奏里成形。 本页只讨论ws1,也就是 world_size=1 的单卡路径。这里没有 tensor parallel,没有 continuous batching,也没有面向服务端吞吐的调度技巧。它是一条清楚、直接、便于对齐参考实现的生成路径:构造 engine,tokenize prompt,组装 Cosmos3T2VRequest,跑 denoise loop,最后由 VAE/AVAE decode 成可保存的媒体。
架构
PhyAI 的 Cosmos3 生成路径仍然走统一的 。cosmos3 plugin 把生成任务拆成几层:
phyai/src/phyai/models/cosmos3
main_cosmos3.py
scheduler_ws1_cosmos3.py
model_runner_cosmos3.py
model_runner_vae_cosmos3.py
modeling_cosmos3.py
vae_wan.py
avae_sound.py
sampler_unipc.py
configuration_cosmos3.py
运行路径
1
准备权重
准备一份 Cosmos3-Nano checkpoint。示例假设目录结构里包含:
2
构造 Engine
插件名是
"cosmos3"。T2V 必须加载 transformer 和 VAE;T2AV 还需要加载 AVAE,也就是 sound_tokenizer。flow_shift=10.0 和 use_karras_sigmas=False 对齐当前示例里的 native linear-flow UniPC 配置。3
Tokenize prompt
Cosmos3T2VScheduler 不做 tokenizer。prompt 侧的 chat template、eos / <|vision_start|> 追加、正负 prompt 的 token ids 都由 Cosmos3Processor 完成。negative_prompt=None 会使用内置的 Cosmos3 structured negative prompt。若希望空 negative prompt,显式传 negative_prompt=""。4
构造请求
Cosmos3T2VRequest 携带已经处理好的文本条件、latent grid、采样步数、CFG scale 和随机种子。pixel_to_latent_shape 使用 VAE 压缩比例把像素维度换算成 latent grid:时间维默认按 4 压缩,空间维默认按 16 压缩。5
运行生成
(B, 3, T, H, W),范围 [0, 1]。T2AV 返回 dict:6
保存媒体
Cosmos3GenerationPostProcessor 负责把 GPU tensor 移到 CPU,把视频转成 uint8 RGB frames,并在有音频时把 waveform mux 进同一个 mp4。端到端示例
examples/cosmos3/run_cosmos3.py 已经把上面的步骤串好。T2V:
720×1280、189 帧、35 steps。这个尺寸会慢;如果只是冒烟测试,可以先缩小:
model_load、preprocess、inference、to_cpu、encode。其中 inference 包含 denoise loop 和 VAE/AVAE decode;encode 是 PyAV 写 mp4 的时间。
当前限制
- 当前路径是单卡
ws1。没有 tensor parallel、sequence parallel、continuous batching 或请求级调度。 - 示例默认关闭 CUDA graph。denoise loop 是 Python 层 UniPC 循环,主要追求清晰和可对齐。
- T2AV 会额外加载
sound_tokenizer/ AVAE,并在每个 step 同步推进 sound latent;显存和耗时都会上升。 - Prompt tokenization 与媒体保存都在 engine 外完成;要测模型本体,应把
preprocess、to_cpu和encode的时间分开看。 - PhyAI 还没有为 Cosmos3 T2V/T2AV 做专项 kernel、graph capture、batching 或端到端吞吐优化。这里展示的是基线道路,不是性能终点。

