Elastic-forcing's picture
Update documentation
066102e verified
|
Raw History Blame Contribute Delete
3.73 kB

Elastic Forcing — 1.3B

Overview · 14B guide · Checkpoints

The 1.3B model uses Wan2.1-T2V-1.3B with DINOv3, V-JEPA 2, and VideoMAEv2 for distribution matching. It generates 81-frame videos at 832 × 480 resolution and 16 FPS, with four causal denoising steps per chunk.

Environment

Use Linux, Python 3.10, and NVIDIA GPUs with BF16 support. Run these commands from 1.3B/:

conda create -n elastic-forcing python=3.10 -y
conda activate elastic-forcing
python -m pip install torch==2.5.1 torchvision==0.20.1 \
  --index-url https://download.pytorch.org/whl/cu121
python -m pip install -r requirements.txt
python -m pip install flash-attn==2.7.4.post1 --no-build-isolation
export PYTHON_BIN="$(command -v python)"

Models and assets

Inference requires the Wan2.1-T2V-1.3B base model, T5 text encoder, tokenizer, VAE, and the Elastic Forcing generator checkpoint. Place the base-model bundle under $ASSET_ROOT/models/Wan2.1-T2V-1.3B/. Training also requires the Self-Forcing ODE initialization, local DINOv3, V-JEPA 2, and VideoMAEv2 models, and precomputed reference features.

Download the generator checkpoint:

from pathlib import Path
from huggingface_hub import snapshot_download

folder = Path(snapshot_download(
    "Elastic-forcing/Elastic-forcing-checkpoint",
    allow_patterns=["checkpoints/1.3B/*"],
))
print(folder / "checkpoints/1.3B/model.pt")

Set the local asset root and generate the configuration:

export ASSET_ROOT=/path/to/assets
python scripts/prepare_config.py --asset-root "$ASSET_ROOT"

Inference

Use the downloaded checkpoint and a text file containing one prompt per line:

CHECKPOINT=/path/to/model.pt \
GPUS=0 \
PROMPTS=code/prompts/test_8.txt \
OUTPUT_DIR=outputs/demo \
bash scripts/infer.sh

The launcher produces one video per prompt with seed 0 and non-EMA generator weights. Prepare base-model assets before launching; model loading uses local files.

Training

Training requires an ODE initialization, all three frozen encoders, a matched prompt/video manifest, a reference feature bank, and one Nyström summary per encoder. Prepare the model and reference assets at the locations specified in configs/three_encoder.yaml, generate the local configuration, and start training:

GPUS=0,1,2,3 LOGDIR=runs/train bash scripts/train.sh
Setting Value
Training updates 150
Distribution / differentiation / reference batch 256 / 128 / 128
Per-GPU generated / differentiated videos 64 / 32
Reference videos 8,682
Encoder weights DINOv3 : V-JEPA 2 : VideoMAEv2 = 10 : 1 : 1
Loss divisor 3
Nyström / Monte Carlo weights 2 : 1
Optimizer AdamW, betas (0, 0.999), weight decay 0
Learning rate Cosine from 2.5e-6 to 5e-7 over 125 updates, then constant
Gradient clipping Maximum norm 10
Checkpoint interval Every five updates

The launcher uses FSDP and gradient checkpointing. Training settings are in configs/three_encoder.yaml. Use a distinct LOGDIR for each run; checkpoints include optimizer and random-state files for resuming training.

Evaluation

VBench Total ↑ Quality ↑ Semantic ↑
84.25 85.06 80.99

Use VBench to evaluate generated videos. Per-dimension scores are in the reference results. Run the CPU numerical tests from 1.3B/:

python -m pip install pytest
python scripts/test_cpu.py