A unified research codebase for training and evaluating World Action Models.
Start here: Quick start Β· Supported models Β· Benchmark results Β· Checkpoints Β· Documentation
EasyWAM is a unified research codebase designed to make World Action Model development efficient, reproducible, and easy to extend. It connects model implementation, data processing, distributed training, parameter-efficient fine-tuning, and large-scale evaluation through a consistent workflow.
- π§© Unified and modular design. Modular model components share consistent data, training, checkpoint, and evaluation interfaces, making new WAM designs easier to integrate.
- β‘ Efficient computation. Efficiency is a first-class design goal in EasyWAM. It natively integrates FlashAttention 2/3/4 to accelerate attention workloads and provides complete LoRA support from parameter-efficient training and checkpointing to merged inference. BF16, gradient checkpointing, DeepSpeed ZeRO, and PyTorch SDPA fallback further improve speed, memory usage, and compatibility.
- π Optimized end-to-end pipeline. EasyWAM streamlines every stage of training and inference. Sparse video decoding, indexed text caches, persistent workers, prompt caching, and resumable evaluation eliminate repeated work and deliver substantial speedups across both training and inference.
- π οΈ Easy-to-use workflows. Hydra-based configuration, standardized training and evaluation recipes, distributed launchers, automatic GPU sharding, and result summaries keep common workflows straightforward.
π Hope: We hope EasyWAM will become an efficient and easy-to-use codebase for World Action Model research, enabling researchers to explore WAMs more quickly and easily. More models and benchmarks will be continuously added and supported. We warmly welcome contributions from the community to help make EasyWAM better. If you encounter any problems or have suggestions for improving EasyWAM, please open an issue. We will continue to refine and improve EasyWAM.
- [2026-09-12] EasyWAM introduces dynamic batched evaluation, requiring only a small number of workers while significantly reducing evaluation GPU memory usage and improving GPU utilization. This update also adds task/trial progress reporting, LeRobot v3 support, FlashAttention 2/3/4 with optimized text-padding mask semantics, configurable state-token placement and causal attention, execution and caching optimizations, automatic run logging, expanded documentation, and new benchmark results.
- [2026-09-03] EasyWAM adds FLUX.2/ImageWAM backbone integration.
- [2026-09-02] EasyWAM is released with unified training and evaluation workflows for World Action Models.
- EasyWAM-Unified. A single-backbone architecture that places video and action tokens in one Video DiT to jointly predict future video and actions. The architecture is based on DreamZero.
- EasyWAM-MoT. A dual-backbone model with separate Video DiT and Action DiT experts whose tokens interact through shared mixed self-attention. It performs action-only prediction and is based on FastWAM.
- EasyWAM-MoT-Joint. A dual-backbone model that jointly denoises video and action tokens through shared mixed self-attention.
- EasyWAM-MoT-IDM. A dual-backbone model that uses teacher-forced conditional video for action prediction.
- EasyWAM-Hidden. A dual-backbone architecture that uses intermediate Video DiT features as conditional input to a separate Action DiT. The architecture is based on DiT4DiT.
| Model | Full-Parameter Training | LoRA Fine-Tuning |
|---|---|---|
| EasyWAM-Unified | β | β |
| EasyWAM-MoT | β | β |
| EasyWAM-MoT-Joint | β | β |
| EasyWAM-MoT-IDM | β | β |
| EasyWAM-Hidden | β | β |
| Backbone | Supported |
|---|---|
| Wan2.2-TI2V-5B | β |
| Cosmos-Predict2.5-2B | β |
| FLUX.2 Klein-4B | β |
| Benchmark | Supported | Training | Evaluation |
|---|---|---|---|
| LIBERO | β | Full-parameter and LoRA | Standard evaluation |
| LIBERO-Plus | β | Uses LIBERO checkpoints | Robustness evaluation |
| RoboTwin | β | Full-parameter and LoRA | Clean and randomized evaluation |
LIBERO
Full-Parameter
| Backbone | Model | Spatial | Object | Goal | Long | Avg. |
|---|---|---|---|---|---|---|
| Wan2.2-TI2V-5B | EasyWAM-Unified | 99.0 | 99.4 | 99.2 | 98.2 | 99.0 |
| Wan2.2-TI2V-5B | EasyWAM-MoT | 97.8 | 98.4 | 97.6 | 95.6 | 97.4 |
| Wan2.2-TI2V-5B | EasyWAM-Hidden | 99.4 | 100.0 | 97.0 | 97.8 | 98.6 |
LoRA (Rank 128)
| Backbone | Model | Spatial | Object | Goal | Long | Avg. |
|---|---|---|---|---|---|---|
| Wan2.2-TI2V-5B | EasyWAM-Unified | 84.0 | 97.8 | 92.0 | 81.2 | 88.8 |
| Wan2.2-TI2V-5B | EasyWAM-MoT | 96.8 | 98.8 | 94.4 | 90.4 | 95.1 |
| Wan2.2-TI2V-5B | EasyWAM-Hidden | 96.8 | 99.4 | 92.6 | 86.8 | 93.9 |
LIBERO-Plus
| Backbone | Model | Orig (LIBERO) | Background | Camera | Language | Layout | Light | Noise | Robot | Avg. |
|---|---|---|---|---|---|---|---|---|---|---|
| Wan2.2-TI2V-5B | EasyWAM-Unified | 99.0 | 55.8 | 33.7 | 93.7 | 80.6 | 92.2 | 50.2 | 71.4 | 67.5 |
| Wan2.2-TI2V-5B | EasyWAM-MoT | 97.4 | 52.8 | 20.6 | 80.4 | 65.2 | 85.1 | 51.5 | 49.7 | 56.8 |
| Wan2.2-TI2V-5B | EasyWAM-Hidden | 98.6 | 56.8 | 49.2 | 95.3 | 81.0 | 90.4 | 58.2 | 77.4 | 72.4 |
See the complete benchmark results for more results and What WAM Architecture Do We Need? (δΈζ) for analysis.
All efficiency results reported below use Wan2.2-TI2V-5B as the backbone. Actual training time may vary with the CPU and GPU configuration; these figures are provided for reference only. Please refer to the efficiency configuration guide to choose settings appropriate for your machine and improve training and inference efficiency.
EasyWAM-MoT and FastWAM use the same model architecture, enabling an architecture-matched comparison between the EasyWAM training framework and the original FastWAM codebase. Measured on 8 Γ NVIDIA H100 GPUs with a per-device batch size of 16, EasyWAM-MoT achieves 138.2 samples/s, a 2.68Γ throughput improvement over FastWAM's 51.5 samples/s. It also reduces data, forward, and backward time per step by 85.8%, 70.5%, and 49.5%, respectively.
| Framework | Throughput (samples/s) β | Data Time (s) β | Forward Time (s) β | Backward Time (s) β |
|---|---|---|---|---|
| EasyWAM-MoT | 138.2 | 0.0108 | 0.3663 | 0.5392 |
| FastWAM | 51.5 | 0.0759 | 1.2412 | 1.0680 |
On LIBERO, training for 20,000 steps takes approximately 5 hours with EasyWAM, compared with approximately 14 hours using the original FastWAM codebaseβa 64.3% reduction in overall training time.
π Hope: Training and evaluating World Action Models often requires substantial computational resources. EasyWAM aims to lower this barrier with an efficient and lightweight codebase, enabling researchers to train models, run evaluations, and iterate quickly even with limited compute. Through continuous efficiency improvements, we hope researchers can devote more of their resources to model and algorithm innovation and that more members of the community can participate in WAM research.
conda create -n easywam python=3.10 -y
conda activate easywam
pip install -U pip
pip install torch==2.7.1 torchvision==0.22.1 --extra-index-url https://download.pytorch.org/whl/cu128
pip install -e .FlashAttention is optional. When installed, EasyWAM uses the fastest compatible implementation available and otherwise falls back to PyTorch SDPA.
Install the implementation supported by your GPU. FA2 supports Ampere, Ada, and Hopper GPUs; FA3 targets Hopper GPUs; FA4 targets Hopper and Blackwell GPUs.
# FlashAttention 2
pip install flash-attn --no-build-isolation
# FlashAttention 3
git clone https://github.com/Dao-AILab/flash-attention.git
cd flash-attention/hopper
python setup.py install
# FlashAttention 4
pip install flash-attn-4
# FlashAttention 4 with CUDA 13
# pip install "flash-attn-4[cu13]"Released EasyWAM checkpoints are available in the OpenMOSS-Team/EasyWAM collection on Hugging Face.
Prepare the selected backbone with its dedicated guide:
Run this once after preparing a benchmark dataset:
python scripts/precompute_text_embeds.py task=libero_easywam_mot_wan22
# Or: python scripts/precompute_text_embeds.py task=robotwin_easywam_mot_wan22
python scripts/precompute_text_embeds.py task=libero_easywam_mot_cosmos25The launchers accept Hydra overrides directly. Set the number of local processes through NPROC_PER_NODE:
# DeepSpeed ZeRO-1 on 8 local GPUs
NPROC_PER_NODE=8 bash scripts/train_zero1.sh task=libero_easywam_mot_wan22
# MoT, MoT-Joint, and MoT-IDM each have a corresponding Cosmos25 task config
NPROC_PER_NODE=8 bash scripts/train_zero1.sh task=libero_easywam_mot_cosmos25
# DeepSpeed ZeRO-2 LoRA training on 4 local GPUs
NPROC_PER_NODE=4 bash scripts/train_zero2.sh task=robotwin_easywam_unified_wan22_lorascripts/train_zero2_offload.sh enables ZeRO-2 CPU offload. Multi-node runs additionally use NNODES, NODE_RANK, MASTER_ADDR, and MASTER_PORT.
# LIBERO
python experiments/libero/run_libero_manager.py \
task=libero_easywam_mot_wan22 \
ckpt=<path/to/checkpoint.pt>
# LIBERO-Plus (uses a LIBERO checkpoint)
python experiments/libero_plus/run_libero_plus_manager.py \
task=libero_easywam_mot_wan22 \
ckpt=<path/to/checkpoint.pt>
# RoboTwin
python experiments/robotwin/run_robotwin_manager.py \
task=robotwin_easywam_mot_wan22 \
ckpt=<path/to/checkpoint.pt>The managers default to 8 GPUs, 4 environments per GPU, dynamic inference batches of up to 4, and a 10 ms batching window. Override MULTIRUN.num_gpus, MULTIRUN.env_num_per_gpu, MULTIRUN.inference_batch_size, and MULTIRUN.inference_batch_wait_ms to match your machine. Each GPU worker loads one model while its environments share that model. See the data and benchmark guides for dataset layout, simulator installation, checkpoint examples, filtering, and resume behavior.
| Section | English | δΈζ |
|---|---|---|
| Backbone preparation and usage | Index | η΄’εΌ |
| Training data preparation | Index | η΄’εΌ |
| Benchmark setup and evaluation | Index | η΄’εΌ |
| Configuration reference | Index | η΄’εΌ |
EasyWAM/
βββ configs/ # Data, model, task, training, and evaluation configs
βββ docs/ # Repository documents
β βββ README.md # Documentation index
β βββ blogs/ # Architecture blogs
β βββ results/ # Benchmark result summaries
β βββ instructions/ # Data, benchmark, backbone, and configuration guides
βββ experiments/ # Benchmark evaluators
βββ scripts/ # Training, preprocessing, and caching entrypoints
βββ src/ # Models, data pipeline, runtime, and trainer
βββ checkpoints/ # External and trained checkpoints
βββ data/ # Local datasets and text caches
βββ runs/ # Training outputs
EasyWAM is built with the community, and contributions of all sizes are welcome. You can help by fixing bugs, improving documentation and examples, supporting new models or benchmarks, optimizing training and evaluation, or sharing reproducible results.
For bugs and small improvements, feel free to open an Issue or Pull Request. For substantial features or changes that may affect public interfaces, configurations, or compatibility, please open an Issue first so the scope and design can be discussed. Pull Requests should stay focused, include relevant verification, and update both English and Chinese documentation when user-facing behavior changes.
See CONTRIBUTING.md for reporting guidelines, development expectations, and the Pull Request checklist.
This project builds on code from FastWAM, and draws inspiration and references from DreamZero, DiT4DiT, and ImageWAM. Thanks to all the teams above for their valuable contributions to the open-source community.
We welcome you to cite EasyWAM's experimental results and codebase in your research. If EasyWAM is useful in your research, please cite:
@misc{easywam2026,
title = {EasyWAM: A Unified and Efficient Framework for Training and Evaluating World Action Models},
author = {EasyWAM-Team},
year = {2026},
url = {https://github.com/OpenMOSS/EasyWAM}
}