概述
DreamZero 是一个世界动作模型(World Action Model,WAM)。它使用视频扩散 backbone,根据相机图像、语言指令和机器人状态,联合预测未来视频与动作。 PhyAI 的ws1 路径在单张 GPU 上运行文本编码器、图像编码器、VAE 和 DiT。引擎接收预处理后的 tensor,返回视频 latent 和归一化 action chunk。图像变换、tokenization、状态归一化和动作还原由引擎外部的 DreamZeroProcessor 完成。
本页使用
GEAR-Dreams/DreamZero-DROID checkpoint,覆盖单卡、单序列推理。模型权重、配置和 processor 使用的归一化统计应来自同一份 checkpoint。架构
dreamzero 插件遵循 PhyAI 的 :
phyai/src/phyai/models/dreamzero
main_dreamzero.py
builder_dreamzero.py
pipeline_dreamzero.py
scheduler_dreamzero.py
model_runner_dreamzero.py
modeling_dreamzero.py
configuration_dreamzero.py
phyai-utils-tools/src/phyai_utils_tools/models/dreamzero
processor_dreamzero.py
steps_dreamzero.py
一次请求先完成文本与视觉条件编码,再准备参考 KV 和视频、动作噪声。Scheduler 在去噪循环中调用 DiT,更新两路 latent,并将帧位置与缓存延续到下一次请求。CLI 的动作推理路径直接返回视频 latent,不执行 RGB 视频解码。
请求路径如下:
运行 DreamZero
1
准备 checkpoint
准备 DreamZero-DROID 权重和 UMT5 tokenizer。模型目录需要保留配置与
experiment_cfg/metadata.json、experiment_cfg/conf.yaml,供 processor 读取归一化统计、模态与相对动作配置。本页示例使用仓库配置的 CUDA 环境和 BF16 精度,关闭 TF32 与 CUDA Graph。2
构造 engine
使用
dreamzero 插件创建 engine。本页使用 dynamic DiT 的 16 步调度,kernel policy 由示例目录中的配置文件指定。3
构造 processor
Processor 与 engine 使用同一份 checkpoint,并读取已加载模型的配置。
4
构造请求
与其他模型的单次示例一样,生成合成观测来检查推理链路:三路随机 RGB 图像、全零状态和一条任务指令。全零状态是此示例的输入约定;接入机器人或仿真时,应替换为实际关节位置和夹爪状态。
5
运行一步并还原动作
(1, 24, 8) 的 CPU FP32 tensor。保留原始 observation,用于 checkpoint 配置的相对动作还原。6
关闭 engine
请求格式
原始观测
本页使用B=1。T 表示每路相机的观测历史长度,首请求为 1。
Processor 对各路图像进行中心裁剪,resize 到
176 × 320,再拼接成 352 × 640 的网格:腕部视角占据上半部,右、左视角分别位于下半部两侧。它还负责状态归一化、padding、具身 ID 和正负 prompt 的 tokenization。
Engine 请求与结果
engine.step() 接收 DreamZeroProcessedInputs。以下形状对应 DROID 的常用配置,具体宽度以加载后的 config 为准。
Postprocessor 裁掉动作 padding、转为 FP32,并根据 checkpoint 统计反归一化。如果 checkpoint 配置了相对关节动作,它还会结合原始观测还原关节位置。因此应保留
observation 并传入 obs=observation。
DreamZeroPipelineOutput 同时保留 request 和 scheduler_output,可用于检查内部噪声、调度结果和帧位置。内部 DreamZeroRequest 包含视频与动作 latent、编码条件及缓存控制字段,由 pipeline 构造;通常无需手动创建。
端到端示例
examples/dreamzero/run_dreamzero.py 默认生成三路 180 × 320 随机 RGB 图像、八维全零状态和任务指令 Pick up the object。无需连接相机或准备图片文件。激活已安装 PhyAI 依赖的环境后,在仓库根目录运行:
action.npy:
连续请求
同一条序列应复用同一个 engine。调用方采集和整理历史观测,pipeline 与 scheduler 保存编码条件、帧位置及 DiT KV。Processor 不会替调用方累计相机历史。
四帧历史需要按控制循环的采样节奏准备,不能靠重复当前图像替代真实历史。底层也处理特定的九帧参考输入,但多帧长度受
num_frame_per_block 约束,不能任意改变。
开始新任务时,清空调用方的观测历史,并以一帧新观测调用 engine.step()。只改变任务文本不会自动建立独立会话。显式控制缓存时可使用 engine.entry.bundle.pipeline 的 current_start_frame、reset_kv_cache 参数;这是较低层接口,调用方还需显式传入所需的去噪配置。
推理配置
Fixed4 与 dynamic16
本页示例默认采用 dynamic16 配置。使用--no-dynamic-dit 可切换到固定步数。动态模式下,scheduler 根据视频预测的变化决定哪些调度步重新运行 DiT,哪些步复用已有预测。16 是调度步数,实际 DiT forward 次数可能更少;不能把 dynamic16 当作固定 16 次模型执行来计算性能。
Python 接口对应 DreamZeroArgs.num_inference_steps、dynamic_dit 和 dynamic_dit_scheduler_steps。Entry 将这些设置传给 pipeline。
Kernel policy 与编译
示例 policy 显式选择:
其他算子遵循框架的 kernel 选择规则。VAE 的 channel L2 norm 与标准 RMSNorm 具有不同的计算语义,不应仅凭名称替换。
compile_scheduler=True 编译的是 UniPC 更新;它与 RuntimeConfig.use_cuda_graph 分别控制不同机制。示例关闭 CUDA Graph,开启 scheduler 编译也不表示整条模型链已经被捕获为 CUDA Graph。编译会增加首次执行开销,应将首次请求与后续请求分别计时。
精度回归应记录 checkpoint、源码版本、kernel policy、Torch/CUDA 版本以及实际的初始视频和动作噪声。相同 seed 在不同设备执行配置下不保证生成逐元素相同的噪声;开启 scheduler 编译也不足以单独证明整条链路与官方数值一致。
当前限制
- 本页覆盖单卡、
B=1、DROID 三相机输入。模型代码中的其他并行配置不属于本页验收范围。 run_dreamzero.py生成一个初始 action chunk;网络服务、历史帧采样、动作执行和任务成功判定需要上层适配。- 权重、运行中的 KV、编码临时 tensor 和编译缓存都会影响内存峰值。Jetson Thor 的统一内存还与 CPU 进程共享,不能仅按权重大小估算连续请求的内存需求。
- 关闭 engine 会释放它持有的模型与运行状态。连续 episode 的资源峰值需要在目标部署环境单独验证。

