reactor-team/open-dreamer
GitHub: reactor-team/open-dreamer
Open Dreamer 是一个 Minecraft 世界模型的本地推理工具,能够根据输入视频和 VPT 动作序列生成未来视频帧。
Stars: 3 | Forks: 0

# 推理
**Open Dreamer 世界模型的最小化本地推理 —— 从 MP4 和匹配的 Minecraft VPT 动作中生成新
帧。**
[🎮 在线演示](https://next-state.github.io/open-dreamer/) ·
[🌐 项目与训练](https://github.com/next-state/open-dreamer)
实时演示技术支持
本仓库是一个为 [Open Dreamer](https://github.com/next-state/open-dreamer) 设计的小型、独立的 rollout 工具。
给定一段简短的视频片段和一系列 Minecraft/VPT 风格的动作,它会将视频片段编码到模型的
latent space 中,并生成后续的帧 —— 这是一种在本地以脚本化方式在你自己的素材上
驱动该世界模型的方法。
只想体验一下该模型?**[在线演示](https://next-state.github.io/open-dreamer/)**
可以在你的浏览器中运行实时版本,无需任何配置。
## 🎮 立即体验
体验 Open Dreamer 最简单的方式就是使用浏览器内演示 —— 进入
生成的 Minecraft 世界并实时游玩:
👉 **[打开演示](https://next-state.github.io/open-dreamer/)**
如果你想在本地运行 rollout,请继续阅读。
## ⚙️ 快速开始
请在仓库根目录下执行以下所有命令。
### 1. 安装
```
uv sync
```
### 2. 提供 checkpoint
你需要一个训练好的 Open Dreamer checkpoint(一个 Orbax checkpoint 目录)。你可以使用
[Open Dreamer 训练 pipeline](https://github.com/next-state/open-dreamer)
训练一个,或者通过 `--checkpoint_path` 指向你已有的 checkpoint。下方的示例
使用的是 `/path/to/open-dreamer-checkpoint`。
### 3. 验证 JAX 是否识别到 GPU
Rollout 需要支持 CUDA 的 JAX GPU;如果
`jax.devices("gpu")` 为空,脚本会在加载 checkpoint 之前退出。
```
uv run python - <<'PY'
import jax
import jax.numpy as jnp
print("backend", jax.default_backend())
print("gpu devices", jax.devices("gpu"))
x = jnp.ones((2048, 2048), dtype=jnp.float32)
y = (x @ x).block_until_ready()
print("result device", y.device)
PY
```
### 4. 下载示例数据
`download_vpt_sample.py` 会获取 OpenAI 官方的 Minecraft VPT 10.x 承包商
索引,验证示例 `.mp4` 是否在列表中,并下载该 MP4 文件及其
配套的 `.jsonl` 动作文件:
```
uv run python download_vpt_sample.py --overwrite
```
预期文件:
```
samples/vpt/cheeky-cornflower-setter-02e496ce4abb-20220421-092639.mp4
samples/vpt/cheeky-cornflower-setter-02e496ce4abb-20220421-092639.jsonl
```
### 5. 运行 rollout
```
XLA_PYTHON_CLIENT_PREALLOCATE=false uv run python inference.py \
--checkpoint_path /path/to/open-dreamer-checkpoint \
--input_mp4 samples/vpt/cheeky-cornflower-setter-02e496ce4abb-20220421-092639.mp4 \
--actions_path samples/vpt/cheeky-cornflower-setter-02e496ce4abb-20220421-092639.jsonl \
--output_mp4 outputs/vpt_sample_rollout.mp4 \
--num_context_frames 4 \
--horizon 1 \
--num_steps 4 \
--use_ema
```
## 更大的 rollout
增加 `--num_context_frames` 和 `--horizon` 以获取更长的输出:
```
XLA_PYTHON_CLIENT_PREALLOCATE=false uv run python inference.py \
--checkpoint_path /path/to/open-dreamer-checkpoint \
--input_mp4 samples/vpt/cheeky-cornflower-setter-02e496ce4abb-20220421-092639.mp4 \
--actions_path samples/vpt/cheeky-cornflower-setter-02e496ce4abb-20220421-092639.jsonl \
--output_mp4 outputs/rollout.mp4 \
--num_context_frames 16 \
--horizon 64 \
--num_steps 4 \
--use_ema
```
只有前 `--num_context_frames` 个视频帧会被读取和编码。动作
文件必须包含至少 `num_context_frames + horizon` 个动作;
完整的动作序列会先进行移位,然后再被拆分为 context 和未来(future)
动作。
## 输入格式
动作文件可以是 JSON 数组或 JSONL。每个条目都是一个 VPT 风格的动作
字典,包含 `mouse` 和 `keyboard` 字段,例如:
```
{"mouse":{"dx":0.0,"dy":0.0,"buttons":[],"dwheel":0.0},"keyboard":{"keys":["key.keyboard.w"]}}
```
输入视频帧必须是 RGB `368x640`,或者是 RGB `360x640`,以便它们能够
被零填充(zero-pad)到训练时使用的 `368x640` 模型形状。
## 📚 参考文献
- Open Dreamer:[项目主页、博客文章和训练 pipeline](https://github.com/next-state/open-dreamer)
- Dreamer 4:[Training Agents Inside of Scalable World Models](https://danijar.com/project/dreamer4/)
## 📄 许可证
**保留所有权利。** 请参阅 [LICENSE](LICENSE)。这是一个临时声明;
正式的许可证预计将在未来的版本中发布。
标签:JAX, Vectored Exception Handling, 世界模型, 人工智能, 推理框架, 游戏模拟, 用户模式Hook绕过, 视频生成, 逆向工具