Files
wehub-resource-sync eec33d25b2
pre-commit / pre-commit (push) Failing after 1s
Build Wheel / build (3.11) (push) Failing after 1s
Build Wheel / build (3.12) (push) Failing after 0s
chore: import upstream snapshot with attribution
2026-07-13 12:29:08 +08:00
..

DreamZero

DreamZero is the robot-policy serving example for the OpenPI-compatible /v1/realtime/robot/openpi endpoint.

Supported checkpoints

Model HuggingFace repo
DreamZero-DROID GEAR-Dreams/DreamZero-DROID

Quick start

Start the server

bash examples/online_serving/dreamzero/run_server.sh

By default this launches:

vllm serve GEAR-Dreams/DreamZero-DROID --omni --port 8000 \
    --served-model-name dreamzero-droid \
    --deploy-config vllm_omni/deploy/dreamzero_tp1_cfg2.yaml \
    --enforce-eager --disable-log-stats

Override MODEL, PORT, HOST, DEPLOY_CONFIG, or SERVED_MODEL_NAME through the script environment if needed.

Install example dependencies

The core pip install -e . setup does not include the extra packages used by the DreamZero example scripts.

  • openpi_client.py: openpi-client, websockets, opencv-python
  • droid_sim_eval_client.py: mediapy, websockets, openpi-client

The DROID sim-eval script also needs an Isaac Lab environment that provides isaaclab, isaaclab_tasks, sim_evals, and gymnasium.

If you run the DROID client on Python < 3.12, also install typing-extensions.

Configure TP and CFG parallelism

The bundled DreamZero configs intentionally keep only:

Config Purpose
vllm_omni/deploy/dreamzero.yaml Default TP=1, CFG parallel disabled
vllm_omni/deploy/dreamzero_tp1_cfg2.yaml TP=1, CFG parallel size=2

For other topologies, use CLI parallelism flags and update stage 0 devices with --stage-overrides. The number of listed devices must match tensor_parallel_size * cfg_parallel_size.

TP=2 with CFG parallel disabled:

vllm serve GEAR-Dreams/DreamZero-DROID --omni --port 8000 \
    --served-model-name dreamzero-droid \
    --deploy-config vllm_omni/deploy/dreamzero.yaml \
    --tensor-parallel-size 2 \
    --stage-overrides '{"0": {"devices": "0,1"}}' \
    --enforce-eager --disable-log-stats

TP=2 with CFG parallel size=2:

vllm serve GEAR-Dreams/DreamZero-DROID --omni --port 8000 \
    --served-model-name dreamzero-droid \
    --deploy-config vllm_omni/deploy/dreamzero.yaml \
    --tensor-parallel-size 2 \
    --cfg-parallel-size 2 \
    --stage-overrides '{"0": {"devices": "0,1,2,3"}}' \
    --enforce-eager --disable-log-stats

Download example assets

The OpenPI client and DROID sim-eval example expect the three camera MP4 files in outputs/dreamzero/assets.

hf download YangshenDeng/vllm-omni-dreamzero-assets --repo-type dataset --local-dir outputs/dreamzero/assets

Run the OpenPI client

python examples/online_serving/dreamzero/openpi_client.py \
    --host 127.0.0.1 \
    --port 8000 \
    --video-dir outputs/dreamzero/assets

This client uses downloaded example videos and talks to the OpenPI websocket server.

Run DROID sim eval

${ISAACLAB_LAUNCHER} -p examples/online_serving/dreamzero/droid_sim_eval_client.py \
    --host 127.0.0.1 \
    --port 8000 \
    --scene 1 \
    --episodes 1 \
    --headless \
    --device cuda:0

Set ISAACLAB_LAUNCHER=path/to/isaaclab.sh from the vLLM-Omni repository root before running the command. This launches Isaac Lab / sim-evals and runs the DROID benchmark loop against the same websocket endpoint.

Export comparison videos offline

python examples/offline_inference/dreamzero/export_prediction_video.py \
    --deploy-config vllm_omni/deploy/dreamzero_tp1_cfg2.yaml \
    --save-input-video \
    --save-gif

The export script uses local Omni inference, not the websocket server. It writes the input rollout video and the predicted output video artifacts for side-by-side inspection.

MolmoSpace demo

python examples/online_serving/dreamzero/molmospace_dreamzero_eval_demo.py \
    --host 127.0.0.1 \
    --port 8000 \
    --benchmark_dir /path/to/benchmark \
    --output_dir /path/to/output

This demo adapts DreamZero to the MolmoSpace-style remote policy eval loop.