From 5631a8cac4866c45cbbc2a22803a0c9f3042e5bf Mon Sep 17 00:00:00 2001 From: Bubbliiiing <47347516+bubbliiiing@users.noreply.github.com> Date: Fri, 8 Aug 2025 07:54:45 +0800 Subject: [PATCH] Update Wan2.2 Fun (#279) * Update Wan2.2 Fun --- README.md | 14 +- README_ja-JP.md | 14 +- README_zh-CN.md | 15 +- asset/8.png | Bin 0 -> 582611 bytes examples/wan2.2_fun/predict_i2v.py | 339 +++ examples/wan2.2_fun/predict_v2v_control.py | 365 +++ .../wan2.2_fun/predict_v2v_control_ref.py | 365 +++ scripts/wan2.1/train_reward_lora.py | 2 +- scripts/wan2.1_fun/train_reward_lora.py | 2 +- scripts/wan2.2_fun/train_control_lora.py | 2038 +++++++++++++++++ scripts/wan2.2_fun/train_control_lora.sh | 44 + scripts/wan2.2_fun/train_lora.py | 1879 +++++++++++++++ scripts/wan2.2_fun/train_lora.sh | 41 + videox_fun/models/cache_utils.py | 7 +- videox_fun/models/wan_vae.py | 2 +- videox_fun/pipeline/__init__.py | 25 +- .../{pipeline_wan_fun.py => pipeline_wan.py} | 10 +- videox_fun/pipeline/pipeline_wan2_2.py | 8 +- .../pipeline/pipeline_wan2_2_fun_control.py | 883 +++++++ ..._i2v.py => pipeline_wan2_2_fun_inpaint.py} | 14 +- .../pipeline/pipeline_wan_fun_control.py | 12 +- .../pipeline/pipeline_wan_fun_inpaint.py | 12 +- videox_fun/pipeline/pipeline_wan_phantom.py | 12 +- 23 files changed, 6044 insertions(+), 59 deletions(-) create mode 100644 asset/8.png create mode 100644 examples/wan2.2_fun/predict_i2v.py create mode 100644 examples/wan2.2_fun/predict_v2v_control.py create mode 100644 examples/wan2.2_fun/predict_v2v_control_ref.py create mode 100644 scripts/wan2.2_fun/train_control_lora.py create mode 100644 scripts/wan2.2_fun/train_control_lora.sh create mode 100644 scripts/wan2.2_fun/train_lora.py create mode 100644 scripts/wan2.2_fun/train_lora.sh rename videox_fun/pipeline/{pipeline_wan_fun.py => pipeline_wan.py} (98%) create mode 100644 videox_fun/pipeline/pipeline_wan2_2_fun_control.py rename videox_fun/pipeline/{pipeline_wan2_2_i2v.py => pipeline_wan2_2_fun_inpaint.py} (98%) diff --git a/README.md b/README.md index 3ae49f2..e51aee2 100755 --- a/README.md +++ b/README.md @@ -544,8 +544,14 @@ CogVideoX-Fun can be found in [Readme Train](scripts/cogvideox_fun/README_TRAIN. # Model zoo +## 1. Wan2.2-Fun +| Name | Hugging Face | Model Scope | Description | +|--|--|--|--|--| +| Wan2.2-Fun-A14B-InP | 64.0 GB | [🤗Link](https://huggingface.co/alibaba-pai/Wan2.2-Fun-A14B-InP) | [😄Link](https://modelscope.cn/models/PAI/Wan2.2-Fun-A14B-InP) | Wan2.2-Fun-14B text-to-video generation weights, trained at multiple resolutions, supports start-end image prediction. | +| Wan2.2-Fun-A14B-Control | 64.0 GB | [🤗Link](https://huggingface.co/alibaba-pai/Wan2.2-Fun-A14B-Control) | [😄Link](https://modelscope.cn/models/PAI/Wan2.2-Fun-A14B-Control)| Wan2.2-Fun-14B video control weights, supporting various control conditions such as Canny, Depth, Pose, MLSD, etc., and trajectory control. Supports multi-resolution (512, 768, 1024) video prediction at 81 frames, trained at 16 frames per second, with multilingual prediction support. | -## 1. Wan2.2 + +## 2. Wan2.2 | Name | Hugging Face | Model Scope | Description | |--|--|--|--| @@ -553,7 +559,7 @@ CogVideoX-Fun can be found in [Readme Train](scripts/cogvideox_fun/README_TRAIN. | Wan2.2-T2V-14B | [🤗Link](https://huggingface.co/Wan-AI/Wan2.2-T2V-A14B) | [😄Link](https://www.modelscope.cn/models/Wan-AI/Wan2.2-T2V-A14B) | Wan2.2-14B Text-to-Video Weights | | Wan2.2-I2V-A14B | [🤗Link](https://huggingface.co/Wan-AI/Wan2.2-I2V-A14B) | [😄Link](https://www.modelscope.cn/models/Wan-AI/Wan2.2-I2V-A14B) | Wan2.2-I2V-A14B Image-to-Video Weights | -## 2. Wan2.1-Fun +## 3. Wan2.1-Fun V1.1: | Name | Storage Size | Hugging Face | Model Scope | Description | @@ -573,7 +579,7 @@ V1.0: | Wan2.1-Fun-1.3B-Control | 19.0 GB | [🤗Link](https://huggingface.co/alibaba-pai/Wan2.1-Fun-1.3B-Control) | [😄Link](https://modelscope.cn/models/PAI/Wan2.1-Fun-1.3B-Control) | Wan2.1-Fun-1.3B video control weights, supporting various control conditions such as Canny, Depth, Pose, MLSD, etc., and trajectory control. Supports multi-resolution (512, 768, 1024) video prediction at 81 frames, trained at 16 frames per second, with multilingual prediction support. | | Wan2.1-Fun-14B-Control | 47.0 GB | [🤗Link](https://huggingface.co/alibaba-pai/Wan2.1-Fun-14B-Control) | [😄Link](https://modelscope.cn/models/PAI/Wan2.1-Fun-14B-Control) | Wan2.1-Fun-14B video control weights, supporting various control conditions such as Canny, Depth, Pose, MLSD, etc., and trajectory control. Supports multi-resolution (512, 768, 1024) video prediction at 81 frames, trained at 16 frames per second, with multilingual prediction support. | -## 3. Wan2.1 +## 4. Wan2.1 | Name | Hugging Face | Model Scope | Description | |--|--|--|--| @@ -582,7 +588,7 @@ V1.0: | Wan2.1-I2V-14B-480P | [🤗Link](https://huggingface.co/Wan-AI/Wan2.1-I2V-14B-480P) | [😄Link](https://www.modelscope.cn/models/Wan-AI/Wan2.1-I2V-14B-480P) | Wanxiang 2.1-14B-480P image-to-video weights | | Wan2.1-I2V-14B-720P| [🤗Link](https://huggingface.co/Wan-AI/Wan2.1-I2V-14B-720P) | [😄Link](https://www.modelscope.cn/models/Wan-AI/Wan2.1-I2V-14B-720P) | Wanxiang 2.1-14B-720P image-to-video weights | -## 4. CogVideoX-Fun +## 5. CogVideoX-Fun V1.5: diff --git a/README_ja-JP.md b/README_ja-JP.md index faf5c95..4a73f99 100755 --- a/README_ja-JP.md +++ b/README_ja-JP.md @@ -544,7 +544,13 @@ CogVideoX-Funは[Readme Train](scripts/cogvideox_fun/README_TRAIN.md)と[Readme # モデルの場所 -## 1. Wan2.2 +## 1. Wan2.2-Fun +| 名前 | ストレージ容量 | Hugging Face | Model Scope | 説明 | +|------|----------------|------------|-------------|------| +| Wan2.2-Fun-A14B-InP | 64.0 GB | [🤗Link](https://huggingface.co/alibaba-pai/Wan2.2-Fun-A14B-InP) | [😄Link](https://modelscope.cn/models/PAI/Wan2.2-Fun-A14B-InP) | Wan2.2-Fun-14Bのテキスト・画像から動画を生成するモデルの重み。複数の解像度で学習されており、動画の最初と最後のフレームの予測をサポートしています。 | +| Wan2.2-Fun-A14B-Control | 64.0 GB | [🤗Link](https://huggingface.co/alibaba-pai/Wan2.2-Fun-A14B-Control) | [😄Link](https://modelscope.cn/models/PAI/Wan2.2-Fun-A14B-Control) | Wan2.2-Fun-14Bの動画制御用重み。Canny、Depth、Pose、MLSDなどのさまざまな制御条件に対応しており、軌跡制御もサポートしています。512、768、1024の複数解像度での動画生成が可能で、81フレーム、16fpsで学習されています。多言語対応の予測もサポートしています。 | + +## 2. Wan2.2 | モデル名 | Hugging Face | Model Scope | 説明 | |--|--|--|--| @@ -552,7 +558,7 @@ CogVideoX-Funは[Readme Train](scripts/cogvideox_fun/README_TRAIN.md)と[Readme | Wan2.2-T2V-A14B | [🤗リンク](https://huggingface.co/Wan-AI/Wan2.2-T2V-A14B) | [😄リンク](https://www.modelscope.cn/models/Wan-AI/Wan2.2-T2V-A14B) | 万象2.2-14B テキストから動画生成重み | | Wan2.2-I2V-A14B | [🤗リンク](https://huggingface.co/Wan-AI/Wan2.2-I2V-A14B) | [😄リンク](https://www.modelscope.cn/models/Wan-AI/Wan2.2-I2V-A14B) | 万象2.2-14B 画像から動画生成重み | -## 2. Wan2.1-Fun +## 3. Wan2.1-Fun V1.1: | 名称 | ストレージ容量 | Hugging Face | Model Scope | 説明 | @@ -573,7 +579,7 @@ V1.0: | Wan2.1-Fun-1.3B-Control | 19.0 GB | [🤗Link](https://huggingface.co/alibaba-pai/Wan2.1-Fun-1.3B-Control) | [😄Link](https://modelscope.cn/models/PAI/Wan2.1-Fun-1.3B-Control) | Wan2.1-Fun-1.3Bのビデオ制御ウェイト。Canny、Depth、Pose、MLSDなどの異なる制御条件をサポートし、トラジェクトリ制御も利用可能。512、768、1024のマルチ解像度でのビデオ予測をサポートし、81フレーム(1秒間に16フレーム)でトレーニング済みで、多言語予測にも対応しています。 | | Wan2.1-Fun-14B-Control | 47.0 GB | [🤗Link](https://huggingface.co/alibaba-pai/Wan2.1-Fun-14B-Control) | [😄Link](https://modelscope.cn/models/PAI/Wan2.1-Fun-14B-Control) | Wan2.1-Fun-14Bのビデオ制御ウェイト。Canny、Depth、Pose、MLSDなどの異なる制御条件をサポートし、トラジェクトリ制御も利用可能。512、768、1024のマルチ解像度でのビデオ予測をサポートし、81フレーム(1秒間に16フレーム)でトレーニング済みで、多言語予測にも対応しています。 | -## 3. Wan2.1 +## 4. Wan2.1 | 名称 | Hugging Face | Model Scope | 説明 | |--|--|--|--| @@ -582,7 +588,7 @@ V1.0: | Wan2.1-I2V-14B-480P | [🤗Link](https://huggingface.co/Wan-AI/Wan2.1-I2V-14B-480P) | [😄Link](https://www.modelscope.cn/models/Wan-AI/Wan2.1-I2V-14B-480P) | 万象2.1-14B-480Pの画像から動画生成する重み | | Wan2.1-I2V-14B-720P| [🤗Link](https://huggingface.co/Wan-AI/Wan2.1-I2V-14B-720P) | [😄Link](https://www.modelscope.cn/models/Wan-AI/Wan2.1-I2V-14B-720P) | 万象2.1-14B-720Pの画像から動画生成する重み | -## 4. CogVideoX-Fun +## 5. CogVideoX-Fun V1.5: diff --git a/README_zh-CN.md b/README_zh-CN.md index 93e4992..cf56d8f 100755 --- a/README_zh-CN.md +++ b/README_zh-CN.md @@ -534,7 +534,14 @@ CogVideoX-Fun可以查看[Readme Train](scripts/cogvideox_fun/README_TRAIN.md) # 模型地址 -## 1. Wan2.2 +## 1.Wan2.2-Fun + +| 名称 | 存储空间 | Hugging Face | Model Scope | 描述 | +|--|--|--|--|--| +| Wan2.2-Fun-A14B-InP | 64.0 GB | [🤗Link](https://huggingface.co/alibaba-pai/Wan2.2-Fun-A14B-InP) | [😄Link](https://modelscope.cn/models/PAI/Wan2.2-Fun-A14B-InP) | Wan2.2-Fun-14B文图生视频权重,以多分辨率训练,支持首尾图预测。 | +| Wan2.2-Fun-A14B-Control | 64.0 GB | [🤗Link](https://huggingface.co/alibaba-pai/Wan2.2-Fun-A14B-Control) | [😄Link](https://modelscope.cn/models/PAI/Wan2.2-Fun-A14B-Control)| Wan2.2-Fun-14B视频控制权重,支持不同的控制条件,如Canny、Depth、Pose、MLSD等,同时支持使用轨迹控制。支持多分辨率(512,768,1024)的视频预测,支持多分辨率(512,768,1024)的视频预测,以81帧、每秒16帧进行训练,支持多语言预测 | + +## 2. Wan2.2 | 名称 | Hugging Face | Model Scope | 描述 | |--|--|--|--| @@ -542,7 +549,7 @@ CogVideoX-Fun可以查看[Readme Train](scripts/cogvideox_fun/README_TRAIN.md) | Wan2.2-T2V-A14B | [🤗Link](https://huggingface.co/Wan-AI/Wan2.2-T2V-A14B) | [😄Link](https://www.modelscope.cn/models/Wan-AI/Wan2.2-T2V-A14B) | 万象2.2-14B文生视频权重 | | Wan2.2-I2V-A14B | [🤗Link](https://huggingface.co/Wan-AI/Wan2.2-I2V-A14B) | [😄Link](https://www.modelscope.cn/models/Wan-AI/Wan2.2-I2V-A14B) | 万象2.2-14B图生视频权重 | -## 2. Wan2.1-Fun +## 3. Wan2.1-Fun V1.1: | 名称 | 存储空间 | Hugging Face | Model Scope | 描述 | @@ -562,7 +569,7 @@ V1.0: | Wan2.1-Fun-1.3B-Control | 19.0 GB | [🤗Link](https://huggingface.co/alibaba-pai/Wan2.1-Fun-1.3B-Control) | [😄Link](https://modelscope.cn/models/PAI/Wan2.1-Fun-1.3B-Control)| Wan2.1-Fun-1.3B视频控制权重,支持不同的控制条件,如Canny、Depth、Pose、MLSD等,同时支持使用轨迹控制。支持多分辨率(512,768,1024)的视频预测,支持多分辨率(512,768,1024)的视频预测,以81帧、每秒16帧进行训练,支持多语言预测 | | Wan2.1-Fun-14B-Control | 47.0 GB | [🤗Link](https://huggingface.co/alibaba-pai/Wan2.1-Fun-14B-Control) | [😄Link](https://modelscope.cn/models/PAI/Wan2.1-Fun-14B-Control)| Wan2.1-Fun-14B视频控制权重,支持不同的控制条件,如Canny、Depth、Pose、MLSD等,同时支持使用轨迹控制。支持多分辨率(512,768,1024)的视频预测,支持多分辨率(512,768,1024)的视频预测,以81帧、每秒16帧进行训练,支持多语言预测 | -## 3. Wan2.1 +## 4. Wan2.1 | 名称 | Hugging Face | Model Scope | 描述 | |--|--|--|--| @@ -571,7 +578,7 @@ V1.0: | Wan2.1-I2V-14B-480P | [🤗Link](https://huggingface.co/Wan-AI/Wan2.1-I2V-14B-480P) | [😄Link](https://www.modelscope.cn/models/Wan-AI/Wan2.1-I2V-14B-480P) | 万象2.1-14B-480P图生视频权重 | | Wan2.1-I2V-14B-720P| [🤗Link](https://huggingface.co/Wan-AI/Wan2.1-I2V-14B-720P) | [😄Link](https://www.modelscope.cn/models/Wan-AI/Wan2.1-I2V-14B-720P) | 万象2.1-14B-720P图生视频权重 | -## 4. CogVideoX-Fun +## 5. CogVideoX-Fun V1.5: diff --git a/asset/8.png b/asset/8.png new file mode 100644 index 0000000000000000000000000000000000000000..5b8fbb85ec0fbc6f99e12a3536433114e417eddc GIT binary patch literal 582611 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

GUgZs+rc`V=%R)A`Wgv(#e6XUt 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 literal 0 HcmV?d00001 diff --git a/examples/wan2.2_fun/predict_i2v.py b/examples/wan2.2_fun/predict_i2v.py new file mode 100644 index 0000000..d9bafdc --- /dev/null +++ b/examples/wan2.2_fun/predict_i2v.py @@ -0,0 +1,339 @@ +import os +import sys + +import numpy as np +import torch +from diffusers import FlowMatchEulerDiscreteScheduler +from omegaconf import OmegaConf +from PIL import Image + +current_file_path = os.path.abspath(__file__) +project_roots = [os.path.dirname(current_file_path), os.path.dirname(os.path.dirname(current_file_path)), os.path.dirname(os.path.dirname(os.path.dirname(current_file_path)))] +for project_root in project_roots: + sys.path.insert(0, project_root) if project_root not in sys.path else None + +from videox_fun.dist import set_multi_gpus_devices, shard_model +from videox_fun.models import (AutoencoderKLWan, AutoTokenizer, CLIPModel, + WanT5EncoderModel, Wan2_2Transformer3DModel) +from videox_fun.models.cache_utils import get_teacache_coefficients +from videox_fun.pipeline import Wan2_2I2VPipeline +from videox_fun.utils.fp8_optimization import (convert_model_weight_to_float8, replace_parameters_by_name, + convert_weight_dtype_wrapper) +from videox_fun.utils.lora_utils import merge_lora, unmerge_lora +from videox_fun.utils.utils import (filter_kwargs, get_image_to_video_latent, + save_videos_grid) +from videox_fun.utils.fm_solvers import FlowDPMSolverMultistepScheduler +from videox_fun.utils.fm_solvers_unipc import FlowUniPCMultistepScheduler + +# GPU memory mode, which can be choosen in [model_full_load, model_full_load_and_qfloat8, model_cpu_offload, model_cpu_offload_and_qfloat8, sequential_cpu_offload]. +# model_full_load means that the entire model will be moved to the GPU. +# +# model_full_load_and_qfloat8 means that the entire model will be moved to the GPU, +# and the transformer model has been quantized to float8, which can save more GPU memory. +# +# model_cpu_offload means that the entire model will be moved to the CPU after use, which can save some GPU memory. +# +# model_cpu_offload_and_qfloat8 indicates that the entire model will be moved to the CPU after use, +# and the transformer model has been quantized to float8, which can save more GPU memory. +# +# sequential_cpu_offload means that each layer of the model will be moved to the CPU after use, +# resulting in slower speeds but saving a large amount of GPU memory. +GPU_memory_mode = "sequential_cpu_offload" +# Multi GPUs config +# Please ensure that the product of ulysses_degree and ring_degree equals the number of GPUs used. +# For example, if you are using 8 GPUs, you can set ulysses_degree = 2 and ring_degree = 4. +# If you are using 1 GPU, you can set ulysses_degree = 1 and ring_degree = 1. +ulysses_degree = 1 +ring_degree = 1 +# Use FSDP to save more GPU memory in multi gpus. +fsdp_dit = False +fsdp_text_encoder = True +# Compile will give a speedup in fixed resolution and need a little GPU memory. +# The compile_dit is not compatible with the fsdp_dit and sequential_cpu_offload. +compile_dit = False + +# TeaCache config +enable_teacache = True +# Recommended to be set between 0.05 and 0.30. A larger threshold can cache more steps, speeding up the inference process, +# but it may cause slight differences between the generated content and the original content. +# # --------------------------------------------------------------------------------------------------- # +# | Model Name | threshold | Model Name | threshold | +# | Wan2.2-T2V-A14B | 0.10~0.15 | Wan2.2-I2V-A14B | 0.15~0.20 | +# | Wan2.2-Fun-A14B-* | 0.15~0.20 | +# # --------------------------------------------------------------------------------------------------- # +teacache_threshold = 0.10 +# The number of steps to skip TeaCache at the beginning of the inference process, which can +# reduce the impact of TeaCache on generated video quality. +num_skip_start_steps = 5 +# Whether to offload TeaCache tensors to cpu to save a little bit of GPU memory. +teacache_offload = False + +# Skip some cfg steps in inference +# Recommended to be set between 0.00 and 0.25 +cfg_skip_ratio = 0 + +# Riflex config +enable_riflex = False +# Index of intrinsic frequency +riflex_k = 6 + +# Config and model path +config_path = "config/wan2.2/wan_civitai_i2v.yaml" +# model path +model_name = "models/Diffusion_Transformer/Wan2.2-Fun-A14B-InP" + +# Choose the sampler in "Flow", "Flow_Unipc", "Flow_DPM++" +sampler_name = "Flow" +# [NOTE]: Noise schedule shift parameter. Affects temporal dynamics. +# Used when the sampler is in "Flow_Unipc", "Flow_DPM++". +shift = 5 + +# Load pretrained model if need +# The transformer_path is used for low noise model, the transformer_high_path is used for high noise model. +transformer_path = None +transformer_high_path = None +vae_path = None +# Load lora model if need +# The lora_path is used for low noise model, the lora_high_path is used for high noise model. +lora_path = None +lora_high_path = None + +# Other params +sample_size = [480, 832] +video_length = 81 +fps = 16 + +# Use torch.float16 if GPU does not support torch.bfloat16 +# ome graphics cards, such as v100, 2080ti, do not support torch.bfloat16 +weight_dtype = torch.bfloat16 +# If you want to generate from text, please set the validation_image_start = None and validation_image_end = None +validation_image_start = "asset/1.png" +validation_image_end = None + +# 使用更长的neg prompt如"模糊,突变,变形,失真,画面暗,文本字幕,画面固定,连环画,漫画,线稿,没有主体。",可以增加稳定性 +# 在neg prompt中添加"安静,固定"等词语可以增加动态性。 +prompt = "一只棕色的狗摇着头,坐在舒适房间里的浅色沙发上。在狗的后面,架子上有一幅镶框的画,周围是粉红色的花朵。房间里柔和温暖的灯光营造出舒适的氛围。" +negative_prompt = "色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" +guidance_scale = 6.0 +seed = 43 +num_inference_steps = 50 +# The lora_weight is used for low noise model, the lora_high_weight is used for high noise model. +lora_weight = 0.55 +lora_high_weight = 0.55 +save_path = "samples/wan-fun-videos-i2v" + +device = set_multi_gpus_devices(ulysses_degree, ring_degree) +config = OmegaConf.load(config_path) +boundary = config['transformer_additional_kwargs'].get('boundary', 0.900) + +transformer = Wan2_2Transformer3DModel.from_pretrained( + os.path.join(model_name, config['transformer_additional_kwargs'].get('transformer_low_noise_model_subpath', 'transformer')), + transformer_additional_kwargs=OmegaConf.to_container(config['transformer_additional_kwargs']), + low_cpu_mem_usage=True, + torch_dtype=weight_dtype, +) + +transformer_2 = Wan2_2Transformer3DModel.from_pretrained( + os.path.join(model_name, config['transformer_additional_kwargs'].get('transformer_high_noise_model_subpath', 'transformer')), + transformer_additional_kwargs=OmegaConf.to_container(config['transformer_additional_kwargs']), + low_cpu_mem_usage=True, + torch_dtype=weight_dtype, +) + +if transformer_path is not None: + print(f"From checkpoint: {transformer_path}") + if transformer_path.endswith("safetensors"): + from safetensors.torch import load_file, safe_open + state_dict = load_file(transformer_path) + else: + state_dict = torch.load(transformer_path, map_location="cpu") + state_dict = state_dict["state_dict"] if "state_dict" in state_dict else state_dict + + m, u = transformer.load_state_dict(state_dict, strict=False) + print(f"missing keys: {len(m)}, unexpected keys: {len(u)}") + +if transformer_high_path is not None: + print(f"From checkpoint: {transformer_high_path}") + if transformer_high_path.endswith("safetensors"): + from safetensors.torch import load_file, safe_open + state_dict = load_file(transformer_high_path) + else: + state_dict = torch.load(transformer_high_path, map_location="cpu") + state_dict = state_dict["state_dict"] if "state_dict" in state_dict else state_dict + + m, u = transformer_2.load_state_dict(state_dict, strict=False) + print(f"missing keys: {len(m)}, unexpected keys: {len(u)}") + +# Get Vae +Choosen_AutoencoderKL = { + "AutoencoderKLWan": AutoencoderKLWan, +}[config['vae_kwargs'].get('vae_type', 'AutoencoderKLWan')] +vae = Choosen_AutoencoderKL.from_pretrained( + os.path.join(model_name, config['vae_kwargs'].get('vae_subpath', 'vae')), + additional_kwargs=OmegaConf.to_container(config['vae_kwargs']), +).to(weight_dtype) + +if vae_path is not None: + print(f"From checkpoint: {vae_path}") + if vae_path.endswith("safetensors"): + from safetensors.torch import load_file, safe_open + state_dict = load_file(vae_path) + else: + state_dict = torch.load(vae_path, map_location="cpu") + state_dict = state_dict["state_dict"] if "state_dict" in state_dict else state_dict + + m, u = vae.load_state_dict(state_dict, strict=False) + print(f"missing keys: {len(m)}, unexpected keys: {len(u)}") + +# Get Tokenizer +tokenizer = AutoTokenizer.from_pretrained( + os.path.join(model_name, config['text_encoder_kwargs'].get('tokenizer_subpath', 'tokenizer')), +) + +# Get Text encoder +text_encoder = WanT5EncoderModel.from_pretrained( + os.path.join(model_name, config['text_encoder_kwargs'].get('text_encoder_subpath', 'text_encoder')), + additional_kwargs=OmegaConf.to_container(config['text_encoder_kwargs']), + low_cpu_mem_usage=True, + torch_dtype=weight_dtype, +) +text_encoder = text_encoder.eval() + +# Get Scheduler +Choosen_Scheduler = scheduler_dict = { + "Flow": FlowMatchEulerDiscreteScheduler, + "Flow_Unipc": FlowUniPCMultistepScheduler, + "Flow_DPM++": FlowDPMSolverMultistepScheduler, +}[sampler_name] +if sampler_name == "Flow_Unipc" or sampler_name == "Flow_DPM++": + config['scheduler_kwargs']['shift'] = 1 +scheduler = Choosen_Scheduler( + **filter_kwargs(Choosen_Scheduler, OmegaConf.to_container(config['scheduler_kwargs'])) +) + +# Get Pipeline +pipeline = Wan2_2I2VPipeline( + transformer=transformer, + transformer_2=transformer_2, + vae=vae, + tokenizer=tokenizer, + text_encoder=text_encoder, + scheduler=scheduler, +) +if ulysses_degree > 1 or ring_degree > 1: + from functools import partial + transformer.enable_multi_gpus_inference() + transformer_2.enable_multi_gpus_inference() + if fsdp_dit: + shard_fn = partial(shard_model, device_id=device, param_dtype=weight_dtype) + pipeline.transformer = shard_fn(pipeline.transformer) + pipeline.transformer_2 = shard_fn(pipeline.transformer_2) + print("Add FSDP DIT") + if fsdp_text_encoder: + shard_fn = partial(shard_model, device_id=device, param_dtype=weight_dtype) + pipeline.text_encoder = shard_fn(pipeline.text_encoder) + print("Add FSDP TEXT ENCODER") + +if compile_dit: + for i in range(len(pipeline.transformer.blocks)): + pipeline.transformer.blocks[i] = torch.compile(pipeline.transformer.blocks[i]) + for i in range(len(pipeline.transformer_2.blocks)): + pipeline.transformer_2.blocks[i] = torch.compile(pipeline.transformer_2.blocks[i]) + print("Add Compile") + +if GPU_memory_mode == "sequential_cpu_offload": + replace_parameters_by_name(transformer, ["modulation",], device=device) + replace_parameters_by_name(transformer_2, ["modulation",], device=device) + transformer.freqs = transformer.freqs.to(device=device) + transformer_2.freqs = transformer_2.freqs.to(device=device) + pipeline.enable_sequential_cpu_offload(device=device) +elif GPU_memory_mode == "model_cpu_offload_and_qfloat8": + convert_model_weight_to_float8(transformer, exclude_module_name=["modulation",], device=device) + convert_model_weight_to_float8(transformer_2, exclude_module_name=["modulation",], device=device) + convert_weight_dtype_wrapper(transformer, weight_dtype) + convert_weight_dtype_wrapper(transformer_2, weight_dtype) + pipeline.enable_model_cpu_offload(device=device) +elif GPU_memory_mode == "model_cpu_offload": + pipeline.enable_model_cpu_offload(device=device) +elif GPU_memory_mode == "model_full_load_and_qfloat8": + convert_model_weight_to_float8(transformer, exclude_module_name=["modulation",], device=device) + convert_model_weight_to_float8(transformer_2, exclude_module_name=["modulation",], device=device) + convert_weight_dtype_wrapper(transformer, weight_dtype) + convert_weight_dtype_wrapper(transformer_2, weight_dtype) + pipeline.to(device=device) +else: + pipeline.to(device=device) + +coefficients = get_teacache_coefficients(model_name) if enable_teacache else None +if coefficients is not None: + print(f"Enable TeaCache with threshold {teacache_threshold} and skip the first {num_skip_start_steps} steps.") + pipeline.transformer.enable_teacache( + coefficients, num_inference_steps, teacache_threshold, num_skip_start_steps=num_skip_start_steps, offload=teacache_offload + ) + pipeline.transformer_2.share_teacache(transformer=pipeline.transformer) + +if cfg_skip_ratio is not None: + print(f"Enable cfg_skip_ratio {cfg_skip_ratio}.") + pipeline.transformer.enable_cfg_skip(cfg_skip_ratio, num_inference_steps) + pipeline.transformer_2.share_cfg_skip(transformer=pipeline.transformer) + +generator = torch.Generator(device=device).manual_seed(seed) + +if lora_path is not None: + pipeline = merge_lora(pipeline, lora_path, lora_weight, device=device) + pipeline = merge_lora(pipeline, lora_high_path, lora_high_weight, device=device, sub_transformer_name="transformer_2") + +with torch.no_grad(): + video_length = int((video_length - 1) // vae.config.temporal_compression_ratio * vae.config.temporal_compression_ratio) + 1 if video_length != 1 else 1 + latent_frames = (video_length - 1) // vae.config.temporal_compression_ratio + 1 + + if enable_riflex: + pipeline.transformer.enable_riflex(k = riflex_k, L_test = latent_frames) + pipeline.transformer_2.enable_riflex(k = riflex_k, L_test = latent_frames) + + input_video, input_video_mask, clip_image = get_image_to_video_latent(validation_image_start, validation_image_end, video_length=video_length, sample_size=sample_size) + + sample = pipeline( + prompt, + num_frames = video_length, + negative_prompt = negative_prompt, + height = sample_size[0], + width = sample_size[1], + generator = generator, + guidance_scale = guidance_scale, + num_inference_steps = num_inference_steps, + boundary = boundary, + + video = input_video, + mask_video = input_video_mask, + shift = shift, + ).videos + +if lora_path is not None: + pipeline = unmerge_lora(pipeline, lora_path, lora_weight, device=device) + pipeline = unmerge_lora(pipeline, lora_high_path, lora_high_weight, device=device, sub_transformer_name="transformer_2") + +def save_results(): + if not os.path.exists(save_path): + os.makedirs(save_path, exist_ok=True) + + index = len([path for path in os.listdir(save_path)]) + 1 + prefix = str(index).zfill(8) + if video_length == 1: + video_path = os.path.join(save_path, prefix + ".png") + + image = sample[0, :, 0] + image = image.transpose(0, 1).transpose(1, 2) + image = (image * 255).numpy().astype(np.uint8) + image = Image.fromarray(image) + image.save(video_path) + else: + video_path = os.path.join(save_path, prefix + ".mp4") + save_videos_grid(sample, video_path, fps=fps) + +if ulysses_degree * ring_degree > 1: + import torch.distributed as dist + if dist.get_rank() == 0: + save_results() +else: + save_results() \ No newline at end of file diff --git a/examples/wan2.2_fun/predict_v2v_control.py b/examples/wan2.2_fun/predict_v2v_control.py new file mode 100644 index 0000000..f24c953 --- /dev/null +++ b/examples/wan2.2_fun/predict_v2v_control.py @@ -0,0 +1,365 @@ +import os +import sys + +import numpy as np +import torch +from diffusers import FlowMatchEulerDiscreteScheduler +from omegaconf import OmegaConf +from PIL import Image +from transformers import AutoTokenizer + +current_file_path = os.path.abspath(__file__) +project_roots = [os.path.dirname(current_file_path), os.path.dirname(os.path.dirname(current_file_path)), os.path.dirname(os.path.dirname(os.path.dirname(current_file_path)))] +for project_root in project_roots: + sys.path.insert(0, project_root) if project_root not in sys.path else None + +from videox_fun.dist import set_multi_gpus_devices, shard_model +from videox_fun.models import (AutoencoderKLWan, AutoTokenizer, CLIPModel, + WanT5EncoderModel, Wan2_2Transformer3DModel) +from videox_fun.data.dataset_image_video import process_pose_file +from videox_fun.models.cache_utils import get_teacache_coefficients +from videox_fun.pipeline import Wan2_2FunControlPipeline, WanPipeline +from videox_fun.utils.fp8_optimization import (convert_model_weight_to_float8, + convert_weight_dtype_wrapper, + replace_parameters_by_name) +from videox_fun.utils.lora_utils import merge_lora, unmerge_lora +from videox_fun.utils.utils import (filter_kwargs, get_image_latent, get_image_to_video_latent, + get_video_to_video_latent, + save_videos_grid) +from videox_fun.utils.fm_solvers import FlowDPMSolverMultistepScheduler +from videox_fun.utils.fm_solvers_unipc import FlowUniPCMultistepScheduler + +# GPU memory mode, which can be choosen in [model_full_load, model_cpu_offload_and_qfloat8, model_cpu_offload, model_cpu_offload_and_qfloat8, sequential_cpu_offload]. +# model_full_load means that the entire model will be moved to the GPU. +# +# model_full_load_and_qfloat8 means that the entire model will be moved to the GPU, +# and the transformer model has been quantized to float8, which can save more GPU memory. +# +# model_cpu_offload means that the entire model will be moved to the CPU after use, which can save some GPU memory. +# +# model_cpu_offload_and_qfloat8 indicates that the entire model will be moved to the CPU after use, +# and the transformer model has been quantized to float8, which can save more GPU memory. +# +# sequential_cpu_offload means that each layer of the model will be moved to the CPU after use, +# resulting in slower speeds but saving a large amount of GPU memory. +GPU_memory_mode = "sequential_cpu_offload" +# Multi GPUs config +# Please ensure that the product of ulysses_degree and ring_degree equals the number of GPUs used. +# For example, if you are using 8 GPUs, you can set ulysses_degree = 2 and ring_degree = 4. +# If you are using 1 GPU, you can set ulysses_degree = 1 and ring_degree = 1. +ulysses_degree = 1 +ring_degree = 1 +# Use FSDP to save more GPU memory in multi gpus. +fsdp_dit = False +fsdp_text_encoder = True +# Compile will give a speedup in fixed resolution and need a little GPU memory. +# The compile_dit is not compatible with the fsdp_dit and sequential_cpu_offload. +compile_dit = False + +# Support TeaCache. +enable_teacache = True +# Recommended to be set between 0.05 and 0.30. A larger threshold can cache more steps, speeding up the inference process, +# but it may cause slight differences between the generated content and the original content. +# # --------------------------------------------------------------------------------------------------- # +# | Model Name | threshold | Model Name | threshold | +# | Wan2.2-T2V-A14B | 0.10~0.15 | Wan2.2-I2V-A14B | 0.15~0.20 | +# | Wan2.2-Fun-A14B-* | 0.15~0.20 | +# # --------------------------------------------------------------------------------------------------- # +teacache_threshold = 0.10 +# The number of steps to skip TeaCache at the beginning of the inference process, which can +# reduce the impact of TeaCache on generated video quality. +num_skip_start_steps = 5 +# Whether to offload TeaCache tensors to cpu to save a little bit of GPU memory. +teacache_offload = False + +# Skip some cfg steps in inference +# Recommended to be set between 0.00 and 0.25 +cfg_skip_ratio = 0 + +# Riflex config +enable_riflex = False +# Index of intrinsic frequency +riflex_k = 6 + +# Config and model path +config_path = "config/wan2.2/wan_civitai_i2v.yaml" +# model path +model_name = "models/Diffusion_Transformer/Wan2.2-Fun-A14B-Control" + +# Choose the sampler in "Flow", "Flow_Unipc", "Flow_DPM++" +sampler_name = "Flow" +# [NOTE]: Noise schedule shift parameter. Affects temporal dynamics. +# Used when the sampler is in "Flow_Unipc", "Flow_DPM++". +# If you want to generate a 480p video, it is recommended to set the shift value to 3.0. +# If you want to generate a 720p video, it is recommended to set the shift value to 5.0. +shift = 5 + +# Load pretrained model if need +# The transformer_path is used for low noise model, the transformer_high_path is used for high noise model. +transformer_path = None +transformer_high_path = None +vae_path = None +# Load lora model if need +# The lora_path is used for low noise model, the lora_high_path is used for high noise model. +lora_path = None +lora_high_path = None + +# Other params +sample_size = [832, 480] +video_length = 81 +fps = 16 + +# Use torch.float16 if GPU does not support torch.bfloat16 +# ome graphics cards, such as v100, 2080ti, do not support torch.bfloat16 +weight_dtype = torch.bfloat16 +control_video = "asset/pose.mp4" +control_camera_txt = None +start_image = None +end_image = None +ref_image = None + +# 使用更长的neg prompt如"模糊,突变,变形,失真,画面暗,文本字幕,画面固定,连环画,漫画,线稿,没有主体。",可以增加稳定性 +# 在neg prompt中添加"安静,固定"等词语可以增加动态性。 +prompt = "一位年轻女子站在阳光明媚的海岸线上,身穿深蓝色背心与清爽的白色衬衫,外搭一条简洁的白色围裙,围裙在轻拂的海风中微微飘动。她拥有一头鲜艳的紫色长发,在风中轻盈舞动,发间系着一个精致的黑色蝴蝶结,与身后柔和的蔚蓝天空形成鲜明对比。她面容清秀,眉目精致,透着一股甜美的青春气息;神情柔和,略带羞涩,目光静静地凝望着远方的地平线,双手自然交叠于身前,仿佛沉浸在思绪之中。在她身后,是辽阔无垠、波光粼粼的大海,阳光洒在海面上,映出温暖的金色光晕。" +negative_prompt = "色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" + +# Using longer neg prompt such as "Blurring, mutation, deformation, distortion, dark and solid, comics, text subtitles, line art." can increase stability +# Adding words such as "quiet, solid" to the neg prompt can increase dynamism. +# prompt = "A young woman with beautiful, clear eyes and blonde hair stands in the forest, wearing a white dress and a crown. Her expression is serene, reminiscent of a movie star, with fair and youthful skin. Her brown long hair flows in the wind. The video quality is very high, with a clear view. High quality, masterpiece, best quality, high resolution, ultra-fine, fantastical." +# negative_prompt = "Twisted body, limb deformities, text captions, comic, static, ugly, error, messy code." +guidance_scale = 6.0 +seed = 42 +num_inference_steps = 50 +# The lora_weight is used for low noise model, the lora_high_weight is used for high noise model. +lora_weight = 0.55 +lora_high_weight = 0.55 +save_path = "samples/wan-videos-fun-control" + +device = set_multi_gpus_devices(ulysses_degree, ring_degree) +config = OmegaConf.load(config_path) +boundary = config['transformer_additional_kwargs'].get('boundary', 0.875) + +transformer = Wan2_2Transformer3DModel.from_pretrained( + os.path.join(model_name, config['transformer_additional_kwargs'].get('transformer_low_noise_model_subpath', 'transformer')), + transformer_additional_kwargs=OmegaConf.to_container(config['transformer_additional_kwargs']), + low_cpu_mem_usage=True, + torch_dtype=weight_dtype, +) + +transformer_2 = Wan2_2Transformer3DModel.from_pretrained( + os.path.join(model_name, config['transformer_additional_kwargs'].get('transformer_high_noise_model_subpath', 'transformer')), + transformer_additional_kwargs=OmegaConf.to_container(config['transformer_additional_kwargs']), + low_cpu_mem_usage=True, + torch_dtype=weight_dtype, +) + +if transformer_path is not None: + print(f"From checkpoint: {transformer_path}") + if transformer_path.endswith("safetensors"): + from safetensors.torch import load_file, safe_open + state_dict = load_file(transformer_path) + else: + state_dict = torch.load(transformer_path, map_location="cpu") + state_dict = state_dict["state_dict"] if "state_dict" in state_dict else state_dict + + m, u = transformer.load_state_dict(state_dict, strict=False) + print(f"missing keys: {len(m)}, unexpected keys: {len(u)}") + +if transformer_high_path is not None: + print(f"From checkpoint: {transformer_high_path}") + if transformer_high_path.endswith("safetensors"): + from safetensors.torch import load_file, safe_open + state_dict = load_file(transformer_high_path) + else: + state_dict = torch.load(transformer_high_path, map_location="cpu") + state_dict = state_dict["state_dict"] if "state_dict" in state_dict else state_dict + + m, u = transformer_2.load_state_dict(state_dict, strict=False) + print(f"missing keys: {len(m)}, unexpected keys: {len(u)}") + +# Get Vae +Choosen_AutoencoderKL = { + "AutoencoderKLWan": AutoencoderKLWan, +}[config['vae_kwargs'].get('vae_type', 'AutoencoderKLWan')] +vae = Choosen_AutoencoderKL.from_pretrained( + os.path.join(model_name, config['vae_kwargs'].get('vae_subpath', 'vae')), + additional_kwargs=OmegaConf.to_container(config['vae_kwargs']), +).to(weight_dtype) + +if vae_path is not None: + print(f"From checkpoint: {vae_path}") + if vae_path.endswith("safetensors"): + from safetensors.torch import load_file, safe_open + state_dict = load_file(vae_path) + else: + state_dict = torch.load(vae_path, map_location="cpu") + state_dict = state_dict["state_dict"] if "state_dict" in state_dict else state_dict + + m, u = vae.load_state_dict(state_dict, strict=False) + print(f"missing keys: {len(m)}, unexpected keys: {len(u)}") + +# Get Tokenizer +tokenizer = AutoTokenizer.from_pretrained( + os.path.join(model_name, config['text_encoder_kwargs'].get('tokenizer_subpath', 'tokenizer')), +) + +# Get Text encoder +text_encoder = WanT5EncoderModel.from_pretrained( + os.path.join(model_name, config['text_encoder_kwargs'].get('text_encoder_subpath', 'text_encoder')), + additional_kwargs=OmegaConf.to_container(config['text_encoder_kwargs']), + low_cpu_mem_usage=True, + torch_dtype=weight_dtype, +) +text_encoder = text_encoder.eval() + +# Get Scheduler +Choosen_Scheduler = scheduler_dict = { + "Flow": FlowMatchEulerDiscreteScheduler, + "Flow_Unipc": FlowUniPCMultistepScheduler, + "Flow_DPM++": FlowDPMSolverMultistepScheduler, +}[sampler_name] +if sampler_name == "Flow_Unipc" or sampler_name == "Flow_DPM++": + config['scheduler_kwargs']['shift'] = 1 +scheduler = Choosen_Scheduler( + **filter_kwargs(Choosen_Scheduler, OmegaConf.to_container(config['scheduler_kwargs'])) +) + +# Get Pipeline +pipeline = Wan2_2FunControlPipeline( + transformer=transformer, + transformer_2=transformer_2, + vae=vae, + tokenizer=tokenizer, + text_encoder=text_encoder, + scheduler=scheduler, +) +if ulysses_degree > 1 or ring_degree > 1: + from functools import partial + transformer.enable_multi_gpus_inference() + transformer_2.enable_multi_gpus_inference() + if fsdp_dit: + shard_fn = partial(shard_model, device_id=device, param_dtype=weight_dtype) + pipeline.transformer = shard_fn(pipeline.transformer) + pipeline.transformer_2 = shard_fn(pipeline.transformer_2) + print("Add FSDP DIT") + if fsdp_text_encoder: + shard_fn = partial(shard_model, device_id=device, param_dtype=weight_dtype) + pipeline.text_encoder = shard_fn(pipeline.text_encoder) + print("Add FSDP TEXT ENCODER") + +if compile_dit: + for i in range(len(pipeline.transformer.blocks)): + pipeline.transformer.blocks[i] = torch.compile(pipeline.transformer.blocks[i]) + for i in range(len(pipeline.transformer_2.blocks)): + pipeline.transformer_2.blocks[i] = torch.compile(pipeline.transformer_2.blocks[i]) + print("Add Compile") + +if GPU_memory_mode == "sequential_cpu_offload": + replace_parameters_by_name(transformer, ["modulation",], device=device) + replace_parameters_by_name(transformer_2, ["modulation",], device=device) + transformer.freqs = transformer.freqs.to(device=device) + transformer_2.freqs = transformer_2.freqs.to(device=device) + pipeline.enable_sequential_cpu_offload(device=device) +elif GPU_memory_mode == "model_cpu_offload_and_qfloat8": + convert_model_weight_to_float8(transformer, exclude_module_name=["modulation",], device=device) + convert_model_weight_to_float8(transformer_2, exclude_module_name=["modulation",], device=device) + convert_weight_dtype_wrapper(transformer, weight_dtype) + convert_weight_dtype_wrapper(transformer_2, weight_dtype) + pipeline.enable_model_cpu_offload(device=device) +elif GPU_memory_mode == "model_cpu_offload": + pipeline.enable_model_cpu_offload(device=device) +elif GPU_memory_mode == "model_cpu_offload_and_qfloat8": + convert_model_weight_to_float8(transformer, exclude_module_name=["modulation",], device=device) + convert_model_weight_to_float8(transformer_2, exclude_module_name=["modulation",], device=device) + convert_weight_dtype_wrapper(transformer, weight_dtype) + convert_weight_dtype_wrapper(transformer_2, weight_dtype) + pipeline.to(device=device) +else: + pipeline.to(device=device) + +coefficients = get_teacache_coefficients(model_name) if enable_teacache else None +if coefficients is not None: + print(f"Enable TeaCache with threshold {teacache_threshold} and skip the first {num_skip_start_steps} steps.") + pipeline.transformer.enable_teacache( + coefficients, num_inference_steps, teacache_threshold, num_skip_start_steps=num_skip_start_steps, offload=teacache_offload + ) + pipeline.transformer_2.share_teacache(transformer=pipeline.transformer) + +if cfg_skip_ratio is not None: + print(f"Enable cfg_skip_ratio {cfg_skip_ratio}.") + pipeline.transformer.enable_cfg_skip(cfg_skip_ratio, num_inference_steps) + pipeline.transformer_2.share_cfg_skip(transformer=pipeline.transformer) + +generator = torch.Generator(device=device).manual_seed(seed) + +if lora_path is not None: + pipeline = merge_lora(pipeline, lora_path, lora_weight, device=device) + pipeline = merge_lora(pipeline, lora_high_path, lora_high_weight, device=device, sub_transformer_name="transformer_2") + +with torch.no_grad(): + video_length = int((video_length - 1) // vae.config.temporal_compression_ratio * vae.config.temporal_compression_ratio) + 1 if video_length != 1 else 1 + latent_frames = (video_length - 1) // vae.config.temporal_compression_ratio + 1 + + if enable_riflex: + pipeline.transformer.enable_riflex(k = riflex_k, L_test = latent_frames) + + inpaint_video, inpaint_video_mask, clip_image = get_image_to_video_latent(start_image, end_image, video_length=video_length, sample_size=sample_size) + + if ref_image is not None: + ref_image = get_image_latent(ref_image, sample_size=sample_size) + + if control_camera_txt is not None: + input_video, input_video_mask = None, None + control_camera_video = process_pose_file(control_camera_txt, sample_size[1], sample_size[0]) + control_camera_video = control_camera_video[:video_length].permute([3, 0, 1, 2]).unsqueeze(0) + else: + input_video, input_video_mask, _, _ = get_video_to_video_latent(control_video, video_length=video_length, sample_size=sample_size, fps=fps, ref_image=None) + control_camera_video = None + + sample = pipeline( + prompt, + num_frames = video_length, + negative_prompt = negative_prompt, + height = sample_size[0], + width = sample_size[1], + generator = generator, + guidance_scale = guidance_scale, + num_inference_steps = num_inference_steps, + + video = inpaint_video, + mask_video = inpaint_video_mask, + control_video = input_video, + control_camera_video = control_camera_video, + ref_image = ref_image, + boundary = boundary, + shift = shift, + ).videos + +if lora_path is not None: + pipeline = unmerge_lora(pipeline, lora_path, lora_weight, device=device) + pipeline = unmerge_lora(pipeline, lora_high_path, lora_high_weight, device=device, sub_transformer_name="transformer_2") + +def save_results(): + if not os.path.exists(save_path): + os.makedirs(save_path, exist_ok=True) + + index = len([path for path in os.listdir(save_path)]) + 1 + prefix = str(index).zfill(8) + if video_length == 1: + video_path = os.path.join(save_path, prefix + ".png") + + image = sample[0, :, 0] + image = image.transpose(0, 1).transpose(1, 2) + image = (image * 255).numpy().astype(np.uint8) + image = Image.fromarray(image) + image.save(video_path) + else: + video_path = os.path.join(save_path, prefix + ".mp4") + save_videos_grid(sample, video_path, fps=fps) + +if ulysses_degree * ring_degree > 1: + import torch.distributed as dist + if dist.get_rank() == 0: + save_results() +else: + save_results() \ No newline at end of file diff --git a/examples/wan2.2_fun/predict_v2v_control_ref.py b/examples/wan2.2_fun/predict_v2v_control_ref.py new file mode 100644 index 0000000..ec18805 --- /dev/null +++ b/examples/wan2.2_fun/predict_v2v_control_ref.py @@ -0,0 +1,365 @@ +import os +import sys + +import numpy as np +import torch +from diffusers import FlowMatchEulerDiscreteScheduler +from omegaconf import OmegaConf +from PIL import Image +from transformers import AutoTokenizer + +current_file_path = os.path.abspath(__file__) +project_roots = [os.path.dirname(current_file_path), os.path.dirname(os.path.dirname(current_file_path)), os.path.dirname(os.path.dirname(os.path.dirname(current_file_path)))] +for project_root in project_roots: + sys.path.insert(0, project_root) if project_root not in sys.path else None + +from videox_fun.dist import set_multi_gpus_devices, shard_model +from videox_fun.models import (AutoencoderKLWan, AutoTokenizer, CLIPModel, + WanT5EncoderModel, Wan2_2Transformer3DModel) +from videox_fun.data.dataset_image_video import process_pose_file +from videox_fun.models.cache_utils import get_teacache_coefficients +from videox_fun.pipeline import Wan2_2FunControlPipeline, WanPipeline +from videox_fun.utils.fp8_optimization import (convert_model_weight_to_float8, + convert_weight_dtype_wrapper, + replace_parameters_by_name) +from videox_fun.utils.lora_utils import merge_lora, unmerge_lora +from videox_fun.utils.utils import (filter_kwargs, get_image_latent, get_image_to_video_latent, + get_video_to_video_latent, + save_videos_grid) +from videox_fun.utils.fm_solvers import FlowDPMSolverMultistepScheduler +from videox_fun.utils.fm_solvers_unipc import FlowUniPCMultistepScheduler + +# GPU memory mode, which can be choosen in [model_full_load, model_cpu_offload_and_qfloat8, model_cpu_offload, model_cpu_offload_and_qfloat8, sequential_cpu_offload]. +# model_full_load means that the entire model will be moved to the GPU. +# +# model_full_load_and_qfloat8 means that the entire model will be moved to the GPU, +# and the transformer model has been quantized to float8, which can save more GPU memory. +# +# model_cpu_offload means that the entire model will be moved to the CPU after use, which can save some GPU memory. +# +# model_cpu_offload_and_qfloat8 indicates that the entire model will be moved to the CPU after use, +# and the transformer model has been quantized to float8, which can save more GPU memory. +# +# sequential_cpu_offload means that each layer of the model will be moved to the CPU after use, +# resulting in slower speeds but saving a large amount of GPU memory. +GPU_memory_mode = "sequential_cpu_offload" +# Multi GPUs config +# Please ensure that the product of ulysses_degree and ring_degree equals the number of GPUs used. +# For example, if you are using 8 GPUs, you can set ulysses_degree = 2 and ring_degree = 4. +# If you are using 1 GPU, you can set ulysses_degree = 1 and ring_degree = 1. +ulysses_degree = 1 +ring_degree = 1 +# Use FSDP to save more GPU memory in multi gpus. +fsdp_dit = False +fsdp_text_encoder = True +# Compile will give a speedup in fixed resolution and need a little GPU memory. +# The compile_dit is not compatible with the fsdp_dit and sequential_cpu_offload. +compile_dit = False + +# Support TeaCache. +enable_teacache = True +# Recommended to be set between 0.05 and 0.30. A larger threshold can cache more steps, speeding up the inference process, +# but it may cause slight differences between the generated content and the original content. +# # --------------------------------------------------------------------------------------------------- # +# | Model Name | threshold | Model Name | threshold | +# | Wan2.2-T2V-A14B | 0.10~0.15 | Wan2.2-I2V-A14B | 0.15~0.20 | +# | Wan2.2-Fun-A14B-* | 0.15~0.20 | +# # --------------------------------------------------------------------------------------------------- # +teacache_threshold = 0.10 +# The number of steps to skip TeaCache at the beginning of the inference process, which can +# reduce the impact of TeaCache on generated video quality. +num_skip_start_steps = 5 +# Whether to offload TeaCache tensors to cpu to save a little bit of GPU memory. +teacache_offload = False + +# Skip some cfg steps in inference +# Recommended to be set between 0.00 and 0.25 +cfg_skip_ratio = 0 + +# Riflex config +enable_riflex = False +# Index of intrinsic frequency +riflex_k = 6 + +# Config and model path +config_path = "config/wan2.2/wan_civitai_i2v.yaml" +# model path +model_name = "models/Diffusion_Transformer/Wan2.2-Fun-A14B-Control" + +# Choose the sampler in "Flow", "Flow_Unipc", "Flow_DPM++" +sampler_name = "Flow" +# [NOTE]: Noise schedule shift parameter. Affects temporal dynamics. +# Used when the sampler is in "Flow_Unipc", "Flow_DPM++". +# If you want to generate a 480p video, it is recommended to set the shift value to 3.0. +# If you want to generate a 720p video, it is recommended to set the shift value to 5.0. +shift = 5 + +# Load pretrained model if need +# The transformer_path is used for low noise model, the transformer_high_path is used for high noise model. +transformer_path = None +transformer_high_path = None +vae_path = None +# Load lora model if need +# The lora_path is used for low noise model, the lora_high_path is used for high noise model. +lora_path = None +lora_high_path = None + +# Other params +sample_size = [832, 480] +video_length = 81 +fps = 16 + +# Use torch.float16 if GPU does not support torch.bfloat16 +# ome graphics cards, such as v100, 2080ti, do not support torch.bfloat16 +weight_dtype = torch.bfloat16 +control_video = "asset/pose.mp4" +control_camera_txt = None +start_image = None +end_image = None +ref_image = "asset/8.png" + +# 使用更长的neg prompt如"模糊,突变,变形,失真,画面暗,文本字幕,画面固定,连环画,漫画,线稿,没有主体。",可以增加稳定性 +# 在neg prompt中添加"安静,固定"等词语可以增加动态性。 +prompt = "一位年轻女子站在阳光明媚的海岸线上,身穿深蓝色背心与清爽的白色衬衫,外搭一条简洁的白色围裙,围裙在轻拂的海风中微微飘动。她拥有一头鲜艳的紫色长发,在风中轻盈舞动,发间系着一个精致的黑色蝴蝶结,与身后柔和的蔚蓝天空形成鲜明对比。她面容清秀,眉目精致,透着一股甜美的青春气息;神情柔和,略带羞涩,目光静静地凝望着远方的地平线,双手自然交叠于身前,仿佛沉浸在思绪之中。在她身后,是辽阔无垠、波光粼粼的大海,阳光洒在海面上,映出温暖的金色光晕。" +negative_prompt = "色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走" + +# Using longer neg prompt such as "Blurring, mutation, deformation, distortion, dark and solid, comics, text subtitles, line art." can increase stability +# Adding words such as "quiet, solid" to the neg prompt can increase dynamism. +# prompt = "A young woman with beautiful, clear eyes and blonde hair stands in the forest, wearing a white dress and a crown. Her expression is serene, reminiscent of a movie star, with fair and youthful skin. Her brown long hair flows in the wind. The video quality is very high, with a clear view. High quality, masterpiece, best quality, high resolution, ultra-fine, fantastical." +# negative_prompt = "Twisted body, limb deformities, text captions, comic, static, ugly, error, messy code." +guidance_scale = 6.0 +seed = 42 +num_inference_steps = 50 +# The lora_weight is used for low noise model, the lora_high_weight is used for high noise model. +lora_weight = 0.55 +lora_high_weight = 0.55 +save_path = "samples/wan-videos-fun-control" + +device = set_multi_gpus_devices(ulysses_degree, ring_degree) +config = OmegaConf.load(config_path) +boundary = config['transformer_additional_kwargs'].get('boundary', 0.875) + +transformer = Wan2_2Transformer3DModel.from_pretrained( + os.path.join(model_name, config['transformer_additional_kwargs'].get('transformer_low_noise_model_subpath', 'transformer')), + transformer_additional_kwargs=OmegaConf.to_container(config['transformer_additional_kwargs']), + low_cpu_mem_usage=True, + torch_dtype=weight_dtype, +) + +transformer_2 = Wan2_2Transformer3DModel.from_pretrained( + os.path.join(model_name, config['transformer_additional_kwargs'].get('transformer_high_noise_model_subpath', 'transformer')), + transformer_additional_kwargs=OmegaConf.to_container(config['transformer_additional_kwargs']), + low_cpu_mem_usage=True, + torch_dtype=weight_dtype, +) + +if transformer_path is not None: + print(f"From checkpoint: {transformer_path}") + if transformer_path.endswith("safetensors"): + from safetensors.torch import load_file, safe_open + state_dict = load_file(transformer_path) + else: + state_dict = torch.load(transformer_path, map_location="cpu") + state_dict = state_dict["state_dict"] if "state_dict" in state_dict else state_dict + + m, u = transformer.load_state_dict(state_dict, strict=False) + print(f"missing keys: {len(m)}, unexpected keys: {len(u)}") + +if transformer_high_path is not None: + print(f"From checkpoint: {transformer_high_path}") + if transformer_high_path.endswith("safetensors"): + from safetensors.torch import load_file, safe_open + state_dict = load_file(transformer_high_path) + else: + state_dict = torch.load(transformer_high_path, map_location="cpu") + state_dict = state_dict["state_dict"] if "state_dict" in state_dict else state_dict + + m, u = transformer_2.load_state_dict(state_dict, strict=False) + print(f"missing keys: {len(m)}, unexpected keys: {len(u)}") + +# Get Vae +Choosen_AutoencoderKL = { + "AutoencoderKLWan": AutoencoderKLWan, +}[config['vae_kwargs'].get('vae_type', 'AutoencoderKLWan')] +vae = Choosen_AutoencoderKL.from_pretrained( + os.path.join(model_name, config['vae_kwargs'].get('vae_subpath', 'vae')), + additional_kwargs=OmegaConf.to_container(config['vae_kwargs']), +).to(weight_dtype) + +if vae_path is not None: + print(f"From checkpoint: {vae_path}") + if vae_path.endswith("safetensors"): + from safetensors.torch import load_file, safe_open + state_dict = load_file(vae_path) + else: + state_dict = torch.load(vae_path, map_location="cpu") + state_dict = state_dict["state_dict"] if "state_dict" in state_dict else state_dict + + m, u = vae.load_state_dict(state_dict, strict=False) + print(f"missing keys: {len(m)}, unexpected keys: {len(u)}") + +# Get Tokenizer +tokenizer = AutoTokenizer.from_pretrained( + os.path.join(model_name, config['text_encoder_kwargs'].get('tokenizer_subpath', 'tokenizer')), +) + +# Get Text encoder +text_encoder = WanT5EncoderModel.from_pretrained( + os.path.join(model_name, config['text_encoder_kwargs'].get('text_encoder_subpath', 'text_encoder')), + additional_kwargs=OmegaConf.to_container(config['text_encoder_kwargs']), + low_cpu_mem_usage=True, + torch_dtype=weight_dtype, +) +text_encoder = text_encoder.eval() + +# Get Scheduler +Choosen_Scheduler = scheduler_dict = { + "Flow": FlowMatchEulerDiscreteScheduler, + "Flow_Unipc": FlowUniPCMultistepScheduler, + "Flow_DPM++": FlowDPMSolverMultistepScheduler, +}[sampler_name] +if sampler_name == "Flow_Unipc" or sampler_name == "Flow_DPM++": + config['scheduler_kwargs']['shift'] = 1 +scheduler = Choosen_Scheduler( + **filter_kwargs(Choosen_Scheduler, OmegaConf.to_container(config['scheduler_kwargs'])) +) + +# Get Pipeline +pipeline = Wan2_2FunControlPipeline( + transformer=transformer, + transformer_2=transformer_2, + vae=vae, + tokenizer=tokenizer, + text_encoder=text_encoder, + scheduler=scheduler, +) +if ulysses_degree > 1 or ring_degree > 1: + from functools import partial + transformer.enable_multi_gpus_inference() + transformer_2.enable_multi_gpus_inference() + if fsdp_dit: + shard_fn = partial(shard_model, device_id=device, param_dtype=weight_dtype) + pipeline.transformer = shard_fn(pipeline.transformer) + pipeline.transformer_2 = shard_fn(pipeline.transformer_2) + print("Add FSDP DIT") + if fsdp_text_encoder: + shard_fn = partial(shard_model, device_id=device, param_dtype=weight_dtype) + pipeline.text_encoder = shard_fn(pipeline.text_encoder) + print("Add FSDP TEXT ENCODER") + +if compile_dit: + for i in range(len(pipeline.transformer.blocks)): + pipeline.transformer.blocks[i] = torch.compile(pipeline.transformer.blocks[i]) + for i in range(len(pipeline.transformer_2.blocks)): + pipeline.transformer_2.blocks[i] = torch.compile(pipeline.transformer_2.blocks[i]) + print("Add Compile") + +if GPU_memory_mode == "sequential_cpu_offload": + replace_parameters_by_name(transformer, ["modulation",], device=device) + replace_parameters_by_name(transformer_2, ["modulation",], device=device) + transformer.freqs = transformer.freqs.to(device=device) + transformer_2.freqs = transformer_2.freqs.to(device=device) + pipeline.enable_sequential_cpu_offload(device=device) +elif GPU_memory_mode == "model_cpu_offload_and_qfloat8": + convert_model_weight_to_float8(transformer, exclude_module_name=["modulation",], device=device) + convert_model_weight_to_float8(transformer_2, exclude_module_name=["modulation",], device=device) + convert_weight_dtype_wrapper(transformer, weight_dtype) + convert_weight_dtype_wrapper(transformer_2, weight_dtype) + pipeline.enable_model_cpu_offload(device=device) +elif GPU_memory_mode == "model_cpu_offload": + pipeline.enable_model_cpu_offload(device=device) +elif GPU_memory_mode == "model_cpu_offload_and_qfloat8": + convert_model_weight_to_float8(transformer, exclude_module_name=["modulation",], device=device) + convert_model_weight_to_float8(transformer_2, exclude_module_name=["modulation",], device=device) + convert_weight_dtype_wrapper(transformer, weight_dtype) + convert_weight_dtype_wrapper(transformer_2, weight_dtype) + pipeline.to(device=device) +else: + pipeline.to(device=device) + +coefficients = get_teacache_coefficients(model_name) if enable_teacache else None +if coefficients is not None: + print(f"Enable TeaCache with threshold {teacache_threshold} and skip the first {num_skip_start_steps} steps.") + pipeline.transformer.enable_teacache( + coefficients, num_inference_steps, teacache_threshold, num_skip_start_steps=num_skip_start_steps, offload=teacache_offload + ) + pipeline.transformer_2.share_teacache(transformer=pipeline.transformer) + +if cfg_skip_ratio is not None: + print(f"Enable cfg_skip_ratio {cfg_skip_ratio}.") + pipeline.transformer.enable_cfg_skip(cfg_skip_ratio, num_inference_steps) + pipeline.transformer_2.share_cfg_skip(transformer=pipeline.transformer) + +generator = torch.Generator(device=device).manual_seed(seed) + +if lora_path is not None: + pipeline = merge_lora(pipeline, lora_path, lora_weight, device=device) + pipeline = merge_lora(pipeline, lora_high_path, lora_high_weight, device=device, sub_transformer_name="transformer_2") + +with torch.no_grad(): + video_length = int((video_length - 1) // vae.config.temporal_compression_ratio * vae.config.temporal_compression_ratio) + 1 if video_length != 1 else 1 + latent_frames = (video_length - 1) // vae.config.temporal_compression_ratio + 1 + + if enable_riflex: + pipeline.transformer.enable_riflex(k = riflex_k, L_test = latent_frames) + + inpaint_video, inpaint_video_mask, clip_image = get_image_to_video_latent(start_image, end_image, video_length=video_length, sample_size=sample_size) + + if ref_image is not None: + ref_image = get_image_latent(ref_image, sample_size=sample_size) + + if control_camera_txt is not None: + input_video, input_video_mask = None, None + control_camera_video = process_pose_file(control_camera_txt, sample_size[1], sample_size[0]) + control_camera_video = control_camera_video[:video_length].permute([3, 0, 1, 2]).unsqueeze(0) + else: + input_video, input_video_mask, _, _ = get_video_to_video_latent(control_video, video_length=video_length, sample_size=sample_size, fps=fps, ref_image=None) + control_camera_video = None + + sample = pipeline( + prompt, + num_frames = video_length, + negative_prompt = negative_prompt, + height = sample_size[0], + width = sample_size[1], + generator = generator, + guidance_scale = guidance_scale, + num_inference_steps = num_inference_steps, + + video = inpaint_video, + mask_video = inpaint_video_mask, + control_video = input_video, + control_camera_video = control_camera_video, + ref_image = ref_image, + boundary = boundary, + shift = shift, + ).videos + +if lora_path is not None: + pipeline = unmerge_lora(pipeline, lora_path, lora_weight, device=device) + pipeline = unmerge_lora(pipeline, lora_high_path, lora_high_weight, device=device, sub_transformer_name="transformer_2") + +def save_results(): + if not os.path.exists(save_path): + os.makedirs(save_path, exist_ok=True) + + index = len([path for path in os.listdir(save_path)]) + 1 + prefix = str(index).zfill(8) + if video_length == 1: + video_path = os.path.join(save_path, prefix + ".png") + + image = sample[0, :, 0] + image = image.transpose(0, 1).transpose(1, 2) + image = (image * 255).numpy().astype(np.uint8) + image = Image.fromarray(image) + image.save(video_path) + else: + video_path = os.path.join(save_path, prefix + ".mp4") + save_videos_grid(sample, video_path, fps=fps) + +if ulysses_degree * ring_degree > 1: + import torch.distributed as dist + if dist.get_rank() == 0: + save_results() +else: + save_results() \ No newline at end of file diff --git a/scripts/wan2.1/train_reward_lora.py b/scripts/wan2.1/train_reward_lora.py index a00b8ad..c032d3c 100755 --- a/scripts/wan2.1/train_reward_lora.py +++ b/scripts/wan2.1/train_reward_lora.py @@ -1171,7 +1171,7 @@ def main(): timesteps = noise_scheduler.timesteps # Prepare latent variables - vae_scale_factor = vae.spacial_compression_ratio + vae_scale_factor = vae.spatial_compression_ratio latent_shape = [ args.train_batch_size, vae.config.latent_channels, diff --git a/scripts/wan2.1_fun/train_reward_lora.py b/scripts/wan2.1_fun/train_reward_lora.py index 97652f2..f0a22db 100755 --- a/scripts/wan2.1_fun/train_reward_lora.py +++ b/scripts/wan2.1_fun/train_reward_lora.py @@ -1184,7 +1184,7 @@ def main(): timesteps = noise_scheduler.timesteps # Prepare latent variables - vae_scale_factor = vae.spacial_compression_ratio + vae_scale_factor = vae.spatial_compression_ratio latent_shape = [ args.train_batch_size, vae.config.latent_channels, diff --git a/scripts/wan2.2_fun/train_control_lora.py b/scripts/wan2.2_fun/train_control_lora.py new file mode 100644 index 0000000..ed2b9aa --- /dev/null +++ b/scripts/wan2.2_fun/train_control_lora.py @@ -0,0 +1,2038 @@ +"""Modified from https://github.com/huggingface/diffusers/blob/main/examples/text_to_image/train_text_to_image.py +""" +#!/usr/bin/env python +# coding=utf-8 +# Copyright 2024 The HuggingFace Inc. team. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and + +import argparse +import gc +import logging +import math +import os +import pickle +import random +import shutil +import sys + +import accelerate +import diffusers +import numpy as np +import torch +import torch.nn.functional as F +import torch.utils.checkpoint +import torchvision.transforms.functional as TF +import transformers +from accelerate import Accelerator, FullyShardedDataParallelPlugin +from accelerate.logging import get_logger +from accelerate.state import AcceleratorState +from accelerate.utils import ProjectConfiguration, set_seed +from diffusers import DDIMScheduler, FlowMatchEulerDiscreteScheduler +from diffusers.optimization import get_scheduler +from diffusers.training_utils import (EMAModel, + compute_density_for_timestep_sampling, + compute_loss_weighting_for_sd3) +from diffusers.utils import check_min_version, deprecate, is_wandb_available +from diffusers.utils.torch_utils import is_compiled_module +from einops import rearrange +from omegaconf import OmegaConf +from packaging import version +from PIL import Image +from torch.utils.data import RandomSampler +from torch.utils.tensorboard import SummaryWriter +from torchvision import transforms +from tqdm.auto import tqdm +from transformers import AutoTokenizer +from transformers.utils import ContextManagers + +import datasets + +current_file_path = os.path.abspath(__file__) +project_roots = [os.path.dirname(current_file_path), os.path.dirname(os.path.dirname(current_file_path)), os.path.dirname(os.path.dirname(os.path.dirname(current_file_path)))] +for project_root in project_roots: + sys.path.insert(0, project_root) if project_root not in sys.path else None + +from videox_fun.data.bucket_sampler import (ASPECT_RATIO_512, + ASPECT_RATIO_RANDOM_CROP_512, + ASPECT_RATIO_RANDOM_CROP_PROB, + AspectRatioBatchImageVideoSampler, + RandomSampler, get_closest_ratio) +from videox_fun.data.dataset_image_video import (ImageVideoControlDataset, + ImageVideoDataset, + ImageVideoSampler, + get_random_mask, + process_pose_file, + process_pose_params) +from videox_fun.models import (AutoencoderKLWan, CLIPModel, WanT5EncoderModel, + Wan2_2Transformer3DModel) +from videox_fun.pipeline import WanFunControlPipeline +from videox_fun.utils.discrete_sampler import DiscreteSampling +from videox_fun.utils.lora_utils import (create_network, merge_lora, + unmerge_lora) +from videox_fun.utils.utils import (get_image_to_video_latent, + get_video_to_video_latent, + save_videos_grid) + +if is_wandb_available(): + import wandb + + +def filter_kwargs(cls, kwargs): + import inspect + sig = inspect.signature(cls.__init__) + valid_params = set(sig.parameters.keys()) - {'self', 'cls'} + filtered_kwargs = {k: v for k, v in kwargs.items() if k in valid_params} + return filtered_kwargs + +def linear_decay(initial_value, final_value, total_steps, current_step): + if current_step >= total_steps: + return final_value + current_step = max(0, current_step) + step_size = (final_value - initial_value) / total_steps + current_value = initial_value + step_size * current_step + return current_value + +def generate_timestep_with_lognorm(low, high, shape, device="cpu", generator=None): + u = torch.normal(mean=0.0, std=1.0, size=shape, device=device, generator=generator) + t = 1 / (1 + torch.exp(-u)) * (high - low) + low + return torch.clip(t.to(torch.int32), low, high - 1) + +def resize_mask(mask, latent, process_first_frame_only=True): + latent_size = latent.size() + batch_size, channels, num_frames, height, width = mask.shape + + if process_first_frame_only: + target_size = list(latent_size[2:]) + target_size[0] = 1 + first_frame_resized = F.interpolate( + mask[:, :, 0:1, :, :], + size=target_size, + mode='trilinear', + align_corners=False + ) + + target_size = list(latent_size[2:]) + target_size[0] = target_size[0] - 1 + if target_size[0] != 0: + remaining_frames_resized = F.interpolate( + mask[:, :, 1:, :, :], + size=target_size, + mode='trilinear', + align_corners=False + ) + resized_mask = torch.cat([first_frame_resized, remaining_frames_resized], dim=2) + else: + resized_mask = first_frame_resized + else: + target_size = list(latent_size[2:]) + resized_mask = F.interpolate( + mask, + size=target_size, + mode='trilinear', + align_corners=False + ) + return resized_mask + +# Will error if the minimal version of diffusers is not installed. Remove at your own risks. +check_min_version("0.18.0.dev0") + +logger = get_logger(__name__, log_level="INFO") + +def log_validation(vae, text_encoder, tokenizer, transformer3d, network, config, args, accelerator, weight_dtype, global_step): + try: + logger.info("Running validation... ") + + transformer3d_val = Wan2_2Transformer3DModel.from_pretrained( + os.path.join(args.pretrained_model_name_or_path, config['transformer_additional_kwargs'].get('transformer_subpath', 'transformer')), + transformer_additional_kwargs=OmegaConf.to_container(config['transformer_additional_kwargs']), + ).to(weight_dtype) + transformer3d_val.load_state_dict(accelerator.unwrap_model(transformer3d).state_dict()) + scheduler = FlowMatchEulerDiscreteScheduler( + **filter_kwargs(FlowMatchEulerDiscreteScheduler, OmegaConf.to_container(config['scheduler_kwargs'])) + ) + + pipeline = WanFunControlPipeline( + vae=accelerator.unwrap_model(vae).to(weight_dtype), + text_encoder=accelerator.unwrap_model(text_encoder), + tokenizer=tokenizer, + transformer=transformer3d_val, + scheduler=scheduler, + ) + pipeline = pipeline.to(accelerator.device) + + pipeline = merge_lora( + pipeline, None, 1, accelerator.device, state_dict=accelerator.unwrap_model(network).state_dict(), transformer_only=True + ) + + if args.seed is None: + generator = None + else: + generator = torch.Generator(device=accelerator.device).manual_seed(args.seed) + + images = [] + for i in range(len(args.validation_prompts)): + with torch.no_grad(): + with torch.autocast("cuda", dtype=weight_dtype): + video_length = int(args.video_sample_n_frames // vae.config.temporal_compression_ratio * vae.config.temporal_compression_ratio) + 1 if args.video_sample_n_frames != 1 else 1 + input_video, input_video_mask, ref_image, clip_image = get_video_to_video_latent(args.validation_paths[i], video_length=video_length, sample_size=[args.video_sample_size, args.video_sample_size]) + sample = pipeline( + args.validation_prompts[i], + num_frames = video_length, + negative_prompt = "bad detailed", + height = args.video_sample_size, + width = args.video_sample_size, + generator = generator, + + control_video = input_video, + ).videos + os.makedirs(os.path.join(args.output_dir, "sample"), exist_ok=True) + save_videos_grid(sample, os.path.join(args.output_dir, f"sample/sample-{global_step}-{i}.gif")) + + del pipeline + del transformer3d_val + gc.collect() + torch.cuda.empty_cache() + torch.cuda.ipc_collect() + + return images + except Exception as e: + gc.collect() + torch.cuda.empty_cache() + torch.cuda.ipc_collect() + print(f"Eval error with info {e}") + return None + +def parse_args(): + parser = argparse.ArgumentParser(description="Simple example of a training script.") + parser.add_argument( + "--input_perturbation", type=float, default=0, help="The scale of input perturbation. Recommended 0.1." + ) + parser.add_argument( + "--pretrained_model_name_or_path", + type=str, + default=None, + required=True, + help="Path to pretrained model or model identifier from huggingface.co/models.", + ) + parser.add_argument( + "--revision", + type=str, + default=None, + required=False, + help="Revision of pretrained model identifier from huggingface.co/models.", + ) + parser.add_argument( + "--variant", + type=str, + default=None, + help="Variant of the model files of the pretrained model identifier from huggingface.co/models, 'e.g.' fp16", + ) + parser.add_argument( + "--train_data_dir", + type=str, + default=None, + help=( + "A folder containing the training data. " + ), + ) + parser.add_argument( + "--train_data_meta", + type=str, + default=None, + help=( + "A csv containing the training data. " + ), + ) + parser.add_argument( + "--max_train_samples", + type=int, + default=None, + help=( + "For debugging purposes or quicker training, truncate the number of training examples to this " + "value if set." + ), + ) + parser.add_argument( + "--validation_prompts", + type=str, + default=None, + nargs="+", + help=("A set of prompts evaluated every `--validation_epochs` and logged to `--report_to`."), + ) + parser.add_argument( + "--output_dir", + type=str, + default="sd-model-finetuned", + help="The output directory where the model predictions and checkpoints will be written.", + ) + parser.add_argument( + "--cache_dir", + type=str, + default=None, + help="The directory where the downloaded models and datasets will be stored.", + ) + parser.add_argument("--seed", type=int, default=None, help="A seed for reproducible training.") + parser.add_argument( + "--random_flip", + action="store_true", + help="whether to randomly flip images horizontally", + ) + parser.add_argument( + "--use_came", + action="store_true", + help="whether to use came", + ) + parser.add_argument( + "--multi_stream", + action="store_true", + help="whether to use cuda multi-stream", + ) + parser.add_argument( + "--train_batch_size", type=int, default=16, help="Batch size (per device) for the training dataloader." + ) + parser.add_argument( + "--vae_mini_batch", type=int, default=32, help="mini batch size for vae." + ) + parser.add_argument("--num_train_epochs", type=int, default=100) + parser.add_argument( + "--max_train_steps", + type=int, + default=None, + help="Total number of training steps to perform. If provided, overrides num_train_epochs.", + ) + parser.add_argument( + "--gradient_accumulation_steps", + type=int, + default=1, + help="Number of updates steps to accumulate before performing a backward/update pass.", + ) + parser.add_argument( + "--gradient_checkpointing", + action="store_true", + help="Whether or not to use gradient checkpointing to save memory at the expense of slower backward pass.", + ) + parser.add_argument( + "--learning_rate", + type=float, + default=1e-4, + help="Initial learning rate (after the potential warmup period) to use.", + ) + parser.add_argument( + "--scale_lr", + action="store_true", + default=False, + help="Scale the learning rate by the number of GPUs, gradient accumulation steps, and batch size.", + ) + parser.add_argument( + "--lr_scheduler", + type=str, + default="constant", + help=( + 'The scheduler type to use. Choose between ["linear", "cosine", "cosine_with_restarts", "polynomial",' + ' "constant", "constant_with_warmup"]' + ), + ) + parser.add_argument( + "--lr_warmup_steps", type=int, default=500, help="Number of steps for the warmup in the lr scheduler." + ) + parser.add_argument( + "--use_8bit_adam", action="store_true", help="Whether or not to use 8-bit Adam from bitsandbytes." + ) + parser.add_argument( + "--allow_tf32", + action="store_true", + help=( + "Whether or not to allow TF32 on Ampere GPUs. Can be used to speed up training. For more information, see" + " https://pytorch.org/docs/stable/notes/cuda.html#tensorfloat-32-tf32-on-ampere-devices" + ), + ) + parser.add_argument("--use_ema", action="store_true", help="Whether to use EMA model.") + parser.add_argument( + "--non_ema_revision", + type=str, + default=None, + required=False, + help=( + "Revision of pretrained non-ema model identifier. Must be a branch, tag or git identifier of the local or" + " remote repository specified with --pretrained_model_name_or_path." + ), + ) + parser.add_argument( + "--dataloader_num_workers", + type=int, + default=0, + help=( + "Number of subprocesses to use for data loading. 0 means that the data will be loaded in the main process." + ), + ) + parser.add_argument("--adam_beta1", type=float, default=0.9, help="The beta1 parameter for the Adam optimizer.") + parser.add_argument("--adam_beta2", type=float, default=0.999, help="The beta2 parameter for the Adam optimizer.") + parser.add_argument("--adam_weight_decay", type=float, default=1e-2, help="Weight decay to use.") + parser.add_argument("--adam_epsilon", type=float, default=1e-08, help="Epsilon value for the Adam optimizer") + parser.add_argument("--max_grad_norm", default=1.0, type=float, help="Max gradient norm.") + parser.add_argument("--push_to_hub", action="store_true", help="Whether or not to push the model to the Hub.") + parser.add_argument("--hub_token", type=str, default=None, help="The token to use to push to the Model Hub.") + parser.add_argument( + "--prediction_type", + type=str, + default=None, + help="The prediction_type that shall be used for training. Choose between 'epsilon' or 'v_prediction' or leave `None`. If left to `None` the default prediction type of the scheduler: `noise_scheduler.config.prediciton_type` is chosen.", + ) + parser.add_argument( + "--hub_model_id", + type=str, + default=None, + help="The name of the repository to keep in sync with the local `output_dir`.", + ) + parser.add_argument( + "--logging_dir", + type=str, + default="logs", + help=( + "[TensorBoard](https://www.tensorflow.org/tensorboard) log directory. Will default to" + " *output_dir/runs/**CURRENT_DATETIME_HOSTNAME***." + ), + ) + parser.add_argument( + "--mixed_precision", + type=str, + default=None, + choices=["no", "fp16", "bf16"], + help=( + "Whether to use mixed precision. Choose between fp16 and bf16 (bfloat16). Bf16 requires PyTorch >=" + " 1.10.and an Nvidia Ampere GPU. Default to the value of accelerate config of the current system or the" + " flag passed with the `accelerate.launch` command. Use this argument to override the accelerate config." + ), + ) + parser.add_argument( + "--report_to", + type=str, + default="tensorboard", + help=( + 'The integration to report the results and logs to. Supported platforms are `"tensorboard"`' + ' (default), `"wandb"` and `"comet_ml"`. Use `"all"` to report to all integrations.' + ), + ) + parser.add_argument("--local_rank", type=int, default=-1, help="For distributed training: local_rank") + parser.add_argument( + "--checkpointing_steps", + type=int, + default=500, + help=( + "Save a checkpoint of the training state every X updates. These checkpoints are only suitable for resuming" + " training using `--resume_from_checkpoint`." + ), + ) + parser.add_argument( + "--checkpoints_total_limit", + type=int, + default=None, + help=("Max number of checkpoints to store."), + ) + parser.add_argument( + "--resume_from_checkpoint", + type=str, + default=None, + help=( + "Whether training should be resumed from a previous checkpoint. Use a path saved by" + ' `--checkpointing_steps`, or `"latest"` to automatically select the last available checkpoint.' + ), + ) + parser.add_argument("--noise_offset", type=float, default=0, help="The scale of noise offset.") + parser.add_argument( + "--validation_epochs", + type=int, + default=5, + help="Run validation every X epochs.", + ) + parser.add_argument( + "--validation_steps", + type=int, + default=2000, + help="Run validation every X steps.", + ) + parser.add_argument( + "--tracker_project_name", + type=str, + default="text2image-fine-tune", + help=( + "The `project_name` argument passed to Accelerator.init_trackers for" + " more information see https://huggingface.co/docs/accelerate/v0.17.0/en/package_reference/accelerator#accelerate.Accelerator" + ), + ) + + parser.add_argument( + "--rank", + type=int, + default=128, + help=("The dimension of the LoRA update matrices."), + ) + parser.add_argument( + "--network_alpha", + type=int, + default=64, + help=("The dimension of the LoRA update matrices."), + ) + parser.add_argument( + "--train_text_encoder", + action="store_true", + help="Whether to train the text encoder. If set, the text encoder should be float32 precision.", + ) + parser.add_argument( + "--snr_loss", action="store_true", help="Whether or not to use snr_loss." + ) + parser.add_argument( + "--uniform_sampling", action="store_true", help="Whether or not to use uniform_sampling." + ) + parser.add_argument( + "--enable_text_encoder_in_dataloader", action="store_true", help="Whether or not to use text encoder in dataloader." + ) + parser.add_argument( + "--enable_bucket", action="store_true", help="Whether enable bucket sample in datasets." + ) + parser.add_argument( + "--random_ratio_crop", action="store_true", help="Whether enable random ratio crop sample in datasets." + ) + parser.add_argument( + "--random_frame_crop", action="store_true", help="Whether enable random frame crop sample in datasets." + ) + parser.add_argument( + "--random_hw_adapt", action="store_true", help="Whether enable random adapt height and width in datasets." + ) + parser.add_argument( + "--training_with_video_token_length", action="store_true", help="The training stage of the model in training.", + ) + parser.add_argument( + "--motion_sub_loss", action="store_true", help="Whether enable motion sub loss." + ) + parser.add_argument( + "--motion_sub_loss_ratio", type=float, default=0.25, help="The ratio of motion sub loss." + ) + parser.add_argument( + "--train_sampling_steps", + type=int, + default=1000, + help="Run train_sampling_steps.", + ) + parser.add_argument( + "--keep_all_node_same_token_length", + action="store_true", + help="Reference of the length token.", + ) + parser.add_argument( + "--token_sample_size", + type=int, + default=512, + help="Sample size of the token.", + ) + parser.add_argument( + "--video_sample_size", + type=int, + default=512, + help="Sample size of the video.", + ) + parser.add_argument( + "--image_sample_size", + type=int, + default=512, + help="Sample size of the image.", + ) + parser.add_argument( + "--fix_sample_size", + nargs=2, type=int, default=None, + help="Fix Sample size [height, width] when using bucket and collate_fn." + ) + parser.add_argument( + "--video_sample_stride", + type=int, + default=4, + help="Sample stride of the video.", + ) + parser.add_argument( + "--video_sample_n_frames", + type=int, + default=17, + help="Num frame of video.", + ) + parser.add_argument( + "--video_repeat", + type=int, + default=0, + help="Num of repeat video.", + ) + parser.add_argument( + "--config_path", + type=str, + default=None, + help=( + "The config of the model in training." + ), + ) + parser.add_argument( + "--transformer_path", + type=str, + default=None, + help=("If you want to load the weight from other transformers, input its path."), + ) + parser.add_argument( + "--vae_path", + type=str, + default=None, + help=("If you want to load the weight from other vaes, input its path."), + ) + parser.add_argument("--save_state", action="store_true", help="Whether or not to save state.") + + parser.add_argument( + '--tokenizer_max_length', + type=int, + default=512, + help='Max length of tokenizer' + ) + parser.add_argument( + "--use_deepspeed", action="store_true", help="Whether or not to use deepspeed." + ) + parser.add_argument( + "--use_fsdp", action="store_true", help="Whether or not to use fsdp." + ) + parser.add_argument( + "--low_vram", action="store_true", help="Whether enable low_vram mode." + ) + parser.add_argument( + "--boundary_type", + type=str, + default="low", + help=( + 'The format of training data. Support `"low"` and `"high"`' + ), + ) + parser.add_argument( + "--train_mode", + type=str, + default="control", + help=( + 'The format of training data. Support `"control"`' + ' (default), `"control_ref"`, `"control_camera_ref"`.' + ), + ) + parser.add_argument( + "--control_ref_image", + type=str, + default="first_frame", + help=( + 'The format of training data. Support `"first_frame"`' + ' (default), `"random"`.' + ), + ) + parser.add_argument( + "--add_full_ref_image_in_self_attention", + action="store_true", + help=( + 'Whether enable add full ref image in self attention.' + ), + ) + parser.add_argument( + "--add_inpaint_info", + action="store_true", + help=( + 'Whether enable add inpaint info in self attention.' + ), + ) + parser.add_argument( + "--weighting_scheme", + type=str, + default="none", + choices=["sigma_sqrt", "logit_normal", "mode", "cosmap", "none"], + help=('We default to the "none" weighting scheme for uniform sampling and uniform loss'), + ) + parser.add_argument( + "--logit_mean", type=float, default=0.0, help="mean to use when using the `'logit_normal'` weighting scheme." + ) + parser.add_argument( + "--logit_std", type=float, default=1.0, help="std to use when using the `'logit_normal'` weighting scheme." + ) + parser.add_argument( + "--mode_scale", + type=float, + default=1.29, + help="Scale of mode weighting scheme. Only effective when using the `'mode'` as the `weighting_scheme`.", + ) + parser.add_argument( + "--lora_skip_name", + type=str, + default=None, + help=("The module is not trained in loras. "), + ) + + args = parser.parse_args() + env_local_rank = int(os.environ.get("LOCAL_RANK", -1)) + if env_local_rank != -1 and env_local_rank != args.local_rank: + args.local_rank = env_local_rank + + # default to using the same revision for the non-ema model if not specified + if args.non_ema_revision is None: + args.non_ema_revision = args.revision + + return args + + +def main(): + args = parse_args() + + if args.report_to == "wandb" and args.hub_token is not None: + raise ValueError( + "You cannot use both --report_to=wandb and --hub_token due to a security risk of exposing your token." + " Please use `huggingface-cli login` to authenticate with the Hub." + ) + + if args.non_ema_revision is not None: + deprecate( + "non_ema_revision!=None", + "0.15.0", + message=( + "Downloading 'non_ema' weights from revision branches of the Hub is deprecated. Please make sure to" + " use `--variant=non_ema` instead." + ), + ) + logging_dir = os.path.join(args.output_dir, args.logging_dir) + + config = OmegaConf.load(args.config_path) + accelerator_project_config = ProjectConfiguration(project_dir=args.output_dir, logging_dir=logging_dir) + + accelerator = Accelerator( + gradient_accumulation_steps=args.gradient_accumulation_steps, + mixed_precision=args.mixed_precision, + log_with=args.report_to, + project_config=accelerator_project_config, + ) + + deepspeed_plugin = accelerator.state.deepspeed_plugin if hasattr(accelerator.state, "deepspeed_plugin") else None + fsdp_plugin = accelerator.state.fsdp_plugin if hasattr(accelerator.state, "fsdp_plugin") else None + if deepspeed_plugin is not None: + zero_stage = int(deepspeed_plugin.zero_stage) + fsdp_stage = 0 + print(f"Using DeepSpeed Zero stage: {zero_stage}") + + args.use_deepspeed = True + if zero_stage == 3: + print(f"Auto set save_state to True because zero_stage == 3") + args.save_state = True + elif fsdp_plugin is not None: + from torch.distributed.fsdp import ShardingStrategy + zero_stage = 0 + if fsdp_plugin.sharding_strategy is ShardingStrategy.FULL_SHARD: + fsdp_stage = 3 + elif fsdp_plugin.sharding_strategy is None: # The fsdp_plugin.sharding_strategy is None in FSDP 2. + fsdp_stage = 3 + elif fsdp_plugin.sharding_strategy is ShardingStrategy.SHARD_GRAD_OP: + fsdp_stage = 2 + else: + fsdp_stage = 0 + print(f"Using FSDP stage: {fsdp_stage}") + + args.use_fsdp = True + if fsdp_stage == 3: + print(f"Auto set save_state to True because fsdp_stage == 3") + args.save_state = True + else: + zero_stage = 0 + fsdp_stage = 0 + print("DeepSpeed is not enabled.") + + if accelerator.is_main_process: + writer = SummaryWriter(log_dir=logging_dir) + + # Make one log on every process with the configuration for debugging. + logging.basicConfig( + format="%(asctime)s - %(levelname)s - %(name)s - %(message)s", + datefmt="%m/%d/%Y %H:%M:%S", + level=logging.INFO, + ) + logger.info(accelerator.state, main_process_only=False) + if accelerator.is_local_main_process: + datasets.utils.logging.set_verbosity_warning() + transformers.utils.logging.set_verbosity_warning() + diffusers.utils.logging.set_verbosity_info() + else: + datasets.utils.logging.set_verbosity_error() + transformers.utils.logging.set_verbosity_error() + diffusers.utils.logging.set_verbosity_error() + + # If passed along, set the training seed now. + if args.seed is not None: + set_seed(args.seed) + rng = np.random.default_rng(np.random.PCG64(args.seed + accelerator.process_index)) + torch_rng = torch.Generator(accelerator.device).manual_seed(args.seed + accelerator.process_index) + else: + rng = None + torch_rng = None + index_rng = np.random.default_rng(np.random.PCG64(43)) + print(f"Init rng with seed {args.seed + accelerator.process_index}. Process_index is {accelerator.process_index}") + + # Handle the repository creation + if accelerator.is_main_process: + if args.output_dir is not None: + os.makedirs(args.output_dir, exist_ok=True) + + # For mixed precision training we cast all non-trainable weigths (vae, non-lora text_encoder and non-lora transformer3d) to half-precision + # as these weights are only used for inference, keeping weights in full precision is not required. + weight_dtype = torch.float32 + if accelerator.mixed_precision == "fp16": + weight_dtype = torch.float16 + args.mixed_precision = accelerator.mixed_precision + elif accelerator.mixed_precision == "bf16": + weight_dtype = torch.bfloat16 + args.mixed_precision = accelerator.mixed_precision + + # Load scheduler, tokenizer and models. + noise_scheduler = FlowMatchEulerDiscreteScheduler( + **filter_kwargs(FlowMatchEulerDiscreteScheduler, OmegaConf.to_container(config['scheduler_kwargs'])) + ) + + # Get Tokenizer + tokenizer = AutoTokenizer.from_pretrained( + os.path.join(args.pretrained_model_name_or_path, config['text_encoder_kwargs'].get('tokenizer_subpath', 'tokenizer')), + ) + + def deepspeed_zero_init_disabled_context_manager(): + """ + returns either a context list that includes one that will disable zero.Init or an empty context list + """ + deepspeed_plugin = AcceleratorState().deepspeed_plugin if accelerate.state.is_initialized() else None + if deepspeed_plugin is None: + return [] + + return [deepspeed_plugin.zero3_init_context_manager(enable=False)] + + # Currently Accelerate doesn't know how to handle multiple models under Deepspeed ZeRO stage 3. + # For this to work properly all models must be run through `accelerate.prepare`. But accelerate + # will try to assign the same optimizer with the same weights to all models during + # `deepspeed.initialize`, which of course doesn't work. + # + # For now the following workaround will partially support Deepspeed ZeRO-3, by excluding the 2 + # frozen models from being partitioned during `zero.Init` which gets called during + # `from_pretrained` So CLIPTextModel and AutoencoderKL will not enjoy the parameter sharding + # across multiple gpus and only UNet2DConditionModel will get ZeRO sharded. + with ContextManagers(deepspeed_zero_init_disabled_context_manager()): + # Get Text encoder + text_encoder = WanT5EncoderModel.from_pretrained( + os.path.join(args.pretrained_model_name_or_path, config['text_encoder_kwargs'].get('text_encoder_subpath', 'text_encoder')), + additional_kwargs=OmegaConf.to_container(config['text_encoder_kwargs']), + low_cpu_mem_usage=True, + torch_dtype=weight_dtype, + ) + text_encoder = text_encoder.eval() + # Get Vae + vae = AutoencoderKLWan.from_pretrained( + os.path.join(args.pretrained_model_name_or_path, config['vae_kwargs'].get('vae_subpath', 'vae')), + additional_kwargs=OmegaConf.to_container(config['vae_kwargs']), + ) + vae.eval() + + # Get Transformer + sub_path = config['transformer_additional_kwargs'].get('transformer_low_noise_model_subpath', 'transformer') \ + if args.boundary_type == "low" else config['transformer_additional_kwargs'].get('transformer_high_noise_model_subpath', 'transformer') + transformer3d = Wan2_2Transformer3DModel.from_pretrained( + os.path.join(args.pretrained_model_name_or_path, sub_path), + transformer_additional_kwargs=OmegaConf.to_container(config['transformer_additional_kwargs']), + ).to(weight_dtype) + + # Freeze vae and text_encoder and set transformer3d to trainable + vae.requires_grad_(False) + text_encoder.requires_grad_(False) + transformer3d.requires_grad_(False) + + # Lora will work with this... + network = create_network( + 1.0, + args.rank, + args.network_alpha, + text_encoder, + transformer3d, + neuron_dropout=None, + skip_name=args.lora_skip_name, + ) + network.apply_to(text_encoder, transformer3d, args.train_text_encoder and not args.training_with_video_token_length, True) + + if args.transformer_path is not None: + print(f"From checkpoint: {args.transformer_path}") + if args.transformer_path.endswith("safetensors"): + from safetensors.torch import load_file, safe_open + state_dict = load_file(args.transformer_path) + else: + state_dict = torch.load(args.transformer_path, map_location="cpu") + state_dict = state_dict["state_dict"] if "state_dict" in state_dict else state_dict + + m, u = transformer3d.load_state_dict(state_dict, strict=False) + print(f"missing keys: {len(m)}, unexpected keys: {len(u)}") + + if args.vae_path is not None: + print(f"From checkpoint: {args.vae_path}") + if args.vae_path.endswith("safetensors"): + from safetensors.torch import load_file, safe_open + state_dict = load_file(args.vae_path) + else: + state_dict = torch.load(args.vae_path, map_location="cpu") + state_dict = state_dict["state_dict"] if "state_dict" in state_dict else state_dict + + m, u = vae.load_state_dict(state_dict, strict=False) + print(f"missing keys: {len(m)}, unexpected keys: {len(u)}") + + # `accelerate` 0.16.0 will have better support for customized saving + if version.parse(accelerate.__version__) >= version.parse("0.16.0"): + # create custom saving & loading hooks so that `accelerator.save_state(...)` serializes in a nice format + if fsdp_stage != 0: + def save_model_hook(models, weights, output_dir): + accelerate_state_dict = accelerator.get_state_dict(models[-1], unwrap=True) + if accelerator.is_main_process: + from safetensors.torch import save_file + + safetensor_save_path = os.path.join(output_dir, f"lora_diffusion_pytorch_model.safetensors") + network_state_dict = {} + for key in accelerate_state_dict: + if "network" in key: + network_state_dict[key.replace("network.", "")] = accelerate_state_dict[key].to(weight_dtype) + + save_file(network_state_dict, safetensor_save_path, metadata={"format": "pt"}) + + with open(os.path.join(output_dir, "sampler_pos_start.pkl"), 'wb') as file: + pickle.dump([batch_sampler.sampler._pos_start, first_epoch], file) + + def load_model_hook(models, input_dir): + pkl_path = os.path.join(input_dir, "sampler_pos_start.pkl") + if os.path.exists(pkl_path): + with open(pkl_path, 'rb') as file: + loaded_number, _ = pickle.load(file) + batch_sampler.sampler._pos_start = max(loaded_number - args.dataloader_num_workers * accelerator.num_processes * 2, 0) + print(f"Load pkl from {pkl_path}. Get loaded_number = {loaded_number}.") + + elif zero_stage == 3: + def save_model_hook(models, weights, output_dir): + if accelerator.is_main_process: + with open(os.path.join(output_dir, "sampler_pos_start.pkl"), 'wb') as file: + pickle.dump([batch_sampler.sampler._pos_start, first_epoch], file) + + def load_model_hook(models, input_dir): + pkl_path = os.path.join(input_dir, "sampler_pos_start.pkl") + if os.path.exists(pkl_path): + with open(pkl_path, 'rb') as file: + loaded_number, _ = pickle.load(file) + batch_sampler.sampler._pos_start = max(loaded_number - args.dataloader_num_workers * accelerator.num_processes * 2, 0) + print(f"Load pkl from {pkl_path}. Get loaded_number = {loaded_number}.") + else: + def save_model_hook(models, weights, output_dir): + if accelerator.is_main_process: + safetensor_save_path = os.path.join(output_dir, f"lora_diffusion_pytorch_model.safetensors") + save_model(safetensor_save_path, accelerator.unwrap_model(models[-1])) + if not args.use_deepspeed: + for _ in range(len(weights)): + weights.pop() + + with open(os.path.join(output_dir, "sampler_pos_start.pkl"), 'wb') as file: + pickle.dump([batch_sampler.sampler._pos_start, first_epoch], file) + + def load_model_hook(models, input_dir): + pkl_path = os.path.join(input_dir, "sampler_pos_start.pkl") + if os.path.exists(pkl_path): + with open(pkl_path, 'rb') as file: + loaded_number, _ = pickle.load(file) + batch_sampler.sampler._pos_start = max(loaded_number - args.dataloader_num_workers * accelerator.num_processes * 2, 0) + print(f"Load pkl from {pkl_path}. Get loaded_number = {loaded_number}.") + + accelerator.register_save_state_pre_hook(save_model_hook) + accelerator.register_load_state_pre_hook(load_model_hook) + + if args.gradient_checkpointing: + transformer3d.enable_gradient_checkpointing() + + # Enable TF32 for faster training on Ampere GPUs, + # cf https://pytorch.org/docs/stable/notes/cuda.html#tensorfloat-32-tf32-on-ampere-devices + if args.allow_tf32: + torch.backends.cuda.matmul.allow_tf32 = True + + if args.scale_lr: + args.learning_rate = ( + args.learning_rate * args.gradient_accumulation_steps * args.train_batch_size * accelerator.num_processes + ) + + # Initialize the optimizer + if args.use_8bit_adam: + try: + import bitsandbytes as bnb + except ImportError: + raise ImportError( + "Please install bitsandbytes to use 8-bit Adam. You can do so by running `pip install bitsandbytes`" + ) + + optimizer_cls = bnb.optim.AdamW8bit + elif args.use_came: + try: + from came_pytorch import CAME + except: + raise ImportError( + "Please install came_pytorch to use CAME. You can do so by running `pip install came_pytorch`" + ) + + optimizer_cls = CAME + else: + optimizer_cls = torch.optim.AdamW + + logging.info("Add network parameters") + trainable_params = list(filter(lambda p: p.requires_grad, network.parameters())) + trainable_params_optim = network.prepare_optimizer_params(args.learning_rate / 2, args.learning_rate, args.learning_rate) + + if args.use_came: + optimizer = optimizer_cls( + trainable_params_optim, + lr=args.learning_rate, + # weight_decay=args.adam_weight_decay, + betas=(0.9, 0.999, 0.9999), + eps=(1e-30, 1e-16) + ) + else: + optimizer = optimizer_cls( + trainable_params_optim, + lr=args.learning_rate, + betas=(args.adam_beta1, args.adam_beta2), + weight_decay=args.adam_weight_decay, + eps=args.adam_epsilon, + ) + + # Get the training dataset + sample_n_frames_bucket_interval = vae.config.temporal_compression_ratio + + if args.fix_sample_size is not None and args.enable_bucket: + args.video_sample_size = max(max(args.fix_sample_size), args.video_sample_size) + args.image_sample_size = max(max(args.fix_sample_size), args.image_sample_size) + args.training_with_video_token_length = False + args.random_hw_adapt = False + + # Get the dataset + train_dataset = ImageVideoControlDataset( + args.train_data_meta, args.train_data_dir, + video_sample_size=args.video_sample_size, video_sample_stride=args.video_sample_stride, video_sample_n_frames=args.video_sample_n_frames, + video_repeat=args.video_repeat, + image_sample_size=args.image_sample_size, + enable_bucket=args.enable_bucket, + enable_camera_info=args.train_mode == "control_camera_ref" + ) + + def worker_init_fn(_seed): + _seed = _seed * 256 + def _worker_init_fn(worker_id): + print(f"worker_init_fn with {_seed + worker_id}") + np.random.seed(_seed + worker_id) + random.seed(_seed + worker_id) + return _worker_init_fn + + if args.enable_bucket: + aspect_ratio_sample_size = {key : [x / 512 * args.video_sample_size for x in ASPECT_RATIO_512[key]] for key in ASPECT_RATIO_512.keys()} + batch_sampler_generator = torch.Generator().manual_seed(args.seed) + batch_sampler = AspectRatioBatchImageVideoSampler( + sampler=RandomSampler(train_dataset, generator=batch_sampler_generator), dataset=train_dataset.dataset, + batch_size=args.train_batch_size, train_folder = args.train_data_dir, drop_last=True, + aspect_ratios=aspect_ratio_sample_size, + ) + + def collate_fn(examples): + def get_length_to_frame_num(token_length): + if args.image_sample_size > args.video_sample_size: + sample_sizes = list(range(args.video_sample_size, args.image_sample_size + 1, 128)) + + if sample_sizes[-1] != args.image_sample_size: + sample_sizes.append(args.image_sample_size) + else: + sample_sizes = [args.image_sample_size] + + length_to_frame_num = { + sample_size: min(token_length / sample_size / sample_size, args.video_sample_n_frames) // sample_n_frames_bucket_interval * sample_n_frames_bucket_interval + 1 for sample_size in sample_sizes + } + + return length_to_frame_num + + def get_random_downsample_ratio(sample_size, image_ratio=[], + all_choices=False, rng=None): + def _create_special_list(length): + if length == 1: + return [1.0] + if length >= 2: + first_element = 0.90 + remaining_sum = 1.0 - first_element + other_elements_value = remaining_sum / (length - 1) + special_list = [first_element] + [other_elements_value] * (length - 1) + return special_list + + if sample_size >= 1536: + number_list = [1, 1.25, 1.5, 2, 2.5, 3] + image_ratio + elif sample_size >= 1024: + number_list = [1, 1.25, 1.5, 2] + image_ratio + elif sample_size >= 768: + number_list = [1, 1.25, 1.5] + image_ratio + elif sample_size >= 512: + number_list = [1] + image_ratio + else: + number_list = [1] + + if all_choices: + return number_list + + number_list_prob = np.array(_create_special_list(len(number_list))) + if rng is None: + return np.random.choice(number_list, p = number_list_prob) + else: + return rng.choice(number_list, p = number_list_prob) + + # Get token length + target_token_length = args.video_sample_n_frames * args.token_sample_size * args.token_sample_size + length_to_frame_num = get_length_to_frame_num(target_token_length) + + # Create new output + new_examples = {} + new_examples["target_token_length"] = target_token_length + new_examples["pixel_values"] = [] + new_examples["text"] = [] + # Used in Control Mode + new_examples["control_pixel_values"] = [] + # Used in Control Ref Mode + if args.train_mode != "control": + new_examples["ref_pixel_values"] = [] + new_examples["clip_pixel_values"] = [] + new_examples["clip_idx"] = [] + # Used in Control Camera Ref Mode + if args.train_mode == "control_camera_ref": + new_examples["control_camera_values"] = [] + + # Used in Inpaint mode + if args.add_inpaint_info: + new_examples["mask_pixel_values"] = [] + new_examples["mask"] = [] + new_examples["clip_pixel_values"] = [] + + # Get downsample ratio in image and videos + pixel_value = examples[0]["pixel_values"] + data_type = examples[0]["data_type"] + f, h, w, c = np.shape(pixel_value) + if data_type == 'image': + random_downsample_ratio = 1 if not args.random_hw_adapt else get_random_downsample_ratio(args.image_sample_size, image_ratio=[args.image_sample_size / args.video_sample_size]) + + aspect_ratio_sample_size = {key : [x / 512 * args.image_sample_size / random_downsample_ratio for x in ASPECT_RATIO_512[key]] for key in ASPECT_RATIO_512.keys()} + aspect_ratio_random_crop_sample_size = {key : [x / 512 * args.image_sample_size / random_downsample_ratio for x in ASPECT_RATIO_RANDOM_CROP_512[key]] for key in ASPECT_RATIO_RANDOM_CROP_512.keys()} + + batch_video_length = args.video_sample_n_frames + sample_n_frames_bucket_interval + else: + if args.random_hw_adapt: + if args.training_with_video_token_length: + local_min_size = np.min(np.array([np.mean(np.array([np.shape(example["pixel_values"])[1], np.shape(example["pixel_values"])[2]])) for example in examples])) + + def get_random_downsample_probability(choice_list, token_sample_size): + length = len(choice_list) + if length == 1: + return [1.0] # If there's only one element, it gets all the probability + + # Find the index of the closest value to token_sample_size + closest_index = min(range(length), key=lambda i: abs(choice_list[i] - token_sample_size)) + + # Assign 50% to the closest index + first_element = 0.50 + remaining_sum = 1.0 - first_element + + # Distribute the remaining 50% evenly among the other elements + other_elements_value = remaining_sum / (length - 1) if length > 1 else 0.0 + + # Construct the probability distribution + probability_list = [other_elements_value] * length + probability_list[closest_index] = first_element + + return probability_list + + choice_list = [length for length in list(length_to_frame_num.keys()) if length < local_min_size * 1.25] + if len(choice_list) == 0: + choice_list = list(length_to_frame_num.keys()) + probabilities = get_random_downsample_probability(choice_list, args.token_sample_size) + local_video_sample_size = np.random.choice(choice_list, p=probabilities) + + random_downsample_ratio = args.video_sample_size / local_video_sample_size + batch_video_length = length_to_frame_num[local_video_sample_size] + else: + random_downsample_ratio = get_random_downsample_ratio(args.video_sample_size) + batch_video_length = args.video_sample_n_frames + sample_n_frames_bucket_interval + else: + random_downsample_ratio = 1 + batch_video_length = args.video_sample_n_frames + sample_n_frames_bucket_interval + + aspect_ratio_sample_size = {key : [x / 512 * args.video_sample_size / random_downsample_ratio for x in ASPECT_RATIO_512[key]] for key in ASPECT_RATIO_512.keys()} + aspect_ratio_random_crop_sample_size = {key : [x / 512 * args.video_sample_size / random_downsample_ratio for x in ASPECT_RATIO_RANDOM_CROP_512[key]] for key in ASPECT_RATIO_RANDOM_CROP_512.keys()} + + if args.fix_sample_size is not None: + fix_sample_size = [int(x / 16) * 16 for x in args.fix_sample_size] + elif args.random_ratio_crop: + if rng is None: + random_sample_size = aspect_ratio_random_crop_sample_size[ + np.random.choice(list(aspect_ratio_random_crop_sample_size.keys()), p = ASPECT_RATIO_RANDOM_CROP_PROB) + ] + else: + random_sample_size = aspect_ratio_random_crop_sample_size[ + rng.choice(list(aspect_ratio_random_crop_sample_size.keys()), p = ASPECT_RATIO_RANDOM_CROP_PROB) + ] + random_sample_size = [int(x / 16) * 16 for x in random_sample_size] + else: + closest_size, closest_ratio = get_closest_ratio(h, w, ratios=aspect_ratio_sample_size) + closest_size = [int(x / 16) * 16 for x in closest_size] + + for example in examples: + # To 0~1 + pixel_values = torch.from_numpy(example["pixel_values"]).permute(0, 3, 1, 2).contiguous() + pixel_values = pixel_values / 255. + + control_pixel_values = torch.from_numpy(example["control_pixel_values"]).permute(0, 3, 1, 2).contiguous() + control_pixel_values = control_pixel_values / 255. + + if args.fix_sample_size is not None: + # Get adapt hw for resize + fix_sample_size = list(map(lambda x: int(x), fix_sample_size)) + transform = transforms.Compose([ + transforms.Resize(fix_sample_size, interpolation=transforms.InterpolationMode.BILINEAR), # Image.BICUBIC + transforms.CenterCrop(fix_sample_size), + transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5], inplace=True), + ]) + + transform_no_normalize = transforms.Compose([ + transforms.Resize(fix_sample_size, interpolation=transforms.InterpolationMode.BILINEAR), # Image.BICUBIC + transforms.CenterCrop(fix_sample_size), + ]) + elif args.random_ratio_crop: + # Get adapt hw for resize + b, c, h, w = pixel_values.size() + th, tw = random_sample_size + if th / tw > h / w: + nh = int(th) + nw = int(w / h * nh) + else: + nw = int(tw) + nh = int(h / w * nw) + + transform = transforms.Compose([ + transforms.Resize([nh, nw]), + transforms.CenterCrop([int(x) for x in random_sample_size]), + transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5], inplace=True), + ]) + + transform_no_normalize = transforms.Compose([ + transforms.Resize([nh, nw]), + transforms.CenterCrop([int(x) for x in random_sample_size]), + ]) + else: + # Get adapt hw for resize + closest_size = list(map(lambda x: int(x), closest_size)) + if closest_size[0] / h > closest_size[1] / w: + resize_size = closest_size[0], int(w * closest_size[0] / h) + else: + resize_size = int(h * closest_size[1] / w), closest_size[1] + + transform = transforms.Compose([ + transforms.Resize(resize_size, interpolation=transforms.InterpolationMode.BILINEAR), # Image.BICUBIC + transforms.CenterCrop(closest_size), + transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5], inplace=True), + ]) + + transform_no_normalize = transforms.Compose([ + transforms.Resize(resize_size, interpolation=transforms.InterpolationMode.BILINEAR), # Image.BICUBIC + transforms.CenterCrop(closest_size), + ]) + + new_examples["pixel_values"].append(transform(pixel_values)) + new_examples["control_pixel_values"].append(transform(control_pixel_values)) + + if args.train_mode == "control_camera_ref": + control_camera_values = example.get("control_camera_values", None) + if control_camera_values is None: + control_camera_values_size = ( + new_examples["control_pixel_values"][-1].size()[0], + 6, + new_examples["control_pixel_values"][-1].size()[2], + new_examples["control_pixel_values"][-1].size()[3] + ) + local_control_camera_values = torch.zeros(control_camera_values_size) + new_examples["control_camera_values"].append(local_control_camera_values) + else: + local_control_camera_values = process_pose_params(example["control_camera_values"], height=resize_size[0], width=resize_size[1]).permute(0, 3, 1, 2).contiguous() + new_examples["control_camera_values"].append(transform_no_normalize(local_control_camera_values)) + + new_examples["text"].append(example["text"]) + # Magvae needs the number of frames to be 4n + 1. + batch_video_length = int( + min( + batch_video_length, + (len(pixel_values) - 1) // sample_n_frames_bucket_interval * sample_n_frames_bucket_interval + 1, + ) + ) + if batch_video_length == 0: + batch_video_length = 1 + + if args.train_mode != "control": + if args.control_ref_image == "first_frame": + clip_index = 0 + else: + def _create_special_list(length): + if length == 1: + return [1.0] + if length >= 2: + first_element = 0.40 + remaining_sum = 1.0 - first_element + other_elements_value = remaining_sum / (length - 1) + special_list = [first_element] + [other_elements_value] * (length - 1) + return special_list + number_list_prob = np.array(_create_special_list(len(new_examples["pixel_values"][-1]))) + clip_index = np.random.choice(list(range(len(new_examples["pixel_values"][-1]))), p = number_list_prob) + new_examples["clip_idx"].append(clip_index) + + ref_pixel_values = new_examples["pixel_values"][-1][clip_index].unsqueeze(0) + new_examples["ref_pixel_values"].append(ref_pixel_values) + + clip_pixel_values = new_examples["pixel_values"][-1][clip_index].permute(1, 2, 0).contiguous() + clip_pixel_values = (clip_pixel_values * 0.5 + 0.5) * 255 + new_examples["clip_pixel_values"].append(clip_pixel_values) + + if args.add_inpaint_info: + mask = get_random_mask(new_examples["pixel_values"][-1].size()) + mask_pixel_values = new_examples["pixel_values"][-1] * (1 - mask) + # Wan 2.1 use 0 for masked pixels + # + torch.ones_like(new_examples["pixel_values"][-1]) * -1 * mask + new_examples["mask_pixel_values"].append(mask_pixel_values) + new_examples["mask"].append(mask) + + # Limit the number of frames to the same + new_examples["pixel_values"] = torch.stack([example[:batch_video_length] for example in new_examples["pixel_values"]]) + new_examples["control_pixel_values"] = torch.stack([example[:batch_video_length] for example in new_examples["control_pixel_values"]]) + if args.train_mode != "control": + new_examples["ref_pixel_values"] = torch.stack([example[:batch_video_length] for example in new_examples["ref_pixel_values"]]) + new_examples["clip_pixel_values"] = torch.stack([example for example in new_examples["clip_pixel_values"]]) + new_examples["clip_idx"] = torch.tensor(new_examples["clip_idx"]) + if args.train_mode == "control_camera_ref": + new_examples["control_camera_values"] = torch.stack([example[:batch_video_length] for example in new_examples["control_camera_values"]]) + if args.add_inpaint_info: + new_examples["mask_pixel_values"] = torch.stack([example[:batch_video_length] for example in new_examples["mask_pixel_values"]]) + new_examples["mask"] = torch.stack([example[:batch_video_length] for example in new_examples["mask"]]) + + # Encode prompts when enable_text_encoder_in_dataloader=True + if args.enable_text_encoder_in_dataloader: + prompt_ids = tokenizer( + new_examples['text'], + max_length=args.tokenizer_max_length, + padding="max_length", + add_special_tokens=True, + truncation=True, + return_tensors="pt" + ) + encoder_hidden_states = text_encoder( + prompt_ids.input_ids + )[0] + new_examples['encoder_attention_mask'] = prompt_ids.attention_mask + new_examples['encoder_hidden_states'] = encoder_hidden_states + + return new_examples + + # DataLoaders creation: + train_dataloader = torch.utils.data.DataLoader( + train_dataset, + batch_sampler=batch_sampler, + collate_fn=collate_fn, + persistent_workers=True if args.dataloader_num_workers != 0 else False, + num_workers=args.dataloader_num_workers, + worker_init_fn=worker_init_fn(args.seed + accelerator.process_index) + ) + else: + # DataLoaders creation: + batch_sampler_generator = torch.Generator().manual_seed(args.seed) + batch_sampler = ImageVideoSampler(RandomSampler(train_dataset, generator=batch_sampler_generator), train_dataset, args.train_batch_size) + train_dataloader = torch.utils.data.DataLoader( + train_dataset, + batch_sampler=batch_sampler, + persistent_workers=True if args.dataloader_num_workers != 0 else False, + num_workers=args.dataloader_num_workers, + worker_init_fn=worker_init_fn(args.seed + accelerator.process_index) + ) + + # Scheduler and math around the number of training steps. + overrode_max_train_steps = False + num_update_steps_per_epoch = math.ceil(len(train_dataloader) / args.gradient_accumulation_steps) + if args.max_train_steps is None: + args.max_train_steps = args.num_train_epochs * num_update_steps_per_epoch + overrode_max_train_steps = True + + lr_scheduler = get_scheduler( + args.lr_scheduler, + optimizer=optimizer, + num_warmup_steps=args.lr_warmup_steps * accelerator.num_processes, + num_training_steps=args.max_train_steps * accelerator.num_processes, + ) + + # Prepare everything with our `accelerator`. + if fsdp_stage != 0: + transformer3d.network = network + transformer3d = transformer3d.to(weight_dtype) + transformer3d, optimizer, train_dataloader, lr_scheduler = accelerator.prepare( + transformer3d, optimizer, train_dataloader, lr_scheduler + ) + else: + network, optimizer, train_dataloader, lr_scheduler = accelerator.prepare( + network, optimizer, train_dataloader, lr_scheduler + ) + + if zero_stage == 3: + from functools import partial + + from videox_fun.dist import set_multi_gpus_devices, shard_model + shard_fn = partial(shard_model, device_id=accelerator.device, param_dtype=weight_dtype) + transformer3d = shard_fn(transformer3d) + + if fsdp_stage != 0: + from functools import partial + + from videox_fun.dist import set_multi_gpus_devices, shard_model + shard_fn = partial(shard_model, device_id=accelerator.device, param_dtype=weight_dtype) + text_encoder = shard_fn(text_encoder) + + # Move text_encode and vae to gpu and cast to weight_dtype + vae.to(accelerator.device, dtype=weight_dtype) + transformer3d.to(accelerator.device, dtype=weight_dtype) + if not args.enable_text_encoder_in_dataloader: + text_encoder.to(accelerator.device) + + # We need to recalculate our total training steps as the size of the training dataloader may have changed. + num_update_steps_per_epoch = math.ceil(len(train_dataloader) / args.gradient_accumulation_steps) + if overrode_max_train_steps: + args.max_train_steps = args.num_train_epochs * num_update_steps_per_epoch + # Afterwards we recalculate our number of training epochs + args.num_train_epochs = math.ceil(args.max_train_steps / num_update_steps_per_epoch) + + # We need to initialize the trackers we use, and also store our configuration. + # The trackers initializes automatically on the main process. + if accelerator.is_main_process: + tracker_config = dict(vars(args)) + tracker_config.pop("validation_prompts") + tracker_config.pop("fix_sample_size") + accelerator.init_trackers(args.tracker_project_name, tracker_config) + + # Function for unwrapping if model was compiled with `torch.compile`. + def unwrap_model(model): + model = accelerator.unwrap_model(model) + model = model._orig_mod if is_compiled_module(model) else model + return model + + # Train! + total_batch_size = args.train_batch_size * accelerator.num_processes * args.gradient_accumulation_steps + + logger.info("***** Running training *****") + logger.info(f" Num examples = {len(train_dataset)}") + logger.info(f" Num Epochs = {args.num_train_epochs}") + logger.info(f" Instantaneous batch size per device = {args.train_batch_size}") + logger.info(f" Total train batch size (w. parallel, distributed & accumulation) = {total_batch_size}") + logger.info(f" Gradient Accumulation steps = {args.gradient_accumulation_steps}") + logger.info(f" Total optimization steps = {args.max_train_steps}") + global_step = 0 + first_epoch = 0 + + # Potentially load in the weights and states from a previous save + if args.resume_from_checkpoint: + if args.resume_from_checkpoint != "latest": + path = os.path.basename(args.resume_from_checkpoint) + else: + # Get the most recent checkpoint + dirs = os.listdir(args.output_dir) + dirs = [d for d in dirs if d.startswith("checkpoint")] + dirs = sorted(dirs, key=lambda x: int(x.split("-")[1])) + path = dirs[-1] if len(dirs) > 0 else None + + if path is None: + accelerator.print( + f"Checkpoint '{args.resume_from_checkpoint}' does not exist. Starting a new training run." + ) + args.resume_from_checkpoint = None + initial_global_step = 0 + else: + global_step = int(path.split("-")[1]) + + initial_global_step = global_step + + checkpoint_folder_path = os.path.join(args.output_dir, path) + pkl_path = os.path.join(checkpoint_folder_path, "sampler_pos_start.pkl") + if os.path.exists(pkl_path): + with open(pkl_path, 'rb') as file: + _, first_epoch = pickle.load(file) + else: + first_epoch = global_step // num_update_steps_per_epoch + print(f"Load pkl from {pkl_path}. Get first_epoch = {first_epoch}.") + + if zero_stage != 3 and not args.use_fsdp: + from safetensors.torch import load_file + state_dict = load_file(os.path.join(checkpoint_folder_path, "lora_diffusion_pytorch_model.safetensors"), device=str(accelerator.device)) + m, u = accelerator.unwrap_model(network).load_state_dict(state_dict, strict=False) + print(f"missing keys: {len(m)}, unexpected keys: {len(u)}") + + optimizer_file_pt = os.path.join(checkpoint_folder_path, "optimizer.pt") + optimizer_file_bin = os.path.join(checkpoint_folder_path, "optimizer.bin") + optimizer_file_to_load = None + + if os.path.exists(optimizer_file_pt): + optimizer_file_to_load = optimizer_file_pt + elif os.path.exists(optimizer_file_bin): + optimizer_file_to_load = optimizer_file_bin + + if optimizer_file_to_load: + try: + accelerator.print(f"Loading optimizer state from {optimizer_file_to_load}") + optimizer_state = torch.load(optimizer_file_to_load, map_location=accelerator.device) + optimizer.load_state_dict(optimizer_state) + accelerator.print("Optimizer state loaded successfully.") + except Exception as e: + accelerator.print(f"Failed to load optimizer state from {optimizer_file_to_load}: {e}") + + scheduler_file_pt = os.path.join(checkpoint_folder_path, "scheduler.pt") + scheduler_file_bin = os.path.join(checkpoint_folder_path, "scheduler.bin") + scheduler_file_to_load = None + + if os.path.exists(scheduler_file_pt): + scheduler_file_to_load = scheduler_file_pt + elif os.path.exists(scheduler_file_bin): + scheduler_file_to_load = scheduler_file_bin + + if scheduler_file_to_load: + try: + accelerator.print(f"Loading scheduler state from {scheduler_file_to_load}") + scheduler_state = torch.load(scheduler_file_to_load, map_location=accelerator.device) + lr_scheduler.load_state_dict(scheduler_state) + accelerator.print("Scheduler state loaded successfully.") + except Exception as e: + accelerator.print(f"Failed to load scheduler state from {scheduler_file_to_load}: {e}") + + if hasattr(accelerator, 'scaler') and accelerator.scaler is not None: + scaler_file = os.path.join(checkpoint_folder_path, "scaler.pt") + if os.path.exists(scaler_file): + try: + accelerator.print(f"Loading GradScaler state from {scaler_file}") + scaler_state = torch.load(scaler_file, map_location=accelerator.device) + accelerator.scaler.load_state_dict(scaler_state) + accelerator.print("GradScaler state loaded successfully.") + except Exception as e: + accelerator.print(f"Failed to load GradScaler state: {e}") + + else: + accelerator.load_state(checkpoint_folder_path) + accelerator.print("accelerator.load_state() completed for zero_stage 3.") + + else: + initial_global_step = 0 + + # function for saving/removing + def save_model(ckpt_file, unwrapped_nw): + os.makedirs(args.output_dir, exist_ok=True) + accelerator.print(f"\nsaving checkpoint: {ckpt_file}") + unwrapped_nw.save_weights(ckpt_file, weight_dtype, None) + + progress_bar = tqdm( + range(0, args.max_train_steps), + initial=initial_global_step, + desc="Steps", + # Only show the progress bar once on each machine. + disable=not accelerator.is_local_main_process, + ) + + if args.multi_stream and args.train_mode != "normal": + # create extra cuda streams to speedup inpaint vae computation + vae_stream_1 = torch.cuda.Stream() + else: + vae_stream_1 = None + + # Calculate the index we need + boundary = config['transformer_additional_kwargs'].get('boundary', 0.900) + split_timesteps = args.train_sampling_steps * boundary + differences = torch.abs(noise_scheduler.timesteps - split_timesteps) + closest_index = torch.argmin(differences).item() + print(f"The boundary is {boundary} and the boundary_type is {args.boundary_type}. The closest_index we calculate is {closest_index}") + if args.boundary_type == "high": + start_num_idx = 0 + train_sampling_steps = closest_index + elif args.boundary_type == "low": + start_num_idx = closest_index + train_sampling_steps = args.train_sampling_steps - closest_index + else: + start_num_idx = 0 + train_sampling_steps = args.train_sampling_steps + idx_sampling = DiscreteSampling(train_sampling_steps, start_num_idx=start_num_idx, uniform_sampling=args.uniform_sampling) + + for epoch in range(first_epoch, args.num_train_epochs): + train_loss = 0.0 + batch_sampler.sampler.generator = torch.Generator().manual_seed(args.seed + epoch) + for step, batch in enumerate(train_dataloader): + # Data batch sanity check + if epoch == first_epoch and step == 0: + pixel_values, texts = batch['pixel_values'].cpu(), batch['text'] + control_pixel_values = batch["control_pixel_values"].cpu() + pixel_values = rearrange(pixel_values, "b f c h w -> b c f h w") + control_pixel_values = rearrange(control_pixel_values, "b f c h w -> b c f h w") + os.makedirs(os.path.join(args.output_dir, "sanity_check"), exist_ok=True) + for idx, (pixel_value, control_pixel_value, text) in enumerate(zip(pixel_values, control_pixel_values, texts)): + pixel_value = pixel_value[None, ...] + control_pixel_value = control_pixel_value[None, ...] + gif_name = '-'.join(text.replace('/', '').split()[:10]) if not text == '' else f'{global_step}-{idx}' + save_videos_grid(pixel_value, f"{args.output_dir}/sanity_check/{gif_name[:10]}.gif", rescale=True) + save_videos_grid(control_pixel_value, f"{args.output_dir}/sanity_check/{gif_name[:10]}_control.gif", rescale=True) + + if args.train_mode != "control": + ref_pixel_values = batch["ref_pixel_values"].cpu() + ref_pixel_values = rearrange(ref_pixel_values, "b f c h w -> b c f h w") + for idx, (ref_pixel_value, text) in enumerate(zip(ref_pixel_values, texts)): + ref_pixel_value = ref_pixel_value[None, ...] + gif_name = '-'.join(text.replace('/', '').split()[:10]) if not text == '' else f'{global_step}-{idx}' + save_videos_grid(ref_pixel_value, f"{args.output_dir}/sanity_check/{gif_name[:10]}_ref.gif", rescale=True) + + if args.add_inpaint_info: + clip_pixel_values, mask_pixel_values, texts = batch['clip_pixel_values'].cpu(), batch['mask_pixel_values'].cpu(), batch['text'] + mask_pixel_values = rearrange(mask_pixel_values, "b f c h w -> b c f h w") + for idx, (clip_pixel_value, pixel_value, text) in enumerate(zip(clip_pixel_values, mask_pixel_values, texts)): + pixel_value = pixel_value[None, ...] + Image.fromarray(np.uint8(clip_pixel_value)).save(f"{args.output_dir}/sanity_check/clip_{gif_name[:10] if not text == '' else f'{global_step}-{idx}'}.png") + save_videos_grid(pixel_value, f"{args.output_dir}/sanity_check/mask_{gif_name[:10] if not text == '' else f'{global_step}-{idx}'}.gif", rescale=True) + + with accelerator.accumulate(transformer3d): + # Convert images to latent space + pixel_values = batch["pixel_values"].to(weight_dtype) + control_pixel_values = batch["control_pixel_values"].to(weight_dtype) + if args.train_mode == "control_camera_ref": + control_camera_values = batch["control_camera_values"].to(weight_dtype) + + # Increase the batch size when the length of the latent sequence of the current sample is small + if args.training_with_video_token_length and not zero_stage == 3: + if args.video_sample_n_frames * args.token_sample_size * args.token_sample_size // 16 >= pixel_values.size()[1] * pixel_values.size()[3] * pixel_values.size()[4]: + pixel_values = torch.tile(pixel_values, (4, 1, 1, 1, 1)) + control_pixel_values = torch.tile(control_pixel_values, (4, 1, 1, 1, 1)) + if args.train_mode == "control_camera_ref": + control_camera_values = torch.tile(control_camera_values, (4, 1, 1, 1, 1)) + if args.enable_text_encoder_in_dataloader: + batch['encoder_hidden_states'] = torch.tile(batch['encoder_hidden_states'], (4, 1, 1)) + batch['encoder_attention_mask'] = torch.tile(batch['encoder_attention_mask'], (4, 1)) + else: + batch['text'] = batch['text'] * 4 + elif args.video_sample_n_frames * args.token_sample_size * args.token_sample_size // 4 >= pixel_values.size()[1] * pixel_values.size()[3] * pixel_values.size()[4]: + pixel_values = torch.tile(pixel_values, (2, 1, 1, 1, 1)) + control_pixel_values = torch.tile(control_pixel_values, (2, 1, 1, 1, 1)) + if args.train_mode == "control_camera_ref": + control_camera_values = torch.tile(control_camera_values, (2, 1, 1, 1, 1)) + if args.enable_text_encoder_in_dataloader: + batch['encoder_hidden_states'] = torch.tile(batch['encoder_hidden_states'], (2, 1, 1)) + batch['encoder_attention_mask'] = torch.tile(batch['encoder_attention_mask'], (2, 1)) + else: + batch['text'] = batch['text'] * 2 + + if args.train_mode != "control": + ref_pixel_values = batch["ref_pixel_values"].to(weight_dtype) + clip_idx = batch["clip_idx"] + # Increase the batch size when the length of the latent sequence of the current sample is small + if args.training_with_video_token_length and not zero_stage == 3: + if args.video_sample_n_frames * args.token_sample_size * args.token_sample_size // 16 >= pixel_values.size()[1] * pixel_values.size()[3] * pixel_values.size()[4]: + ref_pixel_values = torch.tile(ref_pixel_values, (4, 1, 1, 1, 1)) + clip_idx = torch.tile(clip_idx, (4,)) + elif args.video_sample_n_frames * args.token_sample_size * args.token_sample_size // 4 >= pixel_values.size()[1] * pixel_values.size()[3] * pixel_values.size()[4]: + ref_pixel_values = torch.tile(ref_pixel_values, (2, 1, 1, 1, 1)) + clip_idx = torch.tile(clip_idx, (2,)) + + if args.add_inpaint_info: + mask_pixel_values = batch["mask_pixel_values"].to(weight_dtype) + mask = batch["mask"].to(weight_dtype) + # Increase the batch size when the length of the latent sequence of the current sample is small + if args.training_with_video_token_length and not zero_stage == 3: + if args.video_sample_n_frames * args.token_sample_size * args.token_sample_size // 16 >= pixel_values.size()[1] * pixel_values.size()[3] * pixel_values.size()[4]: + mask_pixel_values = torch.tile(mask_pixel_values, (4, 1, 1, 1, 1)) + mask = torch.tile(mask, (4, 1, 1, 1, 1)) + elif args.video_sample_n_frames * args.token_sample_size * args.token_sample_size // 4 >= pixel_values.size()[1] * pixel_values.size()[3] * pixel_values.size()[4]: + mask_pixel_values = torch.tile(mask_pixel_values, (2, 1, 1, 1, 1)) + mask = torch.tile(mask, (2, 1, 1, 1, 1)) + + if args.random_frame_crop: + def _create_special_list(length): + if length == 1: + return [1.0] + if length >= 2: + last_element = 0.90 + remaining_sum = 1.0 - last_element + other_elements_value = remaining_sum / (length - 1) + special_list = [other_elements_value] * (length - 1) + [last_element] + return special_list + select_frames = [_tmp for _tmp in list(range(sample_n_frames_bucket_interval + 1, args.video_sample_n_frames + sample_n_frames_bucket_interval, sample_n_frames_bucket_interval))] + select_frames_prob = np.array(_create_special_list(len(select_frames))) + + if len(select_frames) != 0: + if rng is None: + temp_n_frames = np.random.choice(select_frames, p = select_frames_prob) + else: + temp_n_frames = rng.choice(select_frames, p = select_frames_prob) + else: + temp_n_frames = 1 + + # Magvae needs the number of frames to be 4n + 1. + temp_n_frames = (temp_n_frames - 1) // sample_n_frames_bucket_interval + 1 + + pixel_values = pixel_values[:, :temp_n_frames, :, :] + control_pixel_values = control_pixel_values[:, :temp_n_frames, :, :] + + # Keep all node same token length to accelerate the traning when resolution grows. + if args.keep_all_node_same_token_length: + if args.token_sample_size > 256: + numbers_list = list(range(256, args.token_sample_size + 1, 128)) + + if numbers_list[-1] != args.token_sample_size: + numbers_list.append(args.token_sample_size) + else: + numbers_list = [256] + numbers_list = [_number * _number * args.video_sample_n_frames for _number in numbers_list] + + actual_token_length = index_rng.choice(numbers_list) + actual_video_length = (min( + actual_token_length / pixel_values.size()[-1] / pixel_values.size()[-2], args.video_sample_n_frames + ) - 1) // sample_n_frames_bucket_interval * sample_n_frames_bucket_interval + 1 + actual_video_length = int(max(actual_video_length, 1)) + + # Magvae needs the number of frames to be 4n + 1. + actual_video_length = (actual_video_length - 1) // sample_n_frames_bucket_interval + 1 + + pixel_values = pixel_values[:, :actual_video_length, :, :] + control_pixel_values = control_pixel_values[:, :actual_video_length, :, :] + + if args.low_vram: + torch.cuda.empty_cache() + vae.to(accelerator.device) + if not args.enable_text_encoder_in_dataloader: + text_encoder.to("cpu") + + with torch.no_grad(): + # This way is quicker when batch grows up + def _batch_encode_vae(pixel_values): + pixel_values = rearrange(pixel_values, "b f c h w -> b c f h w") + bs = args.vae_mini_batch + new_pixel_values = [] + for i in range(0, pixel_values.shape[0], bs): + pixel_values_bs = pixel_values[i : i + bs] + pixel_values_bs = vae.encode(pixel_values_bs)[0] + pixel_values_bs = pixel_values_bs.sample() + new_pixel_values.append(pixel_values_bs) + return torch.cat(new_pixel_values, dim = 0) + if vae_stream_1 is not None: + vae_stream_1.wait_stream(torch.cuda.current_stream()) + with torch.cuda.stream(vae_stream_1): + latents = _batch_encode_vae(pixel_values) + else: + latents = _batch_encode_vae(pixel_values) + + if args.train_mode != "control_camera_ref": + control_latents = _batch_encode_vae(control_pixel_values) + # Make control latents to zero + for bs_index in range(control_latents.size()[0]): + if rng is None: + zero_init_control_latents_conv_in = np.random.choice([0, 1], p = [0.90, 0.10]) + else: + zero_init_control_latents_conv_in = rng.choice([0, 1], p = [0.90, 0.10]) + + if zero_init_control_latents_conv_in: + control_latents[bs_index] = control_latents[bs_index] * 0 + control_camera_latents = None + else: + control_latents = None + control_camera_latents = rearrange(control_camera_values, "b f c h w -> b c f h w") + control_camera_latents = torch.concat( + [ + torch.repeat_interleave(control_camera_latents[:, :, 0:1], repeats=4, dim=2), + control_camera_latents[:, :, 1:] + ], dim=2 + ).transpose(1, 2).contiguous() + control_camera_latents = control_camera_latents.view(control_camera_latents.shape[0], control_camera_latents.shape[1] // 4, 4, control_camera_latents.shape[2], control_camera_latents.shape[3], control_camera_latents.shape[4]) + control_camera_latents = control_camera_latents.transpose(2, 3).contiguous() + control_camera_latents = control_camera_latents.view(control_camera_latents.shape[0], control_camera_latents.shape[1], control_camera_latents.shape[2] * 4, control_camera_latents.shape[4], control_camera_latents.shape[5]) + control_camera_latents = control_camera_latents.transpose(1, 2) + + if args.train_mode != "control": + ref_latents = _batch_encode_vae(ref_pixel_values) + if args.add_full_ref_image_in_self_attention: + full_ref = ref_latents[:, :, 0].clone() + + ref_latents_conv_in = torch.zeros_like(latents).to(ref_latents.device, ref_latents.dtype) + ref_latents_conv_in[:, :, :1] = ref_latents + for bs_index in range(ref_latents.size()[0]): + if rng is None: + zero_init_ref_latents_conv_in = np.random.choice([0, 1], p = [0.90, 0.10]) + else: + zero_init_ref_latents_conv_in = rng.choice([0, 1], p = [0.90, 0.10]) + + if clip_idx[bs_index] != 0 or (zero_init_ref_latents_conv_in and latents.size()[1] != 1): + ref_latents_conv_in[bs_index, :, :1] = ref_latents_conv_in[bs_index, :, :1] * 0 + + if args.add_full_ref_image_in_self_attention: + if rng is None: + zero_init_full_ref_conv_in = np.random.choice([0, 1], p = [0.90, 0.10]) + else: + zero_init_full_ref_conv_in = rng.choice([0, 1], p = [0.90, 0.10]) + if clip_idx[bs_index] == 0 or zero_init_full_ref_conv_in: + full_ref[bs_index] = full_ref[bs_index] * 0 + + if args.add_inpaint_info: + t2v_flag = [(_mask == 1).all() for _mask in mask] + new_t2v_flag = [] + for _mask in t2v_flag: + if _mask and np.random.rand() < 0.90: + new_t2v_flag.append(0) + else: + new_t2v_flag.append(1) + t2v_flag = torch.from_numpy(np.array(new_t2v_flag)).to(accelerator.device, dtype=weight_dtype) + + mask = rearrange(mask, "b f c h w -> b c f h w") + mask = torch.concat( + [ + torch.repeat_interleave(mask[:, :, 0:1], repeats=4, dim=2), + mask[:, :, 1:] + ], dim=2 + ) + mask = mask.view(mask.shape[0], mask.shape[2] // 4, 4, mask.shape[3], mask.shape[4]) + mask = mask.transpose(1, 2) + mask = resize_mask(1 - mask, latents) + + # Encode inpaint latents. + mask_latents = _batch_encode_vae(mask_pixel_values) + + inpaint_latents = torch.concat([mask, mask_latents], dim=1) + inpaint_latents = t2v_flag[:, None, None, None, None] * inpaint_latents + else: + inpaint_latents = None + + if control_latents is None: + if inpaint_latents is None: + control_latents = ref_latents_conv_in + else: + control_latents = inpaint_latents + else: + if inpaint_latents is None: + control_latents = torch.cat([control_latents, ref_latents_conv_in], dim = 1) + else: + control_latents = torch.cat([control_latents, inpaint_latents], dim = 1) + + # wait for latents = vae.encode(pixel_values) to complete + if vae_stream_1 is not None: + torch.cuda.current_stream().wait_stream(vae_stream_1) + + if args.low_vram: + vae.to('cpu') + torch.cuda.empty_cache() + if not args.enable_text_encoder_in_dataloader: + text_encoder.to(accelerator.device) + + if args.enable_text_encoder_in_dataloader: + prompt_embeds = batch['encoder_hidden_states'].to(device=latents.device) + else: + with torch.no_grad(): + prompt_ids = tokenizer( + batch['text'], + padding="max_length", + max_length=args.tokenizer_max_length, + truncation=True, + add_special_tokens=True, + return_tensors="pt" + ) + text_input_ids = prompt_ids.input_ids + prompt_attention_mask = prompt_ids.attention_mask + + seq_lens = prompt_attention_mask.gt(0).sum(dim=1).long() + prompt_embeds = text_encoder(text_input_ids.to(latents.device), attention_mask=prompt_attention_mask.to(latents.device))[0] + prompt_embeds = [u[:v] for u, v in zip(prompt_embeds, seq_lens)] + + if args.low_vram and not args.enable_text_encoder_in_dataloader: + text_encoder.to('cpu') + torch.cuda.empty_cache() + + bsz, channel, num_frames, height, width = latents.size() + noise = torch.randn(latents.size(), device=latents.device, generator=torch_rng, dtype=weight_dtype) + + if not args.uniform_sampling: + u = compute_density_for_timestep_sampling( + weighting_scheme=args.weighting_scheme, + batch_size=bsz, + logit_mean=args.logit_mean, + logit_std=args.logit_std, + mode_scale=args.mode_scale, + ) + indices = (u * noise_scheduler.config.num_train_timesteps).long() + else: + # Sample a random timestep for each image + # timesteps = generate_timestep_with_lognorm(0, args.train_sampling_steps, (bsz,), device=latents.device, generator=torch_rng) + # timesteps = torch.randint(0, args.train_sampling_steps, (bsz,), device=latents.device, generator=torch_rng) + indices = idx_sampling(bsz, generator=torch_rng, device=latents.device) + indices = indices.long().cpu() + timesteps = noise_scheduler.timesteps[indices].to(device=latents.device) + + def get_sigmas(timesteps, n_dim=4, dtype=torch.float32): + sigmas = noise_scheduler.sigmas.to(device=accelerator.device, dtype=dtype) + schedule_timesteps = noise_scheduler.timesteps.to(accelerator.device) + timesteps = timesteps.to(accelerator.device) + step_indices = [(schedule_timesteps == t).nonzero().item() for t in timesteps] + + sigma = sigmas[step_indices].flatten() + while len(sigma.shape) < n_dim: + sigma = sigma.unsqueeze(-1) + return sigma + + # Add noise according to flow matching. + # zt = (1 - texp) * x + texp * z1 + sigmas = get_sigmas(timesteps, n_dim=latents.ndim, dtype=latents.dtype) + noisy_latents = (1.0 - sigmas) * latents + sigmas * noise + + # Add noise + target = noise - latents + + target_shape = (vae.latent_channels, num_frames, width, height) + seq_len = math.ceil( + (target_shape[2] * target_shape[3]) / + (accelerator.unwrap_model(transformer3d).config.patch_size[1] * accelerator.unwrap_model(transformer3d).config.patch_size[2]) * + target_shape[1] + ) + + # Predict the noise residual + with torch.cuda.amp.autocast(dtype=weight_dtype), torch.cuda.device(device=accelerator.device): + noise_pred = transformer3d( + x=noisy_latents, + context=prompt_embeds, + t=timesteps, + seq_len=seq_len, + y=control_latents if args.train_mode != "control" else None, + y_camera=control_camera_latents if args.train_mode == "control_camera_ref" else None, + full_ref=full_ref if args.add_full_ref_image_in_self_attention else None, + ) + + def custom_mse_loss(noise_pred, target, weighting=None, threshold=50): + noise_pred = noise_pred.float() + target = target.float() + diff = noise_pred - target + mse_loss = F.mse_loss(noise_pred, target, reduction='none') + mask = (diff.abs() <= threshold).float() + masked_loss = mse_loss * mask + if weighting is not None: + masked_loss = masked_loss * weighting + final_loss = masked_loss.mean() + return final_loss + + weighting = compute_loss_weighting_for_sd3(weighting_scheme=args.weighting_scheme, sigmas=sigmas) + loss = custom_mse_loss(noise_pred.float(), target.float(), weighting.float()) + loss = loss.mean() + + if args.motion_sub_loss and noise_pred.size()[1] > 2: + gt_sub_noise = noise_pred[:, 1:, :].float() - noise_pred[:, :-1, :].float() + pre_sub_noise = target[:, 1:, :].float() - target[:, :-1, :].float() + sub_loss = F.mse_loss(gt_sub_noise, pre_sub_noise, reduction="mean") + loss = loss * (1 - args.motion_sub_loss_ratio) + sub_loss * args.motion_sub_loss_ratio + + # Gather the losses across all processes for logging (if we use distributed training). + avg_loss = accelerator.gather(loss.repeat(args.train_batch_size)).mean() + train_loss += avg_loss.item() / args.gradient_accumulation_steps + + # Backpropagate + accelerator.backward(loss) + if accelerator.sync_gradients: + accelerator.clip_grad_norm_(trainable_params, args.max_grad_norm) + optimizer.step() + lr_scheduler.step() + optimizer.zero_grad() + + # Checks if the accelerator has performed an optimization step behind the scenes + if accelerator.sync_gradients: + progress_bar.update(1) + global_step += 1 + accelerator.log({"train_loss": train_loss}, step=global_step) + train_loss = 0.0 + + if global_step % args.checkpointing_steps == 0: + if args.use_deepspeed or args.use_fsdp or accelerator.is_main_process: + # _before_ saving state, check if this save would set us over the `checkpoints_total_limit` + if args.checkpoints_total_limit is not None: + checkpoints = os.listdir(args.output_dir) + checkpoints = [d for d in checkpoints if d.startswith("checkpoint")] + checkpoints = sorted(checkpoints, key=lambda x: int(x.split("-")[1])) + + # before we save the new checkpoint, we need to have at _most_ `checkpoints_total_limit - 1` checkpoints + if len(checkpoints) >= args.checkpoints_total_limit: + num_to_remove = len(checkpoints) - args.checkpoints_total_limit + 1 + removing_checkpoints = checkpoints[0:num_to_remove] + + logger.info( + f"{len(checkpoints)} checkpoints already exist, removing {len(removing_checkpoints)} checkpoints" + ) + logger.info(f"removing checkpoints: {', '.join(removing_checkpoints)}") + + for removing_checkpoint in removing_checkpoints: + removing_checkpoint = os.path.join(args.output_dir, removing_checkpoint) + shutil.rmtree(removing_checkpoint) + if not args.save_state: + safetensor_save_path = os.path.join(args.output_dir, f"checkpoint-{global_step}.safetensors") + save_model(safetensor_save_path, accelerator.unwrap_model(network)) + logger.info(f"Saved safetensor to {safetensor_save_path}") + else: + accelerator_save_path = os.path.join(args.output_dir, f"checkpoint-{global_step}") + accelerator.save_state(accelerator_save_path) + logger.info(f"Saved state to {accelerator_save_path}") + + if accelerator.is_main_process: + if args.validation_prompts is not None and global_step % args.validation_steps == 0: + log_validation( + vae, + text_encoder, + tokenizer, + transformer3d, + network, + config, + args, + accelerator, + weight_dtype, + global_step, + ) + + logs = {"step_loss": loss.detach().item(), "lr": lr_scheduler.get_last_lr()[0]} + progress_bar.set_postfix(**logs) + + if global_step >= args.max_train_steps: + break + + if accelerator.is_main_process: + if args.validation_prompts is not None and epoch % args.validation_epochs == 0: + log_validation( + vae, + text_encoder, + tokenizer, + transformer3d, + network, + config, + args, + accelerator, + weight_dtype, + global_step, + ) + + # Create the pipeline using the trained modules and save it. + accelerator.wait_for_everyone() + if args.use_deepspeed or args.use_fsdp or accelerator.is_main_process: + if not args.save_state: + safetensor_save_path = os.path.join(args.output_dir, f"checkpoint-{global_step}.safetensors") + save_model(safetensor_save_path, accelerator.unwrap_model(network)) + else: + accelerator_save_path = os.path.join(args.output_dir, f"checkpoint-{global_step}") + accelerator.save_state(accelerator_save_path) + logger.info(f"Saved state to {accelerator_save_path}") + + accelerator.end_training() + +if __name__ == "__main__": + main() diff --git a/scripts/wan2.2_fun/train_control_lora.sh b/scripts/wan2.2_fun/train_control_lora.sh new file mode 100644 index 0000000..507216b --- /dev/null +++ b/scripts/wan2.2_fun/train_control_lora.sh @@ -0,0 +1,44 @@ +export MODEL_NAME="models/Diffusion_Transformer/Wan2.2-Fun-A14B-Control" +export DATASET_NAME="datasets/internal_datasets/" +export DATASET_META_NAME="datasets/internal_datasets/metadata.json" +# NCCL_IB_DISABLE=1 and NCCL_P2P_DISABLE=1 are used in multi nodes without RDMA. +# export NCCL_IB_DISABLE=1 +# export NCCL_P2P_DISABLE=1 +NCCL_DEBUG=INFO + +accelerate launch --mixed_precision="bf16" scripts/wan2.2_fun/train_control_lora.py \ + --config_path="config/wan2.2/wan_civitai_i2v.yaml" \ + --pretrained_model_name_or_path=$MODEL_NAME \ + --train_data_dir=$DATASET_NAME \ + --train_data_meta=$DATASET_META_NAME \ + --image_sample_size=1024 \ + --video_sample_size=256 \ + --token_sample_size=512 \ + --video_sample_stride=2 \ + --video_sample_n_frames=81 \ + --train_batch_size=1 \ + --video_repeat=1 \ + --gradient_accumulation_steps=1 \ + --dataloader_num_workers=8 \ + --num_train_epochs=100 \ + --checkpointing_steps=50 \ + --learning_rate=1e-04 \ + --seed=42 \ + --output_dir="output_dir" \ + --gradient_checkpointing \ + --mixed_precision="bf16" \ + --adam_weight_decay=3e-2 \ + --adam_epsilon=1e-10 \ + --vae_mini_batch=1 \ + --max_grad_norm=0.05 \ + --random_hw_adapt \ + --training_with_video_token_length \ + --enable_bucket \ + --uniform_sampling \ + --train_mode="control_ref" \ + --control_ref_image="random" \ + --add_inpaint_info \ + --add_full_ref_image_in_self_attention \ + --boundary_type="low" \ + --lora_skip_name="ffn" \ + --low_vram \ No newline at end of file diff --git a/scripts/wan2.2_fun/train_lora.py b/scripts/wan2.2_fun/train_lora.py new file mode 100644 index 0000000..c53e0f2 --- /dev/null +++ b/scripts/wan2.2_fun/train_lora.py @@ -0,0 +1,1879 @@ +"""Modified from https://github.com/huggingface/diffusers/blob/main/examples/text_to_image/train_text_to_image.py +""" +#!/usr/bin/env python +# coding=utf-8 +# Copyright 2024 The HuggingFace Inc. team. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and + +import argparse +import gc +import logging +import math +import os +import pickle +import random +import shutil +import sys + +import accelerate +import diffusers +import numpy as np +import torch +import torch.nn.functional as F +import torch.utils.checkpoint +import torchvision.transforms.functional as TF +import transformers +from accelerate import Accelerator +from accelerate.logging import get_logger +from accelerate.state import AcceleratorState +from accelerate.utils import ProjectConfiguration, set_seed +from diffusers import DDIMScheduler, FlowMatchEulerDiscreteScheduler +from diffusers.optimization import get_scheduler +from diffusers.training_utils import (EMAModel, + compute_density_for_timestep_sampling, + compute_loss_weighting_for_sd3) +from diffusers.utils import check_min_version, deprecate, is_wandb_available +from diffusers.utils.torch_utils import is_compiled_module +from einops import rearrange +from omegaconf import OmegaConf +from packaging import version +from PIL import Image +from torch.utils.data import RandomSampler +from torch.utils.tensorboard import SummaryWriter +from torchvision import transforms +from tqdm.auto import tqdm +from transformers import AutoTokenizer +from transformers.utils import ContextManagers + +import datasets + +current_file_path = os.path.abspath(__file__) +project_roots = [os.path.dirname(current_file_path), os.path.dirname(os.path.dirname(current_file_path)), os.path.dirname(os.path.dirname(os.path.dirname(current_file_path)))] +for project_root in project_roots: + sys.path.insert(0, project_root) if project_root not in sys.path else None +from videox_fun.data.bucket_sampler import (ASPECT_RATIO_512, + ASPECT_RATIO_RANDOM_CROP_512, + ASPECT_RATIO_RANDOM_CROP_PROB, + AspectRatioBatchImageVideoSampler, + RandomSampler, get_closest_ratio) +from videox_fun.data.dataset_image_video import (ImageVideoDataset, + ImageVideoSampler, + get_random_mask) +from videox_fun.models import (AutoencoderKLWan, WanT5EncoderModel, + Wan2_2Transformer3DModel) +from videox_fun.pipeline import WanFunInpaintPipeline, WanFunPipeline +from videox_fun.utils.discrete_sampler import DiscreteSampling +from videox_fun.utils.lora_utils import (create_network, merge_lora, + unmerge_lora) +from videox_fun.utils.utils import get_image_to_video_latent, save_videos_grid + +if is_wandb_available(): + import wandb + + +def filter_kwargs(cls, kwargs): + import inspect + sig = inspect.signature(cls.__init__) + valid_params = set(sig.parameters.keys()) - {'self', 'cls'} + filtered_kwargs = {k: v for k, v in kwargs.items() if k in valid_params} + return filtered_kwargs + +def resize_mask(mask, latent, process_first_frame_only=True): + latent_size = latent.size() + batch_size, channels, num_frames, height, width = mask.shape + + if process_first_frame_only: + target_size = list(latent_size[2:]) + target_size[0] = 1 + first_frame_resized = F.interpolate( + mask[:, :, 0:1, :, :], + size=target_size, + mode='trilinear', + align_corners=False + ) + + target_size = list(latent_size[2:]) + target_size[0] = target_size[0] - 1 + if target_size[0] != 0: + remaining_frames_resized = F.interpolate( + mask[:, :, 1:, :, :], + size=target_size, + mode='trilinear', + align_corners=False + ) + resized_mask = torch.cat([first_frame_resized, remaining_frames_resized], dim=2) + else: + resized_mask = first_frame_resized + else: + target_size = list(latent_size[2:]) + resized_mask = F.interpolate( + mask, + size=target_size, + mode='trilinear', + align_corners=False + ) + return resized_mask + +def linear_decay(initial_value, final_value, total_steps, current_step): + if current_step >= total_steps: + return final_value + current_step = max(0, current_step) + step_size = (final_value - initial_value) / total_steps + current_value = initial_value + step_size * current_step + return current_value + +def generate_timestep_with_lognorm(low, high, shape, device="cpu", generator=None): + u = torch.normal(mean=0.0, std=1.0, size=shape, device=device, generator=generator) + t = 1 / (1 + torch.exp(-u)) * (high - low) + low + return torch.clip(t.to(torch.int32), low, high - 1) + +# Will error if the minimal version of diffusers is not installed. Remove at your own risks. +check_min_version("0.18.0.dev0") + +logger = get_logger(__name__, log_level="INFO") + +def log_validation(vae, text_encoder, tokenizer, transformer3d, network, config, args, accelerator, weight_dtype, global_step): + try: + logger.info("Running validation... ") + + transformer3d_val = Wan2_2Transformer3DModel.from_pretrained( + os.path.join(args.pretrained_model_name_or_path, config['transformer_additional_kwargs'].get('transformer_subpath', 'transformer')), + transformer_additional_kwargs=OmegaConf.to_container(config['transformer_additional_kwargs']), + ).to(weight_dtype) + transformer3d_val.load_state_dict(accelerator.unwrap_model(transformer3d).state_dict()) + scheduler = FlowMatchEulerDiscreteScheduler( + **filter_kwargs(FlowMatchEulerDiscreteScheduler, OmegaConf.to_container(config['scheduler_kwargs'])) + ) + + if args.train_mode != "normal": + pipeline = WanFunInpaintPipeline( + vae=accelerator.unwrap_model(vae).to(weight_dtype), + text_encoder=accelerator.unwrap_model(text_encoder), + tokenizer=tokenizer, + transformer=transformer3d_val, + scheduler=scheduler, + ) + else: + pipeline = WanFunPipeline( + vae=accelerator.unwrap_model(vae).to(weight_dtype), + text_encoder=accelerator.unwrap_model(text_encoder), + tokenizer=tokenizer, + transformer=transformer3d_val, + scheduler=scheduler, + ) + pipeline = pipeline.to(accelerator.device) + + pipeline = merge_lora( + pipeline, None, 1, accelerator.device, state_dict=accelerator.unwrap_model(network).state_dict(), transformer_only=True + ) + + if args.seed is None: + generator = None + else: + generator = torch.Generator(device=accelerator.device).manual_seed(args.seed) + + for i in range(len(args.validation_prompts)): + with torch.no_grad(): + if args.train_mode != "normal": + with torch.autocast("cuda", dtype=weight_dtype): + video_length = int((args.video_sample_n_frames - 1) // vae.config.temporal_compression_ratio * vae.config.temporal_compression_ratio) + 1 if args.video_sample_n_frames != 1 else 1 + input_video, input_video_mask, _ = get_image_to_video_latent(None, None, video_length=video_length, sample_size=[args.video_sample_size, args.video_sample_size]) + sample = pipeline( + args.validation_prompts[i], + num_frames = video_length, + negative_prompt = "bad detailed", + height = args.video_sample_size, + width = args.video_sample_size, + guidance_scale = 6.0, + generator = generator, + + video = input_video, + mask_video = input_video_mask, + ).videos + os.makedirs(os.path.join(args.output_dir, "sample"), exist_ok=True) + save_videos_grid(sample, os.path.join(args.output_dir, f"sample/sample-{global_step}-{i}.gif")) + + video_length = 1 + input_video, input_video_mask, _ = get_image_to_video_latent(None, None, video_length=video_length, sample_size=[args.video_sample_size, args.video_sample_size]) + sample = pipeline( + args.validation_prompts[i], + num_frames = video_length, + negative_prompt = "bad detailed", + height = args.video_sample_size, + width = args.video_sample_size, + guidance_scale = 6.0, + generator = generator, + + video = input_video, + mask_video = input_video_mask, + ).videos + os.makedirs(os.path.join(args.output_dir, "sample"), exist_ok=True) + save_videos_grid(sample, os.path.join(args.output_dir, f"sample/sample-{global_step}-image-{i}.gif")) + else: + with torch.autocast("cuda", dtype=weight_dtype): + sample = pipeline( + args.validation_prompts[i], + num_frames = args.video_sample_n_frames, + negative_prompt = "bad detailed", + height = args.video_sample_size, + width = args.video_sample_size, + generator = generator + ).videos + os.makedirs(os.path.join(args.output_dir, "sample"), exist_ok=True) + save_videos_grid(sample, os.path.join(args.output_dir, f"sample/sample-{global_step}-{i}.gif")) + + sample = pipeline( + args.validation_prompts[i], + num_frames = 1, + negative_prompt = "bad detailed", + height = args.video_sample_size, + width = args.video_sample_size, + generator = generator + ).videos + os.makedirs(os.path.join(args.output_dir, "sample"), exist_ok=True) + save_videos_grid(sample, os.path.join(args.output_dir, f"sample/sample-{global_step}-image-{i}.gif")) + + del pipeline + del transformer3d_val + gc.collect() + torch.cuda.empty_cache() + torch.cuda.ipc_collect() + except Exception as e: + gc.collect() + torch.cuda.empty_cache() + torch.cuda.ipc_collect() + print(f"Eval error with info {e}") + return None + +def parse_args(): + parser = argparse.ArgumentParser(description="Simple example of a training script.") + parser.add_argument( + "--input_perturbation", type=float, default=0, help="The scale of input perturbation. Recommended 0.1." + ) + parser.add_argument( + "--pretrained_model_name_or_path", + type=str, + default=None, + required=True, + help="Path to pretrained model or model identifier from huggingface.co/models.", + ) + parser.add_argument( + "--revision", + type=str, + default=None, + required=False, + help="Revision of pretrained model identifier from huggingface.co/models.", + ) + parser.add_argument( + "--variant", + type=str, + default=None, + help="Variant of the model files of the pretrained model identifier from huggingface.co/models, 'e.g.' fp16", + ) + parser.add_argument( + "--train_data_dir", + type=str, + default=None, + help=( + "A folder containing the training data. " + ), + ) + parser.add_argument( + "--train_data_meta", + type=str, + default=None, + help=( + "A csv containing the training data. " + ), + ) + parser.add_argument( + "--max_train_samples", + type=int, + default=None, + help=( + "For debugging purposes or quicker training, truncate the number of training examples to this " + "value if set." + ), + ) + parser.add_argument( + "--validation_prompts", + type=str, + default=None, + nargs="+", + help=("A set of prompts evaluated every `--validation_epochs` and logged to `--report_to`."), + ) + parser.add_argument( + "--output_dir", + type=str, + default="sd-model-finetuned", + help="The output directory where the model predictions and checkpoints will be written.", + ) + parser.add_argument( + "--cache_dir", + type=str, + default=None, + help="The directory where the downloaded models and datasets will be stored.", + ) + parser.add_argument("--seed", type=int, default=None, help="A seed for reproducible training.") + parser.add_argument( + "--random_flip", + action="store_true", + help="whether to randomly flip images horizontally", + ) + parser.add_argument( + "--use_came", + action="store_true", + help="whether to use came", + ) + parser.add_argument( + "--multi_stream", + action="store_true", + help="whether to use cuda multi-stream", + ) + parser.add_argument( + "--train_batch_size", type=int, default=16, help="Batch size (per device) for the training dataloader." + ) + parser.add_argument( + "--vae_mini_batch", type=int, default=32, help="mini batch size for vae." + ) + parser.add_argument("--num_train_epochs", type=int, default=100) + parser.add_argument( + "--max_train_steps", + type=int, + default=None, + help="Total number of training steps to perform. If provided, overrides num_train_epochs.", + ) + parser.add_argument( + "--gradient_accumulation_steps", + type=int, + default=1, + help="Number of updates steps to accumulate before performing a backward/update pass.", + ) + parser.add_argument( + "--gradient_checkpointing", + action="store_true", + help="Whether or not to use gradient checkpointing to save memory at the expense of slower backward pass.", + ) + parser.add_argument( + "--learning_rate", + type=float, + default=1e-4, + help="Initial learning rate (after the potential warmup period) to use.", + ) + parser.add_argument( + "--scale_lr", + action="store_true", + default=False, + help="Scale the learning rate by the number of GPUs, gradient accumulation steps, and batch size.", + ) + parser.add_argument( + "--lr_scheduler", + type=str, + default="constant", + help=( + 'The scheduler type to use. Choose between ["linear", "cosine", "cosine_with_restarts", "polynomial",' + ' "constant", "constant_with_warmup"]' + ), + ) + parser.add_argument( + "--lr_warmup_steps", type=int, default=500, help="Number of steps for the warmup in the lr scheduler." + ) + parser.add_argument( + "--use_8bit_adam", action="store_true", help="Whether or not to use 8-bit Adam from bitsandbytes." + ) + parser.add_argument( + "--allow_tf32", + action="store_true", + help=( + "Whether or not to allow TF32 on Ampere GPUs. Can be used to speed up training. For more information, see" + " https://pytorch.org/docs/stable/notes/cuda.html#tensorfloat-32-tf32-on-ampere-devices" + ), + ) + parser.add_argument("--use_ema", action="store_true", help="Whether to use EMA model.") + parser.add_argument( + "--non_ema_revision", + type=str, + default=None, + required=False, + help=( + "Revision of pretrained non-ema model identifier. Must be a branch, tag or git identifier of the local or" + " remote repository specified with --pretrained_model_name_or_path." + ), + ) + parser.add_argument( + "--dataloader_num_workers", + type=int, + default=0, + help=( + "Number of subprocesses to use for data loading. 0 means that the data will be loaded in the main process." + ), + ) + parser.add_argument("--adam_beta1", type=float, default=0.9, help="The beta1 parameter for the Adam optimizer.") + parser.add_argument("--adam_beta2", type=float, default=0.999, help="The beta2 parameter for the Adam optimizer.") + parser.add_argument("--adam_weight_decay", type=float, default=1e-2, help="Weight decay to use.") + parser.add_argument("--adam_epsilon", type=float, default=1e-08, help="Epsilon value for the Adam optimizer") + parser.add_argument("--max_grad_norm", default=1.0, type=float, help="Max gradient norm.") + parser.add_argument("--push_to_hub", action="store_true", help="Whether or not to push the model to the Hub.") + parser.add_argument("--hub_token", type=str, default=None, help="The token to use to push to the Model Hub.") + parser.add_argument( + "--prediction_type", + type=str, + default=None, + help="The prediction_type that shall be used for training. Choose between 'epsilon' or 'v_prediction' or leave `None`. If left to `None` the default prediction type of the scheduler: `noise_scheduler.config.prediciton_type` is chosen.", + ) + parser.add_argument( + "--hub_model_id", + type=str, + default=None, + help="The name of the repository to keep in sync with the local `output_dir`.", + ) + parser.add_argument( + "--logging_dir", + type=str, + default="logs", + help=( + "[TensorBoard](https://www.tensorflow.org/tensorboard) log directory. Will default to" + " *output_dir/runs/**CURRENT_DATETIME_HOSTNAME***." + ), + ) + parser.add_argument( + "--mixed_precision", + type=str, + default=None, + choices=["no", "fp16", "bf16"], + help=( + "Whether to use mixed precision. Choose between fp16 and bf16 (bfloat16). Bf16 requires PyTorch >=" + " 1.10.and an Nvidia Ampere GPU. Default to the value of accelerate config of the current system or the" + " flag passed with the `accelerate.launch` command. Use this argument to override the accelerate config." + ), + ) + parser.add_argument( + "--report_to", + type=str, + default="tensorboard", + help=( + 'The integration to report the results and logs to. Supported platforms are `"tensorboard"`' + ' (default), `"wandb"` and `"comet_ml"`. Use `"all"` to report to all integrations.' + ), + ) + parser.add_argument("--local_rank", type=int, default=-1, help="For distributed training: local_rank") + parser.add_argument( + "--checkpointing_steps", + type=int, + default=500, + help=( + "Save a checkpoint of the training state every X updates. These checkpoints are only suitable for resuming" + " training using `--resume_from_checkpoint`." + ), + ) + parser.add_argument( + "--checkpoints_total_limit", + type=int, + default=None, + help=("Max number of checkpoints to store."), + ) + parser.add_argument( + "--resume_from_checkpoint", + type=str, + default=None, + help=( + "Whether training should be resumed from a previous checkpoint. Use a path saved by" + ' `--checkpointing_steps`, or `"latest"` to automatically select the last available checkpoint.' + ), + ) + parser.add_argument("--noise_offset", type=float, default=0, help="The scale of noise offset.") + parser.add_argument( + "--validation_epochs", + type=int, + default=5, + help="Run validation every X epochs.", + ) + parser.add_argument( + "--validation_steps", + type=int, + default=2000, + help="Run validation every X steps.", + ) + parser.add_argument( + "--tracker_project_name", + type=str, + default="text2image-fine-tune", + help=( + "The `project_name` argument passed to Accelerator.init_trackers for" + " more information see https://huggingface.co/docs/accelerate/v0.17.0/en/package_reference/accelerator#accelerate.Accelerator" + ), + ) + + parser.add_argument( + "--rank", + type=int, + default=128, + help=("The dimension of the LoRA update matrices."), + ) + parser.add_argument( + "--network_alpha", + type=int, + default=64, + help=("The dimension of the LoRA update matrices."), + ) + parser.add_argument( + "--train_text_encoder", + action="store_true", + help="Whether to train the text encoder. If set, the text encoder should be float32 precision.", + ) + parser.add_argument( + "--snr_loss", action="store_true", help="Whether or not to use snr_loss." + ) + parser.add_argument( + "--uniform_sampling", action="store_true", help="Whether or not to use uniform_sampling." + ) + parser.add_argument( + "--enable_text_encoder_in_dataloader", action="store_true", help="Whether or not to use text encoder in dataloader." + ) + parser.add_argument( + "--enable_bucket", action="store_true", help="Whether enable bucket sample in datasets." + ) + parser.add_argument( + "--random_ratio_crop", action="store_true", help="Whether enable random ratio crop sample in datasets." + ) + parser.add_argument( + "--random_frame_crop", action="store_true", help="Whether enable random frame crop sample in datasets." + ) + parser.add_argument( + "--random_hw_adapt", action="store_true", help="Whether enable random adapt height and width in datasets." + ) + parser.add_argument( + "--training_with_video_token_length", action="store_true", help="The training stage of the model in training.", + ) + parser.add_argument( + "--motion_sub_loss", action="store_true", help="Whether enable motion sub loss." + ) + parser.add_argument( + "--motion_sub_loss_ratio", type=float, default=0.25, help="The ratio of motion sub loss." + ) + parser.add_argument( + "--train_sampling_steps", + type=int, + default=1000, + help="Run train_sampling_steps.", + ) + parser.add_argument( + "--keep_all_node_same_token_length", + action="store_true", + help="Reference of the length token.", + ) + parser.add_argument( + "--token_sample_size", + type=int, + default=512, + help="Sample size of the token.", + ) + parser.add_argument( + "--video_sample_size", + type=int, + default=512, + help="Sample size of the video.", + ) + parser.add_argument( + "--image_sample_size", + type=int, + default=512, + help="Sample size of the image.", + ) + parser.add_argument( + "--fix_sample_size", + nargs=2, type=int, default=None, + help="Fix Sample size [height, width] when using bucket and collate_fn." + ) + parser.add_argument( + "--video_sample_stride", + type=int, + default=4, + help="Sample stride of the video.", + ) + parser.add_argument( + "--video_sample_n_frames", + type=int, + default=17, + help="Num frame of video.", + ) + parser.add_argument( + "--video_repeat", + type=int, + default=0, + help="Num of repeat video.", + ) + parser.add_argument( + "--config_path", + type=str, + default=None, + help=( + "The config of the model in training." + ), + ) + parser.add_argument( + "--transformer_path", + type=str, + default=None, + help=("If you want to load the weight from other transformers, input its path."), + ) + parser.add_argument( + "--vae_path", + type=str, + default=None, + help=("If you want to load the weight from other vaes, input its path."), + ) + parser.add_argument("--save_state", action="store_true", help="Whether or not to save state.") + + parser.add_argument( + '--tokenizer_max_length', + type=int, + default=512, + help='Max length of tokenizer' + ) + parser.add_argument( + "--use_deepspeed", action="store_true", help="Whether or not to use deepspeed." + ) + parser.add_argument( + "--use_fsdp", action="store_true", help="Whether or not to use fsdp." + ) + parser.add_argument( + "--low_vram", action="store_true", help="Whether enable low_vram mode." + ) + parser.add_argument( + "--boundary_type", + type=str, + default="low", + help=( + 'The format of training data. Support `"low"` and `"high"`' + ), + ) + parser.add_argument( + "--train_mode", + type=str, + default="normal", + help=( + 'The format of training data. Support `"normal"`' + ' (default), `"inpaint"`.' + ), + ) + parser.add_argument( + "--weighting_scheme", + type=str, + default="none", + choices=["sigma_sqrt", "logit_normal", "mode", "cosmap", "none"], + help=('We default to the "none" weighting scheme for uniform sampling and uniform loss'), + ) + parser.add_argument( + "--logit_mean", type=float, default=0.0, help="mean to use when using the `'logit_normal'` weighting scheme." + ) + parser.add_argument( + "--logit_std", type=float, default=1.0, help="std to use when using the `'logit_normal'` weighting scheme." + ) + parser.add_argument( + "--mode_scale", + type=float, + default=1.29, + help="Scale of mode weighting scheme. Only effective when using the `'mode'` as the `weighting_scheme`.", + ) + parser.add_argument( + "--lora_skip_name", + type=str, + default=None, + help=("The module is not trained in loras. "), + ) + + args = parser.parse_args() + env_local_rank = int(os.environ.get("LOCAL_RANK", -1)) + if env_local_rank != -1 and env_local_rank != args.local_rank: + args.local_rank = env_local_rank + + # default to using the same revision for the non-ema model if not specified + if args.non_ema_revision is None: + args.non_ema_revision = args.revision + + return args + + +def main(): + args = parse_args() + + if args.report_to == "wandb" and args.hub_token is not None: + raise ValueError( + "You cannot use both --report_to=wandb and --hub_token due to a security risk of exposing your token." + " Please use `huggingface-cli login` to authenticate with the Hub." + ) + + if args.non_ema_revision is not None: + deprecate( + "non_ema_revision!=None", + "0.15.0", + message=( + "Downloading 'non_ema' weights from revision branches of the Hub is deprecated. Please make sure to" + " use `--variant=non_ema` instead." + ), + ) + logging_dir = os.path.join(args.output_dir, args.logging_dir) + + config = OmegaConf.load(args.config_path) + accelerator_project_config = ProjectConfiguration(project_dir=args.output_dir, logging_dir=logging_dir) + + accelerator = Accelerator( + gradient_accumulation_steps=args.gradient_accumulation_steps, + mixed_precision=args.mixed_precision, + log_with=args.report_to, + project_config=accelerator_project_config, + ) + + deepspeed_plugin = accelerator.state.deepspeed_plugin if hasattr(accelerator.state, "deepspeed_plugin") else None + fsdp_plugin = accelerator.state.fsdp_plugin if hasattr(accelerator.state, "fsdp_plugin") else None + if deepspeed_plugin is not None: + zero_stage = int(deepspeed_plugin.zero_stage) + fsdp_stage = 0 + print(f"Using DeepSpeed Zero stage: {zero_stage}") + + args.use_deepspeed = True + if zero_stage == 3: + print(f"Auto set save_state to True because zero_stage == 3") + args.save_state = True + elif fsdp_plugin is not None: + from torch.distributed.fsdp import ShardingStrategy + zero_stage = 0 + if fsdp_plugin.sharding_strategy is ShardingStrategy.FULL_SHARD: + fsdp_stage = 3 + elif fsdp_plugin.sharding_strategy is None: # The fsdp_plugin.sharding_strategy is None in FSDP 2. + fsdp_stage = 3 + elif fsdp_plugin.sharding_strategy is ShardingStrategy.SHARD_GRAD_OP: + fsdp_stage = 2 + else: + fsdp_stage = 0 + print(f"Using FSDP stage: {fsdp_stage}") + + args.use_fsdp = True + if fsdp_stage == 3: + print(f"Auto set save_state to True because fsdp_stage == 3") + args.save_state = True + else: + zero_stage = 0 + fsdp_stage = 0 + print("DeepSpeed is not enabled.") + + if accelerator.is_main_process: + writer = SummaryWriter(log_dir=logging_dir) + + # Make one log on every process with the configuration for debugging. + logging.basicConfig( + format="%(asctime)s - %(levelname)s - %(name)s - %(message)s", + datefmt="%m/%d/%Y %H:%M:%S", + level=logging.INFO, + ) + logger.info(accelerator.state, main_process_only=False) + if accelerator.is_local_main_process: + datasets.utils.logging.set_verbosity_warning() + transformers.utils.logging.set_verbosity_warning() + diffusers.utils.logging.set_verbosity_info() + else: + datasets.utils.logging.set_verbosity_error() + transformers.utils.logging.set_verbosity_error() + diffusers.utils.logging.set_verbosity_error() + + # If passed along, set the training seed now. + if args.seed is not None: + set_seed(args.seed) + rng = np.random.default_rng(np.random.PCG64(args.seed + accelerator.process_index)) + torch_rng = torch.Generator(accelerator.device).manual_seed(args.seed + accelerator.process_index) + else: + rng = None + torch_rng = None + index_rng = np.random.default_rng(np.random.PCG64(43)) + print(f"Init rng with seed {args.seed + accelerator.process_index}. Process_index is {accelerator.process_index}") + + # Handle the repository creation + if accelerator.is_main_process: + if args.output_dir is not None: + os.makedirs(args.output_dir, exist_ok=True) + + # For mixed precision training we cast all non-trainable weigths (vae, non-lora text_encoder and non-lora transformer3d) to half-precision + # as these weights are only used for inference, keeping weights in full precision is not required. + weight_dtype = torch.float32 + if accelerator.mixed_precision == "fp16": + weight_dtype = torch.float16 + args.mixed_precision = accelerator.mixed_precision + elif accelerator.mixed_precision == "bf16": + weight_dtype = torch.bfloat16 + args.mixed_precision = accelerator.mixed_precision + + # Load scheduler, tokenizer and models. + noise_scheduler = FlowMatchEulerDiscreteScheduler( + **filter_kwargs(FlowMatchEulerDiscreteScheduler, OmegaConf.to_container(config['scheduler_kwargs'])) + ) + + # Get Tokenizer + tokenizer = AutoTokenizer.from_pretrained( + os.path.join(args.pretrained_model_name_or_path, config['text_encoder_kwargs'].get('tokenizer_subpath', 'tokenizer')), + ) + + def deepspeed_zero_init_disabled_context_manager(): + """ + returns either a context list that includes one that will disable zero.Init or an empty context list + """ + deepspeed_plugin = AcceleratorState().deepspeed_plugin if accelerate.state.is_initialized() else None + if deepspeed_plugin is None: + return [] + + return [deepspeed_plugin.zero3_init_context_manager(enable=False)] + + # Currently Accelerate doesn't know how to handle multiple models under Deepspeed ZeRO stage 3. + # For this to work properly all models must be run through `accelerate.prepare`. But accelerate + # will try to assign the same optimizer with the same weights to all models during + # `deepspeed.initialize`, which of course doesn't work. + # + # For now the following workaround will partially support Deepspeed ZeRO-3, by excluding the 2 + # frozen models from being partitioned during `zero.Init` which gets called during + # `from_pretrained` So CLIPTextModel and AutoencoderKL will not enjoy the parameter sharding + # across multiple gpus and only UNet2DConditionModel will get ZeRO sharded. + with ContextManagers(deepspeed_zero_init_disabled_context_manager()): + # Get Text encoder + text_encoder = WanT5EncoderModel.from_pretrained( + os.path.join(args.pretrained_model_name_or_path, config['text_encoder_kwargs'].get('text_encoder_subpath', 'text_encoder')), + additional_kwargs=OmegaConf.to_container(config['text_encoder_kwargs']), + low_cpu_mem_usage=True, + torch_dtype=weight_dtype, + ) + text_encoder = text_encoder.eval() + # Get Vae + vae = AutoencoderKLWan.from_pretrained( + os.path.join(args.pretrained_model_name_or_path, config['vae_kwargs'].get('vae_subpath', 'vae')), + additional_kwargs=OmegaConf.to_container(config['vae_kwargs']), + ) + vae.eval() + + # Get Transformer + sub_path = config['transformer_additional_kwargs'].get('transformer_low_noise_model_subpath', 'transformer') \ + if args.boundary_type == "low" else config['transformer_additional_kwargs'].get('transformer_high_noise_model_subpath', 'transformer') + transformer3d = Wan2_2Transformer3DModel.from_pretrained( + os.path.join(args.pretrained_model_name_or_path, sub_path), + transformer_additional_kwargs=OmegaConf.to_container(config['transformer_additional_kwargs']), + ).to(weight_dtype) + + # Freeze vae and text_encoder and set transformer3d to trainable + vae.requires_grad_(False) + text_encoder.requires_grad_(False) + transformer3d.requires_grad_(False) + + # Lora will work with this... + network = create_network( + 1.0, + args.rank, + args.network_alpha, + text_encoder, + transformer3d, + neuron_dropout=None, + skip_name=args.lora_skip_name, + ) + network.apply_to(text_encoder, transformer3d, args.train_text_encoder and not args.training_with_video_token_length, True) + + if args.transformer_path is not None: + print(f"From checkpoint: {args.transformer_path}") + if args.transformer_path.endswith("safetensors"): + from safetensors.torch import load_file, safe_open + state_dict = load_file(args.transformer_path) + else: + state_dict = torch.load(args.transformer_path, map_location="cpu") + state_dict = state_dict["state_dict"] if "state_dict" in state_dict else state_dict + + m, u = transformer3d.load_state_dict(state_dict, strict=False) + print(f"missing keys: {len(m)}, unexpected keys: {len(u)}") + assert len(u) == 0 + + if args.vae_path is not None: + print(f"From checkpoint: {args.vae_path}") + if args.vae_path.endswith("safetensors"): + from safetensors.torch import load_file, safe_open + state_dict = load_file(args.vae_path) + else: + state_dict = torch.load(args.vae_path, map_location="cpu") + state_dict = state_dict["state_dict"] if "state_dict" in state_dict else state_dict + + m, u = vae.load_state_dict(state_dict, strict=False) + print(f"missing keys: {len(m)}, unexpected keys: {len(u)}") + assert len(u) == 0 + + # `accelerate` 0.16.0 will have better support for customized saving + if version.parse(accelerate.__version__) >= version.parse("0.16.0"): + # create custom saving & loading hooks so that `accelerator.save_state(...)` serializes in a nice format + if fsdp_stage != 0: + def save_model_hook(models, weights, output_dir): + accelerate_state_dict = accelerator.get_state_dict(models[-1], unwrap=True) + if accelerator.is_main_process: + from safetensors.torch import save_file + + safetensor_save_path = os.path.join(output_dir, f"lora_diffusion_pytorch_model.safetensors") + network_state_dict = {} + for key in accelerate_state_dict: + if "network" in key: + network_state_dict[key.replace("network.", "")] = accelerate_state_dict[key].to(weight_dtype) + + save_file(network_state_dict, safetensor_save_path, metadata={"format": "pt"}) + + with open(os.path.join(output_dir, "sampler_pos_start.pkl"), 'wb') as file: + pickle.dump([batch_sampler.sampler._pos_start, first_epoch], file) + + def load_model_hook(models, input_dir): + pkl_path = os.path.join(input_dir, "sampler_pos_start.pkl") + if os.path.exists(pkl_path): + with open(pkl_path, 'rb') as file: + loaded_number, _ = pickle.load(file) + batch_sampler.sampler._pos_start = max(loaded_number - args.dataloader_num_workers * accelerator.num_processes * 2, 0) + print(f"Load pkl from {pkl_path}. Get loaded_number = {loaded_number}.") + + elif zero_stage == 3: + def save_model_hook(models, weights, output_dir): + if accelerator.is_main_process: + with open(os.path.join(output_dir, "sampler_pos_start.pkl"), 'wb') as file: + pickle.dump([batch_sampler.sampler._pos_start, first_epoch], file) + + def load_model_hook(models, input_dir): + pkl_path = os.path.join(input_dir, "sampler_pos_start.pkl") + if os.path.exists(pkl_path): + with open(pkl_path, 'rb') as file: + loaded_number, _ = pickle.load(file) + batch_sampler.sampler._pos_start = max(loaded_number - args.dataloader_num_workers * accelerator.num_processes * 2, 0) + print(f"Load pkl from {pkl_path}. Get loaded_number = {loaded_number}.") + else: + def save_model_hook(models, weights, output_dir): + if accelerator.is_main_process: + safetensor_save_path = os.path.join(output_dir, f"lora_diffusion_pytorch_model.safetensors") + save_model(safetensor_save_path, accelerator.unwrap_model(models[-1])) + if not args.use_deepspeed: + for _ in range(len(weights)): + weights.pop() + + with open(os.path.join(output_dir, "sampler_pos_start.pkl"), 'wb') as file: + pickle.dump([batch_sampler.sampler._pos_start, first_epoch], file) + + def load_model_hook(models, input_dir): + pkl_path = os.path.join(input_dir, "sampler_pos_start.pkl") + if os.path.exists(pkl_path): + with open(pkl_path, 'rb') as file: + loaded_number, _ = pickle.load(file) + batch_sampler.sampler._pos_start = max(loaded_number - args.dataloader_num_workers * accelerator.num_processes * 2, 0) + print(f"Load pkl from {pkl_path}. Get loaded_number = {loaded_number}.") + + accelerator.register_save_state_pre_hook(save_model_hook) + accelerator.register_load_state_pre_hook(load_model_hook) + + if args.gradient_checkpointing: + transformer3d.enable_gradient_checkpointing() + + # Enable TF32 for faster training on Ampere GPUs, + # cf https://pytorch.org/docs/stable/notes/cuda.html#tensorfloat-32-tf32-on-ampere-devices + if args.allow_tf32: + torch.backends.cuda.matmul.allow_tf32 = True + + if args.scale_lr: + args.learning_rate = ( + args.learning_rate * args.gradient_accumulation_steps * args.train_batch_size * accelerator.num_processes + ) + + # Initialize the optimizer + if args.use_8bit_adam: + try: + import bitsandbytes as bnb + except ImportError: + raise ImportError( + "Please install bitsandbytes to use 8-bit Adam. You can do so by running `pip install bitsandbytes`" + ) + + optimizer_cls = bnb.optim.AdamW8bit + elif args.use_came: + try: + from came_pytorch import CAME + except: + raise ImportError( + "Please install came_pytorch to use CAME. You can do so by running `pip install came_pytorch`" + ) + + optimizer_cls = CAME + else: + optimizer_cls = torch.optim.AdamW + + logging.info("Add network parameters") + trainable_params = list(filter(lambda p: p.requires_grad, network.parameters())) + trainable_params_optim = network.prepare_optimizer_params(args.learning_rate / 2, args.learning_rate, args.learning_rate) + + if args.use_came: + optimizer = optimizer_cls( + trainable_params_optim, + lr=args.learning_rate, + # weight_decay=args.adam_weight_decay, + betas=(0.9, 0.999, 0.9999), + eps=(1e-30, 1e-16) + ) + else: + optimizer = optimizer_cls( + trainable_params_optim, + lr=args.learning_rate, + betas=(args.adam_beta1, args.adam_beta2), + weight_decay=args.adam_weight_decay, + eps=args.adam_epsilon, + ) + + # Get the training dataset + sample_n_frames_bucket_interval = vae.config.temporal_compression_ratio + + if args.fix_sample_size is not None and args.enable_bucket: + args.video_sample_size = max(max(args.fix_sample_size), args.video_sample_size) + args.image_sample_size = max(max(args.fix_sample_size), args.image_sample_size) + args.training_with_video_token_length = False + args.random_hw_adapt = False + + # Get the dataset + train_dataset = ImageVideoDataset( + args.train_data_meta, args.train_data_dir, + video_sample_size=args.video_sample_size, video_sample_stride=args.video_sample_stride, video_sample_n_frames=args.video_sample_n_frames, + video_repeat=args.video_repeat, + image_sample_size=args.image_sample_size, + enable_bucket=args.enable_bucket, enable_inpaint=True if args.train_mode != "normal" else False, + ) + + def worker_init_fn(_seed): + _seed = _seed * 256 + def _worker_init_fn(worker_id): + print(f"worker_init_fn with {_seed + worker_id}") + np.random.seed(_seed + worker_id) + random.seed(_seed + worker_id) + return _worker_init_fn + + if args.enable_bucket: + aspect_ratio_sample_size = {key : [x / 512 * args.video_sample_size for x in ASPECT_RATIO_512[key]] for key in ASPECT_RATIO_512.keys()} + batch_sampler_generator = torch.Generator().manual_seed(args.seed) + batch_sampler = AspectRatioBatchImageVideoSampler( + sampler=RandomSampler(train_dataset, generator=batch_sampler_generator), dataset=train_dataset.dataset, + batch_size=args.train_batch_size, train_folder = args.train_data_dir, drop_last=True, + aspect_ratios=aspect_ratio_sample_size, + ) + + def collate_fn(examples): + def get_length_to_frame_num(token_length): + if args.image_sample_size > args.video_sample_size: + sample_sizes = list(range(args.video_sample_size, args.image_sample_size + 1, 128)) + + if sample_sizes[-1] != args.image_sample_size: + sample_sizes.append(args.image_sample_size) + else: + sample_sizes = [args.image_sample_size] + + length_to_frame_num = { + sample_size: min(token_length / sample_size / sample_size, args.video_sample_n_frames) // sample_n_frames_bucket_interval * sample_n_frames_bucket_interval + 1 for sample_size in sample_sizes + } + + return length_to_frame_num + + def get_random_downsample_ratio(sample_size, image_ratio=[], + all_choices=False, rng=None): + def _create_special_list(length): + if length == 1: + return [1.0] + if length >= 2: + first_element = 0.90 + remaining_sum = 1.0 - first_element + other_elements_value = remaining_sum / (length - 1) + special_list = [first_element] + [other_elements_value] * (length - 1) + return special_list + + if sample_size >= 1536: + number_list = [1, 1.25, 1.5, 2, 2.5, 3] + image_ratio + elif sample_size >= 1024: + number_list = [1, 1.25, 1.5, 2] + image_ratio + elif sample_size >= 768: + number_list = [1, 1.25, 1.5] + image_ratio + elif sample_size >= 512: + number_list = [1] + image_ratio + else: + number_list = [1] + + if all_choices: + return number_list + + number_list_prob = np.array(_create_special_list(len(number_list))) + if rng is None: + return np.random.choice(number_list, p = number_list_prob) + else: + return rng.choice(number_list, p = number_list_prob) + + # Get token length + target_token_length = args.video_sample_n_frames * args.token_sample_size * args.token_sample_size + length_to_frame_num = get_length_to_frame_num(target_token_length) + + # Create new output + new_examples = {} + new_examples["target_token_length"] = target_token_length + new_examples["pixel_values"] = [] + new_examples["text"] = [] + # Used in Inpaint mode + if args.train_mode != "normal": + new_examples["mask_pixel_values"] = [] + new_examples["mask"] = [] + new_examples["clip_pixel_values"] = [] + + # Get downsample ratio in image and videos + pixel_value = examples[0]["pixel_values"] + data_type = examples[0]["data_type"] + f, h, w, c = np.shape(pixel_value) + if data_type == 'image': + random_downsample_ratio = 1 if not args.random_hw_adapt else get_random_downsample_ratio(args.image_sample_size, image_ratio=[args.image_sample_size / args.video_sample_size]) + + aspect_ratio_sample_size = {key : [x / 512 * args.image_sample_size / random_downsample_ratio for x in ASPECT_RATIO_512[key]] for key in ASPECT_RATIO_512.keys()} + aspect_ratio_random_crop_sample_size = {key : [x / 512 * args.image_sample_size / random_downsample_ratio for x in ASPECT_RATIO_RANDOM_CROP_512[key]] for key in ASPECT_RATIO_RANDOM_CROP_512.keys()} + + batch_video_length = args.video_sample_n_frames + sample_n_frames_bucket_interval + else: + if args.random_hw_adapt: + if args.training_with_video_token_length: + local_min_size = np.min(np.array([np.mean(np.array([np.shape(example["pixel_values"])[1], np.shape(example["pixel_values"])[2]])) for example in examples])) + # The video will be resized to a lower resolution than its own. + choice_list = [length for length in list(length_to_frame_num.keys()) if length < local_min_size * 1.25] + if len(choice_list) == 0: + choice_list = list(length_to_frame_num.keys()) + local_video_sample_size = np.random.choice(choice_list) + batch_video_length = length_to_frame_num[local_video_sample_size] + random_downsample_ratio = args.video_sample_size / local_video_sample_size + else: + random_downsample_ratio = get_random_downsample_ratio(args.video_sample_size) + batch_video_length = args.video_sample_n_frames + sample_n_frames_bucket_interval + else: + random_downsample_ratio = 1 + batch_video_length = args.video_sample_n_frames + sample_n_frames_bucket_interval + + aspect_ratio_sample_size = {key : [x / 512 * args.video_sample_size / random_downsample_ratio for x in ASPECT_RATIO_512[key]] for key in ASPECT_RATIO_512.keys()} + aspect_ratio_random_crop_sample_size = {key : [x / 512 * args.video_sample_size / random_downsample_ratio for x in ASPECT_RATIO_RANDOM_CROP_512[key]] for key in ASPECT_RATIO_RANDOM_CROP_512.keys()} + + if args.fix_sample_size is not None: + fix_sample_size = [int(x / 16) * 16 for x in args.fix_sample_size] + elif args.random_ratio_crop: + if rng is None: + random_sample_size = aspect_ratio_random_crop_sample_size[ + np.random.choice(list(aspect_ratio_random_crop_sample_size.keys()), p = ASPECT_RATIO_RANDOM_CROP_PROB) + ] + else: + random_sample_size = aspect_ratio_random_crop_sample_size[ + rng.choice(list(aspect_ratio_random_crop_sample_size.keys()), p = ASPECT_RATIO_RANDOM_CROP_PROB) + ] + random_sample_size = [int(x / 16) * 16 for x in random_sample_size] + else: + closest_size, closest_ratio = get_closest_ratio(h, w, ratios=aspect_ratio_sample_size) + closest_size = [int(x / 16) * 16 for x in closest_size] + + for example in examples: + if args.fix_sample_size is not None: + # To 0~1 + pixel_values = torch.from_numpy(example["pixel_values"]).permute(0, 3, 1, 2).contiguous() + pixel_values = pixel_values / 255. + + # Get adapt hw for resize + fix_sample_size = list(map(lambda x: int(x), fix_sample_size)) + transform = transforms.Compose([ + transforms.Resize(fix_sample_size, interpolation=transforms.InterpolationMode.BILINEAR), # Image.BICUBIC + transforms.CenterCrop(fix_sample_size), + transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5], inplace=True), + ]) + elif args.random_ratio_crop: + # To 0~1 + pixel_values = torch.from_numpy(example["pixel_values"]).permute(0, 3, 1, 2).contiguous() + pixel_values = pixel_values / 255. + + # Get adapt hw for resize + b, c, h, w = pixel_values.size() + th, tw = random_sample_size + if th / tw > h / w: + nh = int(th) + nw = int(w / h * nh) + else: + nw = int(tw) + nh = int(h / w * nw) + + transform = transforms.Compose([ + transforms.Resize([nh, nw]), + transforms.CenterCrop([int(x) for x in random_sample_size]), + transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5], inplace=True), + ]) + else: + # To 0~1 + pixel_values = torch.from_numpy(example["pixel_values"]).permute(0, 3, 1, 2).contiguous() + pixel_values = pixel_values / 255. + + # Get adapt hw for resize + closest_size = list(map(lambda x: int(x), closest_size)) + if closest_size[0] / h > closest_size[1] / w: + resize_size = closest_size[0], int(w * closest_size[0] / h) + else: + resize_size = int(h * closest_size[1] / w), closest_size[1] + + transform = transforms.Compose([ + transforms.Resize(resize_size, interpolation=transforms.InterpolationMode.BILINEAR), # Image.BICUBIC + transforms.CenterCrop(closest_size), + transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5], inplace=True), + ]) + new_examples["pixel_values"].append(transform(pixel_values)) + new_examples["text"].append(example["text"]) + + batch_video_length = int(min(batch_video_length, len(pixel_values))) + + # Magvae needs the number of frames to be 4n + 1. + batch_video_length = (batch_video_length - 1) // sample_n_frames_bucket_interval * sample_n_frames_bucket_interval + 1 + + if batch_video_length <= 0: + batch_video_length = 1 + + if args.train_mode != "normal": + mask = get_random_mask(new_examples["pixel_values"][-1].size()) + mask_pixel_values = new_examples["pixel_values"][-1] * (1 - mask) + # Wan 2.1 use 0 for masked pixels + # + torch.ones_like(new_examples["pixel_values"][-1]) * -1 * mask + new_examples["mask_pixel_values"].append(mask_pixel_values) + new_examples["mask"].append(mask) + + clip_pixel_values = new_examples["pixel_values"][-1][0].permute(1, 2, 0).contiguous() + clip_pixel_values = (clip_pixel_values * 0.5 + 0.5) * 255 + new_examples["clip_pixel_values"].append(clip_pixel_values) + + # Limit the number of frames to the same + new_examples["pixel_values"] = torch.stack([example[:batch_video_length] for example in new_examples["pixel_values"]]) + if args.train_mode != "normal": + new_examples["mask_pixel_values"] = torch.stack([example[:batch_video_length] for example in new_examples["mask_pixel_values"]]) + new_examples["mask"] = torch.stack([example[:batch_video_length] for example in new_examples["mask"]]) + new_examples["clip_pixel_values"] = torch.stack([example for example in new_examples["clip_pixel_values"]]) + + # Encode prompts when enable_text_encoder_in_dataloader=True + if args.enable_text_encoder_in_dataloader: + prompt_ids = tokenizer( + new_examples['text'], + max_length=args.tokenizer_max_length, + padding="max_length", + add_special_tokens=True, + truncation=True, + return_tensors="pt" + ) + encoder_hidden_states = text_encoder( + prompt_ids.input_ids + )[0] + new_examples['encoder_attention_mask'] = prompt_ids.attention_mask + new_examples['encoder_hidden_states'] = encoder_hidden_states + + return new_examples + + # DataLoaders creation: + train_dataloader = torch.utils.data.DataLoader( + train_dataset, + batch_sampler=batch_sampler, + collate_fn=collate_fn, + persistent_workers=True if args.dataloader_num_workers != 0 else False, + num_workers=args.dataloader_num_workers, + worker_init_fn=worker_init_fn(args.seed + accelerator.process_index) + ) + else: + # DataLoaders creation: + batch_sampler_generator = torch.Generator().manual_seed(args.seed) + batch_sampler = ImageVideoSampler(RandomSampler(train_dataset, generator=batch_sampler_generator), train_dataset, args.train_batch_size) + train_dataloader = torch.utils.data.DataLoader( + train_dataset, + batch_sampler=batch_sampler, + persistent_workers=True if args.dataloader_num_workers != 0 else False, + num_workers=args.dataloader_num_workers, + worker_init_fn=worker_init_fn(args.seed + accelerator.process_index) + ) + + # Scheduler and math around the number of training steps. + overrode_max_train_steps = False + num_update_steps_per_epoch = math.ceil(len(train_dataloader) / args.gradient_accumulation_steps) + if args.max_train_steps is None: + args.max_train_steps = args.num_train_epochs * num_update_steps_per_epoch + overrode_max_train_steps = True + + lr_scheduler = get_scheduler( + args.lr_scheduler, + optimizer=optimizer, + num_warmup_steps=args.lr_warmup_steps * accelerator.num_processes, + num_training_steps=args.max_train_steps * accelerator.num_processes, + ) + + # Prepare everything with our `accelerator`. + if fsdp_stage != 0: + transformer3d.network = network + transformer3d = transformer3d.to(weight_dtype) + transformer3d, optimizer, train_dataloader, lr_scheduler = accelerator.prepare( + transformer3d, optimizer, train_dataloader, lr_scheduler + ) + else: + network, optimizer, train_dataloader, lr_scheduler = accelerator.prepare( + network, optimizer, train_dataloader, lr_scheduler + ) + + if zero_stage == 3: + from functools import partial + from videox_fun.dist import set_multi_gpus_devices, shard_model + shard_fn = partial(shard_model, device_id=accelerator.device, param_dtype=weight_dtype) + transformer3d = shard_fn(transformer3d) + + if fsdp_stage != 0: + from functools import partial + from videox_fun.dist import set_multi_gpus_devices, shard_model + shard_fn = partial(shard_model, device_id=accelerator.device, param_dtype=weight_dtype) + text_encoder = shard_fn(text_encoder) + + # Move text_encode and vae to gpu and cast to weight_dtype + vae.to(accelerator.device, dtype=weight_dtype) + transformer3d.to(accelerator.device, dtype=weight_dtype) + if not args.enable_text_encoder_in_dataloader: + text_encoder.to(accelerator.device) + + # We need to recalculate our total training steps as the size of the training dataloader may have changed. + num_update_steps_per_epoch = math.ceil(len(train_dataloader) / args.gradient_accumulation_steps) + if overrode_max_train_steps: + args.max_train_steps = args.num_train_epochs * num_update_steps_per_epoch + # Afterwards we recalculate our number of training epochs + args.num_train_epochs = math.ceil(args.max_train_steps / num_update_steps_per_epoch) + + # We need to initialize the trackers we use, and also store our configuration. + # The trackers initializes automatically on the main process. + if accelerator.is_main_process: + tracker_config = dict(vars(args)) + tracker_config.pop("validation_prompts") + tracker_config.pop("fix_sample_size") + accelerator.init_trackers(args.tracker_project_name, tracker_config) + + # Function for unwrapping if model was compiled with `torch.compile`. + def unwrap_model(model): + model = accelerator.unwrap_model(model) + model = model._orig_mod if is_compiled_module(model) else model + return model + + # Train! + total_batch_size = args.train_batch_size * accelerator.num_processes * args.gradient_accumulation_steps + + logger.info("***** Running training *****") + logger.info(f" Num examples = {len(train_dataset)}") + logger.info(f" Num Epochs = {args.num_train_epochs}") + logger.info(f" Instantaneous batch size per device = {args.train_batch_size}") + logger.info(f" Total train batch size (w. parallel, distributed & accumulation) = {total_batch_size}") + logger.info(f" Gradient Accumulation steps = {args.gradient_accumulation_steps}") + logger.info(f" Total optimization steps = {args.max_train_steps}") + global_step = 0 + first_epoch = 0 + + # Potentially load in the weights and states from a previous save + if args.resume_from_checkpoint: + if args.resume_from_checkpoint != "latest": + path = os.path.basename(args.resume_from_checkpoint) + else: + # Get the most recent checkpoint + dirs = os.listdir(args.output_dir) + dirs = [d for d in dirs if d.startswith("checkpoint")] + dirs = sorted(dirs, key=lambda x: int(x.split("-")[1])) + path = dirs[-1] if len(dirs) > 0 else None + + if path is None: + accelerator.print( + f"Checkpoint '{args.resume_from_checkpoint}' does not exist. Starting a new training run." + ) + args.resume_from_checkpoint = None + initial_global_step = 0 + else: + global_step = int(path.split("-")[1]) + + initial_global_step = global_step + + checkpoint_folder_path = os.path.join(args.output_dir, path) + pkl_path = os.path.join(checkpoint_folder_path, "sampler_pos_start.pkl") + if os.path.exists(pkl_path): + with open(pkl_path, 'rb') as file: + _, first_epoch = pickle.load(file) + else: + first_epoch = global_step // num_update_steps_per_epoch + print(f"Load pkl from {pkl_path}. Get first_epoch = {first_epoch}.") + + if zero_stage != 3 and not args.use_fsdp: + from safetensors.torch import load_file + state_dict = load_file(os.path.join(checkpoint_folder_path, "lora_diffusion_pytorch_model.safetensors"), device=str(accelerator.device)) + m, u = accelerator.unwrap_model(network).load_state_dict(state_dict, strict=False) + print(f"missing keys: {len(m)}, unexpected keys: {len(u)}") + + optimizer_file_pt = os.path.join(checkpoint_folder_path, "optimizer.pt") + optimizer_file_bin = os.path.join(checkpoint_folder_path, "optimizer.bin") + optimizer_file_to_load = None + + if os.path.exists(optimizer_file_pt): + optimizer_file_to_load = optimizer_file_pt + elif os.path.exists(optimizer_file_bin): + optimizer_file_to_load = optimizer_file_bin + + if optimizer_file_to_load: + try: + accelerator.print(f"Loading optimizer state from {optimizer_file_to_load}") + optimizer_state = torch.load(optimizer_file_to_load, map_location=accelerator.device) + optimizer.load_state_dict(optimizer_state) + accelerator.print("Optimizer state loaded successfully.") + except Exception as e: + accelerator.print(f"Failed to load optimizer state from {optimizer_file_to_load}: {e}") + + scheduler_file_pt = os.path.join(checkpoint_folder_path, "scheduler.pt") + scheduler_file_bin = os.path.join(checkpoint_folder_path, "scheduler.bin") + scheduler_file_to_load = None + + if os.path.exists(scheduler_file_pt): + scheduler_file_to_load = scheduler_file_pt + elif os.path.exists(scheduler_file_bin): + scheduler_file_to_load = scheduler_file_bin + + if scheduler_file_to_load: + try: + accelerator.print(f"Loading scheduler state from {scheduler_file_to_load}") + scheduler_state = torch.load(scheduler_file_to_load, map_location=accelerator.device) + lr_scheduler.load_state_dict(scheduler_state) + accelerator.print("Scheduler state loaded successfully.") + except Exception as e: + accelerator.print(f"Failed to load scheduler state from {scheduler_file_to_load}: {e}") + + if hasattr(accelerator, 'scaler') and accelerator.scaler is not None: + scaler_file = os.path.join(checkpoint_folder_path, "scaler.pt") + if os.path.exists(scaler_file): + try: + accelerator.print(f"Loading GradScaler state from {scaler_file}") + scaler_state = torch.load(scaler_file, map_location=accelerator.device) + accelerator.scaler.load_state_dict(scaler_state) + accelerator.print("GradScaler state loaded successfully.") + except Exception as e: + accelerator.print(f"Failed to load GradScaler state: {e}") + + else: + accelerator.load_state(checkpoint_folder_path) + accelerator.print("accelerator.load_state() completed for zero_stage 3.") + + else: + initial_global_step = 0 + + # function for saving/removing + def save_model(ckpt_file, unwrapped_nw): + os.makedirs(args.output_dir, exist_ok=True) + accelerator.print(f"\nsaving checkpoint: {ckpt_file}") + unwrapped_nw.save_weights(ckpt_file, weight_dtype, None) + + progress_bar = tqdm( + range(0, args.max_train_steps), + initial=initial_global_step, + desc="Steps", + # Only show the progress bar once on each machine. + disable=not accelerator.is_local_main_process, + ) + + if args.multi_stream and args.train_mode != "normal": + # create extra cuda streams to speedup inpaint vae computation + vae_stream_1 = torch.cuda.Stream() + vae_stream_2 = torch.cuda.Stream() + else: + vae_stream_1 = None + vae_stream_2 = None + + # Calculate the index we need + boundary = config['transformer_additional_kwargs'].get('boundary', 0.900) + split_timesteps = args.train_sampling_steps * boundary + differences = torch.abs(noise_scheduler.timesteps - split_timesteps) + closest_index = torch.argmin(differences).item() + print(f"The boundary is {boundary} and the boundary_type is {args.boundary_type}. The closest_index we calculate is {closest_index}") + if args.boundary_type == "high": + start_num_idx = 0 + train_sampling_steps = closest_index + elif args.boundary_type == "low": + start_num_idx = closest_index + train_sampling_steps = args.train_sampling_steps - closest_index + else: + start_num_idx = 0 + train_sampling_steps = args.train_sampling_steps + idx_sampling = DiscreteSampling(train_sampling_steps, start_num_idx=start_num_idx, uniform_sampling=args.uniform_sampling) + + for epoch in range(first_epoch, args.num_train_epochs): + train_loss = 0.0 + batch_sampler.sampler.generator = torch.Generator().manual_seed(args.seed + epoch) + for step, batch in enumerate(train_dataloader): + if epoch == first_epoch and step == 0: + pixel_values, texts = batch['pixel_values'].cpu(), batch['text'] + pixel_values = rearrange(pixel_values, "b f c h w -> b c f h w") + os.makedirs(os.path.join(args.output_dir, "sanity_check"), exist_ok=True) + for idx, (pixel_value, text) in enumerate(zip(pixel_values, texts)): + pixel_value = pixel_value[None, ...] + gif_name = '-'.join(text.replace('/', '').split()[:10]) if not text == '' else f'{global_step}-{idx}' + save_videos_grid(pixel_value, f"{args.output_dir}/sanity_check/{gif_name[:10]}.gif", rescale=True) + if args.train_mode != "normal": + clip_pixel_values, mask_pixel_values, texts = batch['clip_pixel_values'].cpu(), batch['mask_pixel_values'].cpu(), batch['text'] + mask_pixel_values = rearrange(mask_pixel_values, "b f c h w -> b c f h w") + for idx, (clip_pixel_value, pixel_value, text) in enumerate(zip(clip_pixel_values, mask_pixel_values, texts)): + pixel_value = pixel_value[None, ...] + Image.fromarray(np.uint8(clip_pixel_value)).save(f"{args.output_dir}/sanity_check/clip_{gif_name[:10] if not text == '' else f'{global_step}-{idx}'}.png") + save_videos_grid(pixel_value, f"{args.output_dir}/sanity_check/mask_{gif_name[:10] if not text == '' else f'{global_step}-{idx}'}.gif", rescale=True) + + with accelerator.accumulate(transformer3d): + # Convert images to latent space + pixel_values = batch["pixel_values"].to(weight_dtype) + + # Increase the batch size when the length of the latent sequence of the current sample is small + if args.training_with_video_token_length and zero_stage != 3: + if args.video_sample_n_frames * args.token_sample_size * args.token_sample_size // 16 >= pixel_values.size()[1] * pixel_values.size()[3] * pixel_values.size()[4]: + pixel_values = torch.tile(pixel_values, (4, 1, 1, 1, 1)) + if args.enable_text_encoder_in_dataloader: + batch['encoder_hidden_states'] = torch.tile(batch['encoder_hidden_states'], (4, 1, 1)) + batch['encoder_attention_mask'] = torch.tile(batch['encoder_attention_mask'], (4, 1)) + else: + batch['text'] = batch['text'] * 4 + elif args.video_sample_n_frames * args.token_sample_size * args.token_sample_size // 4 >= pixel_values.size()[1] * pixel_values.size()[3] * pixel_values.size()[4]: + pixel_values = torch.tile(pixel_values, (2, 1, 1, 1, 1)) + if args.enable_text_encoder_in_dataloader: + batch['encoder_hidden_states'] = torch.tile(batch['encoder_hidden_states'], (2, 1, 1)) + batch['encoder_attention_mask'] = torch.tile(batch['encoder_attention_mask'], (2, 1)) + else: + batch['text'] = batch['text'] * 2 + + if args.train_mode != "normal": + mask_pixel_values = batch["mask_pixel_values"].to(weight_dtype) + mask = batch["mask"].to(weight_dtype) + # Increase the batch size when the length of the latent sequence of the current sample is small + if args.training_with_video_token_length and zero_stage != 3: + if args.video_sample_n_frames * args.token_sample_size * args.token_sample_size // 16 >= pixel_values.size()[1] * pixel_values.size()[3] * pixel_values.size()[4]: + mask_pixel_values = torch.tile(mask_pixel_values, (4, 1, 1, 1, 1)) + mask = torch.tile(mask, (4, 1, 1, 1, 1)) + elif args.video_sample_n_frames * args.token_sample_size * args.token_sample_size // 4 >= pixel_values.size()[1] * pixel_values.size()[3] * pixel_values.size()[4]: + mask_pixel_values = torch.tile(mask_pixel_values, (2, 1, 1, 1, 1)) + mask = torch.tile(mask, (2, 1, 1, 1, 1)) + + if args.random_frame_crop: + def _create_special_list(length): + if length == 1: + return [1.0] + if length >= 2: + last_element = 0.90 + remaining_sum = 1.0 - last_element + other_elements_value = remaining_sum / (length - 1) + special_list = [other_elements_value] * (length - 1) + [last_element] + return special_list + select_frames = [_tmp for _tmp in list(range(sample_n_frames_bucket_interval + 1, args.video_sample_n_frames + sample_n_frames_bucket_interval, sample_n_frames_bucket_interval))] + select_frames_prob = np.array(_create_special_list(len(select_frames))) + + if len(select_frames) != 0: + if rng is None: + temp_n_frames = np.random.choice(select_frames, p = select_frames_prob) + else: + temp_n_frames = rng.choice(select_frames, p = select_frames_prob) + else: + temp_n_frames = 1 + + # Magvae needs the number of frames to be 4n + 1. + temp_n_frames = (temp_n_frames - 1) // sample_n_frames_bucket_interval + 1 + + pixel_values = pixel_values[:, :temp_n_frames, :, :] + + if args.train_mode != "normal": + mask_pixel_values = mask_pixel_values[:, :temp_n_frames, :, :] + mask = mask[:, :temp_n_frames, :, :] + + # Keep all node same token length to accelerate the traning when resolution grows. + if args.keep_all_node_same_token_length: + if args.token_sample_size > 256: + numbers_list = list(range(256, args.token_sample_size + 1, 128)) + + if numbers_list[-1] != args.token_sample_size: + numbers_list.append(args.token_sample_size) + else: + numbers_list = [256] + numbers_list = [_number * _number * args.video_sample_n_frames for _number in numbers_list] + + actual_token_length = index_rng.choice(numbers_list) + actual_video_length = (min( + actual_token_length / pixel_values.size()[-1] / pixel_values.size()[-2], args.video_sample_n_frames + ) - 1) // sample_n_frames_bucket_interval * sample_n_frames_bucket_interval + 1 + actual_video_length = int(max(actual_video_length, 1)) + + # Magvae needs the number of frames to be 4n + 1. + actual_video_length = (actual_video_length - 1) // sample_n_frames_bucket_interval + 1 + + pixel_values = pixel_values[:, :actual_video_length, :, :] + if args.train_mode != "normal": + mask_pixel_values = mask_pixel_values[:, :actual_video_length, :, :] + mask = mask[:, :actual_video_length, :, :] + + # Make the inpaint latents to be zeros. + if args.train_mode != "normal": + t2v_flag = [(_mask == 1).all() for _mask in mask] + new_t2v_flag = [] + for _mask in t2v_flag: + if _mask and np.random.rand() < 0.90: + new_t2v_flag.append(0) + else: + new_t2v_flag.append(1) + t2v_flag = torch.from_numpy(np.array(new_t2v_flag)).to(accelerator.device, dtype=weight_dtype) + + if args.low_vram: + torch.cuda.empty_cache() + vae.to(accelerator.device) + if not args.enable_text_encoder_in_dataloader: + text_encoder.to("cpu") + + with torch.no_grad(): + # This way is quicker when batch grows up + def _batch_encode_vae(pixel_values): + pixel_values = rearrange(pixel_values, "b f c h w -> b c f h w") + bs = args.vae_mini_batch + new_pixel_values = [] + for i in range(0, pixel_values.shape[0], bs): + pixel_values_bs = pixel_values[i : i + bs] + pixel_values_bs = vae.encode(pixel_values_bs)[0] + pixel_values_bs = pixel_values_bs.sample() + new_pixel_values.append(pixel_values_bs) + return torch.cat(new_pixel_values, dim = 0) + if vae_stream_1 is not None: + vae_stream_1.wait_stream(torch.cuda.current_stream()) + with torch.cuda.stream(vae_stream_1): + latents = _batch_encode_vae(pixel_values) + else: + latents = _batch_encode_vae(pixel_values) + + if args.train_mode != "normal": + mask = rearrange(mask, "b f c h w -> b c f h w") + mask = torch.concat( + [ + torch.repeat_interleave(mask[:, :, 0:1], repeats=4, dim=2), + mask[:, :, 1:] + ], dim=2 + ) + mask = mask.view(mask.shape[0], mask.shape[2] // 4, 4, mask.shape[3], mask.shape[4]) + mask = mask.transpose(1, 2) + mask = resize_mask(1 - mask, latents) + + # Encode inpaint latents. + mask_latents = _batch_encode_vae(mask_pixel_values) + if vae_stream_2 is not None: + torch.cuda.current_stream().wait_stream(vae_stream_2) + + inpaint_latents = torch.concat([mask, mask_latents], dim=1) + inpaint_latents = t2v_flag[:, None, None, None, None] * inpaint_latents + + # wait for latents = vae.encode(pixel_values) to complete + if vae_stream_1 is not None: + torch.cuda.current_stream().wait_stream(vae_stream_1) + + if args.low_vram: + vae.to('cpu') + torch.cuda.empty_cache() + if not args.enable_text_encoder_in_dataloader: + text_encoder.to(accelerator.device) + + if args.enable_text_encoder_in_dataloader: + prompt_embeds = batch['encoder_hidden_states'].to(device=latents.device) + else: + with torch.no_grad(): + prompt_ids = tokenizer( + batch['text'], + padding="max_length", + max_length=args.tokenizer_max_length, + truncation=True, + add_special_tokens=True, + return_tensors="pt" + ) + text_input_ids = prompt_ids.input_ids + prompt_attention_mask = prompt_ids.attention_mask + + seq_lens = prompt_attention_mask.gt(0).sum(dim=1).long() + prompt_embeds = text_encoder(text_input_ids.to(latents.device), attention_mask=prompt_attention_mask.to(latents.device))[0] + prompt_embeds = [u[:v] for u, v in zip(prompt_embeds, seq_lens)] + + if args.low_vram and not args.enable_text_encoder_in_dataloader: + text_encoder.to('cpu') + torch.cuda.empty_cache() + + bsz, channel, num_frames, height, width = latents.size() + noise = torch.randn(latents.size(), device=latents.device, generator=torch_rng, dtype=weight_dtype) + + if not args.uniform_sampling: + u = compute_density_for_timestep_sampling( + weighting_scheme=args.weighting_scheme, + batch_size=bsz, + logit_mean=args.logit_mean, + logit_std=args.logit_std, + mode_scale=args.mode_scale, + ) + indices = (u * noise_scheduler.config.num_train_timesteps).long() + else: + # Sample a random timestep for each image + # timesteps = generate_timestep_with_lognorm(0, args.train_sampling_steps, (bsz,), device=latents.device, generator=torch_rng) + # timesteps = torch.randint(0, args.train_sampling_steps, (bsz,), device=latents.device, generator=torch_rng) + indices = idx_sampling(bsz, generator=torch_rng, device=latents.device) + indices = indices.long().cpu() + timesteps = noise_scheduler.timesteps[indices].to(device=latents.device) + + def get_sigmas(timesteps, n_dim=4, dtype=torch.float32): + sigmas = noise_scheduler.sigmas.to(device=accelerator.device, dtype=dtype) + schedule_timesteps = noise_scheduler.timesteps.to(accelerator.device) + timesteps = timesteps.to(accelerator.device) + step_indices = [(schedule_timesteps == t).nonzero().item() for t in timesteps] + + sigma = sigmas[step_indices].flatten() + while len(sigma.shape) < n_dim: + sigma = sigma.unsqueeze(-1) + return sigma + + # Add noise according to flow matching. + # zt = (1 - texp) * x + texp * z1 + sigmas = get_sigmas(timesteps, n_dim=latents.ndim, dtype=latents.dtype) + noisy_latents = (1.0 - sigmas) * latents + sigmas * noise + + # Add noise + target = noise - latents + + target_shape = (vae.latent_channels, num_frames, width, height) + seq_len = math.ceil( + (target_shape[2] * target_shape[3]) / + (accelerator.unwrap_model(transformer3d).config.patch_size[1] * accelerator.unwrap_model(transformer3d).config.patch_size[2]) * + target_shape[1] + ) + # Predict the noise residual + with torch.cuda.amp.autocast(dtype=weight_dtype), torch.cuda.device(device=accelerator.device): + noise_pred = transformer3d( + x=noisy_latents, + context=prompt_embeds, + t=timesteps, + seq_len=seq_len, + y=inpaint_latents if args.train_mode != "normal" else None, + ) + + def custom_mse_loss(noise_pred, target, weighting=None, threshold=50): + noise_pred = noise_pred.float() + target = target.float() + diff = noise_pred - target + mse_loss = F.mse_loss(noise_pred, target, reduction='none') + mask = (diff.abs() <= threshold).float() + masked_loss = mse_loss * mask + if weighting is not None: + masked_loss = masked_loss * weighting + final_loss = masked_loss.mean() + return final_loss + + weighting = compute_loss_weighting_for_sd3(weighting_scheme=args.weighting_scheme, sigmas=sigmas) + loss = custom_mse_loss(noise_pred.float(), target.float(), weighting.float()) + loss = loss.mean() + + if args.motion_sub_loss and noise_pred.size()[1] > 2: + gt_sub_noise = noise_pred[:, 1:, :].float() - noise_pred[:, :-1, :].float() + pre_sub_noise = target[:, 1:, :].float() - target[:, :-1, :].float() + sub_loss = F.mse_loss(gt_sub_noise, pre_sub_noise, reduction="mean") + loss = loss * (1 - args.motion_sub_loss_ratio) + sub_loss * args.motion_sub_loss_ratio + + # Gather the losses across all processes for logging (if we use distributed training). + avg_loss = accelerator.gather(loss.repeat(args.train_batch_size)).mean() + train_loss += avg_loss.item() / args.gradient_accumulation_steps + + # Backpropagate + accelerator.backward(loss) + if accelerator.sync_gradients: + accelerator.clip_grad_norm_(trainable_params, args.max_grad_norm) + optimizer.step() + lr_scheduler.step() + optimizer.zero_grad() + + # Checks if the accelerator has performed an optimization step behind the scenes + if accelerator.sync_gradients: + progress_bar.update(1) + global_step += 1 + accelerator.log({"train_loss": train_loss}, step=global_step) + train_loss = 0.0 + + if global_step % args.checkpointing_steps == 0: + if args.use_deepspeed or args.use_fsdp or accelerator.is_main_process: + # _before_ saving state, check if this save would set us over the `checkpoints_total_limit` + if args.checkpoints_total_limit is not None: + checkpoints = os.listdir(args.output_dir) + checkpoints = [d for d in checkpoints if d.startswith("checkpoint")] + checkpoints = sorted(checkpoints, key=lambda x: int(x.split("-")[1])) + + # before we save the new checkpoint, we need to have at _most_ `checkpoints_total_limit - 1` checkpoints + if len(checkpoints) >= args.checkpoints_total_limit: + num_to_remove = len(checkpoints) - args.checkpoints_total_limit + 1 + removing_checkpoints = checkpoints[0:num_to_remove] + + logger.info( + f"{len(checkpoints)} checkpoints already exist, removing {len(removing_checkpoints)} checkpoints" + ) + logger.info(f"removing checkpoints: {', '.join(removing_checkpoints)}") + + for removing_checkpoint in removing_checkpoints: + removing_checkpoint = os.path.join(args.output_dir, removing_checkpoint) + shutil.rmtree(removing_checkpoint) + if not args.save_state: + safetensor_save_path = os.path.join(args.output_dir, f"checkpoint-{global_step}.safetensors") + save_model(safetensor_save_path, accelerator.unwrap_model(network)) + logger.info(f"Saved safetensor to {safetensor_save_path}") + else: + accelerator_save_path = os.path.join(args.output_dir, f"checkpoint-{global_step}") + accelerator.save_state(accelerator_save_path) + logger.info(f"Saved state to {accelerator_save_path}") + + if accelerator.is_main_process: + if args.validation_prompts is not None and global_step % args.validation_steps == 0: + log_validation( + vae, + text_encoder, + tokenizer, + transformer3d, + network, + config, + args, + accelerator, + weight_dtype, + global_step, + ) + + logs = {"step_loss": loss.detach().item(), "lr": lr_scheduler.get_last_lr()[0]} + progress_bar.set_postfix(**logs) + + if global_step >= args.max_train_steps: + break + + if accelerator.is_main_process: + if args.validation_prompts is not None and epoch % args.validation_epochs == 0: + log_validation( + vae, + text_encoder, + tokenizer, + transformer3d, + network, + config, + args, + accelerator, + weight_dtype, + global_step, + ) + + # Create the pipeline using the trained modules and save it. + accelerator.wait_for_everyone() + if args.use_deepspeed or args.use_fsdp or accelerator.is_main_process: + if not args.save_state: + safetensor_save_path = os.path.join(args.output_dir, f"checkpoint-{global_step}.safetensors") + save_model(safetensor_save_path, accelerator.unwrap_model(network)) + else: + accelerator_save_path = os.path.join(args.output_dir, f"checkpoint-{global_step}") + accelerator.save_state(accelerator_save_path) + logger.info(f"Saved state to {accelerator_save_path}") + + accelerator.end_training() + + +if __name__ == "__main__": + main() diff --git a/scripts/wan2.2_fun/train_lora.sh b/scripts/wan2.2_fun/train_lora.sh new file mode 100644 index 0000000..fc3e06f --- /dev/null +++ b/scripts/wan2.2_fun/train_lora.sh @@ -0,0 +1,41 @@ +export MODEL_NAME="models/Diffusion_Transformer/Wan2.2-Fun-A14B-InP" +export DATASET_NAME="datasets/internal_datasets/" +export DATASET_META_NAME="datasets/internal_datasets/metadata.json" +# NCCL_IB_DISABLE=1 and NCCL_P2P_DISABLE=1 are used in multi nodes without RDMA. +# export NCCL_IB_DISABLE=1 +# export NCCL_P2P_DISABLE=1 +NCCL_DEBUG=INFO + +accelerate launch --mixed_precision="bf16" scripts/wan2.2_fun/train_lora.py \ + --config_path="config/wan2.2/wan_civitai_i2v.yaml" \ + --pretrained_model_name_or_path=$MODEL_NAME \ + --train_data_dir=$DATASET_NAME \ + --train_data_meta=$DATASET_META_NAME \ + --image_sample_size=1024 \ + --video_sample_size=256 \ + --token_sample_size=512 \ + --video_sample_stride=2 \ + --video_sample_n_frames=81 \ + --train_batch_size=1 \ + --video_repeat=1 \ + --gradient_accumulation_steps=1 \ + --dataloader_num_workers=8 \ + --num_train_epochs=100 \ + --checkpointing_steps=50 \ + --learning_rate=1e-04 \ + --seed=42 \ + --output_dir="output_dir" \ + --gradient_checkpointing \ + --mixed_precision="bf16" \ + --adam_weight_decay=3e-2 \ + --adam_epsilon=1e-10 \ + --vae_mini_batch=1 \ + --max_grad_norm=0.05 \ + --random_hw_adapt \ + --training_with_video_token_length \ + --enable_bucket \ + --uniform_sampling \ + --train_mode="inpaint" \ + --boundary_type="low" \ + --lora_skip_name="ffn" \ + --low_vram diff --git a/videox_fun/models/cache_utils.py b/videox_fun/models/cache_utils.py index 12dd09a..9798e45 100755 --- a/videox_fun/models/cache_utils.py +++ b/videox_fun/models/cache_utils.py @@ -8,11 +8,8 @@ def get_teacache_coefficients(model_name): return [-3.03318725e+05, 4.90537029e+04, -2.65530556e+03, 5.87365115e+01, -3.15583525e-01] elif "wan2.1-i2v-14b-480p" in model_name.lower(): return [2.57151496e+05, -3.54229917e+04, 1.40286849e+03, -1.35890334e+01, 1.32517977e-01] - elif "wan2.1-i2v-14b-720p" in model_name.lower() \ - or "wan2.1-fun-14b" in model_name.lower() \ - or "wan2.2-i2v-a14b" in model_name.lower() \ - or "wan2.2-t2v-a14b" in model_name.lower() \ - or "wan2.2-t2v-5b" in model_name.lower(): + elif "wan2.1-i2v-14b-720p" in model_name.lower() or "wan2.1-fun-14b" in model_name.lower() or "wan2.2-fun" in model_name.lower() \ + or "wan2.2-i2v-a14b" in model_name.lower() or "wan2.2-t2v-a14b" in model_name.lower() or "wan2.2-ti2v-5b" in model_name.lower() : return [8.10705460e+03, 2.13393892e+03, -3.72934672e+02, 1.66203073e+01, -4.17769401e-02] else: print(f"The model {model_name} is not supported by TeaCache.") diff --git a/videox_fun/models/wan_vae.py b/videox_fun/models/wan_vae.py index cd28cb9..3ccd17a 100755 --- a/videox_fun/models/wan_vae.py +++ b/videox_fun/models/wan_vae.py @@ -624,7 +624,7 @@ class AutoencoderKLWan(ModelMixin, ConfigMixin, FromOriginalModelMixin): self, latent_channels=16, temporal_compression_ratio=4, - spacial_compression_ratio=8 + spatial_compression_ratio=8 ): super().__init__() mean = [ diff --git a/videox_fun/pipeline/__init__.py b/videox_fun/pipeline/__init__.py index 786ed8d..9cd17d7 100755 --- a/videox_fun/pipeline/__init__.py +++ b/videox_fun/pipeline/__init__.py @@ -1,26 +1,41 @@ from .pipeline_cogvideox_fun import CogVideoXFunPipeline from .pipeline_cogvideox_fun_control import CogVideoXFunControlPipeline from .pipeline_cogvideox_fun_inpaint import CogVideoXFunInpaintPipeline -from .pipeline_wan_fun import WanFunPipeline + +from .pipeline_wan import WanPipeline from .pipeline_wan_fun_inpaint import WanFunInpaintPipeline from .pipeline_wan_fun_control import WanFunControlPipeline -from .pipeline_wan_phantom import WanFunPhantomPipeline -from .pipeline_wan2_2 import Wan2_2Pipeline -from .pipeline_wan2_2_i2v import Wan2_2I2VPipeline -WanPipeline = WanFunPipeline +from .pipeline_wan_phantom import WanFunPhantomPipeline + +from .pipeline_wan2_2 import Wan2_2Pipeline +from .pipeline_wan2_2_fun_inpaint import Wan2_2FunInpaintPipeline +from .pipeline_wan2_2_fun_control import Wan2_2FunControlPipeline + +WanFunPipeline = WanPipeline WanI2VPipeline = WanFunInpaintPipeline +Wan2_2FunPipeline = Wan2_2Pipeline +Wan2_2I2VPipeline = Wan2_2FunInpaintPipeline + import importlib.util if importlib.util.find_spec("pai_fuser") is not None: from pai_fuser.core import sparse_reset + # Wan2.1 WanFunInpaintPipeline.__call__ = sparse_reset(WanFunInpaintPipeline.__call__) WanFunPipeline.__call__ = sparse_reset(WanFunPipeline.__call__) WanFunControlPipeline.__call__ = sparse_reset(WanFunControlPipeline.__call__) WanI2VPipeline.__call__ = sparse_reset(WanI2VPipeline.__call__) WanPipeline.__call__ = sparse_reset(WanPipeline.__call__) + + # Phantom WanFunPhantomPipeline.__call__ = sparse_reset(WanFunPhantomPipeline.__call__) + + # Wan2.2 + Wan2_2FunInpaintPipeline.__call__ = sparse_reset(Wan2_2FunInpaintPipeline.__call__) + Wan2_2FunPipeline.__call__ = sparse_reset(Wan2_2FunPipeline.__call__) + Wan2_2FunControlPipeline.__call__ = sparse_reset(Wan2_2FunControlPipeline.__call__) Wan2_2Pipeline.__call__ = sparse_reset(Wan2_2Pipeline.__call__) Wan2_2I2VPipeline.__call__ = sparse_reset(Wan2_2I2VPipeline.__call__) \ No newline at end of file diff --git a/videox_fun/pipeline/pipeline_wan_fun.py b/videox_fun/pipeline/pipeline_wan.py similarity index 98% rename from videox_fun/pipeline/pipeline_wan_fun.py rename to videox_fun/pipeline/pipeline_wan.py index 13f4584..f105c9a 100755 --- a/videox_fun/pipeline/pipeline_wan_fun.py +++ b/videox_fun/pipeline/pipeline_wan.py @@ -104,7 +104,7 @@ class WanPipelineOutput(BaseOutput): videos: torch.Tensor -class WanFunPipeline(DiffusionPipeline): +class WanPipeline(DiffusionPipeline): r""" Pipeline for text-to-video generation using Wan. @@ -134,7 +134,7 @@ class WanFunPipeline(DiffusionPipeline): self.register_modules( tokenizer=tokenizer, text_encoder=text_encoder, vae=vae, transformer=transformer, scheduler=scheduler ) - self.video_processor = VideoProcessor(vae_scale_factor=self.vae.spacial_compression_ratio) + self.video_processor = VideoProcessor(vae_scale_factor=self.vae.spatial_compression_ratio) def _get_t5_prompt_embeds( self, @@ -274,8 +274,8 @@ class WanFunPipeline(DiffusionPipeline): batch_size, num_channels_latents, (num_frames - 1) // self.vae.temporal_compression_ratio + 1, - height // self.vae.spacial_compression_ratio, - width // self.vae.spacial_compression_ratio, + height // self.vae.spatial_compression_ratio, + width // self.vae.spatial_compression_ratio, ) if latents is None: @@ -508,7 +508,7 @@ class WanFunPipeline(DiffusionPipeline): # 6. Prepare extra step kwargs. TODO: Logic should ideally just be moved out of the pipeline extra_step_kwargs = self.prepare_extra_step_kwargs(generator, eta) - target_shape = (self.vae.latent_channels, (num_frames - 1) // self.vae.temporal_compression_ratio + 1, width // self.vae.spacial_compression_ratio, height // self.vae.spacial_compression_ratio) + target_shape = (self.vae.latent_channels, (num_frames - 1) // self.vae.temporal_compression_ratio + 1, width // self.vae.spatial_compression_ratio, height // self.vae.spatial_compression_ratio) seq_len = math.ceil((target_shape[2] * target_shape[3]) / (self.transformer.config.patch_size[1] * self.transformer.config.patch_size[2]) * target_shape[1]) # 7. Denoising loop num_warmup_steps = max(len(timesteps) - num_inference_steps * self.scheduler.order, 0) diff --git a/videox_fun/pipeline/pipeline_wan2_2.py b/videox_fun/pipeline/pipeline_wan2_2.py index accf33d..e96287a 100755 --- a/videox_fun/pipeline/pipeline_wan2_2.py +++ b/videox_fun/pipeline/pipeline_wan2_2.py @@ -136,7 +136,7 @@ class Wan2_2Pipeline(DiffusionPipeline): tokenizer=tokenizer, text_encoder=text_encoder, vae=vae, transformer=transformer, transformer_2=transformer_2, scheduler=scheduler ) - self.video_processor = VideoProcessor(vae_scale_factor=self.vae.spacial_compression_ratio) + self.video_processor = VideoProcessor(vae_scale_factor=self.vae.spatial_compression_ratio) def _get_t5_prompt_embeds( self, @@ -276,8 +276,8 @@ class Wan2_2Pipeline(DiffusionPipeline): batch_size, num_channels_latents, (num_frames - 1) // self.vae.temporal_compression_ratio + 1, - height // self.vae.spacial_compression_ratio, - width // self.vae.spacial_compression_ratio, + height // self.vae.spatial_compression_ratio, + width // self.vae.spatial_compression_ratio, ) if latents is None: @@ -511,7 +511,7 @@ class Wan2_2Pipeline(DiffusionPipeline): # 6. Prepare extra step kwargs. TODO: Logic should ideally just be moved out of the pipeline extra_step_kwargs = self.prepare_extra_step_kwargs(generator, eta) - target_shape = (self.vae.latent_channels, (num_frames - 1) // self.vae.temporal_compression_ratio + 1, width // self.vae.spacial_compression_ratio, height // self.vae.spacial_compression_ratio) + target_shape = (self.vae.latent_channels, (num_frames - 1) // self.vae.temporal_compression_ratio + 1, width // self.vae.spatial_compression_ratio, height // self.vae.spatial_compression_ratio) seq_len = math.ceil((target_shape[2] * target_shape[3]) / (self.transformer.config.patch_size[1] * self.transformer.config.patch_size[2]) * target_shape[1]) # 7. Denoising loop num_warmup_steps = max(len(timesteps) - num_inference_steps * self.scheduler.order, 0) diff --git a/videox_fun/pipeline/pipeline_wan2_2_fun_control.py b/videox_fun/pipeline/pipeline_wan2_2_fun_control.py new file mode 100644 index 0000000..9bb832b --- /dev/null +++ b/videox_fun/pipeline/pipeline_wan2_2_fun_control.py @@ -0,0 +1,883 @@ +import inspect +import math +from dataclasses import dataclass +from typing import Any, Callable, Dict, List, Optional, Tuple, Union + +import numpy as np +import torch +import torch.nn.functional as F +import torchvision.transforms.functional as TF +from diffusers import FlowMatchEulerDiscreteScheduler +from diffusers.callbacks import MultiPipelineCallbacks, PipelineCallback +from diffusers.image_processor import VaeImageProcessor +from diffusers.models.embeddings import get_1d_rotary_pos_embed +from diffusers.pipelines.pipeline_utils import DiffusionPipeline +from diffusers.schedulers import FlowMatchEulerDiscreteScheduler +from diffusers.utils import BaseOutput, logging, replace_example_docstring +from diffusers.utils.torch_utils import randn_tensor +from diffusers.video_processor import VideoProcessor +from einops import rearrange +from PIL import Image +from transformers import T5Tokenizer + +from ..models import (AutoencoderKLWan, AutoTokenizer, + Wan2_2Transformer3DModel, WanT5EncoderModel) +from ..utils.fm_solvers import (FlowDPMSolverMultistepScheduler, + get_sampling_sigmas) +from ..utils.fm_solvers_unipc import FlowUniPCMultistepScheduler + +logger = logging.get_logger(__name__) # pylint: disable=invalid-name + + +EXAMPLE_DOC_STRING = """ + Examples: + ```python + pass + ``` +""" + + +# Copied from diffusers.pipelines.stable_diffusion.pipeline_stable_diffusion.retrieve_timesteps +def retrieve_timesteps( + scheduler, + num_inference_steps: Optional[int] = None, + device: Optional[Union[str, torch.device]] = None, + timesteps: Optional[List[int]] = None, + sigmas: Optional[List[float]] = None, + **kwargs, +): + """ + Calls the scheduler's `set_timesteps` method and retrieves timesteps from the scheduler after the call. Handles + custom timesteps. Any kwargs will be supplied to `scheduler.set_timesteps`. + + Args: + scheduler (`SchedulerMixin`): + The scheduler to get timesteps from. + num_inference_steps (`int`): + The number of diffusion steps used when generating samples with a pre-trained model. If used, `timesteps` + must be `None`. + device (`str` or `torch.device`, *optional*): + The device to which the timesteps should be moved to. If `None`, the timesteps are not moved. + timesteps (`List[int]`, *optional*): + Custom timesteps used to override the timestep spacing strategy of the scheduler. If `timesteps` is passed, + `num_inference_steps` and `sigmas` must be `None`. + sigmas (`List[float]`, *optional*): + Custom sigmas used to override the timestep spacing strategy of the scheduler. If `sigmas` is passed, + `num_inference_steps` and `timesteps` must be `None`. + + Returns: + `Tuple[torch.Tensor, int]`: A tuple where the first element is the timestep schedule from the scheduler and the + second element is the number of inference steps. + """ + if timesteps is not None and sigmas is not None: + raise ValueError("Only one of `timesteps` or `sigmas` can be passed. Please choose one to set custom values") + if timesteps is not None: + accepts_timesteps = "timesteps" in set(inspect.signature(scheduler.set_timesteps).parameters.keys()) + if not accepts_timesteps: + raise ValueError( + f"The current scheduler class {scheduler.__class__}'s `set_timesteps` does not support custom" + f" timestep schedules. Please check whether you are using the correct scheduler." + ) + scheduler.set_timesteps(timesteps=timesteps, device=device, **kwargs) + timesteps = scheduler.timesteps + num_inference_steps = len(timesteps) + elif sigmas is not None: + accept_sigmas = "sigmas" in set(inspect.signature(scheduler.set_timesteps).parameters.keys()) + if not accept_sigmas: + raise ValueError( + f"The current scheduler class {scheduler.__class__}'s `set_timesteps` does not support custom" + f" sigmas schedules. Please check whether you are using the correct scheduler." + ) + scheduler.set_timesteps(sigmas=sigmas, device=device, **kwargs) + timesteps = scheduler.timesteps + num_inference_steps = len(timesteps) + else: + scheduler.set_timesteps(num_inference_steps, device=device, **kwargs) + timesteps = scheduler.timesteps + return timesteps, num_inference_steps + + +def resize_mask(mask, latent, process_first_frame_only=True): + latent_size = latent.size() + batch_size, channels, num_frames, height, width = mask.shape + + if process_first_frame_only: + target_size = list(latent_size[2:]) + target_size[0] = 1 + first_frame_resized = F.interpolate( + mask[:, :, 0:1, :, :], + size=target_size, + mode='trilinear', + align_corners=False + ) + + target_size = list(latent_size[2:]) + target_size[0] = target_size[0] - 1 + if target_size[0] != 0: + remaining_frames_resized = F.interpolate( + mask[:, :, 1:, :, :], + size=target_size, + mode='trilinear', + align_corners=False + ) + resized_mask = torch.cat([first_frame_resized, remaining_frames_resized], dim=2) + else: + resized_mask = first_frame_resized + else: + target_size = list(latent_size[2:]) + resized_mask = F.interpolate( + mask, + size=target_size, + mode='trilinear', + align_corners=False + ) + return resized_mask + + +@dataclass +class WanPipelineOutput(BaseOutput): + r""" + Output class for CogVideo pipelines. + + Args: + video (`torch.Tensor`, `np.ndarray`, or List[List[PIL.Image.Image]]): + List of video outputs - It can be a nested list of length `batch_size,` with each sub-list containing + denoised PIL image sequences of length `num_frames.` It can also be a NumPy array or Torch tensor of shape + `(batch_size, num_frames, channels, height, width)`. + """ + + videos: torch.Tensor + + +class Wan2_2FunControlPipeline(DiffusionPipeline): + r""" + Pipeline for text-to-video generation using Wan. + + This model inherits from [`DiffusionPipeline`]. Check the superclass documentation for the generic methods the + library implements for all the pipelines (such as downloading or saving, running on a particular device, etc.) + """ + + _optional_components = ["transformer_2"] + model_cpu_offload_seq = "text_encoder->transformer->transformer_2->vae" + + _callback_tensor_inputs = [ + "latents", + "prompt_embeds", + "negative_prompt_embeds", + ] + + def __init__( + self, + tokenizer: AutoTokenizer, + text_encoder: WanT5EncoderModel, + vae: AutoencoderKLWan, + transformer: Wan2_2Transformer3DModel, + transformer_2: Wan2_2Transformer3DModel = None, + scheduler: FlowMatchEulerDiscreteScheduler = None, + ): + super().__init__() + + self.register_modules( + tokenizer=tokenizer, text_encoder=text_encoder, vae=vae, transformer=transformer, + transformer_2=transformer_2, scheduler=scheduler + ) + self.video_processor = VideoProcessor(vae_scale_factor=self.vae.spatial_compression_ratio) + self.image_processor = VaeImageProcessor(vae_scale_factor=self.vae.spatial_compression_ratio) + self.mask_processor = VaeImageProcessor( + vae_scale_factor=self.vae.spatial_compression_ratio, do_normalize=False, do_binarize=True, do_convert_grayscale=True + ) + + def _get_t5_prompt_embeds( + self, + prompt: Union[str, List[str]] = None, + num_videos_per_prompt: int = 1, + max_sequence_length: int = 512, + device: Optional[torch.device] = None, + dtype: Optional[torch.dtype] = None, + ): + device = device or self._execution_device + dtype = dtype or self.text_encoder.dtype + + prompt = [prompt] if isinstance(prompt, str) else prompt + batch_size = len(prompt) + + text_inputs = self.tokenizer( + prompt, + padding="max_length", + max_length=max_sequence_length, + truncation=True, + add_special_tokens=True, + return_tensors="pt", + ) + text_input_ids = text_inputs.input_ids + prompt_attention_mask = text_inputs.attention_mask + untruncated_ids = self.tokenizer(prompt, padding="longest", return_tensors="pt").input_ids + + if untruncated_ids.shape[-1] >= text_input_ids.shape[-1] and not torch.equal(text_input_ids, untruncated_ids): + removed_text = self.tokenizer.batch_decode(untruncated_ids[:, max_sequence_length - 1 : -1]) + logger.warning( + "The following part of your input was truncated because `max_sequence_length` is set to " + f" {max_sequence_length} tokens: {removed_text}" + ) + + seq_lens = prompt_attention_mask.gt(0).sum(dim=1).long() + prompt_embeds = self.text_encoder(text_input_ids.to(device), attention_mask=prompt_attention_mask.to(device))[0] + prompt_embeds = prompt_embeds.to(dtype=dtype, device=device) + + # duplicate text embeddings for each generation per prompt, using mps friendly method + _, seq_len, _ = prompt_embeds.shape + prompt_embeds = prompt_embeds.repeat(1, num_videos_per_prompt, 1) + prompt_embeds = prompt_embeds.view(batch_size * num_videos_per_prompt, seq_len, -1) + + return [u[:v] for u, v in zip(prompt_embeds, seq_lens)] + + def encode_prompt( + self, + prompt: Union[str, List[str]], + negative_prompt: Optional[Union[str, List[str]]] = None, + do_classifier_free_guidance: bool = True, + num_videos_per_prompt: int = 1, + prompt_embeds: Optional[torch.Tensor] = None, + negative_prompt_embeds: Optional[torch.Tensor] = None, + max_sequence_length: int = 512, + device: Optional[torch.device] = None, + dtype: Optional[torch.dtype] = None, + ): + r""" + Encodes the prompt into text encoder hidden states. + + Args: + prompt (`str` or `List[str]`, *optional*): + prompt to be encoded + negative_prompt (`str` or `List[str]`, *optional*): + The prompt or prompts not to guide the image generation. If not defined, one has to pass + `negative_prompt_embeds` instead. Ignored when not using guidance (i.e., ignored if `guidance_scale` is + less than `1`). + do_classifier_free_guidance (`bool`, *optional*, defaults to `True`): + Whether to use classifier free guidance or not. + num_videos_per_prompt (`int`, *optional*, defaults to 1): + Number of videos that should be generated per prompt. torch device to place the resulting embeddings on + prompt_embeds (`torch.Tensor`, *optional*): + Pre-generated text embeddings. Can be used to easily tweak text inputs, *e.g.* prompt weighting. If not + provided, text embeddings will be generated from `prompt` input argument. + negative_prompt_embeds (`torch.Tensor`, *optional*): + Pre-generated negative text embeddings. Can be used to easily tweak text inputs, *e.g.* prompt + weighting. If not provided, negative_prompt_embeds will be generated from `negative_prompt` input + argument. + device: (`torch.device`, *optional*): + torch device + dtype: (`torch.dtype`, *optional*): + torch dtype + """ + device = device or self._execution_device + + prompt = [prompt] if isinstance(prompt, str) else prompt + if prompt is not None: + batch_size = len(prompt) + else: + batch_size = prompt_embeds.shape[0] + + if prompt_embeds is None: + prompt_embeds = self._get_t5_prompt_embeds( + prompt=prompt, + num_videos_per_prompt=num_videos_per_prompt, + max_sequence_length=max_sequence_length, + device=device, + dtype=dtype, + ) + + if do_classifier_free_guidance and negative_prompt_embeds is None: + negative_prompt = negative_prompt or "" + negative_prompt = batch_size * [negative_prompt] if isinstance(negative_prompt, str) else negative_prompt + + if prompt is not None and type(prompt) is not type(negative_prompt): + raise TypeError( + f"`negative_prompt` should be the same type to `prompt`, but got {type(negative_prompt)} !=" + f" {type(prompt)}." + ) + elif batch_size != len(negative_prompt): + raise ValueError( + f"`negative_prompt`: {negative_prompt} has batch size {len(negative_prompt)}, but `prompt`:" + f" {prompt} has batch size {batch_size}. Please make sure that passed `negative_prompt` matches" + " the batch size of `prompt`." + ) + + negative_prompt_embeds = self._get_t5_prompt_embeds( + prompt=negative_prompt, + num_videos_per_prompt=num_videos_per_prompt, + max_sequence_length=max_sequence_length, + device=device, + dtype=dtype, + ) + + return prompt_embeds, negative_prompt_embeds + + def prepare_latents( + self, batch_size, num_channels_latents, num_frames, height, width, dtype, device, generator, latents=None + ): + if isinstance(generator, list) and len(generator) != batch_size: + raise ValueError( + f"You have passed a list of generators of length {len(generator)}, but requested an effective batch" + f" size of {batch_size}. Make sure the batch size matches the length of the generators." + ) + + shape = ( + batch_size, + num_channels_latents, + (num_frames - 1) // self.vae.temporal_compression_ratio + 1, + height // self.vae.spatial_compression_ratio, + width // self.vae.spatial_compression_ratio, + ) + + if latents is None: + latents = randn_tensor(shape, generator=generator, device=device, dtype=dtype) + else: + latents = latents.to(device) + + # scale the initial noise by the standard deviation required by the scheduler + if hasattr(self.scheduler, "init_noise_sigma"): + latents = latents * self.scheduler.init_noise_sigma + return latents + + def prepare_mask_latents( + self, mask, masked_image, batch_size, height, width, dtype, device, generator, do_classifier_free_guidance, noise_aug_strength + ): + # resize the mask to latents shape as we concatenate the mask to the latents + # we do that before converting to dtype to avoid breaking in case we're using cpu_offload + # and half precision + + if mask is not None: + mask = mask.to(device=device, dtype=self.vae.dtype) + bs = 1 + new_mask = [] + for i in range(0, mask.shape[0], bs): + mask_bs = mask[i : i + bs] + mask_bs = self.vae.encode(mask_bs)[0] + mask_bs = mask_bs.mode() + new_mask.append(mask_bs) + mask = torch.cat(new_mask, dim = 0) + # mask = mask * self.vae.config.scaling_factor + + if masked_image is not None: + masked_image = masked_image.to(device=device, dtype=self.vae.dtype) + bs = 1 + new_mask_pixel_values = [] + for i in range(0, masked_image.shape[0], bs): + mask_pixel_values_bs = masked_image[i : i + bs] + mask_pixel_values_bs = self.vae.encode(mask_pixel_values_bs)[0] + mask_pixel_values_bs = mask_pixel_values_bs.mode() + new_mask_pixel_values.append(mask_pixel_values_bs) + masked_image_latents = torch.cat(new_mask_pixel_values, dim = 0) + # masked_image_latents = masked_image_latents * self.vae.config.scaling_factor + else: + masked_image_latents = None + + return mask, masked_image_latents + + def prepare_control_latents( + self, control, control_image, batch_size, height, width, dtype, device, generator, do_classifier_free_guidance + ): + # resize the control to latents shape as we concatenate the control to the latents + # we do that before converting to dtype to avoid breaking in case we're using cpu_offload + # and half precision + + if control is not None: + control = control.to(device=device, dtype=dtype) + bs = 1 + new_control = [] + for i in range(0, control.shape[0], bs): + control_bs = control[i : i + bs] + control_bs = self.vae.encode(control_bs)[0] + control_bs = control_bs.mode() + new_control.append(control_bs) + control = torch.cat(new_control, dim = 0) + + if control_image is not None: + control_image = control_image.to(device=device, dtype=dtype) + bs = 1 + new_control_pixel_values = [] + for i in range(0, control_image.shape[0], bs): + control_pixel_values_bs = control_image[i : i + bs] + control_pixel_values_bs = self.vae.encode(control_pixel_values_bs)[0] + control_pixel_values_bs = control_pixel_values_bs.mode() + new_control_pixel_values.append(control_pixel_values_bs) + control_image_latents = torch.cat(new_control_pixel_values, dim = 0) + else: + control_image_latents = None + + return control, control_image_latents + + def decode_latents(self, latents: torch.Tensor) -> torch.Tensor: + frames = self.vae.decode(latents.to(self.vae.dtype)).sample + frames = (frames / 2 + 0.5).clamp(0, 1) + # we always cast to float32 as this does not cause significant overhead and is compatible with bfloa16 + frames = frames.cpu().float().numpy() + return frames + + # Copied from diffusers.pipelines.stable_diffusion.pipeline_stable_diffusion.StableDiffusionPipeline.prepare_extra_step_kwargs + def prepare_extra_step_kwargs(self, generator, eta): + # prepare extra kwargs for the scheduler step, since not all schedulers have the same signature + # eta (η) is only used with the DDIMScheduler, it will be ignored for other schedulers. + # eta corresponds to η in DDIM paper: https://arxiv.org/abs/2010.02502 + # and should be between [0, 1] + + accepts_eta = "eta" in set(inspect.signature(self.scheduler.step).parameters.keys()) + extra_step_kwargs = {} + if accepts_eta: + extra_step_kwargs["eta"] = eta + + # check if the scheduler accepts generator + accepts_generator = "generator" in set(inspect.signature(self.scheduler.step).parameters.keys()) + if accepts_generator: + extra_step_kwargs["generator"] = generator + return extra_step_kwargs + + # Copied from diffusers.pipelines.latte.pipeline_latte.LattePipeline.check_inputs + def check_inputs( + self, + prompt, + height, + width, + negative_prompt, + callback_on_step_end_tensor_inputs, + prompt_embeds=None, + negative_prompt_embeds=None, + ): + if height % 8 != 0 or width % 8 != 0: + raise ValueError(f"`height` and `width` have to be divisible by 8 but are {height} and {width}.") + + if callback_on_step_end_tensor_inputs is not None and not all( + k in self._callback_tensor_inputs for k in callback_on_step_end_tensor_inputs + ): + raise ValueError( + f"`callback_on_step_end_tensor_inputs` has to be in {self._callback_tensor_inputs}, but found {[k for k in callback_on_step_end_tensor_inputs if k not in self._callback_tensor_inputs]}" + ) + if prompt is not None and prompt_embeds is not None: + raise ValueError( + f"Cannot forward both `prompt`: {prompt} and `prompt_embeds`: {prompt_embeds}. Please make sure to" + " only forward one of the two." + ) + elif prompt is None and prompt_embeds is None: + raise ValueError( + "Provide either `prompt` or `prompt_embeds`. Cannot leave both `prompt` and `prompt_embeds` undefined." + ) + elif prompt is not None and (not isinstance(prompt, str) and not isinstance(prompt, list)): + raise ValueError(f"`prompt` has to be of type `str` or `list` but is {type(prompt)}") + + if prompt is not None and negative_prompt_embeds is not None: + raise ValueError( + f"Cannot forward both `prompt`: {prompt} and `negative_prompt_embeds`:" + f" {negative_prompt_embeds}. Please make sure to only forward one of the two." + ) + + if negative_prompt is not None and negative_prompt_embeds is not None: + raise ValueError( + f"Cannot forward both `negative_prompt`: {negative_prompt} and `negative_prompt_embeds`:" + f" {negative_prompt_embeds}. Please make sure to only forward one of the two." + ) + + if prompt_embeds is not None and negative_prompt_embeds is not None: + if prompt_embeds.shape != negative_prompt_embeds.shape: + raise ValueError( + "`prompt_embeds` and `negative_prompt_embeds` must have the same shape when passed directly, but" + f" got: `prompt_embeds` {prompt_embeds.shape} != `negative_prompt_embeds`" + f" {negative_prompt_embeds.shape}." + ) + + @property + def guidance_scale(self): + return self._guidance_scale + + @property + def num_timesteps(self): + return self._num_timesteps + + @property + def attention_kwargs(self): + return self._attention_kwargs + + @property + def interrupt(self): + return self._interrupt + + @torch.no_grad() + @replace_example_docstring(EXAMPLE_DOC_STRING) + def __call__( + self, + prompt: Optional[Union[str, List[str]]] = None, + negative_prompt: Optional[Union[str, List[str]]] = None, + height: int = 480, + width: int = 720, + video: Union[torch.FloatTensor] = None, + mask_video: Union[torch.FloatTensor] = None, + control_video: Union[torch.FloatTensor] = None, + control_camera_video: Union[torch.FloatTensor] = None, + start_image: Union[torch.FloatTensor] = None, + ref_image: Union[torch.FloatTensor] = None, + num_frames: int = 49, + num_inference_steps: int = 50, + timesteps: Optional[List[int]] = None, + guidance_scale: float = 6, + num_videos_per_prompt: int = 1, + eta: float = 0.0, + generator: Optional[Union[torch.Generator, List[torch.Generator]]] = None, + latents: Optional[torch.FloatTensor] = None, + prompt_embeds: Optional[torch.FloatTensor] = None, + negative_prompt_embeds: Optional[torch.FloatTensor] = None, + output_type: str = "numpy", + return_dict: bool = False, + callback_on_step_end: Optional[ + Union[Callable[[int, int, Dict], None], PipelineCallback, MultiPipelineCallbacks] + ] = None, + attention_kwargs: Optional[Dict[str, Any]] = None, + callback_on_step_end_tensor_inputs: List[str] = ["latents"], + max_sequence_length: int = 512, + boundary: float = 0.875, + comfyui_progressbar: bool = False, + shift: int = 5, + ) -> Union[WanPipelineOutput, Tuple]: + """ + Function invoked when calling the pipeline for generation. + Args: + + Examples: + + Returns: + + """ + + if isinstance(callback_on_step_end, (PipelineCallback, MultiPipelineCallbacks)): + callback_on_step_end_tensor_inputs = callback_on_step_end.tensor_inputs + num_videos_per_prompt = 1 + + # 1. Check inputs. Raise error if not correct + self.check_inputs( + prompt, + height, + width, + negative_prompt, + callback_on_step_end_tensor_inputs, + prompt_embeds, + negative_prompt_embeds, + ) + self._guidance_scale = guidance_scale + self._attention_kwargs = attention_kwargs + self._interrupt = False + + # 2. Default call parameters + if prompt is not None and isinstance(prompt, str): + batch_size = 1 + elif prompt is not None and isinstance(prompt, list): + batch_size = len(prompt) + else: + batch_size = prompt_embeds.shape[0] + + device = self._execution_device + weight_dtype = self.text_encoder.dtype + + # here `guidance_scale` is defined analog to the guidance weight `w` of equation (2) + # of the Imagen paper: https://arxiv.org/pdf/2205.11487.pdf . `guidance_scale = 1` + # corresponds to doing no classifier free guidance. + do_classifier_free_guidance = guidance_scale > 1.0 + + # 3. Encode input prompt + prompt_embeds, negative_prompt_embeds = self.encode_prompt( + prompt, + negative_prompt, + do_classifier_free_guidance, + num_videos_per_prompt=num_videos_per_prompt, + prompt_embeds=prompt_embeds, + negative_prompt_embeds=negative_prompt_embeds, + max_sequence_length=max_sequence_length, + device=device, + ) + if do_classifier_free_guidance: + in_prompt_embeds = negative_prompt_embeds + prompt_embeds + else: + in_prompt_embeds = prompt_embeds + + # 4. Prepare timesteps + if isinstance(self.scheduler, FlowMatchEulerDiscreteScheduler): + timesteps, num_inference_steps = retrieve_timesteps(self.scheduler, num_inference_steps, device, timesteps, mu=1) + elif isinstance(self.scheduler, FlowUniPCMultistepScheduler): + self.scheduler.set_timesteps(num_inference_steps, device=device, shift=shift) + timesteps = self.scheduler.timesteps + elif isinstance(self.scheduler, FlowDPMSolverMultistepScheduler): + sampling_sigmas = get_sampling_sigmas(num_inference_steps, shift) + timesteps, _ = retrieve_timesteps( + self.scheduler, + device=device, + sigmas=sampling_sigmas) + else: + timesteps, num_inference_steps = retrieve_timesteps(self.scheduler, num_inference_steps, device, timesteps) + self._num_timesteps = len(timesteps) + if comfyui_progressbar: + from comfy.utils import ProgressBar + pbar = ProgressBar(num_inference_steps + 2) + + # 5. Prepare latents. + if video is not None: + video_length = video.shape[2] + init_video = self.image_processor.preprocess(rearrange(video, "b c f h w -> (b f) c h w"), height=height, width=width) + init_video = init_video.to(dtype=torch.float32) + init_video = rearrange(init_video, "(b f) c h w -> b c f h w", f=video_length) + else: + init_video = None + + latent_channels = self.vae.config.latent_channels + latents = self.prepare_latents( + batch_size * num_videos_per_prompt, + latent_channels, + num_frames, + height, + width, + weight_dtype, + device, + generator, + latents, + ) + if comfyui_progressbar: + pbar.update(1) + + # Prepare mask latent variables + if init_video is not None: + if (mask_video == 255).all(): + mask_latents = torch.tile( + torch.zeros_like(latents)[:, :1].to(device, weight_dtype), [1, 4, 1, 1, 1] + ) + masked_video_latents = torch.zeros_like(latents).to(device, weight_dtype) + else: + bs, _, video_length, height, width = video.size() + mask_condition = self.mask_processor.preprocess(rearrange(mask_video, "b c f h w -> (b f) c h w"), height=height, width=width) + mask_condition = mask_condition.to(dtype=torch.float32) + mask_condition = rearrange(mask_condition, "(b f) c h w -> b c f h w", f=video_length) + + masked_video = init_video * (torch.tile(mask_condition, [1, 3, 1, 1, 1]) < 0.5) + _, masked_video_latents = self.prepare_mask_latents( + None, + masked_video, + batch_size, + height, + width, + weight_dtype, + device, + generator, + do_classifier_free_guidance, + noise_aug_strength=None, + ) + + mask_condition = torch.concat( + [ + torch.repeat_interleave(mask_condition[:, :, 0:1], repeats=4, dim=2), + mask_condition[:, :, 1:] + ], dim=2 + ) + mask_condition = mask_condition.view(bs, mask_condition.shape[2] // 4, 4, height, width) + mask_condition = mask_condition.transpose(1, 2) + mask_latents = resize_mask(1 - mask_condition, masked_video_latents, True).to(device, weight_dtype) + + # Prepare mask latent variables + if control_camera_video is not None: + control_latents = None + # Rearrange dimensions + # Concatenate and transpose dimensions + control_camera_latents = torch.concat( + [ + torch.repeat_interleave(control_camera_video[:, :, 0:1], repeats=4, dim=2), + control_camera_video[:, :, 1:] + ], dim=2 + ).transpose(1, 2) + + # Reshape, transpose, and view into desired shape + b, f, c, h, w = control_camera_latents.shape + control_camera_latents = control_camera_latents.contiguous().view(b, f // 4, 4, c, h, w).transpose(2, 3) + control_camera_latents = control_camera_latents.contiguous().view(b, f // 4, c * 4, h, w).transpose(1, 2) + elif control_video is not None: + video_length = control_video.shape[2] + control_video = self.image_processor.preprocess(rearrange(control_video, "b c f h w -> (b f) c h w"), height=height, width=width) + control_video = control_video.to(dtype=torch.float32) + control_video = rearrange(control_video, "(b f) c h w -> b c f h w", f=video_length) + control_video_latents = self.prepare_control_latents( + None, + control_video, + batch_size, + height, + width, + weight_dtype, + device, + generator, + do_classifier_free_guidance + )[1] + control_camera_latents = None + else: + control_video_latents = torch.zeros_like(latents).to(device, weight_dtype) + control_camera_latents = None + + if start_image is not None: + video_length = start_image.shape[2] + start_image = self.image_processor.preprocess(rearrange(start_image, "b c f h w -> (b f) c h w"), height=height, width=width) + start_image = start_image.to(dtype=torch.float32) + start_image = rearrange(start_image, "(b f) c h w -> b c f h w", f=video_length) + + start_image_latentes = self.prepare_control_latents( + None, + start_image, + batch_size, + height, + width, + weight_dtype, + device, + generator, + do_classifier_free_guidance + )[1] + + start_image_latentes_conv_in = torch.zeros_like(latents) + if latents.size()[2] != 1: + start_image_latentes_conv_in[:, :, :1] = start_image_latentes + else: + start_image_latentes_conv_in = torch.zeros_like(latents) + + if self.transformer.config.get("add_ref_conv", False): + if ref_image is not None: + video_length = ref_image.shape[2] + ref_image = self.image_processor.preprocess(rearrange(ref_image, "b c f h w -> (b f) c h w"), height=height, width=width) + ref_image = ref_image.to(dtype=torch.float32) + ref_image = rearrange(ref_image, "(b f) c h w -> b c f h w", f=video_length) + + ref_image_latentes = self.prepare_control_latents( + None, + ref_image, + batch_size, + height, + width, + weight_dtype, + device, + generator, + do_classifier_free_guidance + )[1] + ref_image_latentes = ref_image_latentes[:, :, 0] + else: + ref_image_latentes = torch.zeros_like(latents)[:, :, 0] + else: + if ref_image is not None: + raise ValueError("The add_ref_conv is False, but ref_image is not None") + else: + ref_image_latentes = None + + if comfyui_progressbar: + pbar.update(1) + + # 6. Prepare extra step kwargs. TODO: Logic should ideally just be moved out of the pipeline + extra_step_kwargs = self.prepare_extra_step_kwargs(generator, eta) + + target_shape = (self.vae.latent_channels, (num_frames - 1) // self.vae.temporal_compression_ratio + 1, width // self.vae.spatial_compression_ratio, height // self.vae.spatial_compression_ratio) + seq_len = math.ceil((target_shape[2] * target_shape[3]) / (self.transformer.config.patch_size[1] * self.transformer.config.patch_size[2]) * target_shape[1]) + # 7. Denoising loop + num_warmup_steps = max(len(timesteps) - num_inference_steps * self.scheduler.order, 0) + self.transformer.num_inference_steps = num_inference_steps + with self.progress_bar(total=num_inference_steps) as progress_bar: + for i, t in enumerate(timesteps): + self.transformer.current_steps = i + + if self.interrupt: + continue + + latent_model_input = torch.cat([latents] * 2) if do_classifier_free_guidance else latents + if hasattr(self.scheduler, "scale_model_input"): + latent_model_input = self.scheduler.scale_model_input(latent_model_input, t) + + # Prepare mask latent variables + if control_camera_video is not None: + control_latents_input = None + control_camera_latents_input = ( + torch.cat([control_camera_latents] * 2) if do_classifier_free_guidance else control_camera_latents + ).to(device, weight_dtype) + else: + control_latents_input = ( + torch.cat([control_video_latents] * 2) if do_classifier_free_guidance else control_video_latents + ).to(device, weight_dtype) + control_camera_latents_input = None + + if init_video is not None: + mask_input = torch.cat([mask_latents] * 2) if do_classifier_free_guidance else mask_latents + masked_video_latents_input = ( + torch.cat([masked_video_latents] * 2) if do_classifier_free_guidance else masked_video_latents + ) + y = torch.cat([mask_input, masked_video_latents_input], dim=1).to(device, weight_dtype) + control_latents_input = y if control_latents_input is None else \ + torch.cat([control_latents_input, y], dim = 1) + else: + start_image_latentes_conv_in_input = ( + torch.cat([start_image_latentes_conv_in] * 2) if do_classifier_free_guidance else start_image_latentes_conv_in + ).to(device, weight_dtype) + control_latents_input = start_image_latentes_conv_in_input if control_latents_input is None else \ + torch.cat([control_latents_input, start_image_latentes_conv_in_input], dim = 1) + + if ref_image_latentes is not None: + full_ref = ( + torch.cat([ref_image_latentes] * 2) if do_classifier_free_guidance else ref_image_latentes + ).to(device, weight_dtype) + else: + full_ref = None + + # broadcast to batch dimension in a way that's compatible with ONNX/Core ML + timestep = t.expand(latent_model_input.shape[0]) + + if self.transformer_2 is not None: + if t >= boundary * self.scheduler.config.num_train_timesteps: + local_transformer = self.transformer_2 + else: + local_transformer = self.transformer + else: + local_transformer = self.transformer + + # predict noise model_output + with torch.cuda.amp.autocast(dtype=weight_dtype), torch.cuda.device(device=device): + noise_pred = local_transformer( + x=latent_model_input, + context=in_prompt_embeds, + t=timestep, + seq_len=seq_len, + y=control_latents_input, + y_camera=control_camera_latents_input, + full_ref=full_ref, + ) + + # perform guidance + if do_classifier_free_guidance: + noise_pred_uncond, noise_pred_text = noise_pred.chunk(2) + noise_pred = noise_pred_uncond + self.guidance_scale * (noise_pred_text - noise_pred_uncond) + + # compute the previous noisy sample x_t -> x_t-1 + latents = self.scheduler.step(noise_pred, t, latents, **extra_step_kwargs, return_dict=False)[0] + + if callback_on_step_end is not None: + callback_kwargs = {} + for k in callback_on_step_end_tensor_inputs: + callback_kwargs[k] = locals()[k] + callback_outputs = callback_on_step_end(self, i, t, callback_kwargs) + + latents = callback_outputs.pop("latents", latents) + prompt_embeds = callback_outputs.pop("prompt_embeds", prompt_embeds) + negative_prompt_embeds = callback_outputs.pop("negative_prompt_embeds", negative_prompt_embeds) + + if i == len(timesteps) - 1 or ((i + 1) > num_warmup_steps and (i + 1) % self.scheduler.order == 0): + progress_bar.update() + if comfyui_progressbar: + pbar.update(1) + + if output_type == "numpy": + video = self.decode_latents(latents) + elif not output_type == "latent": + video = self.decode_latents(latents) + video = self.video_processor.postprocess_video(video=video, output_type=output_type) + else: + video = latents + + # Offload all models + self.maybe_free_model_hooks() + + if not return_dict: + video = torch.from_numpy(video) + + return WanPipelineOutput(videos=video) diff --git a/videox_fun/pipeline/pipeline_wan2_2_i2v.py b/videox_fun/pipeline/pipeline_wan2_2_fun_inpaint.py similarity index 98% rename from videox_fun/pipeline/pipeline_wan2_2_i2v.py rename to videox_fun/pipeline/pipeline_wan2_2_fun_inpaint.py index 6a719fc..e422099 100644 --- a/videox_fun/pipeline/pipeline_wan2_2_i2v.py +++ b/videox_fun/pipeline/pipeline_wan2_2_fun_inpaint.py @@ -148,7 +148,7 @@ class WanPipelineOutput(BaseOutput): videos: torch.Tensor -class Wan2_2I2VPipeline(DiffusionPipeline): +class Wan2_2FunInpaintPipeline(DiffusionPipeline): r""" Pipeline for text-to-video generation using Wan. @@ -180,10 +180,10 @@ class Wan2_2I2VPipeline(DiffusionPipeline): tokenizer=tokenizer, text_encoder=text_encoder, vae=vae, transformer=transformer, transformer_2=transformer_2, scheduler=scheduler ) - self.video_processor = VideoProcessor(vae_scale_factor=self.vae.spacial_compression_ratio) - self.image_processor = VaeImageProcessor(vae_scale_factor=self.vae.spacial_compression_ratio) + self.video_processor = VideoProcessor(vae_scale_factor=self.vae.spatial_compression_ratio) + self.image_processor = VaeImageProcessor(vae_scale_factor=self.vae.spatial_compression_ratio) self.mask_processor = VaeImageProcessor( - vae_scale_factor=self.vae.spacial_compression_ratio, do_normalize=False, do_binarize=True, do_convert_grayscale=True + vae_scale_factor=self.vae.spatial_compression_ratio, do_normalize=False, do_binarize=True, do_convert_grayscale=True ) def _get_t5_prompt_embeds( @@ -324,8 +324,8 @@ class Wan2_2I2VPipeline(DiffusionPipeline): batch_size, num_channels_latents, (num_frames - 1) // self.vae.temporal_compression_ratio + 1, - height // self.vae.spacial_compression_ratio, - width // self.vae.spacial_compression_ratio, + height // self.vae.spatial_compression_ratio, + width // self.vae.spatial_compression_ratio, ) if latents is None: @@ -644,7 +644,7 @@ class Wan2_2I2VPipeline(DiffusionPipeline): # 6. Prepare extra step kwargs. TODO: Logic should ideally just be moved out of the pipeline extra_step_kwargs = self.prepare_extra_step_kwargs(generator, eta) - target_shape = (self.vae.latent_channels, (num_frames - 1) // self.vae.temporal_compression_ratio + 1, width // self.vae.spacial_compression_ratio, height // self.vae.spacial_compression_ratio) + target_shape = (self.vae.latent_channels, (num_frames - 1) // self.vae.temporal_compression_ratio + 1, width // self.vae.spatial_compression_ratio, height // self.vae.spatial_compression_ratio) seq_len = math.ceil((target_shape[2] * target_shape[3]) / (self.transformer.config.patch_size[1] * self.transformer.config.patch_size[2]) * target_shape[1]) # 7. Denoising loop num_warmup_steps = max(len(timesteps) - num_inference_steps * self.scheduler.order, 0) diff --git a/videox_fun/pipeline/pipeline_wan_fun_control.py b/videox_fun/pipeline/pipeline_wan_fun_control.py index 80bba08..4d4ec75 100755 --- a/videox_fun/pipeline/pipeline_wan_fun_control.py +++ b/videox_fun/pipeline/pipeline_wan_fun_control.py @@ -181,10 +181,10 @@ class WanFunControlPipeline(DiffusionPipeline): tokenizer=tokenizer, text_encoder=text_encoder, vae=vae, transformer=transformer, clip_image_encoder=clip_image_encoder, scheduler=scheduler ) - self.video_processor = VideoProcessor(vae_scale_factor=self.vae.spacial_compression_ratio) - self.image_processor = VaeImageProcessor(vae_scale_factor=self.vae.spacial_compression_ratio) + self.video_processor = VideoProcessor(vae_scale_factor=self.vae.spatial_compression_ratio) + self.image_processor = VaeImageProcessor(vae_scale_factor=self.vae.spatial_compression_ratio) self.mask_processor = VaeImageProcessor( - vae_scale_factor=self.vae.spacial_compression_ratio, do_normalize=False, do_binarize=True, do_convert_grayscale=True + vae_scale_factor=self.vae.spatial_compression_ratio, do_normalize=False, do_binarize=True, do_convert_grayscale=True ) def _get_t5_prompt_embeds( @@ -325,8 +325,8 @@ class WanFunControlPipeline(DiffusionPipeline): batch_size, num_channels_latents, (num_frames - 1) // self.vae.temporal_compression_ratio + 1, - height // self.vae.spacial_compression_ratio, - width // self.vae.spacial_compression_ratio, + height // self.vae.spatial_compression_ratio, + width // self.vae.spatial_compression_ratio, ) if latents is None: @@ -698,7 +698,7 @@ class WanFunControlPipeline(DiffusionPipeline): # 6. Prepare extra step kwargs. TODO: Logic should ideally just be moved out of the pipeline extra_step_kwargs = self.prepare_extra_step_kwargs(generator, eta) - target_shape = (self.vae.latent_channels, (num_frames - 1) // self.vae.temporal_compression_ratio + 1, width // self.vae.spacial_compression_ratio, height // self.vae.spacial_compression_ratio) + target_shape = (self.vae.latent_channels, (num_frames - 1) // self.vae.temporal_compression_ratio + 1, width // self.vae.spatial_compression_ratio, height // self.vae.spatial_compression_ratio) seq_len = math.ceil((target_shape[2] * target_shape[3]) / (self.transformer.config.patch_size[1] * self.transformer.config.patch_size[2]) * target_shape[1]) # 7. Denoising loop num_warmup_steps = max(len(timesteps) - num_inference_steps * self.scheduler.order, 0) diff --git a/videox_fun/pipeline/pipeline_wan_fun_inpaint.py b/videox_fun/pipeline/pipeline_wan_fun_inpaint.py index 916593b..35f3b96 100755 --- a/videox_fun/pipeline/pipeline_wan_fun_inpaint.py +++ b/videox_fun/pipeline/pipeline_wan_fun_inpaint.py @@ -180,10 +180,10 @@ class WanFunInpaintPipeline(DiffusionPipeline): tokenizer=tokenizer, text_encoder=text_encoder, vae=vae, transformer=transformer, clip_image_encoder=clip_image_encoder, scheduler=scheduler ) - self.video_processor = VideoProcessor(vae_scale_factor=self.vae.spacial_compression_ratio) - self.image_processor = VaeImageProcessor(vae_scale_factor=self.vae.spacial_compression_ratio) + self.video_processor = VideoProcessor(vae_scale_factor=self.vae.spatial_compression_ratio) + self.image_processor = VaeImageProcessor(vae_scale_factor=self.vae.spatial_compression_ratio) self.mask_processor = VaeImageProcessor( - vae_scale_factor=self.vae.spacial_compression_ratio, do_normalize=False, do_binarize=True, do_convert_grayscale=True + vae_scale_factor=self.vae.spatial_compression_ratio, do_normalize=False, do_binarize=True, do_convert_grayscale=True ) def _get_t5_prompt_embeds( @@ -324,8 +324,8 @@ class WanFunInpaintPipeline(DiffusionPipeline): batch_size, num_channels_latents, (num_frames - 1) // self.vae.temporal_compression_ratio + 1, - height // self.vae.spacial_compression_ratio, - width // self.vae.spacial_compression_ratio, + height // self.vae.spatial_compression_ratio, + width // self.vae.spatial_compression_ratio, ) if latents is None: @@ -653,7 +653,7 @@ class WanFunInpaintPipeline(DiffusionPipeline): # 6. Prepare extra step kwargs. TODO: Logic should ideally just be moved out of the pipeline extra_step_kwargs = self.prepare_extra_step_kwargs(generator, eta) - target_shape = (self.vae.latent_channels, (num_frames - 1) // self.vae.temporal_compression_ratio + 1, width // self.vae.spacial_compression_ratio, height // self.vae.spacial_compression_ratio) + target_shape = (self.vae.latent_channels, (num_frames - 1) // self.vae.temporal_compression_ratio + 1, width // self.vae.spatial_compression_ratio, height // self.vae.spatial_compression_ratio) seq_len = math.ceil((target_shape[2] * target_shape[3]) / (self.transformer.config.patch_size[1] * self.transformer.config.patch_size[2]) * target_shape[1]) # 7. Denoising loop num_warmup_steps = max(len(timesteps) - num_inference_steps * self.scheduler.order, 0) diff --git a/videox_fun/pipeline/pipeline_wan_phantom.py b/videox_fun/pipeline/pipeline_wan_phantom.py index 2935089..fd993b0 100644 --- a/videox_fun/pipeline/pipeline_wan_phantom.py +++ b/videox_fun/pipeline/pipeline_wan_phantom.py @@ -180,10 +180,10 @@ class WanFunPhantomPipeline(DiffusionPipeline): tokenizer=tokenizer, text_encoder=text_encoder, vae=vae, transformer=transformer, scheduler=scheduler ) - self.video_processor = VideoProcessor(vae_scale_factor=self.vae.spacial_compression_ratio) - self.image_processor = VaeImageProcessor(vae_scale_factor=self.vae.spacial_compression_ratio) + self.video_processor = VideoProcessor(vae_scale_factor=self.vae.spatial_compression_ratio) + self.image_processor = VaeImageProcessor(vae_scale_factor=self.vae.spatial_compression_ratio) self.mask_processor = VaeImageProcessor( - vae_scale_factor=self.vae.spacial_compression_ratio, do_normalize=False, do_binarize=True, do_convert_grayscale=True + vae_scale_factor=self.vae.spatial_compression_ratio, do_normalize=False, do_binarize=True, do_convert_grayscale=True ) def _get_t5_prompt_embeds( @@ -324,8 +324,8 @@ class WanFunPhantomPipeline(DiffusionPipeline): batch_size, num_channels_latents, (num_frames - 1) // self.vae.temporal_compression_ratio + 1, - height // self.vae.spacial_compression_ratio, - width // self.vae.spacial_compression_ratio, + height // self.vae.spatial_compression_ratio, + width // self.vae.spatial_compression_ratio, ) if latents is None: @@ -617,7 +617,7 @@ class WanFunPhantomPipeline(DiffusionPipeline): # 6. Prepare extra step kwargs. TODO: Logic should ideally just be moved out of the pipeline extra_step_kwargs = self.prepare_extra_step_kwargs(generator, eta) - target_shape = (self.vae.latent_channels, (num_frames - 1) // self.vae.temporal_compression_ratio + 1, width // self.vae.spacial_compression_ratio, height // self.vae.spacial_compression_ratio) + target_shape = (self.vae.latent_channels, (num_frames - 1) // self.vae.temporal_compression_ratio + 1, width // self.vae.spatial_compression_ratio, height // self.vae.spatial_compression_ratio) seq_len = math.ceil((target_shape[2] * target_shape[3]) / (self.transformer.config.patch_size[1] * self.transformer.config.patch_size[2]) * target_shape[1]) # 7. Denoising loop num_warmup_steps = max(len(timesteps) - num_inference_steps * self.scheduler.order, 0)