cosmos
基于Mixture-of-Transformers的统一世界模型平台,支持语言、图像、视频、音频和动作序列的联合处理与生成。NVIDIA官方出品,提供Reasoner(理解推理)和Generator(生成仿真)两种模式,专为机器人、自动驾驶等Physical AI场景设计,附带微调、评估、数据蒸馏等完整生态工具。模型有16B/64B两档,支持多种集成方式(Diffusers/vLLM/NIM),是目前开源世界中兼顾理解与生成的少有方案。
README
Cosmos
目录
介绍
NVIDIA Cosmos 是一个开放的世界模型、数据集和工具平台,使开发者能够为机器人、自动驾驶车辆、智能基础设施等构建物理 AI(Physical AI)。
Cosmos 3
Cosmos 3 是我们最新的模型家族 [报告] [网站]。它是一套全模态世界模型(omnimodal world models),设计在统一的 Mixture-of-Transformers 架构中联合处理和生成语言、图像、视频、音频和动作序列。通过支持高度灵活的输入-输出配置,它无缝统一了物理 AI 的关键模态——有效地将视觉语言模型、视频生成器、世界模拟器和世界动作模型整合到一个框架中。
Cosmos 3 提供两种运行时表面:
| 表面 | 输入 | 输出 | 用例 |
|---|---|---|---|
| 推理器 (Reasoner) | 文本、视觉 | 文本 | 世界理解、基础、物理推理、任务规划、动作预测、具身代理推理、自主系统决策 |
| 生成器 (Generator) | 文本、视觉、声音、动作 | 视觉、声音、动作 | 世界生成、世界模拟、未来预测、合成数据生成、策略学习、机器人训练 |
核心能力
- 世界理解: 分析视频和图像,生成描述、时序事件、下一步动作、空间基础、物理合理性和因果结果。
- 世界生成: 从文本、图像、视频或动作输入生成图像、视频、同步声音以及动作条件化的推演。
- 动作建模: 为机器人、相机运动、第一人称运动和自动驾驶场景预测策略动作、逆动力学和正动力学。
- 研究与生产路径: 使用 Diffusers 和 Transformers 进行 Python 优先的开发,然后使用 vLLM-Omni 和 vLLM 提供 OpenAI 兼容的服务。
- 后训练配方: 使用 Cosmos Framework 训练配方和针对特定任务的评估来适配视觉、动作和推理工作流 [即将推出]。
模型架构

Cosmos 3 是一个全模态世界模型,构建在统一的 Mixture-of-Transformers (MoT) 架构上,该架构结合了一个用于推理的自回归 (AR) transformer 和一个用于多模态生成的扩散 transformer (DM)。在推理模式 (Reasoner Mode) 下,语言和视觉理解 token 通过因果自注意力进行处理,实现下一个 token 预测,适用于感知、规划和世界推理等任务。在生成模式 (Generator Mode) 下,带噪声的图像、视频、音频和动作 token 通过全注意力进行去噪,使模型能够联合生成一致的多模态输出。两种模式共享相同的 transformer 架构、多模态注意力层以及统一的 3D 多维旋转位置嵌入 (mRoPE) 表示,该表示编码了跨模态的空间和时间结构,从而能够对图像、视频、音频流和动作轨迹进行一致的推理。
模型家族
| 模型 | 参数量 | 核心能力 |
|---|---|---|
| Cosmos3-Nano | 16B | 紧凑的全模态世界模型,用于多模态理解、世界模拟、未来预测、动作推理和物理 AI。 |
| Cosmos3-Super | 64B | 前沿规模的全模态世界模型,用于高级多模态理解、世界模拟、未来预测、动作推理和物理 AI。 |
| Cosmos3-Super-Text2Image | 64B | 高保真文本到图像生成。 |
| Cosmos3-Super-Image2Video | 64B | 时序一致的图像到视频生成。 |
| Cosmos3-Nano-Policy-DROID | 16B | 用于 DROID 操作和控制的视觉语言机器人策略。 |
支持的生成设置
| 设置 | 支持的值 |
|---|---|
| 分辨率等级 | 256p, 480p, 720p, 默认=480p |
| 宽高比 | 16:9, 4:3, 1:1, 3:4, 9:16, 默认=16:9 |
| 帧率 | 10, 16, 24, 30 FPS, 默认=24 |
| 帧数 | 5 到 300 帧, 默认=189 |
| 精度 | BF16 经过测试 |
| 操作系统 | Linux |
| GPU 架构 | NVIDIA Ampere, Hopper, Blackwell |
输入与输出
| 规格 | 值 |
|---|---|
| 输入类型 | 文本、文本+图像、文本+视频、文本+图像+动作 |
| 输入格式 | 文本字符串、JPG/PNG/JPEG/WEBP 图像、MP4 视频、JSON 动作数组 |
| 视觉条件 | 720p 使用 1280x720,480p 使用 832x480,256p 使用 320x192。视频条件使用 5 帧对应分辨率。 |
| 动作条件 | 支持的动作维度取决于具体形态,包括相机运动 (9D)、自动驾驶 (9D)、第一人称运动 (57D)、单臂机器人 (10D, DROID/UR/Fractal/Bridge/UMI)、双臂机器人 (20D, 双 DROID 臂)、人形机器人 (29D, AgiBot)。 |
| 输出类型 | 图像、视频、声音、动作状态、文本 |
| 输出格式 | JPG 图像、MP4 视频、合入 MP4 的 AAC 音频流、JSON 动作值、文本字符串 |
| 提示长度 | 世界生成提示建议少于 300 词 |
| 声音输出 | 与视频一起生成时,48 kHz 立体声 AAC |
用例
生成器
生成器示例产生由文本、视觉和动作输入条件化的非文本输出。
| 工作流 | 输入 | 输出 | 演示内容 |
|---|---|---|---|
| 文本到图像 | 文本 | 视觉 | 根据文本提示生成机器人实验室场景 |
| 文本到视频 | 文本 | 视觉 | 根据密集场景描述生成工业视频 |
| 文本到视频(带声音) | 文本 | 视觉、声音 | 同步的视觉和音频生成 |
| 图像到视频 | 文本、图像 | 视觉 | 从起始图像和提示生成机器人操作动画 |
| 图像到视频(带声音) | 文本、图像 | 视觉、声音 | 图像条件化运动与同步音频 |
| 视频到视频 | 文本、视频 | 视觉 | 根据提示对机器人操作视频进行变换 |
| 视频到视频(带声音) | 文本、视频、声音 | 视觉、声音 | 根据提示对机器人操作视频进行变换 |
| 正动力学 | 文本、视觉、动作 | 视觉 | 从动作和视觉上下文进行未来状态推演 |
| 动作策略 | 文本、视觉 | 动作、视觉 | 从上下文生成动作轨迹和推演视频 |
生成器提示上采样(prompt upsampling)将简短的场景描述扩展为密集的结构化提示。当前示例使用以下采样默认值:
| 参数 | 值 |
|---|---|
max_tokens |
20000 |
temperature |
0.7 |
top_p |
0.8 |
top_k |
20 |
repetition_penalty |
1.0 |
presence_penalty |
1.5 |
seed |
3407 |
推理器
推理器示例从文本和视觉输入产生文本输出。它遵循 Qwen3-VL 兼容的消息约定来处理图像和视频输入。
| 工作流 | 输入 | 输出 | 演示内容 |
|---|---|---|---|
| 描述 | 视频 | 文本 | 详细的视频描述 |
| 时间定位 | 视频、查询 | 文本或 JSON | 事件检测、时间戳查询和区间问答 |
| 具身推理 | 视频、问题 | 文本 | 机器人和辅助任务场景下的下一步动作预测 |
| 常识推理 | 视频、问题 | 文本 | 基于可见上下文的物理常识判断 |
| 2D基础 | 图像、提示 | JSON 框 | 根据图像提示进行边界框定位 |
| 描述任意对象 | 图像、标记的目标 | JSON 或文本 | 对标记目标的属性描述 |
| 动作链式思维 | 图像或视频、提示 | 文本或 JSON | 轨迹预测和驾驶场景的链式思维 |
| 物理合理性分析 | 视频、提示 | 标签 | 物理合理性分类 |
| 场景理解 | 视频、问题 | 文本 | 场景理解和下一步可能动作预测 |
推理器示例使用以下采样设置:
| 参数 | 无推理 | 有推理 |
|---|---|---|
top_p |
0.8 |
0.95 |
top_k |
20 |
20 |
repetition_penalty |
1.0 |
1.0 |
presence_penalty |
1.5 |
0.0 |
temperature |
0.7 |
0.6 |
文本+视觉请求使用以下基本消息结构:
[
{
"role": "system",
"content": [{"type": "text", "text": "你是一个有用的助手。"}]
},
{
"role": "user",
"content": [
{"type": "video_url", "video_url": "https://example.com/video.mp4"},
{"type": "text", "text": "列出值得注意的事件及其大约时间戳。"}
]
}
]
要明确要求推理,请在用户提示后附加以下格式指令:
请使用以下格式回答问题:
<think>
你的推理过程。
</think>
在 </think> 标签后立即写出你的最终答案。
快速开始
在运行示例之前,创建一个 Hugging Face 访问令牌,然后在本地进行身份验证:
uvx hf@latest auth login
如果要使用共享缓存或更大磁盘,请设置 HF_HOME。
Diffusers 生成器
展开 Diffusers 生成器的设置、示例和模式使用 HuggingFace Diffusers 进行 Cosmos 3 生成器的研究、训练和模型开发。此路径加载完整的 Cosmos 3 检查点,包括推理器路径、扩散生成路径和媒体 tokenizer。
uv venv --python 3.13 --seed --managed-python
source .venv/bin/activate
uv pip install --torch-backend=auto \
"diffusers @ git+https://github.com/huggingface/diffusers.git" \
accelerate \
av \
cosmos_guardrail \
huggingface_hub \
imageio \
imageio-ffmpeg \
torch \
torchvision \
transformers
--torch-backend=auto 让 uv 检测您的 NVIDIA 驱动并安装匹配 CUDA 版本的 torch/torchvision。如果没有此选项,uv 会拉取最新的 CUDA wheel(目前是 cu130),这在 CUDA 13 之前的驱动上会失败,并显示 The NVIDIA driver on your system is too old 且 torch.cuda.is_available() 返回 False。如果您愿意,也可以固定一个显式的后端,例如使用 --torch-backend=cu128 用于 CUDA 12.8 驱动。
text-to-video 运行需要一些时间:首次运行会下载 Cosmos3-Nano,并且扩散过程计算量大,在产生输出之前会执行所有推理步骤。较长的步骤时间属于正常现象,不是卡死。
import torch
from diffusers import Cosmos3OmniPipeline
from diffusers.schedulers.scheduling_unipc_multistep import UniPCMultistepScheduler
from diffusers.utils import export_to_video
pipe = Cosmos3OmniPipeline.from_pretrained(
"nvidia/Cosmos3-Nano",
torch_dtype=torch.bfloat16,
device_map="cuda",
)
pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config, flow_shift=10.0)
result = pipe(
prompt="一个移动机器人在仓库过道中导航,并在一个货架前停下。",
negative_prompt="",
image=None,
num_frames=189,
height=720,
width=1280,
fps=24,
num_inference_steps=35,
guidance_scale=6.0,
enable_sound=False,
add_resolution_template=False,
add_duration_template=False,
generator=torch.Generator(device="cuda").manual_seed(1234),
)
export_to_video(result.video, "cosmos3_t2v.mp4", fps=24, macro_block_size=1)
Diffusers 模式:
| 模式 | 用途 |
|---|---|
text-to-image |
单帧图像生成,使用 num_frames=1;返回 PIL 图像 |
text-to-video |
视频生成;189 帧在 24 FPS 下约为 7.9 秒 |
image-to-video |
基于输入图像条件化的视频生成 |
text-to-video-with-sound |
对于包含声音模块的检查点,生成带有声音的视频 |
有关每种模式的可运行示例,请参阅 Cosmos 3 Diffusers 文档。
vLLM-Omni 生成器
展开 vLLM-Omni 生成器的设置、端点和请求参考使用 vLLM-Omni 进行生成器的生产推理,背后是 OpenAI 兼容的 API。此集成加载完整的 Cosmos 3 检查点,包括基于 Qwen3-VL 的推理器路径和扩散生成路径。对于仅返回文本的理解任务,请改用 vLLM 推理器,它只加载推理器。
兼容性状态: Cosmos 3 生成器支持已合入 vllm-project/vllm-omni
main分支:文本到图像、文本到视频、图像到视频 (#3454) 以及带声音的视频 (#4073) 已合并;动作(策略/正动力学)正在审核中 (#4102),视频到视频正在规划中。vllm/vllm-omni:cosmos3Docker 镜像仍然是最简单的全合一构建。有关当前设置和按模态的使用方法,请参阅维护的配方:Cosmos3-Nano 和 Cosmos3-Super。
从 Docker 镜像启动服务器(所有模态)。挂载包含您希望服务器读取的本地媒体或动作文件的任何目录。
docker run --runtime nvidia --gpus all \
-v ~/.cache/huggingface:/root/.cache/huggingface \
-v "$(pwd):/workspace" \
-p 8000:8000 \
--ipc=host \
vllm/vllm-omni:cosmos3 \
vllm serve nvidia/Cosmos3-Nano \
--omni \
--model-class-name Cosmos3OmniDiffusersPipeline \
--allowed-local-media-path / \
--port 8000 \
--init-timeout 1800
Cosmos3 检查点可能超过默认的服务器初始化超时时间;在本节中的每个 vllm serve 命令上使用 --init-timeout 1800。
当 API 就绪时,vLLM-Omni 会打印 Application startup complete.
对于 nvidia/Cosmos3-Super(更大的 64B 模型),跨 GPU 拆分权重并可选择卸载层以减少峰值内存:--tensor-parallel-size 跨多个 GPU 拆分模型权重,--enable-layerwise-offload 在 CPU 和 GPU 之间卸载 transformer 块,这会带来延迟权衡并消耗额外的 CPU RAM。例如,在四个 GPU 上,在 vllm serve 命令中添加 --tensor-parallel-size 4 --enable-layerwise-offload --init-timeout 1800。
其他并行选项:
| 选项 | 用途 |
|---|---|
--cfg-parallel-size 2 |
在两个 GPU 上并行运行正负 CFG 分支。使用请求级别的 guidance_scale 设置 CFG 强度;不要使用 true_cfg_scale。 |
--ulysses-degree 2 |
启用 Ulysses 序列并行,跨 GPU 拆分序列维度。 |
组合并行选项时,请确保服务器拥有足够数量的 GPU,以满足已启用度的乘积(tensor_parallel_size × cfg_parallel_size × ulysses_degree)。
要安装来自 main 分支的 vLLM-Omni,而不是使用 Docker 镜像(文本到图像、文本到视频、图像到视频和带声音的视频已合并;请参阅 Cosmos3-Nano 和 Cosmos3-Super 配方了解按模态的使用方法),创建一个 venv 并安装,选择与您的驱动匹配的 CUDA 构建:
uv venv --python 3.13 --seed --managed-python
source .venv/bin/activate
# CUDA 13 驱动:
uv pip install --torch-backend=cu130 \
"vllm-omni @ git+https://github.com/vllm-project/vllm-omni.git@main"
# CUDA 12.8 驱动:
# uv pip install --torch-backend=cu128 \
# "vllm-omni @ git+https://github.com/vllm-project/vllm-omni.git@main"
然后直接运行 vllm serve nvidia/Cosmos3-Nano --omni --model-class-name Cosmos3OmniDiffusersPipeline --allowed-local-media-path / --port 8000 --init-timeout 1800,无需 docker run ... vllm/vllm-omni:cosmos3 包装。
视觉端点:
| 模式 | 端点 | 备注 |
|---|---|---|
| 文本到图像 | POST /v1/images/generations |
返回 base64 编码的 PNG |
| 文本到视频 | POST /v1/videos/sync |
阻塞并直接返回 MP4 字节 |
| 图像到视频 | POST /v1/videos/sync |
使用 input_reference 上传条件图像 |
| 视频到视频 | POST /v1/videos/sync |
上传源视频,选择哪些帧保留为干净条件 |
| 带声音的视频 | POST /v1/videos/sync |
添加 generate_sound=true 以生成配乐 |
动作模式将 Cosmos 3 用作世界模型:它们以某个形态(domain_name)为条件,并交换视频和动作序列。策略和逆动力学返回预测的动作块,因此通过异步 POST /v1/videos 作业发送它们,并从完成的结果中读取动作数据;正动力学只返回视频,可以使用同步 POST /v1/videos/sync。
| 模式 | action_mode |
输入 | 输出 |
|---|---|---|---|
| 策略 | policy |
图像 + 指令 | 视频 + 预测动作块 |
| 逆动力学 | inverse_dynamics |
视频 + 指令 | 视频 + 预测动作块 |
| 正动力学 | forward_dynamics |
图像 + 动作块 | 视频 |
通过 extra_params 传递形态设置:action_mode、domain_name(例如 bridge_orig_lerobot、av 或 camera_pose)、raw_action_dim 和 action_chunk_size。正动力学还需要一个 action_path,指向服务器可以读取的动作文件,因此启动服务器时使用 --allowed-local-media-path 覆盖该文件(对于 Docker,挂载文件并传递容器可见的路径)。有关机器人、自动驾驶和相机姿态变体的完整列表,请参阅 Cosmos 3 vLLM-Omni 配方。
视频请求示例:
curl -sS -X POST http://localhost:8000/v1/videos/sync \
--form-string "prompt=一个小型仓库机器人正在干净的地板上移动一个蓝色箱子。" \
--form-string "negative_prompt=模糊、变形、低质量" \
--form-string "size=1280x720" \
--form-string "num_frames=189" \
--form-string "fps=24" \
--form-string "num_inference_steps=35" \
--form-string "guidance_scale=6.0" \
--form-string "flow_shift=10.0" \
--form-string "seed=0" \
--form-string 'extra_params={"use_resolution_template":false,"use_duration_template":false,"guardrails":true}' \
-o cosmos3_t2v_output.mp4
对于文本字段(prompt、negative_prompt、extra_params),使用 --form-string 而不是 -F:使用 -F 时,curl 会将 ; 视为内容类型分隔符,并静默截断任何包含 ; 的值。
常见请求字段(图像端点遵循 Image Generation API,视频端点遵循 Videos API):
| 字段 | 用途 |
|---|---|
prompt |
正向文本提示 |
negative_prompt |
要避免的概念或伪影 |
size |
输出分辨率,格式为 <宽>x<高> |
num_frames、fps |
视频长度和帧率(仅视频端点) |
num_inference_steps |
扩散去噪步数 |
guidance_scale |
无分类器引导尺度(请为 Cosmos 3 CFG 使用此字段;不要使用 true_cfg_scale) |
flow_shift |
调度器的 flow-shift 值 |
seed |
可复现种子 |
max_sequence_length |
保留用于条件化的最大提示 token 数量(Cosmos 3 默认 512);较长的提示会被截断并发出警告,较短的会填充 |
input_reference |
为图像到视频、视频到视频和动作请求上传的图像或视频 |
extra_params |
JSON 编码的 Cosmos 3 特定选项:动作设置(action_mode、domain_name、raw_action_dim、action_chunk_size、action_path)、视频到视频条件化(condition_frame_indexes_vision、condition_video_keep)、提示模板开关(use_resolution_template、use_duration_template)以及每个请求的 guardrails 开关 |
extra_args |
JSON 对象,用于 Cosmos 3 图像端点的特定选项,例如 use_resolution_template |
禁用护栏:Cosmos 3 内置了安全护栏,用于检查提示并在生成的输出中模糊人脸。可以通过在 extra_params 中添加 guardrails: false 在每个请求中禁用它:
curl -sS -X POST http://localhost:8000/v1/videos/sync \
--form-string "prompt=一个小型仓库机器人正在干净的地板上移动一个蓝色箱子。" \
--form-string 'extra_params={"guardrails":false,"use_resolution_template":false,"use_duration_template":false}' \
-o cosmos3_t2v.mp4
要在服务器范围内禁用护栏,使其永远不会加载护栏模型(这样按请求的覆盖也无法重新启用它们),请传递一个部署配置——未来版本将用专用的 --cosmos3-no-guardrails 标志替换此配置:
# no_guardrails.yaml
async_chunk: false
stages:
- stage_id: 0
max_num_seqs: 1
enforce_eager: true
trust_remote_code: true
model_class_name: Cosmos3OmniDiffusersPipeline
model_config:
guardrails: false
offload_guardrail_models: false
vllm serve nvidia/Cosmos3-Nano --omni \
--model-class-name Cosmos3OmniDiffusersPipeline \
--deploy-config no_guardrails.yaml \
--port 8000 \
--init-timeout 1800
参考:
Transformers 推理器
即将推出!
vLLM 推理器
使用 vLLM 进行推理器的生产推理,背后是 OpenAI 兼容的聊天补全 API。uv venv --python 3.13 --seed --managed-python
source .venv/bin/activate
uv pip install --torch-backend=cu130 "vllm==0.21.0" \
"vllm-cosmos3 @ git+https://github.com/NVIDIA/cosmos-framework.git#subdirectory=packages/vllm-cosmos3"
vLLM 版本和 torch 后端是配对的:对于 CUDA 13 驱动使用 --torch-backend=cu130 "vllm==0.21.0",对于 CUDA 12.8 使用 --torch-backend=cu128 "vllm==0.19.1"。vLLM 不会为每个 CUDA 次要版本发布 wheel,因此 --torch-backend=auto 在这里不可靠——请选择与您的驱动匹配的配对。
vllm serve nvidia/Cosmos3-Nano \
--hf-overrides '{"architectures": ["Cosmos3ReasonerForConditionalGeneration"]}' \
--async-scheduling \
--allowed-local-media-path / \
--port 8000
有关 notebook 启动命令(Cosmos3-Super 在四个 GPU 上、媒体路径默认值以及完整标志集),请参阅 cookbooks/cosmos3/README.md — 启动服务器。
如果您的 vLLM 构建报告 DeepGEMM 不可用,请在启动服务器前禁用它:
export VLLM_USE_DEEP_GEMM=0
配置说明:
| 选项 | 用途 |
|---|---|
--tensor-parallel-size |
用于张量并行推理的 GPU 数量 |
--mm-encoder-tp-mode data |
多模态工作负载中视觉编码器的数据并行 |
--media-io-kwargs '{"video": {"num_frames": -1}}' |
允许处理器在下游帧采样之前考虑所有可用帧 |
--allowed-local-media-path |
当请求传递本地 file:// 媒体路径时需要 |
NIM 推理器
展开 NIM 推理器的设置、容器启动和请求参考使用 Cosmos 3 Reasoner NIM 以获得最快路径,部署生产级、OpenAI 兼容的推理器端点。NIM 提供了预构建、优化的容器,因此您可以跳过上述 vLLM 依赖和 CUDA 配对设置;它从文本、图像和视频输入生成文本输出。
您可以在浏览器中交互式地试用 cosmos3-nano-reasoner 构建页面上的沙盒——该沙盒正是由同一个 NIM 驱动。有关完整的请求参考,请参阅 Cosmos Reason 3 NIM API 参考。
容器提供两种规模,通过 NIM_MODEL_SIZE 选择:
NIM_MODEL_SIZE |
提供的模型名称 |
|---|---|
nano (默认) |
nvidia/cosmos3-nano-reasoner |
super |
nvidia/cosmos3-super-reasoner |
启动 NIM 容器(此处显示 Nano;要使用 Super,设置 -e NIM_MODEL_SIZE=super)。首先必须在环境中设置 NGC_API_KEY——从 NGC 生成一个,并将 Docker 登录到 nvcr.io 一次(docker login nvcr.io,用户名 $oauthtoken,密码 = 您的密钥)。
export CONTAINER_NAME="nvidia-cosmos3-reasoner"
export IMG_NAME="nvcr.io/nim/nvidia/cosmos3-reasoner:1.7.0"
export LOCAL_NIM_CACHE=~/.cache/nim
mkdir -p "$LOCAL_NIM_CACHE"
docker run -it --rm --name=$CONTAINER_NAME \
--runtime=nvidia \
--gpus all \
--shm-size=32GB \
-e NGC_API_KEY=$NGC_API_KEY \
-e NIM_MODEL_SIZE=nano \
-v "$LOCAL_NIM_CACHE:/opt/nim/.cache" \
-u $(id -u) \
-p 8000:8000 \
$IMG_NAME
然后 OpenAI 兼容的 API 在 http://127.0.0.1:8000/v1 可用。使用 curl 查询:
curl -X POST 'http://127.0.0.1:8000/v1/chat/completions' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"model": "nvidia/cosmos3-nano-reasoner",
"messages": [
{"role": "system", "content": "你是一个有用的助手。"},