| # Repo & Config Structure |
|
|
| ## Repo Structure |
|
|
| ```plaintext |
| Open-Sora |
| βββ README.md |
| βββ docs |
| β βββ acceleration.md -> Acceleration & Speed benchmark |
| β βββ command.md -> Commands for training & inference |
| β βββ datasets.md -> Datasets used in this project |
| β βββ structure.md -> This file |
| β βββ report_v1.md -> Report for Open-Sora v1 |
| βββ scripts |
| β βββ train.py -> diffusion training script |
| β βββ inference.py -> Report for Open-Sora v1 |
| βββ configs -> Configs for training & inference |
| βββ opensora |
| β βββ __init__.py |
| β βββ registry.py -> Registry helper |
| βΒ Β βββ acceleration -> Acceleration related code |
| βΒ Β βββ dataset -> Dataset related code |
| βΒ Β βββ models |
| βΒ Β βΒ Β βββ layers -> Common layers |
| βΒ Β βΒ Β βββ vae -> VAE as image encoder |
| βΒ Β βΒ Β βββ text_encoder -> Text encoder |
| βΒ Β βΒ Β βΒ Β βββ classes.py -> Class id encoder (inference only) |
| βΒ Β βΒ Β βΒ Β βββ clip.py -> CLIP encoder |
| βΒ Β βΒ Β βΒ Β βββ t5.py -> T5 encoder |
| βΒ Β βΒ Β βββ dit |
| βΒ Β βΒ Β βββ latte |
| βΒ Β βΒ Β βββ pixart |
| βΒ Β βΒ Β βββ stdit -> Our STDiT related code |
| βΒ Β βββ schedulers -> Diffusion shedulers |
| βΒ Β βΒ Β βββ iddpm -> IDDPM for training and inference |
| βΒ Β β βββ dpms -> DPM-Solver for fast inference |
| β βββ utils |
| βββ tools -> Tools for data processing and more |
| ``` |
|
|
| ## Configs |
|
|
| Our config files follows [MMEgine](https://github.com/open-mmlab/mmengine). MMEngine will reads the config file (a `.py` file) and parse it into a dictionary-like object. |
|
|
| ```plaintext |
| Open-Sora |
| βββ configs -> Configs for training & inference |
| βββ opensora -> STDiT related configs |
| β βββ inference |
| β β βββ 16x256x256.py -> Sample videos 16 frames 256x256 |
| β β βββ 16x512x512.py -> Sample videos 16 frames 512x512 |
| β β βββ 64x512x512.py -> Sample videos 64 frames 512x512 |
| β βββ train |
| β βββ 16x256x256.py -> Train on videos 16 frames 256x256 |
| β βββ 16x256x256.py -> Train on videos 16 frames 256x256 |
| β βββ 64x512x512.py -> Train on videos 64 frames 512x512 |
| βββ dit -> DiT related configs |
| Β Β βΒ Β βββ inference |
| Β Β βΒ Β βΒ Β βββ 1x256x256-class.py -> Sample images with ckpts from DiT |
| Β Β βΒ Β βΒ Β βββ 1x256x256.py -> Sample images with clip condition |
| Β Β βΒ Β βΒ Β βββ 16x256x256.py -> Sample videos |
| Β Β βΒ Β βββ train |
| Β Β βΒ Β Β βββ 1x256x256.py -> Train on images with clip condition |
| Β Β βΒ Β Β Β βββ 16x256x256.py -> Train on videos |
| βββ latte -> Latte related configs |
| βββ pixart -> PixArt related configs |
| ``` |
|
|
| ## Inference config demos |
|
|
| To change the inference settings, you can directly modify the corresponding config file. Or you can pass arguments to overwrite the config file ([config_utils.py](/opensora/utils/config_utils.py)). To change sampling prompts, you should modify the `.txt` file passed to the `--prompt_path` argument. |
|
|
| ```plaintext |
| --prompt_path ./assets/texts/t2v_samples.txt -> prompt_path |
| --ckpt-path ./path/to/your/ckpt.pth -> model["from_pretrained"] |
| ``` |
|
|
| The explanation of each field is provided below. |
|
|
| ```python |
| # Define sampling size |
| num_frames = 64 # number of frames |
| fps = 24 // 2 # frames per second (divided by 2 for frame_interval=2) |
| image_size = (512, 512) # image size (height, width) |
| |
| # Define model |
| model = dict( |
| type="STDiT-XL/2", # Select model type (STDiT-XL/2, DiT-XL/2, etc.) |
| space_scale=1.0, # (Optional) Space positional encoding scale (new height / old height) |
| time_scale=2 / 3, # (Optional) Time positional encoding scale (new frame_interval / old frame_interval) |
| enable_flashattn=True, # (Optional) Speed up training and inference with flash attention |
| enable_layernorm_kernel=True, # (Optional) Speed up training and inference with fused kernel |
| from_pretrained="PRETRAINED_MODEL", # (Optional) Load from pretrained model |
| no_temporal_pos_emb=True, # (Optional) Disable temporal positional encoding (for image) |
| ) |
| vae = dict( |
| type="VideoAutoencoderKL", # Select VAE type |
| from_pretrained="stabilityai/sd-vae-ft-ema", # Load from pretrained VAE |
| micro_batch_size=128, # VAE with micro batch size to save memory |
| ) |
| text_encoder = dict( |
| type="t5", # Select text encoder type (t5, clip) |
| from_pretrained="./pretrained_models/t5_ckpts", # Load from pretrained text encoder |
| model_max_length=120, # Maximum length of input text |
| ) |
| scheduler = dict( |
| type="iddpm", # Select scheduler type (iddpm, dpm-solver) |
| num_sampling_steps=100, # Number of sampling steps |
| cfg_scale=7.0, # hyper-parameter for classifier-free diffusion |
| ) |
| dtype = "fp16" # Computation type (fp16, fp32, bf16) |
| |
| # Other settings |
| batch_size = 1 # batch size |
| seed = 42 # random seed |
| prompt_path = "./assets/texts/t2v_samples.txt" # path to prompt file |
| save_dir = "./samples" # path to save samples |
| ``` |
|
|
| ## Training config demos |
|
|
| ```python |
| # Define sampling size |
| num_frames = 64 |
| frame_interval = 2 # sample every 2 frames |
| image_size = (512, 512) |
| |
| # Define dataset |
| root = None # root path to the dataset |
| data_path = "CSV_PATH" # path to the csv file |
| use_image_transform = False # True if training on images |
| num_workers = 4 # number of workers for dataloader |
| |
| # Define acceleration |
| dtype = "bf16" # Computation type (fp16, bf16) |
| grad_checkpoint = True # Use gradient checkpointing |
| plugin = "zero2" # Plugin for distributed training (zero2, zero2-seq) |
| sp_size = 1 # Sequence parallelism size (1 for no sequence parallelism) |
| |
| # Define model |
| model = dict( |
| type="STDiT-XL/2", |
| space_scale=1.0, |
| time_scale=2 / 3, |
| from_pretrained="YOUR_PRETRAINED_MODEL", |
| enable_flashattn=True, # Enable flash attention |
| enable_layernorm_kernel=True, # Enable layernorm kernel |
| ) |
| vae = dict( |
| type="VideoAutoencoderKL", |
| from_pretrained="stabilityai/sd-vae-ft-ema", |
| micro_batch_size=128, |
| ) |
| text_encoder = dict( |
| type="t5", |
| from_pretrained="./pretrained_models/t5_ckpts", |
| model_max_length=120, |
| shardformer=True, # Enable shardformer for T5 acceleration |
| ) |
| scheduler = dict( |
| type="iddpm", |
| timestep_respacing="", # Default 1000 timesteps |
| ) |
| |
| # Others |
| seed = 42 |
| outputs = "outputs" # path to save checkpoints |
| wandb = False # Use wandb for logging |
| |
| epochs = 1000 # number of epochs (just large enough, kill when satisfied) |
| log_every = 10 |
| ckpt_every = 250 |
| load = None # path to resume training |
| |
| batch_size = 4 |
| lr = 2e-5 |
| grad_clip = 1.0 # gradient clipping |
| ``` |
|
|