Fast-WAM: Do World Action Models Need Test-time Future Imagination? 的官方代码仓库。
本仓库包含 FastWAM 在 LIBERO / RoboTwin 上的训练与评估代码。
FastWAM 现在更快、更适合大规模数据,也为研究提供了更灵活的模型选择。本次更新带来了显著的 训练与推理加速、原生 LeRobot v3.0 支持,以及一个可以自由切换是否进行未来想象的新模型。
FastWAM 端到端推理速度提升约 2 倍,测速包含 text encoding 和 VAE encoding:
- NVIDIA H20: 470 ms → 210 ms
- NVIDIA RTX 4090: 190 ms → 110 ms
LIBERO 默认通过 EVALUATION.compile_action_infer=true 启用加速路径。感谢
PR #43 提出的优化思路,
为本次推理加速工作提供了重要启发。原有checkpoint可以直接使用。
在 NVIDIA H20 GPU 上,FastWAM 训练速度提升约 10%。新的训练路径结合了 compiled denoising core、batch VAE encoding 和轻量 CUDA Graph backend。 通过以下配置开启 denoise compilation:
bash scripts/train_zero1.sh 8 task=libero_uncond_2cam224_1e-4 \
model.compile_training_denoise=true同时支持缓存 text embedding 和在线 T5 encoding 两种训练方式。后者省略了text cache预处理,更方便,但会慢约10%。
FastWAM 现在同时支持 LeRobot 2.1 和 LeRobot 3.0 数据集。LeRobot 3.0 使用 chunked parquet 和 video layout,在数据规模增大时具有更快的数据加载和 dataset statistics 计算速度,更适合大规模机器人数据训练。
从 Hugging Face 下载已发布的 LeRobot 3.0 LIBERO 数据,并选择 v3.0 data config:
huggingface-cli download yuanty/LIBERO-fastwam \
--repo-type dataset \
--include "lerobot_v30/**" \
--local-dir ./data
python scripts/train.py task=libero_uncond_2cam224_1e-4 \
data=libero_2cam_lerobot_v30使用其他 LeRobot 3.0 数据集时,可以复制
configs/data/libero_2cam_lerobot_v30.yaml,修改其中的
train.dataset_dirs,再通过 data=<config_name> 选择新配置。原有 LeRobot
2.1 配置无需修改,可以继续使用。
Optional IDM 是一个新的 FastWAM variant,在同一个模型中支持两种推理模式:
- IDM mode: 先想象未来视频,再预测动作。
- First-frame mode (Fast-WAM): 省略 test-time future imagination,直接根据当前观测预测动作。
从 Hugging Face 下载已发布的 Optional IDM 权重:
huggingface-cli download yuanty/fastwam \
libero_optional_idm_2cam224.pt \
libero_optional_idm_2cam224_dataset_stats.json \
--local-dir ./checkpoints/fastwam_release只需要训练一次 optional-IDM:
bash scripts/train_zero1.sh 8 task=libero_optional_idm_2cam224_1e-4之后即可在评测时选择任一模式,无需重新训练,方便研究和比较 future imagination 在什么情况下有效:
python experiments/libero/run_libero_manager.py \
task=libero_optional_idm_2cam224_1e-4 \
ckpt=./checkpoints/fastwam_release/libero_optional_idm_2cam224.pt \
EVALUATION.dataset_stats_path=./checkpoints/fastwam_release/libero_optional_idm_2cam224_dataset_stats.json \
EVALUATION.sigma_shift=1.0 \
+EVALUATION.action_infer_mode=idm \
MULTIRUN.num_gpus=8将 idm 替换为 first_frame 即可使用 Fast-WAM inference mode。
使用 action scheduler shift 1.0 训练的 release 权重在完整 LIBERO benchmark
(40 个 tasks,每个 task 50 个 episodes)上的成功率如下:
| 推理模式 | Spatial | Goal | Object | Long | Average |
|---|---|---|---|---|---|
| IDM | 99.0% | 98.6% | 99.6% | 97.0% | 98.55% |
| First-frame | 98.2% | 97.8% | 99.2% | 95.8% | 97.75% |
- 训练和评测的 action scheduler shift 默认统一为
1.0,实验发现1.0~3.0效果接近。评测原论文发布的旧 checkpoint 时,请显式设置EVALUATION.sigma_shift=5.0,以复现原始设置。 - LIBERO 评测升级为持久模型进程,并支持动态任务调度、坏卡隔离、失败恢复和断点续测。
- 优化 IDM 和 Optional IDM 的纯 action 推理:
infer_action直接返回 action 和 video latent, 仅infer_joint在需要输出视频时执行 VAE decode,避免 action-only 部署中的冗余计算。
FastWAM/
├── configs/
│ ├── data/ # 数据集配置(LIBERO、RoboTwin 等)
│ ├── model/ # 模型结构与组件配置
│ └── task/ # 任务级配置(训练 task 名)
├── scripts/
│ ├── train.py
│ ├── train_zero1.sh # deepspeed zero1 训练入口
│ ├── preprocess_action_dit_backbone.py # 训练前预处理 ActionDiT backbone
│ └── precompute_text_embeds.py # 训练前预计算 T5 文本 embedding cache
├── experiments/
│ ├── libero/
│ │ └── run_libero_manager.py
│ └── robotwin/
│ └── run_robotwin_manager.py
├── src/fastwam/ # 核心代码
├── runs/ # 训练输出(ckpt、日志)
├── checkpoints/ # 预训练或外部 checkpoint
├── data/ # data目录
└── evaluate_results/ # 推理/评估结果
conda create -n fastwam python=3.10 -y
conda activate fastwam
pip install -U pip
pip install torch==2.7.1+cu128 torchvision==0.22.1+cu128 --extra-index-url https://download.pytorch.org/whl/cu128
pip install -e .这一步同时是训练和推理的前置项。
第一步,先设置 Wan 模型目录(可选,默认 ./checkpoints):
mkdir -p checkpoints
export DIFFSYNTH_MODEL_BASE_PATH="$(pwd)/checkpoints"第二步,预生成 ActionDiT backbone(从Wan22 DiT插值):
# uncond (fastwam)
python scripts/preprocess_action_dit_backbone.py \
--model-config configs/model/fastwam.yaml \
--output checkpoints/ActionDiT_linear_interp_Wan22_alphascale_1024hdim.pt \
--device cuda \
--dtype bfloat16Fast-WAM 使用的 LIBERO 预处理数据已发布到:
先下载全部压缩包,再全部解压:
mkdir -p data/libero_mujoco3.3.2
cd data/libero_mujoco3.3.2
# 下载 4 个 tar.gz 文件后执行
for f in *.tar.gz; do
tar -xzf "$f"
done解压后目录结构应为:
data/libero_mujoco3.3.2/
├── libero_10_no_noops_lerobot/
├── libero_goal_no_noops_lerobot/
├── libero_object_no_noops_lerobot/
└── libero_spatial_no_noops_lerobot/
Fast-WAM 使用的 RoboTwin 预处理数据已发布到:
先下载全部分卷文件,再拼接并解压:
mkdir -p data/robotwin2.0
cd data/robotwin2.0
# 下载全部 robotwin2.0.tar.gz.part-* 文件后执行
cat robotwin2.0.tar.gz.part-* | tar -xzf -解压后目录结构应为:
data/robotwin2.0/
└── robotwin2.0/
├── data/
├── meta/
└── videos/
根目录下如果同时保留:
data/robotwin2.0/dataset_stats.json
可直接作为本仓库当前配置使用的统计文件,也可重新计算。
release 的模型权重以及对应的 dataset stats 已经发布到 Hugging Face.
从 Hugging Face 下载 release 权重和 dataset stats:
pip install -U huggingface_hub
huggingface-cli download yuanty/fastwam \
libero_uncond_2cam224.pt \
libero_uncond_2cam224_dataset_stats.json \
libero_optional_idm_2cam224.pt \
libero_optional_idm_2cam224_dataset_stats.json \
robotwin_uncond_3cam_384.pt \
robotwin_uncond_3cam_384_dataset_stats.json \
--local-dir ./checkpoints/fastwam_release下载后,本地目录应为:
checkpoints/fastwam_release/
├── libero_uncond_2cam224.pt
├── libero_uncond_2cam224_dataset_stats.json
├── libero_optional_idm_2cam224.pt
├── libero_optional_idm_2cam224_dataset_stats.json
├── robotwin_uncond_3cam_384.pt
└── robotwin_uncond_3cam_384_dataset_stats.json
LIBERO benchmark 评测前,请先按 LIBERO 官方仓库 安装环境:
最后一步执行:
pip install mujoco==3.3.2mujoco 环境和 LIBERO 数据版本相关,最好保持一致。
我们已经把 RoboTwin 评测相关代码copy到了 third_party/RoboTwin。
但仍需按 RoboTwin 官方仓库 中的教程完成环境安装并下载相关assets:
再创建 policy 软链接:
ln -sfn "$(pwd)/experiments/robotwin/fastwam_policy" "$(pwd)/third_party/RoboTwin/policy/fastwam_policy"一键评测 release 的 LIBERO 权重:
当前 LIBERO / RoboTwin 的评测 manager 默认使用 8 张 GPU
(configs/sim_libero.yaml 和 configs/sim_robotwin.yaml 中的
MULTIRUN.num_gpus=8)。
如果你想用更少的卡,直接在命令行里传更小的值,例如
MULTIRUN.num_gpus=4。
python experiments/libero/run_libero_manager.py \
task=libero_uncond_2cam224_1e-4 \
ckpt=./checkpoints/fastwam_release/libero_uncond_2cam224.pt \
EVALUATION.dataset_stats_path=./checkpoints/fastwam_release/libero_uncond_2cam224_dataset_stats.json \
EVALUATION.sigma_shift=5.0 \
MULTIRUN.num_gpus=8一键评测 release 的 RoboTwin 权重:
python experiments/robotwin/run_robotwin_manager.py \
task=robotwin_uncond_3cam_384_1e-4 \
ckpt=./checkpoints/fastwam_release/robotwin_uncond_3cam_384.pt \
EVALUATION.dataset_stats_path=./checkpoints/fastwam_release/robotwin_uncond_3cam_384_dataset_stats.json \
EVALUATION.sigma_shift=5.0 \
MULTIRUN.num_gpus=8为了加速 RoboTwin 评测,我们在 configs/sim_robotwin.yaml 中打开了 EVALUATION.skip_get_obs_within_replan=true。
它会在一次 replan 窗口内连续执行一个 action chunk 时跳过 RGB 渲染,评测更快,但保存下来的视频帧率会低。
如果想保存完整视频,可以把它设为 false。
注意:我们测试用的是unseen指令,这点和Motus对齐。而Lingbot-VA使用的是seen,你可以尝试设置EVALUATION.instruction_type=seen来使用seen指令,理论上会提高一两个点。
使用 scripts/precompute_text_embeds.py,按训练 task 预计算:
# LIBERO
python scripts/precompute_text_embeds.py task=libero_uncond_2cam224_1e-4
# RoboTwin
python scripts/precompute_text_embeds.py task=robotwin_uncond_3cam_384_1e-4如需多卡可用:
torchrun --standalone --nproc_per_node=8 scripts/precompute_text_embeds.py task=libero_uncond_2cam224_1e-4首次跑某个新任务时,请先把对应 configs/data/*.yaml 里的 pretrained_norm_stats 设为 null。
跑完一次训练后,会在当前 run 目录生成 dataset_stats.json(例如 runs/{task_name}/{run_id}/dataset_stats.json),
后续就可以把 pretrained_norm_stats 改成该文件路径。
# LIBERO
bash scripts/train_zero1.sh 8 task=libero_uncond_2cam224_1e-4
# RoboTwin
bash scripts/train_zero1.sh 8 task=robotwin_uncond_3cam_384_1e-4对于LIBERO,我们使用单机8卡训练。对于RoboTwin,我们使用了64卡来加速训练,你可以尝试调小卡数和训练总epoch数。
mujoco 环境和 LIBERO 数据版本相关,最好保持一致。之后再运行 LIBERO 评测:
# LIBERO
python experiments/libero/run_libero_manager.py task={task_name} ckpt={ckpt_path}我们已经把 RoboTwin 评测相关代码copy到了 third_party/RoboTwin。
但仍需按 RoboTwin 官方仓库 中的教程完成安装并下载相关assets:
再创建 policy 软链接:
ln -sfn "$(pwd)/experiments/robotwin/fastwam_policy" "$(pwd)/third_party/RoboTwin/policy/fastwam_policy"之后再运行 RoboTwin 评测:
python experiments/robotwin/run_robotwin_manager.py task={task_name} ckpt={ckpt_path}常用 task_name 示例:
libero_uncond_2cam224_1e-4
robotwin_uncond_3cam_384_1e-4
本仓库中的 RoboTwin 评测代码基于官方 RoboTwin 仓库 适配而来。感谢 RoboTwin 团队公开其代码仓库和相关 assets。
如果你觉得我们的工作有帮助,欢迎引用:
@article{yuan2026fastwam,
title={Fast-WAM: Do World Action Models Need Test-time Future Imagination?},
author={Tianyuan Yuan and Zibin Dong and Yicheng Liu and Hang Zhao},
journal={arXiv preprint arXiv:2603.16666},
year={2026},
url={https://arxiv.org/abs/2603.16666}
}