GenieRedux 本地部署指南:用 RetroAct 数据集训练你的第一个世界模型
写在前面
如果你想理解世界模型是怎么训练的,光看论文不够。跑一遍代码,观察训练过程,才能真正理解每个组件在做什么。
GenieRedux 是目前最完整的开源世界模型训练框架。代码质量不错,文档也算清晰。这篇文章带你走一遍部署流程。
硬件需求
先说结论:这不是笔记本能跑的东西。
最低配置(能跑但很慢):
- GPU:16GB 显存以上(3090、4090 或更好)
- RAM:32GB
- 存储:100GB 可用空间
推荐配置:
- 多张 GPU(论文用的是多卡训练)
- 64GB RAM
- SSD 存储
如果你只有一张消费级显卡,可以跑,但要降低 batch size,效果会打折扣。
环境准备
1. 克隆仓库
git clone https://github.com/insait-institute/GenieRedux.git
cd GenieRedux
2. 安装 Conda 环境
项目提供了一个安装脚本:
bash install.sh
这个脚本会创建三个 Conda 环境:
retro_datagen:数据生成环境,包含 Stable-Retrogenie_redux:模型训练和评估环境auto_explore:探索智能体训练环境
安装过程可能需要 10-20 分钟,取决于网速和机器配置。
3. 获取游戏 ROM
这是最麻烦的一步。GenieRedux 用 Stable-Retro 模拟器运行复古游戏,但 ROM 文件需要你自己准备。
为什么不直接提供?版权问题。NES、SNES、Genesis 的游戏 ROM 是有版权的。
怎么获取:
- 如果你有原版卡带,可以用设备 dump ROM
- 网上有一些公开的 ROM 资源,但合法性模糊
- 部分游戏有官方重制版,购买后可以提取 ROM
获取后,用 Stable-Retro 导入:
conda activate retro_datagen
python -m retro.import /path/to/your/roms/
建议先用几个游戏测试流程,确认跑通后再扩展。
数据生成
生成预训练数据
conda activate retro_datagen
python run.py generate config=retro_act/pretrain
这个命令会:
- 启动模拟器
- 用随机动作玩游戏
- 录制每一帧画面和对应的动作
- 保存到
data_generation/datasets/目录
默认配置会生成多个游戏的数据。如果你的 ROM 不全,可以修改配置文件只生成有 ROM 的游戏。
配置文件在 data_generation/configs/ 目录下。关键参数:
n_sessions:每个游戏生成多少个 episoden_steps_max:每个 episode 最多多少步image_size:画面分辨率(默认 64x64)
训练分词器
分词器(Tokenizer)把画面压缩成离散的 token。这是训练的第一步。
conda activate genie_redux
python run.py genie_redux train config=tokenizer.yaml \
train.num_processes=6 \
train.batch_size=7 \
train.grad_accum=2
参数说明:
num_processes:数据加载的进程数,根据 CPU 核心数调整batch_size:每个 GPU 的 batch 大小,根据显存调整grad_accum:梯度累积步数
默认训练 150k 步。在单张 4090 上大概需要 10-20 小时。
训练过程中会保存 checkpoint 到 checkpoints/tokenizer/ 目录。
训练动力学模型
分词器训练完成后,训练动力学模型:
python run.py genie_redux train config=genie_redux_guided_pretrain.yaml \
train.num_processes=7 \
train.batch_size=4 \
train.grad_accum=3 \
tokenizer_fpath=checkpoints/tokenizer/tokenizer/model-150000.pt
这一步训练的是 GenieRedux-G,需要提供动作标签。如果你想训练不需要动作标签的版本(带 LAM),用 config=genie_redux.yaml。
训练时间更长,可能需要 1-3 天,取决于硬件和数据量。
评估模型
训练完成后,可以评估效果:
python run.py genie_redux eval \
config=genie_redux_guided_pretrain.yaml \
eval.action_to_take=-1 \
eval.model_fpath=checkpoints/genie_redux_guided/genie_redux_guided_pretrain/model-180000.pt \
eval.inference_method=one_go
action_to_take=-1 表示用真实的动作序列评估。设置成 0-4 可以测试特定动作的效果。
评估会输出几个指标:
- PSNR:峰值信噪比,衡量重建质量
- SSIM:结构相似性
- FID:生成图像和真实图像的分布距离
- ΔPSNR:控制性指标
同时会生成可视化结果,保存在 outputs/evaluation/ 目录。
常见问题
Q:显存不够怎么办?
降低 batch_size,增加 grad_accum。比如 batch_size=2, grad_accum=8 和 batch_size=16, grad_accum=1 的总 batch 是一样的,只是速度慢一些。
Q:只有部分游戏的 ROM 能跑吗?
可以。修改配置文件,只包含你有 ROM 的游戏。或者在生成数据时指定游戏列表。
Q:训练到一半中断了怎么办?
Checkpoint 会自动保存。在训练命令里加 model_fpath=上次的checkpoint路径 可以继续训练。
Q:效果很差怎么办?
先检查数据生成是否正确。查看 data_generation/datasets/ 里的数据,确认画面和动作是对的。
如果数据没问题,可能是训练步数不够。150k 是论文推荐的最低步数,你可能需要更多。
探索智能体(可选)
如果你想用 AutoExplore 收集更好的训练数据:
conda activate auto_explore
python run.py auto_explore train \
common.root_dpath=checkpoints/auto_explore \
world_model.root_dpath=checkpoints/genie_redux_guided \
world_model.model_dname=genie_redux_guided \
world_model.model_fname=model-100000.pt \
collection.games='["SuperMarioBros-Nes"]'
AutoExplore 会用已经训练好的世界模型来指导探索。它会倾向于去模型预测不准的区域,收集更有价值的数据。
下一步
跑通基础流程后,可以尝试:
- 增加数据量和训练步数,看效果能提升多少
- 在新游戏上微调模型
- 修改模型架构,做消融实验
- 读懂代码,理解每个模块的作用
GenieRedux 的代码结构比较清晰,适合学习世界模型的内部机制。
预期效果
说实话,最终效果和 DeepMind 的 Genie 3 差距很大。分辨率低、一致性短、泛化能力有限。
但作为学习材料,它是够用的。你能理解:
- 视频分词器是怎么把画面压缩成 token 的
- 动力学模型是怎么预测下一帧的
- 隐动作模型是怎么从画面推断动作的
这些理解比最终效果更有价值。