|
Download 14B/README.md from Elastic-forcing/Elastic-forcing-code: direct link, hf CLI and curl.
- Browser
- Download file 4.42 kB
-
https://huggingface.co/Elastic-forcing/Elastic-forcing-code/resolve/main/14B/README.md
- Command line
-
hf download hf://Elastic-forcing/Elastic-forcing-code/14B/README.md
-
curl -L -o README.md https://huggingface.co/Elastic-forcing/Elastic-forcing-code/resolve/main/14B/README.md
4.42 kB
| # Elastic Forcing — 14B | |
| [Overview](../README.md) · [1.3B guide](../1.3B/README.md) · [Checkpoints](https://huggingface.co/Elastic-forcing/Elastic-forcing-checkpoint/tree/main/checkpoints/14B) | |
| The 14B model uses Wan2.1-T2V-14B with DINOv3, V-JEPA 2, and VideoMAEv2 for distribution matching. It generates 81-frame videos at 832 × 480 resolution and 16 FPS. Inference uses four causal denoising steps followed by terminal cleanup. | |
| ## Environment | |
| Use Linux, Python 3.10, and NVIDIA GPUs with BF16 support. Run these commands from `14B/`: | |
| ```bash | |
| conda create -n elastic-forcing-14b python=3.10 -y | |
| conda activate elastic-forcing-14b | |
| 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-14B 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-14B/`. | |
| The generator checkpoint is stored as eight FP32 safetensors shards. Download them and create the `.pt` file expected by the inference launcher: | |
| ```python | |
| import json | |
| from pathlib import Path | |
| import torch | |
| from huggingface_hub import snapshot_download | |
| from safetensors.torch import load_file | |
| folder = Path(snapshot_download( | |
| "Elastic-forcing/Elastic-forcing-checkpoint", | |
| allow_patterns=["checkpoints/14B/*"], | |
| )) / "checkpoints/14B" | |
| index = json.loads((folder / "model.safetensors.index.json").read_text()) | |
| state = {} | |
| for shard in sorted(set(index["weight_map"].values())): | |
| state.update(load_file(str(folder / shard), device="cpu")) | |
| torch.save({"generator": state}, "/path/to/local/model.pt") | |
| ``` | |
| Conversion preserves tensor values and precision. Allow enough host memory and disk space for the approximately 57 GB FP32 generator and the output file. | |
| For inference, prepare the base-model assets and generate the local configuration: | |
| ```bash | |
| export ASSET_ROOT=/path/to/assets | |
| python scripts/prepare_config.py --asset-root "$ASSET_ROOT" --inference-only | |
| ``` | |
| ## Inference | |
| ```bash | |
| CHECKPOINT=/path/to/local/model.pt \ | |
| GPUS=0 \ | |
| PROMPTS=code/prompts/test_8.txt \ | |
| OUTPUT_DIR=outputs/demo \ | |
| bash scripts/infer.sh | |
| ``` | |
| The defaults are seed 0 and five samples per prompt with non-EMA generator weights. Set `NUM_SAMPLES=1` for a single sample. The generator executes one video at a time while retaining the sampling order across prompts. Model loading uses local base-model assets. | |
| ## Training | |
| Training requires the causal ODE initialization, frozen encoders, matched prompt/video manifest, reference feature bank, and Nyström summaries. Prepare the model and reference assets at the locations specified in [configs/train.yaml](configs/train.yaml), then run: | |
| ```bash | |
| python scripts/prepare_config.py --asset-root "$ASSET_ROOT" | |
| GPUS=0,1,2,3,4,5,6,7 LOGDIR=runs/train bash scripts/train.sh | |
| ``` | |
| | Setting | Value | | |
| |---|---| | |
| | Training updates | 80 | | |
| | Distribution / differentiation / reference batch | 256 / 128 / 128 | | |
| | Per-GPU generated / differentiated videos | 32 / 16 | | |
| | Reference videos | 8,000 | | |
| | 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 200 updates | | |
| | Gradient clipping | Maximum norm 10 | | |
| | Checkpoint interval | Every ten updates | | |
| | Memory management | FSDP, activation checkpointing, optimizer and encoder CPU offload | | |
| The learning-rate schedule spans 200 updates while training stops at update 80. Use a separate `LOGDIR` for each run. Keep checkpoint companion files for resuming training with the same distributed topology and asset configuration. | |
| To resume: | |
| ```bash | |
| python scripts/prepare_config.py --asset-root "$ASSET_ROOT" \ | |
| --resume-checkpoint /path/to/checkpoint/model.pt | |
| GPUS=0,1,2,3,4,5,6,7 LOGDIR=runs/resume bash scripts/train.sh | |
| ``` | |
| ## Evaluation and tests | |
| Generate benchmark videos with consistent prompt ordering and sampling settings, then evaluate them with the official [VBench](https://github.com/Vchitect/VBench) implementation. | |
| Run the CPU numerical tests from `14B/`: | |
| ```bash | |
| python -m pip install pytest | |
| python scripts/test_cpu.py | |
| ``` | |