From 512a8a6854966dc7d4aed6df7e24c26604e27569 Mon Sep 17 00:00:00 2001 From: Aryan Date: Tue, 1 Oct 2024 08:05:10 +0530 Subject: [PATCH] CogVideoX LoRA and full finetuning (#1) * update * update * update * update * update * update * update * update * update * update * update * update * update * update * update --- .gitignore | 5 + Makefile | 11 + README.md | 102 ++- accelerate_configs/compiled_1.yaml | 22 + accelerate_configs/uncompiled_1.yaml | 17 + assets/tests/metadata.csv | 2 + assets/tests/prompts.txt | 1 + assets/tests/prompts_multi.txt | 2 + assets/tests/videos.txt | 1 + assets/tests/videos/hiker.mp4 | Bin 0 -> 265988 bytes assets/tests/videos/hiker_tiny.mp4 | Bin 0 -> 70973 bytes assets/tests/videos_multi.txt | 2 + metrics.sh | 155 ++++ prepare_dataset.sh | 42 ++ pyproject.toml | 28 + tests/test_dataset.py | 104 +++ train_text_to_video_lora.sh | 70 ++ train_text_to_video_sft.sh | 68 ++ training/args.py | 420 +++++++++++ training/cogvideox_text_to_video_lora.py | 910 +++++++++++++++++++++++ training/cogvideox_text_to_video_sft.py | 833 +++++++++++++++++++++ training/dataset.py | 289 +++++++ training/prepare_dataset.py | 458 ++++++++++++ training/text_encoder/__init__.py | 1 + training/text_encoder/text_encoder.py | 99 +++ training/utils.py | 182 +++++ 26 files changed, 3823 insertions(+), 1 deletion(-) create mode 100644 Makefile create mode 100644 accelerate_configs/compiled_1.yaml create mode 100644 accelerate_configs/uncompiled_1.yaml create mode 100644 assets/tests/metadata.csv create mode 100644 assets/tests/prompts.txt create mode 100644 assets/tests/prompts_multi.txt create mode 100644 assets/tests/videos.txt create mode 100644 assets/tests/videos/hiker.mp4 create mode 100644 assets/tests/videos/hiker_tiny.mp4 create mode 100644 assets/tests/videos_multi.txt create mode 100755 metrics.sh create mode 100755 prepare_dataset.sh create mode 100644 pyproject.toml create mode 100644 tests/test_dataset.py create mode 100755 train_text_to_video_lora.sh create mode 100755 train_text_to_video_sft.sh create mode 100644 training/args.py create mode 100644 training/cogvideox_text_to_video_lora.py create mode 100644 training/cogvideox_text_to_video_sft.py create mode 100644 training/dataset.py create mode 100644 training/prepare_dataset.py create mode 100644 training/text_encoder/__init__.py create mode 100644 training/text_encoder/text_encoder.py create mode 100644 training/utils.py diff --git a/.gitignore b/.gitignore index 82f9275..1a89f04 100644 --- a/.gitignore +++ b/.gitignore @@ -160,3 +160,8 @@ cython_debug/ # and can be added to the global gitignore or merged into this file. For a more nuclear # option (not recommended) you can uncomment the following to ignore the entire idea folder. #.idea/ + +# manually added +wandb/ +*.txt +dump* diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..78644f9 --- /dev/null +++ b/Makefile @@ -0,0 +1,11 @@ +.PHONY: quality style + +check_dirs := training tests + +quality: + ruff check $(check_dirs) + ruff format --check $(check_dirs) setup.py + +style: + ruff check $(check_dirs) --fix + ruff format $(check_dirs) diff --git a/README.md b/README.md index b2fe54e..487d435 100644 --- a/README.md +++ b/README.md @@ -1 +1,101 @@ -# cogvideox-distillation \ No newline at end of file +# Finetuning CogVideoX + + +## Dataset Preparation + +Create two files where one file contains line-separated prompts and another file contains line-separated paths to video data (the path to video files must be relative to the path you pass when specifying `--data_root`). Let's take a look at an example to understand this better! + +Assume you've specified `--data_root` as `/dataset`, and that this directory contains the files: `prompts.txt` and `videos.txt`. + +The `prompts.txt` file should contain line-separated prompts: + +``` +A black and white animated sequence featuring a rabbit, named Rabbity Ribfried, and an anthropomorphic goat in a musical, playful environment, showcasing their evolving interaction. +A black and white animated sequence on a ship's deck features a bulldog character, named Bully Bulldoger, showcasing exaggerated facial expressions and body language. The character progresses from confident to focused, then to strained and distressed, displaying a range of emotions as it navigates challenges. The ship's interior remains static in the background, with minimalistic details such as a bell and open door. The character's dynamic movements and changing expressions drive the narrative, with no camera movement to distract from its evolving reactions and physical gestures. +... +``` + +The `videos.txt` file should contain line-separate paths to video files. Note that the path should be _relative_ to the `--data_root` directory. + +```bash +videos/00000.mp4 +videos/00001.mp4 +... +``` + +Overall, this is how your dataset would look like if you ran the `tree` command on the dataset root directory: + +```bash +/dataset +├── prompts.txt +├── videos.txt +├── videos + ├── videos/00000.mp4 + ├── videos/00001.mp4 + ├── ... +``` + +When using this format, the `--caption_column` must be `prompts.txt` and `--video_column` must be `videos.txt`. If you, instead, have your data stored in a CSV file, you can also specify `--dataset_file` as the path to CSV, the `--caption_column` and `--video_column` as the actual column names in the CSV file. + +As an example, let's use [this](https://huggingface.co/datasets/Wild-Heart/Disney-VideoGeneration-Dataset) Disney dataset for finetuning. To download, one can use the 🤗 Hugging Face CLI. + +```bash +huggingface-cli download --repo-type dataset Wild-Heart/Disney-VideoGeneration-Dataset --local-dir video-dataset-disney +``` + +#### Rough notes and TODOs: + +- Uncompiled SFT works end-to-end on dummy example. Need to test on larger dataset (not priority at the moment) +- Compiled SFT fails with `THUDM/CogVideoX-2b` throwing the following error (by error, it's more of a graph break situation due to mixin numpy/cpu device when getting sincos positional embeddings). + +## Training + +TODO + +Take a look at `training/*.sh` + +Note: Untested on MPS + +## Memory requirements + +| model | lora rank | optimizer | gradient_checkpointing | memory_before_training | memory_after_validation | memory_after_testing | +|:------------------:|:---------:|:---------:|:----------------------:|:----------------------:|:-----------------------:|:--------------------:| +| THUDM/CogVideoX-2b | 16 | adamw | False | 12.945 | 39.553 | 23.148 | +| THUDM/CogVideoX-2b | 16 | adamw | True | 12.946 | 18.436 | 23.160 | +| THUDM/CogVideoX-2b | 64 | adamw | False | 13.035 | 40.051 | 23.430 | +| THUDM/CogVideoX-2b | 64 | adamw | True | 13.035 | 18.883 | 23.414 | +| THUDM/CogVideoX-2b | 256 | adamw | False | 13.095 | 42.004 | 24.385 | +| THUDM/CogVideoX-2b | 256 | adamw | True | 13.095 | 19.307 | 24.381 | + +**Note:** `memory_after_validation` is indicative of the peak memory required for training. + +
+ stack trace + +``` +skipping cudagraphs due to skipping cudagraphs due to cpu device (cat_3). Found from : + File "/raid/aryan/nightly-venv/lib/python3.10/site-packages/accelerate/utils/operations.py", line 820, in forward + return model_forward(*args, **kwargs) + File "/raid/aryan/nightly-venv/lib/python3.10/site-packages/accelerate/utils/operations.py", line 808, in __call__ + return convert_to_fp32(self.model_forward(*args, **kwargs)) + File "/raid/aryan/nightly-venv/lib/python3.10/site-packages/torch/amp/autocast_mode.py", line 44, in decorate_autocast + return func(*args, **kwargs) + File "/home/aryan/work/diffusers/src/diffusers/models/transformers/cogvideox_transformer_3d.py", line 446, in forward + hidden_states = self.patch_embed(encoder_hidden_states, hidden_states) + File "/home/aryan/work/diffusers/src/diffusers/models/embeddings.py", line 435, in forward + pos_embedding = self._get_positional_embeddings(height, width, pre_time_compression_frames) + File "/home/aryan/work/diffusers/src/diffusers/models/embeddings.py", line 385, in _get_positional_embeddings + pos_embedding = get_3d_sincos_pos_embed( + File "/home/aryan/work/diffusers/src/diffusers/models/embeddings.py", line 108, in get_3d_sincos_pos_embed + grid = np.stack(grid, axis=0) +``` +
+ +- Make T2V LoRA script up-to-date +- Make I2V LoRA script up-to-date +- Make scripts compatible with DDP +- Make scripts compatible with FSDP +- Make scripts compatible with DeepSpeed +- Test scripts with memory-efficient optimizer +- Test scripts with quantization using torchao, CPUOffloadOptimizer, etc. +- Make 5B lora finetuning work in under 24GB diff --git a/accelerate_configs/compiled_1.yaml b/accelerate_configs/compiled_1.yaml new file mode 100644 index 0000000..646cb6b --- /dev/null +++ b/accelerate_configs/compiled_1.yaml @@ -0,0 +1,22 @@ +compute_environment: LOCAL_MACHINE +debug: false +distributed_type: 'NO' +downcast_bf16: 'no' +dynamo_config: + dynamo_backend: INDUCTOR + dynamo_mode: max-autotune + dynamo_use_dynamic: true + dynamo_use_fullgraph: false +enable_cpu_affinity: false +gpu_ids: '3' +machine_rank: 0 +main_training_function: main +mixed_precision: fp16 +num_machines: 1 +num_processes: 1 +rdzv_backend: static +same_network: true +tpu_env: [] +tpu_use_cluster: false +tpu_use_sudo: false +use_cpu: false diff --git a/accelerate_configs/uncompiled_1.yaml b/accelerate_configs/uncompiled_1.yaml new file mode 100644 index 0000000..f81112a --- /dev/null +++ b/accelerate_configs/uncompiled_1.yaml @@ -0,0 +1,17 @@ +compute_environment: LOCAL_MACHINE +debug: false +distributed_type: 'NO' +downcast_bf16: 'no' +enable_cpu_affinity: false +gpu_ids: '3' +machine_rank: 0 +main_training_function: main +mixed_precision: fp16 +num_machines: 1 +num_processes: 1 +rdzv_backend: static +same_network: true +tpu_env: [] +tpu_use_cluster: false +tpu_use_sudo: false +use_cpu: false diff --git a/assets/tests/metadata.csv b/assets/tests/metadata.csv new file mode 100644 index 0000000..ac6f2df --- /dev/null +++ b/assets/tests/metadata.csv @@ -0,0 +1,2 @@ +video,caption +"videos/hiker.mp4","""A hiker standing at the top of a mountain, triumphantly, high quality""" \ No newline at end of file diff --git a/assets/tests/prompts.txt b/assets/tests/prompts.txt new file mode 100644 index 0000000..866219d --- /dev/null +++ b/assets/tests/prompts.txt @@ -0,0 +1 @@ +A hiker standing at the top of a mountain, triumphantly, high quality \ No newline at end of file diff --git a/assets/tests/prompts_multi.txt b/assets/tests/prompts_multi.txt new file mode 100644 index 0000000..684c3db --- /dev/null +++ b/assets/tests/prompts_multi.txt @@ -0,0 +1,2 @@ +A hiker standing at the top of a mountain, triumphantly, high quality +A hiker standing at the top of a mountain, triumphantly, high quality \ No newline at end of file diff --git a/assets/tests/videos.txt b/assets/tests/videos.txt new file mode 100644 index 0000000..f60f5cd --- /dev/null +++ b/assets/tests/videos.txt @@ -0,0 +1 @@ +videos/hiker.mp4 \ No newline at end of file diff --git a/assets/tests/videos/hiker.mp4 b/assets/tests/videos/hiker.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..c2e10c92b4d2ddc989f11a280660a9ad2de66a85 GIT binary patch literal 265988 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

I3s%p@Cnn|x9D@@t$sa|DEUFhVg(3>P)ci zpT|nMk&}B$caQO6cyaPpaC(ZfV$v*3)WwJBha5ib7#YJBkPq4F9Ujuw>i)lK5;w4a9^c{6h20rO7(G2#O&P* zkiX4vOkD9%*k#qPjXd##cKJF0EQqzlMSDPsTtH_DfG{JXRqU$;I~)@~K1hhm!bEA0 z^~ZX?>vFhwt1khmmq$DVRIipiC7MYg_DQpS%EHzs;QuiX)z$*rf1cWB0~*%a;N!(! zrB38_MS_Ml-qL{C1Lvgh+#l>$))9zPT2`R=jx&><1i1{3*MVgUiGn~AgGyeGJC7Z< zh0xLqkyH8Fr0Ds`o1*%8*#zmUC>|QEe}Og;fz}Cuj>$N1;Hx+czNL2q3PXY7DCEQm z&xECyf@|^RL)@E`Ry>k;ChOtto$X%WECFjPG zWLXzp{5> z)_&%tRt7uvZ2JX%lxdJ6uWMRbGHGp^W2!sebDXMxSm!&v`ZuqU9t6kJ%NLW#VTsHsW@He`iS16|i^{l*u2M-dNz% z@i$ewqR^ZRqW4@HoXrPif4D_bW`%XrP9W1?n>V2@RArTCNfhv)Ukse^b}&VT!=)D# zE5XxR!&_2sOHeRwr1IjO?1&r{4=H^=Zo0!zKpwa~B$jri2F22%qg> zRdaW+U!}HQos{O=JXF8MV(y;CPYG_hU@(5IUNn`=4I>Wlr4`i&W|n|OmS0c_oNmXC ztry27mHTyvx!|udQ^fLoa{D)V&*JSdY1 z`LkJ5pM+W)(oyutHb=+o&#Jgc!UzpQBVN{wDkO)xse=Ee=jh(?IiQiRC&~ps>bkz_ z)CnM%q4J>V+cGiPQ}63oYR4uJWDfCuCzLIm+8^!fhL*}d{kuT2=RGW@^wb+(gDmss zj@zu0rTXQylaAGXroeC=>*MAErG|qRBvM-FOQS$2l}s7c7f|H_E-?!^A!$t*@j`(`H7+K1?-dqHPfr&rC6j9KV&L*-BPKcz z*w9nEWiAuP&*NA_=G?;mI^=k!rH=;>ZVxLywuOF|a1K&F)SrZVp5O)sNe7X^h!yai(i&`t1gLMmT!C(sv z<{~P%lt;%VLQJ?&`V?pwqt4c_Ci2rxIoAN9XmfBT+V;T}nqK!bpvXg0i zOsGa{xUuHaNuPy3%{RcT`!tREnJEZa_*oF)iL`z%K#)gGc+4jR-q5{mvu+gxLj)SI zhcpYN|6*8vuo^kQ&%a^+m0n-ZSSyKuesd$)mHF71sl<417SFKNCot=H?IV>v$I-#g zg^92T+c7I7dZ}n{W?3EbpbX0Vj%Rh~!@u<@qq#Cd6CG7kWlC#6?SRlz&(B6oqQFq0 z;kFg~V>}k93EV4HMH}C8X~;=_kmqHM&S|;`V1eC@aAb(3Zn^lg=VN35bq%s48ZS^p zJ~4)W+4TY{DV#YWkOxHY6WmsNA1xto4(X8dmfDb7%DO@y51}ALaz#8D9+C(GyGbb8 zi*a7gMPyND24!nk>L|2f>$0n#KT`_qXrId zcW9^3OLxKDT^P;lcB(7N;f{q&J@t=2T?_`nlRy^DQeH5n(SU?#DFUu?Szp0)g*pd zaCB1)D6aW&X3}5nsw~(Kv*vlp<=tzaTfX-g(48+48g=0u9w;@L4om|FY3{^nWK*Yu2SWM1Uq~%4r=E7z+&N4W^4AC8^ydNN9`=&qv=Ow6}C1M)F z&j-$Fag*CRqHiv}Ht&P{AVFV_FlrWfDn&NTduvVZ^*U7`%`$aD)xyM=lufTDh?x=B zT|~GfX)-XDJ?ST(-)6H6o&a z#=m2`&%SG$H)&ry5-21AqerIPl8`$+o@I{(wCONcZ;#X_4gC>OiW?@oLTMOcFvEE- zG(mG zpP3v0NIG$tFEvfoBJ=CCJo=hFQZ42pVyR;&)Q7tnoFw97!9n=~!r`|c`lrSWDrN)E zGY%Ng$OumeDN7qy3)xCUaU&)7-sC31g=eH!@}=13C+c>~>hFG=CE1K`;g-Bl^i?nf zhJR9cdPD&|Zl3ot)~OkZTV6wfw*^rbV)CNHTT_-3;{~Abynzdx6eT`t$07`IeWu?@ zwCy1{(7n)xhu)DTftxuXUt>v{iee+%BFZzb;LZ)))1nS+*Z{*_N0em{+E;0Bo|+30 zE>3GC?lj5o`vcLclwkkByD2@P5i)O zuJnS)D{OCws~4EVb1VFh5y(C$q~Ii3Z8QM!OH#n1)cBAN1B%z6ih}8nV{t|D<^FhG zNJ^Oh5hcM}`5E^7w(o1jKDJ}#Ja#QHO49&R-S#SBjBM#b=t;0OXj{Oyf-VK7hgBTs;;@PKytH+ioJS09p)deLc+D8e;ca6web z{w&PHk6!c0g|3z1pa-dUwVN39?=h6cND?Bj{8&2P!2|qeeysH1{*ZItS=M&JctAuI zP-Y9*w;EO!$pFP@5v^vRx!twRF~=PNI${;&i4{C7kM{-K_axA0Jgiz$5R8G29|w?p zjeAZb8Dl+GalG^^T#h)+pp2fmg#})ExRPjTODhVIB7F({7kT2 z=eTktr-dVrNC;4fBEbRSRL7wGwLz%g?tEjIqf{-9;C<^z^j!S=X3gxA^NP)C9Vj_% zUxG4lCPhL}*l|z|I-vWDdq1ZnTeVvM_75{K0X_q^H{;-=u1&rF_hatuMOT(Sw$r#) z0x)aI%tw(IPfrls3xuOLw#Wx?kXcPWyAAjhwg5lQ08TETq=GgMxJ+T^{}e^L2@IT1 z84c4(qIV>Rpni4mF;W>1%)Y1RFgMDkS?JasUR7Jfx$eIFdjA&_AnGl>7Z4Urdcb!X z?*Y?g^rYez2uf8@G5Tc?8_b^6%nj^gg_BRn)-y7qBpbb&40^z@pN7jaLE#-|!J_DY z0SiT23C*5x(6WwV?bMI8Y>b1ma&sUg^$@MqD!v*_xu*;#%_^tlFkKAB-qVesH}UpA z>tuSHaWKI@n`jM3uI8b~uTRzXq3THl{XuGcla_OzGw$t#6sUDl@7w}(PVj>Kqo@q} zJ-2uIAHp5yML=5FCc!$`y#g~s9gHm2XeG1ED2!1App%=Z>T;=uDT_i!7d4}(B`G<7 z<2t8U`bT&8L|9-#X3V*f<#XFf<&f44QD`BZ{@A5n^|;6V3wO0MZt=3C1t@5OFnBb6 zHap2M-mNsk2Ds(Rz7kX2=)wh)S=%Jyh{&wku>mB`6KAjq?pz@aW6TX}BjV&ByxuQ& zRKP=--H^Suk&mo<4=zy%BffelDJzeUtvMvk=@~}%_lb*4h`jfL_C+^#Z4!MY-@FIRAp?$7?HRQwq zmN9vUGMmyd#^n0ukKRE=DvMqfrsys-M{m2UZ5Sj9EKT~goeR`|_|Lhu*TJ32CWc4C zK0mBw04UdIiGyM<={A?8GeTYys+V+9*DYWaBm4709+f#|r0|Byl*%9W_C}_3)>gp2 zWi*!*B2k$Z=L_F_CSU?42&20I;P;lJch40pp@XU>`lIjjn=FU`3TzgT+we{9-cJecRFz4NeT_%I|XEAtcSf^8V!9gJDJ z4xlR&k7QrI+$9+Jnj#@XhU&^eWka?Wwjsg2-{yVI<&~gLYYKYg02Zz0f6`qE*86KY|f|ZKVasFw=yWs);>S9o#Qm;liX&4N2Bg9h|~;g8!ClVn2Lp!Z9niPchGj z9_jZyvOJqB8zmnR6xP#Q#wVg%bPJRbCPqg}4*5~zbVde) zAmd$_Sn{O?s>tF{tHYbWc#}=#Yx)72Wpg>r-9B_a@J2f;2Vc{=w_^+EYH356fKh*P zU)bWyy@nu6dhsgY7|hD3UO!VTdEJ!VxP^iMYUM0?Ft)5K-@~-hg(_XL>}q|33>~tGA6y#MPRva_@r zQAXm-G7V-v;y|?^CQM`T))qVp_kpmn`@=+@p<~5ZYc#&Vfy3lC^Dp{Y#%b=Y!u`*0 z(akLKp`uLpF|X8V&4_CGxbIfuocQ;yeWYHMC02FD9=x2$SfRP%cHCgmBW><7fChbMArt%4m zImMJQJ%c!Z6LK8#LD$b;-+z`GSYpEuphI!gAgf{Uh+7KlBG*DN@zz*LqM?BSa;wW! z0M;&$ZYlRcJg8}Bo&pX!C4ZV7cOPF>hw|n)_a4AKpar~#6srHog}`t+FB5yW0ju9V zSy8DehC{UT8PH@@)tPnWq6Y!Ts_ox8E5M5&Cd3pK{!eBWtC%p6V$@OzH(2BW@Wk@n z^5}ru~&T?EYi-F&s;n2mxUb|x#Gm?{w-nizT z$fSC@TptiOHFq<9$`I#q;FFF&r@K9vUj>Oa6QzSSLFjbEP6ES2>NaEe2SiY+Y2?}b zc-Hm2&>g(@TTt5|X{Nc~1N_2+syq=8^3M(w`e;coy!8vUPdBwKCpa1#G=ueh$Cw3l zD2_c$hUuM>_zDyOab-}uRC$lk@nGz$8>zl{GpGD0LnJuGz6Kw)D|tg3lef~XiSba8S>S3$ZuiD!7Rs?gE1Kty4lf_H$@U>FkB9pr-hB$t1Q z;b><`-ELN3@tsUeEr#ndea`ezl*BKy3|DC0_r!UpvJq{6Qq-1>>jm&-yx=UKP%Y$lv7PLq~|6yJnG-OX$hj|!lyfsN4FWn08}$1UJSmjTyjm7fOv zkTz?*VcLPAYa(0b58t(onSIF;U^a;#pV_{8X_*P?yTQ%rOZDOng0Ay^VNgwrf917`-E#K;E_XL_FWV?F1-D79~+*aZ4L^`p%eQvOP zAY~+v5B;PDjomt=P`v-Dds9K7`i88lSgj@@+=D*wt7+Qp2u7M#o~5ByF%V~D(oh_45$q*uF|NoE6$ zGvD_q(K6F-hrsx`q?1_tib9s%ZNaI=t_x`f@xf2OGY`jNXBq9C?u84*gMh|o8GT)y z8Uz?d5%-F${}Ga;r75Wg)|0>l(TFN0mw};{M19a!geZC3VfHI+gQOojUKnOVRkL!X z1I6RlD7u)9efOsCH-hNt5IPmCMc|vF$tQa9mc?h*MT_-M>nvb&#lrAC&<_1{6^2i^ zZa4T6f0zg~r}cWSw^x#5!xH6VVxm(_u`8h$Edkilz~Jxl`HW;6>v8l$%r}(Xy3a7S zN6s36;a+7t z4OiS~j5u{zG3KNLZ+;deUI%Fr(QhEq0e9%Tpc2NyUrtgzP<6NJy^@`Uk>Dhiw4Sao zB`6^DkXX$crrdW^f!FygJ>4XFfj^H!)Wfq3@+EJrC&Y<+kE4N<+k;X$daEW(no*M)m zk~UfUQuau$p>`EWbjqFZ-TJAHW0+k9)ERf3^~!f{UGF}uhzi^bOujA8V*bV01mA|p2|fPEMNGCkgfCvX@coAKx6E)CnxV578b*HV*kML zbT`V!x3^;c2P1|y*1TBZPR4cG)f`aj1IJ!;e;Y$dAx?IdQZqQh>jV!<_*W|ySZb2o zXFHMN_491{l$$sScVh+Hg~QQ)7TdeY&8*M-ngW6w$~cc#r=Bt~Y)bNK@yJ$ zb=C+a(&sAr5VIn@xhJG!gP0`12G&(b7*mQ1B2oXR0Do8N)sZ%9gizj0RAGMi>VEXjrfbqhkfdG(Imj&)cHu|5> z_#o>*4IQUCObF6ksLQvLrTSoqJ{GTk1N4ZVK}(5^BA|sz`R&b6e%izwuMoJq?-R1Q zgb}*+q_0hSiv;DFXFTYYfh(Zj7yVx$rJ(KDc2m#v#u za^YNZc%)2YF=^Y#;SU;KmB|J&f@1}YDhYJylN<*A`e)1^)?7l)fB-z4Y(x+8;YVHZ z)ax(99Ytc{D`oF2WPx<}f3;?8;E#ikeo_PyIReoN?OH-JH_NK0JcsN)zZiZfJ|i4} zwb7a!;{o1@n>6R&PL#Uusm|&b7ujr;?NI;>xN1Xl0j_fx!*yk?e6;(I$q80Ol+hW?dOoOuXBi`M zTVeBtQj7UxgxW3Rijy1G!No&kqg$tOSPDo;=ZKM8&=Kl?B}5mJX$@-)s5Pg3dd7?hP=!0!bn9ustTTJLs9JLVvmD;l$#Z^VC681fsQ>b1soZzrM`%nMr!yZ2Kx zLk-H5@3mf;l_J${s^4jbHH;)hc~!HnSf}vaK|SwdOhRiY#U0H--8e(duLk-u zvA|`pvfa_rV;w}~F;35L&taHBCcnbhy_1QqC^YvlC4LJq4;r@1i8Dl~IOVe%1>`l{ z%S#NVu^FRGSfY2UzTjihgMf~6JwTw&xK2JxN@BU78W{C&pqF9Xp0Z8Iau{K{2@ApO zhdRzNyF;68ZImGjik++1JXt3cq!#);L~KsY%iw})g+I;}+!xV3y{u6cm<{7mQ5+SW z9Q)40Bxd;=#E9qZ14gGbZFs(6{*~ZSM(Km%O?G)uT_6anLztRyeS;8YVGfy2VGQ4~ z6i4Pgm|b~rHr;6S)xxr9e;->uk#KXi2(ZB>x71JF2JWQ?H|pFI;7Pg@qIpalfUb~{ zDUE+iwW=Z9K8XFJ?9^Z2DYoAeDy%^knn&PorN|qjZ2pbc++2vpL3nEXdVT#0gw&tL zjAUrZtS@{dC&Nox*_x?*R%uLIlNut=FC@c}skqZ+s45`<8+9u~>8Bm3QU$_b3hfy1 zI1V%Ux|Y?V0N0Y;YL!EqKaiYB%e+`lML0nVhcI*VSv*^*8IF}_td((1f&DSFwJWtOB|MO6BQ5X|J9f0GcV=i0j)rse$s3_|~k_QRorSgAm zZmer%Jm+j(+GeBgt?&(p{2)arGDOZ?m4_BTPig{X4q_P<{}- zcdPPpDfgTp!MeD$Osdr>j{D?Rg(gJFaI6vt2GzkeU zgYS<8P)u5R+i{J|?4;&N^fM$P?}L`g_jWu=bA5aTa7IVv1Gf=tnkkA=fW%}Wln z)C_BhME1-3T|nhj3DbRHI_0zgl|&t(N&UrRt!sGYHCfi!b*M zjfh7($ji@})(5Y;XE&bIpEav~I8K75KbD5bShR)M){B;DxdTp&d%-^a><89?I$l3% z6R{nK58xI2SKm00F1f``B=<*&$-?o!1fBo_m9p+T%m1@Wjf9K(%|T#tk^|=4zo#V1 z7=M31^H&ON_=GE)!|9)%5NDJ=U2mU1_T~zqv{EqtL;p?C>eFUFsCH|>nL2IYT9`$;gbb$BTW;1OSd`XA9S1osvRh6MLm^TWZjBv< zgNFi=t@(YTB({ADL))?d`;8opdM$&KENU34;;<82jU?r&sLB??mS{AZ+KRIR2;Hju z{-KEtDt+hempd}t3X(Zh<-dkV`3s)?*%)+IC-c($v_~Qogu$BS=SUd^y#@L0DpkMX zV%4}VH)}>&8_g-33^`$_75pB5W$zmdNPkwry&S0m63A3O8r?%9JtGYkmQ`e%(F2iw zthn8KJ7f3!D=nLLr>n*UVSOJ{ab@kPDFc2FO*gtB7^)2avJdGtMF(xIttB{df^}z+ zGObAQ8+GDUf_GFID6jq}!6+Iv_Cc(dJrWl!s8E%36aq&eooDa;jFwGB0trc*u!nhw(XJ3Pe3~$0Q;&d642$NK`@z=*q0K{#)XjdbTh!gMU47wW z1KpX(p!Q0z$sH4th-n6MGn*1V0vF*#6~%KptA7Y|?ziDW!uW7k_us;&m{FBla7xg`&%EQ+W^2>I>O`BM{g=>;HaACOaHpxTEU3` zy|mX7--zcFhrfoh=t$Hb0yeGHyd-9jUce)@@)XZ{Uz~P_%derH&CkZO*&eI2UV49z zjd+|1$V3NPEB79<8LYCET_kR@8*VU%<hF2>As^+X&CgR-+RMU zSlOb}$7(#3@_e0+3zO_^3_pzZo_6_Cs`_)$ZDx`xDkW?bkmAj#co#Sp0*h~?3&iEm zs{mm>FplzAFc4ndG)tS`A<_;Q>EGN)5YBWj5Wh9vh)adQYG5#R#n%WDAByz~@b+J! zw7p=JS@)6F5TGl2Rzmph&V1R)TB3?jyEqt5N9D8r#vUjguQtCmE1tI+-np61jSMzhD!#pydVTZXafg{~jQ4;GcK+Mlk%)~5 zeRA-UiY3my65zw_PMvPPyk6g=wxLiJxK7It{ybTJk2yH|^1p!I!db%T9zkLn4I8J$x!XUudB6f>qo*TW!_wfyp0o>y$-N%!3Hy(Xl1(T!zRjyJ} z%t$!9D*hf7q<&ZQ?1l?^7z_^rClJ5-+O6j!e-UqIrJ1Eq^igy?Xs6Nnj#J3rp z?|>O6;Uhg$Hd#^!Lzam8q{;A*MwTQC?R_2fW+%1D-Li9-fqf;4kct^HUrbtZA^zlB zKAcDUce}!jpc3cH$5ys=;lF>lFmma$7bOxE+^R<=A8IH`Lh&>5Puzgu9+HgQ3&TLt zUs0%gaiwBL`{U;C5T816A8nr`&~va6FpK5^%Muo~_utJP^QTY(h7N-LsjGU8JK_SW z!2dEKp~(>pyl9@C-BUhM|DVBA=Y1g|@vp zhUso_;X#A}SE-nhiUrn^BuVWGY2_PCSKIjM2U~r!HzS-HV24-eguK6*4ycfEJwv&N zX(3F~zj>m6sq`!Zybr|ySj!ap*Wa^|>F%c0yYSLXy=-yLHBJ!K_X;a8&h_H?*GsZ4 zDwR~%C8~lm5Nxgz#x4IyUw5AA?sB_{q2%c2Vkj*a`U84jkKDw2o`nlyq=2-@u@ZTh z+tgc!(UP6UOn-E!Hs?BT=s!;cLrivp_IW}odfKHrAaKCAMj+Q$=ZP~0t#MIIzfa6zwbrCz|J0rjgtUTAJP6P+ef`~HVuD7{!aQj-VC%B=fWI9q<>xiaKI+G zI;M;aSK@1H7#Vgb>nRYWVG8P(mPt`)gZuKTTBr+yuf0ZM01PD)YBr77%U*(j)Ux2F z!LfHZH)nE9e?2WTdQpD~X#{HyGGNsnZHuDyMh9^L`y@kJxd?3Khtd&Ay6wsf`V*nZ zkL$}PPI^bwjx$7tOu**1`MHhWv}bWcfcU$~S~{eL#Qbq;DFTMew4V~`MX_O#b_%4- zhZpG=zL*L;u3cX(g0bFSiMSR};Ijm_WH37WmSyR{3^+o8sbSS8icP3(zPgp?H!Lx>`b29b}{S&#jex zz|)e`^a>scwrMc$L27dW)lMP_qgE6z31Z@ z_u#9^X}8dPdl(wSh7YgXv?u;3B1ksT0LLUdHD2e$o&iT9YzGAvpqF z1b?}GhcLt9zzsfzNx92=jVm1;Jw6>gff@Iw8*X@&@zEnZ?fRd1-$`m9gCP`D8R~2q z|C#dP#;XG>qe4KS0{@q!2|>BoqWEH0CJtT_D|3{O=S8qO7548Ee~hvX-y;Clo|omZ z++&49S$`Zkr!R6g(&@3Gpq(~3};GC!!RGvAp02k@( z^}R0EXOii&!m{8BrUoOpCcX5p_ekb&d;jQMie0D3tUs~@gVBaec>Px71yj3$f{ik zDdkpisp~@P-P>T}n+dk8_^D4!`4cUW7Wi!GAd?uE-v6ix@5AN%!9S%hbumY2T^Vx& zhWLOn$LRj7ZJ4w2Nv6MN3HA!l)2A9rAm0^7)Vyg0<$7Zy5M!e@vE0INzZLPam$Bd; z$V|-3z1)|5?Gzy@H>&)#n!QPA%jT79cT5~qJ~|4(*r)c&Kw)YT8=ZL_wAG(M8EdN& zRF*O|Y}6;2~m zC(bjTN4@@FgRYwtdiFY)Lb8BI(w7P_$s(D*-NVTI;24QOYR}Eq8FK+9%<%45G(S1} zKy}?fj4tmhlFfWOf?N#JS4IrvX75HI12gdFE;&$(uDt>;;qnZjp!j8A$o2{~%kIAx z;p3e4=YA08qqr0Oaesml^*T2)#lqKK*l}sIKk^c-xo&@uC35Pw`(PK39NJ^Ym~a1yKg{@X^hs1tli+r zF-|OBIwKTo)Kk2ehZ1b23dbYLe(LXT3WuOER8yfQCwICLLAWa@Y;S(HnHKjIOou_}G4G#y^M3Fr<_*VT?A$F3wL&I;bm4M$qCw>+|7e0v)b%fw>2zZq>Z-)#mel2Bg-YEezNH2 zg*9jtioEGQ+NAFy)vUS<_QYdER888Skw<(c+Og#`(sGpHn#SZpmY^N$2|W+jqRRQ}dt+nf#I;DNxI@44xx&k+oVJQn2u8_^WHKu77py~x=ICJMH_)47 z9oQEk>cmm^f(ULZ<20ElonZW`#9m`n=K2EpBY6T`E9Aw9;L#+4EhOj^XaV5Hu zARZLe;IH|f$c7C)qCsH%?17FRR8#q{}q z2x0r1`7HGmx{10h#Os%xx+WR9QnLG>1-wkmo<3(BfAXC{kx1p%b|!!m5Uo8Cx@g6k z^*Oz}r|@R92?64JuBL%&;=;&RL&34+dZq9+Om%#*$2f3@3WD=>W%j82_#3{0nCs`B zpdyQ9vv*f7XaE2QxdEQ*YDE9`?LuUz9;}3;_)f3czyVdj1`z{+@+Y9V{A7huvPl(l z7gWs&>o_!OB96C>*MpNxe-*nG360C7U|B$O)t z(#OeYnTHyNQ*&$U&{?w`$>tOkL9?;vHHoYn!#>q~n6t%9DDq?~?H3{*@AL>IWw zHQw6p0+z&Xm$%%3$cJK(bje7jx@}HQ)#qB3gkpRwori+uCp-5l`Mr;!j!3}-Q64rR zagytK;xN+1PK5nQasvpa7)A&H6gf0kyL6y{vG)d6XWdMwl##}PQ5DFQfcY*9R?Ef{ z$aNN<(y@0uVCb7i7ammD(cv=czsjceJEM~^J_w8IynIamM@KC5AqoATQq zHM5#HYm$2LgAMA5>=j2#JDlV$kxTNetZGOrE=Hqc_D3^IQ-ePbVg<Ax8zxKPQk zv{988@S-~I39TF?h#!fCq@Wo=o&#>tZP`KJrvrN0ZFW7k9v1g;hFfa;6Ogi{@w5~M zY_SVqaSR7zMZB{;)WuKh^ z1l7cfHRMLv<2Tu$(55~?jSKB1-umu^djfm_x88s~N#FNwwX}5Z+8Jy@k@$#)+`KQH z)rK(`q+e2k*vu#>GIp9}D1j4>u?K8$q#7WSE~9w<_nH{3-gYu;MXgVFo+nXzlvuW> zBn;uMpK%x3tWAFP>lX!GKjZ0woJgTCv<127PK;U&LU>rL6C>F-OlP`FHgXf7Ghg(i zp5u!CF&kR)p#boizi*m2D6s_pPPhwBEA!uL(bK8&>Z|&TKc_W*FV(fznYqd$^r*(< z8j3-FMsO8MQDCB&;{FMbWBFEcD925&z_F#TT-T=d)_Mf48RTwp;(Xb@(CCE0T&KWe zoTvO|HZ5Ew8Y}Pm*GUkv;ee;M;vqJ$TO>WY5WC6> z{XJ4w<5m`gfF(Lb#uJ$V^Rdy#6&`1me!nF4AJV{NXx>&HjC>J{IBfkPpCl&|X_`_R z1+SKv1G+&mMM8E&B`iU4E2xifLUC_j7gtk8WBd_YqdL5p)%B3&|WM)p-xnRmZqeT`}cjDXVviNDwzMhtH`&76#N+oXsS6NcKxeAyPUOuL!vb|=H* zNbg+BEI^W9<_30oINiA5N%5y;oUtV0HiO`4jtj&(ILXv6WL0QKz%Rt1r%=L?9mY(ncO}l+&qzeOiAoJlk$3r?+lT0+n50P9O%gGB z;(E^Kr#Q*Ji8{`GjaOmyuFF+yVe>At4Q(ImxY(y-@?=0i=zEq~tR@!TKx`*snT4sS zQ8_ef^9^ta-k<%G`?zm>3Z)>!koVV+#mYOht{f4{MMT!ohSmv*K?d&xAF(ndiajH> zDo>6hTW5S9p4!qd)zQ1rveZPp5=Jgnp4NzNZr#*)h#BG1nYc=3Ae|ZZZk{~mvs@c7 zhr<3yAh%_ID{$2GP#jjN*Jnbq+C@)>!5+aBEx`bc0?iMmcbv8aQElu^D*HC z((CHLnTJsUqwxo3BY*$^Ds@4c@JXmaY?(|5zsK4ZUBkmsg)ecgRIDlPM$CY##3bk| zzCD02PR58(D*e9ei9S=jSA)bDQfsX+IP=Y24>y;*!1~b9g}MkY>x(n(s$tMGP7s=Y z8qJ~WKW0~iQIbVHAQ1E`&N=UAVwblwa%%+yC$w_A-vNB$eSm3EDSNx^o<8V_k|XEI zS6Zl^RyhdNX+Aiz8B&-++=;+OO=%0DoOyg~(k!gHP!q^`d`1|=zm*big_>&U1alwF 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%0AkVYy7uwu*(q8)@3=N=#SD_k} z6CjhT0$FA}J~m;dnGRb|O_hmw{`Af7=KUPd6M0nt@8XR}hQQ;w%2*o&e65$Odtj+D z#LpX0j##%$b2#0u&x$?axcp2QICkmKf_od|cZog2+G@g4Q|d359A1yT;2g=M%%W8^ zu2W0g;%*|FxLVc0WsMBFusQT1B(=!OHHFjztBm(J+U#epznO7)40uD263^4!Z5SLH zc8VCw{W+YY*MW2}38^3gNIh1QA|hMJF*W^qYdwPZL~^0< zD@jvXH^UcniX-?GG+UVM(Gw$eKupp#$TDQv3d&7kEmUq%-kuerA1al9>4zoA-0;G|0R5N6D-rGVkHC|V=X3+9! zN4O5)RJ%TIxZ*?Ful-F^*|*<-@AhB1aJaE4IK^koOGVsRNSK3+M-^giq>#N%kQSMt zbi8_OlGEHF(~ZN*{=p*LG#hDUOP9q@jrxS$dz8I%VOl(p^+YdFgt1MjPGi1@Vmjql7ED`asDzDIlVVP|I8QptNl6S$WmV-510o5xccJKL!>@* zT)U@4`s1^<895U}Y&pMXv28c2*LkWDVtM|)mnS_zD8%VM`B8KAO0weqt~@+%!kZ@B z1)#NyUn28Py<|(6OkktnWTwv^A?dF7%>(pwOfg3lXL2jB1VDKuX-@GkXuKKqARq83 zi+mZAu@e}@UvIN6-^C0UHFLtNvNcr(; zC7?k700?RUpK)|V|7+(V;>eb$bYGq*ZM}3?UYb0!tF02zx9?tY-L-g*X&vvg zFFiN8r3-+X^DBv!(7-c29OzTMkT`BnAxMePxq<_^-YkUG+&!lm4Kh7kPosWALyLP7vV9)kh7+~thoZ=nRNCviER{cQq zkZ6ewMuNZd*D&|iy^WNZaDEeWU3g#_wlxBw6ClF5duxw$HUdNtg(;K(+{kNId1KOh zACAteT{>-PDsZA(zdTAr)19rBVie8nW-E-||!(^sP`G2Z_?o3D8XgO&et zsbvX;=j2V8jC&gibD7Rw$DnT zv}dK+Br57xg+@04w;uJGvN%_}2N--6j^H@uc__1Ym;RW2VIZUzDpQn>Kk#D|5x0Dv zx2^oJG6IVT%)@DzV2td^mDkIn0^-kGN0Vh1B@rSdgoP}P1yvIjt%kwXQJnM^Fs>Li zxgVP*Qnx84mDO({|izKgY;Mp+J#sx*!+aSC}bGj~FqCZS3tP@`L?t#zQCYjd-o_up(r zw|Zc!6k~*tliZ&vglSF6JVmNFYv!2t&Nr_=^L77v0=8;#t5@^;@L|Q37F?WdN4Ar+ z(j;y7OX@wEh{)kte9YIHd-u^l0C!K@C#}Dx!0BD(Y_~FS^?M7R{FX#@mp}#=DGk~6 z1c0kg7WMpmfGMVw@K@W?wnN3Yc2#C}ZznrwcOlv;vXIhBoX)d@8b}KI!iFT`E#S|w zXCYtau8n6->!QD(K*Ab7(r$_ratwj9jrBNS%+b3qi#^yB27c0?z0>f5<951B^~ye_ zedm1!_i3f}+cN$sB&5%!b$^_TXTi^)21pMkL8ETZjEispU5!4rcjt#wbrBB&aoNm+ zDjfcVW#cq+fM?Ai5690gZ&A~V7wr=0@4{>&NAgGk zabk_Lq1yX!bBvIP?@jHn-mK+MgOJuPyfH!up!AL=aIP=(J)B%Q(5^ChIue0^;3de2 z2DO-+ywyAk??-2Uof>_cXo%!E90(;u0it3#iM%dbhQOs6bz;uX^@Y3+@@5o)MIF`2 z#VmA~jBP9*`%VSRZet<(I7*7ZxXb7Jhk6N{n*VS|^g%s0y&QAr9$f~QiCY8|E6F4J z30U~#KF9J0@#lDxjP#A&;|Vm8(7)BqFsuArJ>1WFx`0XVD-@*y?ATNtvqHa|zhGGP zF58W3+XHeEbAlkpX%BWqbP!F{TsEkE#=6vmC^NiIKl`w#VV-FsnEQ=lR0IiAG9f5{BO3p+yc`qZnF4*w* zhT5gB1w3R!|7*2%dv%r-aCdA0a!mSzQ(@GN zyBo#3gN4o=0o0#fMG4IqF!o@i6RgxY(d{{wI4r|?lJkxe;SnvYnT#PLyBl+i z%$HZoxT;ch#ID1)+&+X92QlO|-cnQeFh#QOFfIGrN_Y+NK}NBdks<%hR_i61d4yZO zo8Mk=PXXrq_Ge_SC^(O0+&kLke*jA@V!-ViC_uIys|wH#Ds24( zDb}&cCpBD>-r_NLb)iEqT=nB&4-16cyxhQE-hQ{2hj0S7YfL@BD{aFw0F@FKo+gtI3`Y6ACt&b-}Ssa(x z!jT1gi%AaHO%f(MN3fzs$QH2qD?p;0w{&n+m6p3OYRG!-L5~te(Su5!X(bB;45q9w zT$%pq6lb~eZq-Jmbn|jIvlmN15{RN@wvND3id7Um5>Pi-lA~)M-q*^jN-m@!g+Y(m zWbXZML6$FQph&ORZv+M=YS8uTbP|kmJA{*Mdg9Np*!otX)O>X#U98MLK_xr9u6|sG zBzAJMSQuZq?$4_PSPsxUc~m4gr!p!%3+;hCrf|DBAN!C{pnnl^0^=oqge@l`#&u@< zJ|%m2fU9toImEmi`Gwb94?9hwej%vn5ZECUYEk?P$=1N7YT@}VZy|S3zSMG(PLZ=z zKxivP9!WZqx6fSNcW zonR4_JoB7~I9M+H8=r&J3-I!jxO3`GCaOVpP2+Kn;LYTo(9BoCsZy~q(3U}!9JrvC zD0>M<+!HsL=x20Ee$QGVM|4fHhR(|%Apt#d!j!cQ<+qA>W~HCKbzPVe9I)I>|NoV; zYNF!R_qpisYz#0~QEk8IjNSpL(0kuEiQCEO;Da~nU)d_C&Bt zW!MiJ&7VC{Et@%u8M+3JICq5`wVQ=+>eo`1kpKV(sR5sJYDE98F%@@smdMrCXBwaq zeEbHLSiF&YHg}j3iGOpR+yF6(bBDO(D}`874b!@$tGMO8ud1S6%KGpR9-C*j#Qz!Ld#mKI+Xc1QSV^lKJ<{NxYHkO_oOfM}{${d4 z)kTl(ZfUZY#D}OF!c!moR`vlTUE>jO|8p2oCP|v|31%+lhkUfU^aQ9C;=#kXdE)Sr z--X;wwuMc46ume+&>~q&0SbTc!JC(x19@VZtrSBqPN$KC&y%3OLoSHbnRhPto^9QX zngh8P6DOp|Ao_RN8i|2b77aa1R)4URByaRbuBQAX{+Y{f>KEAonmPP!+H9N7Gz;z4A=y<5u1|wl=p=$uGJ2k`07O8$zc2$9 z@od+XPU%*S*c_^al7mn0cITDs-W(RsyAddzz`IH|@bktL5qTa@a2HVVpMWd>9RCpe znWJ}h+M;>wS-(`Q0?yb{&sWNDfl ztLAOUL3F*!G8RM32{iPG6upWj3?@-}N6!~;2VOJi*D�O+l_pf+oEr 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 literal 0 HcmV?d00001 diff --git a/assets/tests/videos/hiker_tiny.mp4 b/assets/tests/videos/hiker_tiny.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..da082ea63f044dd4c55f61aa68b543521b9cb957 GIT binary patch literal 70973 zcmX_mV{~Rs&}}lYt%+^hwr%H$ohLRXwkNi2+qOBeG0DWq&HH`#-XEt=b=BV0g^zARy4@&Hw-iDAK5%nKAGiQw<66 z^;Nzle%5`wF4dY!w??#1dVS-;!ofyFPh{%g3?O1==O%Jy;pS#0V&>#zHeqM~Hb^mi z0~qC%#3kw3h=esnzmaAD({F>QgQKS{z#K@#!o|J<>OpQ&9P5GILoB`(itVCu26I%yU8-8XU zCLSgtV|!y;PZt0`lLspglLs?1E0G<5-xAFi)7HpZ6U6T|{0nWC@-=J^3iLI-% zv8SP_gPo%>@Oy6hT_T{fv6cO|i*KN_@qZX|XJb2n%XhI%3>`hcWh*m&mT%eE%-He2 zEKCedtc+d$Tg1v4@IQIE1FS48fhONJ2S;a~(Kz=r+|Dtp@{;#6W02j+|wzH|>|IhY6yR#|3sk1qeoym7u|I6xo z!q39Wz(nNqUoQMi3>@F0<9~kt=WXo4&%ynzZ~+1w`Pqo99KUAU^^ zH4`KN1cVR@5FP?z_@`{8w_a-Hmbu)4MKAK>Yk;Hk12bshJ$8>|rO`vnnuHFICCU|8 zR3!wzw!btPBrCV?69QT6<;lhI&!;6(`71ZXC z4>2H-D!ZOQ;UZPDo)x{JzACY-mBHnSTu%l*= zoRylYlI+I#c&DQ?D#JFEXf3>{y8Fg`_gF9jZrtAWJAW*6OL9cpz7E3@gTCKsN$7R* zNMAI5WX;{x6X;=GhuP*m2@J6J_3N&jQ>!lJ(<}nl#CNto{tC?n@#Gv<@bfH&7U$X5 zv1>6PR&LRE(-4e;wtT05M!%-ZUun|}q-w0sY+{?uyjNO>RTU3__al7Zhx=O%sz}Bw zcjw{jxRq>MZv*n%h0>ILw$ex3jA{b7>Mp=FS#>|6{4C7N)XmWAnkqV5p*pmH|Xoyv>36?nOuWnzB&{5ij3pL z*&!OTv2(9MCikvsh+$2Osp=!$n$KhjZ4rOg2_MBUbnk7=oWU#Ynx7=oD4#PzyC<8# zZ9*1URwLF`fM4tNcChv6)cYtqKEfLPiNu0FbMifDTN`;)UFV*M0VIuAl6@n z&)wxXP2fKMeY7%3M^1NN3yCKBxbUQrS{U&`U_mVZ%xq66I2Z*=pIrGgOrcP3$RP&S zIBoINV`~O8Dx4?m=U6BVUqOE5WzVa!a@jAs;BBaNM{4A)(4B{boL!@Fu;!5FP4D~N z_l=s`rsIi0rLTw&7BM;4Bo<*}kh4BxMLxey?oWBbcD;KXmwI3TRXG(|*hrpbxeM+d zRfE7tgVfJ=#Lb2ZyeIi**F#4lJqkDriID)Gtb8qK3crbF?IN1U&!P@ivzDEft;r9y z=7+sutIhZ-wKQane(L$mzhjbWvD)ZIZC%YdHnW=RnwJW+hH*!=)W-D50htf1pvZ_# zk${(X@`BcspI>ZFD^VY51cKr{P==j{8DlhOHvZJ7)PvES8a~%epB7d>4s>4JbO9K~ zETOgo1xd8{)aYmhx<_l)w_x+Db;f37&~$JmfyDk+Ev{JQW!cH=W13gphV!^z9^pdo zCA!+CT*%xgoRv@?7KQ94(MauYpgN-}l?+}Sxkz=LPOe|F<}+mHx}YGEL}8DfNF!3%k?Q0YCDR!5zwU`map2A zvLYS(L?sZy)kz_HBr`y0w*1;}j5;bMjMd%;VHZAUd@!TL+U#P8=0K2r$u)TDPRUiL zV`#2O9je!g)wi6isn$`ZUOvcrAxZ2Q$V8Plbp{;W(Q_Zr>U-DJ8OuJpELw_ZS?&V#Ls0ae`&#b0#1{enXWNJrEA~J+*r^I~7lfas ze|ONJ<>9pcxs~T7Z`$U=2;o^;fz&P%Aw)n9_3RY0gX-nb<*uyB^>Mj)B`uUhE0DiB zkYe(e`ckYIU@5gxf?mb;EQ<+WzW2p6gNI)uF?Qojg^rkD$UfPm6^2jwC<;$GIgnYD zi|q0pLRwAKJHaQx6UNfFV{{Mv+2*UA?CiTO^duWyv)P(g8V9VHw+apOH{ z#eEepOrIiOX}Hg)4eijM2>T}y>NuNu@8=cg)C4R)q69ZAMJ#53H&<`uLSsmCF4Ob+ zbWTe);#&hUjQnHx?;RAUfo^I9u3|%{%GonjaztTtub+*Id?#*fiu;K(qV-F=vO1F(vrV^|6aY=@9kf z+4Cwl&}@9>SoI~Wvp>bL(5=B{6ACH zQ5ftlhxL%Bsc>$~Yn&iPROVM2FJkB)`%tV3TuPH;(DwO_Rom~@lRq1GouHY|F}XH4 zT)0(qp?l7MF{5nWWQ=2O5A23SzM@>^k~sKcDmVsmzH{%8uPQb}iZTx9J1;G!w}f%e zj?6PW|0y?4y75yR&_ucd_vM0YY;!9iztuRq#hfrLvr`-non3m)r8P}gP~?s6|+*eiJ4O$W2r)qcRQrNs435z@w1h|J?ekgv~6ii znn)dIP(4Iz7;)loUMqnD7iA4AREy@eGl+##hHkuknvKdHNg$|W)Ct_wtHCI=WPBx~%GQ))&Vc|sIaB@>ZEH)yXL#Lzb{Y1@;15-tsM7cA zW0j!+I~=2!aV@)Cht9klkCJ?a9iyl(J|Oy>I2IF-)`Mb#x5-q*UAc?(rs)D!@HTE$ zb)*01t;$Npmh10a*TN!Z(pHCYI(`8yYV4!dn$>&O|7iSL9@(H>0xkPxF z)0`Sz#5AgH4>z_VRZQwBm{qx+>hSHcFfQ&eneo@$t*&XMf3yA6N%Am=QWSy+|C@cQ zkaWdfdbOd}$4>br+TWd3W8V<=%O2|yU)(MAAYK#;=A{i(4GKY~)?*5OvYnT{?kOOz zu#r1m{;1c=0S?7)!rG!2y*lY~#n3d{twXFLNAe^!vp)q)Ai}b#WSteVrM*LP6VHD# zSGw;UY6pqK29?`pqMC!;-&*R6ki1eXTx?Xg=^^mpzwzF7bf(zDK6(oN@Tv_UH5tw$kRcg(k^!o? z0c~lF7VV1g#Vqb)S|>ouoZ6{Wv;wtjn&@le*#W8q@*@eKNQlM(Z{r}3#pHH(_X573 zocCfE1D~~biwIFw z{{+_gRMB&vTJjDEL^40V_B8lgGhXfH9+Zp>tL9W5lFvw?%TsW0t$ zr9{}ehF5$X%cr|b6qb`89z}3kLAS$~zn#=<>Y$zP6Hl!moTsXYMt++m-tY&_n^rr1 zKPpc=k*&A?LoF7upYvwKHafU_Q}6BEhZDBZ9P*<3LhpwgB&?j{Ec{v9WbVjb2h2GN zhnknImEO%pokV@pWxNEGL)*`~-Y<4fKuUFARo>?N^3-20U|e%U4t?J9=-EBNPOiEr z>AY043N_x8f?{JfNzIgZ*iz7T?S=@Mg#l5aftx9mvqvci~R z%?%&0e8XG$E7e`u(oAH*Z}tI;NhJ2!9kCOSBr`{+1o8fllcGY9K(KGLWMSBq?Vdh1 zUA<-R)8VB^MxLf4n_a8uVH**L1wdh9m!3~{9ixketn81h1F#|P=iLYZS3}AKtch4_(rCi@|@%Q5b0y{xy z5RW}3{@-;1SaVy!GPp6NUA?nBta*1HO*@T}1p%h!J7VBCYvb5@Qy1T>aVBTuuB187 z)Kj>o3o>`?IKdKl5QZk%MV?qbxC`sO%G(32n~SA?A`E81XY7Z^;$Xds=C}y!?{T&M!VcOyj8y2ACuR&4 zOQwj+1pU}x(``ewN{H>gDC^01xMaFvuvu!7Qo#;pcuSBF0qaa3LER32tw?Z;SezljS?@D-(ZWv%)Z`-2>5h=^y{*VE!&+1swboSd!S+U}Tgi5b< z_yNDQ>s|-AWzLF!*|WI#AJraA`#2Hs0t8Vet8>l|S7 zzkHTLN9aP6S~e=ziE{W6s}-FTvxQOt9<_)^U0DertdCFv*7R!4QyU9|ew_zL52z_R zgjSY{ z_(!7cJ+J4DYpkQHz)HdCr=#_&H1FhCCzJj?L%Ccfl?n`!0 z3;;6^loKKM#7ROOAcuXX`B_O4S(Fu1sK2uk@J z5?^T3;&^+5?2|zffbiBaOU;UM?H2;)dZ-QQr^(^*Zx|YP@&iWx{e4X6=fD$|&kTdfk6hxOZ46Yo{QJ6?Z`>dd9l{$HOXT$)eS1 z4~tPhH_@F}=2YN6pC8B8+QIzOpKYXi2j+)_k>qsaPOSIl_1wsyo#5`WZl^AkF-7{w z6!1&kjodCa$6dV1j~w_1*$_=Hn20QTAi)!#28pD%aw{MgjJ=!T7=+rc(bT31MO-MT(BG`cSl zgc~2w#z^ovs2hXL300=T!3Jpyk!a69MP@6y>WZI^%aQP+P|(<$=)Kqrhepb1mw?>r zkIaGgZUlZFja8__yU1W3tbwAc)}TEUGnY*-YL7OYi@*QHs8~kx#yVeL%;WUMrSElN zxu9Z_`shX~p5^i{3IGaxyA(MDkETZ5`Zz*wi~jaR!A&P%)U06(SXYw*`iXe1vxE7CO7c>Kt3({^>Hc6`V^7=v3ql{a>1LprU%H8}f} z)70!ied!-Nv3n={Bp+~&P91&)!AQt*2OUt?bm?enU$hSMmkG4TV2__pxfR(DRYF4)drFy|SH;DnZLr z({G`fQwudW4FvTM!N2&#!|wVg$z|ckYpP|q0y5S7z!Oz9X?>%h72!R5E0YQuG#u)9 zC7hI1r_*c4%uT!eW4cJ}bKJ8iU(NbZ_Hq2}d2LXIv6TLNCjYvAYuAD@!xw0SY>*RfB0 z$CBVEAC1NHg?GcJXMw-BahTnpenbDrk8^j-`YU*OJ$G}DUebw$QQoRzQ!LZuKvp06lTowB^PeuH1aqVKAUYR_}PPBh?G zrYdL3P-3#L7yBUtQ>*sRqi|I!B72LR2#>!Bd=;nKsrP&&tQ29RdjC%&$VvK2#qfw_UNQJPp^nvwhhrE{v$1%A zoo{cbpXa{dx8(m~hSV|EivhT1m^+ychcvxOOqkZxiXDEW?XeSRroCpggic6wzEWh- z_114D1%{^BEY>qNm{NEHd~w*t4z8!<{8m>Cl@Hahwds{iu;~xjb^_19Ub@K;%GFy} zdq+8fk8WJXRB7Fg$*9i;4+XuMBD)uq1C~k}r?mnSl^!>gB8bYc`JK&X6FRt*;L%Oa z=lXp?)T?AejbfV2W3SMKdLB2oc~(Z7 zvp?2u))zvrWKqqXox7RMwImcH*7iwC*^iw3ED9tOLQ+>+GCGq(P>RH)TqZ?Sza$lc zygXu1`?j1R%1D-b{X^gnqtaI1dWA0j+;LO+^l%wikHJcS$?w|n7C=FS*(+~CkLO_^ zmudYry&wv~+WK0H^MV zfS_341(D_RZx+u!a%;tl^>^WDhIOCyzpkU#m&IvCBXd$4WP<4Jv1Qk3nV`j)PumZC zxJrixC8d4OkyymdY$Kx*%ghLQoml9F?{6-2*vTtW*R@g`ZxQr$lnNfAl^Uvr1^-0+ z1Ky;ao~1AnPlh_G49%Fe8+x37H_b-HG{pnkWi&Yzckh99gv3vaRI*Ahi|9FK0G5S) zCCU9JIMtkg78t=I?&RZ+5fi$pSNQRCwh0Zctki*3q4xXP!Rte6eZ3jV{OOC=lE4INib$l!`#dJ{z{$0)CTnU#6&I9&n; zbM1#W5cxLzW-HT`xbcDzKXwiY*^*vQq0w(>&*pHjqm$|lyFNwhcfZIa5<}^Ij>@YZ zU?&2u_S}R-olvNt!I%dM_@{1Mb9D)zAZ2-3WEYf)|zcnDE*+9ywM8VnT zQo=E6Il!5aPp(012;i=}%I)~0N3qG3zyD|cdAAZ>qRXZr#$(xt-R^VdG}mI3qeBzd zInHIiHdH(JTUzXi<3OD*|A84E8Z+7<8ZxV_RaLtxOp1tMiEZ-fqXuEezpohEBzRaB zvxt06iUScjfeSGP5{Jli{4nXkYKDf65xhTkz7pdk#vAXPYTP0BOEcP)uc>L<7iRG% zG#>}&w6P?ScD($?l$?)bG#L2?D_&db{?Kz6P@%J)`ZA-1!d>gQtQ`Fg=*1s0MKBy8 z@wemK1~J1w>jYz^>hWQ6AUQW^xSh|+4x)WGw8)<_+33fXjVz@_BT?a-!XJc60~BRW z@P*Q!JqEM`+VAvJB^Ev6M93l(iCjDc*(CFuQy#DrPe#&+0~w0hUiV=z^B7BGMjP{NM*1S@!XswfmWYIYWfyP6 z&JkVyQJArv=JVz@YCU6xRTXxkU^U6t8)4xRNZhZek-(Yydsqd?Koch`igfWnEaMV~vcu$jn@5+at=hqO*QQG*D35P4!+T*w8J{Pm!}>gy|z4Vwew?aKyYkr8Ze=yp!(ZJ zgu|4?pfpO4=hPxG-ZJtl2_g5Ga$GqCqS`626q)B^^7M*Z#E+lXWlF-wbe=JnzKH`A zJVu~?Ra=|$Y%wXdcXz4Dz!ms}HA{I)n7$!7AbEwCw9)RDXW{xovA!j5KBR7A1#Oh# zjN@STK)J;)>0K@%0%%@%P#6@&Q<*y_zb$=AQ^PK>l;c+jnUlL}D|G zC-Q%{$oDTxN?20rAkFRJlNbR<$?PZ9hAK%3`|)RRI?VV<_ucWJFAZw%EN)UxT%-|) z`1vI5Ez3&`D!t1W0rE2-`VdS3#b2-nJ7v3=LSJQ5+Ki9ColPLS26%7l>Gx0|NlXYP z^5NVP^7$&}m^cp@8hm8gxjx&^x}ZYK=&9a`RrTFB)1bJ$GlN*mDCI&EA=pR=tQ)nr zV&U#|o{T5y$PsAPDiJk+O&lo)!^3q%=ouUwxzI!U8G3a9TDd~hj2(RSG3gem$7fDPLgctzVr+i<$G1=k)iHp!G$e__ryVlfsy!lqGOHGpCDn zt<%$fC?9E2P7rRp%e%W`jZN!Gn)2-L#MCd&d=YzLkp6D0Xn=P~N#w((yMwNM)Nk%Z zc~I%&LI*o{1>(+yfIRN#rMgZ~P=XA!A4FQiE?y4oAv(FetW2yRDLdVfR2kGI##cO#m~VVsfE0#h?~TZ`v%(pbf3$zB}O zDr+xj#7>1az5i%;(0aTCg|)Rv{{viUtND*Fi&;~HiQSaIn6ZeCT2s=>ustLOPowyb z_<<>dfWX2FXOP*7e*vIR_oh9StVoCOadkVee(v7c?ikN-$LIw;^OVyw?@BL;tZBvkf{Z6m_kHu&rPa#!%Y( z_)&ett_hm-;P)I}ux0r|TAUOkliC$iYiNdWjRa`5vH;WG>GuWb8qLbc?3~SN#A)b# zM%vu3)2kf*N&#^)Yp7pRH4o}WcD0}2MvRo_bE=SY#D;8@<_9EzH^++`!FV$~U_IUr z;?@Er+Kmu(@Fh9itD?-Gxu3KuDTLy(#T^&2>wU8*n{?cKGtCf-;S9Q6(Ki0--V#D%IO4EaKq@QoJ*Hg&w#pc-f*F%@}OaR%eQ+ z8rzMlxPgbLoL+7=&lZ8C@6YnTYcyqpEwd0)8EAIPcYk|fKXT$o_ml%&HKN3iU*)Xs z2Hq^AJXPjy!Dliy_X!2{3u(w*Pb=V%<P?vVZPWT)XZv5Iv% zd@ydwp*_tDK?)({^S7G+VQ;Kge)g|KPYg-ps`J`hdr9(7J&6_lshdyc&wdc5346e! zXcPTfu>zeqCaXpwHk1F$JPMYWz!x}Do`)--44RDNax%`*Bd*_yF)>O0x>Hu?tPZu< zfI4&!X3R%67)jEQ(VlkMrP6j&B%0&M(0&QoV|{@}pC&VvYEE`N%4u40mHes6SzsJR zA_uJtizmjLixy>lY`GI08LL4(n5E z7w%WumC}24UoOUSGq&|W47M4cep{K8&ktnW`bG0sS+M<%X`A(U@syY0(6TQ{a_wwb z*J>&R3ck>8`X)mbW+fBpa_77n^|U_2M#>ZPgF$cky>CO6XrumdE}rjsabxNn!_RDA zN)2}9_w;M&FZ-uT7g;+QwwE}=FQt0YT%_eOL%v}&ZGGV0vtDtN;y_{3fW+u8$w^~I z{(IMq^}3fK?QeN>-vFFR-%k1_sDfyDU>cvO@3d7{nG zHaUagEUYpY1~J?+RJHkoeYh+4sn=J-mFZGVuk*u(c?2QC-NmNZ4x>ar3I<^vF0%AK zMI7c$#EbT;W z3!2KFIecpdI${xfXiN5ZVMSXB+*4WX4KlGO6xK(ah?0-+oSgLd=qQ)!eV9!Z&K58x zv?jFIY3^eKQzu>h2b5Dq4&Dk>(m{b>;%R1iNIl_q^KN0N*=wY^mg)^9du10%d1=Vz z4-zeDwAr7H#3^9IR5a`&+js%-OS)S(CM_lWN05Js zDAXr;x3%_BDHODaEh6F*IKW1_YWgYhVJzvQk+T4xBj*h)i#X1wQY3Qv%Kd{Mb^24# z!1Il|oXPm4r&}0a0n?_892~D`@4@Dwwu&pgWg>A})@&F@;$X=KnQaGdQkX3pq&{8e zswQ=|W+84cB#^E+NF2wNjg&sON0T;lWSSjJ^F`d-DTFUTF_|x z;x2lEk>N#Q#z{@Y3_?7dA&^OvIPk;#z9hmEk{6Q{w$hjI72CBYZ$93baZB$y z7PE5k#g~ zz`vUO5X&R^l1HC}s&zOFf4{7$XR&G;!N37I$y;1z1BD9X2@^+KiHQNgXr0WRfUoDG zaO9&mCwMvZCx~TpRmx_vS+pz`@73rB!N(-$@2>EF5;>a)m2jz9G*Vnzg~=qD#~n>yMXL7;I?E|qZ@%smfg?Y{^tkD%ZG!G5`yv4Gijw?nL>JP1bTU#?stw&%6TWEKOvO(v5UK#)+aw_-#Dyr9l&9E|00Kp2Ocoqfb+8%^X(iK zpHM&ul7abEUq#rN)l$$`h7pY(A;Rd=59!v#pJ<6Eu5g9&`%rWeFa2nA>Kr`0@Jpke zl)?dODas*FIQWETN1!E%krPsxZ#q#TCHYB=%s7`PO3%9$wnW%ms4ft27y+{OdMqvFm9W~kF<`+2n$Yet9?{0JDH^a0iAGd45+ z9o;h0dNx?NUhBpZiTb9-;v)Oq=nBXBu9$7!uK7>D!*;yfFOVfQ*#n3fxTU^Eh5lUK1OM1;nal_xZGBJ71l*#h;eIfaI4F) zc{jsAUhp~aV|KuyJvqK48$TahyPdN&!!LMui<1oCU(rIxn0OkJzsgqeVrLP9I+YC3 z@?9y+(W7%p#q<-xE|~9W;1}fO%8x=KTg9*POA@tB2BsYatG-PnNF$3a-y+Cn^WXkB zD8ZG6daV;u&PL2&)&;})>&BV=_YZ{$J5zKOY*NdbyHrJkxN%-~oVhVH)2!3giR9sv zFLRNdH&b0elOASnJb~;dvVXORCMRuX$DM7Ua81S^W)3>2QVQ1^n&OCoSZOwk3c;|b zV7<{4ldY45q4XrQO!6+ma0RP+A25{~>xZJnOX5uNaS9c$n4an}WML6ZR!AJam;n*-Y8@eV3P8I7h@I;>)_NS-d&4 z57s%2XTz@Ojd9^>t>RgGxceVra@s~h?hTkE4$=EMwM$LkT#aobX6HgUVC}`Y6}Ghw zug5rHb~}z`bjX^asN%UAW{Yz^v$}S)w-xD5zE}OG%rZOv_@`miUM5}2bHO~cwRwgI zCn#`aznetg@0UM{YdzU8h{r_(yIizUEu`aPCK6|n1qE;p-y||CL9Ot8!W?lbyRd?1 zdPcg##2FBrlTad?mj9MEcy}738V+V|~7bw1G z+z37RwG5ejeue+U7|(F@xZnhc##XETOzwfH?5r_SV_*llPC zLDVKDbe1K_w@!1&lY9EB)3HGM^`M>YDF8UdwpjU~M2Zn$WE7sPLKr~L&txO4d>dq- zMGzjqi}Mq}sx4B$h{7}PN!E14dTE$9bP6k8E5?)L4;lxKsh1G&9|p7nKg`nK+yo>L z_tlOO@CJ<39>bCBR6LDR@T7L$KDhkcUEA4k-wr@OkkM zav_*zxfoGQtVf8QP#KG+A8Q(Dkwh?=jp;ZX^N5B9l1SHfm1*AIFo(d~}c}f4hH>3t_ zOA9zi4!N!>q)l-%-BXc0=3olEwFy;6jFMB$vxS1AY^e}J0RaIe1I;l8Dt$2}w7C$}#8vzVC~E(#fe2-QtlLZ`_(-e2uGzFFHzkaReeK?^trLpy>Zd zKIUsQUfru)bCim!BU%=d+wa1If<-ZznCsut+JDBCoOxLP+lemUk{}1+)i9_`VQ~Zm zxM*0Dn6Ym~BVWM=4%%GmSsot1=EIu(*$2N>$_LKG0G@PeZX^p!MCv-$l4z(9m`KHz z`R{_;R;gS-vHVG=QJ~HD)g2p@J++{TAc@7&PPm*(e01IR5DRU&)6S`5EI8AZ*1Jkv z%_4v8-j%}!!?N`8!Ho`PtoH0n@VicYpgE@2ieD}&5+o|<#X|xbXp@$L(7zAUaLFEK z$)@6)=nJ%otC_V7d5F}x5s0xtk3gI(_=YVX|Ee@%Q>y?I5_99VhP?7}5HAC+V%ogp zp5SZt%=Tw$mWvmaEG)81r;;UARO;kdVF8@ zqJQ(Za6w!wogMbbEwTZeKR8DtAP!9$Y#sYvxQ$;@piZ2@h%MD)DTQR)Exn%>lH_oV zDNS4^DP&|T^F{FvNVdNwr)gmKBe1RE(Fuw^^FU%k#o;a`sWe3ukt)>98g6%%p6pir zS=pu6T!~}YoPLW4f)ik@o;rF#>MWsS8a>6%2LXW_7S6DgE)%x=EeE}88&IrNF5Td) zFaTbmKftYkgC408z&E{qz@IVr1hSI^$aYB~e4^l)3^Hj~n-}*!G3sKo zMFCZ@g$~bAWowRFoatbHy#!u#J$Gz81Rfaa$ljdb_n;Kab8Wl4tOXn5pQdnbeP@BE zQd@E?o~p}ipK!?%!QR0WGBVsnd!&^cxN#O{&`yRxp#tWh<5cRbxeVpf?)*UGT8)ui zkhcd6!uaiy@PopD)2+*wS!1qA^SQE>>xN+}d;k3O&tPPvq;E-xjDG5f`ZWjlkNR<` zuC|;db5t!BCkN-Hxc3vB>2hSksDx zTqIF;{;i8nEuMS);GDit)YOh32|(w?qN03+t$g69v)vH-dv}5=GF5E`-i0X^wTI<9FP=e5BxB0766|~7RO|-xOrx&4_a`8KfH_@k$cQwDNPkei}T@0gTL4 ztpz(c@w+g3d{_qwd>LL}NnDin?rBU_$(5kYPDs(fowU77aCh=>NtBpCUY0zQykIVU z|AMX1-X^dG3R$LWY5OEj_#1(Pn9@OM#;qM&tdZ~@(V&%5=r$5&4ZdyCia;2X%uRTB zh*{7r5lk|d6K_r%Q#UM#qSur1FGlrG1iL!D7{om0qpr^CvQT$Jczb?l!GIJtfAs`T zGYCy0yfg%`0zX%(z4##wDlw81&Jiw#)nPl#>z>4rc)P}JZ>>S=CPGj_CNHo2jcY{G z2EVW0I>vE3|8$0_M3m~x5qlWA)phCyM6*<#FQm7Mkts>W!|z#MAKs4u^t17H5c$!A zbWUf~ftRbf7>p>jb{j^+@EVs=p}i{FuV97tmN}}t8PSS@4N1fl=?`iY%7o@6J%k<_ zY2B7WS})$0cSrgVX!=usm?bRAbgc}%WA*q!y@QSXpfMn!3>IvD>+P!(Oqa@|d&*eR|{yeP41Q7k>} zYyv8@!7&OYG~e4xaqFuBf}&n@4$=6sbsHIJZjwGDR|d`#<~g+H98#*w2Z_NUA2*51 zyZ)6QI>nF3od7A;izshM92H_tuv7*JS|%fN%e_eTSB=zIVH+%|Zz;1OZ^M5&-Cgj_ z4cx2U{5XnRHS$KqlqiLKAOuo|-UY%F<1GeZ$UY;_4QZck1@&#G*!Gp)#)&`<(%n!Z zN&!qe>?$D*%9L;f(f%mvKII6yDh4$*z%9f*G)tEH_Gm!{c>7hf5|ZZ+4t!X+?S~T2 zy-S!wnFXiK(8$amXR_4T;70@CqI!8f{WRbs@l}9Hkix!*WMH`_Dc^L z5_(JQ8Yf1El`6WNJZQ6of54?K+Kmwun#$BS;Mwe=MqE2Y0imT{ohVeqj)ZNVXk<_H z)|S2S(vS%V8ixW=WBV>R3mV1mu_0E=AZ2$6!{{1IODlPyBVEkyk@+#I8yjjETCnET zK=D#%<(~A9RHg8Vy=EZD?B}-NN{-)A@y#ARSb9kPM@5#wo{LwzJ05EnU@EDV^vXx} z#f%#5oI14=M18)=8q0U^J?T+_bP-0w9NF`o)7?&qEuJuEX|_erA^Pj`<_11t2O`#!TGy+0oPpRT|ky&PRH(ZPD|op+5zseb;oZM~16x2XW#(HfNks$4YY zk*t9yHYseB?(K@`HHDM7wR6@6a1u!f^tb7RVmQDB^yeAhPa`Ii%_bd0J6@RuRCSUP zrFVRc(!u~x-mkYS$YmCf&lIXjUpuO}8ENS>wNcT@j0ro(PNi3}hbWHV$0!Shg|O7= zV4EgXhkYyjxVEMJN*q=`7L)*VPBUrI5EuA#UsuOimA9Mxj7%1Z==2Vva%jeKoD%0? z+JMXrdy_;*-J~V#FBS=yYxldiHOTRQ+Zr~Oj*PZ^6}Vq-ax*S}^4^U$r8F6DpdJIn z-`g+!i=#@(^B}7RS|H#H<8@UhOb#8(LEmV(4jX3xL*wipXv6o$OoX^w!!R; zI`)HFm59r-=Mr3(Bv8x(^6$4s?Mw)$cD_~9Uf`_{h}i``tFeHSuV&-u%hbYpd#;8^y3i2Q7ryyxbP1*I9sgfhjhh!u?s>t zOd?@3&PqUnyvnL7M;No{_no=`SPPx@da4=eATPCpjjiz)6lr<5!qa=ryWh2i03 z0wX93mr7h9T!wk59S}EyIikCN<2rm*JVN}mO4TG8BO`37MPa6CA7(&L|5+q=?a}cI z3K7&vf=n+!LLAZCM2OBsTbIbd+pXQURT$oC-`=6id7R>PiIF za9V8wN8F*8aA^Sk6L&vt7|wb^^tGW>MHcOIX6V#ewE9PpY__n-u>PTLw;4lad${cv zTOWNIXtm9si6&(BjnoqIjM7BaTMbC<0IZ@cD^tXlNpj6U`3J^TI5FUb(nBaZAXyQ+ zwY|SQ_IaV1ZE@LHi`_W!=L=GJ`!1BJF6gDt|8%7WBk4CaKdm2k!uSaoM2#_0+8XfN zt}75e9d92~%O_G=p~rFbqhoNma|_fhFH|TOJRO(vW^hqz82LS5%L0h%8t7Sz{P`{? z>%41#N-K@E)Rl!k{<4jerZJsU5ujTMAKe)P^gO*;aJhCn}rTCH9(u3JN|Zd zJ!5R8odv@0S;&KZ(Y~JqR;{5mP4vA!zE`DV+#2k+nbFhLIneLI97zXA-d{>*7Oon6 zs=6U4bV?q(VD+C;yA#T`+NJ%hGNAqp>i4+{R<|k+Q*|hbK>>|peNhNB-S-akO~G`2 z2Z8o69A>Rn&(@4ctQY%7#i~ur_NA|{J*_O^Cq`3zd4svkpqN;G_g3!y70eBiYN{?= zY1dW*d7Q~1k)t^t$2$GJ1ANlpi^jy*AU$dYMaygNZbjHeuaKxYf*C6{Rxp$qFoGG7 zo+Ef2bx~&o(dg|R-7b)rnHQ5HN36|7Rp1%on)E*b`<|ahdYIod#LF1TE=X2Ldb zW4Lfp#HU5rGo+elsDGwS=l`l2wvIOTL1O+ZWNLu8FgP=9VG3PdWK|M#CCzPhXgVjg zDwrrywC>t0mg44aNjZ$m9oKS6O@?P%qbw_-Ox#xYd5Z*Ggg9L zIyTjw~3|SULCaFDGOFYN|Up{KUYQ~#v)klq_b}Tg5l5{rNA1YrN0*?Dmy*Hz(0J+-(zZ4Xx+Ck#t$d*#3sSS-RzJJWy|ru$=s5k?bHy-j zcGgL-(f6Nz=$Gf}y-sQB@9%Si7|@*J@AH+(u#p!bgTEIH{z&;qh7f&Y<#z7FN&-~n z943okW{3G_bYy;5byi+$jKg1C3a<`^dKyfV5+Rew#a8Q7<Jd zRsi*L(59ShCg?-DSnD_xE~>>L5A&7XiQu8Pg1B=y6Z_BRow#|N8~I_W=%7z?YaM70 zoIrkzHQ3f?31KRlg?hWB1fMR_OILs$PFQjd8!vg$Te*_qU}X1rDc*17Wg|83av6MI z&6J&Z%O94iDK`kY9*;hlrKyW@t}4Ur!YY*rVTCLHJdf9yB>AiGrXB9g5f1oV*H^1| z4?Ge+LPjkGrrrD${|9$Kh`-k`!yx;Eqlga@RvouJ3KVO4+WOgj6fNsqM~*C8@Q0$_ z-g<{|4P-?a#{_qiTItyK9H4k^Tyx8xdC=kyfucd$s9E!8lGSSoh`$Oz#Zy zWafASckuE$iHO{vt@AOlo3(duekSsmp=C!AAcKTU7^yW}9sS%7{?WO;OKomnt#uVGl2)DnyLn_8E)&EBmJ9G^;emfmKl-2NlC)8dy}mL8$JqD4NH#c2{!3khzc}l ziBPTea6j7LjWt+IfW~B;ENDCnrG2@Vtgx2jiA5u`#50zOtq&4U9hVxf8g6P zDALuZ*eOPs000aSL7J>ds6lL*ObEY$u`$QpPRPjD+JhNOqp4fw3;){*(C>ggHGPHw zM+X0sPAhohJ0eAN{rI&waCz52)l0uFX?Bn4#HQkk-fv-&(%6mHEy}2Sy8OAs9a1N; z>Di;zJm&*&xmNy?BlGSw1^^tZ72vu`r2o^^|3}5Ip%g65sp&Cf9JSjMl5QsGmxa9&zO=PsG@+ z@0$Bo*xCHwGHI}k-YA9FH~~rSP2!xt_trQmVa^K}&$kSB0agvO2c6Ed=YwAVEyQc&?DSlA;8JC=H{*gl%dS!2CAxt)w&hqThPJ!T~X50c}0>EYjZBbR65QzV&G z%dh9dx1;_KOZBsE6BGr0wF+&5v1NoeTa7lw6&p_kh5qEQ$4`kUU(_*(2T^pfx&dT~ z-Im;N>0kBoZN2?(nBFL8Dfzn#iQ@MZ5I*;2U0bP+mV8@k^W)>uRoj^8b4TON9bCB3 zxQ9!dF2o6SYXW%7ZMG=EeW_b@zN9#&ghSJR`?{q@IQb?UN7_n0PFvsrIMCPHd=;nz zmD?NKG5v|Li4ut;t!#1xqO@mHosj!Gbf`sHNzwPzjg+FPB!EqvE&-MLs89Rj{mw^N zn;fl>$1MhwZhFn}Ly4O3vr?PBf2(?;l7? zD)aunG)_gnQ~5feWy!&)8P0F5lP1w+rN__cHasTQ<2m1mtgmLW5vhIo0K<2f!bBYW ztT)8#!3(PgT(qH1J&UsHY_x1ncw3$;%)-rMN-8G;*m-SWde$WO__B2@D86u9F_#@q zZ@YNH3e?+){HTD?QOVzccM%X44e1bUm^+j$#008fzJc~_cY$tPNIK%xO9&x21PFDq z1CjcFWQ;yH#BqvEYKC~HrbWf))jQtvJ&}sUyJULgNq*-`?7qR)R8tim`@Qxit+5of zZc^zf84*h|Q^>f|MUeiyy%T8GlfNLPtfz9Br}J{apLP8l7VNw=CX(pag%Y11rkH@E zIZySANNS7#4#vKVw2vg4DW?;UcUR}gYYG;OGO z)PtNVvmR-f1!zS@YB~DcDPiqE<6m7AE87yl*_T;TQ}|nS@33S-n40$&071gWxT;B5 z8O!yoTNoo9labC;!4icph>@ z@LoCr{%{I-+8BrXA>m~T7Dp^@7#7A|n7=7Xfrt%HpathL$Xu25=kFYEFI8+6?0LvX z_g9btsU(jq`aD zy@@l)du)`bk`DL%01v(ECMh&t#BxYyP#QCV2brSn5!DB#@!`Al-DH;)t;e~%r_Xt^ z`62nFMcH0!IO{_}m1mS!0AL;dh~QfWTE6+be@l9MWuO9eogfqew}JR6-}j>p6EE1A zM{)tJ`Cf(8HJ&wpR|K$iJLAEwBB=^R2DYa6R?|SNl|rg8ymE)d%y~=@)p|bk`uk_D zvx_I`VU3zC!Q-F3q@>MDU~Il}DFWijo&xN4kPak30gOcPOgY2PD85Huz7yIAYtnX)zsA@fub=s4;r}#2AacwMK>g@ zlaOT+;)KKD@6$_ur@%Jxq{>29 z#aF@L5QMv1JM?sl3x3%Sww_%IH9PiTYiMXK2+pP*RrP*Ti!#P!niIMHN>$H0`yBvY z4OSZ@FF(>c7pYnOmO8~uq*UJpe0nuDR4*?~FYy6-xueSs_xnU{Gw10&0VGc zP7eP;5xT?$ZDBK1^kQq5pIL!#NkFd-0ai323^~lG=?vKltP;2t9J_S7NXNUAQM?3} z-=UW;Eb%YT{-4xHS%2p=@(&dpEs)$n)(C-J_J;ffPwsngdKAh^yWV=nHchK=sJYrQ zUA?{1`HE0j^6%9n3KZ||hYng#`^qREi{{2@k$7KcFE81#k#2}B`>1(fdWRU|q|k!d zC5$43+n}?s$SVs{_^B1_$j*g8qPb4~oT#*#`}Yb!)P+2eg-{5s!^vb;h^$~L>*I2yj^-`xiZxU->yhPv$!E;+>yyEqV(VSu%_`9?a)Y#S*e&VE4izH z>qlM+jON<ykTzb3AzX6>)p93(O>V-}ZHUt+?%Va@0p!{l3Ko%qMA z95!kZY`-278S&IT)2Uj8NcX5;Yi}&qaE`3TERo$&=UgI8G=V?nfP4_frxttI+rVMc z0<7a#O2T-`2!2V|*F;jblb)$Ah*4plq(bPiu-3TBD1Wtqig;TWFMm(SmJdq*`TfGS zsHngA5d7(P8$XN-u>C|p93k%7%UADiDtjYh6}}e{V)j!d8f6|0009yL7vJ*6)aDH74_#w-2`J; zHOD6%0!`Mp{mydFI^6VJuV$O5)EXA>3nf?~SZ7s;T$dyIu6u_MBkoMxXyB0iIzs@p zJr9lI)D!TT>t!U5i>h!1xw0Y__wMv$V_rc_oXQg2$(Z;Q>q*^~g1*I0OMVJxiScDC9;EqyDc+m?w2R827RL(ELJ|sDpTzzxFX+;(&2j zidrO^UhzmYPwIHUmz#*i^iTDkVe`Mhq}Kp8x-)e4%V93`(4@%JmWUV)a6%R{pE>I@ z5l1740Xs9JS{oj~0QO$+gMp}3`tz*Qb@v`H{6h)=$+?JV9Yw{}*BOpO@V0n!oP@(4ua>L0NrfFtF&vENjiHOX}V*^GD*zy0|F~N+DFyT$lwk z!RJN`;bcUw2z7*1-s#GpOmkUDC$@^M=(G{oHhU+ZN*P(@R_W(m_tONZ&Q8qihdu>(FpU_qb=^fzZp1Q34+ z^<@863y)8P!GhWc?q#-5z#B-=O@vBjLP$I7!7=TqJKlnx!|ZF_d{zqiDsh<=1VEqY5iGJ1Eu9}^1%WU&O&f+fdBvj{Q;iobW8sk4WLOulw%7p!~PYS z4IOYKL|4fgBiu?l8v-Ur-cF`9xqX!YQ+r>Ge^0VynR9#wX*BREg+^6%3shPanu51> z&rM?S3u9E$BiNr}-rF9sq%&oXspt+RVb|Vuvc;b}+hf6v{!fMfu`>(oMXF5s%Pob1~D~D1iy*DGOahm06t$e%Ps0$2m zEDX5SFCh~z4|~^W0J-&|BLt-lmRnnklQ&0pF6(q3_&-gG@|+YCa07(}6cZq#ql*Mr z32oYN@87_-f&oN4dPXZRm4LJOL##4eoV%Ud&7N!S7R})Xi*6`jci!zeCJCFJ% zFHR1|@#peV4_v88JYF0kIQK_(MrTy+2d0p9_h>uO8?TAP>aSDZcG#>OIa4Pc}M>e{ZVa!{|AWP*s+ zcN-b~8RRynI*$^XaM){uqq`JyWwv_>-()Onm3@n{!qb>eG_ItXsDTouQBD?a;n+U` zm-ZcJocm%V7FvZ*8R+>~)n_Er!c4OT+PKyGGu=?QW9QwjbTomWQm1FdU{>^>WZSfB zUtUVUo21Y6Hy1$7g}Q<$xPhI0)(EJQL%c7P20P0lTy_)emsDY|bJA_X|Xp zQq}V0f|G|Vq}-rJX?IN)OwlO~m&R%y-j7szbL69bM0sH$j1QtI8KwKd4FX>8;z)}J z`PcUf(XBX3_ab`ZOfMM7xdJjKd5sdTn*!FQOFbM12r>Kle0jl> z74v?C=X=~MsUUUYGqjT{q%i(R%uYJo=;83{f_<#2yg-!NVxj5>3<6ByujcGPA2mpu zbWA!VLUU|y3S7u5oc8}fce6$N_c{lh>5Bq8A0y5o6Xtr?J$T%ba&wwK&*nnjxINHN;ityqZ+bnJTt-PHN1AJFETFBI4=C#o` zb!(P;?RL#bySw1f>gHBCbDCU9n_W5G z+I$(@M4$`Hsml@0QA$a)W!pBXwv^|^I^}UN6m-|8@xvNO|5yonAJ;+S>5D-p0fQGy z)ZT^6IWfvI8pXuuTs_P!a@3Gucx0sod86|c@1y(oYYdwyiJ#JFyO>Opde4Um-Q9>P z0+Me(Xp?p=rvq^(LTpkX{7m%cl!TiY3B4kNGH3;pO@U}*;993>^do(1X}~ErLUmT( zLIA6e84wGUU@&Uo3Y+V=AFh}nHQHj;O&|MTrC}e=Df@=5ywO)_ffR#S*}qg+6I;L2 z#om^e_J)`HGXyN4iW3}vw(Lek)`afD!YdZkRvFsn+zuKyz8h$6nARF{<^AmWMXhjJ z{s8kf zu+C%-Rl#-sr+d!n5?>gglcSvt}nbiFjg20NbZG$w2{$rEMq%92R z%9LYcm{VMioEQ$~ZQ1^<^kOZ1JFt3)jnTiqgqgRx!pPO>ACpUe@!K@DiA8OM<>yZo z8ASe{hhUV?&xySTXX$5Ge2nYRbJ1+xvD=K+v3WvwI5@d7rh=cvl{6w$+&K zim~Chb+D-qc2RzY!3smYbAy8CzLKKPO!i+5TbhV1p%j@$^?Xtkf+DNI!OgXy2y$U* z$Ew6)J65=@TipVV6p5O6d>C+dEwwT?qg%`L&k4U<%QIDj7?;KYb6tL)DjBez#^1=r zhqs52YjT8{rpRNi3QIzFwEeD(4nQps7)l`wIl z6l|Js-<2hme@*{K{`hn2i%K+QHBPcvJ>;w>7QJ`{cg0pDoS=3krV~N6+#Q2Gdj^G= zN?7J(y8wN@{(_0q6W(140uc)}FXA51B0`RG6zqlf*n&o5i}fZ0E4%EjDM`4I>&`Nv z@Zc2O+Lo9W#{?pxq<&{(nSO(4>sTRBSr(3cUq1_pxof*_4!O_`1B6kd)O`HB(zDL) zi%Kr57!2u{Ldi;^lZRJcYZfHmkj%8cW@=Bj+BWRjp4`mgg%uSWRrb#34zGL3+Acs4W8SH zAwoaM_MsiQT&R!0M8OTS6vC>y3<#fho)pN{%%=%!d{NR{_H9N5wm(&G~slC)T8;VB00*wi1^&XpI7Xxqwy+&v^t({5z{F)SY z-XT|Ae2`1>tRbzs2%?5N^MWG-8=AfBJVnhHa>zS-=2#rrxJXKBC#h5)JO|VVEeOFc zvrjMm`YkYuo!ld5$&n&%1yO|DazUjs&edWIL|j*(AAF(G-{4$oL}`kTtcc#%2sZKG z!f|_L?ElbCBo#u}*MqGmrYWwWPj`z29X@F6xTvqdYV_yH-87w@<%oEhdsICb>cw;4djbCX34Z1SxIek;vB}2^A5hEPYBtRzOSx++!NlHNhMI^9bi%TY z;1oxTAFS|JOao?@t?#7eBdKZmu$_~b;lgjhZ9FnzdjM+GeF9KFztJ5x@i>~~iV@jdX9Kt2 zBo!K$U9yw3S@UhE-TXsL#m6uFAP9XLwVv~J6?t-^`*2~C3^LKV<7eBseSVZ9by!>C z=8PnpO+T(HKCRNo0uE%L6PmW6MiT|GTpY^Jnsi0@VG9EZW|#IMJ(oYi@KO_e;PU&N zonx{ej(|jqD9e|8Dn1mq-YUN-v|%lDl_<$!xJ&6NIuHHAs&}UX3PeTP3SF(IOsJ$< z7eehU#q2ZAUAek|%sjf%&TR*nn4~CSv*;M|jBea^Tacz{ z`8*}DQj%2|XO2fh9V^)WF!GZ_GLt)}TjLHDrvD?u@-LJvP}wAqh(h%-w+~v4Mvi#* zk%P6<>dz49kYFH|jgu2kb$B}Eq~R2oX~&4=V_?nTnO$%jD8s6|?;OX76q5?j$aG0Y z2$<AFNPd*Tgw>b4alK?JYr z;-HMDiF}HFs^lpVa~`*gC1~o#9s-Y@lapW~H=d87?ZXAku5=#s=`NZhN>c_KtsF?7 zL?4Aw4nw8K?D&W<<$rv$L{Hy)tuQRW-3NDVUX$d_q!RMkx_Qo9es#fq#;|;IH*n?+ z+3S41>y}^UemTY^)FU7hHX>6V2?j{bK$i?}Vdcx1TK&n)P}FlDaUSW9ko5o}&eBtR z4;D!O+lvO;Z1%=}n)?j^m|@n6f3M0|$^W_p$r;s#kf`_d(k?H~nA0aYydd z@qpP5H;8-ZWJdSF+?Ng4B2>VSNN;9I(`={3#K>urf;lzbmjv9^Fk_>UOf~rqr;T)b z``D^V=hb`-hT{Y$c^x8M5Oq%tRbo!(<5X)azu6599t;yZd%katrHnXCry3&GDn&hQ zNi!D+9=`KALq;PP_XLCC6i3?EmA-?`C_f%c%0v>wL_PaMITT^pc)-xr5gE-Qh|+7p z(BF@wHDq-{zL3F&bOsR@GZYp}by(ewZC=G!%OK@ItG>FU!H?;OzhH8p6T~?Pi)6MV zzw2S0b(c0X`z4^2$Sm-H_~fQTVD-bZbf4g4O}s;*M&a*XjRs3`7Mwa)F-Lt^O&TiHta{=PXa zP2vJLihjB2000A8L7xsq6)a!+22A{jpWfUx_X?=H&-{P?i!VFVv!H4_g43;A(KsOa zZkP!rxlX@rbX|(-1NqIhoiAr+(J@>JsX=<=&`E9nMP5}XhLA`lJ5W)HdbD~prce}T zK4=N3zYM$={UIVla2IZZ^InUPHsGi;8kR_#5v`tWrsgmN5#OTYCw(M8o99sxgrmk$;(s_@*# zu7Sa+ezm_C%?Z=x;E4qy@_61cRP){G7!o`g0E`>Yh#P^}*s z6_+n#_7NqFa`wxKXL((fkHoU*Ev}ISt@_tAIJYfD{Rq^sIo~ffV*DGOTqMcMA%1PL z@L=7n{jux~F3NbYhDLit)`POv+AX1%{QIfI^ONY^Iqba2U^Yt(J;Me~D~fYz#Yw`8 z>^3A_p+Cp0sTe=OIOsgcOaYqOZz_bS=~!>-5~kp*nwNQ8>pnf%VLiSoMaC!sra2ba zCs(Z>?wl6~h6}Dc5?}8X<#4V8$V-p6y7Y=(->xRfk3Og+5jtH>c`?PF5cs@C1VHcS z#=(wxn{&3c>-9{_eO~le!Nj+>!r1f0CWgP|2VsY3*U^zc(Cmx^@$9m+p?5S{Ae9RD z9#scHs)f<(9+8o~zUY&Gd}YEJAO)7?NE9Tgf|fXVz>>{uGRnUQaKWiFYLMZ3id9E1 zZ2Ltq+U`mY;thztm8db(HR9anAhTpjdkc{Roh{W^(f*3QH&OwX9Js}{nl=<#Jue_z zj*pHl-6ls0?92_cTE?#y?D6W;!tkl+mf!~7=m&6vhl4udsYw6;0n-7WEp$u&h!pn( zNu3zS|DkOqWQVJ59h{PsFYb&~R=f9H9}5lv49{q}RfAZvlxl4e)Uj0G7X>jVWjw)lLJ zfEu>V2*L1QRA#vI&yd=}05J)KmDsfbS7>mCFH{Pu<^VHwE#_s%+xAXa-e7lL22y}K zpadX-2~&2zkdrEG74vEFqfdY)N?p?RVKC!e-~0pB-6hQ@Wt^6{^;rq|E+o6% z$xGw&44q#}_?(uD^JuA%NB_=396RP_#byPxG0Ocobn@177JPf7Ewfl#hb2k|FZ>#x zqIM&|kxL*MtbAjiN41f%^UdiT9YrarOI5QQ#RjTz88?M5!+0#6K`4(cA!u}m^qhzx z`}Or=2m)b}6QfJnUMlD^gs{tEhrTRdz5R?f645BGF$K8<)nN)8Q~OhYhajNFo!mR( z+gKY8Gj<=(K4y#*u|#NXLDijp`oJaRI8cT>jE>6>EQ*V6y^@)!;Q#;u+5w+0YD@oi zgu=gdz3MQa(3l9tk{mova|X(262nOX5u=k+_<`yjFP{F|Bt3a(+};Pv`4lSkj*vMg z`v>^(EI;CJ`l158P2!=*(%e%#$ANX(za9p->lL9)8gbz%A2-G)5Ggmd^R=lTbGY-M ztlE>|j+!c`gjyEPv6tdMovDg8;Tj4j+L5w_1d>zNF9QtWTf7M**O2n_#vZtkowbY^ zLImPyvpQYjwy+Ji(V_FQ5iH(TZ|ccH_NbWhp)Gfc@*9kUdGorZQpwV!<`6-4^9Z5B%Xb0BC}i4{^kn_!gt!0vBC3kevIx0U1ptFobiwM170rF}Le*7aR0$ z$@!P9tKbvi^ngsAdIjhiS80k-PJ8w!!tOcAit774_UKy^3|*Sn;OEwhxqdT*oQFwk z2XhfGn=?{+U+S_7zhQSdK}4&d(?d0mgM$@dIb0zNL2Q{!2%l^+uF(ppWtGp*BE(LBQthYBXlUC|I;YRGQffyMJJ}}2)m5<@s~$sdyr#p;e}M&* zwL;!v$FV!KJfO5D4A9KZmY-&@7il^4?~Wq8vfgkb-0kh)+}|9@YG}dNa|6S((vgIV zr_iEn;mEukj#u(U8ja21Vr}p9^@mWyXLAYYu@UyTYY$N|+9G*�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 z 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 None: + 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( + "--cache_dir", + type=str, + default=None, + help="The directory where the downloaded models and datasets will be stored.", + ) + + +def _get_dataset_args(parser: argparse.ArgumentParser) -> None: + parser.add_argument( + "--data_root", + type=str, + default=None, + help=("A folder containing the training data."), + ) + parser.add_argument( + "--dataset_file", + type=str, + default=None, + help=("Path to a CSV file if loading prompts/video paths using this format."), + ) + parser.add_argument( + "--video_column", + type=str, + default="video", + help="The column of the dataset containing videos. Or, the name of the file in `--data_root` folder containing the line-separated path to video data.", + ) + parser.add_argument( + "--caption_column", + type=str, + default="text", + help="The column of the dataset containing the instance prompt for each video. Or, the name of the file in `--data_root` folder containing the line-separated instance prompts.", + ) + parser.add_argument( + "--id_token", + type=str, + default=None, + help="Identifier token appended to the start of each prompt if provided.", + ) + parser.add_argument( + "--height_buckets", + nargs="+", + type=int, + default=[256, 320, 384, 480, 512, 576, 720, 768, 960, 1024, 1280, 1536], + ) + parser.add_argument( + "--width_buckets", + nargs="+", + type=int, + default=[256, 320, 384, 480, 512, 576, 720, 768, 960, 1024, 1280, 1536], + ) + parser.add_argument( + "--frame_buckets", + nargs="+", + type=int, + default=[49], + ) + parser.add_argument( + "--load_tensors", + action="store_true", + help="Whether to use a pre-encoded tensor dataset of latents and prompt embeddings instead of videos and text prompts. The expected format is that saved by running the `prepare_dataset.py` script.", + ) + parser.add_argument( + "--random_flip", + type=float, + default=None, + help="If random horizontal flip augmentation is to be used, this should be the flip probability.", + ) + 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.", + ) + + +def _get_validation_args(parser: argparse.ArgumentParser) -> None: + parser.add_argument( + "--validation_prompt", + type=str, + default=None, + help="One or more prompt(s) that is used during validation to verify that the model is learning. Multiple validation prompts should be separated by the '--validation_prompt_seperator' string.", + ) + parser.add_argument( + "--validation_prompt_separator", + type=str, + default=":::", + help="String that separates multiple validation prompts", + ) + parser.add_argument( + "--num_validation_videos", + type=int, + default=1, + help="Number of videos that should be generated during validation per `validation_prompt`.", + ) + parser.add_argument( + "--validation_epochs", + type=int, + default=50, + help="Run validation every X training steps. Validation consists of running the validation prompt `args.num_validation_videos` times.", + ) + parser.add_argument( + "--guidance_scale", + type=float, + default=6, + help="The guidance scale to use while sampling validation videos.", + ) + parser.add_argument( + "--use_dynamic_cfg", + action="store_true", + default=False, + help="Whether or not to use the default cosine dynamic guidance schedule when sampling validation videos.", + ) + + +def _get_training_args(parser: argparse.ArgumentParser) -> None: + parser.add_argument("--seed", type=int, default=None, help="A seed for reproducible training.") + parser.add_argument("--rank", type=int, default=64, help="The rank for LoRA matrices.") + parser.add_argument( + "--lora_alpha", + type=int, + default=64, + help="The lora_alpha to compute scaling factor (lora_alpha / rank) for LoRA matrices.", + ) + 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( + "--output_dir", + type=str, + default="cogvideox-sft", + help="The output directory where the model predictions and checkpoints will be written.", + ) + parser.add_argument( + "--height", + type=int, + default=480, + help="All input videos are resized to this height.", + ) + parser.add_argument( + "--width", + type=int, + default=720, + help="All input videos are resized to this width.", + ) + parser.add_argument("--fps", type=int, default=8, help="All input videos will be used at this FPS.") + parser.add_argument( + "--max_num_frames", + type=int, + default=49, + help="All input videos will be truncated to these many frames.", + ) + parser.add_argument( + "--skip_frames_start", + type=int, + default=0, + help="Number of frames to skip from the beginning of each input video. Useful if training data contains intro sequences.", + ) + parser.add_argument( + "--skip_frames_end", + type=int, + default=0, + help="Number of frames to skip from the end of each input video. Useful if training data contains outro sequences.", + ) + parser.add_argument( + "--train_batch_size", + type=int, + default=4, + help="Batch size (per device) for the training dataloader.", + ) + parser.add_argument("--num_train_epochs", type=int, default=1) + 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( + "--checkpointing_steps", + type=int, + default=500, + help=( + "Save a checkpoint of the training state every X updates. These checkpoints can be used both as final" + " checkpoints in case they are better than the last checkpoint, and are also 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( + "--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( + "--lr_num_cycles", + type=int, + default=1, + help="Number of hard resets of the lr in cosine_with_restarts scheduler.", + ) + parser.add_argument( + "--lr_power", + type=float, + default=1.0, + help="Power factor of the polynomial scheduler.", + ) + parser.add_argument( + "--enable_slicing", + action="store_true", + default=False, + help="Whether or not to use VAE slicing for saving memory.", + ) + parser.add_argument( + "--enable_tiling", + action="store_true", + default=False, + help="Whether or not to use VAE tiling for saving memory.", + ) + + +def _get_optimizer_args(parser: argparse.ArgumentParser) -> None: + parser.add_argument( + "--optimizer", + type=lambda s: s.lower(), + default="adam", + choices=["adam", "adamw", "prodigy"], + help=("The optimizer type to use."), + ) + parser.add_argument( + "--use_8bit", + action="store_true", + help="Whether or not to use 8-bit optimizers from `bitsandbytes`. Ignored if incompatible optimzer selected.", + ) + parser.add_argument( + "--beta1", + type=float, + default=0.9, + help="The beta1 parameter for the Adam and Prodigy optimizers.", + ) + parser.add_argument( + "--beta2", + type=float, + default=0.95, + help="The beta2 parameter for the Adam and Prodigy optimizers.", + ) + parser.add_argument( + "--beta3", + type=float, + default=None, + help="Coefficients for computing the Prodigy optimizer's stepsize using running averages. If set to None, uses the value of square root of beta2.", + ) + parser.add_argument( + "--prodigy_decouple", + action="store_true", + help="Use AdamW style decoupled weight decay.", + ) + parser.add_argument( + "--weight_decay", + type=float, + default=1e-04, + help="Weight decay to use for optimizer.", + ) + parser.add_argument( + "--epsilon", + type=float, + default=1e-8, + help="Epsilon value for the Adam optimizer and Prodigy optimizers.", + ) + parser.add_argument("--max_grad_norm", default=1.0, type=float, help="Max gradient norm.") + parser.add_argument( + "--prodigy_use_bias_correction", + action="store_true", + help="Turn on Adam's bias correction.", + ) + parser.add_argument( + "--prodigy_safeguard_warmup", + action="store_true", + help="Remove lr from the denominator of D estimate to avoid issues during warm-up stage.", + ) + + +def _get_configuration_args(parser: argparse.ArgumentParser) -> None: + parser.add_argument("--tracker_name", type=str, default=None, help="Project tracker name") + 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( + "--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="Directory where logs are stored.", + ) + 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( + "--nccl_timeout", + type=int, + default=600, + help="Maximum timeout duration before which allgather, or related, operations fail in multi-GPU/multi-node training settings.", + ) + parser.add_argument( + "--report_to", + type=str, + default=None, + 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.' + ), + ) + + +def get_args(): + parser = argparse.ArgumentParser(description="Simple example of a training script for CogVideoX.") + + _get_model_args(parser) + _get_dataset_args(parser) + _get_training_args(parser) + _get_validation_args(parser) + _get_optimizer_args(parser) + _get_configuration_args(parser) + + return parser.parse_args() diff --git a/training/cogvideox_text_to_video_lora.py b/training/cogvideox_text_to_video_lora.py new file mode 100644 index 0000000..9d52149 --- /dev/null +++ b/training/cogvideox_text_to_video_lora.py @@ -0,0 +1,910 @@ +# Copyright 2024 The HuggingFace 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 +# limitations under the License. + +import gc +import logging +import math +import os +import shutil +from datetime import timedelta +from pathlib import Path +from typing import Any, Dict + +import diffusers +import torch +import transformers +import wandb +from accelerate import Accelerator +from accelerate.logging import get_logger +from accelerate.utils import ( + DistributedDataParallelKwargs, + InitProcessGroupKwargs, + ProjectConfiguration, + set_seed, +) +from diffusers import ( + AutoencoderKLCogVideoX, + CogVideoXDPMScheduler, + CogVideoXPipeline, + CogVideoXTransformer3DModel, +) +from diffusers.models.autoencoders.vae import DiagonalGaussianDistribution +from diffusers.optimization import get_scheduler +from diffusers.training_utils import cast_training_params +from diffusers.utils import ( + convert_unet_state_dict_to_peft, + export_to_video, + is_wandb_available, +) +from diffusers.utils.hub_utils import load_or_create_model_card, populate_model_card +from diffusers.utils.torch_utils import is_compiled_module +from huggingface_hub import create_repo, upload_folder +from peft import LoraConfig, get_peft_model_state_dict, set_peft_model_state_dict +from torch.utils.data import DataLoader +from tqdm.auto import tqdm +from transformers import AutoTokenizer, T5EncoderModel + + +from args import get_args # isort:skip +from dataset import BucketSampler, VideoDatasetWithResizing # isort:skip +from text_encoder import compute_prompt_embeddings # isort:skip +from utils import get_gradient_norm, get_optimizer, prepare_rotary_positional_embeddings, print_memory, reset_memory # isort:skip + + +logger = get_logger(__name__) + + +def save_model_card( + repo_id: str, + videos=None, + base_model: str = None, + validation_prompt=None, + repo_folder=None, + fps=8, +): + widget_dict = [] + if videos is not None: + for i, video in enumerate(videos): + export_to_video(video, os.path.join(repo_folder, f"final_video_{i}.mp4", fps=fps)) + widget_dict.append( + { + "text": validation_prompt if validation_prompt else " ", + "output": {"url": f"video_{i}.mp4"}, + } + ) + + model_description = f""" +# CogVideoX LoRA - {repo_id} + + + +## Model description + +These are {repo_id} LoRA weights for {base_model}. + +The weights were trained using the [CogVideoX Diffusers trainer](https://github.com/huggingface/diffusers/blob/main/examples/cogvideo/train_cogvideox_lora.py). + +Was LoRA for the text encoder enabled? No. + +## Download model + +[Download the *.safetensors LoRA]({repo_id}/tree/main) in the Files & versions tab. + +## Use it with the [🧨 diffusers library](https://github.com/huggingface/diffusers) + +```py +from diffusers import CogVideoXPipeline +import torch + +pipe = CogVideoXPipeline.from_pretrained("THUDM/CogVideoX-5b", torch_dtype=torch.bfloat16).to("cuda") +pipe.load_lora_weights("{repo_id}", weight_name="pytorch_lora_weights.safetensors", adapter_name=["cogvideox-lora"]) + +# The LoRA adapter weights are determined by what was used for training. +# In this case, we assume `--lora_alpha` is 32 and `--rank` is 64. +# It can be made lower or higher from what was used in training to decrease or amplify the effect +# of the LoRA upto a tolerance, beyond which one might notice no effect at all or overflows. +pipe.set_adapters(["cogvideox-lora"], [32 / 64]) + +video = pipe("{validation_prompt}", guidance_scale=6, use_dynamic_cfg=True).frames[0] +``` + +For more details, including weighting, merging and fusing LoRAs, check the [documentation on loading LoRAs in diffusers](https://huggingface.co/docs/diffusers/main/en/using-diffusers/loading_adapters) + +## License + +Please adhere to the licensing terms as described [here](https://huggingface.co/THUDM/CogVideoX-5b/blob/main/LICENSE) and [here](https://huggingface.co/THUDM/CogVideoX-2b/blob/main/LICENSE). +""" + model_card = load_or_create_model_card( + repo_id_or_path=repo_id, + from_training=True, + license="other", + base_model=base_model, + prompt=validation_prompt, + model_description=model_description, + widget=widget_dict, + ) + tags = [ + "text-to-video", + "diffusers-training", + "diffusers", + "lora", + "cogvideox", + "cogvideox-diffusers", + "template:sd-lora", + ] + + model_card = populate_model_card(model_card, tags=tags) + model_card.save(os.path.join(repo_folder, "README.md")) + + +def log_validation( + accelerator: Accelerator, + pipe: CogVideoXPipeline, + args: Dict[str, Any], + pipeline_args: Dict[str, Any], + epoch, + is_final_validation: bool = False, +): + logger.info( + f"Running validation... \n Generating {args.num_validation_videos} videos with prompt: {pipeline_args['prompt']}." + ) + + pipe = pipe.to(accelerator.device) + + # run inference + generator = torch.Generator(device=accelerator.device).manual_seed(args.seed) if args.seed else None + + videos = [] + for _ in range(args.num_validation_videos): + video = pipe(**pipeline_args, generator=generator, output_type="np").frames[0] + videos.append(video) + + for tracker in accelerator.trackers: + phase_name = "test" if is_final_validation else "validation" + if tracker.name == "wandb": + video_filenames = [] + for i, video in enumerate(videos): + prompt = ( + pipeline_args["prompt"][:25] + .replace(" ", "_") + .replace(" ", "_") + .replace("'", "_") + .replace('"', "_") + .replace("/", "_") + ) + filename = os.path.join(args.output_dir, f"{phase_name}_video_{i}_{prompt}.mp4") + export_to_video(video, filename, fps=8) + video_filenames.append(filename) + + tracker.log( + { + phase_name: [ + wandb.Video(filename, caption=f"{i}: {pipeline_args['prompt']}") + for i, filename in enumerate(video_filenames) + ] + } + ) + + return videos + + +def main(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 torch.backends.mps.is_available() and args.mixed_precision == "bf16": + # due to pytorch#99272, MPS does not yet support bfloat16. + raise ValueError( + "Mixed precision training with bfloat16 is not supported on MPS. Please use fp16 (recommended) or fp32 instead." + ) + + logging_dir = Path(args.output_dir, args.logging_dir) + + accelerator_project_config = ProjectConfiguration(project_dir=args.output_dir, logging_dir=logging_dir) + ddp_kwargs = DistributedDataParallelKwargs(find_unused_parameters=True) + init_process_group_kwargs = InitProcessGroupKwargs(backend="nccl", timeout=timedelta(seconds=args.nccl_timeout)) + accelerator = Accelerator( + gradient_accumulation_steps=args.gradient_accumulation_steps, + mixed_precision=args.mixed_precision, + log_with=args.report_to, + project_config=accelerator_project_config, + kwargs_handlers=[ddp_kwargs, init_process_group_kwargs], + ) + + # Disable AMP for MPS. + if torch.backends.mps.is_available(): + accelerator.native_amp = False + + if args.report_to == "wandb": + if not is_wandb_available(): + raise ImportError("Make sure to install wandb if you want to use it for logging during training.") + + # 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: + transformers.utils.logging.set_verbosity_warning() + diffusers.utils.logging.set_verbosity_info() + else: + 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) + + # Handle the repository creation + if accelerator.is_main_process: + if args.output_dir is not None: + os.makedirs(args.output_dir, exist_ok=True) + + if args.push_to_hub: + repo_id = create_repo( + repo_id=args.hub_model_id or Path(args.output_dir).name, + exist_ok=True, + ).repo_id + + # Prepare models and scheduler + tokenizer = AutoTokenizer.from_pretrained( + args.pretrained_model_name_or_path, + subfolder="tokenizer", + revision=args.revision, + ) + + text_encoder = T5EncoderModel.from_pretrained( + args.pretrained_model_name_or_path, + subfolder="text_encoder", + revision=args.revision, + ) + + # CogVideoX-2b weights are stored in float16 + # CogVideoX-5b and CogVideoX-5b-I2V weights are stored in bfloat16 + load_dtype = torch.bfloat16 if "5b" in args.pretrained_model_name_or_path.lower() else torch.float16 + transformer = CogVideoXTransformer3DModel.from_pretrained( + args.pretrained_model_name_or_path, + subfolder="transformer", + torch_dtype=load_dtype, + revision=args.revision, + variant=args.variant, + ) + + vae = AutoencoderKLCogVideoX.from_pretrained( + args.pretrained_model_name_or_path, + subfolder="vae", + revision=args.revision, + variant=args.variant, + ) + + scheduler = CogVideoXDPMScheduler.from_pretrained(args.pretrained_model_name_or_path, subfolder="scheduler") + + if args.enable_slicing: + vae.enable_slicing() + if args.enable_tiling: + vae.enable_tiling() + + # We only train the additional adapter LoRA layers + text_encoder.requires_grad_(False) + transformer.requires_grad_(False) + vae.requires_grad_(False) + + VAE_SCALING_FACTOR = vae.config.scaling_factor + VAE_SCALE_FACTOR_SPATIAL = 2 ** (len(vae.config.block_out_channels) - 1) + + # For mixed precision training we cast all non-trainable weights (vae, text_encoder and transformer) 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.state.deepspeed_plugin: + # DeepSpeed is handling precision, use what's in the DeepSpeed config + if ( + "fp16" in accelerator.state.deepspeed_plugin.deepspeed_config + and accelerator.state.deepspeed_plugin.deepspeed_config["fp16"]["enabled"] + ): + weight_dtype = torch.float16 + if ( + "bf16" in accelerator.state.deepspeed_plugin.deepspeed_config + and accelerator.state.deepspeed_plugin.deepspeed_config["bf16"]["enabled"] + ): + weight_dtype = torch.float16 + else: + if accelerator.mixed_precision == "fp16": + weight_dtype = torch.float16 + elif accelerator.mixed_precision == "bf16": + weight_dtype = torch.bfloat16 + + if torch.backends.mps.is_available() and weight_dtype == torch.bfloat16: + # due to pytorch#99272, MPS does not yet support bfloat16. + raise ValueError( + "Mixed precision training with bfloat16 is not supported on MPS. Please use fp16 (recommended) or fp32 instead." + ) + + text_encoder.to(accelerator.device, dtype=weight_dtype) + transformer.to(accelerator.device, dtype=weight_dtype) + vae.to(accelerator.device, dtype=weight_dtype) + + if args.gradient_checkpointing: + transformer.enable_gradient_checkpointing() + + # now we will add new LoRA weights to the attention layers + transformer_lora_config = LoraConfig( + r=args.rank, + lora_alpha=args.lora_alpha, + init_lora_weights=True, + target_modules=["to_k", "to_q", "to_v", "to_out.0"], + ) + transformer.add_adapter(transformer_lora_config) + + def unwrap_model(model): + model = accelerator.unwrap_model(model) + model = model._orig_mod if is_compiled_module(model) else model + return model + + # create custom saving & loading hooks so that `accelerator.save_state(...)` serializes in a nice format + def save_model_hook(models, weights, output_dir): + if accelerator.is_main_process: + transformer_lora_layers_to_save = None + + for model in models: + if isinstance(model, type(unwrap_model(transformer))): + transformer_lora_layers_to_save = get_peft_model_state_dict(model) + else: + raise ValueError(f"unexpected save model: {model.__class__}") + + # make sure to pop weight so that corresponding model is not saved again + weights.pop() + + CogVideoXPipeline.save_lora_weights( + output_dir, + transformer_lora_layers=transformer_lora_layers_to_save, + ) + + def load_model_hook(models, input_dir): + transformer_ = None + + while len(models) > 0: + model = models.pop() + + if isinstance(model, type(unwrap_model(transformer))): + transformer_ = model + else: + raise ValueError(f"Unexpected save model: {model.__class__}") + + lora_state_dict = CogVideoXPipeline.lora_state_dict(input_dir) + + transformer_state_dict = { + f'{k.replace("transformer.", "")}': v for k, v in lora_state_dict.items() if k.startswith("transformer.") + } + transformer_state_dict = convert_unet_state_dict_to_peft(transformer_state_dict) + incompatible_keys = set_peft_model_state_dict(transformer_, transformer_state_dict, adapter_name="default") + if incompatible_keys is not None: + # check only for unexpected keys + unexpected_keys = getattr(incompatible_keys, "unexpected_keys", None) + if unexpected_keys: + logger.warning( + f"Loading adapter weights from state_dict led to unexpected keys not found in the model: " + f" {unexpected_keys}. " + ) + + # Make sure the trainable params are in float32. This is again needed since the base models + # are in `weight_dtype`. More details: + # https://github.com/huggingface/diffusers/pull/6514#discussion_r1449796804 + if args.mixed_precision == "fp16": + # only upcast trainable parameters (LoRA) into fp32 + cast_training_params([transformer_]) + + accelerator.register_save_state_pre_hook(save_model_hook) + accelerator.register_load_state_pre_hook(load_model_hook) + + # 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 and torch.cuda.is_available(): + 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 + ) + + # Make sure the trainable params are in float32. + if args.mixed_precision == "fp16": + # only upcast trainable parameters (LoRA) into fp32 + cast_training_params([transformer], dtype=torch.float32) + + transformer_lora_parameters = list(filter(lambda p: p.requires_grad, transformer.parameters())) + + # Optimization parameters + transformer_parameters_with_lr = { + "params": transformer_lora_parameters, + "lr": args.learning_rate, + } + params_to_optimize = [transformer_parameters_with_lr] + + use_deepspeed_optimizer = ( + accelerator.state.deepspeed_plugin is not None + and "optimizer" in accelerator.state.deepspeed_plugin.deepspeed_config + ) + use_deepspeed_scheduler = ( + accelerator.state.deepspeed_plugin is not None + and "scheduler" not in accelerator.state.deepspeed_plugin.deepspeed_config + ) + + optimizer = get_optimizer( + params_to_optimize=params_to_optimize, + optimizer_name=args.optimizer, + learning_rate=args.learning_rate, + beta1=args.beta1, + beta2=args.beta2, + beta3=args.beta3, + epsilon=args.epsilon, + weight_decay=args.weight_decay, + prodigy_decouple=args.prodigy_decouple, + prodigy_use_bias_correction=args.prodigy_use_bias_correction, + prodigy_safeguard_warmup=args.prodigy_safeguard_warmup, + use_8bit=args.use_8bit, + use_deepspeed=use_deepspeed_optimizer, + ) + + # Dataset and DataLoader + train_dataset = VideoDatasetWithResizing( + data_root=args.data_root, + dataset_file=args.dataset_file, + caption_column=args.caption_column, + video_column=args.video_column, + max_num_frames=args.max_num_frames, + id_token=args.id_token, + height_buckets=args.height_buckets, + width_buckets=args.width_buckets, + frame_buckets=args.frame_buckets, + load_tensors=args.load_tensors, + random_flip=args.random_flip, + ) + + def collate_fn_without_pre_encoding(data): + prompts = [x["prompt"] for x in data[0]] + + videos = [x["video"] for x in data[0]] + videos = torch.stack(videos) + videos = videos.to(accelerator.device, dtype=weight_dtype) + videos = videos.permute(0, 2, 1, 3, 4) # [B, C, F, H, W] + latent_dist = vae.encode(videos).latent_dist + videos = latent_dist.sample() * VAE_SCALING_FACTOR + videos = videos.permute(0, 2, 1, 3, 4) # [B, F, C, H, W] + videos = videos.to(memory_format=torch.contiguous_format).float() + + return { + "videos": videos, + "prompts": prompts, + } + + def collate_fn_with_pre_encoding(data): + prompts = [x["prompt"] for x in data[0]] + prompts = torch.stack(prompts).to(accelerator.device, dtype=weight_dtype) + + videos = [x["video"] for x in data[0]] + videos = torch.stack(videos).to(accelerator.device, dtype=weight_dtype) + videos = DiagonalGaussianDistribution(videos).sample() * VAE_SCALING_FACTOR + videos = videos.permute(0, 2, 1, 3, 4) # [B, F, C, H, W] + videos = videos.to(memory_format=torch.contiguous_format).float() + + return { + "videos": videos, + "prompts": prompts, + } + + train_dataloader = DataLoader( + train_dataset, + batch_size=1, + sampler=BucketSampler(train_dataset, batch_size=args.train_batch_size, shuffle=True), + collate_fn=collate_fn_with_pre_encoding if args.load_tensors else collate_fn_without_pre_encoding, + num_workers=args.dataloader_num_workers, + ) + + # Scheduler and math around the number of training steps. + overrode_max_train_steps = False + num_update_steps_per_epoch = math.ceil(len(train_dataset) / 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 + + if use_deepspeed_scheduler: + from accelerate.utils import DummyScheduler + + lr_scheduler = DummyScheduler( + name=args.lr_scheduler, + optimizer=optimizer, + total_num_steps=args.max_train_steps * accelerator.num_processes, + num_warmup_steps=args.lr_warmup_steps * accelerator.num_processes, + ) + else: + 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, + num_cycles=args.lr_num_cycles, + power=args.lr_power, + ) + + # Prepare everything with our `accelerator`. + transformer, optimizer, train_dataloader, lr_scheduler = accelerator.prepare( + transformer, optimizer, train_dataloader, lr_scheduler + ) + + # 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_dataset) / 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_name = args.tracker_name or "cogvideox-lora" + accelerator.init_trackers(tracker_name, config=vars(args)) + + accelerator.print("===== Memory before training =====") + reset_memory(accelerator.device) + print_memory(accelerator.device) + + # Train! + total_batch_size = args.train_batch_size * accelerator.num_processes * args.gradient_accumulation_steps + num_trainable_parameters = sum(param.numel() for model in params_to_optimize for param in model["params"]) + + accelerator.print("***** Running training *****") + accelerator.print(f" Num trainable parameters = {num_trainable_parameters}") + accelerator.print(f" Num examples = {len(train_dataset)}") + accelerator.print(f" Num epochs = {args.num_train_epochs}") + accelerator.print(f" Instantaneous batch size per device = {args.train_batch_size}") + accelerator.print(f" Total train batch size (w. parallel, distributed & accumulation) = {total_batch_size}") + accelerator.print(f" Gradient accumulation steps = {args.gradient_accumulation_steps}") + accelerator.print(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 not args.resume_from_checkpoint: + initial_global_step = 0 + else: + if args.resume_from_checkpoint != "latest": + path = os.path.basename(args.resume_from_checkpoint) + else: + # Get the mos 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: + accelerator.print(f"Resuming from checkpoint {path}") + accelerator.load_state(os.path.join(args.output_dir, path)) + global_step = int(path.split("-")[1]) + + initial_global_step = global_step + first_epoch = global_step // num_update_steps_per_epoch + + 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, + ) + + # For DeepSpeed training + model_config = transformer.module.config if hasattr(transformer, "module") else transformer.config + + if args.load_tensors: + del vae, text_encoder + gc.collect() + torch.cuda.empty_cache() + torch.cuda.synchronize(accelerator.device) + + for epoch in range(first_epoch, args.num_train_epochs): + transformer.train() + + for step, batch in enumerate(train_dataloader): + models_to_accumulate = [transformer] + + with accelerator.accumulate(models_to_accumulate): + model_input = batch["videos"] + prompts = batch["prompts"] + + # Encode prompts + if not args.load_tensors: + prompt_embeds = compute_prompt_embeddings( + tokenizer, + text_encoder, + prompts, + model_config.max_text_seq_length, + accelerator.device, + weight_dtype, + requires_grad=False, + ) + else: + prompt_embeds = prompts + + # Sample noise that will be added to the latents + noise = torch.randn_like(model_input) + batch_size, num_frames, num_channels, height, width = model_input.shape + + # Sample a random timestep for each image + timesteps = torch.randint( + 0, + scheduler.config.num_train_timesteps, + (batch_size,), + dtype=torch.int64, + device=model_input.device, + ) + + # Prepare rotary embeds + image_rotary_emb = ( + prepare_rotary_positional_embeddings( + height=height * VAE_SCALE_FACTOR_SPATIAL, + width=width * VAE_SCALE_FACTOR_SPATIAL, + num_frames=num_frames, + vae_scale_factor_spatial=VAE_SCALE_FACTOR_SPATIAL, + patch_size=model_config.patch_size, + attention_head_dim=model_config.attention_head_dim, + device=accelerator.device, + ) + if model_config.use_rotary_positional_embeddings + else None + ) + + # Add noise to the model input according to the noise magnitude at each timestep + # (this is the forward diffusion process) + noisy_model_input = scheduler.add_noise(model_input, noise, timesteps) + + # Predict the noise residual + model_output = transformer( + hidden_states=noisy_model_input, + encoder_hidden_states=prompt_embeds, + timestep=timesteps, + image_rotary_emb=image_rotary_emb, + return_dict=False, + )[0] + + model_pred = scheduler.get_velocity(model_output, noisy_model_input, timesteps) + + alphas_cumprod = scheduler.alphas_cumprod[timesteps] + weights = 1 / (1 - alphas_cumprod) + while len(weights.shape) < len(model_pred.shape): + weights = weights.unsqueeze(-1) + + target = model_input + + loss = torch.mean( + (weights * (model_pred - target) ** 2).reshape(batch_size, -1), + dim=1, + ) + loss = loss.mean() + accelerator.backward(loss) + + if accelerator.sync_gradients: + gradient_norm_before_clip = get_gradient_norm(transformer.parameters()) + accelerator.clip_grad_norm_(transformer.parameters(), args.max_grad_norm) + gradient_norm_after_clip = get_gradient_norm(transformer.parameters()) + + if accelerator.state.deepspeed_plugin is None: + optimizer.step() + optimizer.zero_grad() + + lr_scheduler.step() + + # Checks if the accelerator has performed an optimization step behind the scenes + if accelerator.sync_gradients: + progress_bar.update(1) + global_step += 1 + + if accelerator.is_main_process: + if global_step % args.checkpointing_steps == 0: + # _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) + + save_path = os.path.join(args.output_dir, f"checkpoint-{global_step}") + accelerator.save_state(save_path) + logger.info(f"Saved state to {save_path}") + + logs = { + "loss": loss.detach().item(), + "lr": lr_scheduler.get_last_lr()[0], + "gradient_norm_before_clip": gradient_norm_before_clip, + "gradient_norm_after_clip": gradient_norm_after_clip, + } + progress_bar.set_postfix(**logs) + accelerator.log(logs, step=global_step) + + if global_step >= args.max_train_steps: + break + + if accelerator.is_main_process: + if args.validation_prompt is not None and (epoch + 1) % args.validation_epochs == 0: + accelerator.print("===== Memory before validation =====") + print_memory(accelerator.device) + torch.cuda.synchronize(accelerator.device) + + pipe = CogVideoXPipeline.from_pretrained( + args.pretrained_model_name_or_path, + transformer=unwrap_model(transformer), + scheduler=scheduler, + revision=args.revision, + variant=args.variant, + torch_dtype=weight_dtype, + ) + + if args.enable_slicing: + pipe.vae.enable_slicing() + if args.enable_tiling: + pipe.vae.enable_tiling() + + validation_prompts = args.validation_prompt.split(args.validation_prompt_separator) + for validation_prompt in validation_prompts: + pipeline_args = { + "prompt": validation_prompt, + "guidance_scale": args.guidance_scale, + "use_dynamic_cfg": args.use_dynamic_cfg, + "height": args.height, + "width": args.width, + } + + log_validation( + pipe=pipe, + args=args, + accelerator=accelerator, + pipeline_args=pipeline_args, + epoch=epoch, + ) + + accelerator.print("===== Memory after validation =====") + print_memory(accelerator.device) + reset_memory(accelerator.device) + + del pipe + gc.collect() + torch.cuda.empty_cache() + torch.cuda.synchronize(accelerator.device) + + accelerator.wait_for_everyone() + + if accelerator.is_main_process: + transformer = unwrap_model(transformer) + dtype = ( + torch.float16 + if args.mixed_precision == "fp16" + else torch.bfloat16 + if args.mixed_precision == "bf16" + else torch.float32 + ) + transformer = transformer.to(dtype) + transformer_lora_layers = get_peft_model_state_dict(transformer) + + CogVideoXPipeline.save_lora_weights( + save_directory=args.output_dir, + transformer_lora_layers=transformer_lora_layers, + ) + + # Cleanup trained models to save memory + if args.load_tensors: + del transformer + else: + del transformer, text_encoder, vae + + gc.collect() + torch.cuda.empty_cache() + torch.cuda.synchronize(accelerator.device) + + accelerator.print("===== Memory before testing =====") + print_memory(accelerator.device) + reset_memory(accelerator.device) + + # Final test inference + pipe = CogVideoXPipeline.from_pretrained( + args.pretrained_model_name_or_path, + revision=args.revision, + variant=args.variant, + torch_dtype=weight_dtype, + ) + pipe.scheduler = CogVideoXDPMScheduler.from_config(pipe.scheduler.config) + + if args.enable_slicing: + pipe.vae.enable_slicing() + if args.enable_tiling: + pipe.vae.enable_tiling() + + # Load LoRA weights + lora_scaling = args.lora_alpha / args.rank + pipe.load_lora_weights(args.output_dir, adapter_name="cogvideox-lora") + pipe.set_adapters(["cogvideox-lora"], [lora_scaling]) + + # Run inference + validation_outputs = [] + if args.validation_prompt and args.num_validation_videos > 0: + validation_prompts = args.validation_prompt.split(args.validation_prompt_separator) + for validation_prompt in validation_prompts: + pipeline_args = { + "prompt": validation_prompt, + "guidance_scale": args.guidance_scale, + "use_dynamic_cfg": args.use_dynamic_cfg, + "height": args.height, + "width": args.width, + } + + video = log_validation( + accelerator=accelerator, + pipe=pipe, + args=args, + pipeline_args=pipeline_args, + epoch=epoch, + is_final_validation=True, + ) + validation_outputs.extend(video) + + accelerator.print("===== Memory after testing =====") + print_memory(accelerator.device) + reset_memory(accelerator.device) + torch.cuda.synchronize(accelerator.device) + + if args.push_to_hub: + save_model_card( + repo_id, + videos=validation_outputs, + base_model=args.pretrained_model_name_or_path, + validation_prompt=args.validation_prompt, + repo_folder=args.output_dir, + fps=args.fps, + ) + upload_folder( + repo_id=repo_id, + folder_path=args.output_dir, + commit_message="End of training", + ignore_patterns=["step_*", "epoch_*"], + ) + + accelerator.end_training() + + +if __name__ == "__main__": + args = get_args() + main(args) diff --git a/training/cogvideox_text_to_video_sft.py b/training/cogvideox_text_to_video_sft.py new file mode 100644 index 0000000..c2a9d8b --- /dev/null +++ b/training/cogvideox_text_to_video_sft.py @@ -0,0 +1,833 @@ +# Copyright 2024 The HuggingFace 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 +# limitations under the License. + +import gc +import logging +import math +import os +import shutil +from datetime import timedelta +from pathlib import Path +from typing import Any, Dict + +import diffusers +import torch +import transformers +import wandb +from accelerate import Accelerator +from accelerate.logging import get_logger +from accelerate.utils import ( + DistributedDataParallelKwargs, + InitProcessGroupKwargs, + ProjectConfiguration, + set_seed, +) +from diffusers import ( + AutoencoderKLCogVideoX, + CogVideoXDPMScheduler, + CogVideoXPipeline, + CogVideoXTransformer3DModel, +) +from diffusers.models.autoencoders.vae import DiagonalGaussianDistribution +from diffusers.optimization import get_scheduler +from diffusers.training_utils import cast_training_params +from diffusers.utils import export_to_video, is_wandb_available +from diffusers.utils.hub_utils import load_or_create_model_card, populate_model_card +from diffusers.utils.torch_utils import is_compiled_module +from huggingface_hub import create_repo, upload_folder +from torch.utils.data import DataLoader +from tqdm.auto import tqdm +from transformers import AutoTokenizer, T5EncoderModel + + +from args import get_args # isort:skip +from dataset import BucketSampler, VideoDatasetWithResizing # isort:skip +from text_encoder import compute_prompt_embeddings # isort:skip +from utils import get_gradient_norm, get_optimizer, prepare_rotary_positional_embeddings, print_memory, reset_memory # isort:skip + + +logger = get_logger(__name__) + + +def save_model_card( + repo_id: str, + videos=None, + base_model: str = None, + validation_prompt=None, + repo_folder=None, + fps=8, +): + widget_dict = [] + if videos is not None: + for i, video in enumerate(videos): + export_to_video(video, os.path.join(repo_folder, f"final_video_{i}.mp4", fps=fps)) + widget_dict.append( + { + "text": validation_prompt if validation_prompt else " ", + "output": {"url": f"video_{i}.mp4"}, + } + ) + + model_description = """TODO""" + model_card = load_or_create_model_card( + repo_id_or_path=repo_id, + from_training=True, + license="other", + base_model=base_model, + prompt=validation_prompt, + model_description=model_description, + widget=widget_dict, + ) + tags = [ + "text-to-video", + "diffusers-training", + "diffusers", + "cogvideox", + "cogvideox-diffusers", + ] + + model_card = populate_model_card(model_card, tags=tags) + model_card.save(os.path.join(repo_folder, "README.md")) + + +def log_validation( + accelerator: Accelerator, + pipe: CogVideoXPipeline, + args: Dict[str, Any], + pipeline_args: Dict[str, Any], + epoch, + is_final_validation: bool = False, +): + logger.info( + f"Running validation... \n Generating {args.num_validation_videos} videos with prompt: {pipeline_args['prompt']}." + ) + + pipe = pipe.to(accelerator.device) + + # run inference + generator = torch.Generator(device=accelerator.device).manual_seed(args.seed) if args.seed else None + + videos = [] + for _ in range(args.num_validation_videos): + video = pipe(**pipeline_args, generator=generator, output_type="np").frames[0] + videos.append(video) + + for tracker in accelerator.trackers: + phase_name = "test" if is_final_validation else "validation" + if tracker.name == "wandb": + video_filenames = [] + for i, video in enumerate(videos): + prompt = ( + pipeline_args["prompt"][:25] + .replace(" ", "_") + .replace(" ", "_") + .replace("'", "_") + .replace('"', "_") + .replace("/", "_") + ) + filename = os.path.join(args.output_dir, f"{phase_name}_video_{i}_{prompt}.mp4") + export_to_video(video, filename, fps=8) + video_filenames.append(filename) + + tracker.log( + { + phase_name: [ + wandb.Video(filename, caption=f"{i}: {pipeline_args['prompt']}") + for i, filename in enumerate(video_filenames) + ] + } + ) + + return videos + + +def main(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 torch.backends.mps.is_available() and args.mixed_precision == "bf16": + # due to pytorch#99272, MPS does not yet support bfloat16. + raise ValueError( + "Mixed precision training with bfloat16 is not supported on MPS. Please use fp16 (recommended) or fp32 instead." + ) + + logging_dir = Path(args.output_dir, args.logging_dir) + + accelerator_project_config = ProjectConfiguration(project_dir=args.output_dir, logging_dir=logging_dir) + ddp_kwargs = DistributedDataParallelKwargs(find_unused_parameters=True) + init_process_group_kwargs = InitProcessGroupKwargs(backend="nccl", timeout=timedelta(seconds=args.nccl_timeout)) + accelerator = Accelerator( + gradient_accumulation_steps=args.gradient_accumulation_steps, + mixed_precision=args.mixed_precision, + log_with=args.report_to, + project_config=accelerator_project_config, + kwargs_handlers=[ddp_kwargs, init_process_group_kwargs], + ) + + # Disable AMP for MPS. + if torch.backends.mps.is_available(): + accelerator.native_amp = False + + if args.report_to == "wandb": + if not is_wandb_available(): + raise ImportError("Make sure to install wandb if you want to use it for logging during training.") + + # 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: + transformers.utils.logging.set_verbosity_warning() + diffusers.utils.logging.set_verbosity_info() + else: + 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) + + # Handle the repository creation + if accelerator.is_main_process: + if args.output_dir is not None: + os.makedirs(args.output_dir, exist_ok=True) + + if args.push_to_hub: + repo_id = create_repo( + repo_id=args.hub_model_id or Path(args.output_dir).name, + exist_ok=True, + ).repo_id + + # Prepare models and scheduler + tokenizer = AutoTokenizer.from_pretrained( + args.pretrained_model_name_or_path, + subfolder="tokenizer", + revision=args.revision, + ) + + text_encoder = T5EncoderModel.from_pretrained( + args.pretrained_model_name_or_path, + subfolder="text_encoder", + revision=args.revision, + ) + + # CogVideoX-2b weights are stored in float16 + # CogVideoX-5b and CogVideoX-5b-I2V weights are stored in bfloat16 + load_dtype = torch.bfloat16 if "5b" in args.pretrained_model_name_or_path.lower() else torch.float16 + transformer = CogVideoXTransformer3DModel.from_pretrained( + args.pretrained_model_name_or_path, + subfolder="transformer", + torch_dtype=load_dtype, + revision=args.revision, + variant=args.variant, + ) + + vae = AutoencoderKLCogVideoX.from_pretrained( + args.pretrained_model_name_or_path, + subfolder="vae", + revision=args.revision, + variant=args.variant, + ) + + scheduler = CogVideoXDPMScheduler.from_pretrained(args.pretrained_model_name_or_path, subfolder="scheduler") + + if args.enable_slicing: + vae.enable_slicing() + if args.enable_tiling: + vae.enable_tiling() + + text_encoder.requires_grad_(False) + vae.requires_grad_(False) + transformer.requires_grad_(True) + + VAE_SCALING_FACTOR = vae.config.scaling_factor + VAE_SCALE_FACTOR_SPATIAL = 2 ** (len(vae.config.block_out_channels) - 1) + + # For mixed precision training we cast all non-trainable weights (vae, text_encoder and transformer) 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.state.deepspeed_plugin: + # DeepSpeed is handling precision, use what's in the DeepSpeed config + if ( + "fp16" in accelerator.state.deepspeed_plugin.deepspeed_config + and accelerator.state.deepspeed_plugin.deepspeed_config["fp16"]["enabled"] + ): + weight_dtype = torch.float16 + if ( + "bf16" in accelerator.state.deepspeed_plugin.deepspeed_config + and accelerator.state.deepspeed_plugin.deepspeed_config["bf16"]["enabled"] + ): + weight_dtype = torch.float16 + else: + if accelerator.mixed_precision == "fp16": + weight_dtype = torch.float16 + elif accelerator.mixed_precision == "bf16": + weight_dtype = torch.bfloat16 + + if torch.backends.mps.is_available() and weight_dtype == torch.bfloat16: + # due to pytorch#99272, MPS does not yet support bfloat16. + raise ValueError( + "Mixed precision training with bfloat16 is not supported on MPS. Please use fp16 (recommended) or fp32 instead." + ) + + text_encoder.to(accelerator.device, dtype=weight_dtype) + transformer.to(accelerator.device, dtype=weight_dtype) + vae.to(accelerator.device, dtype=weight_dtype) + + if args.gradient_checkpointing: + transformer.enable_gradient_checkpointing() + + def unwrap_model(model): + model = accelerator.unwrap_model(model) + model = model._orig_mod if is_compiled_module(model) else model + return model + + # create custom saving & loading hooks so that `accelerator.save_state(...)` serializes in a nice format + def save_model_hook(models, weights, output_dir): + if accelerator.is_main_process: + for model in models: + if isinstance(model, type(unwrap_model(transformer))): + model: CogVideoXTransformer3DModel + model.save_pretrained( + os.path.join(output_dir, "transformer"), safe_serialization=True, max_shard_size="5GB" + ) + else: + raise ValueError(f"Unexpected save model: {model.__class__}") + + # make sure to pop weight so that corresponding model is not saved again + weights.pop() + + def load_model_hook(models, input_dir): + transformer_ = None + + while len(models) > 0: + model = models.pop() + + if isinstance(model, type(unwrap_model(transformer))): + transformer_: CogVideoXTransformer3DModel = model + else: + raise ValueError(f"Unexpected save model: {model.__class__.__name__}") + + load_model = CogVideoXTransformer3DModel.from_pretrained(os.path.join(input_dir, "transformer")) + transformer_.register_to_config(**load_model.config) + transformer_.load_state_dict(load_model.state_dict()) + del load_model + + # Make sure the trainable params are in float32. This is again needed since the base models + # are in `weight_dtype`. More details: + # https://github.com/huggingface/diffusers/pull/6514#discussion_r1449796804 + if args.mixed_precision == "fp16": + cast_training_params([transformer_]) + + accelerator.register_save_state_pre_hook(save_model_hook) + accelerator.register_load_state_pre_hook(load_model_hook) + + # 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 and torch.cuda.is_available(): + 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 + ) + + # Make sure the trainable params are in float32. + if args.mixed_precision == "fp16": + # only upcast trainable parameters (LoRA) into fp32 + cast_training_params([transformer], dtype=torch.float32) + + transformer_parameters = list(filter(lambda p: p.requires_grad, transformer.parameters())) + + # Optimization parameters + transformer_parameters_with_lr = { + "params": transformer_parameters, + "lr": args.learning_rate, + } + params_to_optimize = [transformer_parameters_with_lr] + + use_deepspeed_optimizer = ( + accelerator.state.deepspeed_plugin is not None + and "optimizer" in accelerator.state.deepspeed_plugin.deepspeed_config + ) + use_deepspeed_scheduler = ( + accelerator.state.deepspeed_plugin is not None + and "scheduler" not in accelerator.state.deepspeed_plugin.deepspeed_config + ) + + optimizer = get_optimizer( + params_to_optimize=params_to_optimize, + optimizer_name=args.optimizer, + learning_rate=args.learning_rate, + beta1=args.beta1, + beta2=args.beta2, + beta3=args.beta3, + epsilon=args.epsilon, + weight_decay=args.weight_decay, + prodigy_decouple=args.prodigy_decouple, + prodigy_use_bias_correction=args.prodigy_use_bias_correction, + prodigy_safeguard_warmup=args.prodigy_safeguard_warmup, + use_8bit=args.use_8bit, + use_deepspeed=use_deepspeed_optimizer, + ) + + # Dataset and DataLoader + train_dataset = VideoDatasetWithResizing( + data_root=args.data_root, + dataset_file=args.dataset_file, + caption_column=args.caption_column, + video_column=args.video_column, + max_num_frames=args.max_num_frames, + id_token=args.id_token, + height_buckets=args.height_buckets, + width_buckets=args.width_buckets, + frame_buckets=args.frame_buckets, + load_tensors=args.load_tensors, + random_flip=args.random_flip, + ) + + def collate_fn_without_pre_encoding(data): + prompts = [x["prompt"] for x in data[0]] + + videos = [x["video"] for x in data[0]] + videos = torch.stack(videos) + videos = videos.to(accelerator.device, dtype=weight_dtype) + videos = videos.permute(0, 2, 1, 3, 4) # [B, C, F, H, W] + latent_dist = vae.encode(videos).latent_dist + videos = latent_dist.sample() * VAE_SCALING_FACTOR + videos = videos.permute(0, 2, 1, 3, 4) # [B, F, C, H, W] + videos = videos.to(memory_format=torch.contiguous_format).float() + + return { + "videos": videos, + "prompts": prompts, + } + + def collate_fn_with_pre_encoding(data): + prompts = [x["prompt"] for x in data[0]] + prompts = torch.stack(prompts).to(accelerator.device, dtype=weight_dtype) + + videos = [x["video"] for x in data[0]] + videos = torch.stack(videos).to(accelerator.device, dtype=weight_dtype) + videos = DiagonalGaussianDistribution(videos).sample() * VAE_SCALING_FACTOR + videos = videos.permute(0, 2, 1, 3, 4) # [B, F, C, H, W] + videos = videos.to(memory_format=torch.contiguous_format).float() + + return { + "videos": videos, + "prompts": prompts, + } + + train_dataloader = DataLoader( + train_dataset, + batch_size=1, + sampler=BucketSampler(train_dataset, batch_size=args.train_batch_size, shuffle=True), + collate_fn=collate_fn_with_pre_encoding if args.load_tensors else collate_fn_without_pre_encoding, + num_workers=args.dataloader_num_workers, + ) + + # Scheduler and math around the number of training steps. + overrode_max_train_steps = False + num_update_steps_per_epoch = math.ceil(len(train_dataset) / 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 + + if use_deepspeed_scheduler: + from accelerate.utils import DummyScheduler + + lr_scheduler = DummyScheduler( + name=args.lr_scheduler, + optimizer=optimizer, + total_num_steps=args.max_train_steps * accelerator.num_processes, + num_warmup_steps=args.lr_warmup_steps * accelerator.num_processes, + ) + else: + 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, + num_cycles=args.lr_num_cycles, + power=args.lr_power, + ) + + # Prepare everything with our `accelerator`. + transformer, optimizer, train_dataloader, lr_scheduler = accelerator.prepare( + transformer, optimizer, train_dataloader, lr_scheduler + ) + + # 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_dataset) / 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_name = args.tracker_name or "cogvideox-sft" + accelerator.init_trackers(tracker_name, config=vars(args)) + + accelerator.print("===== Memory before training =====") + reset_memory(accelerator.device) + print_memory(accelerator.device) + + # Train! + total_batch_size = args.train_batch_size * accelerator.num_processes * args.gradient_accumulation_steps + num_trainable_parameters = sum(param.numel() for model in params_to_optimize for param in model["params"]) + + accelerator.print("***** Running training *****") + accelerator.print(f" Num trainable parameters = {num_trainable_parameters}") + accelerator.print(f" Num examples = {len(train_dataset)}") + accelerator.print(f" Num epochs = {args.num_train_epochs}") + accelerator.print(f" Instantaneous batch size per device = {args.train_batch_size}") + accelerator.print(f" Total train batch size (w. parallel, distributed & accumulation) = {total_batch_size}") + accelerator.print(f" Gradient accumulation steps = {args.gradient_accumulation_steps}") + accelerator.print(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 not args.resume_from_checkpoint: + initial_global_step = 0 + else: + if args.resume_from_checkpoint != "latest": + path = os.path.basename(args.resume_from_checkpoint) + else: + # Get the mos 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: + accelerator.print(f"Resuming from checkpoint {path}") + accelerator.load_state(os.path.join(args.output_dir, path)) + global_step = int(path.split("-")[1]) + + initial_global_step = global_step + first_epoch = global_step // num_update_steps_per_epoch + + 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, + ) + + # For DeepSpeed training + model_config = transformer.module.config if hasattr(transformer, "module") else transformer.config + + if args.load_tensors: + del vae, text_encoder + gc.collect() + torch.cuda.empty_cache() + torch.cuda.synchronize(accelerator.device) + + for epoch in range(first_epoch, args.num_train_epochs): + transformer.train() + + for step, batch in enumerate(train_dataloader): + models_to_accumulate = [transformer] + + with accelerator.accumulate(models_to_accumulate): + model_input = batch["videos"] + prompts = batch["prompts"] + + # Encode prompts + if not args.load_tensors: + prompt_embeds = compute_prompt_embeddings( + tokenizer, + text_encoder, + prompts, + model_config.max_text_seq_length, + accelerator.device, + weight_dtype, + requires_grad=False, + ) + else: + prompt_embeds = prompts + + # Sample noise that will be added to the latents + noise = torch.randn_like(model_input) + batch_size, num_frames, num_channels, height, width = model_input.shape + + # Sample a random timestep for each image + timesteps = torch.randint( + 0, + scheduler.config.num_train_timesteps, + (batch_size,), + dtype=torch.int64, + device=model_input.device, + ) + + # Prepare rotary embeds + image_rotary_emb = ( + prepare_rotary_positional_embeddings( + height=height * VAE_SCALE_FACTOR_SPATIAL, + width=width * VAE_SCALE_FACTOR_SPATIAL, + num_frames=num_frames, + vae_scale_factor_spatial=VAE_SCALE_FACTOR_SPATIAL, + patch_size=model_config.patch_size, + attention_head_dim=model_config.attention_head_dim, + device=accelerator.device, + ) + if model_config.use_rotary_positional_embeddings + else None + ) + + # Add noise to the model input according to the noise magnitude at each timestep + # (this is the forward diffusion process) + noisy_model_input = scheduler.add_noise(model_input, noise, timesteps) + + # Predict the noise residual + model_output = transformer( + hidden_states=noisy_model_input, + encoder_hidden_states=prompt_embeds, + timestep=timesteps, + image_rotary_emb=image_rotary_emb, + return_dict=False, + )[0] + + model_pred = scheduler.get_velocity(model_output, noisy_model_input, timesteps) + + alphas_cumprod = scheduler.alphas_cumprod[timesteps] + weights = 1 / (1 - alphas_cumprod) + while len(weights.shape) < len(model_pred.shape): + weights = weights.unsqueeze(-1) + + target = model_input + + loss = torch.mean( + (weights * (model_pred - target) ** 2).reshape(batch_size, -1), + dim=1, + ) + loss = loss.mean() + accelerator.backward(loss) + + if accelerator.sync_gradients: + gradient_norm_before_clip = get_gradient_norm(transformer.parameters()) + accelerator.clip_grad_norm_(transformer.parameters(), args.max_grad_norm) + gradient_norm_after_clip = get_gradient_norm(transformer.parameters()) + + if accelerator.state.deepspeed_plugin is None: + optimizer.step() + optimizer.zero_grad() + + lr_scheduler.step() + + # Checks if the accelerator has performed an optimization step behind the scenes + if accelerator.sync_gradients: + progress_bar.update(1) + global_step += 1 + + if accelerator.is_main_process: + if global_step % args.checkpointing_steps == 0: + # _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) + + save_path = os.path.join(args.output_dir, f"checkpoint-{global_step}") + accelerator.save_state(save_path) + logger.info(f"Saved state to {save_path}") + + logs = { + "loss": loss.detach().item(), + "lr": lr_scheduler.get_last_lr()[0], + "gradient_norm_before_clip": gradient_norm_before_clip, + "gradient_norm_after_clip": gradient_norm_after_clip, + } + progress_bar.set_postfix(**logs) + accelerator.log(logs, step=global_step) + + if global_step >= args.max_train_steps: + break + + if accelerator.is_main_process: + if args.validation_prompt is not None and (epoch + 1) % args.validation_epochs == 0: + accelerator.print("===== Memory before validation =====") + print_memory(accelerator.device) + torch.cuda.synchronize(accelerator.device) + + pipe = CogVideoXPipeline.from_pretrained( + args.pretrained_model_name_or_path, + transformer=unwrap_model(transformer), + scheduler=scheduler, + revision=args.revision, + variant=args.variant, + torch_dtype=weight_dtype, + ) + + if args.enable_slicing: + pipe.vae.enable_slicing() + if args.enable_tiling: + pipe.vae.enable_tiling() + + validation_prompts = args.validation_prompt.split(args.validation_prompt_separator) + for validation_prompt in validation_prompts: + pipeline_args = { + "prompt": validation_prompt, + "guidance_scale": args.guidance_scale, + "use_dynamic_cfg": args.use_dynamic_cfg, + "height": args.height, + "width": args.width, + } + + log_validation( + accelerator=accelerator, + pipe=pipe, + args=args, + pipeline_args=pipeline_args, + epoch=epoch, + is_final_validation=False, + ) + + accelerator.print("===== Memory after validation =====") + print_memory(accelerator.device) + reset_memory(accelerator.device) + + del pipe + gc.collect() + torch.cuda.empty_cache() + torch.cuda.synchronize(accelerator.device) + + accelerator.wait_for_everyone() + + if accelerator.is_main_process: + transformer = unwrap_model(transformer) + dtype = ( + torch.float16 + if args.mixed_precision == "fp16" + else torch.bfloat16 + if args.mixed_precision == "bf16" + else torch.float32 + ) + transformer = transformer.to(dtype) + + transformer.save_pretrained( + os.path.join(args.output_dir, "transformer"), + safe_serialization=True, + max_shard_size="5GB", + ) + + # Cleanup trained models to save memory + if args.load_tensors: + del transformer + else: + del transformer, text_encoder, vae + + gc.collect() + torch.cuda.empty_cache() + torch.cuda.synchronize(accelerator.device) + + accelerator.print("===== Memory before testing =====") + print_memory(accelerator.device) + reset_memory(accelerator.device) + + # Final test inference + pipe = CogVideoXPipeline.from_pretrained( + args.pretrained_model_name_or_path, + revision=args.revision, + variant=args.variant, + torch_dtype=weight_dtype, + ) + pipe.scheduler = CogVideoXDPMScheduler.from_config(pipe.scheduler.config) + + if args.enable_slicing: + pipe.vae.enable_slicing() + if args.enable_tiling: + pipe.vae.enable_tiling() + + # Run inference + validation_outputs = [] + if args.validation_prompt and args.num_validation_videos > 0: + validation_prompts = args.validation_prompt.split(args.validation_prompt_separator) + for validation_prompt in validation_prompts: + pipeline_args = { + "prompt": validation_prompt, + "guidance_scale": args.guidance_scale, + "use_dynamic_cfg": args.use_dynamic_cfg, + "height": args.height, + "width": args.width, + } + + video = log_validation( + accelerator=accelerator, + pipe=pipe, + args=args, + pipeline_args=pipeline_args, + epoch=epoch, + is_final_validation=True, + ) + validation_outputs.extend(video) + + accelerator.print("===== Memory after testing =====") + print_memory(accelerator.device) + reset_memory(accelerator.device) + torch.cuda.synchronize(accelerator.device) + + if args.push_to_hub: + save_model_card( + repo_id, + videos=validation_outputs, + base_model=args.pretrained_model_name_or_path, + validation_prompt=args.validation_prompt, + repo_folder=args.output_dir, + fps=args.fps, + ) + upload_folder( + repo_id=repo_id, + folder_path=args.output_dir, + commit_message="End of training", + ignore_patterns=["step_*", "epoch_*"], + ) + + accelerator.end_training() + + +if __name__ == "__main__": + args = get_args() + main(args) diff --git a/training/dataset.py b/training/dataset.py new file mode 100644 index 0000000..fe125c9 --- /dev/null +++ b/training/dataset.py @@ -0,0 +1,289 @@ +import random +from pathlib import Path +from typing import Any, Dict, List, Optional, Tuple + +import pandas as pd +import torch +from accelerate.logging import get_logger +from torch.utils.data import Dataset, Sampler +from torchvision import transforms +from torchvision.transforms.functional import resize + + +# Must import after torch because this can sometimes lead to a nasty segmentation fault, or stack smashing error +# Very few bug reports but it happens. Look in decord Github issues for more relevant information. +import decord # isort:skip + +decord.bridge.set_bridge("torch") + +logger = get_logger(__name__) + +HEIGHT_BUCKETS = [256, 320, 384, 480, 512, 576, 720, 768, 960, 1024, 1280, 1536] +WIDTH_BUCKETS = [256, 320, 384, 480, 512, 576, 720, 768, 960, 1024, 1280, 1536] +FRAME_BUCKETS = [16, 24, 32, 48, 64, 80] + + +class VideoDataset(Dataset): + def __init__( + self, + data_root: str, + dataset_file: Optional[str] = None, + caption_column: str = "text", + video_column: str = "video", + max_num_frames: int = 49, + id_token: Optional[str] = None, + height_buckets: List[int] = None, + width_buckets: List[int] = None, + frame_buckets: List[int] = None, + load_tensors: bool = False, + random_flip: Optional[float] = None, + ) -> None: + super().__init__() + + self.data_root = Path(data_root) + self.dataset_file = dataset_file + self.caption_column = caption_column + self.video_column = video_column + self.max_num_frames = max_num_frames + self.id_token = id_token or "" + self.height_buckets = height_buckets or HEIGHT_BUCKETS + self.width_buckets = width_buckets or WIDTH_BUCKETS + self.frame_buckets = frame_buckets or FRAME_BUCKETS + self.load_tensors = load_tensors + self.random_flip = random_flip + + self.resolutions = [ + (f, h, w) for h in self.height_buckets for w in self.width_buckets for f in self.frame_buckets + ] + + # Two methods of loading data are supported. + # - Using a CSV: caption_column and video_column must be some column in the CSV. One could + # make use of other columns too, such as a motion score or aesthetic score, by modifying the + # logic in CSV processing. + # - Using two files containing line-separate captions and relative paths to videos. + # For a more detailed explanation about preparing dataset format, checkout the README. + if dataset_file is None: + ( + self.prompts, + self.video_paths, + ) = self._load_dataset_from_local_path() + else: + ( + self.prompts, + self.video_paths, + ) = self._load_dataset_from_csv() + + self.num_videos = len(self.video_paths) + if self.num_videos != len(self.prompts): + raise ValueError( + f"Expected length of prompts and videos to be the same but found {len(self.prompts)=} and {len(self.video_paths)=}. Please ensure that the number of caption prompts and videos match in your dataset." + ) + + self.video_transforms = transforms.Compose( + [ + transforms.RandomHorizontalFlip(random_flip) if random_flip else transforms.Lambda(lambda x: x), + transforms.Lambda(lambda x: x / 255.0), + transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5], inplace=True), + ] + ) + + def __len__(self) -> int: + return self.num_videos + + def __getitem__(self, index: int) -> Dict[str, Any]: + if isinstance(index, list): + # Here, index is actually a list of data objects that we need to return. + # The BucketSampler should ideally return indices. But, in the sampler, we'd like + # to have information about num_frames, height and width. Since this is not stored + # as metadata, we need to read the video to get this information. You could read this + # information without loading the full video in memory, but we do it anyway. In order + # to not load the video twice (once to get the metadata, and once to return the loaded video + # based on sampled indices), we cache it in the BucketSampler. When the sampler is + # to yield, we yield the cache data instead of indices. So, this special check ensures + # that data is not loaded a second time. PRs are welcome for improvements. + return index + + if self.load_tensors: + latents, prompt_embeds = self._preprocess_video(self.video_paths[index]) + + # This is hardcoded for now. + # The VAE's temporal compression ratio is 4. + # The VAE's spatial compression ratio is 8. + latent_num_frames = latents.size(1) + if latent_num_frames % 2 == 0: + num_frames = latent_num_frames * 4 + else: + num_frames = (latent_num_frames - 1) * 4 + 1 + + height = latents.size(2) * 8 + width = latents.size(3) * 8 + + return { + "prompt": prompt_embeds, + "video": latents, + "video_metadata": { + "num_frames": num_frames, + "height": height, + "width": width, + }, + } + else: + video, _ = self._preprocess_video(self.video_paths[index]) + + return { + "prompt": self.id_token + self.prompts[index], + "video": video, + "video_metadata": { + "num_frames": video.shape[0], + "height": video.shape[2], + "width": video.shape[3], + }, + } + + def _load_dataset_from_local_path(self) -> Tuple[List[str], List[str]]: + if not self.data_root.exists(): + raise ValueError("Root folder for videos does not exist") + + prompt_path = self.data_root.joinpath(self.caption_column) + video_path = self.data_root.joinpath(self.video_column) + + if not prompt_path.exists() or not prompt_path.is_file(): + raise ValueError( + "Expected `--caption_column` to be path to a file in `--data_root` containing line-separated text prompts." + ) + if not video_path.exists() or not video_path.is_file(): + raise ValueError( + "Expected `--video_column` to be path to a file in `--data_root` containing line-separated paths to video data in the same directory." + ) + + with open(prompt_path, "r", encoding="utf-8") as file: + prompts = [line.strip() for line in file.readlines() if len(line.strip()) > 0] + with open(video_path, "r", encoding="utf-8") as file: + video_paths = [self.data_root.joinpath(line.strip()) for line in file.readlines() if len(line.strip()) > 0] + + if not self.load_tensors and any(not path.is_file() for path in video_paths): + raise ValueError( + f"Expected `{self.video_column=}` to be a path to a file in `{self.data_root=}` containing line-separated paths to video data but found atleast one path that is not a valid file." + ) + + return prompts, video_paths + + def _load_dataset_from_csv(self) -> Tuple[List[str], List[str]]: + df = pd.read_csv(self.dataset_file) + prompts = df[self.caption_column].tolist() + video_paths = df[self.video_column].tolist() + video_paths = [self.data_root.joinpath(line.strip()) for line in video_paths] + + if any(not path.is_file() for path in video_paths): + raise ValueError( + f"Expected `{self.video_column=}` to be a path to a file in `{self.data_root=}` containing line-separated paths to video data but found atleast one path that is not a valid file." + ) + + return prompts, video_paths + + def _preprocess_video(self, path: Path) -> Tuple[torch.Tensor, Optional[torch.Tensor]]: + r""" + Loads a single video, or latent and prompt embedding, based on initialization parameters. + + If returning a video, returns a [F, C, H, W] video tensor, and None for the prompt embedding. Here, + F, C, H and W are the frames, channels, height and width of the input video. + + If returning latent/embedding, returns a [F, C, H, W] latent, and the prompt embedding of shape [S, D]. + F, C, H and W are the frames, channels, height and width of the latent, and S, D are the sequence length + and embedding dimension of prompt embeddings. + """ + if self.load_tensors: + return self._load_preprocessed_latents_and_embeds(path) + else: + video_reader = decord.VideoReader(uri=path.as_posix()) + video_num_frames = len(video_reader) + + indices = list(range(0, video_num_frames, video_num_frames // self.max_num_frames)) + frames = video_reader.get_batch(indices) + frames = frames[: self.max_num_frames].float() + frames = frames.permute(0, 3, 1, 2).contiguous() + frames = torch.stack([self.video_transforms(frame) for frame in frames], dim=0) + + return frames, None + + def _load_preprocessed_latents_and_embeds(self, path: Path) -> Tuple[torch.Tensor, torch.Tensor]: + filename_without_ext = path.name.split(".")[0] + pt_filename = f"{filename_without_ext}.pt" + + # The current path is something like: /a/b/c/d/videos/00001.mp4 + # We need to reach: /a/b/c/d/latents/00001.pt + latents_path = path.parent.parent.joinpath("latents") + embeds_path = path.parent.parent.joinpath("embeddings") + + if not latents_path.exists() or not embeds_path.exists(): + raise ValueError( + f"When setting the load_tensors parameter to `True`, it is expected that the `{self.data_root=}` contains two folders named `latents` and `embeddings`. However, these folders were not found. Please make sure to have prepared your data correctly using `prepare_data.py`." + ) + + latent_filepath = latents_path.joinpath(pt_filename) + embeds_filepath = embeds_path.joinpath(pt_filename) + + if not latent_filepath.is_file() or not embeds_filepath.is_file(): + latent_filepath = latent_filepath.as_posix() + embeds_filepath = embeds_filepath.as_posix() + raise ValueError( + f"The file {latent_filepath=} or {embeds_filepath=} could not be found. Please ensure that you've correctly executed `prepare_dataset.py`." + ) + + latents = torch.load(latent_filepath, map_location="cpu", weights_only=True) + embeds = torch.load(embeds_filepath, map_location="cpu", weights_only=True) + + return latents, embeds + + +class VideoDatasetWithResizing(VideoDataset): + def __init__(self, *args, **kwargs) -> None: + super().__init__(*args, **kwargs) + + def _preprocess_video(self, path: Path) -> torch.Tensor: + if self.load_tensors: + return self._load_preprocessed_latents_and_embeds(path) + else: + video_reader = decord.VideoReader(uri=path.as_posix()) + video_num_frames = len(video_reader) + nearest_frame_bucket = min( + self.frame_buckets, key=lambda x: abs(x - min(video_num_frames, self.max_num_frames)) + ) + + frame_indices = list(range(0, video_num_frames, video_num_frames // nearest_frame_bucket)) + + frames = video_reader.get_batch(frame_indices) + frames = frames[:nearest_frame_bucket].float() + frames = frames.permute(0, 3, 1, 2).contiguous() + + nearest_res = self._find_nearest_resolution(frames.shape[2], frames.shape[3]) + frames_resized = torch.stack([resize(frame, nearest_res) for frame in frames], dim=0) + + frames = torch.stack([self.video_transforms(frame) for frame in frames_resized], dim=0) + return frames, None + + def _find_nearest_resolution(self, height, width): + nearest_res = min(self.resolutions, key=lambda x: abs(x[1] - height) + abs(x[2] - width)) + return nearest_res[1], nearest_res[2] + + +class BucketSampler(Sampler): + def __init__(self, data_source: VideoDataset, batch_size: int = 8, shuffle: bool = True) -> None: + self.data_source = data_source + self.batch_size = batch_size + self.shuffle = shuffle + + self.buckets = {resolution: [] for resolution in data_source.resolutions} + + def __iter__(self): + for index, data in enumerate(self.data_source): + video_metadata = data["video_metadata"] + f, h, w = video_metadata["num_frames"], video_metadata["height"], video_metadata["width"] + + self.buckets[(f, h, w)].append(data) + if len(self.buckets[(f, h, w)]) == self.batch_size: + if self.shuffle: + random.shuffle(self.buckets[(f, h, w)]) + yield self.buckets[(f, h, w)] + del self.buckets[(f, h, w)] + self.buckets[(f, h, w)] = [] diff --git a/training/prepare_dataset.py b/training/prepare_dataset.py new file mode 100644 index 0000000..9d70884 --- /dev/null +++ b/training/prepare_dataset.py @@ -0,0 +1,458 @@ +#!/usr/bin/env python3 + +# For folder structure dataset: python3 prepare_dataset.py --model_id THUDM/CogVideoX-2b --data_root /raid/aryan/video-dataset-disney/ --caption_column prompts.txt --video_column videos.txt --output_dir dump --height 480 --width 720 --max_num_frames 49 --max_sequence_length 226 --target_fps 8 --batch_size 1 --dtype fp32 +# For latent/embed structure dataset: python3 prepare_dataset.py --model_id THUDM/CogVideoX-2b --data_root /raid/aryan/video-dataset-disney/ --caption_column prompts.txt --video_column videos.txt --output_dir dump --height 480 --width 720 --max_num_frames 49 --max_sequence_length 226 --target_fps 8 --batch_size 1 --dtype fp32 --save_tensors + +import argparse +import gc +import pathlib +import traceback +from typing import Any, Dict, List, Optional, Tuple, Union + +import pandas as pd +import torch +from diffusers import AutoencoderKLCogVideoX +from diffusers.utils import export_to_video, get_logger +from torchvision import transforms +from transformers import T5EncoderModel, T5Tokenizer + + +# Must import after importing torch, otherwise there's a nasty segfault when loading text_encoder/vae +import decord # isort:skip + +decord.bridge.set_bridge("torch") + +logger = get_logger(__name__) + +DTYPE_MAPPING = { + "fp32": torch.float32, + "fp16": torch.float16, + "bf16": torch.bfloat16, +} + + +def get_args() -> Dict[str, Any]: + parser = argparse.ArgumentParser() + parser.add_argument( + "--model_id", + type=str, + default="THUDM/CogVideoX-2b", + help="Hugging Face model ID to use for tokenizer, text encoder and VAE.", + ) + parser.add_argument("--data_root", type=str, required=True, help="Path to where training data is located.") + parser.add_argument( + "--dataset_file", type=str, default=None, help="Path to CSV file containing metadata about training data." + ) + parser.add_argument( + "--caption_column", + type=str, + default="caption", + help="If using a CSV file via the `--dataset_file` argument, this should be the name of the column containing the captions. If using the folder structure format for data loading, this should be the name of the file containing line-separated captions (the file should be located in `--data_root`).", + ) + parser.add_argument( + "--video_column", + type=str, + default="video", + help="If using a CSV file via the `--dataset_file` argument, this should be the name of the column containing the video paths. If using the folder structure format for data loading, this should be the name of the file containing line-separated video paths (the file should be located in `--data_root`).", + ) + parser.add_argument( + "--output_dir", + type=str, + required=True, + help="Path to output directory where preprocessed videos/latents/embeddings will be saved.", + ) + parser.add_argument("--height", type=int, default=480, help="Height of the resized output video.") + parser.add_argument("--width", type=int, default=720, help="Width of the resized output video.") + parser.add_argument("--max_num_frames", type=int, default=49, help="Maximum number of frames in output video.") + parser.add_argument( + "--max_sequence_length", type=int, default=226, help="Max sequence length of prompt embeddings." + ) + parser.add_argument( + "--target_fps", type=int, default=8, help="Frame rate of output videos if `--save_tensors` is unspecified." + ) + parser.add_argument( + "--save_tensors", + action="store_true", + help="Whether to encode videos/captions to latents/embeddings and save them in pytorch serializable format.", + ) + parser.add_argument( + "--use_slicing", + action="store_true", + help="Whether to enable sliced encoding/decoding in the VAE. Only used if `--save_tensors` is also used.", + ) + parser.add_argument( + "--use_tiling", + action="store_true", + help="Whether to enable tiled encoding/decoding in the VAE. Only used if `--save_tensors` is also used.", + ) + parser.add_argument("--batch_size", type=int, default=1, help="Number of videos to process at once in the VAE.") + parser.add_argument( + "--num_decode_threads", + type=int, + default=0, + help="Number of decoding threads for `decord` to use. The default `0` means to automatically determine required number of threads.", + ) + parser.add_argument( + "--dtype", + type=str, + choices=["fp32", "fp16", "bf16"], + default="fp32", + help="Data type to use when generating latents and prompt embeddings.", + ) + return parser.parse_args() + + +def load_dataset_from_local_path( + data_root: pathlib.Path, caption_column: str, video_column: str +) -> Tuple[List[str], List[str]]: + if not data_root.exists(): + raise ValueError("Root folder for videos does not exist") + + prompt_path = data_root.joinpath(caption_column) + video_path = data_root.joinpath(video_column) + + if not prompt_path.exists() or not prompt_path.is_file(): + raise ValueError( + "Expected `--caption_column` to be path to a file in `--data_root` containing line-separated text prompts." + ) + if not video_path.exists() or not video_path.is_file(): + raise ValueError( + "Expected `--video_column` to be path to a file in `--data_root` containing line-separated paths to video data in the same directory." + ) + + with open(prompt_path, "r", encoding="utf-8") as file: + prompts = [line.strip() for line in file.readlines() if len(line.strip()) > 0] + with open(video_path, "r", encoding="utf-8") as file: + video_paths = [data_root.joinpath(line.strip()) for line in file.readlines() if len(line.strip()) > 0] + + if any(not path.is_file() for path in video_paths): + raise ValueError( + f"Expected `{video_column=}` to be a path to a file in `{data_root=}` containing line-separated paths to video data but found atleast one path that is not a valid file." + ) + + return prompts, video_paths + + +def load_dataset_from_csv( + data_root: pathlib.Path, dataset_file: pathlib.Path, caption_column: str, video_column: str +) -> Tuple[List[str], List[str]]: + df = pd.read_csv(dataset_file) + prompts = df[caption_column].tolist() + video_paths = df[video_column].tolist() + video_paths = [data_root.joinpath(line.strip()) for line in video_paths] + + if any(not path.is_file() for path in video_paths): + raise ValueError( + f"Expected `{video_column=}` to be a path to a file in `{data_root=}` containing line-separated paths to video data but found atleast one path that is not a valid file." + ) + + return prompts, video_paths + + +def load_and_preprocess_video( + path: pathlib.Path, height: int, width: int, max_num_frames: int, video_transforms, num_threads: int = 0 +) -> torch.Tensor: + frames = None + + try: + video_reader = decord.VideoReader(uri=path.as_posix(), height=height, width=width, num_threads=num_threads) + video_num_frames = len(video_reader) + + if video_num_frames < max_num_frames: + logger.warning( + f"Video at `{path.as_posix()}` should have atleast `{max_num_frames=}`, but got only `{video_num_frames=}`. Skipping it." + ) + return + + indices = list(range(0, video_num_frames, video_num_frames // max_num_frames)) + frames: torch.Tensor = video_reader.get_batch(indices) + frames = frames[:max_num_frames].float() + frames = frames.permute(0, 3, 1, 2).contiguous() + frames = torch.stack([video_transforms(frame) for frame in frames], dim=0) + except Exception as e: + logger.error(f"Error: {e}. Skipping video located at `{path.as_posix()}`") + traceback.print_exc() + + return frames + + +def _get_t5_prompt_embeds( + tokenizer: T5Tokenizer, + text_encoder: T5EncoderModel, + prompt: Union[str, List[str]], + num_videos_per_prompt: int = 1, + max_sequence_length: int = 226, + device: Optional[torch.device] = None, + dtype: Optional[torch.dtype] = None, + text_input_ids=None, +): + prompt = [prompt] if isinstance(prompt, str) else prompt + batch_size = len(prompt) + + if tokenizer is not None: + text_inputs = 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 + else: + if text_input_ids is None: + raise ValueError("`text_input_ids` must be provided when the tokenizer is not specified.") + + prompt_embeds = text_encoder(text_input_ids.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 prompt_embeds + + +def encode_prompt( + tokenizer: T5Tokenizer, + text_encoder: T5EncoderModel, + prompt: Union[str, List[str]], + num_videos_per_prompt: int = 1, + max_sequence_length: int = 226, + device: Optional[torch.device] = None, + dtype: Optional[torch.dtype] = None, + text_input_ids=None, +): + prompt = [prompt] if isinstance(prompt, str) else prompt + prompt_embeds = _get_t5_prompt_embeds( + tokenizer, + text_encoder, + prompt=prompt, + num_videos_per_prompt=num_videos_per_prompt, + max_sequence_length=max_sequence_length, + device=device, + dtype=dtype, + text_input_ids=text_input_ids, + ) + return prompt_embeds + + +def compute_prompt_embeddings( + tokenizer: T5Tokenizer, + text_encoder: T5EncoderModel, + prompt: str, + max_sequence_length: int, + device: torch.device, + dtype: torch.dtype, + requires_grad: bool = False, +): + if requires_grad: + prompt_embeds = encode_prompt( + tokenizer, + text_encoder, + prompt, + num_videos_per_prompt=1, + max_sequence_length=max_sequence_length, + device=device, + dtype=dtype, + ) + else: + with torch.no_grad(): + prompt_embeds = encode_prompt( + tokenizer, + text_encoder, + prompt, + num_videos_per_prompt=1, + max_sequence_length=max_sequence_length, + device=device, + dtype=dtype, + ) + return prompt_embeds + + +def save_videos( + videos: torch.Tensor, video_paths: List[str], prompts: List[str], output_dir: pathlib.Path, target_fps: int = 8 +) -> None: + assert videos.size(0) == len(video_paths) + + videos = (videos + 1) / 2 + videos = (videos * 255.0).clip(0, 255) + videos = videos.to(dtype=torch.uint8) + + video_dir = output_dir.joinpath("videos") + + output_dir.mkdir(parents=True, exist_ok=True) + video_dir.mkdir(parents=True, exist_ok=True) + + to_pil_image = transforms.ToPILImage() + videos_pil = [[to_pil_image(frame) for frame in video] for video in videos] + + for video, video_path in zip(videos_pil, video_paths): + filename = video_dir.joinpath(pathlib.Path(video_path).name) + logger.debug(f"Saving video to `{filename}`") + export_to_video(video, filename.as_posix(), fps=target_fps) + + with open(output_dir.joinpath("videos.txt").as_posix(), "w", encoding="utf-8") as file: + for video_path in video_paths: + file.write(f"videos/{pathlib.Path(video_path).name}\n") + + with open(output_dir.joinpath("prompts.txt").as_posix(), "w", encoding="utf-8") as file: + for prompt in prompts: + file.write(f"{prompt}\n") + + +def save_latents_and_embeddings( + latents: torch.Tensor, + prompt_embeds: torch.Tensor, + video_paths: List[str], + prompts: List[str], + output_dir: pathlib.Path, +) -> None: + assert latents.size(0) == prompt_embeds.size(0) + assert latents.size(0) == len(video_paths) + assert prompt_embeds.size(0) == len(prompts) + + latents_dir = output_dir.joinpath("latents") + embeds_dir = output_dir.joinpath("embeddings") + + output_dir.mkdir(parents=True, exist_ok=True) + latents_dir.mkdir(parents=True, exist_ok=True) + embeds_dir.mkdir(parents=True, exist_ok=True) + + for latent, embed, video_path in zip(latents, prompt_embeds, video_paths): + # Need to perform the clone, otherwise the entire `latents` or `prompt_embeds` tensor is + # saved for every single video/prompt embedding. This is due to us viewing a slice of a + # large tensor when iteratively saving stuff here. + latent = latent.clone() + embed = embed.clone() + + video_path = pathlib.Path(video_path) + filename_without_ext = video_path.name.split(".")[0] + + latent_filename = latents_dir.joinpath(filename_without_ext) + embed_filename = embeds_dir.joinpath(filename_without_ext) + + latent_filename = f"{latent_filename}.pt" + embed_filename = f"{embed_filename}.pt" + + torch.save(latent, latent_filename) + torch.save(embed, embed_filename) + + with open(output_dir.joinpath("videos.txt").as_posix(), "w", encoding="utf-8") as file: + for video_path in video_paths: + file.write(f"videos/{pathlib.Path(video_path).name}\n") + + with open(output_dir.joinpath("prompts.txt").as_posix(), "w", encoding="utf-8") as file: + for prompt in prompts: + file.write(f"{prompt}\n") + + +@torch.no_grad() +def main(args: Dict[str, Any]) -> None: + data_root = pathlib.Path(args.data_root) + dataset_file = None + if args.dataset_file: + dataset_file = pathlib.Path(args.dataset_file) + + if dataset_file is None: + prompts, video_paths = load_dataset_from_local_path(data_root, args.caption_column, args.video_column) + else: + prompts, video_paths = load_dataset_from_csv(data_root, dataset_file, args.caption_column, args.video_column) + + video_transforms = transforms.Compose( + [ + transforms.Lambda(lambda x: x / 255.0), + transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5], inplace=True), + ] + ) + + prompts_usable = [] + video_paths_usable = [] + videos = [] + for prompt, path in zip(prompts, video_paths): + video = load_and_preprocess_video( + path, args.height, args.width, args.max_num_frames, video_transforms, args.num_decode_threads + ) + if video is not None: + prompts_usable.append(prompt) + video_paths_usable.append(path) + videos.append(video) + videos = torch.stack(videos) + + if not args.save_tensors: + save_videos(videos, video_paths_usable, prompts_usable, pathlib.Path(args.output_dir), args.target_fps) + else: + dtype = DTYPE_MAPPING[args.dtype] + tokenizer = T5Tokenizer.from_pretrained(args.model_id, subfolder="tokenizer") + text_encoder = T5EncoderModel.from_pretrained(args.model_id, subfolder="text_encoder", torch_dtype=dtype) + text_encoder = text_encoder.to("cuda") + + prompt_embeds_list = [] + for start_index in range(0, len(prompts_usable), args.batch_size): + end_index = min(len(prompts_usable), start_index + args.batch_size) + batch_prompts = prompts_usable[start_index:end_index] + + prompt_embeds = compute_prompt_embeddings( + tokenizer, + text_encoder, + batch_prompts, + max_sequence_length=args.max_sequence_length, + device="cuda", + dtype=dtype, + ) + prompt_embeds_list.append(prompt_embeds) + + prompt_embeds = torch.cat(prompt_embeds_list).to("cpu") + + del tokenizer, text_encoder + gc.collect() + torch.cuda.empty_cache() + torch.cuda.synchronize("cuda") + + vae = AutoencoderKLCogVideoX.from_pretrained(args.model_id, subfolder="vae", torch_dtype=dtype) + vae = vae.to("cuda") + + if args.use_slicing: + vae.enable_slicing() + if args.use_tiling: + vae.enable_tiling() + + encoded_videos = [] + for start_index in range(0, len(video_paths_usable), args.batch_size): + end_index = min(len(video_paths_usable), start_index + args.batch_size) + batch_videos = videos[start_index:end_index] + + batch_videos = batch_videos.to("cuda") + batch_videos = batch_videos.permute(0, 2, 1, 3, 4) # [B, C, F, H, W] + + if args.use_slicing: + encoded_slices = [vae._encode(video_slice) for video_slice in batch_videos.split(1)] + encoded_video = torch.cat(encoded_slices) + else: + encoded_video = vae._encode(batch_videos) + + encoded_videos.append(encoded_video) + + encoded_videos = torch.cat(encoded_videos).to("cpu") + + del vae + gc.collect() + torch.cuda.empty_cache() + torch.cuda.synchronize("cuda") + + save_latents_and_embeddings( + encoded_videos, prompt_embeds, video_paths_usable, prompts_usable, pathlib.Path(args.output_dir) + ) + + +if __name__ == "__main__": + args = get_args() + + assert args.height % 16 == 0, "CogVideoX requires input video height to be divisible by 16." + assert args.width % 16 == 0, "CogVideoX requires input video width to be divisible by 16." + assert ( + args.max_num_frames % 4 == 0 or args.max_num_frames % 4 == 1 + ), "`--max_num_frames` must be of form 4 * k or 4 * k + 1 to be compatible with VAE." + + main(args) diff --git a/training/text_encoder/__init__.py b/training/text_encoder/__init__.py new file mode 100644 index 0000000..09f9e8c --- /dev/null +++ b/training/text_encoder/__init__.py @@ -0,0 +1 @@ +from .text_encoder import compute_prompt_embeddings diff --git a/training/text_encoder/text_encoder.py b/training/text_encoder/text_encoder.py new file mode 100644 index 0000000..9237875 --- /dev/null +++ b/training/text_encoder/text_encoder.py @@ -0,0 +1,99 @@ +from typing import List, Optional, Union + +import torch +from transformers import T5EncoderModel, T5Tokenizer + + +def _get_t5_prompt_embeds( + tokenizer: T5Tokenizer, + text_encoder: T5EncoderModel, + prompt: Union[str, List[str]], + num_videos_per_prompt: int = 1, + max_sequence_length: int = 226, + device: Optional[torch.device] = None, + dtype: Optional[torch.dtype] = None, + text_input_ids=None, +): + prompt = [prompt] if isinstance(prompt, str) else prompt + batch_size = len(prompt) + + if tokenizer is not None: + text_inputs = 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 + else: + if text_input_ids is None: + raise ValueError("`text_input_ids` must be provided when the tokenizer is not specified.") + + prompt_embeds = text_encoder(text_input_ids.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 prompt_embeds + + +def encode_prompt( + tokenizer: T5Tokenizer, + text_encoder: T5EncoderModel, + prompt: Union[str, List[str]], + num_videos_per_prompt: int = 1, + max_sequence_length: int = 226, + device: Optional[torch.device] = None, + dtype: Optional[torch.dtype] = None, + text_input_ids=None, +): + prompt = [prompt] if isinstance(prompt, str) else prompt + prompt_embeds = _get_t5_prompt_embeds( + tokenizer, + text_encoder, + prompt=prompt, + num_videos_per_prompt=num_videos_per_prompt, + max_sequence_length=max_sequence_length, + device=device, + dtype=dtype, + text_input_ids=text_input_ids, + ) + return prompt_embeds + + +def compute_prompt_embeddings( + tokenizer: T5Tokenizer, + text_encoder: T5EncoderModel, + prompt: str, + max_sequence_length: int, + device: torch.device, + dtype: torch.dtype, + requires_grad: bool = False, +): + if requires_grad: + prompt_embeds = encode_prompt( + tokenizer, + text_encoder, + prompt, + num_videos_per_prompt=1, + max_sequence_length=max_sequence_length, + device=device, + dtype=dtype, + ) + else: + with torch.no_grad(): + prompt_embeds = encode_prompt( + tokenizer, + text_encoder, + prompt, + num_videos_per_prompt=1, + max_sequence_length=max_sequence_length, + device=device, + dtype=dtype, + ) + return prompt_embeds diff --git a/training/utils.py b/training/utils.py new file mode 100644 index 0000000..609045f --- /dev/null +++ b/training/utils.py @@ -0,0 +1,182 @@ +import gc +from typing import Optional, Tuple, Union + +import torch +from accelerate.logging import get_logger +from diffusers.models.embeddings import get_3d_rotary_pos_embed + + +logger = get_logger(__name__) + + +def get_optimizer( + params_to_optimize, + optimizer_name: str = "adam", + learning_rate: float = 1e-3, + beta1: float = 0.9, + beta2: float = 0.95, + beta3: float = 0.98, + epsilon: float = 1e-8, + weight_decay: float = 1e-4, + prodigy_decouple: bool = False, + prodigy_use_bias_correction: bool = False, + prodigy_safeguard_warmup: bool = False, + use_8bit: bool = False, + use_deepspeed: bool = False, +) -> torch.optim.Optimizer: + optimizer_name = optimizer_name.lower() + + # Use DeepSpeed optimzer + if use_deepspeed: + from accelerate.utils import DummyOptim + + return DummyOptim( + params_to_optimize, + lr=learning_rate, + betas=(beta1, beta2), + eps=epsilon, + weight_decay=weight_decay, + ) + + # Optimizer creation + supported_optimizers = ["adam", "adamw", "prodigy"] + if optimizer_name not in supported_optimizers: + logger.warning( + f"Unsupported choice of optimizer: {optimizer_name}. Supported optimizers include {supported_optimizers}. Defaulting to `AdamW`." + ) + optimizer_name = "adamw" + + if use_8bit and optimizer_name not in ["adam", "adamw"]: + logger.warning( + f"use_8bit_adam is ignored when optimizer is not set to 'Adam' or 'AdamW'. Optimizer was set to {optimizer_name}." + ) + + if use_8bit: + try: + import bitsandbytes as bnb + except ImportError: + raise ImportError( + "To use 8-bit Adam, please install the bitsandbytes library: `pip install bitsandbytes`." + ) + + if optimizer_name == "adamw": + optimizer_class = bnb.optim.AdamW8bit if use_8bit else torch.optim.AdamW + + optimizer = optimizer_class( + params_to_optimize, + betas=(beta1, beta2), + eps=epsilon, + weight_decay=weight_decay, + ) + + elif optimizer_name == "adam": + optimizer_class = bnb.optim.Adam8bit if use_8bit else torch.optim.Adam + + optimizer = optimizer_class( + params_to_optimize, + betas=(beta1, beta2), + eps=epsilon, + weight_decay=weight_decay, + ) + + elif optimizer_name == "prodigy": + try: + import prodigyopt + except ImportError: + raise ImportError("To use Prodigy, please install the prodigyopt library: `pip install prodigyopt`") + + optimizer_class = prodigyopt.Prodigy + + if learning_rate <= 0.1: + logger.warning( + "Learning rate is too low. When using prodigy, it's generally better to set learning rate around 1.0" + ) + + optimizer = optimizer_class( + params_to_optimize, + lr=learning_rate, + betas=(beta1, beta2), + beta3=beta3, + weight_decay=weight_decay, + eps=epsilon, + decouple=prodigy_decouple, + use_bias_correction=prodigy_use_bias_correction, + safeguard_warmup=prodigy_safeguard_warmup, + ) + + return optimizer + + +def get_gradient_norm(parameters): + norm = 0 + for param in parameters: + if param.grad is None: + continue + local_norm = param.grad.detach().data.norm(2) + norm += local_norm.item() ** 2 + norm = norm**0.5 + return norm + + +# Similar to diffusers.pipelines.hunyuandit.pipeline_hunyuandit.get_resize_crop_region_for_grid +def get_resize_crop_region_for_grid(src, tgt_width, tgt_height): + tw = tgt_width + th = tgt_height + h, w = src + r = h / w + if r > (th / tw): + resize_height = th + resize_width = int(round(th / h * w)) + else: + resize_width = tw + resize_height = int(round(tw / w * h)) + + crop_top = int(round((th - resize_height) / 2.0)) + crop_left = int(round((tw - resize_width) / 2.0)) + + return (crop_top, crop_left), (crop_top + resize_height, crop_left + resize_width) + + +def prepare_rotary_positional_embeddings( + height: int, + width: int, + num_frames: int, + vae_scale_factor_spatial: int = 8, + patch_size: int = 2, + attention_head_dim: int = 64, + device: Optional[torch.device] = None, + base_height: int = 480, + base_width: int = 720, +) -> Tuple[torch.Tensor, torch.Tensor]: + grid_height = height // (vae_scale_factor_spatial * patch_size) + grid_width = width // (vae_scale_factor_spatial * patch_size) + base_size_width = base_width // (vae_scale_factor_spatial * patch_size) + base_size_height = base_height // (vae_scale_factor_spatial * patch_size) + + grid_crops_coords = get_resize_crop_region_for_grid((grid_height, grid_width), base_size_width, base_size_height) + freqs_cos, freqs_sin = get_3d_rotary_pos_embed( + embed_dim=attention_head_dim, + crops_coords=grid_crops_coords, + grid_size=(grid_height, grid_width), + temporal_size=num_frames, + ) + + freqs_cos = freqs_cos.to(device=device) + freqs_sin = freqs_sin.to(device=device) + return freqs_cos, freqs_sin + + +def reset_memory(device: Union[str, torch.device]) -> None: + gc.collect() + torch.cuda.empty_cache() + torch.cuda.reset_peak_memory_stats(device) + torch.cuda.reset_accumulated_memory_stats(device) + + +def print_memory(device: Union[str, torch.device]) -> None: + memory_allocated = torch.cuda.memory_allocated(device) / 1024**3 + max_memory_allocated = torch.cuda.max_memory_allocated(device) / 1024**3 + max_memory_reserved = torch.cuda.max_memory_reserved(device) / 1024**3 + print(f"{memory_allocated=:.3f} GB") + print(f"{max_memory_allocated=:.3f} GB") + print(f"{max_memory_reserved=:.3f} GB")