From f572319bd92f029ea039b651ba82a3f553ae1a36 Mon Sep 17 00:00:00 2001 From: William Lin Date: Thu, 24 Jul 2025 22:43:12 -0700 Subject: [PATCH] [Feature] Remove V1 folder (#642) --- .buildkite/pipeline.yml | 42 ++++++------ .buildkite/scripts/pr_test.sh | 2 +- .github/ISSUE_TEMPLATE/1-bug-report.yml | 2 +- .github/workflows/docs.yml | 4 +- .github/workflows/pr-test.yml | 46 +++++++------- .gitignore | 2 +- .pre-commit-config.yaml | 4 +- .../utils/collect_env.py => collect_env.py | 3 +- comfyui/README.md | 4 +- docs/source/api/summary.md | 4 +- docs/source/design/overview.md | 60 +++++++++--------- docs/source/getting_started/v1_api.md | 36 +++++------ docs/source/inference/add_pipeline.md | 42 ++++++------ examples/inference/basic/basic.py | 2 +- examples/inference/basic/basic_dmd.py | 2 +- examples/inference/basic/basic_mps.py | 2 +- examples/inference/basic/default_args.py | 2 +- examples/inference/basic/test.py | 2 +- examples/inference/gradio/gradio_demo.py | 2 +- examples/inference/lora/wan_lora_inference.py | 2 +- .../lora/wan_lora_inference_from_ckpt.py | 2 +- .../crush_smol/finetune_i2v.sh | 2 +- .../crush_smol/finetune_i2v.slurm | 2 +- .../crush_smol/preprocess_wan_data_i2v.sh | 2 +- .../crush_smol/finetune_i2v.sh | 2 +- .../crush_smol/finetune_i2v.slurm | 2 +- .../crush_smol/finetune_i2v_lora.sh | 2 +- .../crush_smol/preprocess_wan_data_i2v.sh | 2 +- .../wan_t2v_1_3b/crush_smol/finetune_t2v.sh | 2 +- .../crush_smol/finetune_t2v.slurm | 2 +- .../crush_smol/finetune_t2v_lora.sh | 2 +- .../crush_smol/preprocess_wan_data_t2v.sh | 2 +- fastvideo/{v1 => }/STA_configuration.py | 2 +- fastvideo/__init__.py | 8 +-- fastvideo/attention/__init__.py | 19 ++++++ .../{v1 => attention/backends}/__init__.py | 0 .../{v1 => }/attention/backends/abstract.py | 4 +- .../{v1 => }/attention/backends/flash_attn.py | 10 +-- .../{v1 => }/attention/backends/sage_attn.py | 8 +-- fastvideo/{v1 => }/attention/backends/sdpa.py | 8 +-- .../attention/backends/sliding_tile_attn.py | 22 +++---- .../attention/backends/video_sparse_attn.py | 16 ++--- fastvideo/{v1 => }/attention/layer.py | 15 ++--- fastvideo/{v1 => }/attention/selector.py | 10 +-- .../backends => configs}/__init__.py | 0 .../{v1 => }/configs/fasthunyuan_t2v.json | 0 fastvideo/configs/models/__init__.py | 6 ++ fastvideo/{v1 => }/configs/models/base.py | 2 +- fastvideo/configs/models/dits/__init__.py | 5 ++ .../{v1 => }/configs/models/dits/base.py | 6 +- .../configs/models/dits/hunyuanvideo.py | 2 +- .../{v1 => }/configs/models/dits/stepvideo.py | 2 +- .../{v1 => }/configs/models/dits/wanvideo.py | 2 +- fastvideo/configs/models/encoders/__init__.py | 14 ++++ .../{v1 => }/configs/models/encoders/base.py | 6 +- .../{v1 => }/configs/models/encoders/clip.py | 8 +-- .../{v1 => }/configs/models/encoders/llama.py | 4 +- .../{v1 => }/configs/models/encoders/t5.py | 4 +- fastvideo/configs/models/vaes/__init__.py | 9 +++ .../{v1 => }/configs/models/vaes/base.py | 4 +- .../configs/models/vaes/hunyuanvae.py | 2 +- .../configs/models/vaes/stepvideovae.py | 2 +- .../{v1 => }/configs/models/vaes/wanvae.py | 2 +- fastvideo/configs/pipelines/__init__.py | 15 +++++ fastvideo/{v1 => }/configs/pipelines/base.py | 21 +++--- .../{v1 => }/configs/pipelines/hunyuan.py | 12 ++-- .../{v1 => }/configs/pipelines/registry.py | 21 +++--- .../{v1 => }/configs/pipelines/stepvideo.py | 8 +-- fastvideo/{v1 => }/configs/pipelines/wan.py | 12 ++-- fastvideo/configs/sample/__init__.py | 3 + fastvideo/{v1 => }/configs/sample/base.py | 4 +- fastvideo/{v1 => }/configs/sample/hunyuan.py | 4 +- fastvideo/{v1 => }/configs/sample/registry.py | 22 +++---- .../{v1 => }/configs/sample/stepvideo.py | 2 +- fastvideo/{v1 => }/configs/sample/teacache.py | 2 +- fastvideo/{v1 => }/configs/sample/wan.py | 4 +- fastvideo/{v1 => }/configs/utils.py | 0 .../configs/wan_1.3B_t2v_pipeline.json | 0 .../configs/wan_14B_i2v_480p_pipeline.json | 0 fastvideo/{v1 => }/dataset/__init__.py | 11 ++-- ...enchmark_parquet_dataset_iterable_style.py | 14 ++-- .../benchmark_parquet_dataset_map_style.py | 16 ++--- .../{v1 => }/dataset/dataloader/schema.py | 0 fastvideo/{v1 => }/dataset/latent_datasets.py | 0 .../dataset/parquet_dataset_iterable_style.py | 8 +-- .../dataset/parquet_dataset_map_style.py | 8 +-- .../dataset/preprocessing_datasets.py | 2 +- fastvideo/{v1 => }/dataset/transform.py | 0 fastvideo/{v1 => }/dataset/upload_to_hf.py | 0 fastvideo/{v1 => }/dataset/utils.py | 0 .../{v1 => }/dataset/validation_dataset.py | 8 +-- fastvideo/{v1 => }/distributed/__init__.py | 6 +- .../{v1 => }/distributed/communication_op.py | 2 +- .../device_communicators}/__init__.py | 0 .../base_device_communicator.py | 0 .../device_communicators/cpu_communicator.py | 4 +- .../device_communicators/cuda_communicator.py | 4 +- .../device_communicators/pynccl.py | 8 +-- .../device_communicators/pynccl_wrapper.py | 4 +- .../{v1 => }/distributed/parallel_state.py | 22 +++---- fastvideo/{v1 => }/distributed/utils.py | 2 +- .../__init__.py | 0 .../cli}/__init__.py | 0 .../{v1 => }/entrypoints/cli/cli_types.py | 2 +- .../{v1 => }/entrypoints/cli/generate.py | 12 ++-- fastvideo/{v1 => }/entrypoints/cli/main.py | 6 +- fastvideo/{v1 => }/entrypoints/cli/utils.py | 4 +- .../{v1 => }/entrypoints/video_generator.py | 12 ++-- fastvideo/{v1 => }/envs.py | 0 fastvideo/{v1 => }/fastvideo_args.py | 8 +-- fastvideo/{v1 => }/forward_context.py | 6 +- .../entrypoints/cli => layers}/__init__.py | 0 fastvideo/{v1 => }/layers/activation.py | 2 +- fastvideo/{v1 => }/layers/custom_op.py | 2 +- fastvideo/{v1 => }/layers/layernorm.py | 4 +- fastvideo/{v1 => }/layers/linear.py | 28 ++++---- fastvideo/{v1 => }/layers/lora/linear.py | 22 +++---- fastvideo/{v1 => }/layers/mlp.py | 4 +- .../{v1 => }/layers/quantization/__init__.py | 8 +-- .../layers/quantization/base_config.py | 2 +- fastvideo/{v1 => }/layers/rotary_embedding.py | 4 +- fastvideo/{v1 => }/layers/utils.py | 0 fastvideo/{v1 => }/layers/visual_embedding.py | 6 +- .../layers/vocab_parallel_embedding.py | 12 ++-- fastvideo/{v1 => }/logger.py | 10 +-- fastvideo/{v1 => }/logging_utils/__init__.py | 2 +- fastvideo/{v1 => }/logging_utils/formatter.py | 0 fastvideo/{v1/layers => models}/__init__.py | 0 fastvideo/{v1 => }/models/dits/base.py | 4 +- .../{v1 => }/models/dits/hunyuanvideo.py | 33 +++++----- fastvideo/{v1 => }/models/dits/stepvideo.py | 22 +++---- fastvideo/{v1 => }/models/dits/wanvideo.py | 38 +++++------ fastvideo/{v1 => }/models/encoders/base.py | 8 +-- fastvideo/{v1 => }/models/encoders/bert.py | 0 fastvideo/{v1 => }/models/encoders/clip.py | 25 ++++---- fastvideo/{v1 => }/models/encoders/llama.py | 26 ++++---- fastvideo/{v1 => }/models/encoders/stepllm.py | 2 +- fastvideo/{v1 => }/models/encoders/t5.py | 22 +++---- fastvideo/{v1 => }/models/encoders/vision.py | 2 +- .../{v1 => }/models/hf_transformer_utils.py | 0 .../{v1/models => models/loader}/__init__.py | 0 .../models/loader/component_loader.py | 23 ++++--- fastvideo/{v1 => }/models/loader/fsdp_load.py | 12 ++-- fastvideo/{v1 => }/models/loader/utils.py | 2 +- .../{v1 => }/models/loader/weight_utils.py | 4 +- fastvideo/{v1 => }/models/parameter.py | 8 +-- fastvideo/{v1 => }/models/registry.py | 10 ++- fastvideo/{v1 => }/models/schedulers/base.py | 0 .../scheduling_flow_match_euler_discrete.py | 4 +- .../scheduling_flow_unipc_multistep.py | 2 +- .../schedulers/scheduling_unipc_multistep.py | 2 +- fastvideo/{v1 => }/models/utils.py | 2 +- fastvideo/{v1 => }/models/vaes/common.py | 4 +- fastvideo/{v1 => }/models/vaes/hunyuanvae.py | 6 +- .../{v1 => }/models/vaes/stepvideovae.py | 4 +- fastvideo/{v1 => }/models/vaes/wanvae.py | 10 +-- fastvideo/{v1 => }/models/vision_utils.py | 0 fastvideo/{v1 => }/pipelines/README.md | 0 fastvideo/{v1 => }/pipelines/__init__.py | 19 +++--- .../pipelines/composed_pipeline_base.py | 18 +++--- .../loader => pipelines/hunyuan}/__init__.py | 0 .../pipelines/hunyuan/hunyuan_pipeline.py | 16 ++--- fastvideo/{v1 => }/pipelines/lora_pipeline.py | 16 ++--- .../{v1 => }/pipelines/pipeline_batch_info.py | 5 +- .../{v1 => }/pipelines/pipeline_registry.py | 8 +-- .../preprocess/preprocess_pipeline_base.py | 16 ++--- .../preprocess/preprocess_pipeline_i2v.py | 12 ++-- .../preprocess/preprocess_pipeline_t2v.py | 4 +- .../pipelines/preprocess/v1_preprocess.py | 14 ++-- fastvideo/pipelines/stages/__init__.py | 37 +++++++++++ fastvideo/{v1 => }/pipelines/stages/base.py | 10 +-- .../{v1 => }/pipelines/stages/conditioning.py | 12 ++-- .../{v1 => }/pipelines/stages/decoding.py | 20 +++--- .../{v1 => }/pipelines/stages/denoising.py | 45 +++++++------ .../{v1 => }/pipelines/stages/encoding.py | 23 ++++--- .../pipelines/stages/image_encoding.py | 16 ++--- .../pipelines/stages/input_validation.py | 14 ++-- .../pipelines/stages/latent_preparation.py | 14 ++-- .../pipelines/stages/stepvideo_encoding.py | 14 ++-- .../pipelines/stages/text_encoding.py | 16 ++--- .../pipelines/stages/timestep_preparation.py | 14 ++-- .../{v1 => }/pipelines/stages/validators.py | 0 .../stepvideo}/__init__.py | 0 .../pipelines/stepvideo/stepvideo_pipeline.py | 26 ++++---- .../stepvideo => pipelines/wan}/__init__.py | 0 .../pipelines/wan/wan_dmd_pipeline.py | 16 +++-- .../pipelines/wan/wan_i2v_pipeline.py | 20 +++--- .../{v1 => }/pipelines/wan/wan_pipeline.py | 18 +++--- fastvideo/{v1 => }/platforms/__init__.py | 16 ++--- fastvideo/{v1 => }/platforms/cpu.py | 6 +- fastvideo/{v1 => }/platforms/cuda.py | 34 +++++----- fastvideo/{v1 => }/platforms/interface.py | 4 +- fastvideo/{v1 => }/platforms/mps.py | 12 ++-- .../{v1/pipelines/wan => tests}/__init__.py | 0 fastvideo/{v1 => }/tests/conftest.py | 2 +- .../tests/encoders/test_clip_encoder.py | 16 ++--- .../tests/encoders/test_llama_encoder.py | 16 ++--- .../tests/encoders/test_t5_encoder.py | 14 ++-- .../tests/inference/STA/test_STA_inference.py | 0 ...llie style, golden era animation, clos.mp4 | Bin ...no lineart, blending, negative space, .mp4 | Bin .../lora/test_lora_inference_similarity.py | 12 ++-- fastvideo/{v1 => }/tests/modal/pr_test.py | 18 +++--- .../tests/nightly/i2v-wandb-summary.json | 0 ...deos_40_steps_900_581ff5eae2909d3a7b36.mp4 | Bin .../nightly/reference_video_1_sample_v0.mp4 | Bin .../test_e2e_i2v_overfit_single_sample.py | 6 +- .../nightly/test_e2e_overfit_single_sample.py | 6 +- .../tests/old_tests/distributed_run.sh | 6 +- .../tests/old_tests/test_t5_encoder.py | 6 +- .../{v1 => }/tests/old_tests/test_wan_vae.py | 4 +- .../{v1 => }/tests/old_tests/tp_example.py | 6 +- ... the vast horizon. The rugged landscap.mp4 | Bin ...ting with the energetic background of .mp4 | Bin ... the vast horizon. The rugged landscap.mp4 | Bin ...ting with the energetic background of .mp4 | Bin ... the darkness and depth of space reali.mp4 | Bin ... the darkness and depth of space reali.mp4 | Bin ... the vast horizon. The rugged landscap.mp4 | Bin ...ting with the energetic background of .mp4 | Bin ... the vast horizon. The rugged landscap.mp4 | Bin ...ting with the energetic background of .mp4 | Bin ...ting with the energetic background of .mp4 | Bin ...ting with the energetic background of .mp4 | Bin ... the darkness and depth of space reali.mp4 | Bin ... the darkness and depth of space reali.mp4 | Bin ...ting with the energetic background of .mp4 | Bin ...ting with the energetic background of .mp4 | Bin fastvideo/{v1 => }/tests/ssim/README.md | 2 +- .../tests/ssim/test_inference_similarity.py | 6 +- .../tests/ssim/update_reference_videos.sh | 0 .../VSA/reference_wandb_summary_VSA.json | 0 .../training/VSA/test_training_loss_VSA.py | 8 +-- .../Vanilla/a40_reference_wandb_summary.json | 0 .../Vanilla/l40s_reference_wandb_summary.json | 0 .../training/Vanilla/test_training_loss.py | 14 ++-- .../l40s_reference_lora_wandb_summary.json | 0 .../tests/training/lora/test_lora_training.py | 4 +- .../tests/transformers/test_hunyuanvideo.py | 12 ++-- .../transformers/test_hunyuanvideo_load.py | 18 +++--- .../tests/transformers/test_wanvideo.py | 16 ++--- fastvideo/{v1 => }/tests/utils.py | 2 +- .../{v1 => }/tests/vaes/test_hunyuan_vae.py | 14 ++-- fastvideo/{v1 => }/tests/vaes/test_wan_vae.py | 12 ++-- .../{v1/tests => third_party}/__init__.py | 0 fastvideo/{v1 => }/third_party/pynvml.py | 0 fastvideo/{v1 => }/training/__init__.py | 0 .../training/activation_checkpoint.py | 0 .../{v1 => }/training/checkpointing_utils.py | 0 .../{v1 => }/training/training_pipeline.py | 34 +++++----- fastvideo/{v1 => }/training/training_utils.py | 16 ++--- .../training/wan_i2v_training_pipeline.py | 25 ++++---- .../training/wan_training_pipeline.py | 16 ++--- fastvideo/{v1 => }/utils.py | 12 ++-- fastvideo/v1/attention/__init__.py | 20 ------ fastvideo/v1/configs/models/__init__.py | 6 -- fastvideo/v1/configs/models/dits/__init__.py | 5 -- .../v1/configs/models/encoders/__init__.py | 14 ---- fastvideo/v1/configs/models/vaes/__init__.py | 9 --- fastvideo/v1/configs/pipelines/__init__.py | 18 ------ fastvideo/v1/configs/sample/__init__.py | 3 - fastvideo/v1/pipelines/stages/__init__.py | 38 ----------- fastvideo/v1/third_party/__init__.py | 0 fastvideo/{v1 => }/worker/__init__.py | 0 fastvideo/{v1 => }/worker/executor.py | 8 +-- fastvideo/{v1 => }/worker/gpu_worker.py | 16 ++--- .../{v1 => }/worker/multiproc_executor.py | 10 +-- fastvideo/{v1 => }/workflow/workflow_base.py | 4 +- pyproject.toml | 2 +- scripts/finetune/finetune_v1.sh | 2 +- scripts/finetune/finetune_v1_VSA.sh | 2 +- .../preprocess/v1_preprocess_wan_data_i2v.sh | 2 +- .../preprocess/v1_preprocess_wan_data_t2v.sh | 2 +- 273 files changed, 1074 insertions(+), 1096 deletions(-) rename fastvideo/utils/collect_env.py => collect_env.py (99%) rename fastvideo/{v1 => }/STA_configuration.py (99%) create mode 100644 fastvideo/attention/__init__.py rename fastvideo/{v1 => attention/backends}/__init__.py (100%) rename fastvideo/{v1 => }/attention/backends/abstract.py (97%) rename fastvideo/{v1 => }/attention/backends/flash_attn.py (84%) rename fastvideo/{v1 => }/attention/backends/sage_attn.py (83%) rename fastvideo/{v1 => }/attention/backends/sdpa.py (85%) rename fastvideo/{v1 => }/attention/backends/sliding_tile_attn.py (93%) rename fastvideo/{v1 => }/attention/backends/video_sparse_attn.py (92%) rename fastvideo/{v1 => }/attention/layer.py (95%) rename fastvideo/{v1 => }/attention/selector.py (94%) rename fastvideo/{v1/attention/backends => configs}/__init__.py (100%) rename fastvideo/{v1 => }/configs/fasthunyuan_t2v.json (100%) create mode 100644 fastvideo/configs/models/__init__.py rename fastvideo/{v1 => }/configs/models/base.py (98%) create mode 100644 fastvideo/configs/models/dits/__init__.py rename fastvideo/{v1 => }/configs/models/dits/base.py (91%) rename fastvideo/{v1 => }/configs/models/dits/hunyuanvideo.py (99%) rename fastvideo/{v1 => }/configs/models/dits/stepvideo.py (96%) rename fastvideo/{v1 => }/configs/models/dits/wanvideo.py (98%) create mode 100644 fastvideo/configs/models/encoders/__init__.py rename fastvideo/{v1 => }/configs/models/encoders/base.py (92%) rename fastvideo/{v1 => }/configs/models/encoders/clip.py (90%) rename fastvideo/{v1 => }/configs/models/encoders/llama.py (92%) rename fastvideo/{v1 => }/configs/models/encoders/t5.py (94%) create mode 100644 fastvideo/configs/models/vaes/__init__.py rename fastvideo/{v1 => }/configs/models/vaes/base.py (97%) rename fastvideo/{v1 => }/configs/models/vaes/hunyuanvae.py (94%) rename fastvideo/{v1 => }/configs/models/vaes/stepvideovae.py (90%) rename fastvideo/{v1 => }/configs/models/vaes/wanvae.py (95%) create mode 100644 fastvideo/configs/pipelines/__init__.py rename fastvideo/{v1 => }/configs/pipelines/base.py (95%) rename fastvideo/{v1 => }/configs/pipelines/hunyuan.py (88%) rename fastvideo/{v1 => }/configs/pipelines/registry.py (86%) rename fastvideo/{v1 => }/configs/pipelines/stepvideo.py (80%) rename fastvideo/{v1 => }/configs/pipelines/wan.py (88%) create mode 100644 fastvideo/configs/sample/__init__.py rename fastvideo/{v1 => }/configs/sample/base.py (98%) rename fastvideo/{v1 => }/configs/sample/hunyuan.py (84%) rename fastvideo/{v1 => }/configs/sample/registry.py (81%) rename fastvideo/{v1 => }/configs/sample/stepvideo.py (92%) rename fastvideo/{v1 => }/configs/sample/teacache.py (95%) rename fastvideo/{v1 => }/configs/sample/wan.py (96%) rename fastvideo/{v1 => }/configs/utils.py (100%) rename fastvideo/{v1 => }/configs/wan_1.3B_t2v_pipeline.json (100%) rename fastvideo/{v1 => }/configs/wan_14B_i2v_480p_pipeline.json (100%) rename fastvideo/{v1 => }/dataset/__init__.py (77%) rename fastvideo/{v1 => }/dataset/benchmarks/benchmark_parquet_dataset_iterable_style.py (86%) rename fastvideo/{v1 => }/dataset/benchmarks/benchmark_parquet_dataset_map_style.py (86%) rename fastvideo/{v1 => }/dataset/dataloader/schema.py (100%) rename fastvideo/{v1 => }/dataset/latent_datasets.py (100%) rename fastvideo/{v1 => }/dataset/parquet_dataset_iterable_style.py (97%) rename fastvideo/{v1 => }/dataset/parquet_dataset_map_style.py (98%) rename fastvideo/{v1 => }/dataset/preprocessing_datasets.py (99%) rename fastvideo/{v1 => }/dataset/transform.py (100%) rename fastvideo/{v1 => }/dataset/upload_to_hf.py (100%) rename fastvideo/{v1 => }/dataset/utils.py (100%) rename fastvideo/{v1 => }/dataset/validation_dataset.py (96%) rename fastvideo/{v1 => }/distributed/__init__.py (87%) rename fastvideo/{v1 => }/distributed/communication_op.py (94%) rename fastvideo/{v1/configs => distributed/device_communicators}/__init__.py (100%) rename fastvideo/{v1 => }/distributed/device_communicators/base_device_communicator.py (100%) rename fastvideo/{v1 => }/distributed/device_communicators/cpu_communicator.py (98%) rename fastvideo/{v1 => }/distributed/device_communicators/cuda_communicator.py (94%) rename fastvideo/{v1 => }/distributed/device_communicators/pynccl.py (97%) rename fastvideo/{v1 => }/distributed/device_communicators/pynccl_wrapper.py (99%) rename fastvideo/{v1 => }/distributed/parallel_state.py (98%) rename fastvideo/{v1 => }/distributed/utils.py (99%) rename fastvideo/{v1/distributed/device_communicators => entrypoints}/__init__.py (100%) rename fastvideo/{v1/entrypoints => entrypoints/cli}/__init__.py (100%) rename fastvideo/{v1 => }/entrypoints/cli/cli_types.py (93%) rename fastvideo/{v1 => }/entrypoints/cli/generate.py (92%) rename fastvideo/{v1 => }/entrypoints/cli/main.py (82%) rename fastvideo/{v1 => }/entrypoints/cli/utils.py (93%) rename fastvideo/{v1 => }/entrypoints/video_generator.py (97%) rename fastvideo/{v1 => }/envs.py (100%) rename fastvideo/{v1 => }/fastvideo_args.py (99%) rename fastvideo/{v1 => }/forward_context.py (96%) rename fastvideo/{v1/entrypoints/cli => layers}/__init__.py (100%) rename fastvideo/{v1 => }/layers/activation.py (98%) rename fastvideo/{v1 => }/layers/custom_op.py (98%) rename fastvideo/{v1 => }/layers/layernorm.py (98%) rename fastvideo/{v1 => }/layers/linear.py (97%) rename fastvideo/{v1 => }/layers/lora/linear.py (95%) rename fastvideo/{v1 => }/layers/mlp.py (91%) rename fastvideo/{v1 => }/layers/quantization/__init__.py (85%) rename fastvideo/{v1 => }/layers/quantization/base_config.py (98%) rename fastvideo/{v1 => }/layers/rotary_embedding.py (99%) rename fastvideo/{v1 => }/layers/utils.py (100%) rename fastvideo/{v1 => }/layers/visual_embedding.py (97%) rename fastvideo/{v1 => }/layers/vocab_parallel_embedding.py (98%) rename fastvideo/{v1 => }/logger.py (97%) rename fastvideo/{v1 => }/logging_utils/__init__.py (54%) rename fastvideo/{v1 => }/logging_utils/formatter.py (100%) rename fastvideo/{v1/layers => models}/__init__.py (100%) rename fastvideo/{v1 => }/models/dits/base.py (97%) rename fastvideo/{v1 => }/models/dits/hunyuanvideo.py (96%) rename fastvideo/{v1 => }/models/dits/stepvideo.py (97%) rename fastvideo/{v1 => }/models/dits/wanvideo.py (96%) rename fastvideo/{v1 => }/models/encoders/base.py (89%) rename fastvideo/{v1 => }/models/encoders/bert.py (100%) rename fastvideo/{v1 => }/models/encoders/clip.py (96%) rename fastvideo/{v1 => }/models/encoders/llama.py (95%) rename fastvideo/{v1 => }/models/encoders/stepllm.py (99%) rename fastvideo/{v1 => }/models/encoders/t5.py (97%) rename fastvideo/{v1 => }/models/encoders/vision.py (98%) rename fastvideo/{v1 => }/models/hf_transformer_utils.py (100%) rename fastvideo/{v1/models => models/loader}/__init__.py (100%) rename fastvideo/{v1 => }/models/loader/component_loader.py (96%) rename fastvideo/{v1 => }/models/loader/fsdp_load.py (97%) rename fastvideo/{v1 => }/models/loader/utils.py (98%) rename fastvideo/{v1 => }/models/loader/weight_utils.py (98%) rename fastvideo/{v1 => }/models/parameter.py (98%) rename fastvideo/{v1 => }/models/registry.py (97%) rename fastvideo/{v1 => }/models/schedulers/base.py (100%) rename fastvideo/{v1 => }/models/schedulers/scheduling_flow_match_euler_discrete.py (99%) rename fastvideo/{v1 => }/models/schedulers/scheduling_flow_unipc_multistep.py (99%) rename fastvideo/{v1 => }/models/schedulers/scheduling_unipc_multistep.py (99%) rename fastvideo/{v1 => }/models/utils.py (98%) rename fastvideo/{v1 => }/models/vaes/common.py (99%) rename fastvideo/{v1 => }/models/vaes/hunyuanvae.py (99%) rename fastvideo/{v1 => }/models/vaes/stepvideovae.py (99%) rename fastvideo/{v1 => }/models/vaes/wanvae.py (99%) rename fastvideo/{v1 => }/models/vision_utils.py (100%) rename fastvideo/{v1 => }/pipelines/README.md (100%) rename fastvideo/{v1 => }/pipelines/__init__.py (74%) rename fastvideo/{v1 => }/pipelines/composed_pipeline_base.py (95%) rename fastvideo/{v1/models/loader => pipelines/hunyuan}/__init__.py (100%) rename fastvideo/{v1 => }/pipelines/hunyuan/hunyuan_pipeline.py (80%) rename fastvideo/{v1 => }/pipelines/lora_pipeline.py (94%) rename fastvideo/{v1 => }/pipelines/pipeline_batch_info.py (96%) rename fastvideo/{v1 => }/pipelines/pipeline_registry.py (93%) rename fastvideo/{v1 => }/pipelines/preprocess/preprocess_pipeline_base.py (98%) rename fastvideo/{v1 => }/pipelines/preprocess/preprocess_pipeline_i2v.py (95%) rename fastvideo/{v1 => }/pipelines/preprocess/preprocess_pipeline_t2v.py (80%) rename fastvideo/{v1 => }/pipelines/preprocess/v1_preprocess.py (90%) create mode 100644 fastvideo/pipelines/stages/__init__.py rename fastvideo/{v1 => }/pipelines/stages/base.py (95%) rename fastvideo/{v1 => }/pipelines/stages/conditioning.py (89%) rename fastvideo/{v1 => }/pipelines/stages/decoding.py (88%) rename fastvideo/{v1 => }/pipelines/stages/denoising.py (95%) rename fastvideo/{v1 => }/pipelines/stages/encoding.py (90%) rename fastvideo/{v1 => }/pipelines/stages/image_encoding.py (84%) rename fastvideo/{v1 => }/pipelines/stages/input_validation.py (91%) rename fastvideo/{v1 => }/pipelines/stages/latent_preparation.py (93%) rename fastvideo/{v1 => }/pipelines/stages/stepvideo_encoding.py (87%) rename fastvideo/{v1 => }/pipelines/stages/text_encoding.py (91%) rename fastvideo/{v1 => }/pipelines/stages/timestep_preparation.py (90%) rename fastvideo/{v1 => }/pipelines/stages/validators.py (100%) rename fastvideo/{v1/pipelines/hunyuan => pipelines/stepvideo}/__init__.py (100%) rename fastvideo/{v1 => }/pipelines/stepvideo/stepvideo_pipeline.py (86%) rename fastvideo/{v1/pipelines/stepvideo => pipelines/wan}/__init__.py (100%) rename fastvideo/{v1 => }/pipelines/wan/wan_dmd_pipeline.py (79%) rename fastvideo/{v1 => }/pipelines/wan/wan_i2v_pipeline.py (78%) rename fastvideo/{v1 => }/pipelines/wan/wan_pipeline.py (79%) rename fastvideo/{v1 => }/platforms/__init__.py (89%) rename fastvideo/{v1 => }/platforms/cpu.py (86%) rename fastvideo/{v1 => }/platforms/cuda.py (90%) rename fastvideo/{v1 => }/platforms/interface.py (97%) rename fastvideo/{v1 => }/platforms/mps.py (84%) rename fastvideo/{v1/pipelines/wan => tests}/__init__.py (100%) rename fastvideo/{v1 => }/tests/conftest.py (84%) rename fastvideo/{v1 => }/tests/encoders/test_clip_encoder.py (93%) rename fastvideo/{v1 => }/tests/encoders/test_llama_encoder.py (92%) rename fastvideo/{v1 => }/tests/encoders/test_t5_encoder.py (93%) rename fastvideo/{v1 => }/tests/inference/STA/test_STA_inference.py (100%) rename fastvideo/{v1 => }/tests/inference/lora/L40S_reference_videos/Wan2.1-T2V-1.3B-Diffusers/TORCH_SDPA/steamboat-willie-1.3b_steamboat willie style, golden era animation, clos.mp4 (100%) rename fastvideo/{v1 => }/tests/inference/lora/L40S_reference_videos/Wan2.1-T2V-1.3B-Diffusers/TORCH_SDPA/wan-flat-color-1.3b-v2_flat color, no lineart, blending, negative space, .mp4 (100%) rename fastvideo/{v1 => }/tests/inference/lora/test_lora_inference_similarity.py (96%) rename fastvideo/{v1 => }/tests/modal/pr_test.py (83%) rename fastvideo/{v1 => }/tests/nightly/i2v-wandb-summary.json (100%) rename fastvideo/{v1 => }/tests/nightly/i2v_validation_videos_40_steps_900_581ff5eae2909d3a7b36.mp4 (100%) rename fastvideo/{v1 => }/tests/nightly/reference_video_1_sample_v0.mp4 (100%) rename fastvideo/{v1 => }/tests/nightly/test_e2e_i2v_overfit_single_sample.py (95%) rename fastvideo/{v1 => }/tests/nightly/test_e2e_overfit_single_sample.py (95%) rename fastvideo/{v1 => }/tests/old_tests/distributed_run.sh (71%) rename fastvideo/{v1 => }/tests/old_tests/test_t5_encoder.py (96%) rename fastvideo/{v1 => }/tests/old_tests/test_wan_vae.py (97%) rename fastvideo/{v1 => }/tests/old_tests/tp_example.py (96%) rename fastvideo/{v1 => }/tests/ssim/A40_reference_videos/FastHunyuan-diffusers/FLASH_ATTN/A lone hiker stands atop a towering cliff, silhouetted against the vast horizon. The rugged landscap.mp4 (100%) rename fastvideo/{v1 => }/tests/ssim/A40_reference_videos/FastHunyuan-diffusers/FLASH_ATTN/Will Smith casually eats noodles, his relaxed demeanor contrasting with the energetic background of .mp4 (100%) rename fastvideo/{v1 => }/tests/ssim/A40_reference_videos/FastHunyuan-diffusers/TORCH_SDPA/A lone hiker stands atop a towering cliff, silhouetted against the vast horizon. The rugged landscap.mp4 (100%) rename fastvideo/{v1 => }/tests/ssim/A40_reference_videos/FastHunyuan-diffusers/TORCH_SDPA/Will Smith casually eats noodles, his relaxed demeanor contrasting with the energetic background of .mp4 (100%) rename fastvideo/{v1 => }/tests/ssim/A40_reference_videos/Wan2.1-I2V-14B-480P-Diffusers/FLASH_ATTN/An astronaut hatching from an egg, on the surface of the moon, the darkness and depth of space reali.mp4 (100%) rename fastvideo/{v1 => }/tests/ssim/A40_reference_videos/Wan2.1-I2V-14B-480P-Diffusers/TORCH_SDPA/An astronaut hatching from an egg, on the surface of the moon, the darkness and depth of space reali.mp4 (100%) rename fastvideo/{v1 => }/tests/ssim/A40_reference_videos/Wan2.1-T2V-1.3B-Diffusers/FLASH_ATTN/A lone hiker stands atop a towering cliff, silhouetted against the vast horizon. The rugged landscap.mp4 (100%) rename fastvideo/{v1 => }/tests/ssim/A40_reference_videos/Wan2.1-T2V-1.3B-Diffusers/FLASH_ATTN/Will Smith casually eats noodles, his relaxed demeanor contrasting with the energetic background of .mp4 (100%) rename fastvideo/{v1 => }/tests/ssim/A40_reference_videos/Wan2.1-T2V-1.3B-Diffusers/TORCH_SDPA/A lone hiker stands atop a towering cliff, silhouetted against the vast horizon. The rugged landscap.mp4 (100%) rename fastvideo/{v1 => }/tests/ssim/A40_reference_videos/Wan2.1-T2V-1.3B-Diffusers/TORCH_SDPA/Will Smith casually eats noodles, his relaxed demeanor contrasting with the energetic background of .mp4 (100%) rename fastvideo/{v1 => }/tests/ssim/L40S_reference_videos/FastHunyuan-diffusers/FLASH_ATTN/Will Smith casually eats noodles, his relaxed demeanor contrasting with the energetic background of .mp4 (100%) rename fastvideo/{v1 => }/tests/ssim/L40S_reference_videos/FastHunyuan-diffusers/TORCH_SDPA/Will Smith casually eats noodles, his relaxed demeanor contrasting with the energetic background of .mp4 (100%) rename fastvideo/{v1 => }/tests/ssim/L40S_reference_videos/Wan2.1-I2V-14B-480P-Diffusers/FLASH_ATTN/An astronaut hatching from an egg, on the surface of the moon, the darkness and depth of space reali.mp4 (100%) rename fastvideo/{v1 => }/tests/ssim/L40S_reference_videos/Wan2.1-I2V-14B-480P-Diffusers/TORCH_SDPA/An astronaut hatching from an egg, on the surface of the moon, the darkness and depth of space reali.mp4 (100%) rename fastvideo/{v1 => }/tests/ssim/L40S_reference_videos/Wan2.1-T2V-1.3B-Diffusers/FLASH_ATTN/Will Smith casually eats noodles, his relaxed demeanor contrasting with the energetic background of .mp4 (100%) rename fastvideo/{v1 => }/tests/ssim/L40S_reference_videos/Wan2.1-T2V-1.3B-Diffusers/TORCH_SDPA/Will Smith casually eats noodles, his relaxed demeanor contrasting with the energetic background of .mp4 (100%) rename fastvideo/{v1 => }/tests/ssim/README.md (95%) rename fastvideo/{v1 => }/tests/ssim/test_inference_similarity.py (98%) rename fastvideo/{v1 => }/tests/ssim/update_reference_videos.sh (100%) rename fastvideo/{v1 => }/tests/training/VSA/reference_wandb_summary_VSA.json (100%) rename fastvideo/{v1 => }/tests/training/VSA/test_training_loss_VSA.py (93%) rename fastvideo/{v1 => }/tests/training/Vanilla/a40_reference_wandb_summary.json (100%) rename fastvideo/{v1 => }/tests/training/Vanilla/l40s_reference_wandb_summary.json (100%) rename fastvideo/{v1 => }/tests/training/Vanilla/test_training_loss.py (91%) rename fastvideo/{v1 => }/tests/training/lora/l40s_reference_lora_wandb_summary.json (100%) rename fastvideo/{v1 => }/tests/training/lora/test_lora_training.py (96%) rename fastvideo/{v1 => }/tests/transformers/test_hunyuanvideo.py (93%) rename fastvideo/{v1 => }/tests/transformers/test_hunyuanvideo_load.py (87%) rename fastvideo/{v1 => }/tests/transformers/test_wanvideo.py (91%) rename fastvideo/{v1 => }/tests/utils.py (99%) rename fastvideo/{v1 => }/tests/vaes/test_hunyuan_vae.py (87%) rename fastvideo/{v1 => }/tests/vaes/test_wan_vae.py (93%) rename fastvideo/{v1/tests => third_party}/__init__.py (100%) rename fastvideo/{v1 => }/third_party/pynvml.py (100%) rename fastvideo/{v1 => }/training/__init__.py (100%) rename fastvideo/{v1 => }/training/activation_checkpoint.py (100%) rename fastvideo/{v1 => }/training/checkpointing_utils.py (100%) rename fastvideo/{v1 => }/training/training_pipeline.py (96%) rename fastvideo/{v1 => }/training/training_utils.py (97%) rename fastvideo/{v1 => }/training/wan_i2v_training_pipeline.py (91%) rename fastvideo/{v1 => }/training/wan_training_pipeline.py (80%) rename fastvideo/{v1 => }/utils.py (98%) delete mode 100644 fastvideo/v1/attention/__init__.py delete mode 100644 fastvideo/v1/configs/models/__init__.py delete mode 100644 fastvideo/v1/configs/models/dits/__init__.py delete mode 100644 fastvideo/v1/configs/models/encoders/__init__.py delete mode 100644 fastvideo/v1/configs/models/vaes/__init__.py delete mode 100644 fastvideo/v1/configs/pipelines/__init__.py delete mode 100644 fastvideo/v1/configs/sample/__init__.py delete mode 100644 fastvideo/v1/pipelines/stages/__init__.py delete mode 100644 fastvideo/v1/third_party/__init__.py rename fastvideo/{v1 => }/worker/__init__.py (100%) rename fastvideo/{v1 => }/worker/executor.py (93%) rename fastvideo/{v1 => }/worker/gpu_worker.py (95%) rename fastvideo/{v1 => }/worker/multiproc_executor.py (96%) rename fastvideo/{v1 => }/workflow/workflow_base.py (85%) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 863093c87..a413febc4 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -16,9 +16,9 @@ steps: diff: 'git fetch origin "$BUILDKITE_PULL_REQUEST_BASE_BRANCH" && git diff --name-only origin/"$BUILDKITE_PULL_REQUEST_BASE_BRANCH"...HEAD' watch: - path: - - "fastvideo/v1/models/encoders/**" - - "fastvideo/v1/models/loader/**" - - "fastvideo/v1/tests/encoders/**" + - "fastvideo/models/encoders/**" + - "fastvideo/models/loader/**" + - "fastvideo/tests/encoders/**" - "pyproject.toml" - "docker/Dockerfile.python3.12" config: @@ -29,9 +29,9 @@ steps: agents: queue: "default" - path: - - "fastvideo/v1/models/vaes/**" - - "fastvideo/v1/models/loader/**" - - "fastvideo/v1/tests/vaes/**" + - "fastvideo/models/vaes/**" + - "fastvideo/models/loader/**" + - "fastvideo/tests/vaes/**" - "pyproject.toml" - "docker/Dockerfile.python3.12" config: @@ -42,11 +42,11 @@ steps: agents: queue: "default" - path: - - "fastvideo/v1/models/dits/**" - - "fastvideo/v1/models/loader/**" - - "fastvideo/v1/tests/transformers/**" - - "fastvideo/v1/layers/**" - - "fastvideo/v1/attention/**" + - "fastvideo/models/dits/**" + - "fastvideo/models/loader/**" + - "fastvideo/tests/transformers/**" + - "fastvideo/layers/**" + - "fastvideo/attention/**" - "pyproject.toml" - "docker/Dockerfile.python3.12" config: @@ -57,7 +57,7 @@ steps: agents: queue: "default" - path: - - "fastvideo/v1/**/*.py" + - "fastvideo/**/*.py" - "pyproject.toml" - "docker/Dockerfile.python3.12" config: @@ -68,11 +68,11 @@ steps: agents: queue: "default" - path: - - "fastvideo/v1/tests/lora/**" - - "fastvideo/v1/models/loader/**" - - "fastvideo/v1/tests/transformers/**" - - "fastvideo/v1/pipelines/**" - - "fastvideo/v1/layers/lora/**" + - "fastvideo/tests/lora/**" + - "fastvideo/models/loader/**" + - "fastvideo/tests/transformers/**" + - "fastvideo/pipelines/**" + - "fastvideo/layers/lora/**" - "pyproject.toml" - "docker/Dockerfile.python3.12" config: @@ -83,7 +83,7 @@ steps: agents: queue: "default" - path: - - "fastvideo/v1/**" + - "fastvideo/**" - "pyproject.toml" - "docker/Dockerfile.python3.12" config: @@ -94,7 +94,7 @@ steps: agents: queue: "default" - path: - - "fastvideo/v1/**" + - "fastvideo/**" - "pyproject.toml" - "docker/Dockerfile.python3.12" config: @@ -105,7 +105,7 @@ steps: agents: queue: "default" - path: - - "fastvideo/v1/**" + - "fastvideo/**" - "csrc/attn/vsa/**" - "csrc/attn/tk/**" - "csrc/attn/setup_vsa.py" @@ -121,7 +121,7 @@ steps: agents: queue: "default" - path: - - "fastvideo/v1/**" + - "fastvideo/**" - "csrc/attn/st_attn/**" - "csrc/attn/setup_sta.py" - "csrc/attn/config_sta.py" diff --git a/.buildkite/scripts/pr_test.sh b/.buildkite/scripts/pr_test.sh index 2d611fa35..7d01929a3 100755 --- a/.buildkite/scripts/pr_test.sh +++ b/.buildkite/scripts/pr_test.sh @@ -50,7 +50,7 @@ else exit 1 fi -MODAL_TEST_FILE="fastvideo/v1/tests/modal/pr_test.py" +MODAL_TEST_FILE="fastvideo/tests/modal/pr_test.py" if [ -z "${TEST_TYPE:-}" ]; then log "Error: TEST_TYPE environment variable is not set" diff --git a/.github/ISSUE_TEMPLATE/1-bug-report.yml b/.github/ISSUE_TEMPLATE/1-bug-report.yml index d0c98cc12..c48d4d7b5 100644 --- a/.github/ISSUE_TEMPLATE/1-bug-report.yml +++ b/.github/ISSUE_TEMPLATE/1-bug-report.yml @@ -23,7 +23,7 @@ body: attributes: label: Environment description: | - Please share your environment with us. You can run the command **python fastvideo/utils/collect_env.py** and copy-paste its output below. + Please share your environment with us. You can run the command **python collect_env.py** and copy-paste its output below. placeholder: FastVideo version, platform, python version, cuda version... validations: required: true \ No newline at end of file diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 62a8d83e1..1a4f4eb4a 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -8,14 +8,14 @@ on: - main paths: - "docs/**/*.md" - - "fastvideo/v1/examples/**/*.py" + - "fastvideo/examples/**/*.py" pull_request: branches: - main types: [opened, ready_for_review, synchronize, reopened] paths: - "docs/**/*.md" - - "fastvideo/v1/examples/**/*.py" + - "fastvideo/examples/**/*.py" # Allows you to run this workflow manually from the Actions tab workflow_dispatch: diff --git a/.github/workflows/pr-test.yml b/.github/workflows/pr-test.yml index 532f7e493..f3ae701bf 100644 --- a/.github/workflows/pr-test.yml +++ b/.github/workflows/pr-test.yml @@ -115,37 +115,37 @@ jobs: - 'csrc/attn/config_vsa.py' - 'csrc/attn/vsa.cpp' vsa-paths: &vsa-paths - - 'fastvideo/v1/**' + - 'fastvideo/**' - *common-paths - *vsa-kernel-paths # Actual tests encoder-test: - - 'fastvideo/v1/models/encoders/**' - - 'fastvideo/v1/models/loader/**' - - 'fastvideo/v1/tests/encoders/**' + - 'fastvideo/models/encoders/**' + - 'fastvideo/models/loader/**' + - 'fastvideo/tests/encoders/**' - *common-paths vae-test: - - 'fastvideo/v1/models/vaes/**' - - 'fastvideo/v1/models/loader/**' - - 'fastvideo/v1/tests/vaes/**' + - 'fastvideo/models/vaes/**' + - 'fastvideo/models/loader/**' + - 'fastvideo/tests/vaes/**' - *common-paths transformer-test: - - 'fastvideo/v1/models/dits/**' - - 'fastvideo/v1/models/loader/**' - - 'fastvideo/v1/tests/transformers/**' - - 'fastvideo/v1/layers/**' - - 'fastvideo/v1/attention/**' + - 'fastvideo/models/dits/**' + - 'fastvideo/models/loader/**' + - 'fastvideo/tests/transformers/**' + - 'fastvideo/layers/**' + - 'fastvideo/attention/**' - *common-paths training-test: - - 'fastvideo/v1/**' + - 'fastvideo/**' - *common-paths training-test-VSA: - - 'fastvideo/v1/**' + - 'fastvideo/**' - *common-paths - *vsa-kernel-paths inference-test-STA: - - 'fastvideo/v1/**' + - 'fastvideo/**' - *common-paths - *sta-kernel-paths precision-test-STA: @@ -167,7 +167,7 @@ jobs: gpu_count: 1 volume_size: 100 image: "ghcr.io/${{ github.repository }}/fastvideo-dev:py3.12-latest" - test_command: "uv pip install -e .[test] && pytest ./fastvideo/v1/tests/encoders -s" + test_command: "uv pip install -e .[test] && pytest ./fastvideo/tests/encoders -s" timeout_minutes: 30 secrets: RUNPOD_API_KEY: ${{ secrets.RUNPOD_API_KEY }} @@ -185,7 +185,7 @@ jobs: gpu_count: 1 volume_size: 100 image: "ghcr.io/${{ github.repository }}/fastvideo-dev:py3.12-latest" - test_command: "uv pip install -e .[test] && pytest ./fastvideo/v1/tests/vaes -s" + test_command: "uv pip install -e .[test] && pytest ./fastvideo/tests/vaes -s" timeout_minutes: 30 secrets: RUNPOD_API_KEY: ${{ secrets.RUNPOD_API_KEY }} @@ -203,7 +203,7 @@ jobs: gpu_count: 1 volume_size: 100 image: "ghcr.io/${{ github.repository }}/fastvideo-dev:py3.12-latest" - test_command: "uv pip install -e .[test] && pytest ./fastvideo/v1/tests/transformers -s" + test_command: "uv pip install -e .[test] && pytest ./fastvideo/tests/transformers -s" timeout_minutes: 30 secrets: RUNPOD_API_KEY: ${{ secrets.RUNPOD_API_KEY }} @@ -229,7 +229,7 @@ jobs: volume_size: 200 disk_size: 200 image: "ghcr.io/${{ github.repository }}/fastvideo-dev:${{ matrix.python-version.tag }}" - test_command: "uv pip install -e .[test] && pytest ./fastvideo/v1/tests/ssim -vs" + test_command: "uv pip install -e .[test] && pytest ./fastvideo/tests/ssim -vs" timeout_minutes: 60 secrets: RUNPOD_API_KEY: ${{ secrets.RUNPOD_API_KEY }} @@ -248,7 +248,7 @@ jobs: volume_size: 100 disk_size: 100 image: "ghcr.io/${{ github.repository }}/fastvideo-dev:py3.12-latest" - test_command: "wandb login $WANDB_API_KEY && uv pip install -e .[test] && pytest ./fastvideo/v1/tests/training/Vanilla -srP" + test_command: "wandb login $WANDB_API_KEY && uv pip install -e .[test] && pytest ./fastvideo/tests/training/Vanilla -srP" timeout_minutes: 30 secrets: RUNPOD_API_KEY: ${{ secrets.RUNPOD_API_KEY }} @@ -268,7 +268,7 @@ jobs: volume_size: 100 disk_size: 100 image: "ghcr.io/${{ github.repository }}/fastvideo-dev:py3.12-latest" - test_command: "wandb login $WANDB_API_KEY && uv pip install -e .[test] && pytest ./fastvideo/v1/tests/training/VSA -srP" + test_command: "wandb login $WANDB_API_KEY && uv pip install -e .[test] && pytest ./fastvideo/tests/training/VSA -srP" timeout_minutes: 30 secrets: RUNPOD_API_KEY: ${{ secrets.RUNPOD_API_KEY }} @@ -288,7 +288,7 @@ jobs: volume_size: 100 disk_size: 100 image: "ghcr.io/${{ github.repository }}/fastvideo-dev:py3.12-latest" - test_command: "uv pip install -e .[test] && pytest ./fastvideo/v1/tests/inference/STA -srP" + test_command: "uv pip install -e .[test] && pytest ./fastvideo/tests/inference/STA -srP" timeout_minutes: 30 secrets: RUNPOD_API_KEY: ${{ secrets.RUNPOD_API_KEY }} @@ -343,7 +343,7 @@ jobs: volume_size: 100 disk_size: 100 image: "ghcr.io/${{ github.repository }}/fastvideo-dev:py3.12-latest" - test_command: "wandb login $WANDB_API_KEY && uv pip install -e .[test] && pytest ./fastvideo/v1/tests/nightly/test_e2e_overfit_single_sample.py -vs" + test_command: "wandb login $WANDB_API_KEY && uv pip install -e .[test] && pytest ./fastvideo/tests/nightly/test_e2e_overfit_single_sample.py -vs" timeout_minutes: 30 secrets: RUNPOD_API_KEY: ${{ secrets.RUNPOD_API_KEY }} diff --git a/.gitignore b/.gitignore index 4a59adc58..57711d685 100644 --- a/.gitignore +++ b/.gitignore @@ -57,7 +57,7 @@ docs/source/training/examples/ *.pkl # Reference videos -!fastvideo/v1/tests/ssim/reference_videos/**/*.mp4 +!fastvideo/tests/ssim/reference_videos/**/*.mp4 # Static images !docs/source/_static/images/**/*.png diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a276ec978..a00649198 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -3,7 +3,7 @@ default_stages: - manual # Run in CI exclude: | (?x)( - fastvideo/v1/third_party/.*| + fastvideo/third_party/.*| csrc/.*| assets/.*| tests/.*| @@ -69,7 +69,7 @@ repos: entry: bash args: - -c - - 'git ls-files | grep -v "^fastvideo/v1/tests/ssim/" | grep -v "^fastvideo/v1/tests/inference/lora/L40S_reference_videos/" | grep " " && echo "Filenames should not contain spaces!" && exit 1 || exit 0' + - 'git ls-files | grep -v "^fastvideo/tests/ssim/" | grep -v "^fastvideo/tests/inference/lora/L40S_reference_videos/" | grep " " && echo "Filenames should not contain spaces!" && exit 1 || exit 0' language: system always_run: true pass_filenames: false diff --git a/fastvideo/utils/collect_env.py b/collect_env.py similarity index 99% rename from fastvideo/utils/collect_env.py rename to collect_env.py index a0b4dc91f..44082ff2f 100644 --- a/fastvideo/utils/collect_env.py +++ b/collect_env.py @@ -16,7 +16,7 @@ import sys # Run it with `python collect_env.py` or `python -m torch.utils.collect_env` from collections import namedtuple -from fastvideo.v1.envs import environment_variables +from fastvideo.envs import environment_variables try: import torch @@ -81,6 +81,7 @@ DEFAULT_CONDA_PATTERNS = { DEFAULT_PIP_PATTERNS = { "torch", "numpy", + "mypy", "flake8", "triton", "optree", diff --git a/comfyui/README.md b/comfyui/README.md index aa641593e..82255f0a3 100644 --- a/comfyui/README.md +++ b/comfyui/README.md @@ -74,8 +74,8 @@ After installation, the following nodes will be available in the ComfyUI interfa You may have noticed many arguments on the nodes have 'auto' as the default value. This is because FastVideo will automatically detect the best values for these parameters based on the model and the hardware. However, you can also manually configure these parameters to get the best performance for your specific use case. We plan on releasing more optimized workflow files for different models and hardware configurations in the future. You can see what some of the default configurations are by looking at the FastVideo repo: -- [Wan2.1-I2V-14B-480P-Diffusers](https://github.com/hao-ai-lab/FastVideo/blob/main/fastvideo/v1/configs/wan_14B_i2v_480p_pipeline.json) -- [FastHunyuan-diffusers](https://github.com/hao-ai-lab/FastVideo/blob/main/fastvideo/v1/configs/fasthunyuan_t2v.json) +- [Wan2.1-I2V-14B-480P-Diffusers](https://github.com/hao-ai-lab/FastVideo/blob/main/fastvideo/configs/wan_14B_i2v_480p_pipeline.json) +- [FastHunyuan-diffusers](https://github.com/hao-ai-lab/FastVideo/blob/main/fastvideo/configs/fasthunyuan_t2v.json) ### Node Configuration diff --git a/docs/source/api/summary.md b/docs/source/api/summary.md index a453b6bd2..4b5cdd89d 100644 --- a/docs/source/api/summary.md +++ b/docs/source/api/summary.md @@ -9,11 +9,11 @@ ## Initialization Configuration ```{autodoc2-summary} - fastvideo.v1.configs.pipelines.PipelineConfig + fastvideo.configs.pipelines.PipelineConfig ``` ## Sampling Configuration ```{autodoc2-summary} - fastvideo.v1.configs.sample.SamplingParam + fastvideo.configs.sample.SamplingParam ``` diff --git a/docs/source/design/overview.md b/docs/source/design/overview.md index 654e37fc0..b38ebbbd8 100644 --- a/docs/source/design/overview.md +++ b/docs/source/design/overview.md @@ -1,24 +1,24 @@ # 🔍 FastVideo Overview -This document outlines FastVideo's architecture for developers interested in framework internals or contributions. It serves as an onboarding guide for new contributors by providing an overview of the most important directories and files within the `fastvideo/v1/` codebase. +This document outlines FastVideo's architecture for developers interested in framework internals or contributions. It serves as an onboarding guide for new contributors by providing an overview of the most important directories and files within the `fastvideo/` codebase. -## Table of Contents - V1 Directory Structure and Files +## Table of Contents - Directory Structure and Files -- [`fastvideo/v1/pipelines/`](#design-pipeline-system) - Core diffusion pipeline components -- [`fastvideo/v1/models/`](#design-model-components) - Model implementations +- [`fastvideo/pipelines/`](#design-pipeline-system) - Core diffusion pipeline components +- [`fastvideo/models/`](#design-model-components) - Model implementations - [`dits/`](#design-transformer-models) - Transformer-based diffusion models - [`vaes/`](#design-vae-variational-auto-encoder) - Variational autoencoders - [`encoders/`](#design-text-and-image-encoders) - Text and image encoders - [`schedulers/`](#design-schedulers) - Diffusion schedulers -- [`fastvideo/v1/attention/`](#design-optimized-attention) - Optimized attention implementations -- [`fastvideo/v1/distributed/`](#design-distributed-processing) - Distributed computing utilities -- [`fastvideo/v1/layers/`](#design-tensor-parallelism) - Custom neural network layers -- [`fastvideo/v1/platforms/`](#design-platforms) - Hardware platform abstractions -- [`fastvideo/v1/worker/`](#design-executor-and-worker-abstractions) - Multi-GPU process management -- [`fastvideo/v1/fastvideo_args.py`](#design-fastvideo-args) - Argument handling -- [`fastvideo/v1/forward_context.py`](#design-forwardcontext) - Forward pass context management -- `fastvideo/v1/utils.py` - Utility functions -- [`fastvideo/v1/logger.py`](#design-logger) - Logging infrastructure +- [`fastvideo/attention/`](#design-optimized-attention) - Optimized attention implementations +- [`fastvideo/distributed/`](#design-distributed-processing) - Distributed computing utilities +- [`fastvideo/layers/`](#design-tensor-parallelism) - Custom neural network layers +- [`fastvideo/platforms/`](#design-platforms) - Hardware platform abstractions +- [`fastvideo/worker/`](#design-executor-and-worker-abstractions) - Multi-GPU process management +- [`fastvideo/fastvideo_args.py`](#design-fastvideo-args) - Argument handling +- [`fastvideo/forward_context.py`](#design-forwardcontext) - Forward pass context management +- `fastvideo/utils.py` - Utility functions +- [`fastvideo/logger.py`](#design-logger) - Logging infrastructure ## Core Architecture @@ -32,7 +32,7 @@ FastVideo separates model components from execution logic with these principles: (design-fastvideo-args)= ## FastVideoArgs -The `FastVideoArgs` class in `fastvideo/v1/fastvideo_args.py` serves as the central configuration system for FastVideo. It contains all parameters needed to control model loading, inference configuration, performance optimization settings, and more. +The `FastVideoArgs` class in `fastvideo/fastvideo_args.py` serves as the central configuration system for FastVideo. It contains all parameters needed to control model loading, inference configuration, performance optimization settings, and more. Key features include: - **Command-line Interface**: Automatic conversion between CLI arguments and dataclass fields @@ -111,7 +111,7 @@ def forward(self, batch: ForwardBatch, fastvideo_args: FastVideoArgs) -> Forward (design-forwardbatch)= ### ForwardBatch -Defined in `fastvideo/v1/pipelines/pipeline_batch_info.py`, `ForwardBatch` encapsulates the data payload passed between pipeline stages. It typically holds: +Defined in `fastvideo/pipelines/pipeline_batch_info.py`, `ForwardBatch` encapsulates the data payload passed between pipeline stages. It typically holds: - **Input Data**: Prompts, images, generation parameters - **Intermediate State**: Embeddings, latents, timesteps, accumulated during stage execution @@ -123,14 +123,14 @@ This structure facilitates clear state transitions between stages. (design-model-components)= ## Model Components -The `fastvideo/v1/models/` directory contains implementations of the core neural network models used in video diffusion: +The `fastvideo/models/` directory contains implementations of the core neural network models used in video diffusion: (design-transformer-models)= ### Transformer Models Transformer networks perform the actual denoising during diffusion: -- **Location**: `fastvideo/v1/models/dits/` +- **Location**: `fastvideo/models/dits/` - **Examples**: - `WanTransformer3DModel` - `HunyuanVideoTransformer3DModel` @@ -157,7 +157,7 @@ def forward( VAEs handle conversion between pixel space and latent space: -- **Location**: `fastvideo/v1/models/vaes/` +- **Location**: `fastvideo/models/vaes/` - **Examples**: - `AutoencoderKLWan` - `AutoencoderKLHunyuanVideo` @@ -175,7 +175,7 @@ FastVideo's VAE implementations include: Encoders process conditioning inputs into embeddings: -- **Location**: `fastvideo/v1/models/encoders/` +- **Location**: `fastvideo/models/encoders/` - **Text Encoders**: - `CLIPTextModel` - `LlamaModel` @@ -193,7 +193,7 @@ FastVideo implements optimizations such as: Schedulers manage the diffusion sampling process: -- **Location**: `fastvideo/v1/models/schedulers/` +- **Location**: `fastvideo/models/schedulers/` - **Examples**: - `UniPCMultistepScheduler` - `FlowMatchEulerDiscreteScheduler` @@ -219,7 +219,7 @@ def step( (design-optimized-attention)= ## Optimized Attention -The `fastvideo/v1/attention/` directory contains optimized attention implementations crucial for efficient video diffusion: +The `fastvideo/attention/` directory contains optimized attention implementations crucial for efficient video diffusion: ### Attention Backends Multiple implementations with automatic selection: @@ -248,7 +248,7 @@ Supports various patterns with memory optimization techniques: (design-distributed-processing)= ## Distributed Processing -The `fastvideo/v1/distributed/` directory contains implementations for distributed model execution: +The `fastvideo/distributed/` directory contains implementations for distributed model execution: (design-tensor-parallelism)= ### Tensor Parallelism @@ -260,7 +260,7 @@ Tensor parallelism splits model weights across devices: ```python # Tensor-parallel layers in a transformer block -from fastvideo.v1.layers.linear import ColumnParallelLinear, RowParallelLinear +from fastvideo.layers.linear import ColumnParallelLinear, RowParallelLinear # Split along output dimension self.qkv_proj = ColumnParallelLinear( @@ -288,7 +288,7 @@ Sequence parallelism splits sequences across devices: ```python # Distributed attention for long sequences -from fastvideo.v1.attention import DistributedAttention +from fastvideo.attention import DistributedAttention self.attn = DistributedAttention( num_heads=num_heads, @@ -312,7 +312,7 @@ Efficient communication primitives minimize distributed overhead: ### ForwardContext -Defined in `fastvideo/v1/forward_context.py`, `ForwardContext` manages execution-specific state *within* a forward pass, particularly for low-level optimizations. It is accessed via `get_forward_context()`. +Defined in `fastvideo/forward_context.py`, `ForwardContext` manages execution-specific state *within* a forward pass, particularly for low-level optimizations. It is accessed via `get_forward_context()`. - **Attention Metadata**: Configuration for optimized attention kernels (`attn_metadata`) - **Profiling Data**: Potential hooks for performance metrics collection @@ -333,7 +333,7 @@ with set_forward_context(current_timestep, attn_metadata, fastvideo_args): (design-executor-and-worker-abstractions)= ## Executor and Worker System -The `fastvideo/v1/worker/` directory contains the distributed execution framework: +The `fastvideo/worker/` directory contains the distributed execution framework: ### Executor Abstraction @@ -360,7 +360,7 @@ This design allows FastVideo to efficiently utilize multiple GPUs while providin (design-platforms)= ## Platforms -The `fastvideo/v1/platforms/` directory provides hardware platform abstractions that enable FastVideo to run efficiently on different hardware configurations: +The `fastvideo/platforms/` directory provides hardware platform abstractions that enable FastVideo to run efficiently on different hardware configurations: ### Platform Abstraction @@ -377,7 +377,7 @@ The primary components include: Usage example: ```python -from fastvideo.v1.platforms import current_platform, _Backend +from fastvideo.platforms import current_platform, _Backend # Check hardware capabilities if current_platform.supports_backend(_Backend.FLASH_ATTN): @@ -398,9 +398,9 @@ See [PR](https://github.com/hao-ai-lab/FastVideo/pull/356) If you're a new contributor, here are some common areas to explore: -1. **Adding a new model**: Implement new model types in the appropriate subdirectory of `fastvideo/v1/models/` +1. **Adding a new model**: Implement new model types in the appropriate subdirectory of `fastvideo/models/` 2. **Optimizing performance**: Look at attention implementations or memory management -3. **Adding a new pipeline**: Create a new pipeline subclass in `fastvideo/v1/pipelines/` +3. **Adding a new pipeline**: Create a new pipeline subclass in `fastvideo/pipelines/` 4. **Hardware support**: Extend the `platforms` module for new hardware targets When adding code, follow these practices: diff --git a/docs/source/getting_started/v1_api.md b/docs/source/getting_started/v1_api.md index cba870c25..2fe3695c0 100644 --- a/docs/source/getting_started/v1_api.md +++ b/docs/source/getting_started/v1_api.md @@ -10,20 +10,20 @@ This class will be the primary Python API for generating videos and images. fastvideo.VideoGenerator ``` -`````{py:class} VideoGenerator(fastvideo_args: fastvideo.v1.fastvideo_args.FastVideoArgs, executor_class: type[fastvideo.v1.worker.executor.Executor], log_stats: bool) -:canonical: fastvideo.v1.entrypoints.video_generator.VideoGenerator +`````{py:class} VideoGenerator(fastvideo_args: fastvideo.fastvideo_args.FastVideoArgs, executor_class: type[fastvideo.worker.executor.Executor], log_stats: bool) +:canonical: fastvideo.entrypoints.video_generator.VideoGenerator -```{autodoc2-docstring} fastvideo.v1.entrypoints.video_generator.VideoGenerator +```{autodoc2-docstring} fastvideo.entrypoints.video_generator.VideoGenerator :parser: docs.source.autodoc2_docstring_parser ``` `VideoGenerator.from_pretrained()` should be the primary way of creating a new video generator. -````{py:method} from_pretrained(model_path: str, device: typing.Optional[str] = None, torch_dtype: typing.Optional[torch.dtype] = None, pipeline_config: typing.Optional[typing.Union[str | fastvideo.v1.configs.pipelines.PipelineConfig]] = None, **kwargs) -> fastvideo.v1.entrypoints.video_generator.VideoGenerator -:canonical: fastvideo.v1.entrypoints.video_generator.VideoGenerator.from_pretrained +````{py:method} from_pretrained(model_path: str, device: typing.Optional[str] = None, torch_dtype: typing.Optional[torch.dtype] = None, pipeline_config: typing.Optional[typing.Union[str | fastvideo.configs.pipelines.PipelineConfig]] = None, **kwargs) -> fastvideo.entrypoints.video_generator.VideoGenerator +:canonical: fastvideo.entrypoints.video_generator.VideoGenerator.from_pretrained :classmethod: -```{autodoc2-docstring} fastvideo.v1.entrypoints.video_generator.VideoGenerator.from_pretrained +```{autodoc2-docstring} fastvideo.entrypoints.video_generator.VideoGenerator.from_pretrained :parser: docs.source.autodoc2_docstring_parser ``` @@ -38,25 +38,25 @@ The follow two classes `PipelineConfig` and `SamplingParam` are used to configur ``` `````{py:class} PipelineConfig -:canonical: fastvideo.v1.configs.pipelines.base.PipelineConfig +:canonical: fastvideo.configs.pipelines.base.PipelineConfig -```{autodoc2-docstring} fastvideo.v1.configs.pipelines.base.PipelineConfig +```{autodoc2-docstring} fastvideo.configs.pipelines.base.PipelineConfig :parser: docs.source.autodoc2_docstring_parser ``` -````{py:method} from_pretrained(model_path: str) -> fastvideo.v1.configs.pipelines.base.PipelineConfig -:canonical: fastvideo.v1.configs.pipelines.base.PipelineConfig.from_pretrained +````{py:method} from_pretrained(model_path: str) -> fastvideo.configs.pipelines.base.PipelineConfig +:canonical: fastvideo.configs.pipelines.base.PipelineConfig.from_pretrained :classmethod: -```{autodoc2-docstring} fastvideo.v1.configs.pipelines.base.PipelineConfig.from_pretrained +```{autodoc2-docstring} fastvideo.configs.pipelines.base.PipelineConfig.from_pretrained :parser: docs.source.autodoc2_docstring_parser ``` ````{py:method} dump_to_json(file_path: str) -:canonical: fastvideo.v1.configs.pipelines.base.PipelineConfig.dump_to_json +:canonical: fastvideo.configs.pipelines.base.PipelineConfig.dump_to_json -```{autodoc2-docstring} fastvideo.v1.configs.pipelines.base.PipelineConfig.dump_to_json +```{autodoc2-docstring} fastvideo.configs.pipelines.base.PipelineConfig.dump_to_json :parser: docs.source.autodoc2_docstring_parser ``` @@ -68,16 +68,16 @@ The follow two classes `PipelineConfig` and `SamplingParam` are used to configur ``` `````{py:class} SamplingParam -:canonical: fastvideo.v1.configs.sample.base.SamplingParam +:canonical: fastvideo.configs.sample.base.SamplingParam -```{autodoc2-docstring} fastvideo.v1.configs.sample.base.SamplingParam +```{autodoc2-docstring} fastvideo.configs.sample.base.SamplingParam :parser: docs.source.autodoc2_docstring_parser ``` -````{py:method} from_pretrained(model_path: str) -> fastvideo.v1.configs.sample.base.SamplingParam -:canonical: fastvideo.v1.configs.sample.base.SamplingParam.from_pretrained +````{py:method} from_pretrained(model_path: str) -> fastvideo.configs.sample.base.SamplingParam +:canonical: fastvideo.configs.sample.base.SamplingParam.from_pretrained :classmethod: -```{autodoc2-docstring} fastvideo.v1.configs.sample.base.SamplingParam.from_pretrained +```{autodoc2-docstring} fastvideo.configs.sample.base.SamplingParam.from_pretrained :parser: docs.source.autodoc2_docstring_parser ``` diff --git a/docs/source/inference/add_pipeline.md b/docs/source/inference/add_pipeline.md index c57305277..dafa5fadf 100644 --- a/docs/source/inference/add_pipeline.md +++ b/docs/source/inference/add_pipeline.md @@ -46,25 +46,25 @@ FastVideo uses the Hugging Face Diffusers format for model organization: ### Implementing Modules Place new modules in the appropriate directories: -- Encoders: `fastvideo/v1/models/encoders/` -- VAEs: `fastvideo/v1/models/vaes/` -- Transformer models: `fastvideo/v1/models/dits/` -- Schedulers: `fastvideo/v1/models/schedulers/` +- Encoders: `fastvideo/models/encoders/` +- VAEs: `fastvideo/models/vaes/` +- Transformer models: `fastvideo/models/dits/` +- Schedulers: `fastvideo/models/schedulers/` ### Adapting Model Layers #### Layer Replacements Replace standard PyTorch layers with FastVideo optimized versions: -- nn.LayerNorm → fastvideo.v1.layers.layernorm.RMSNorm -- Embedding layers → fastvideo.v1.layers.vocab_parallel_embedding modules -- Activation functions → versions from fastvideo.v1.layers.activation +- nn.LayerNorm → fastvideo.layers.layernorm.RMSNorm +- Embedding layers → fastvideo.layers.vocab_parallel_embedding modules +- Activation functions → versions from fastvideo.layers.activation #### Distributed Linear Layers Use appropriate parallel layers for distribution: ```python # Output dimension parallelism -from fastvideo.v1.layers.linear import ColumnParallelLinear +from fastvideo.layers.linear import ColumnParallelLinear self.q_proj = ColumnParallelLinear( input_size=hidden_size, output_size=head_size * num_heads, @@ -73,7 +73,7 @@ self.q_proj = ColumnParallelLinear( ) # Fused QKV projection -from fastvideo.v1.layers.linear import QKVParallelLinear +from fastvideo.layers.linear import QKVParallelLinear self.qkv_proj = QKVParallelLinear( hidden_size=hidden_size, head_size=attention_head_dim, @@ -82,7 +82,7 @@ self.qkv_proj = QKVParallelLinear( ) # Input dimension parallelism -from fastvideo.v1.layers.linear import RowParallelLinear +from fastvideo.layers.linear import RowParallelLinear self.out_proj = RowParallelLinear( input_size=head_size * num_heads, output_size=hidden_size, @@ -96,8 +96,8 @@ Replace standard attention with FastVideo's optimized attention: ```python # Local attention patterns -from fastvideo.v1.attention import LocalAttention -from fastvideo.v1.attention.backends.abstract import _Backend +from fastvideo.attention import LocalAttention +from fastvideo.attention.backends.abstract import _Backend self.attn = LocalAttention( num_heads=num_heads, head_size=head_dim, @@ -108,7 +108,7 @@ self.attn = LocalAttention( ) # Distributed attention for long sequences -from fastvideo.v1.attention import DistributedAttention +from fastvideo.attention import DistributedAttention self.attn = DistributedAttention( num_heads=num_heads, head_size=head_dim, @@ -130,7 +130,7 @@ self.attn = DistributedAttention( Register implemented modules in the model registry: ```python -# In fastvideo/v1/models/registry.py +# In fastvideo/models/registry.py _TEXT_TO_VIDEO_DIT_MODELS = { "YourTransformerModel": ("dits", "yourmodule", "YourTransformerClass"), } @@ -145,7 +145,7 @@ _VAE_MODELS = { Create a new directory for your pipeline: ``` -fastvideo/v1/pipelines/ +fastvideo/pipelines/ ├── your_pipeline/ │ ├── __init__.py │ └── your_pipeline.py @@ -167,13 +167,13 @@ Pipelines are composed of stages, each handling a specific part of the diffusion ### Creating Your Pipeline ```python -from fastvideo.v1.pipelines.composed_pipeline_base import ComposedPipelineBase -from fastvideo.v1.pipelines.stages import ( +from fastvideo.pipelines.composed_pipeline_base import ComposedPipelineBase +from fastvideo.pipelines.stages import ( InputValidationStage, CLIPTextEncodingStage, TimestepPreparationStage, LatentPreparationStage, DenoisingStage, DecodingStage ) -from fastvideo.v1.fastvideo_args import FastVideoArgs -from fastvideo.v1.pipelines.pipeline_batch_info import ForwardBatch +from fastvideo.fastvideo_args import FastVideoArgs +from fastvideo.pipelines.pipeline_batch_info import ForwardBatch import torch class MyCustomPipeline(ComposedPipelineBase): @@ -246,7 +246,7 @@ EntryClass = MyCustomPipeline If existing stages don't meet your needs, create custom ones: ```python -from fastvideo.v1.pipelines.stages.base import PipelineStage +from fastvideo.pipelines.stages.base import PipelineStage class MyCustomStage(PipelineStage): """Custom processing stage for the pipeline.""" @@ -305,7 +305,7 @@ EntryClass = [MyCustomPipeline, MyOtherPipeline] ``` The registry will automatically: -1. Scan all packages under `fastvideo/v1/pipelines/` +1. Scan all packages under `fastvideo/pipelines/` 2. Look for `EntryClass` variables 3. Register pipelines using their class names as identifiers diff --git a/examples/inference/basic/basic.py b/examples/inference/basic/basic.py index c97f59e56..c21ccfe8b 100644 --- a/examples/inference/basic/basic.py +++ b/examples/inference/basic/basic.py @@ -1,6 +1,6 @@ from fastvideo import VideoGenerator -# from fastvideo.v1.configs.sample import SamplingParam +# from fastvideo.configs.sample import SamplingParam OUTPUT_PATH = "video_samples" def main(): diff --git a/examples/inference/basic/basic_dmd.py b/examples/inference/basic/basic_dmd.py index 7724a1cf6..3579d592b 100644 --- a/examples/inference/basic/basic_dmd.py +++ b/examples/inference/basic/basic_dmd.py @@ -2,7 +2,7 @@ import os import time from fastvideo import VideoGenerator -from fastvideo.v1.configs.sample import SamplingParam +from fastvideo.configs.sample import SamplingParam OUTPUT_PATH = "video_samples_dmd2" def main(): diff --git a/examples/inference/basic/basic_mps.py b/examples/inference/basic/basic_mps.py index 44a38c23b..6a819969b 100644 --- a/examples/inference/basic/basic_mps.py +++ b/examples/inference/basic/basic_mps.py @@ -1,5 +1,5 @@ from fastvideo import VideoGenerator, PipelineConfig -from fastvideo.v1.configs.sample import SamplingParam +from fastvideo.configs.sample import SamplingParam def main(): config = PipelineConfig.from_pretrained("Wan-AI/Wan2.1-T2V-1.3B-Diffusers") diff --git a/examples/inference/basic/default_args.py b/examples/inference/basic/default_args.py index c4869b2f3..00d877255 100644 --- a/examples/inference/basic/default_args.py +++ b/examples/inference/basic/default_args.py @@ -1,5 +1,5 @@ from fastvideo import VideoGenerator -from fastvideo.v1.configs.pipelines.base import PipelineConfig +from fastvideo.configs.pipelines.base import PipelineConfig def main(): diff --git a/examples/inference/basic/test.py b/examples/inference/basic/test.py index 31dcc3662..f8f55e326 100644 --- a/examples/inference/basic/test.py +++ b/examples/inference/basic/test.py @@ -1,6 +1,6 @@ from fastvideo import VideoGenerator, PipelineConfig, SamplingParam -# from fastvideo.v1.configs.sample import SamplingParam +# from fastvideo.configs.sample import SamplingParam OUTPUT_PATH = "video_samples_fp16" def main(): diff --git a/examples/inference/gradio/gradio_demo.py b/examples/inference/gradio/gradio_demo.py index 68fc790f5..06340bae6 100644 --- a/examples/inference/gradio/gradio_demo.py +++ b/examples/inference/gradio/gradio_demo.py @@ -6,7 +6,7 @@ import gradio as gr import torch from fastvideo import VideoGenerator -from fastvideo.v1.configs.sample.base import SamplingParam +from fastvideo.configs.sample.base import SamplingParam if __name__ == "__main__": parser = argparse.ArgumentParser(description="FastVideo Gradio Demo") diff --git a/examples/inference/lora/wan_lora_inference.py b/examples/inference/lora/wan_lora_inference.py index 11c27ebef..74fa73328 100644 --- a/examples/inference/lora/wan_lora_inference.py +++ b/examples/inference/lora/wan_lora_inference.py @@ -1,5 +1,5 @@ from fastvideo import VideoGenerator -from fastvideo.v1.configs.sample import SamplingParam +from fastvideo.configs.sample import SamplingParam OUTPUT_PATH = "./lora_out" def main(): diff --git a/examples/inference/lora/wan_lora_inference_from_ckpt.py b/examples/inference/lora/wan_lora_inference_from_ckpt.py index 53e2cfc52..2972d11da 100644 --- a/examples/inference/lora/wan_lora_inference_from_ckpt.py +++ b/examples/inference/lora/wan_lora_inference_from_ckpt.py @@ -2,7 +2,7 @@ Inference using a LoRA checkpoint from FastVideo trainer. """ from fastvideo import VideoGenerator -from fastvideo.v1.configs.sample import SamplingParam +from fastvideo.configs.sample import SamplingParam OUTPUT_PATH = "./lora_out" def main(): diff --git a/examples/training/finetune/Wan2.1-Fun-1.3B-InP/crush_smol/finetune_i2v.sh b/examples/training/finetune/Wan2.1-Fun-1.3B-InP/crush_smol/finetune_i2v.sh index 28ae5f793..c730bcdc6 100644 --- a/examples/training/finetune/Wan2.1-Fun-1.3B-InP/crush_smol/finetune_i2v.sh +++ b/examples/training/finetune/Wan2.1-Fun-1.3B-InP/crush_smol/finetune_i2v.sh @@ -84,7 +84,7 @@ miscellaneous_args=( torchrun \ --nnodes 1 \ --nproc_per_node $NUM_GPUS \ - fastvideo/v1/training/wan_i2v_training_pipeline.py \ + fastvideo/training/wan_i2v_training_pipeline.py \ "${parallel_args[@]}" \ "${model_args[@]}" \ "${dataset_args[@]}" \ diff --git a/examples/training/finetune/Wan2.1-Fun-1.3B-InP/crush_smol/finetune_i2v.slurm b/examples/training/finetune/Wan2.1-Fun-1.3B-InP/crush_smol/finetune_i2v.slurm index 28a119f24..4329b835a 100644 --- a/examples/training/finetune/Wan2.1-Fun-1.3B-InP/crush_smol/finetune_i2v.slurm +++ b/examples/training/finetune/Wan2.1-Fun-1.3B-InP/crush_smol/finetune_i2v.slurm @@ -120,7 +120,7 @@ srun torchrun \ --node_rank $SLURM_PROCID \ --rdzv_backend=c10d \ --rdzv_endpoint="$MASTER_ADDR:$MASTER_PORT" \ - fastvideo/v1/training/wan_i2v_training_pipeline.py \ + fastvideo/training/wan_i2v_training_pipeline.py \ "${parallel_args[@]}" \ "${model_args[@]}" \ "${dataset_args[@]}" \ diff --git a/examples/training/finetune/Wan2.1-Fun-1.3B-InP/crush_smol/preprocess_wan_data_i2v.sh b/examples/training/finetune/Wan2.1-Fun-1.3B-InP/crush_smol/preprocess_wan_data_i2v.sh index 3d34c236f..2d508c964 100644 --- a/examples/training/finetune/Wan2.1-Fun-1.3B-InP/crush_smol/preprocess_wan_data_i2v.sh +++ b/examples/training/finetune/Wan2.1-Fun-1.3B-InP/crush_smol/preprocess_wan_data_i2v.sh @@ -7,7 +7,7 @@ DATA_MERGE_PATH="data/crush-smol/merge.txt" OUTPUT_DIR="data/crush-smol_processed_i2v_1_3b_inp/" torchrun --nproc_per_node=$GPU_NUM \ - fastvideo/v1/pipelines/preprocess/v1_preprocess.py \ + fastvideo/pipelines/preprocess/v1_preprocess.py \ --model_path $MODEL_PATH \ --data_merge_path $DATA_MERGE_PATH \ --preprocess_video_batch_size 8 \ diff --git a/examples/training/finetune/wan_i2v_14b_480p/crush_smol/finetune_i2v.sh b/examples/training/finetune/wan_i2v_14b_480p/crush_smol/finetune_i2v.sh index 83f0fa390..10da42ed2 100644 --- a/examples/training/finetune/wan_i2v_14b_480p/crush_smol/finetune_i2v.sh +++ b/examples/training/finetune/wan_i2v_14b_480p/crush_smol/finetune_i2v.sh @@ -84,7 +84,7 @@ miscellaneous_args=( torchrun \ --nnodes 1 \ --nproc_per_node $NUM_GPUS \ - fastvideo/v1/training/wan_i2v_training_pipeline.py \ + fastvideo/training/wan_i2v_training_pipeline.py \ "${parallel_args[@]}" \ "${model_args[@]}" \ "${dataset_args[@]}" \ diff --git a/examples/training/finetune/wan_i2v_14b_480p/crush_smol/finetune_i2v.slurm b/examples/training/finetune/wan_i2v_14b_480p/crush_smol/finetune_i2v.slurm index 84ba8eac3..467266fc3 100644 --- a/examples/training/finetune/wan_i2v_14b_480p/crush_smol/finetune_i2v.slurm +++ b/examples/training/finetune/wan_i2v_14b_480p/crush_smol/finetune_i2v.slurm @@ -120,7 +120,7 @@ srun torchrun \ --node_rank $SLURM_PROCID \ --rdzv_backend=c10d \ --rdzv_endpoint="$MASTER_ADDR:$MASTER_PORT" \ - fastvideo/v1/training/wan_i2v_training_pipeline.py \ + fastvideo/training/wan_i2v_training_pipeline.py \ "${parallel_args[@]}" \ "${model_args[@]}" \ "${dataset_args[@]}" \ diff --git a/examples/training/finetune/wan_i2v_14b_480p/crush_smol/finetune_i2v_lora.sh b/examples/training/finetune/wan_i2v_14b_480p/crush_smol/finetune_i2v_lora.sh index 9de244555..069286c64 100644 --- a/examples/training/finetune/wan_i2v_14b_480p/crush_smol/finetune_i2v_lora.sh +++ b/examples/training/finetune/wan_i2v_14b_480p/crush_smol/finetune_i2v_lora.sh @@ -83,7 +83,7 @@ miscellaneous_args=( torchrun \ --nnodes 1 \ --nproc_per_node $NUM_GPUS \ - fastvideo/v1/training/wan_i2v_training_pipeline.py \ + fastvideo/training/wan_i2v_training_pipeline.py \ "${parallel_args[@]}" \ "${model_args[@]}" \ "${dataset_args[@]}" \ diff --git a/examples/training/finetune/wan_i2v_14b_480p/crush_smol/preprocess_wan_data_i2v.sh b/examples/training/finetune/wan_i2v_14b_480p/crush_smol/preprocess_wan_data_i2v.sh index dcbbfc2f1..6baf813c2 100644 --- a/examples/training/finetune/wan_i2v_14b_480p/crush_smol/preprocess_wan_data_i2v.sh +++ b/examples/training/finetune/wan_i2v_14b_480p/crush_smol/preprocess_wan_data_i2v.sh @@ -7,7 +7,7 @@ DATA_MERGE_PATH="data/crush-smol/merge.txt" OUTPUT_DIR="data/crush-smol_processed_i2v/" torchrun --nproc_per_node=$GPU_NUM \ - fastvideo/v1/pipelines/preprocess/v1_preprocess.py \ + fastvideo/pipelines/preprocess/v1_preprocess.py \ --model_path $MODEL_PATH \ --data_merge_path $DATA_MERGE_PATH \ --preprocess_video_batch_size 8 \ diff --git a/examples/training/finetune/wan_t2v_1_3b/crush_smol/finetune_t2v.sh b/examples/training/finetune/wan_t2v_1_3b/crush_smol/finetune_t2v.sh index ba5c5c978..871b17510 100644 --- a/examples/training/finetune/wan_t2v_1_3b/crush_smol/finetune_t2v.sh +++ b/examples/training/finetune/wan_t2v_1_3b/crush_smol/finetune_t2v.sh @@ -83,7 +83,7 @@ miscellaneous_args=( torchrun \ --nnodes 1 \ --nproc_per_node $NUM_GPUS \ - fastvideo/v1/training/wan_training_pipeline.py \ + fastvideo/training/wan_training_pipeline.py \ "${parallel_args[@]}" \ "${model_args[@]}" \ "${dataset_args[@]}" \ diff --git a/examples/training/finetune/wan_t2v_1_3b/crush_smol/finetune_t2v.slurm b/examples/training/finetune/wan_t2v_1_3b/crush_smol/finetune_t2v.slurm index 1104fa892..8a9caed62 100644 --- a/examples/training/finetune/wan_t2v_1_3b/crush_smol/finetune_t2v.slurm +++ b/examples/training/finetune/wan_t2v_1_3b/crush_smol/finetune_t2v.slurm @@ -117,7 +117,7 @@ srun torchrun \ --node_rank $SLURM_PROCID \ --rdzv_backend=c10d \ --rdzv_endpoint="$MASTER_ADDR:$MASTER_PORT" \ - fastvideo/v1/training/wan_training_pipeline.py \ + fastvideo/training/wan_training_pipeline.py \ "${parallel_args[@]}" \ "${model_args[@]}" \ "${dataset_args[@]}" \ diff --git a/examples/training/finetune/wan_t2v_1_3b/crush_smol/finetune_t2v_lora.sh b/examples/training/finetune/wan_t2v_1_3b/crush_smol/finetune_t2v_lora.sh index 4a668c475..36781eedc 100644 --- a/examples/training/finetune/wan_t2v_1_3b/crush_smol/finetune_t2v_lora.sh +++ b/examples/training/finetune/wan_t2v_1_3b/crush_smol/finetune_t2v_lora.sh @@ -83,7 +83,7 @@ torchrun \ --nnodes 1 \ --nproc_per_node $NUM_GPUS \ --master_port 29501 \ - fastvideo/v1/training/wan_training_pipeline.py \ + fastvideo/training/wan_training_pipeline.py \ "${parallel_args[@]}" \ "${model_args[@]}" \ "${dataset_args[@]}" \ diff --git a/examples/training/finetune/wan_t2v_1_3b/crush_smol/preprocess_wan_data_t2v.sh b/examples/training/finetune/wan_t2v_1_3b/crush_smol/preprocess_wan_data_t2v.sh index 471f26cc5..2f1203060 100644 --- a/examples/training/finetune/wan_t2v_1_3b/crush_smol/preprocess_wan_data_t2v.sh +++ b/examples/training/finetune/wan_t2v_1_3b/crush_smol/preprocess_wan_data_t2v.sh @@ -7,7 +7,7 @@ DATA_MERGE_PATH="data/crush-smol/merge.txt" OUTPUT_DIR="data/crush-smol_processed_t2v/" torchrun --nproc_per_node=$GPU_NUM \ - fastvideo/v1/pipelines/preprocess/v1_preprocess.py \ + fastvideo/pipelines/preprocess/v1_preprocess.py \ --model_path $MODEL_PATH \ --data_merge_path $DATA_MERGE_PATH \ --preprocess_video_batch_size 8 \ diff --git a/fastvideo/v1/STA_configuration.py b/fastvideo/STA_configuration.py similarity index 99% rename from fastvideo/v1/STA_configuration.py rename to fastvideo/STA_configuration.py index 412b7e055..9111dcab3 100644 --- a/fastvideo/v1/STA_configuration.py +++ b/fastvideo/STA_configuration.py @@ -6,7 +6,7 @@ from typing import Any import numpy as np -from fastvideo.v1.utils import dict_to_3d_list +from fastvideo.utils import dict_to_3d_list def configure_sta(mode: str = 'STA_searching', diff --git a/fastvideo/__init__.py b/fastvideo/__init__.py index bbf0c877e..45fd11fa5 100644 --- a/fastvideo/__init__.py +++ b/fastvideo/__init__.py @@ -1,6 +1,6 @@ -from fastvideo.v1.configs.pipelines import PipelineConfig -from fastvideo.v1.configs.sample import SamplingParam -from fastvideo.v1.entrypoints.video_generator import VideoGenerator +from fastvideo.configs.pipelines import PipelineConfig +from fastvideo.configs.sample import SamplingParam +from fastvideo.entrypoints.video_generator import VideoGenerator from fastvideo.version import __version__ -__all__ = ["VideoGenerator", "PipelineConfig", "SamplingParam", "__version__"] +__all__ = ["VideoGenerator", "PipelineConfig", "SamplingParam", "__version__"] \ No newline at end of file diff --git a/fastvideo/attention/__init__.py b/fastvideo/attention/__init__.py new file mode 100644 index 000000000..245a1103b --- /dev/null +++ b/fastvideo/attention/__init__.py @@ -0,0 +1,19 @@ +# SPDX-License-Identifier: Apache-2.0 + +from fastvideo.attention.backends.abstract import (AttentionBackend, + AttentionMetadata, + AttentionMetadataBuilder) +from fastvideo.attention.layer import (DistributedAttention, + DistributedAttention_VSA, LocalAttention) +from fastvideo.attention.selector import get_attn_backend + +__all__ = [ + "DistributedAttention", + "LocalAttention", + "DistributedAttention_VSA", + "AttentionBackend", + "AttentionMetadata", + "AttentionMetadataBuilder", + # "AttentionState", + "get_attn_backend", +] diff --git a/fastvideo/v1/__init__.py b/fastvideo/attention/backends/__init__.py similarity index 100% rename from fastvideo/v1/__init__.py rename to fastvideo/attention/backends/__init__.py diff --git a/fastvideo/v1/attention/backends/abstract.py b/fastvideo/attention/backends/abstract.py similarity index 97% rename from fastvideo/v1/attention/backends/abstract.py rename to fastvideo/attention/backends/abstract.py index 9af8c397c..f015ea82e 100644 --- a/fastvideo/v1/attention/backends/abstract.py +++ b/fastvideo/attention/backends/abstract.py @@ -6,8 +6,8 @@ from dataclasses import dataclass, fields from typing import TYPE_CHECKING, Any, Generic, Protocol, TypeVar if TYPE_CHECKING: - from fastvideo.v1.fastvideo_args import FastVideoArgs - from fastvideo.v1.pipelines.pipeline_batch_info import ForwardBatch + from fastvideo.fastvideo_args import FastVideoArgs + from fastvideo.pipelines.pipeline_batch_info import ForwardBatch import torch diff --git a/fastvideo/v1/attention/backends/flash_attn.py b/fastvideo/attention/backends/flash_attn.py similarity index 84% rename from fastvideo/v1/attention/backends/flash_attn.py rename to fastvideo/attention/backends/flash_attn.py index 2e3296145..f33afd8ed 100644 --- a/fastvideo/v1/attention/backends/flash_attn.py +++ b/fastvideo/attention/backends/flash_attn.py @@ -12,11 +12,11 @@ try: except ImportError: flash_attn_func = flash_attn_2_func -from fastvideo.v1.attention.backends.abstract import (AttentionBackend, - AttentionImpl, - AttentionMetadata, - AttentionMetadataBuilder) -from fastvideo.v1.logger import init_logger +from fastvideo.attention.backends.abstract import (AttentionBackend, + AttentionImpl, + AttentionMetadata, + AttentionMetadataBuilder) +from fastvideo.logger import init_logger logger = init_logger(__name__) diff --git a/fastvideo/v1/attention/backends/sage_attn.py b/fastvideo/attention/backends/sage_attn.py similarity index 83% rename from fastvideo/v1/attention/backends/sage_attn.py rename to fastvideo/attention/backends/sage_attn.py index 08e723cfd..5db61f6ac 100644 --- a/fastvideo/v1/attention/backends/sage_attn.py +++ b/fastvideo/attention/backends/sage_attn.py @@ -3,11 +3,9 @@ import torch from sageattention import sageattn -from fastvideo.v1.attention.backends.abstract import ( - AttentionBackend) # FlashAttentionMetadata, -from fastvideo.v1.attention.backends.abstract import (AttentionImpl, - AttentionMetadata) -from fastvideo.v1.logger import init_logger +from fastvideo.attention.backends.abstract import ( # FlashAttentionMetadata, + AttentionBackend, AttentionImpl, AttentionMetadata) +from fastvideo.logger import init_logger logger = init_logger(__name__) diff --git a/fastvideo/v1/attention/backends/sdpa.py b/fastvideo/attention/backends/sdpa.py similarity index 85% rename from fastvideo/v1/attention/backends/sdpa.py rename to fastvideo/attention/backends/sdpa.py index fabfda788..782ffd9fc 100644 --- a/fastvideo/v1/attention/backends/sdpa.py +++ b/fastvideo/attention/backends/sdpa.py @@ -2,11 +2,9 @@ import torch -from fastvideo.v1.attention.backends.abstract import ( - AttentionBackend) # FlashAttentionMetadata, -from fastvideo.v1.attention.backends.abstract import (AttentionImpl, - AttentionMetadata) -from fastvideo.v1.logger import init_logger +from fastvideo.attention.backends.abstract import ( # FlashAttentionMetadata, + AttentionBackend, AttentionImpl, AttentionMetadata) +from fastvideo.logger import init_logger logger = init_logger(__name__) diff --git a/fastvideo/v1/attention/backends/sliding_tile_attn.py b/fastvideo/attention/backends/sliding_tile_attn.py similarity index 93% rename from fastvideo/v1/attention/backends/sliding_tile_attn.py rename to fastvideo/attention/backends/sliding_tile_attn.py index 72cbe5e72..1477de30c 100644 --- a/fastvideo/v1/attention/backends/sliding_tile_attn.py +++ b/fastvideo/attention/backends/sliding_tile_attn.py @@ -7,17 +7,17 @@ import torch from einops import rearrange from st_attn import sliding_tile_attention -import fastvideo.v1.envs as envs -from fastvideo.v1.attention.backends.abstract import (AttentionBackend, - AttentionImpl, - AttentionMetadata, - AttentionMetadataBuilder) -from fastvideo.v1.distributed import get_sp_group -from fastvideo.v1.fastvideo_args import FastVideoArgs -from fastvideo.v1.forward_context import ForwardContext, get_forward_context -from fastvideo.v1.logger import init_logger -from fastvideo.v1.pipelines.pipeline_batch_info import ForwardBatch -from fastvideo.v1.utils import dict_to_3d_list +import fastvideo.envs as envs +from fastvideo.attention.backends.abstract import (AttentionBackend, + AttentionImpl, + AttentionMetadata, + AttentionMetadataBuilder) +from fastvideo.distributed import get_sp_group +from fastvideo.fastvideo_args import FastVideoArgs +from fastvideo.forward_context import ForwardContext, get_forward_context +from fastvideo.logger import init_logger +from fastvideo.pipelines.pipeline_batch_info import ForwardBatch +from fastvideo.utils import dict_to_3d_list logger = init_logger(__name__) diff --git a/fastvideo/v1/attention/backends/video_sparse_attn.py b/fastvideo/attention/backends/video_sparse_attn.py similarity index 92% rename from fastvideo/v1/attention/backends/video_sparse_attn.py rename to fastvideo/attention/backends/video_sparse_attn.py index f0e5d5ea8..acb516d79 100644 --- a/fastvideo/v1/attention/backends/video_sparse_attn.py +++ b/fastvideo/attention/backends/video_sparse_attn.py @@ -10,14 +10,14 @@ try: except ImportError: video_sparse_attn = None -from fastvideo.v1.attention.backends.abstract import (AttentionBackend, - AttentionImpl, - AttentionMetadata, - AttentionMetadataBuilder) -from fastvideo.v1.distributed import get_sp_group -from fastvideo.v1.fastvideo_args import FastVideoArgs -from fastvideo.v1.logger import init_logger -from fastvideo.v1.pipelines.pipeline_batch_info import ForwardBatch +from fastvideo.attention.backends.abstract import (AttentionBackend, + AttentionImpl, + AttentionMetadata, + AttentionMetadataBuilder) +from fastvideo.distributed import get_sp_group +from fastvideo.fastvideo_args import FastVideoArgs +from fastvideo.logger import init_logger +from fastvideo.pipelines.pipeline_batch_info import ForwardBatch logger = init_logger(__name__) diff --git a/fastvideo/v1/attention/layer.py b/fastvideo/attention/layer.py similarity index 95% rename from fastvideo/v1/attention/layer.py rename to fastvideo/attention/layer.py index 130b6c382..8161d83f2 100644 --- a/fastvideo/v1/attention/layer.py +++ b/fastvideo/attention/layer.py @@ -3,15 +3,14 @@ import torch import torch.nn as nn -from fastvideo.v1.attention.selector import (backend_name_to_enum, - get_attn_backend) -from fastvideo.v1.distributed.communication_op import ( +from fastvideo.attention.selector import backend_name_to_enum, get_attn_backend +from fastvideo.distributed.communication_op import ( sequence_model_parallel_all_gather, sequence_model_parallel_all_to_all_4D) -from fastvideo.v1.distributed.parallel_state import (get_sp_parallel_rank, - get_sp_world_size) -from fastvideo.v1.forward_context import ForwardContext, get_forward_context -from fastvideo.v1.platforms import AttentionBackendEnum -from fastvideo.v1.utils import get_compute_dtype +from fastvideo.distributed.parallel_state import (get_sp_parallel_rank, + get_sp_world_size) +from fastvideo.forward_context import ForwardContext, get_forward_context +from fastvideo.platforms import AttentionBackendEnum +from fastvideo.utils import get_compute_dtype class DistributedAttention(nn.Module): diff --git a/fastvideo/v1/attention/selector.py b/fastvideo/attention/selector.py similarity index 94% rename from fastvideo/v1/attention/selector.py rename to fastvideo/attention/selector.py index 2b013822c..c93bdcac6 100644 --- a/fastvideo/v1/attention/selector.py +++ b/fastvideo/attention/selector.py @@ -9,11 +9,11 @@ from typing import cast import torch -import fastvideo.v1.envs as envs -from fastvideo.v1.attention.backends.abstract import AttentionBackend -from fastvideo.v1.logger import init_logger -from fastvideo.v1.platforms import AttentionBackendEnum, current_platform -from fastvideo.v1.utils import STR_BACKEND_ENV_VAR, resolve_obj_by_qualname +import fastvideo.envs as envs +from fastvideo.attention.backends.abstract import AttentionBackend +from fastvideo.logger import init_logger +from fastvideo.platforms import AttentionBackendEnum, current_platform +from fastvideo.utils import STR_BACKEND_ENV_VAR, resolve_obj_by_qualname logger = init_logger(__name__) diff --git a/fastvideo/v1/attention/backends/__init__.py b/fastvideo/configs/__init__.py similarity index 100% rename from fastvideo/v1/attention/backends/__init__.py rename to fastvideo/configs/__init__.py diff --git a/fastvideo/v1/configs/fasthunyuan_t2v.json b/fastvideo/configs/fasthunyuan_t2v.json similarity index 100% rename from fastvideo/v1/configs/fasthunyuan_t2v.json rename to fastvideo/configs/fasthunyuan_t2v.json diff --git a/fastvideo/configs/models/__init__.py b/fastvideo/configs/models/__init__.py new file mode 100644 index 000000000..286c6b9dd --- /dev/null +++ b/fastvideo/configs/models/__init__.py @@ -0,0 +1,6 @@ +from fastvideo.configs.models.base import ModelConfig +from fastvideo.configs.models.dits.base import DiTConfig +from fastvideo.configs.models.encoders.base import EncoderConfig +from fastvideo.configs.models.vaes.base import VAEConfig + +__all__ = ["ModelConfig", "VAEConfig", "DiTConfig", "EncoderConfig"] diff --git a/fastvideo/v1/configs/models/base.py b/fastvideo/configs/models/base.py similarity index 98% rename from fastvideo/v1/configs/models/base.py rename to fastvideo/configs/models/base.py index 094367256..39d00c178 100644 --- a/fastvideo/v1/configs/models/base.py +++ b/fastvideo/configs/models/base.py @@ -2,7 +2,7 @@ from dataclasses import dataclass, field, fields from typing import Any -from fastvideo.v1.logger import init_logger +from fastvideo.logger import init_logger logger = init_logger(__name__) diff --git a/fastvideo/configs/models/dits/__init__.py b/fastvideo/configs/models/dits/__init__.py new file mode 100644 index 000000000..72271a525 --- /dev/null +++ b/fastvideo/configs/models/dits/__init__.py @@ -0,0 +1,5 @@ +from fastvideo.configs.models.dits.hunyuanvideo import HunyuanVideoConfig +from fastvideo.configs.models.dits.stepvideo import StepVideoConfig +from fastvideo.configs.models.dits.wanvideo import WanVideoConfig + +__all__ = ["HunyuanVideoConfig", "WanVideoConfig", "StepVideoConfig"] diff --git a/fastvideo/v1/configs/models/dits/base.py b/fastvideo/configs/models/dits/base.py similarity index 91% rename from fastvideo/v1/configs/models/dits/base.py rename to fastvideo/configs/models/dits/base.py index f2484e9dc..6c103c683 100644 --- a/fastvideo/v1/configs/models/dits/base.py +++ b/fastvideo/configs/models/dits/base.py @@ -2,9 +2,9 @@ from dataclasses import dataclass, field from typing import Any -from fastvideo.v1.configs.models.base import ArchConfig, ModelConfig -from fastvideo.v1.layers.quantization import QuantizationConfig -from fastvideo.v1.platforms import AttentionBackendEnum +from fastvideo.configs.models.base import ArchConfig, ModelConfig +from fastvideo.layers.quantization import QuantizationConfig +from fastvideo.platforms import AttentionBackendEnum @dataclass diff --git a/fastvideo/v1/configs/models/dits/hunyuanvideo.py b/fastvideo/configs/models/dits/hunyuanvideo.py similarity index 99% rename from fastvideo/v1/configs/models/dits/hunyuanvideo.py rename to fastvideo/configs/models/dits/hunyuanvideo.py index 66f1a7445..72302ee12 100644 --- a/fastvideo/v1/configs/models/dits/hunyuanvideo.py +++ b/fastvideo/configs/models/dits/hunyuanvideo.py @@ -3,7 +3,7 @@ from dataclasses import dataclass, field import torch -from fastvideo.v1.configs.models.dits.base import DiTArchConfig, DiTConfig +from fastvideo.configs.models.dits.base import DiTArchConfig, DiTConfig def is_double_block(n: str, m) -> bool: diff --git a/fastvideo/v1/configs/models/dits/stepvideo.py b/fastvideo/configs/models/dits/stepvideo.py similarity index 96% rename from fastvideo/v1/configs/models/dits/stepvideo.py rename to fastvideo/configs/models/dits/stepvideo.py index 254ac3f01..fb4b0336d 100644 --- a/fastvideo/v1/configs/models/dits/stepvideo.py +++ b/fastvideo/configs/models/dits/stepvideo.py @@ -1,7 +1,7 @@ # SPDX-License-Identifier: Apache-2.0 from dataclasses import dataclass, field -from fastvideo.v1.configs.models.dits.base import DiTArchConfig, DiTConfig +from fastvideo.configs.models.dits.base import DiTArchConfig, DiTConfig @dataclass diff --git a/fastvideo/v1/configs/models/dits/wanvideo.py b/fastvideo/configs/models/dits/wanvideo.py similarity index 98% rename from fastvideo/v1/configs/models/dits/wanvideo.py rename to fastvideo/configs/models/dits/wanvideo.py index 8884f40c3..aeca783ac 100644 --- a/fastvideo/v1/configs/models/dits/wanvideo.py +++ b/fastvideo/configs/models/dits/wanvideo.py @@ -1,7 +1,7 @@ # SPDX-License-Identifier: Apache-2.0 from dataclasses import dataclass, field -from fastvideo.v1.configs.models.dits.base import DiTArchConfig, DiTConfig +from fastvideo.configs.models.dits.base import DiTArchConfig, DiTConfig def is_blocks(n: str, m) -> bool: diff --git a/fastvideo/configs/models/encoders/__init__.py b/fastvideo/configs/models/encoders/__init__.py new file mode 100644 index 000000000..f783a2106 --- /dev/null +++ b/fastvideo/configs/models/encoders/__init__.py @@ -0,0 +1,14 @@ +from fastvideo.configs.models.encoders.base import (BaseEncoderOutput, + EncoderConfig, + ImageEncoderConfig, + TextEncoderConfig) +from fastvideo.configs.models.encoders.clip import (CLIPTextConfig, + CLIPVisionConfig) +from fastvideo.configs.models.encoders.llama import LlamaConfig +from fastvideo.configs.models.encoders.t5 import T5Config + +__all__ = [ + "EncoderConfig", "TextEncoderConfig", "ImageEncoderConfig", + "BaseEncoderOutput", "CLIPTextConfig", "CLIPVisionConfig", "LlamaConfig", + "T5Config" +] diff --git a/fastvideo/v1/configs/models/encoders/base.py b/fastvideo/configs/models/encoders/base.py similarity index 92% rename from fastvideo/v1/configs/models/encoders/base.py rename to fastvideo/configs/models/encoders/base.py index bdcf5bbb6..33b2b4c1c 100644 --- a/fastvideo/v1/configs/models/encoders/base.py +++ b/fastvideo/configs/models/encoders/base.py @@ -4,9 +4,9 @@ from typing import Any import torch -from fastvideo.v1.configs.models.base import ArchConfig, ModelConfig -from fastvideo.v1.layers.quantization import QuantizationConfig -from fastvideo.v1.platforms import AttentionBackendEnum +from fastvideo.configs.models.base import ArchConfig, ModelConfig +from fastvideo.layers.quantization import QuantizationConfig +from fastvideo.platforms import AttentionBackendEnum @dataclass diff --git a/fastvideo/v1/configs/models/encoders/clip.py b/fastvideo/configs/models/encoders/clip.py similarity index 90% rename from fastvideo/v1/configs/models/encoders/clip.py rename to fastvideo/configs/models/encoders/clip.py index e190849e2..a7d313a86 100644 --- a/fastvideo/v1/configs/models/encoders/clip.py +++ b/fastvideo/configs/models/encoders/clip.py @@ -1,10 +1,10 @@ # SPDX-License-Identifier: Apache-2.0 from dataclasses import dataclass, field -from fastvideo.v1.configs.models.encoders.base import (ImageEncoderArchConfig, - ImageEncoderConfig, - TextEncoderArchConfig, - TextEncoderConfig) +from fastvideo.configs.models.encoders.base import (ImageEncoderArchConfig, + ImageEncoderConfig, + TextEncoderArchConfig, + TextEncoderConfig) def _is_transformer_layer(n: str, m) -> bool: diff --git a/fastvideo/v1/configs/models/encoders/llama.py b/fastvideo/configs/models/encoders/llama.py similarity index 92% rename from fastvideo/v1/configs/models/encoders/llama.py rename to fastvideo/configs/models/encoders/llama.py index 680d749cf..53fc21e74 100644 --- a/fastvideo/v1/configs/models/encoders/llama.py +++ b/fastvideo/configs/models/encoders/llama.py @@ -1,8 +1,8 @@ # SPDX-License-Identifier: Apache-2.0 from dataclasses import dataclass, field -from fastvideo.v1.configs.models.encoders.base import (TextEncoderArchConfig, - TextEncoderConfig) +from fastvideo.configs.models.encoders.base import (TextEncoderArchConfig, + TextEncoderConfig) def _is_transformer_layer(n: str, m) -> bool: diff --git a/fastvideo/v1/configs/models/encoders/t5.py b/fastvideo/configs/models/encoders/t5.py similarity index 94% rename from fastvideo/v1/configs/models/encoders/t5.py rename to fastvideo/configs/models/encoders/t5.py index 2596169c4..70649551b 100644 --- a/fastvideo/v1/configs/models/encoders/t5.py +++ b/fastvideo/configs/models/encoders/t5.py @@ -1,8 +1,8 @@ # SPDX-License-Identifier: Apache-2.0 from dataclasses import dataclass, field -from fastvideo.v1.configs.models.encoders.base import (TextEncoderArchConfig, - TextEncoderConfig) +from fastvideo.configs.models.encoders.base import (TextEncoderArchConfig, + TextEncoderConfig) def _is_transformer_layer(n: str, m) -> bool: diff --git a/fastvideo/configs/models/vaes/__init__.py b/fastvideo/configs/models/vaes/__init__.py new file mode 100644 index 000000000..700c8de1b --- /dev/null +++ b/fastvideo/configs/models/vaes/__init__.py @@ -0,0 +1,9 @@ +from fastvideo.configs.models.vaes.hunyuanvae import HunyuanVAEConfig +from fastvideo.configs.models.vaes.stepvideovae import StepVideoVAEConfig +from fastvideo.configs.models.vaes.wanvae import WanVAEConfig + +__all__ = [ + "HunyuanVAEConfig", + "WanVAEConfig", + "StepVideoVAEConfig", +] diff --git a/fastvideo/v1/configs/models/vaes/base.py b/fastvideo/configs/models/vaes/base.py similarity index 97% rename from fastvideo/v1/configs/models/vaes/base.py rename to fastvideo/configs/models/vaes/base.py index e2cb517f8..7bff6d823 100644 --- a/fastvideo/v1/configs/models/vaes/base.py +++ b/fastvideo/configs/models/vaes/base.py @@ -6,8 +6,8 @@ from typing import Any import torch -from fastvideo.v1.configs.models.base import ArchConfig, ModelConfig -from fastvideo.v1.utils import StoreBoolean +from fastvideo.configs.models.base import ArchConfig, ModelConfig +from fastvideo.utils import StoreBoolean @dataclass diff --git a/fastvideo/v1/configs/models/vaes/hunyuanvae.py b/fastvideo/configs/models/vaes/hunyuanvae.py similarity index 94% rename from fastvideo/v1/configs/models/vaes/hunyuanvae.py rename to fastvideo/configs/models/vaes/hunyuanvae.py index d02879921..2506216af 100644 --- a/fastvideo/v1/configs/models/vaes/hunyuanvae.py +++ b/fastvideo/configs/models/vaes/hunyuanvae.py @@ -1,7 +1,7 @@ # SPDX-License-Identifier: Apache-2.0 from dataclasses import dataclass, field -from fastvideo.v1.configs.models.vaes.base import VAEArchConfig, VAEConfig +from fastvideo.configs.models.vaes.base import VAEArchConfig, VAEConfig @dataclass diff --git a/fastvideo/v1/configs/models/vaes/stepvideovae.py b/fastvideo/configs/models/vaes/stepvideovae.py similarity index 90% rename from fastvideo/v1/configs/models/vaes/stepvideovae.py rename to fastvideo/configs/models/vaes/stepvideovae.py index 34fc1894a..b1cf02cec 100644 --- a/fastvideo/v1/configs/models/vaes/stepvideovae.py +++ b/fastvideo/configs/models/vaes/stepvideovae.py @@ -1,7 +1,7 @@ # SPDX-License-Identifier: Apache-2.0 from dataclasses import dataclass, field -from fastvideo.v1.configs.models.vaes.base import VAEArchConfig, VAEConfig +from fastvideo.configs.models.vaes.base import VAEArchConfig, VAEConfig @dataclass diff --git a/fastvideo/v1/configs/models/vaes/wanvae.py b/fastvideo/configs/models/vaes/wanvae.py similarity index 95% rename from fastvideo/v1/configs/models/vaes/wanvae.py rename to fastvideo/configs/models/vaes/wanvae.py index c8496baa6..00b9f2a38 100644 --- a/fastvideo/v1/configs/models/vaes/wanvae.py +++ b/fastvideo/configs/models/vaes/wanvae.py @@ -3,7 +3,7 @@ from dataclasses import dataclass, field import torch -from fastvideo.v1.configs.models.vaes.base import VAEArchConfig, VAEConfig +from fastvideo.configs.models.vaes.base import VAEArchConfig, VAEConfig @dataclass diff --git a/fastvideo/configs/pipelines/__init__.py b/fastvideo/configs/pipelines/__init__.py new file mode 100644 index 000000000..82721919a --- /dev/null +++ b/fastvideo/configs/pipelines/__init__.py @@ -0,0 +1,15 @@ +from fastvideo.configs.pipelines.base import (PipelineConfig, + SlidingTileAttnConfig) +from fastvideo.configs.pipelines.hunyuan import FastHunyuanConfig, HunyuanConfig +from fastvideo.configs.pipelines.registry import ( + get_pipeline_config_cls_from_name) +from fastvideo.configs.pipelines.stepvideo import StepVideoT2VConfig +from fastvideo.configs.pipelines.wan import (WanI2V480PConfig, WanI2V720PConfig, + WanT2V480PConfig, WanT2V720PConfig) + +__all__ = [ + "HunyuanConfig", "FastHunyuanConfig", "PipelineConfig", + "SlidingTileAttnConfig", "WanT2V480PConfig", "WanI2V480PConfig", + "WanT2V720PConfig", "WanI2V720PConfig", "StepVideoT2VConfig", + "get_pipeline_config_cls_from_name" +] diff --git a/fastvideo/v1/configs/pipelines/base.py b/fastvideo/configs/pipelines/base.py similarity index 95% rename from fastvideo/v1/configs/pipelines/base.py rename to fastvideo/configs/pipelines/base.py index 92aa7aefc..7f12e97f5 100644 --- a/fastvideo/v1/configs/pipelines/base.py +++ b/fastvideo/configs/pipelines/base.py @@ -7,13 +7,12 @@ from typing import Any, cast import torch -from fastvideo.v1.configs.models import (DiTConfig, EncoderConfig, ModelConfig, - VAEConfig) -from fastvideo.v1.configs.models.encoders import BaseEncoderOutput -from fastvideo.v1.configs.utils import update_config_from_args -from fastvideo.v1.logger import init_logger -from fastvideo.v1.utils import (FlexibleArgumentParser, StoreBoolean, - shallow_asdict) +from fastvideo.configs.models import (DiTConfig, EncoderConfig, ModelConfig, + VAEConfig) +from fastvideo.configs.models.encoders import BaseEncoderOutput +from fastvideo.configs.utils import update_config_from_args +from fastvideo.logger import init_logger +from fastvideo.utils import FlexibleArgumentParser, StoreBoolean, shallow_asdict logger = init_logger(__name__) @@ -213,11 +212,11 @@ class PipelineConfig: ) # Add VAE configuration arguments - from fastvideo.v1.configs.models.vaes.base import VAEConfig + from fastvideo.configs.models.vaes.base import VAEConfig VAEConfig.add_cli_args(parser, prefix=f"{prefix_with_dot}vae-config") # Add DiT configuration arguments - from fastvideo.v1.configs.models.dits.base import DiTConfig + from fastvideo.configs.models.dits.base import DiTConfig DiTConfig.add_cli_args(parser, prefix=f"{prefix_with_dot}dit-config") return parser @@ -241,7 +240,7 @@ class PipelineConfig: """ use the pipeline class setting from model_path to match the pipeline config """ - from fastvideo.v1.configs.pipelines.registry import ( + from fastvideo.configs.pipelines.registry import ( get_pipeline_config_cls_from_name) pipeline_config_cls = get_pipeline_config_cls_from_name(model_path) @@ -256,7 +255,7 @@ class PipelineConfig: kwargs: dictionary of kwargs config_cli_prefix: prefix of CLI arguments for this PipelineConfig instance """ - from fastvideo.v1.configs.pipelines.registry import ( + from fastvideo.configs.pipelines.registry import ( get_pipeline_config_cls_from_name) prefix_with_dot = f"{config_cli_prefix}." if (config_cli_prefix.strip() diff --git a/fastvideo/v1/configs/pipelines/hunyuan.py b/fastvideo/configs/pipelines/hunyuan.py similarity index 88% rename from fastvideo/v1/configs/pipelines/hunyuan.py rename to fastvideo/configs/pipelines/hunyuan.py index bac7c445a..4a6c41a74 100644 --- a/fastvideo/v1/configs/pipelines/hunyuan.py +++ b/fastvideo/configs/pipelines/hunyuan.py @@ -5,12 +5,12 @@ from typing import TypedDict import torch -from fastvideo.v1.configs.models import DiTConfig, EncoderConfig, VAEConfig -from fastvideo.v1.configs.models.dits import HunyuanVideoConfig -from fastvideo.v1.configs.models.encoders import (BaseEncoderOutput, - CLIPTextConfig, LlamaConfig) -from fastvideo.v1.configs.models.vaes import HunyuanVAEConfig -from fastvideo.v1.configs.pipelines.base import PipelineConfig +from fastvideo.configs.models import DiTConfig, EncoderConfig, VAEConfig +from fastvideo.configs.models.dits import HunyuanVideoConfig +from fastvideo.configs.models.encoders import (BaseEncoderOutput, + CLIPTextConfig, LlamaConfig) +from fastvideo.configs.models.vaes import HunyuanVAEConfig +from fastvideo.configs.pipelines.base import PipelineConfig PROMPT_TEMPLATE_ENCODE_VIDEO = ( "<|start_header_id|>system<|end_header_id|>\n\nDescribe the video by detailing the following aspects: " diff --git a/fastvideo/v1/configs/pipelines/registry.py b/fastvideo/configs/pipelines/registry.py similarity index 86% rename from fastvideo/v1/configs/pipelines/registry.py rename to fastvideo/configs/pipelines/registry.py index 801d34c61..e2d4bbab3 100644 --- a/fastvideo/v1/configs/pipelines/registry.py +++ b/fastvideo/configs/pipelines/registry.py @@ -4,18 +4,15 @@ import os from collections.abc import Callable -from fastvideo.v1.configs.pipelines.base import PipelineConfig -from fastvideo.v1.configs.pipelines.hunyuan import (FastHunyuanConfig, - HunyuanConfig) -from fastvideo.v1.configs.pipelines.stepvideo import StepVideoT2VConfig -from fastvideo.v1.configs.pipelines.wan import (FastWanT2V480PConfig, - WanI2V480PConfig, - WanI2V720PConfig, - WanT2V480PConfig, - WanT2V720PConfig) -from fastvideo.v1.logger import init_logger -from fastvideo.v1.utils import (maybe_download_model_index, - verify_model_config_and_directory) +from fastvideo.configs.pipelines.base import PipelineConfig +from fastvideo.configs.pipelines.hunyuan import FastHunyuanConfig, HunyuanConfig +from fastvideo.configs.pipelines.stepvideo import StepVideoT2VConfig +from fastvideo.configs.pipelines.wan import (FastWanT2V480PConfig, + WanI2V480PConfig, WanI2V720PConfig, + WanT2V480PConfig, WanT2V720PConfig) +from fastvideo.logger import init_logger +from fastvideo.utils import (maybe_download_model_index, + verify_model_config_and_directory) logger = init_logger(__name__) diff --git a/fastvideo/v1/configs/pipelines/stepvideo.py b/fastvideo/configs/pipelines/stepvideo.py similarity index 80% rename from fastvideo/v1/configs/pipelines/stepvideo.py rename to fastvideo/configs/pipelines/stepvideo.py index 296ab00f2..919ccb0ee 100644 --- a/fastvideo/v1/configs/pipelines/stepvideo.py +++ b/fastvideo/configs/pipelines/stepvideo.py @@ -1,10 +1,10 @@ # SPDX-License-Identifier: Apache-2.0 from dataclasses import dataclass, field -from fastvideo.v1.configs.models import DiTConfig, VAEConfig -from fastvideo.v1.configs.models.dits import StepVideoConfig -from fastvideo.v1.configs.models.vaes import StepVideoVAEConfig -from fastvideo.v1.configs.pipelines.base import PipelineConfig +from fastvideo.configs.models import DiTConfig, VAEConfig +from fastvideo.configs.models.dits import StepVideoConfig +from fastvideo.configs.models.vaes import StepVideoVAEConfig +from fastvideo.configs.pipelines.base import PipelineConfig @dataclass diff --git a/fastvideo/v1/configs/pipelines/wan.py b/fastvideo/configs/pipelines/wan.py similarity index 88% rename from fastvideo/v1/configs/pipelines/wan.py rename to fastvideo/configs/pipelines/wan.py index c9d23ac0f..52915ba78 100644 --- a/fastvideo/v1/configs/pipelines/wan.py +++ b/fastvideo/configs/pipelines/wan.py @@ -4,12 +4,12 @@ from dataclasses import dataclass, field import torch -from fastvideo.v1.configs.models import DiTConfig, EncoderConfig, VAEConfig -from fastvideo.v1.configs.models.dits import WanVideoConfig -from fastvideo.v1.configs.models.encoders import (BaseEncoderOutput, - CLIPVisionConfig, T5Config) -from fastvideo.v1.configs.models.vaes import WanVAEConfig -from fastvideo.v1.configs.pipelines.base import PipelineConfig +from fastvideo.configs.models import DiTConfig, EncoderConfig, VAEConfig +from fastvideo.configs.models.dits import WanVideoConfig +from fastvideo.configs.models.encoders import (BaseEncoderOutput, + CLIPVisionConfig, T5Config) +from fastvideo.configs.models.vaes import WanVAEConfig +from fastvideo.configs.pipelines.base import PipelineConfig def t5_postprocess_text(outputs: BaseEncoderOutput) -> torch.tensor: diff --git a/fastvideo/configs/sample/__init__.py b/fastvideo/configs/sample/__init__.py new file mode 100644 index 000000000..92765fb63 --- /dev/null +++ b/fastvideo/configs/sample/__init__.py @@ -0,0 +1,3 @@ +from fastvideo.configs.sample.base import SamplingParam + +__all__ = ["SamplingParam"] diff --git a/fastvideo/v1/configs/sample/base.py b/fastvideo/configs/sample/base.py similarity index 98% rename from fastvideo/v1/configs/sample/base.py rename to fastvideo/configs/sample/base.py index 6e16a1824..934497507 100644 --- a/fastvideo/v1/configs/sample/base.py +++ b/fastvideo/configs/sample/base.py @@ -2,7 +2,7 @@ from dataclasses import dataclass from typing import Any -from fastvideo.v1.logger import init_logger +from fastvideo.logger import init_logger logger = init_logger(__name__) @@ -66,7 +66,7 @@ class SamplingParam: @classmethod def from_pretrained(cls, model_path: str) -> "SamplingParam": - from fastvideo.v1.configs.sample.registry import ( + from fastvideo.configs.sample.registry import ( get_sampling_param_cls_for_name) sampling_cls = get_sampling_param_cls_for_name(model_path) if sampling_cls is not None: diff --git a/fastvideo/v1/configs/sample/hunyuan.py b/fastvideo/configs/sample/hunyuan.py similarity index 84% rename from fastvideo/v1/configs/sample/hunyuan.py rename to fastvideo/configs/sample/hunyuan.py index 5aa406664..49d01fbfe 100644 --- a/fastvideo/v1/configs/sample/hunyuan.py +++ b/fastvideo/configs/sample/hunyuan.py @@ -1,8 +1,8 @@ # SPDX-License-Identifier: Apache-2.0 from dataclasses import dataclass, field -from fastvideo.v1.configs.sample.base import SamplingParam -from fastvideo.v1.configs.sample.teacache import TeaCacheParams +from fastvideo.configs.sample.base import SamplingParam +from fastvideo.configs.sample.teacache import TeaCacheParams @dataclass diff --git a/fastvideo/v1/configs/sample/registry.py b/fastvideo/configs/sample/registry.py similarity index 81% rename from fastvideo/v1/configs/sample/registry.py rename to fastvideo/configs/sample/registry.py index b1df34675..e6c0fe88a 100644 --- a/fastvideo/v1/configs/sample/registry.py +++ b/fastvideo/configs/sample/registry.py @@ -3,17 +3,17 @@ import os from collections.abc import Callable from typing import Any -from fastvideo.v1.configs.sample.hunyuan import (FastHunyuanSamplingParam, - HunyuanSamplingParam) -from fastvideo.v1.configs.sample.stepvideo import StepVideoT2VSamplingParam -from fastvideo.v1.configs.sample.wan import (FastWanT2V480PConfig, - WanI2V_14B_480P_SamplingParam, - WanI2V_14B_720P_SamplingParam, - WanT2V_1_3B_SamplingParam, - WanT2V_14B_SamplingParam) -from fastvideo.v1.logger import init_logger -from fastvideo.v1.utils import (maybe_download_model_index, - verify_model_config_and_directory) +from fastvideo.configs.sample.hunyuan import (FastHunyuanSamplingParam, + HunyuanSamplingParam) +from fastvideo.configs.sample.stepvideo import StepVideoT2VSamplingParam +from fastvideo.configs.sample.wan import (FastWanT2V480PConfig, + WanI2V_14B_480P_SamplingParam, + WanI2V_14B_720P_SamplingParam, + WanT2V_1_3B_SamplingParam, + WanT2V_14B_SamplingParam) +from fastvideo.logger import init_logger +from fastvideo.utils import (maybe_download_model_index, + verify_model_config_and_directory) logger = init_logger(__name__) # Registry maps specific model weights to their config classes diff --git a/fastvideo/v1/configs/sample/stepvideo.py b/fastvideo/configs/sample/stepvideo.py similarity index 92% rename from fastvideo/v1/configs/sample/stepvideo.py rename to fastvideo/configs/sample/stepvideo.py index dc3f4f9c8..ef0fee49a 100644 --- a/fastvideo/v1/configs/sample/stepvideo.py +++ b/fastvideo/configs/sample/stepvideo.py @@ -1,7 +1,7 @@ # SPDX-License-Identifier: Apache-2.0 from dataclasses import dataclass -from fastvideo.v1.configs.sample.base import SamplingParam +from fastvideo.configs.sample.base import SamplingParam @dataclass diff --git a/fastvideo/v1/configs/sample/teacache.py b/fastvideo/configs/sample/teacache.py similarity index 95% rename from fastvideo/v1/configs/sample/teacache.py rename to fastvideo/configs/sample/teacache.py index 49ea071cf..060353074 100644 --- a/fastvideo/v1/configs/sample/teacache.py +++ b/fastvideo/configs/sample/teacache.py @@ -1,7 +1,7 @@ # SPDX-License-Identifier: Apache-2.0 from dataclasses import dataclass, field -from fastvideo.v1.configs.sample.base import CacheParams +from fastvideo.configs.sample.base import CacheParams @dataclass diff --git a/fastvideo/v1/configs/sample/wan.py b/fastvideo/configs/sample/wan.py similarity index 96% rename from fastvideo/v1/configs/sample/wan.py rename to fastvideo/configs/sample/wan.py index c3e6b6ed3..7708095ae 100644 --- a/fastvideo/v1/configs/sample/wan.py +++ b/fastvideo/configs/sample/wan.py @@ -1,8 +1,8 @@ # SPDX-License-Identifier: Apache-2.0 from dataclasses import dataclass, field -from fastvideo.v1.configs.sample.base import SamplingParam -from fastvideo.v1.configs.sample.teacache import WanTeaCacheParams +from fastvideo.configs.sample.base import SamplingParam +from fastvideo.configs.sample.teacache import WanTeaCacheParams @dataclass diff --git a/fastvideo/v1/configs/utils.py b/fastvideo/configs/utils.py similarity index 100% rename from fastvideo/v1/configs/utils.py rename to fastvideo/configs/utils.py diff --git a/fastvideo/v1/configs/wan_1.3B_t2v_pipeline.json b/fastvideo/configs/wan_1.3B_t2v_pipeline.json similarity index 100% rename from fastvideo/v1/configs/wan_1.3B_t2v_pipeline.json rename to fastvideo/configs/wan_1.3B_t2v_pipeline.json diff --git a/fastvideo/v1/configs/wan_14B_i2v_480p_pipeline.json b/fastvideo/configs/wan_14B_i2v_480p_pipeline.json similarity index 100% rename from fastvideo/v1/configs/wan_14B_i2v_480p_pipeline.json rename to fastvideo/configs/wan_14B_i2v_480p_pipeline.json diff --git a/fastvideo/v1/dataset/__init__.py b/fastvideo/dataset/__init__.py similarity index 77% rename from fastvideo/v1/dataset/__init__.py rename to fastvideo/dataset/__init__.py index fde109c9b..7597a4560 100644 --- a/fastvideo/v1/dataset/__init__.py +++ b/fastvideo/dataset/__init__.py @@ -2,13 +2,12 @@ from torchvision import transforms from torchvision.transforms import Lambda -from fastvideo.v1.dataset.parquet_dataset_map_style import ( +from fastvideo.dataset.parquet_dataset_map_style import ( build_parquet_map_style_dataloader) -from fastvideo.v1.dataset.preprocessing_datasets import ( - VideoCaptionMergedDataset) -from fastvideo.v1.dataset.transform import (CenterCropResizeVideo, Normalize255, - TemporalRandomCrop) -from fastvideo.v1.dataset.validation_dataset import ValidationDataset +from fastvideo.dataset.preprocessing_datasets import VideoCaptionMergedDataset +from fastvideo.dataset.transform import (CenterCropResizeVideo, Normalize255, + TemporalRandomCrop) +from fastvideo.dataset.validation_dataset import ValidationDataset def getdataset(args) -> VideoCaptionMergedDataset: diff --git a/fastvideo/v1/dataset/benchmarks/benchmark_parquet_dataset_iterable_style.py b/fastvideo/dataset/benchmarks/benchmark_parquet_dataset_iterable_style.py similarity index 86% rename from fastvideo/v1/dataset/benchmarks/benchmark_parquet_dataset_iterable_style.py rename to fastvideo/dataset/benchmarks/benchmark_parquet_dataset_iterable_style.py index e62a38044..893d81459 100644 --- a/fastvideo/v1/dataset/benchmarks/benchmark_parquet_dataset_iterable_style.py +++ b/fastvideo/dataset/benchmarks/benchmark_parquet_dataset_iterable_style.py @@ -7,13 +7,13 @@ import time import torch.distributed as dist import torch.distributed.checkpoint as dist_cp -from fastvideo.v1.dataset.parquet_dataset_iterable_style import ( +from fastvideo.dataset.parquet_dataset_iterable_style import ( build_parquet_iterable_style_dataloader) -from fastvideo.v1.distributed import get_world_rank -from fastvideo.v1.distributed.parallel_state import ( +from fastvideo.distributed import get_world_rank +from fastvideo.distributed.parallel_state import ( cleanup_dist_env_and_memory, get_local_torch_device, maybe_init_distributed_environment_and_model_parallel) -from fastvideo.v1.logger import init_logger +from fastvideo.logger import init_logger logger = init_logger(__name__) @@ -52,9 +52,9 @@ def main() -> None: help='Path to save/load checkpoint') ''' example launch command: - torchrun --nproc_per_node=1 --master_port=12358 fastvideo/v1/dataset/benchmarks/benchmark_parquet_dataset_iterable_style.py --path data/crush-smol/latents/combined_parquet_dataset --batch_size 2 --num_data_workers 2 --num_epoch 2 --num_batches_per_epoch 2 --verify_resume - torchrun --nproc_per_node=8 --master_port=12358 fastvideo/v1/dataset/benchmarks/benchmark_parquet_dataset_iterable_style.py --path data/crush-smol/latents/combined_parquet_dataset --batch_size 2 --num_data_workers 1 --num_epoch 2 --num_batches_per_epoch 5 --verify_resume - torchrun --nproc_per_node=8 --master_port=12358 fastvideo/v1/dataset/benchmarks/benchmark_parquet_dataset_iterable_style.py --path /mnt/sharefs/users/hao.zhang/Vchitect-2M/Wan-Syn/latents/ --batch_size 2 --num_data_workers 4 --num_epoch 2 --num_batches_per_epoch 100 + torchrun --nproc_per_node=1 --master_port=12358 fastvideo/dataset/benchmarks/benchmark_parquet_dataset_iterable_style.py --path data/crush-smol/latents/combined_parquet_dataset --batch_size 2 --num_data_workers 2 --num_epoch 2 --num_batches_per_epoch 2 --verify_resume + torchrun --nproc_per_node=8 --master_port=12358 fastvideo/dataset/benchmarks/benchmark_parquet_dataset_iterable_style.py --path data/crush-smol/latents/combined_parquet_dataset --batch_size 2 --num_data_workers 1 --num_epoch 2 --num_batches_per_epoch 5 --verify_resume + torchrun --nproc_per_node=8 --master_port=12358 fastvideo/dataset/benchmarks/benchmark_parquet_dataset_iterable_style.py --path /mnt/sharefs/users/hao.zhang/Vchitect-2M/Wan-Syn/latents/ --batch_size 2 --num_data_workers 4 --num_epoch 2 --num_batches_per_epoch 100 ''' args = parser.parse_args() world_size = int(os.environ.get("WORLD_SIZE", 1)) diff --git a/fastvideo/v1/dataset/benchmarks/benchmark_parquet_dataset_map_style.py b/fastvideo/dataset/benchmarks/benchmark_parquet_dataset_map_style.py similarity index 86% rename from fastvideo/v1/dataset/benchmarks/benchmark_parquet_dataset_map_style.py rename to fastvideo/dataset/benchmarks/benchmark_parquet_dataset_map_style.py index 3e2beed0b..9413099c7 100644 --- a/fastvideo/v1/dataset/benchmarks/benchmark_parquet_dataset_map_style.py +++ b/fastvideo/dataset/benchmarks/benchmark_parquet_dataset_map_style.py @@ -8,14 +8,14 @@ import torch import torch.distributed as dist import torch.distributed.checkpoint as dist_cp -from fastvideo.v1.dataset.dataloader.schema import pyarrow_schema_t2v -from fastvideo.v1.dataset.parquet_dataset_map_style import ( +from fastvideo.dataset.dataloader.schema import pyarrow_schema_t2v +from fastvideo.dataset.parquet_dataset_map_style import ( build_parquet_map_style_dataloader) -from fastvideo.v1.distributed import get_world_rank -from fastvideo.v1.distributed.parallel_state import ( +from fastvideo.distributed import get_world_rank +from fastvideo.distributed.parallel_state import ( cleanup_dist_env_and_memory, get_local_torch_device, maybe_init_distributed_environment_and_model_parallel) -from fastvideo.v1.logger import init_logger +from fastvideo.logger import init_logger logger = init_logger(__name__) @@ -55,9 +55,9 @@ def main() -> None: help='Path to save/load checkpoint') ''' example launch command: - torchrun --nproc_per_node=1 --master_port=12358 fastvideo/v1/dataset/benchmarks/benchmark_parquet_dataset_map_style.py --path data/crush-smol/latents/combined_parquet_dataset --batch_size 4 --num_data_workers 1 --num_epoch 2 --num_batches_per_epoch 3 --verify_resume - torchrun --nproc_per_node=8 --master_port=12358 fastvideo/v1/dataset/benchmarks/benchmark_parquet_dataset_map_style.py --path data/crush-smol/latents/combined_parquet_dataset --batch_size 2 --num_data_workers 1 --num_epoch 2 --num_batches_per_epoch 5 --verify_resume - torchrun --nproc_per_node=8 --master_port=12358 fastvideo/v1/dataset/benchmarks/benchmark_parquet_dataset_map_style.py --path /mnt/sharefs/users/hao.zhang/Vchitect-2M/Wan-Syn/latents/ --batch_size 2 --num_data_workers 4 --num_epoch 2 --num_batches_per_epoch 100 + torchrun --nproc_per_node=1 --master_port=12358 fastvideo/dataset/benchmarks/benchmark_parquet_dataset_map_style.py --path data/crush-smol/latents/combined_parquet_dataset --batch_size 4 --num_data_workers 1 --num_epoch 2 --num_batches_per_epoch 3 --verify_resume + torchrun --nproc_per_node=8 --master_port=12358 fastvideo/dataset/benchmarks/benchmark_parquet_dataset_map_style.py --path data/crush-smol/latents/combined_parquet_dataset --batch_size 2 --num_data_workers 1 --num_epoch 2 --num_batches_per_epoch 5 --verify_resume + torchrun --nproc_per_node=8 --master_port=12358 fastvideo/dataset/benchmarks/benchmark_parquet_dataset_map_style.py --path /mnt/sharefs/users/hao.zhang/Vchitect-2M/Wan-Syn/latents/ --batch_size 2 --num_data_workers 4 --num_epoch 2 --num_batches_per_epoch 100 ''' args = parser.parse_args() world_size = int(os.environ.get("WORLD_SIZE", 1)) diff --git a/fastvideo/v1/dataset/dataloader/schema.py b/fastvideo/dataset/dataloader/schema.py similarity index 100% rename from fastvideo/v1/dataset/dataloader/schema.py rename to fastvideo/dataset/dataloader/schema.py diff --git a/fastvideo/v1/dataset/latent_datasets.py b/fastvideo/dataset/latent_datasets.py similarity index 100% rename from fastvideo/v1/dataset/latent_datasets.py rename to fastvideo/dataset/latent_datasets.py diff --git a/fastvideo/v1/dataset/parquet_dataset_iterable_style.py b/fastvideo/dataset/parquet_dataset_iterable_style.py similarity index 97% rename from fastvideo/v1/dataset/parquet_dataset_iterable_style.py rename to fastvideo/dataset/parquet_dataset_iterable_style.py index 256224ef6..a4fbf1409 100644 --- a/fastvideo/v1/dataset/parquet_dataset_iterable_style.py +++ b/fastvideo/dataset/parquet_dataset_iterable_style.py @@ -9,10 +9,10 @@ import tqdm from torch.utils.data import IterableDataset, get_worker_info from torchdata.stateful_dataloader import StatefulDataLoader -from fastvideo.v1.dataset.utils import collate_latents_embs_masks -from fastvideo.v1.distributed import (get_sp_world_size, get_world_group, - get_world_rank, get_world_size) -from fastvideo.v1.logger import init_logger +from fastvideo.dataset.utils import collate_latents_embs_masks +from fastvideo.distributed import (get_sp_world_size, get_world_group, + get_world_rank, get_world_size) +from fastvideo.logger import init_logger logger = init_logger(__name__) diff --git a/fastvideo/v1/dataset/parquet_dataset_map_style.py b/fastvideo/dataset/parquet_dataset_map_style.py similarity index 98% rename from fastvideo/v1/dataset/parquet_dataset_map_style.py rename to fastvideo/dataset/parquet_dataset_map_style.py index 4783a1dd0..d6458e1ea 100644 --- a/fastvideo/v1/dataset/parquet_dataset_map_style.py +++ b/fastvideo/dataset/parquet_dataset_map_style.py @@ -13,10 +13,10 @@ import tqdm from torch.utils.data import Dataset, Sampler from torchdata.stateful_dataloader import StatefulDataLoader -from fastvideo.v1.dataset.utils import collate_rows_from_parquet_schema -from fastvideo.v1.distributed import (get_sp_world_size, get_world_group, - get_world_rank, get_world_size) -from fastvideo.v1.logger import init_logger +from fastvideo.dataset.utils import collate_rows_from_parquet_schema +from fastvideo.distributed import (get_sp_world_size, get_world_group, + get_world_rank, get_world_size) +from fastvideo.logger import init_logger logger = init_logger(__name__) diff --git a/fastvideo/v1/dataset/preprocessing_datasets.py b/fastvideo/dataset/preprocessing_datasets.py similarity index 99% rename from fastvideo/v1/dataset/preprocessing_datasets.py rename to fastvideo/dataset/preprocessing_datasets.py index 24660f6eb..e0e17c47d 100644 --- a/fastvideo/v1/dataset/preprocessing_datasets.py +++ b/fastvideo/dataset/preprocessing_datasets.py @@ -16,7 +16,7 @@ from einops import rearrange from PIL import Image from transformers import AutoTokenizer -from fastvideo.v1.logger import init_logger +from fastvideo.logger import init_logger logger = init_logger(__name__) diff --git a/fastvideo/v1/dataset/transform.py b/fastvideo/dataset/transform.py similarity index 100% rename from fastvideo/v1/dataset/transform.py rename to fastvideo/dataset/transform.py diff --git a/fastvideo/v1/dataset/upload_to_hf.py b/fastvideo/dataset/upload_to_hf.py similarity index 100% rename from fastvideo/v1/dataset/upload_to_hf.py rename to fastvideo/dataset/upload_to_hf.py diff --git a/fastvideo/v1/dataset/utils.py b/fastvideo/dataset/utils.py similarity index 100% rename from fastvideo/v1/dataset/utils.py rename to fastvideo/dataset/utils.py diff --git a/fastvideo/v1/dataset/validation_dataset.py b/fastvideo/dataset/validation_dataset.py similarity index 96% rename from fastvideo/v1/dataset/validation_dataset.py rename to fastvideo/dataset/validation_dataset.py index 3795dde29..5ab467d75 100644 --- a/fastvideo/v1/dataset/validation_dataset.py +++ b/fastvideo/dataset/validation_dataset.py @@ -6,10 +6,10 @@ import pathlib import datasets from torch.utils.data import IterableDataset -from fastvideo.v1.distributed import (get_sp_world_size, get_world_rank, - get_world_size) -from fastvideo.v1.logger import init_logger -from fastvideo.v1.models.vision_utils import load_image, load_video +from fastvideo.distributed import (get_sp_world_size, get_world_rank, + get_world_size) +from fastvideo.logger import init_logger +from fastvideo.models.vision_utils import load_image, load_video logger = init_logger(__name__) diff --git a/fastvideo/v1/distributed/__init__.py b/fastvideo/distributed/__init__.py similarity index 87% rename from fastvideo/v1/distributed/__init__.py rename to fastvideo/distributed/__init__.py index 7e96bafa1..f97ffd0dd 100644 --- a/fastvideo/v1/distributed/__init__.py +++ b/fastvideo/distributed/__init__.py @@ -1,7 +1,7 @@ # SPDX-License-Identifier: Apache-2.0 -from fastvideo.v1.distributed.communication_op import * -from fastvideo.v1.distributed.parallel_state import ( +from fastvideo.distributed.communication_op import * +from fastvideo.distributed.parallel_state import ( cleanup_dist_env_and_memory, get_dp_group, get_dp_rank, get_dp_world_size, get_local_torch_device, get_sp_group, get_sp_parallel_rank, get_sp_world_size, get_tp_group, get_tp_rank, get_tp_world_size, @@ -9,7 +9,7 @@ from fastvideo.v1.distributed.parallel_state import ( init_distributed_environment, initialize_model_parallel, maybe_init_distributed_environment_and_model_parallel, model_parallel_is_initialized) -from fastvideo.v1.distributed.utils import * +from fastvideo.distributed.utils import * __all__ = [ # Initialization diff --git a/fastvideo/v1/distributed/communication_op.py b/fastvideo/distributed/communication_op.py similarity index 94% rename from fastvideo/v1/distributed/communication_op.py rename to fastvideo/distributed/communication_op.py index cc0e901a2..c1cad53c4 100644 --- a/fastvideo/v1/distributed/communication_op.py +++ b/fastvideo/distributed/communication_op.py @@ -4,7 +4,7 @@ import torch import torch.distributed -from fastvideo.v1.distributed.parallel_state import get_sp_group, get_tp_group +from fastvideo.distributed.parallel_state import get_sp_group, get_tp_group def tensor_model_parallel_all_reduce(input_: torch.Tensor) -> torch.Tensor: diff --git a/fastvideo/v1/configs/__init__.py b/fastvideo/distributed/device_communicators/__init__.py similarity index 100% rename from fastvideo/v1/configs/__init__.py rename to fastvideo/distributed/device_communicators/__init__.py diff --git a/fastvideo/v1/distributed/device_communicators/base_device_communicator.py b/fastvideo/distributed/device_communicators/base_device_communicator.py similarity index 100% rename from fastvideo/v1/distributed/device_communicators/base_device_communicator.py rename to fastvideo/distributed/device_communicators/base_device_communicator.py diff --git a/fastvideo/v1/distributed/device_communicators/cpu_communicator.py b/fastvideo/distributed/device_communicators/cpu_communicator.py similarity index 98% rename from fastvideo/v1/distributed/device_communicators/cpu_communicator.py rename to fastvideo/distributed/device_communicators/cpu_communicator.py index f7a7c8e5f..7ac2a7dd3 100644 --- a/fastvideo/v1/distributed/device_communicators/cpu_communicator.py +++ b/fastvideo/distributed/device_communicators/cpu_communicator.py @@ -6,8 +6,8 @@ import os import torch from torch.distributed import ProcessGroup -from fastvideo.v1.platforms import current_platform -from fastvideo.v1.platforms.interface import CpuArchEnum +from fastvideo.platforms import current_platform +from fastvideo.platforms.interface import CpuArchEnum from .base_device_communicator import DeviceCommunicatorBase diff --git a/fastvideo/v1/distributed/device_communicators/cuda_communicator.py b/fastvideo/distributed/device_communicators/cuda_communicator.py similarity index 94% rename from fastvideo/v1/distributed/device_communicators/cuda_communicator.py rename to fastvideo/distributed/device_communicators/cuda_communicator.py index f78f07964..ef41c1769 100644 --- a/fastvideo/v1/distributed/device_communicators/cuda_communicator.py +++ b/fastvideo/distributed/device_communicators/cuda_communicator.py @@ -4,7 +4,7 @@ import torch from torch.distributed import ProcessGroup -from fastvideo.v1.distributed.device_communicators.base_device_communicator import ( +from fastvideo.distributed.device_communicators.base_device_communicator import ( DeviceCommunicatorBase) @@ -17,7 +17,7 @@ class CudaCommunicator(DeviceCommunicatorBase): unique_name: str = ""): super().__init__(cpu_group, device, device_group, unique_name) - from fastvideo.v1.distributed.device_communicators.pynccl import ( + from fastvideo.distributed.device_communicators.pynccl import ( PyNcclCommunicator) self.pynccl_comm: PyNcclCommunicator | None = None diff --git a/fastvideo/v1/distributed/device_communicators/pynccl.py b/fastvideo/distributed/device_communicators/pynccl.py similarity index 97% rename from fastvideo/v1/distributed/device_communicators/pynccl.py rename to fastvideo/distributed/device_communicators/pynccl.py index fd8c19830..f7a881c2a 100644 --- a/fastvideo/v1/distributed/device_communicators/pynccl.py +++ b/fastvideo/distributed/device_communicators/pynccl.py @@ -6,12 +6,12 @@ import torch import torch.distributed as dist from torch.distributed import ProcessGroup, ReduceOp -from fastvideo.v1.distributed.device_communicators.pynccl_wrapper import ( +from fastvideo.distributed.device_communicators.pynccl_wrapper import ( NCCLLibrary, buffer_type, cudaStream_t, ncclComm_t, ncclDataTypeEnum, ncclRedOpTypeEnum, ncclUniqueId) -from fastvideo.v1.distributed.utils import StatelessProcessGroup -from fastvideo.v1.logger import init_logger -from fastvideo.v1.utils import current_stream +from fastvideo.distributed.utils import StatelessProcessGroup +from fastvideo.logger import init_logger +from fastvideo.utils import current_stream logger = init_logger(__name__) diff --git a/fastvideo/v1/distributed/device_communicators/pynccl_wrapper.py b/fastvideo/distributed/device_communicators/pynccl_wrapper.py similarity index 99% rename from fastvideo/v1/distributed/device_communicators/pynccl_wrapper.py rename to fastvideo/distributed/device_communicators/pynccl_wrapper.py index 3f81a5e73..516b7d311 100644 --- a/fastvideo/v1/distributed/device_communicators/pynccl_wrapper.py +++ b/fastvideo/distributed/device_communicators/pynccl_wrapper.py @@ -32,8 +32,8 @@ from typing import Any import torch from torch.distributed import ReduceOp -from fastvideo.v1.logger import init_logger -from fastvideo.v1.utils import find_nccl_library +from fastvideo.logger import init_logger +from fastvideo.utils import find_nccl_library logger = init_logger(__name__) diff --git a/fastvideo/v1/distributed/parallel_state.py b/fastvideo/distributed/parallel_state.py similarity index 98% rename from fastvideo/v1/distributed/parallel_state.py rename to fastvideo/distributed/parallel_state.py index a2bace07a..aa15e2904 100644 --- a/fastvideo/v1/distributed/parallel_state.py +++ b/fastvideo/distributed/parallel_state.py @@ -38,14 +38,14 @@ import torch import torch.distributed from torch.distributed import Backend, ProcessGroup, ReduceOp -import fastvideo.v1.envs as envs -from fastvideo.v1.distributed.device_communicators.base_device_communicator import ( +import fastvideo.envs as envs +from fastvideo.distributed.device_communicators.base_device_communicator import ( DeviceCommunicatorBase) -from fastvideo.v1.distributed.device_communicators.cpu_communicator import ( +from fastvideo.distributed.device_communicators.cpu_communicator import ( CpuCommunicator) -from fastvideo.v1.distributed.utils import StatelessProcessGroup -from fastvideo.v1.logger import init_logger -from fastvideo.v1.platforms import current_platform +from fastvideo.distributed.utils import StatelessProcessGroup +from fastvideo.logger import init_logger +from fastvideo.platforms import current_platform logger = init_logger(__name__) @@ -184,7 +184,7 @@ class GroupCoordinator: print(f"rank: {self.rank} group not found") raise e - from fastvideo.v1.platforms import current_platform + from fastvideo.platforms import current_platform # TODO: fix it for other platforms self.device = get_local_torch_device() @@ -195,7 +195,7 @@ class GroupCoordinator: if use_device_communicator and self.world_size > 1: # Platform-aware device communicator selection if current_platform.is_cuda_alike(): - from fastvideo.v1.distributed.device_communicators.cuda_communicator import ( + from fastvideo.distributed.device_communicators.cuda_communicator import ( CudaCommunicator) self.device_communicator = CudaCommunicator( cpu_group=self.cpu_group, @@ -214,7 +214,7 @@ class GroupCoordinator: self.mq_broadcaster = None - from fastvideo.v1.platforms import current_platform + from fastvideo.platforms import current_platform # TODO(will): check if this is needed # self.use_custom_op_call = current_platform.is_cuda_alike() @@ -258,7 +258,7 @@ class GroupCoordinator: def graph_capture(self, graph_capture_context: GraphCaptureContext | None = None): # Platform-aware graph capture - from fastvideo.v1.platforms import current_platform + from fastvideo.platforms import current_platform if current_platform.is_cuda_alike(): if graph_capture_context is None: @@ -775,7 +775,7 @@ def init_distributed_environment( device_id: torch.device | None = None, ): # Determine the appropriate backend based on the platform - from fastvideo.v1.platforms import current_platform + from fastvideo.platforms import current_platform if backend == "nccl" and not current_platform.is_cuda_alike(): # Use gloo backend for non-CUDA platforms (MPS, CPU) backend = "gloo" diff --git a/fastvideo/v1/distributed/utils.py b/fastvideo/distributed/utils.py similarity index 99% rename from fastvideo/v1/distributed/utils.py rename to fastvideo/distributed/utils.py index 9a40bd2d0..94ff953a6 100644 --- a/fastvideo/v1/distributed/utils.py +++ b/fastvideo/distributed/utils.py @@ -15,7 +15,7 @@ from typing import Any import torch from torch.distributed import TCPStore -from fastvideo.v1.logger import init_logger +from fastvideo.logger import init_logger logger = init_logger(__name__) diff --git a/fastvideo/v1/distributed/device_communicators/__init__.py b/fastvideo/entrypoints/__init__.py similarity index 100% rename from fastvideo/v1/distributed/device_communicators/__init__.py rename to fastvideo/entrypoints/__init__.py diff --git a/fastvideo/v1/entrypoints/__init__.py b/fastvideo/entrypoints/cli/__init__.py similarity index 100% rename from fastvideo/v1/entrypoints/__init__.py rename to fastvideo/entrypoints/cli/__init__.py diff --git a/fastvideo/v1/entrypoints/cli/cli_types.py b/fastvideo/entrypoints/cli/cli_types.py similarity index 93% rename from fastvideo/v1/entrypoints/cli/cli_types.py rename to fastvideo/entrypoints/cli/cli_types.py index dd2c7a677..c9aa9147f 100644 --- a/fastvideo/v1/entrypoints/cli/cli_types.py +++ b/fastvideo/entrypoints/cli/cli_types.py @@ -3,7 +3,7 @@ import argparse -from fastvideo.v1.utils import FlexibleArgumentParser +from fastvideo.utils import FlexibleArgumentParser class CLISubcommand: diff --git a/fastvideo/v1/entrypoints/cli/generate.py b/fastvideo/entrypoints/cli/generate.py similarity index 92% rename from fastvideo/v1/entrypoints/cli/generate.py rename to fastvideo/entrypoints/cli/generate.py index 3737c7f06..e7494c580 100644 --- a/fastvideo/v1/entrypoints/cli/generate.py +++ b/fastvideo/entrypoints/cli/generate.py @@ -7,12 +7,12 @@ import os from typing import cast from fastvideo import VideoGenerator -from fastvideo.v1.configs.sample.base import SamplingParam -from fastvideo.v1.entrypoints.cli.cli_types import CLISubcommand -from fastvideo.v1.entrypoints.cli.utils import RaiseNotImplementedAction -from fastvideo.v1.fastvideo_args import FastVideoArgs -from fastvideo.v1.logger import init_logger -from fastvideo.v1.utils import FlexibleArgumentParser +from fastvideo.configs.sample.base import SamplingParam +from fastvideo.entrypoints.cli.cli_types import CLISubcommand +from fastvideo.entrypoints.cli.utils import RaiseNotImplementedAction +from fastvideo.fastvideo_args import FastVideoArgs +from fastvideo.logger import init_logger +from fastvideo.utils import FlexibleArgumentParser logger = init_logger(__name__) diff --git a/fastvideo/v1/entrypoints/cli/main.py b/fastvideo/entrypoints/cli/main.py similarity index 82% rename from fastvideo/v1/entrypoints/cli/main.py rename to fastvideo/entrypoints/cli/main.py index 2b184d0df..17cba3cb7 100644 --- a/fastvideo/v1/entrypoints/cli/main.py +++ b/fastvideo/entrypoints/cli/main.py @@ -1,9 +1,9 @@ # SPDX-License-Identifier: Apache-2.0 # adapted from vllm: https://github.com/vllm-project/vllm/blob/v0.7.3/vllm/entrypoints/cli/main.py -from fastvideo.v1.entrypoints.cli.cli_types import CLISubcommand -from fastvideo.v1.entrypoints.cli.generate import cmd_init as generate_cmd_init -from fastvideo.v1.utils import FlexibleArgumentParser +from fastvideo.entrypoints.cli.cli_types import CLISubcommand +from fastvideo.entrypoints.cli.generate import cmd_init as generate_cmd_init +from fastvideo.utils import FlexibleArgumentParser def cmd_init() -> list[CLISubcommand]: diff --git a/fastvideo/v1/entrypoints/cli/utils.py b/fastvideo/entrypoints/cli/utils.py similarity index 93% rename from fastvideo/v1/entrypoints/cli/utils.py rename to fastvideo/entrypoints/cli/utils.py index a404e1fc0..56016b192 100644 --- a/fastvideo/v1/entrypoints/cli/utils.py +++ b/fastvideo/entrypoints/cli/utils.py @@ -5,7 +5,7 @@ import os import subprocess import sys -from fastvideo.v1.logger import init_logger +from fastvideo.logger import init_logger logger = init_logger(__name__) @@ -34,7 +34,7 @@ def launch_distributed(num_gpus: int, project_root = os.path.abspath( os.path.join(os.path.dirname(__file__), "../../../..")) main_script = os.path.join(project_root, - "fastvideo/v1/sample/v1_fastvideo_inference.py") + "fastvideo/sample/v1_fastvideo_inference.py") cmd = [ python_executable, "-m", "torch.distributed.run", diff --git a/fastvideo/v1/entrypoints/video_generator.py b/fastvideo/entrypoints/video_generator.py similarity index 97% rename from fastvideo/v1/entrypoints/video_generator.py rename to fastvideo/entrypoints/video_generator.py index 5c44adc7f..5051a9b7e 100644 --- a/fastvideo/v1/entrypoints/video_generator.py +++ b/fastvideo/entrypoints/video_generator.py @@ -17,12 +17,12 @@ import torch import torchvision from einops import rearrange -from fastvideo.v1.configs.sample import SamplingParam -from fastvideo.v1.fastvideo_args import FastVideoArgs -from fastvideo.v1.logger import init_logger -from fastvideo.v1.pipelines import ForwardBatch -from fastvideo.v1.utils import align_to, shallow_asdict -from fastvideo.v1.worker.executor import Executor +from fastvideo.configs.sample import SamplingParam +from fastvideo.fastvideo_args import FastVideoArgs +from fastvideo.logger import init_logger +from fastvideo.pipelines import ForwardBatch +from fastvideo.utils import align_to, shallow_asdict +from fastvideo.worker.executor import Executor logger = init_logger(__name__) diff --git a/fastvideo/v1/envs.py b/fastvideo/envs.py similarity index 100% rename from fastvideo/v1/envs.py rename to fastvideo/envs.py diff --git a/fastvideo/v1/fastvideo_args.py b/fastvideo/fastvideo_args.py similarity index 99% rename from fastvideo/v1/fastvideo_args.py rename to fastvideo/fastvideo_args.py index 365f64006..8e11fb366 100644 --- a/fastvideo/v1/fastvideo_args.py +++ b/fastvideo/fastvideo_args.py @@ -8,10 +8,10 @@ from contextlib import contextmanager from dataclasses import field from typing import Any -from fastvideo.v1.configs.pipelines.base import PipelineConfig, STA_Mode -from fastvideo.v1.logger import init_logger -from fastvideo.v1.platforms import current_platform -from fastvideo.v1.utils import FlexibleArgumentParser, StoreBoolean +from fastvideo.configs.pipelines.base import PipelineConfig, STA_Mode +from fastvideo.logger import init_logger +from fastvideo.platforms import current_platform +from fastvideo.utils import FlexibleArgumentParser, StoreBoolean logger = init_logger(__name__) diff --git a/fastvideo/v1/forward_context.py b/fastvideo/forward_context.py similarity index 96% rename from fastvideo/v1/forward_context.py rename to fastvideo/forward_context.py index 11b5ead18..7d3aa6d56 100644 --- a/fastvideo/v1/forward_context.py +++ b/fastvideo/forward_context.py @@ -9,11 +9,11 @@ from typing import TYPE_CHECKING, Optional import torch -from fastvideo.v1.logger import init_logger +from fastvideo.logger import init_logger if TYPE_CHECKING: - from fastvideo.v1.attention import AttentionMetadata - from fastvideo.v1.pipelines import ForwardBatch + from fastvideo.attention import AttentionMetadata + from fastvideo.pipelines import ForwardBatch logger = init_logger(__name__) diff --git a/fastvideo/v1/entrypoints/cli/__init__.py b/fastvideo/layers/__init__.py similarity index 100% rename from fastvideo/v1/entrypoints/cli/__init__.py rename to fastvideo/layers/__init__.py diff --git a/fastvideo/v1/layers/activation.py b/fastvideo/layers/activation.py similarity index 98% rename from fastvideo/v1/layers/activation.py rename to fastvideo/layers/activation.py index c7f1c47c9..f20a3b7fa 100644 --- a/fastvideo/v1/layers/activation.py +++ b/fastvideo/layers/activation.py @@ -8,7 +8,7 @@ import torch.nn as nn import torch.nn.functional as F # TODO (will): remove this dependency -from fastvideo.v1.layers.custom_op import CustomOp +from fastvideo.layers.custom_op import CustomOp @CustomOp.register("silu_and_mul") diff --git a/fastvideo/v1/layers/custom_op.py b/fastvideo/layers/custom_op.py similarity index 98% rename from fastvideo/v1/layers/custom_op.py rename to fastvideo/layers/custom_op.py index 2d9d4f5c3..bd9ffa5b7 100644 --- a/fastvideo/v1/layers/custom_op.py +++ b/fastvideo/layers/custom_op.py @@ -6,7 +6,7 @@ from typing import Any import torch.nn as nn -from fastvideo.v1.logger import init_logger +from fastvideo.logger import init_logger logger = init_logger(__name__) diff --git a/fastvideo/v1/layers/layernorm.py b/fastvideo/layers/layernorm.py similarity index 98% rename from fastvideo/v1/layers/layernorm.py rename to fastvideo/layers/layernorm.py index 1f987616c..fd81db6d6 100644 --- a/fastvideo/v1/layers/layernorm.py +++ b/fastvideo/layers/layernorm.py @@ -6,8 +6,8 @@ import torch import torch.nn as nn import torch.nn.functional as F -from fastvideo.v1.layers.custom_op import CustomOp -from fastvideo.v1.platforms import current_platform +from fastvideo.layers.custom_op import CustomOp +from fastvideo.platforms import current_platform @CustomOp.register("rms_norm") diff --git a/fastvideo/v1/layers/linear.py b/fastvideo/layers/linear.py similarity index 97% rename from fastvideo/v1/layers/linear.py rename to fastvideo/layers/linear.py index 3af6a682b..d711a1ad4 100644 --- a/fastvideo/v1/layers/linear.py +++ b/fastvideo/layers/linear.py @@ -7,22 +7,22 @@ import torch import torch.nn.functional as F from torch.nn.parameter import Parameter -from fastvideo.v1.distributed import (divide, get_tp_rank, get_tp_world_size, - split_tensor_along_last_dim, - tensor_model_parallel_all_gather, - tensor_model_parallel_all_reduce) -from fastvideo.v1.layers.quantization.base_config import (QuantizationConfig, - QuantizeMethodBase) -from fastvideo.v1.logger import init_logger +from fastvideo.distributed import (divide, get_tp_rank, get_tp_world_size, + split_tensor_along_last_dim, + tensor_model_parallel_all_gather, + tensor_model_parallel_all_reduce) +from fastvideo.layers.quantization.base_config import (QuantizationConfig, + QuantizeMethodBase) +from fastvideo.logger import init_logger # yapf: disable -from fastvideo.v1.models.parameter import (BasevLLMParameter, - BlockQuantScaleParameter, - PackedColumnParameter, - PackedvLLMParameter, - PerTensorScaleParameter, - RowvLLMParameter) +from fastvideo.models.parameter import (BasevLLMParameter, + BlockQuantScaleParameter, + PackedColumnParameter, + PackedvLLMParameter, + PerTensorScaleParameter, + RowvLLMParameter) # yapf: enable -from fastvideo.v1.models.utils import set_weight_attrs +from fastvideo.models.utils import set_weight_attrs logger = init_logger(__name__) diff --git a/fastvideo/v1/layers/lora/linear.py b/fastvideo/layers/lora/linear.py similarity index 95% rename from fastvideo/v1/layers/lora/linear.py rename to fastvideo/layers/lora/linear.py index ec67ce8a3..2f63de200 100644 --- a/fastvideo/v1/layers/lora/linear.py +++ b/fastvideo/layers/lora/linear.py @@ -9,16 +9,16 @@ from torch.distributed._composable.fsdp import (CPUOffloadPolicy, OffloadPolicy, fully_shard) from torch.distributed.tensor import DTensor -from fastvideo.v1.distributed import (get_local_torch_device, get_tp_rank, - split_tensor_along_last_dim, - tensor_model_parallel_all_gather, - tensor_model_parallel_all_reduce) -from fastvideo.v1.layers.linear import (ColumnParallelLinear, LinearBase, - MergedColumnParallelLinear, - QKVParallelLinear, ReplicatedLinear, - RowParallelLinear) -from fastvideo.v1.layers.vocab_parallel_embedding import VocabParallelEmbedding -from fastvideo.v1.utils import get_mixed_precision_state +from fastvideo.distributed import (get_local_torch_device, get_tp_rank, + split_tensor_along_last_dim, + tensor_model_parallel_all_gather, + tensor_model_parallel_all_reduce) +from fastvideo.layers.linear import (ColumnParallelLinear, LinearBase, + MergedColumnParallelLinear, + QKVParallelLinear, ReplicatedLinear, + RowParallelLinear) +from fastvideo.layers.vocab_parallel_embedding import VocabParallelEmbedding +from fastvideo.utils import get_mixed_precision_state torch._dynamo.config.recompile_limit = 16 @@ -376,4 +376,4 @@ def replace_submodule(model: nn.Module, module_name: str, parent = model.get_submodule(".".join(module_name.split(".")[:-1])) target_name = module_name.split(".")[-1] setattr(parent, target_name, new_module) - return new_module \ No newline at end of file + return new_module diff --git a/fastvideo/v1/layers/mlp.py b/fastvideo/layers/mlp.py similarity index 91% rename from fastvideo/v1/layers/mlp.py rename to fastvideo/layers/mlp.py index 7b2952917..2d5ab2a34 100644 --- a/fastvideo/v1/layers/mlp.py +++ b/fastvideo/layers/mlp.py @@ -3,8 +3,8 @@ import torch import torch.nn as nn -from fastvideo.v1.layers.activation import get_act_fn -from fastvideo.v1.layers.linear import ReplicatedLinear +from fastvideo.layers.activation import get_act_fn +from fastvideo.layers.linear import ReplicatedLinear class MLP(nn.Module): diff --git a/fastvideo/v1/layers/quantization/__init__.py b/fastvideo/layers/quantization/__init__.py similarity index 85% rename from fastvideo/v1/layers/quantization/__init__.py rename to fastvideo/layers/quantization/__init__.py index 971d9ca03..a8d269f70 100644 --- a/fastvideo/v1/layers/quantization/__init__.py +++ b/fastvideo/layers/quantization/__init__.py @@ -1,6 +1,6 @@ from typing import Literal, get_args -from fastvideo.v1.layers.quantization.base_config import QuantizationConfig +from fastvideo.layers.quantization.base_config import QuantizationConfig QuantizationMethods = Literal[None] @@ -20,9 +20,9 @@ def register_quantization_config(quantization: str): quantization (str): The quantization method name. Examples: - >>> from fastvideo.v1.layers.quantization import register_quantization_config - >>> from fastvideo.v1.layers.quantization import get_quantization_config - >>> from fastvideo.v1.layers.quantization.base_config import QuantizationConfig + >>> from fastvideo.layers.quantization import register_quantization_config + >>> from fastvideo.layers.quantization import get_quantization_config + >>> from fastvideo.layers.quantization.base_config import QuantizationConfig >>> >>> @register_quantization_config("my_quant") ... class MyQuantConfig(QuantizationConfig): diff --git a/fastvideo/v1/layers/quantization/base_config.py b/fastvideo/layers/quantization/base_config.py similarity index 98% rename from fastvideo/v1/layers/quantization/base_config.py rename to fastvideo/layers/quantization/base_config.py index ed972de47..892d1516c 100644 --- a/fastvideo/v1/layers/quantization/base_config.py +++ b/fastvideo/layers/quantization/base_config.py @@ -9,7 +9,7 @@ import torch from torch import nn if TYPE_CHECKING: - from fastvideo.v1.layers.quantization import QuantizationMethods + from fastvideo.layers.quantization import QuantizationMethods else: QuantizationMethods = str diff --git a/fastvideo/v1/layers/rotary_embedding.py b/fastvideo/layers/rotary_embedding.py similarity index 99% rename from fastvideo/v1/layers/rotary_embedding.py rename to fastvideo/layers/rotary_embedding.py index 6b8ed3da6..6abe90609 100644 --- a/fastvideo/v1/layers/rotary_embedding.py +++ b/fastvideo/layers/rotary_embedding.py @@ -27,8 +27,8 @@ from typing import Any import torch -from fastvideo.v1.distributed.parallel_state import get_sp_group -from fastvideo.v1.layers.custom_op import CustomOp +from fastvideo.distributed.parallel_state import get_sp_group +from fastvideo.layers.custom_op import CustomOp def _rotate_neox(x: torch.Tensor) -> torch.Tensor: diff --git a/fastvideo/v1/layers/utils.py b/fastvideo/layers/utils.py similarity index 100% rename from fastvideo/v1/layers/utils.py rename to fastvideo/layers/utils.py diff --git a/fastvideo/v1/layers/visual_embedding.py b/fastvideo/layers/visual_embedding.py similarity index 97% rename from fastvideo/v1/layers/visual_embedding.py rename to fastvideo/layers/visual_embedding.py index 19106def8..954cd925c 100644 --- a/fastvideo/v1/layers/visual_embedding.py +++ b/fastvideo/layers/visual_embedding.py @@ -5,9 +5,9 @@ import math import torch import torch.nn as nn -from fastvideo.v1.layers.activation import get_act_fn -from fastvideo.v1.layers.linear import ReplicatedLinear -from fastvideo.v1.layers.mlp import MLP +from fastvideo.layers.activation import get_act_fn +from fastvideo.layers.linear import ReplicatedLinear +from fastvideo.layers.mlp import MLP class PatchEmbed(nn.Module): diff --git a/fastvideo/v1/layers/vocab_parallel_embedding.py b/fastvideo/layers/vocab_parallel_embedding.py similarity index 98% rename from fastvideo/v1/layers/vocab_parallel_embedding.py rename to fastvideo/layers/vocab_parallel_embedding.py index 1aaee3a03..eab40df9c 100644 --- a/fastvideo/v1/layers/vocab_parallel_embedding.py +++ b/fastvideo/layers/vocab_parallel_embedding.py @@ -7,13 +7,13 @@ import torch import torch.nn.functional as F from torch.nn.parameter import Parameter, UninitializedParameter -from fastvideo.v1.distributed import (divide, get_tp_rank, get_tp_world_size, - tensor_model_parallel_all_reduce) -from fastvideo.v1.layers.quantization.base_config import ( +from fastvideo.distributed import (divide, get_tp_rank, get_tp_world_size, + tensor_model_parallel_all_reduce) +from fastvideo.layers.quantization.base_config import ( QuantizationConfig, QuantizeMethodBase, method_has_implemented_embedding) -from fastvideo.v1.models.parameter import BasevLLMParameter -from fastvideo.v1.models.utils import set_weight_attrs -from fastvideo.v1.platforms import current_platform +from fastvideo.models.parameter import BasevLLMParameter +from fastvideo.models.utils import set_weight_attrs +from fastvideo.platforms import current_platform DEFAULT_VOCAB_PADDING_SIZE = 64 diff --git a/fastvideo/v1/logger.py b/fastvideo/logger.py similarity index 97% rename from fastvideo/v1/logger.py rename to fastvideo/logger.py index 7d2b05da9..f1fc08ad5 100644 --- a/fastvideo/v1/logger.py +++ b/fastvideo/logger.py @@ -1,6 +1,6 @@ # SPDX-License-Identifier: Apache-2.0 # adapted from vllm: https://github.com/vllm-project/vllm/blob/v0.7.3/vllm/logger.py -"""Logging configuration for fastvideo.v1.""" +"""Logging configuration for fastvideo.""" import datetime import json import logging @@ -13,7 +13,7 @@ from os import path from types import MethodType from typing import Any, cast -import fastvideo.v1.envs as envs +import fastvideo.envs as envs FASTVIDEO_CONFIGURE_LOGGING = envs.FASTVIDEO_CONFIGURE_LOGGING FASTVIDEO_LOGGING_CONFIG_PATH = envs.FASTVIDEO_LOGGING_CONFIG_PATH @@ -34,7 +34,7 @@ _DATE_FORMAT = "%m-%d %H:%M:%S" DEFAULT_LOGGING_CONFIG = { "formatters": { "fastvideo": { - "class": "fastvideo.v1.logging_utils.NewLineFormatter", + "class": "fastvideo.logging_utils.NewLineFormatter", "datefmt": _DATE_FORMAT, "format": _FORMAT, }, @@ -204,8 +204,8 @@ def _configure_fastvideo_root_logger() -> None: for formatter in logging_config.get("formatters", {}).values(): # This provides backwards compatibility after #10134. - if formatter.get("class") == "fastvideo.v1.logging.NewLineFormatter": - formatter["class"] = "fastvideo.v1.logging_utils.NewLineFormatter" + if formatter.get("class") == "fastvideo.logging.NewLineFormatter": + formatter["class"] = "fastvideo.logging_utils.NewLineFormatter" if logging_config: dictConfig(logging_config) diff --git a/fastvideo/v1/logging_utils/__init__.py b/fastvideo/logging_utils/__init__.py similarity index 54% rename from fastvideo/v1/logging_utils/__init__.py rename to fastvideo/logging_utils/__init__.py index 81c6d65a3..95a78b983 100644 --- a/fastvideo/v1/logging_utils/__init__.py +++ b/fastvideo/logging_utils/__init__.py @@ -1,6 +1,6 @@ # SPDX-License-Identifier: Apache-2.0 -from fastvideo.v1.logging_utils.formatter import NewLineFormatter +from fastvideo.logging_utils.formatter import NewLineFormatter __all__ = [ "NewLineFormatter", diff --git a/fastvideo/v1/logging_utils/formatter.py b/fastvideo/logging_utils/formatter.py similarity index 100% rename from fastvideo/v1/logging_utils/formatter.py rename to fastvideo/logging_utils/formatter.py diff --git a/fastvideo/v1/layers/__init__.py b/fastvideo/models/__init__.py similarity index 100% rename from fastvideo/v1/layers/__init__.py rename to fastvideo/models/__init__.py diff --git a/fastvideo/v1/models/dits/base.py b/fastvideo/models/dits/base.py similarity index 97% rename from fastvideo/v1/models/dits/base.py rename to fastvideo/models/dits/base.py index 5022ac16a..d60812a45 100644 --- a/fastvideo/v1/models/dits/base.py +++ b/fastvideo/models/dits/base.py @@ -5,8 +5,8 @@ from typing import Any import torch from torch import nn -from fastvideo.v1.configs.models import DiTConfig -from fastvideo.v1.platforms import AttentionBackendEnum +from fastvideo.configs.models import DiTConfig +from fastvideo.platforms import AttentionBackendEnum # TODO diff --git a/fastvideo/v1/models/dits/hunyuanvideo.py b/fastvideo/models/dits/hunyuanvideo.py similarity index 96% rename from fastvideo/v1/models/dits/hunyuanvideo.py rename to fastvideo/models/dits/hunyuanvideo.py index 05fdef4ba..da14322ba 100644 --- a/fastvideo/v1/models/dits/hunyuanvideo.py +++ b/fastvideo/models/dits/hunyuanvideo.py @@ -6,24 +6,23 @@ import numpy as np import torch import torch.nn as nn -from fastvideo.v1.attention import DistributedAttention, LocalAttention -from fastvideo.v1.configs.models.dits import HunyuanVideoConfig -from fastvideo.v1.configs.sample.teacache import TeaCacheParams -from fastvideo.v1.distributed.parallel_state import get_sp_world_size -from fastvideo.v1.forward_context import get_forward_context -from fastvideo.v1.layers.layernorm import (LayerNormScaleShift, ScaleResidual, - ScaleResidualLayerNormScaleShift) -from fastvideo.v1.layers.linear import ReplicatedLinear +from fastvideo.attention import DistributedAttention, LocalAttention +from fastvideo.configs.models.dits import HunyuanVideoConfig +from fastvideo.configs.sample.teacache import TeaCacheParams +from fastvideo.distributed.parallel_state import get_sp_world_size +from fastvideo.forward_context import get_forward_context +from fastvideo.layers.layernorm import (LayerNormScaleShift, ScaleResidual, + ScaleResidualLayerNormScaleShift) +from fastvideo.layers.linear import ReplicatedLinear # TODO(will-PY-refactor): RMSNorm .... -from fastvideo.v1.layers.mlp import MLP -from fastvideo.v1.layers.rotary_embedding import (_apply_rotary_emb, - get_rotary_pos_embed) -from fastvideo.v1.layers.visual_embedding import (ModulateProjection, - PatchEmbed, TimestepEmbedder, - unpatchify) -from fastvideo.v1.models.dits.base import CachableDiT -from fastvideo.v1.models.utils import modulate -from fastvideo.v1.platforms import AttentionBackendEnum +from fastvideo.layers.mlp import MLP +from fastvideo.layers.rotary_embedding import (_apply_rotary_emb, + get_rotary_pos_embed) +from fastvideo.layers.visual_embedding import (ModulateProjection, PatchEmbed, + TimestepEmbedder, unpatchify) +from fastvideo.models.dits.base import CachableDiT +from fastvideo.models.utils import modulate +from fastvideo.platforms import AttentionBackendEnum class HunyuanRMSNorm(nn.Module): diff --git a/fastvideo/v1/models/dits/stepvideo.py b/fastvideo/models/dits/stepvideo.py similarity index 97% rename from fastvideo/v1/models/dits/stepvideo.py rename to fastvideo/models/dits/stepvideo.py index c60e6b6ec..45295796c 100644 --- a/fastvideo/v1/models/dits/stepvideo.py +++ b/fastvideo/models/dits/stepvideo.py @@ -16,17 +16,17 @@ import torch from einops import rearrange, repeat from torch import nn -from fastvideo.v1.attention import DistributedAttention, LocalAttention -from fastvideo.v1.configs.models.dits import StepVideoConfig -from fastvideo.v1.distributed.parallel_state import get_sp_world_size -from fastvideo.v1.layers.layernorm import LayerNormScaleShift -from fastvideo.v1.layers.linear import ReplicatedLinear -from fastvideo.v1.layers.mlp import MLP -from fastvideo.v1.layers.rotary_embedding import (_apply_rotary_emb, - get_rotary_pos_embed) -from fastvideo.v1.layers.visual_embedding import TimestepEmbedder -from fastvideo.v1.models.dits.base import BaseDiT -from fastvideo.v1.platforms import AttentionBackendEnum +from fastvideo.attention import DistributedAttention, LocalAttention +from fastvideo.configs.models.dits import StepVideoConfig +from fastvideo.distributed.parallel_state import get_sp_world_size +from fastvideo.layers.layernorm import LayerNormScaleShift +from fastvideo.layers.linear import ReplicatedLinear +from fastvideo.layers.mlp import MLP +from fastvideo.layers.rotary_embedding import (_apply_rotary_emb, + get_rotary_pos_embed) +from fastvideo.layers.visual_embedding import TimestepEmbedder +from fastvideo.models.dits.base import BaseDiT +from fastvideo.platforms import AttentionBackendEnum class PatchEmbed2D(nn.Module): diff --git a/fastvideo/v1/models/dits/wanvideo.py b/fastvideo/models/dits/wanvideo.py similarity index 96% rename from fastvideo/v1/models/dits/wanvideo.py rename to fastvideo/models/dits/wanvideo.py index 89afa1345..2ca840622 100644 --- a/fastvideo/v1/models/dits/wanvideo.py +++ b/fastvideo/models/dits/wanvideo.py @@ -7,27 +7,27 @@ import numpy as np import torch import torch.nn as nn -import fastvideo.v1.envs as envs -from fastvideo.v1.attention import (DistributedAttention, - DistributedAttention_VSA, LocalAttention) -from fastvideo.v1.configs.models.dits import WanVideoConfig -from fastvideo.v1.configs.sample.wan import WanTeaCacheParams -from fastvideo.v1.distributed.parallel_state import get_sp_world_size -from fastvideo.v1.forward_context import get_forward_context -from fastvideo.v1.layers.layernorm import (FP32LayerNorm, LayerNormScaleShift, - RMSNorm, ScaleResidual, - ScaleResidualLayerNormScaleShift) -from fastvideo.v1.layers.linear import ReplicatedLinear +import fastvideo.envs as envs +from fastvideo.attention import (DistributedAttention, DistributedAttention_VSA, + LocalAttention) +from fastvideo.configs.models.dits import WanVideoConfig +from fastvideo.configs.sample.wan import WanTeaCacheParams +from fastvideo.distributed.parallel_state import get_sp_world_size +from fastvideo.forward_context import get_forward_context +from fastvideo.layers.layernorm import (FP32LayerNorm, LayerNormScaleShift, + RMSNorm, ScaleResidual, + ScaleResidualLayerNormScaleShift) +from fastvideo.layers.linear import ReplicatedLinear # from torch.nn import RMSNorm # TODO: RMSNorm .... -from fastvideo.v1.layers.mlp import MLP -from fastvideo.v1.layers.rotary_embedding import (_apply_rotary_emb, - get_rotary_pos_embed) -from fastvideo.v1.layers.visual_embedding import (ModulateProjection, - PatchEmbed, TimestepEmbedder) -from fastvideo.v1.logger import init_logger -from fastvideo.v1.models.dits.base import CachableDiT -from fastvideo.v1.platforms import AttentionBackendEnum, current_platform +from fastvideo.layers.mlp import MLP +from fastvideo.layers.rotary_embedding import (_apply_rotary_emb, + get_rotary_pos_embed) +from fastvideo.layers.visual_embedding import (ModulateProjection, PatchEmbed, + TimestepEmbedder) +from fastvideo.logger import init_logger +from fastvideo.models.dits.base import CachableDiT +from fastvideo.platforms import AttentionBackendEnum, current_platform logger = init_logger(__name__) diff --git a/fastvideo/v1/models/encoders/base.py b/fastvideo/models/encoders/base.py similarity index 89% rename from fastvideo/v1/models/encoders/base.py rename to fastvideo/models/encoders/base.py index 7e6ae7076..2ba2ffff1 100644 --- a/fastvideo/v1/models/encoders/base.py +++ b/fastvideo/models/encoders/base.py @@ -5,10 +5,10 @@ from dataclasses import field import torch from torch import nn -from fastvideo.v1.configs.models.encoders import (BaseEncoderOutput, - ImageEncoderConfig, - TextEncoderConfig) -from fastvideo.v1.platforms import AttentionBackendEnum +from fastvideo.configs.models.encoders import (BaseEncoderOutput, + ImageEncoderConfig, + TextEncoderConfig) +from fastvideo.platforms import AttentionBackendEnum class TextEncoder(nn.Module, ABC): diff --git a/fastvideo/v1/models/encoders/bert.py b/fastvideo/models/encoders/bert.py similarity index 100% rename from fastvideo/v1/models/encoders/bert.py rename to fastvideo/models/encoders/bert.py diff --git a/fastvideo/v1/models/encoders/clip.py b/fastvideo/models/encoders/clip.py similarity index 96% rename from fastvideo/v1/models/encoders/clip.py rename to fastvideo/models/encoders/clip.py index 8efcc0ba0..63c3ede47 100644 --- a/fastvideo/v1/models/encoders/clip.py +++ b/fastvideo/models/encoders/clip.py @@ -9,21 +9,20 @@ import torch import torch.nn as nn # from transformers.modeling_attn_mask_utils import _create_4d_causal_attention_mask, _prepare_4d_attention_mask -from fastvideo.v1.attention import LocalAttention -from fastvideo.v1.configs.models.encoders import (BaseEncoderOutput, - CLIPTextConfig, - CLIPVisionConfig) -from fastvideo.v1.distributed import divide, get_tp_world_size -from fastvideo.v1.layers.activation import get_act_fn -from fastvideo.v1.layers.linear import (ColumnParallelLinear, QKVParallelLinear, - RowParallelLinear) -from fastvideo.v1.layers.quantization import QuantizationConfig -from fastvideo.v1.logger import init_logger -from fastvideo.v1.models.encoders.base import ImageEncoder, TextEncoder -from fastvideo.v1.models.encoders.vision import resolve_visual_encoder_outputs +from fastvideo.attention import LocalAttention +from fastvideo.configs.models.encoders import (BaseEncoderOutput, + CLIPTextConfig, CLIPVisionConfig) +from fastvideo.distributed import divide, get_tp_world_size +from fastvideo.layers.activation import get_act_fn +from fastvideo.layers.linear import (ColumnParallelLinear, QKVParallelLinear, + RowParallelLinear) +from fastvideo.layers.quantization import QuantizationConfig +from fastvideo.logger import init_logger +from fastvideo.models.encoders.base import ImageEncoder, TextEncoder +from fastvideo.models.encoders.vision import resolve_visual_encoder_outputs # TODO: support quantization # from vllm.model_executor.layers.quantization import QuantizationConfig -from fastvideo.v1.models.loader.weight_utils import default_weight_loader +from fastvideo.models.loader.weight_utils import default_weight_loader logger = init_logger(__name__) diff --git a/fastvideo/v1/models/encoders/llama.py b/fastvideo/models/encoders/llama.py similarity index 95% rename from fastvideo/v1/models/encoders/llama.py rename to fastvideo/models/encoders/llama.py index b3b1f1aec..ea9bdc928 100644 --- a/fastvideo/v1/models/encoders/llama.py +++ b/fastvideo/models/encoders/llama.py @@ -30,20 +30,20 @@ import torch from torch import nn # from vllm.model_executor.layers.quantization import QuantizationConfig -from fastvideo.v1.attention import LocalAttention +from fastvideo.attention import LocalAttention # from ..utils import (extract_layer_index) -from fastvideo.v1.configs.models.encoders import BaseEncoderOutput, LlamaConfig -from fastvideo.v1.distributed import get_tp_world_size -from fastvideo.v1.layers.activation import SiluAndMul -from fastvideo.v1.layers.layernorm import RMSNorm -from fastvideo.v1.layers.linear import (MergedColumnParallelLinear, - QKVParallelLinear, RowParallelLinear) -from fastvideo.v1.layers.quantization import QuantizationConfig -from fastvideo.v1.layers.rotary_embedding import get_rope -from fastvideo.v1.layers.vocab_parallel_embedding import VocabParallelEmbedding -from fastvideo.v1.models.encoders.base import TextEncoder -from fastvideo.v1.models.loader.weight_utils import (default_weight_loader, - maybe_remap_kv_scale_name) +from fastvideo.configs.models.encoders import BaseEncoderOutput, LlamaConfig +from fastvideo.distributed import get_tp_world_size +from fastvideo.layers.activation import SiluAndMul +from fastvideo.layers.layernorm import RMSNorm +from fastvideo.layers.linear import (MergedColumnParallelLinear, + QKVParallelLinear, RowParallelLinear) +from fastvideo.layers.quantization import QuantizationConfig +from fastvideo.layers.rotary_embedding import get_rope +from fastvideo.layers.vocab_parallel_embedding import VocabParallelEmbedding +from fastvideo.models.encoders.base import TextEncoder +from fastvideo.models.loader.weight_utils import (default_weight_loader, + maybe_remap_kv_scale_name) class LlamaMLP(nn.Module): diff --git a/fastvideo/v1/models/encoders/stepllm.py b/fastvideo/models/encoders/stepllm.py similarity index 99% rename from fastvideo/v1/models/encoders/stepllm.py rename to fastvideo/models/encoders/stepllm.py index 6fbe053b4..184800ef9 100644 --- a/fastvideo/v1/models/encoders/stepllm.py +++ b/fastvideo/models/encoders/stepllm.py @@ -21,7 +21,7 @@ import torch.nn.functional as F from einops import rearrange from transformers.modeling_utils import PretrainedConfig, PreTrainedModel -from fastvideo.v1.models.dits.stepvideo import StepVideoRMSNorm +from fastvideo.models.dits.stepvideo import StepVideoRMSNorm class EmptyInitOnDevice(torch.overrides.TorchFunctionMode): diff --git a/fastvideo/v1/models/encoders/t5.py b/fastvideo/models/encoders/t5.py similarity index 97% rename from fastvideo/v1/models/encoders/t5.py rename to fastvideo/models/encoders/t5.py index ae935118d..5671b96ce 100644 --- a/fastvideo/v1/models/encoders/t5.py +++ b/fastvideo/models/encoders/t5.py @@ -27,17 +27,17 @@ import torch import torch.nn.functional as F from torch import nn -from fastvideo.v1.configs.models.encoders import BaseEncoderOutput, T5Config -from fastvideo.v1.distributed import get_tp_rank, get_tp_world_size -from fastvideo.v1.layers.activation import get_act_fn -from fastvideo.v1.layers.layernorm import RMSNorm -from fastvideo.v1.layers.linear import (MergedColumnParallelLinear, - QKVParallelLinear, RowParallelLinear) -from fastvideo.v1.layers.quantization import QuantizationConfig -from fastvideo.v1.layers.vocab_parallel_embedding import VocabParallelEmbedding -from fastvideo.v1.models.encoders.base import TextEncoder -from fastvideo.v1.models.loader.weight_utils import default_weight_loader -from fastvideo.v1.platforms import current_platform +from fastvideo.configs.models.encoders import BaseEncoderOutput, T5Config +from fastvideo.distributed import get_tp_rank, get_tp_world_size +from fastvideo.layers.activation import get_act_fn +from fastvideo.layers.layernorm import RMSNorm +from fastvideo.layers.linear import (MergedColumnParallelLinear, + QKVParallelLinear, RowParallelLinear) +from fastvideo.layers.quantization import QuantizationConfig +from fastvideo.layers.vocab_parallel_embedding import VocabParallelEmbedding +from fastvideo.models.encoders.base import TextEncoder +from fastvideo.models.loader.weight_utils import default_weight_loader +from fastvideo.platforms import current_platform class AttentionType: diff --git a/fastvideo/v1/models/encoders/vision.py b/fastvideo/models/encoders/vision.py similarity index 98% rename from fastvideo/v1/models/encoders/vision.py rename to fastvideo/models/encoders/vision.py index d26dab19c..de3ab5739 100644 --- a/fastvideo/v1/models/encoders/vision.py +++ b/fastvideo/models/encoders/vision.py @@ -7,7 +7,7 @@ from typing import Generic, TypeVar import torch from transformers import PretrainedConfig -from fastvideo.v1.logger import init_logger +from fastvideo.logger import init_logger logger = init_logger(__name__) diff --git a/fastvideo/v1/models/hf_transformer_utils.py b/fastvideo/models/hf_transformer_utils.py similarity index 100% rename from fastvideo/v1/models/hf_transformer_utils.py rename to fastvideo/models/hf_transformer_utils.py diff --git a/fastvideo/v1/models/__init__.py b/fastvideo/models/loader/__init__.py similarity index 100% rename from fastvideo/v1/models/__init__.py rename to fastvideo/models/loader/__init__.py diff --git a/fastvideo/v1/models/loader/component_loader.py b/fastvideo/models/loader/component_loader.py similarity index 96% rename from fastvideo/v1/models/loader/component_loader.py rename to fastvideo/models/loader/component_loader.py index aced84489..5ad5fc03d 100644 --- a/fastvideo/v1/models/loader/component_loader.py +++ b/fastvideo/models/loader/component_loader.py @@ -18,20 +18,19 @@ from torch.distributed import init_device_mesh from transformers import AutoImageProcessor, AutoTokenizer from transformers.utils import SAFE_WEIGHTS_INDEX_NAME -from fastvideo.v1.configs.models import EncoderConfig -from fastvideo.v1.distributed import get_local_torch_device -from fastvideo.v1.fastvideo_args import FastVideoArgs -from fastvideo.v1.logger import init_logger -from fastvideo.v1.models.hf_transformer_utils import get_diffusers_config -from fastvideo.v1.models.loader.fsdp_load import (maybe_load_fsdp_model, - shard_model) -from fastvideo.v1.models.loader.utils import set_default_torch_dtype -from fastvideo.v1.models.loader.weight_utils import ( +from fastvideo.configs.models import EncoderConfig +from fastvideo.distributed import get_local_torch_device +from fastvideo.fastvideo_args import FastVideoArgs +from fastvideo.logger import init_logger +from fastvideo.models.hf_transformer_utils import get_diffusers_config +from fastvideo.models.loader.fsdp_load import maybe_load_fsdp_model, shard_model +from fastvideo.models.loader.utils import set_default_torch_dtype +from fastvideo.models.loader.weight_utils import ( filter_duplicate_safetensors_files, filter_files_not_needed_for_inference, pt_weights_iterator, safetensors_weights_iterator) -from fastvideo.v1.models.registry import ModelRegistry -from fastvideo.v1.platforms import current_platform -from fastvideo.v1.utils import PRECISION_TO_TYPE +from fastvideo.models.registry import ModelRegistry +from fastvideo.platforms import current_platform +from fastvideo.utils import PRECISION_TO_TYPE logger = init_logger(__name__) diff --git a/fastvideo/v1/models/loader/fsdp_load.py b/fastvideo/models/loader/fsdp_load.py similarity index 97% rename from fastvideo/v1/models/loader/fsdp_load.py rename to fastvideo/models/loader/fsdp_load.py index 9a8bce7ba..117b1a728 100644 --- a/fastvideo/v1/models/loader/fsdp_load.py +++ b/fastvideo/models/loader/fsdp_load.py @@ -17,11 +17,11 @@ from torch.distributed.fsdp import (CPUOffloadPolicy, FSDPModule, MixedPrecisionPolicy, fully_shard) from torch.nn.modules.module import _IncompatibleKeys -from fastvideo.v1.logger import init_logger -from fastvideo.v1.models.loader.utils import (get_param_names_mapping, - hf_to_custom_state_dict) -from fastvideo.v1.models.loader.weight_utils import safetensors_weights_iterator -from fastvideo.v1.utils import set_mixed_precision_policy +from fastvideo.logger import init_logger +from fastvideo.models.loader.utils import (get_param_names_mapping, + hf_to_custom_state_dict) +from fastvideo.models.loader.weight_utils import safetensors_weights_iterator +from fastvideo.utils import set_mixed_precision_policy logger = init_logger(__name__) @@ -94,7 +94,7 @@ def maybe_load_fsdp_model( use_fsdp = training_mode or fsdp_inference # Disable FSDP for MPS as it's not compatible - from fastvideo.v1.platforms import current_platform + from fastvideo.platforms import current_platform if current_platform.is_mps(): use_fsdp = False logger.info("Disabling FSDP for MPS platform as it's not compatible") diff --git a/fastvideo/v1/models/loader/utils.py b/fastvideo/models/loader/utils.py similarity index 98% rename from fastvideo/v1/models/loader/utils.py rename to fastvideo/models/loader/utils.py index 9294d8759..033cd0058 100644 --- a/fastvideo/v1/models/loader/utils.py +++ b/fastvideo/models/loader/utils.py @@ -8,7 +8,7 @@ from typing import Any import torch -from fastvideo.v1.logger import init_logger +from fastvideo.logger import init_logger logger = init_logger(__name__) diff --git a/fastvideo/v1/models/loader/weight_utils.py b/fastvideo/models/loader/weight_utils.py similarity index 98% rename from fastvideo/v1/models/loader/weight_utils.py rename to fastvideo/models/loader/weight_utils.py index 83fe8f945..3e6fa91ba 100644 --- a/fastvideo/v1/models/loader/weight_utils.py +++ b/fastvideo/models/loader/weight_utils.py @@ -14,8 +14,8 @@ import torch from safetensors.torch import safe_open from tqdm.auto import tqdm -from fastvideo.v1.distributed import get_local_torch_device -from fastvideo.v1.logger import init_logger +from fastvideo.distributed import get_local_torch_device +from fastvideo.logger import init_logger logger = init_logger(__name__) diff --git a/fastvideo/v1/models/parameter.py b/fastvideo/models/parameter.py similarity index 98% rename from fastvideo/v1/models/parameter.py rename to fastvideo/models/parameter.py index 081f46452..dd7dfac10 100644 --- a/fastvideo/v1/models/parameter.py +++ b/fastvideo/models/parameter.py @@ -8,9 +8,9 @@ from typing import Any import torch from torch.nn import Parameter -from fastvideo.v1.distributed import get_tp_rank -from fastvideo.v1.logger import init_logger -from fastvideo.v1.models.utils import _make_synced_weight_loader +from fastvideo.distributed import get_tp_rank +from fastvideo.logger import init_logger +from fastvideo.models.utils import _make_synced_weight_loader logger = init_logger(__name__) @@ -44,7 +44,7 @@ class BasevLLMParameter(Parameter): # tensor, which is param.data, leading to the redundant memory usage. # This sometimes causes OOM errors during model loading. To avoid this, # we sync the param tensor after its weight loader is called. - from fastvideo.v1.platforms import current_platform + from fastvideo.platforms import current_platform if current_platform.is_tpu(): weight_loader = _make_synced_weight_loader(weight_loader) diff --git a/fastvideo/v1/models/registry.py b/fastvideo/models/registry.py similarity index 97% rename from fastvideo/v1/models/registry.py rename to fastvideo/models/registry.py index eeb42c1ef..8f364cd08 100644 --- a/fastvideo/v1/models/registry.py +++ b/fastvideo/models/registry.py @@ -16,7 +16,7 @@ from typing import NoReturn, TypeVar, cast import cloudpickle from torch import nn -from fastvideo.v1.logger import logger +from fastvideo.logger import logger # huggingface class name: (component_name, fastvideo module name, fastvideo class name) _TEXT_TO_VIDEO_DIT_MODELS = { @@ -68,9 +68,7 @@ _FAST_VIDEO_MODELS = { **_SCHEDULERS, } -_SUBPROCESS_COMMAND = [ - sys.executable, "-m", "fastvideo.v1.models.dits.registry" -] +_SUBPROCESS_COMMAND = [sys.executable, "-m", "fastvideo.models.dits.registry"] _T = TypeVar("_T") @@ -169,7 +167,7 @@ def _try_load_model_cls( model_arch: str, model: _BaseRegisteredModel, ) -> type[nn.Module] | None: - from fastvideo.v1.platforms import current_platform + from fastvideo.platforms import current_platform current_platform.verify_model_arch(model_arch) try: return model.load_model_cls() @@ -302,7 +300,7 @@ class _ModelRegistry: ModelRegistry = _ModelRegistry({ model_arch: _LazyRegisteredModel( - module_name=f"fastvideo.v1.models.{component_name}.{mod_relname}", + module_name=f"fastvideo.models.{component_name}.{mod_relname}", component_name=component_name, class_name=cls_name, ) diff --git a/fastvideo/v1/models/schedulers/base.py b/fastvideo/models/schedulers/base.py similarity index 100% rename from fastvideo/v1/models/schedulers/base.py rename to fastvideo/models/schedulers/base.py diff --git a/fastvideo/v1/models/schedulers/scheduling_flow_match_euler_discrete.py b/fastvideo/models/schedulers/scheduling_flow_match_euler_discrete.py similarity index 99% rename from fastvideo/v1/models/schedulers/scheduling_flow_match_euler_discrete.py rename to fastvideo/models/schedulers/scheduling_flow_match_euler_discrete.py index b7792c9ad..a1c4d3e27 100644 --- a/fastvideo/v1/models/schedulers/scheduling_flow_match_euler_discrete.py +++ b/fastvideo/models/schedulers/scheduling_flow_match_euler_discrete.py @@ -29,8 +29,8 @@ from diffusers.configuration_utils import ConfigMixin, register_to_config from diffusers.schedulers.scheduling_utils import SchedulerMixin from diffusers.utils import BaseOutput -from fastvideo.v1.logger import init_logger -from fastvideo.v1.models.schedulers.base import BaseScheduler +from fastvideo.logger import init_logger +from fastvideo.models.schedulers.base import BaseScheduler logger = init_logger(__name__) diff --git a/fastvideo/v1/models/schedulers/scheduling_flow_unipc_multistep.py b/fastvideo/models/schedulers/scheduling_flow_unipc_multistep.py similarity index 99% rename from fastvideo/v1/models/schedulers/scheduling_flow_unipc_multistep.py rename to fastvideo/models/schedulers/scheduling_flow_unipc_multistep.py index 40f86b634..945ffd132 100644 --- a/fastvideo/v1/models/schedulers/scheduling_flow_unipc_multistep.py +++ b/fastvideo/models/schedulers/scheduling_flow_unipc_multistep.py @@ -14,7 +14,7 @@ from diffusers.schedulers.scheduling_utils import (KarrasDiffusionSchedulers, SchedulerOutput) from diffusers.utils import deprecate -from fastvideo.v1.models.schedulers.base import BaseScheduler +from fastvideo.models.schedulers.base import BaseScheduler class FlowUniPCMultistepScheduler(SchedulerMixin, ConfigMixin, BaseScheduler): diff --git a/fastvideo/v1/models/schedulers/scheduling_unipc_multistep.py b/fastvideo/models/schedulers/scheduling_unipc_multistep.py similarity index 99% rename from fastvideo/v1/models/schedulers/scheduling_unipc_multistep.py rename to fastvideo/models/schedulers/scheduling_unipc_multistep.py index 2c06ef66c..800188111 100644 --- a/fastvideo/v1/models/schedulers/scheduling_unipc_multistep.py +++ b/fastvideo/models/schedulers/scheduling_unipc_multistep.py @@ -33,7 +33,7 @@ from diffusers.schedulers.scheduling_utils import (KarrasDiffusionSchedulers, SchedulerOutput) from diffusers.utils import deprecate -from fastvideo.v1.models.schedulers.base import BaseScheduler +from fastvideo.models.schedulers.base import BaseScheduler # Copied from diffusers.schedulers.scheduling_ddpm.betas_for_alpha_bar diff --git a/fastvideo/v1/models/utils.py b/fastvideo/models/utils.py similarity index 98% rename from fastvideo/v1/models/utils.py rename to fastvideo/models/utils.py index a336b8de8..36233720b 100644 --- a/fastvideo/v1/models/utils.py +++ b/fastvideo/models/utils.py @@ -79,7 +79,7 @@ def set_weight_attrs( # This sometimes causes OOM errors during model loading. To avoid this, # we sync the param tensor after its weight loader is called. # TODO(woosuk): Remove this hack once we have a better solution. - from fastvideo.v1.platforms import current_platform + from fastvideo.platforms import current_platform if current_platform.is_tpu() and key == "weight_loader": value = _make_synced_weight_loader(value) setattr(weight, key, value) diff --git a/fastvideo/v1/models/vaes/common.py b/fastvideo/models/vaes/common.py similarity index 99% rename from fastvideo/v1/models/vaes/common.py rename to fastvideo/models/vaes/common.py index 6975a5b38..9730c8ff8 100644 --- a/fastvideo/v1/models/vaes/common.py +++ b/fastvideo/models/vaes/common.py @@ -10,8 +10,8 @@ import torch import torch.distributed as dist from diffusers.utils.torch_utils import randn_tensor -from fastvideo.v1.configs.models import VAEConfig -from fastvideo.v1.distributed import get_sp_parallel_rank, get_sp_world_size +from fastvideo.configs.models import VAEConfig +from fastvideo.distributed import get_sp_parallel_rank, get_sp_world_size class ParallelTiledVAE(ABC): diff --git a/fastvideo/v1/models/vaes/hunyuanvae.py b/fastvideo/models/vaes/hunyuanvae.py similarity index 99% rename from fastvideo/v1/models/vaes/hunyuanvae.py rename to fastvideo/models/vaes/hunyuanvae.py index 0e1330146..d0f614ea3 100644 --- a/fastvideo/v1/models/vaes/hunyuanvae.py +++ b/fastvideo/models/vaes/hunyuanvae.py @@ -20,9 +20,9 @@ import torch import torch.nn as nn import torch.nn.functional as F -from fastvideo.v1.configs.models.vaes import HunyuanVAEConfig -from fastvideo.v1.layers.activation import get_act_fn -from fastvideo.v1.models.vaes.common import ParallelTiledVAE +from fastvideo.configs.models.vaes import HunyuanVAEConfig +from fastvideo.layers.activation import get_act_fn +from fastvideo.models.vaes.common import ParallelTiledVAE def prepare_causal_attention_mask( diff --git a/fastvideo/v1/models/vaes/stepvideovae.py b/fastvideo/models/vaes/stepvideovae.py similarity index 99% rename from fastvideo/v1/models/vaes/stepvideovae.py rename to fastvideo/models/vaes/stepvideovae.py index 15d50d9eb..28354ec7c 100644 --- a/fastvideo/v1/models/vaes/stepvideovae.py +++ b/fastvideo/models/vaes/stepvideovae.py @@ -18,8 +18,8 @@ from einops import rearrange from torch import nn from torch.nn import functional as F -from fastvideo.v1.configs.models.vaes import StepVideoVAEConfig -from fastvideo.v1.models.vaes.common import ParallelTiledVAE +from fastvideo.configs.models.vaes import StepVideoVAEConfig +from fastvideo.models.vaes.common import ParallelTiledVAE def base_group_norm(x, diff --git a/fastvideo/v1/models/vaes/wanvae.py b/fastvideo/models/vaes/wanvae.py similarity index 99% rename from fastvideo/v1/models/vaes/wanvae.py rename to fastvideo/models/vaes/wanvae.py index 909b4390a..5dedf01af 100644 --- a/fastvideo/v1/models/vaes/wanvae.py +++ b/fastvideo/models/vaes/wanvae.py @@ -21,11 +21,11 @@ import torch import torch.nn as nn import torch.nn.functional as F -from fastvideo.v1.configs.models.vaes import WanVAEConfig -from fastvideo.v1.layers.activation import get_act_fn -from fastvideo.v1.models.vaes.common import (DiagonalGaussianDistribution, - ParallelTiledVAE) -from fastvideo.v1.platforms import current_platform +from fastvideo.configs.models.vaes import WanVAEConfig +from fastvideo.layers.activation import get_act_fn +from fastvideo.models.vaes.common import (DiagonalGaussianDistribution, + ParallelTiledVAE) +from fastvideo.platforms import current_platform CACHE_T = 2 diff --git a/fastvideo/v1/models/vision_utils.py b/fastvideo/models/vision_utils.py similarity index 100% rename from fastvideo/v1/models/vision_utils.py rename to fastvideo/models/vision_utils.py diff --git a/fastvideo/v1/pipelines/README.md b/fastvideo/pipelines/README.md similarity index 100% rename from fastvideo/v1/pipelines/README.md rename to fastvideo/pipelines/README.md diff --git a/fastvideo/v1/pipelines/__init__.py b/fastvideo/pipelines/__init__.py similarity index 74% rename from fastvideo/v1/pipelines/__init__.py rename to fastvideo/pipelines/__init__.py index 4a78dec0f..f6ab43463 100644 --- a/fastvideo/v1/pipelines/__init__.py +++ b/fastvideo/pipelines/__init__.py @@ -1,21 +1,20 @@ # SPDX-License-Identifier: Apache-2.0 """ -Diffusion pipelines for fastvideo.v1. +Diffusion pipelines for fastvideo. This package contains diffusion pipelines for generating videos and images. """ from typing import cast -from fastvideo.v1.fastvideo_args import FastVideoArgs -from fastvideo.v1.logger import init_logger -from fastvideo.v1.pipelines.composed_pipeline_base import ComposedPipelineBase -from fastvideo.v1.pipelines.lora_pipeline import LoRAPipeline -from fastvideo.v1.pipelines.pipeline_batch_info import (ForwardBatch, - TrainingBatch) -from fastvideo.v1.pipelines.pipeline_registry import PipelineRegistry -from fastvideo.v1.utils import (maybe_download_model, - verify_model_config_and_directory) +from fastvideo.fastvideo_args import FastVideoArgs +from fastvideo.logger import init_logger +from fastvideo.pipelines.composed_pipeline_base import ComposedPipelineBase +from fastvideo.pipelines.lora_pipeline import LoRAPipeline +from fastvideo.pipelines.pipeline_batch_info import ForwardBatch, TrainingBatch +from fastvideo.pipelines.pipeline_registry import PipelineRegistry +from fastvideo.utils import (maybe_download_model, + verify_model_config_and_directory) logger = init_logger(__name__) diff --git a/fastvideo/v1/pipelines/composed_pipeline_base.py b/fastvideo/pipelines/composed_pipeline_base.py similarity index 95% rename from fastvideo/v1/pipelines/composed_pipeline_base.py rename to fastvideo/pipelines/composed_pipeline_base.py index 94cbe15d4..89caedc44 100644 --- a/fastvideo/v1/pipelines/composed_pipeline_base.py +++ b/fastvideo/pipelines/composed_pipeline_base.py @@ -12,16 +12,16 @@ from typing import Any, cast import torch -from fastvideo.v1.configs.pipelines import PipelineConfig -from fastvideo.v1.distributed import ( +from fastvideo.configs.pipelines import PipelineConfig +from fastvideo.distributed import ( maybe_init_distributed_environment_and_model_parallel) -from fastvideo.v1.fastvideo_args import FastVideoArgs, TrainingArgs -from fastvideo.v1.logger import init_logger -from fastvideo.v1.models.loader.component_loader import PipelineComponentLoader -from fastvideo.v1.pipelines.pipeline_batch_info import ForwardBatch -from fastvideo.v1.pipelines.stages import PipelineStage -from fastvideo.v1.utils import (maybe_download_model, - verify_model_config_and_directory) +from fastvideo.fastvideo_args import FastVideoArgs, TrainingArgs +from fastvideo.logger import init_logger +from fastvideo.models.loader.component_loader import PipelineComponentLoader +from fastvideo.pipelines.pipeline_batch_info import ForwardBatch +from fastvideo.pipelines.stages import PipelineStage +from fastvideo.utils import (maybe_download_model, + verify_model_config_and_directory) logger = init_logger(__name__) diff --git a/fastvideo/v1/models/loader/__init__.py b/fastvideo/pipelines/hunyuan/__init__.py similarity index 100% rename from fastvideo/v1/models/loader/__init__.py rename to fastvideo/pipelines/hunyuan/__init__.py diff --git a/fastvideo/v1/pipelines/hunyuan/hunyuan_pipeline.py b/fastvideo/pipelines/hunyuan/hunyuan_pipeline.py similarity index 80% rename from fastvideo/v1/pipelines/hunyuan/hunyuan_pipeline.py rename to fastvideo/pipelines/hunyuan/hunyuan_pipeline.py index 3414c26a0..0b94fa5bf 100644 --- a/fastvideo/v1/pipelines/hunyuan/hunyuan_pipeline.py +++ b/fastvideo/pipelines/hunyuan/hunyuan_pipeline.py @@ -6,14 +6,14 @@ This module contains an implementation of the Hunyuan video diffusion pipeline using the modular pipeline architecture. """ -from fastvideo.v1.fastvideo_args import FastVideoArgs -from fastvideo.v1.logger import init_logger -from fastvideo.v1.pipelines.composed_pipeline_base import ComposedPipelineBase -from fastvideo.v1.pipelines.stages import (ConditioningStage, DecodingStage, - DenoisingStage, InputValidationStage, - LatentPreparationStage, - TextEncodingStage, - TimestepPreparationStage) +from fastvideo.fastvideo_args import FastVideoArgs +from fastvideo.logger import init_logger +from fastvideo.pipelines.composed_pipeline_base import ComposedPipelineBase +from fastvideo.pipelines.stages import (ConditioningStage, DecodingStage, + DenoisingStage, InputValidationStage, + LatentPreparationStage, + TextEncodingStage, + TimestepPreparationStage) # TODO(will): move PRECISION_TO_TYPE to better place diff --git a/fastvideo/v1/pipelines/lora_pipeline.py b/fastvideo/pipelines/lora_pipeline.py similarity index 94% rename from fastvideo/v1/pipelines/lora_pipeline.py rename to fastvideo/pipelines/lora_pipeline.py index ff3ae84fb..58c04f44b 100644 --- a/fastvideo/v1/pipelines/lora_pipeline.py +++ b/fastvideo/pipelines/lora_pipeline.py @@ -10,14 +10,14 @@ from safetensors.torch import load_file from torch.distributed.device_mesh import init_device_mesh from torch.distributed.tensor import DTensor -from fastvideo.v1.distributed import get_local_torch_device -from fastvideo.v1.fastvideo_args import FastVideoArgs, TrainingArgs -from fastvideo.v1.layers.lora.linear import (BaseLayerWithLoRA, get_lora_layer, - replace_submodule) -from fastvideo.v1.logger import init_logger -from fastvideo.v1.models.loader.utils import get_param_names_mapping -from fastvideo.v1.pipelines.composed_pipeline_base import ComposedPipelineBase -from fastvideo.v1.utils import maybe_download_lora +from fastvideo.distributed import get_local_torch_device +from fastvideo.fastvideo_args import FastVideoArgs, TrainingArgs +from fastvideo.layers.lora.linear import (BaseLayerWithLoRA, get_lora_layer, + replace_submodule) +from fastvideo.logger import init_logger +from fastvideo.models.loader.utils import get_param_names_mapping +from fastvideo.pipelines.composed_pipeline_base import ComposedPipelineBase +from fastvideo.utils import maybe_download_lora logger = init_logger(__name__) diff --git a/fastvideo/v1/pipelines/pipeline_batch_info.py b/fastvideo/pipelines/pipeline_batch_info.py similarity index 96% rename from fastvideo/v1/pipelines/pipeline_batch_info.py rename to fastvideo/pipelines/pipeline_batch_info.py index d9a01df87..4bcd1e967 100644 --- a/fastvideo/v1/pipelines/pipeline_batch_info.py +++ b/fastvideo/pipelines/pipeline_batch_info.py @@ -14,9 +14,8 @@ from typing import Any import PIL.Image import torch -from fastvideo.v1.attention import AttentionMetadata -from fastvideo.v1.configs.sample.teacache import (TeaCacheParams, - WanTeaCacheParams) +from fastvideo.attention import AttentionMetadata +from fastvideo.configs.sample.teacache import TeaCacheParams, WanTeaCacheParams @dataclass diff --git a/fastvideo/v1/pipelines/pipeline_registry.py b/fastvideo/pipelines/pipeline_registry.py similarity index 93% rename from fastvideo/v1/pipelines/pipeline_registry.py rename to fastvideo/pipelines/pipeline_registry.py index af06d460a..a51e0d2eb 100644 --- a/fastvideo/v1/pipelines/pipeline_registry.py +++ b/fastvideo/pipelines/pipeline_registry.py @@ -8,9 +8,9 @@ from collections.abc import Set from dataclasses import dataclass, field from functools import lru_cache -from fastvideo.v1.logger import init_logger -from fastvideo.v1.pipelines.composed_pipeline_base import ComposedPipelineBase -from fastvideo.v1.pipelines.lora_pipeline import LoRAPipeline +from fastvideo.logger import init_logger +from fastvideo.pipelines.composed_pipeline_base import ComposedPipelineBase +from fastvideo.pipelines.lora_pipeline import LoRAPipeline logger = init_logger(__name__) @@ -51,7 +51,7 @@ class _PipelineRegistry: @lru_cache def import_pipeline_classes(): pipeline_arch_name_to_cls = {} - package_name = "fastvideo.v1.pipelines" + package_name = "fastvideo.pipelines" package = importlib.import_module(package_name) for _, name, ispkg in pkgutil.iter_modules(package.__path__, package_name + "."): diff --git a/fastvideo/v1/pipelines/preprocess/preprocess_pipeline_base.py b/fastvideo/pipelines/preprocess/preprocess_pipeline_base.py similarity index 98% rename from fastvideo/v1/pipelines/preprocess/preprocess_pipeline_base.py rename to fastvideo/pipelines/preprocess/preprocess_pipeline_base.py index 78538b747..004cdeffd 100644 --- a/fastvideo/v1/pipelines/preprocess/preprocess_pipeline_base.py +++ b/fastvideo/pipelines/preprocess/preprocess_pipeline_base.py @@ -11,14 +11,14 @@ import torch from torch.utils.data import DataLoader from tqdm import tqdm -from fastvideo.v1.dataset import getdataset -from fastvideo.v1.dataset.preprocessing_datasets import PreprocessBatch -from fastvideo.v1.distributed import get_local_torch_device -from fastvideo.v1.fastvideo_args import FastVideoArgs -from fastvideo.v1.logger import init_logger -from fastvideo.v1.pipelines.composed_pipeline_base import ComposedPipelineBase -from fastvideo.v1.pipelines.pipeline_batch_info import ForwardBatch -from fastvideo.v1.pipelines.stages import TextEncodingStage +from fastvideo.dataset import getdataset +from fastvideo.dataset.preprocessing_datasets import PreprocessBatch +from fastvideo.distributed import get_local_torch_device +from fastvideo.fastvideo_args import FastVideoArgs +from fastvideo.logger import init_logger +from fastvideo.pipelines.composed_pipeline_base import ComposedPipelineBase +from fastvideo.pipelines.pipeline_batch_info import ForwardBatch +from fastvideo.pipelines.stages import TextEncodingStage logger = init_logger(__name__) diff --git a/fastvideo/v1/pipelines/preprocess/preprocess_pipeline_i2v.py b/fastvideo/pipelines/preprocess/preprocess_pipeline_i2v.py similarity index 95% rename from fastvideo/v1/pipelines/preprocess/preprocess_pipeline_i2v.py rename to fastvideo/pipelines/preprocess/preprocess_pipeline_i2v.py index 1f2ffa702..98ece8a3d 100644 --- a/fastvideo/v1/pipelines/preprocess/preprocess_pipeline_i2v.py +++ b/fastvideo/pipelines/preprocess/preprocess_pipeline_i2v.py @@ -11,13 +11,13 @@ import numpy as np import torch from PIL import Image -from fastvideo.v1.dataset.dataloader.schema import pyarrow_schema_i2v -from fastvideo.v1.distributed import get_local_torch_device -from fastvideo.v1.fastvideo_args import FastVideoArgs -from fastvideo.v1.forward_context import set_forward_context -from fastvideo.v1.pipelines.preprocess.preprocess_pipeline_base import ( +from fastvideo.dataset.dataloader.schema import pyarrow_schema_i2v +from fastvideo.distributed import get_local_torch_device +from fastvideo.fastvideo_args import FastVideoArgs +from fastvideo.forward_context import set_forward_context +from fastvideo.pipelines.preprocess.preprocess_pipeline_base import ( BasePreprocessPipeline) -from fastvideo.v1.pipelines.stages import ImageEncodingStage, TextEncodingStage +from fastvideo.pipelines.stages import ImageEncodingStage, TextEncodingStage class PreprocessPipeline_I2V(BasePreprocessPipeline): diff --git a/fastvideo/v1/pipelines/preprocess/preprocess_pipeline_t2v.py b/fastvideo/pipelines/preprocess/preprocess_pipeline_t2v.py similarity index 80% rename from fastvideo/v1/pipelines/preprocess/preprocess_pipeline_t2v.py rename to fastvideo/pipelines/preprocess/preprocess_pipeline_t2v.py index ff924a3d3..e39346e6e 100644 --- a/fastvideo/v1/pipelines/preprocess/preprocess_pipeline_t2v.py +++ b/fastvideo/pipelines/preprocess/preprocess_pipeline_t2v.py @@ -5,8 +5,8 @@ T2V Data Preprocessing pipeline implementation. This module contains an implementation of the T2V Data Preprocessing pipeline using the modular pipeline architecture. """ -from fastvideo.v1.dataset.dataloader.schema import pyarrow_schema_t2v -from fastvideo.v1.pipelines.preprocess.preprocess_pipeline_base import ( +from fastvideo.dataset.dataloader.schema import pyarrow_schema_t2v +from fastvideo.pipelines.preprocess.preprocess_pipeline_base import ( BasePreprocessPipeline) diff --git a/fastvideo/v1/pipelines/preprocess/v1_preprocess.py b/fastvideo/pipelines/preprocess/v1_preprocess.py similarity index 90% rename from fastvideo/v1/pipelines/preprocess/v1_preprocess.py rename to fastvideo/pipelines/preprocess/v1_preprocess.py index cfab752ca..b0465fd56 100644 --- a/fastvideo/v1/pipelines/preprocess/v1_preprocess.py +++ b/fastvideo/pipelines/preprocess/v1_preprocess.py @@ -2,16 +2,16 @@ import argparse import os from fastvideo import PipelineConfig -from fastvideo.v1.configs.models.vaes import WanVAEConfig -from fastvideo.v1.distributed import ( +from fastvideo.configs.models.vaes import WanVAEConfig +from fastvideo.distributed import ( get_world_size, maybe_init_distributed_environment_and_model_parallel) -from fastvideo.v1.fastvideo_args import FastVideoArgs -from fastvideo.v1.logger import init_logger -from fastvideo.v1.pipelines.preprocess.preprocess_pipeline_i2v import ( +from fastvideo.fastvideo_args import FastVideoArgs +from fastvideo.logger import init_logger +from fastvideo.pipelines.preprocess.preprocess_pipeline_i2v import ( PreprocessPipeline_I2V) -from fastvideo.v1.pipelines.preprocess.preprocess_pipeline_t2v import ( +from fastvideo.pipelines.preprocess.preprocess_pipeline_t2v import ( PreprocessPipeline_T2V) -from fastvideo.v1.utils import maybe_download_model +from fastvideo.utils import maybe_download_model logger = init_logger(__name__) diff --git a/fastvideo/pipelines/stages/__init__.py b/fastvideo/pipelines/stages/__init__.py new file mode 100644 index 000000000..0a7845c01 --- /dev/null +++ b/fastvideo/pipelines/stages/__init__.py @@ -0,0 +1,37 @@ +# SPDX-License-Identifier: Apache-2.0 +""" +Pipeline stages for diffusion models. + +This package contains the various stages that can be composed to create +complete diffusion pipelines. +""" + +from fastvideo.pipelines.stages.base import PipelineStage +from fastvideo.pipelines.stages.conditioning import ConditioningStage +from fastvideo.pipelines.stages.decoding import DecodingStage +from fastvideo.pipelines.stages.denoising import (DenoisingStage, + DmdDenoisingStage) +from fastvideo.pipelines.stages.encoding import EncodingStage +from fastvideo.pipelines.stages.image_encoding import ImageEncodingStage +from fastvideo.pipelines.stages.input_validation import InputValidationStage +from fastvideo.pipelines.stages.latent_preparation import LatentPreparationStage +from fastvideo.pipelines.stages.stepvideo_encoding import ( + StepvideoPromptEncodingStage) +from fastvideo.pipelines.stages.text_encoding import TextEncodingStage +from fastvideo.pipelines.stages.timestep_preparation import ( + TimestepPreparationStage) + +__all__ = [ + "PipelineStage", + "InputValidationStage", + "TimestepPreparationStage", + "LatentPreparationStage", + "ConditioningStage", + "DenoisingStage", + "DmdDenoisingStage", + "EncodingStage", + "DecodingStage", + "ImageEncodingStage", + "TextEncodingStage", + "StepvideoPromptEncodingStage", +] diff --git a/fastvideo/v1/pipelines/stages/base.py b/fastvideo/pipelines/stages/base.py similarity index 95% rename from fastvideo/v1/pipelines/stages/base.py rename to fastvideo/pipelines/stages/base.py index 6f54ef4bb..43e6c9ac5 100644 --- a/fastvideo/v1/pipelines/stages/base.py +++ b/fastvideo/pipelines/stages/base.py @@ -12,10 +12,10 @@ from abc import ABC, abstractmethod import torch -from fastvideo.v1.fastvideo_args import FastVideoArgs -from fastvideo.v1.logger import init_logger -from fastvideo.v1.pipelines.pipeline_batch_info import ForwardBatch -from fastvideo.v1.pipelines.stages.validators import VerificationResult +from fastvideo.fastvideo_args import FastVideoArgs +from fastvideo.logger import init_logger +from fastvideo.pipelines.pipeline_batch_info import ForwardBatch +from fastvideo.pipelines.stages.validators import VerificationResult logger = init_logger(__name__) @@ -40,7 +40,7 @@ class PipelineStage(ABC): Verify the input for the stage. Example: - from fastvideo.v1.pipelines.stages.validators import V, VerificationResult + from fastvideo.pipelines.stages.validators import V, VerificationResult def verify_input(self, batch, fastvideo_args): result = VerificationResult() diff --git a/fastvideo/v1/pipelines/stages/conditioning.py b/fastvideo/pipelines/stages/conditioning.py similarity index 89% rename from fastvideo/v1/pipelines/stages/conditioning.py rename to fastvideo/pipelines/stages/conditioning.py index cbed69d7a..3eda6a123 100644 --- a/fastvideo/v1/pipelines/stages/conditioning.py +++ b/fastvideo/pipelines/stages/conditioning.py @@ -5,12 +5,12 @@ Conditioning stage for diffusion pipelines. import torch -from fastvideo.v1.fastvideo_args import FastVideoArgs -from fastvideo.v1.logger import init_logger -from fastvideo.v1.pipelines.pipeline_batch_info import ForwardBatch -from fastvideo.v1.pipelines.stages.base import PipelineStage -from fastvideo.v1.pipelines.stages.validators import StageValidators as V -from fastvideo.v1.pipelines.stages.validators import VerificationResult +from fastvideo.fastvideo_args import FastVideoArgs +from fastvideo.logger import init_logger +from fastvideo.pipelines.pipeline_batch_info import ForwardBatch +from fastvideo.pipelines.stages.base import PipelineStage +from fastvideo.pipelines.stages.validators import StageValidators as V +from fastvideo.pipelines.stages.validators import VerificationResult logger = init_logger(__name__) diff --git a/fastvideo/v1/pipelines/stages/decoding.py b/fastvideo/pipelines/stages/decoding.py similarity index 88% rename from fastvideo/v1/pipelines/stages/decoding.py rename to fastvideo/pipelines/stages/decoding.py index 7ccde3102..44de981d4 100644 --- a/fastvideo/v1/pipelines/stages/decoding.py +++ b/fastvideo/pipelines/stages/decoding.py @@ -8,16 +8,16 @@ import weakref import torch -from fastvideo.v1.distributed import get_local_torch_device -from fastvideo.v1.fastvideo_args import FastVideoArgs -from fastvideo.v1.logger import init_logger -from fastvideo.v1.models.loader.component_loader import VAELoader -from fastvideo.v1.models.vaes.common import ParallelTiledVAE -from fastvideo.v1.pipelines.pipeline_batch_info import ForwardBatch -from fastvideo.v1.pipelines.stages.base import PipelineStage -from fastvideo.v1.pipelines.stages.validators import StageValidators as V -from fastvideo.v1.pipelines.stages.validators import VerificationResult -from fastvideo.v1.utils import PRECISION_TO_TYPE +from fastvideo.distributed import get_local_torch_device +from fastvideo.fastvideo_args import FastVideoArgs +from fastvideo.logger import init_logger +from fastvideo.models.loader.component_loader import VAELoader +from fastvideo.models.vaes.common import ParallelTiledVAE +from fastvideo.pipelines.pipeline_batch_info import ForwardBatch +from fastvideo.pipelines.stages.base import PipelineStage +from fastvideo.pipelines.stages.validators import StageValidators as V +from fastvideo.pipelines.stages.validators import VerificationResult +from fastvideo.utils import PRECISION_TO_TYPE logger = init_logger(__name__) diff --git a/fastvideo/v1/pipelines/stages/denoising.py b/fastvideo/pipelines/stages/denoising.py similarity index 95% rename from fastvideo/v1/pipelines/stages/denoising.py rename to fastvideo/pipelines/stages/denoising.py index 07a4aad15..88f91a5f5 100644 --- a/fastvideo/v1/pipelines/stages/denoising.py +++ b/fastvideo/pipelines/stages/denoising.py @@ -13,35 +13,34 @@ import torch from einops import rearrange from tqdm.auto import tqdm -from fastvideo.v1.attention import get_attn_backend -from fastvideo.v1.configs.pipelines.base import STA_Mode -from fastvideo.v1.distributed import (get_local_torch_device, - get_sp_parallel_rank, get_sp_world_size, - get_world_group) -from fastvideo.v1.distributed.communication_op import ( +from fastvideo.attention import get_attn_backend +from fastvideo.configs.pipelines.base import STA_Mode +from fastvideo.distributed import (get_local_torch_device, get_sp_parallel_rank, + get_sp_world_size, get_world_group) +from fastvideo.distributed.communication_op import ( sequence_model_parallel_all_gather) -from fastvideo.v1.fastvideo_args import FastVideoArgs -from fastvideo.v1.forward_context import set_forward_context -from fastvideo.v1.logger import init_logger -from fastvideo.v1.models.loader.component_loader import TransformerLoader -from fastvideo.v1.models.schedulers.scheduling_flow_match_euler_discrete import ( +from fastvideo.fastvideo_args import FastVideoArgs +from fastvideo.forward_context import set_forward_context +from fastvideo.logger import init_logger +from fastvideo.models.loader.component_loader import TransformerLoader +from fastvideo.models.schedulers.scheduling_flow_match_euler_discrete import ( FlowMatchEulerDiscreteScheduler) -from fastvideo.v1.pipelines.pipeline_batch_info import ForwardBatch -from fastvideo.v1.pipelines.stages.base import PipelineStage -from fastvideo.v1.pipelines.stages.validators import StageValidators as V -from fastvideo.v1.pipelines.stages.validators import VerificationResult -from fastvideo.v1.platforms import AttentionBackendEnum -from fastvideo.v1.utils import dict_to_3d_list +from fastvideo.pipelines.pipeline_batch_info import ForwardBatch +from fastvideo.pipelines.stages.base import PipelineStage +from fastvideo.pipelines.stages.validators import StageValidators as V +from fastvideo.pipelines.stages.validators import VerificationResult +from fastvideo.platforms import AttentionBackendEnum +from fastvideo.utils import dict_to_3d_list try: - from fastvideo.v1.attention.backends.sliding_tile_attn import ( + from fastvideo.attention.backends.sliding_tile_attn import ( SlidingTileAttentionBackend) st_attn_available = True except ImportError: st_attn_available = False try: - from fastvideo.v1.attention.backends.video_sparse_attn import ( + from fastvideo.attention.backends.video_sparse_attn import ( VideoSparseAttentionBackend) vsa_available = True except ImportError: @@ -407,7 +406,7 @@ class DenoisingStage(PipelineStage): fastvideo_args: The inference arguments. """ # TODO(kevin): STA mask search, currently only support Wan2.1 with 69x768x1280 - from fastvideo.v1.STA_configuration import configure_sta + from fastvideo.STA_configuration import configure_sta STA_mode = fastvideo_args.STA_mode skip_time_steps = fastvideo_args.skip_time_steps if batch.timesteps is None: @@ -482,7 +481,7 @@ class DenoisingStage(PipelineStage): save_dir=f'output/mask_search_strategy_{size[0]}x{size[1]}/', timesteps=timesteps_num) elif STA_mode == STA_Mode.STA_INFERENCE: - import fastvideo.v1.envs as envs + import fastvideo.envs as envs config_file = envs.FASTVIDEO_ATTENTION_CONFIG if config_file is None: raise ValueError("FASTVIDEO_ATTENTION_CONFIG is not set") @@ -514,7 +513,7 @@ class DenoisingStage(PipelineStage): raise NotImplementedError( "STA mask search is not supported for this resolution") - from fastvideo.v1.STA_configuration import save_mask_search_results + from fastvideo.STA_configuration import save_mask_search_results if batch.mask_search_final_result_pos is not None and batch.prompt is not None: save_mask_search_results( [ @@ -748,7 +747,7 @@ class DmdDenoisingStage(DenoisingStage): **pos_cond_kwargs, ).permute(0, 2, 1, 3, 4) - from fastvideo.v1.training.training_utils import ( + from fastvideo.training.training_utils import ( pred_noise_to_pred_video) pred_video = pred_noise_to_pred_video( pred_noise=pred_noise.flatten(0, 1), diff --git a/fastvideo/v1/pipelines/stages/encoding.py b/fastvideo/pipelines/stages/encoding.py similarity index 90% rename from fastvideo/v1/pipelines/stages/encoding.py rename to fastvideo/pipelines/stages/encoding.py index 8c9ab6193..54c20bce7 100644 --- a/fastvideo/v1/pipelines/stages/encoding.py +++ b/fastvideo/pipelines/stages/encoding.py @@ -6,18 +6,17 @@ Encoding stage for diffusion pipelines. import PIL.Image import torch -from fastvideo.v1.distributed import get_local_torch_device -from fastvideo.v1.fastvideo_args import FastVideoArgs -from fastvideo.v1.logger import init_logger -from fastvideo.v1.models.vaes.common import ParallelTiledVAE -from fastvideo.v1.models.vision_utils import (get_default_height_width, - normalize, numpy_to_pt, - pil_to_numpy, resize) -from fastvideo.v1.pipelines.pipeline_batch_info import ForwardBatch -from fastvideo.v1.pipelines.stages.base import PipelineStage -from fastvideo.v1.pipelines.stages.validators import V # Import validators -from fastvideo.v1.pipelines.stages.validators import VerificationResult -from fastvideo.v1.utils import PRECISION_TO_TYPE +from fastvideo.distributed import get_local_torch_device +from fastvideo.fastvideo_args import FastVideoArgs +from fastvideo.logger import init_logger +from fastvideo.models.vaes.common import ParallelTiledVAE +from fastvideo.models.vision_utils import (get_default_height_width, normalize, + numpy_to_pt, pil_to_numpy, resize) +from fastvideo.pipelines.pipeline_batch_info import ForwardBatch +from fastvideo.pipelines.stages.base import PipelineStage +from fastvideo.pipelines.stages.validators import V # Import validators +from fastvideo.pipelines.stages.validators import VerificationResult +from fastvideo.utils import PRECISION_TO_TYPE logger = init_logger(__name__) diff --git a/fastvideo/v1/pipelines/stages/image_encoding.py b/fastvideo/pipelines/stages/image_encoding.py similarity index 84% rename from fastvideo/v1/pipelines/stages/image_encoding.py rename to fastvideo/pipelines/stages/image_encoding.py index c98bd9b2e..fa7991e83 100644 --- a/fastvideo/v1/pipelines/stages/image_encoding.py +++ b/fastvideo/pipelines/stages/image_encoding.py @@ -7,14 +7,14 @@ This module contains implementations of image encoding stages for diffusion pipe import torch -from fastvideo.v1.distributed import get_local_torch_device -from fastvideo.v1.fastvideo_args import FastVideoArgs -from fastvideo.v1.forward_context import set_forward_context -from fastvideo.v1.logger import init_logger -from fastvideo.v1.pipelines.pipeline_batch_info import ForwardBatch -from fastvideo.v1.pipelines.stages.base import PipelineStage -from fastvideo.v1.pipelines.stages.validators import StageValidators as V -from fastvideo.v1.pipelines.stages.validators import VerificationResult +from fastvideo.distributed import get_local_torch_device +from fastvideo.fastvideo_args import FastVideoArgs +from fastvideo.forward_context import set_forward_context +from fastvideo.logger import init_logger +from fastvideo.pipelines.pipeline_batch_info import ForwardBatch +from fastvideo.pipelines.stages.base import PipelineStage +from fastvideo.pipelines.stages.validators import StageValidators as V +from fastvideo.pipelines.stages.validators import VerificationResult logger = init_logger(__name__) diff --git a/fastvideo/v1/pipelines/stages/input_validation.py b/fastvideo/pipelines/stages/input_validation.py similarity index 91% rename from fastvideo/v1/pipelines/stages/input_validation.py rename to fastvideo/pipelines/stages/input_validation.py index 31127d06e..466ece75c 100644 --- a/fastvideo/v1/pipelines/stages/input_validation.py +++ b/fastvideo/pipelines/stages/input_validation.py @@ -5,13 +5,13 @@ Input validation stage for diffusion pipelines. import torch -from fastvideo.v1.fastvideo_args import FastVideoArgs -from fastvideo.v1.logger import init_logger -from fastvideo.v1.models.vision_utils import load_image, load_video -from fastvideo.v1.pipelines.pipeline_batch_info import ForwardBatch -from fastvideo.v1.pipelines.stages.base import PipelineStage -from fastvideo.v1.pipelines.stages.validators import (StageValidators, - VerificationResult) +from fastvideo.fastvideo_args import FastVideoArgs +from fastvideo.logger import init_logger +from fastvideo.models.vision_utils import load_image, load_video +from fastvideo.pipelines.pipeline_batch_info import ForwardBatch +from fastvideo.pipelines.stages.base import PipelineStage +from fastvideo.pipelines.stages.validators import (StageValidators, + VerificationResult) logger = init_logger(__name__) diff --git a/fastvideo/v1/pipelines/stages/latent_preparation.py b/fastvideo/pipelines/stages/latent_preparation.py similarity index 93% rename from fastvideo/v1/pipelines/stages/latent_preparation.py rename to fastvideo/pipelines/stages/latent_preparation.py index 2142edc4e..e4f6c0448 100644 --- a/fastvideo/v1/pipelines/stages/latent_preparation.py +++ b/fastvideo/pipelines/stages/latent_preparation.py @@ -5,13 +5,13 @@ Latent preparation stage for diffusion pipelines. from diffusers.utils.torch_utils import randn_tensor -from fastvideo.v1.distributed import get_local_torch_device -from fastvideo.v1.fastvideo_args import FastVideoArgs -from fastvideo.v1.logger import init_logger -from fastvideo.v1.pipelines.pipeline_batch_info import ForwardBatch -from fastvideo.v1.pipelines.stages.base import PipelineStage -from fastvideo.v1.pipelines.stages.validators import StageValidators as V -from fastvideo.v1.pipelines.stages.validators import VerificationResult +from fastvideo.distributed import get_local_torch_device +from fastvideo.fastvideo_args import FastVideoArgs +from fastvideo.logger import init_logger +from fastvideo.pipelines.pipeline_batch_info import ForwardBatch +from fastvideo.pipelines.stages.base import PipelineStage +from fastvideo.pipelines.stages.validators import StageValidators as V +from fastvideo.pipelines.stages.validators import VerificationResult logger = init_logger(__name__) diff --git a/fastvideo/v1/pipelines/stages/stepvideo_encoding.py b/fastvideo/pipelines/stages/stepvideo_encoding.py similarity index 87% rename from fastvideo/v1/pipelines/stages/stepvideo_encoding.py rename to fastvideo/pipelines/stages/stepvideo_encoding.py index 93a2f07f5..3705f4516 100644 --- a/fastvideo/v1/pipelines/stages/stepvideo_encoding.py +++ b/fastvideo/pipelines/stages/stepvideo_encoding.py @@ -2,13 +2,13 @@ import torch -from fastvideo.v1.fastvideo_args import FastVideoArgs -from fastvideo.v1.forward_context import set_forward_context -from fastvideo.v1.logger import init_logger -from fastvideo.v1.pipelines.pipeline_batch_info import ForwardBatch -from fastvideo.v1.pipelines.stages.base import PipelineStage -from fastvideo.v1.pipelines.stages.validators import StageValidators as V -from fastvideo.v1.pipelines.stages.validators import VerificationResult +from fastvideo.fastvideo_args import FastVideoArgs +from fastvideo.forward_context import set_forward_context +from fastvideo.logger import init_logger +from fastvideo.pipelines.pipeline_batch_info import ForwardBatch +from fastvideo.pipelines.stages.base import PipelineStage +from fastvideo.pipelines.stages.validators import StageValidators as V +from fastvideo.pipelines.stages.validators import VerificationResult logger = init_logger(__name__) diff --git a/fastvideo/v1/pipelines/stages/text_encoding.py b/fastvideo/pipelines/stages/text_encoding.py similarity index 91% rename from fastvideo/v1/pipelines/stages/text_encoding.py rename to fastvideo/pipelines/stages/text_encoding.py index 03c217e2c..5a25236da 100644 --- a/fastvideo/v1/pipelines/stages/text_encoding.py +++ b/fastvideo/pipelines/stages/text_encoding.py @@ -7,14 +7,14 @@ This module contains implementations of prompt encoding stages for diffusion pip import torch -from fastvideo.v1.distributed import get_local_torch_device -from fastvideo.v1.fastvideo_args import FastVideoArgs -from fastvideo.v1.forward_context import set_forward_context -from fastvideo.v1.logger import init_logger -from fastvideo.v1.pipelines.pipeline_batch_info import ForwardBatch -from fastvideo.v1.pipelines.stages.base import PipelineStage -from fastvideo.v1.pipelines.stages.validators import StageValidators as V -from fastvideo.v1.pipelines.stages.validators import VerificationResult +from fastvideo.distributed import get_local_torch_device +from fastvideo.fastvideo_args import FastVideoArgs +from fastvideo.forward_context import set_forward_context +from fastvideo.logger import init_logger +from fastvideo.pipelines.pipeline_batch_info import ForwardBatch +from fastvideo.pipelines.stages.base import PipelineStage +from fastvideo.pipelines.stages.validators import StageValidators as V +from fastvideo.pipelines.stages.validators import VerificationResult logger = init_logger(__name__) diff --git a/fastvideo/v1/pipelines/stages/timestep_preparation.py b/fastvideo/pipelines/stages/timestep_preparation.py similarity index 90% rename from fastvideo/v1/pipelines/stages/timestep_preparation.py rename to fastvideo/pipelines/stages/timestep_preparation.py index 475a0ef31..546810256 100644 --- a/fastvideo/v1/pipelines/stages/timestep_preparation.py +++ b/fastvideo/pipelines/stages/timestep_preparation.py @@ -7,13 +7,13 @@ This module contains implementations of timestep preparation stages for diffusio import inspect -from fastvideo.v1.distributed import get_local_torch_device -from fastvideo.v1.fastvideo_args import FastVideoArgs -from fastvideo.v1.logger import init_logger -from fastvideo.v1.pipelines.pipeline_batch_info import ForwardBatch -from fastvideo.v1.pipelines.stages.base import PipelineStage -from fastvideo.v1.pipelines.stages.validators import StageValidators as V -from fastvideo.v1.pipelines.stages.validators import VerificationResult +from fastvideo.distributed import get_local_torch_device +from fastvideo.fastvideo_args import FastVideoArgs +from fastvideo.logger import init_logger +from fastvideo.pipelines.pipeline_batch_info import ForwardBatch +from fastvideo.pipelines.stages.base import PipelineStage +from fastvideo.pipelines.stages.validators import StageValidators as V +from fastvideo.pipelines.stages.validators import VerificationResult logger = init_logger(__name__) diff --git a/fastvideo/v1/pipelines/stages/validators.py b/fastvideo/pipelines/stages/validators.py similarity index 100% rename from fastvideo/v1/pipelines/stages/validators.py rename to fastvideo/pipelines/stages/validators.py diff --git a/fastvideo/v1/pipelines/hunyuan/__init__.py b/fastvideo/pipelines/stepvideo/__init__.py similarity index 100% rename from fastvideo/v1/pipelines/hunyuan/__init__.py rename to fastvideo/pipelines/stepvideo/__init__.py diff --git a/fastvideo/v1/pipelines/stepvideo/stepvideo_pipeline.py b/fastvideo/pipelines/stepvideo/stepvideo_pipeline.py similarity index 86% rename from fastvideo/v1/pipelines/stepvideo/stepvideo_pipeline.py rename to fastvideo/pipelines/stepvideo/stepvideo_pipeline.py index 7501dc226..49cb91c1b 100644 --- a/fastvideo/v1/pipelines/stepvideo/stepvideo_pipeline.py +++ b/fastvideo/pipelines/stepvideo/stepvideo_pipeline.py @@ -14,19 +14,19 @@ from typing import Any import torch from huggingface_hub import hf_hub_download -from fastvideo.v1.distributed import get_local_torch_device -from fastvideo.v1.fastvideo_args import FastVideoArgs -from fastvideo.v1.logger import init_logger -from fastvideo.v1.models.encoders.bert import HunyuanClip # type: ignore -from fastvideo.v1.models.encoders.stepllm import STEP1TextEncoder -from fastvideo.v1.models.loader.component_loader import PipelineComponentLoader -from fastvideo.v1.pipelines.composed_pipeline_base import ComposedPipelineBase -from fastvideo.v1.pipelines.lora_pipeline import LoRAPipeline -from fastvideo.v1.pipelines.stages import (DecodingStage, DenoisingStage, - InputValidationStage, - LatentPreparationStage, - StepvideoPromptEncodingStage, - TimestepPreparationStage) +from fastvideo.distributed import get_local_torch_device +from fastvideo.fastvideo_args import FastVideoArgs +from fastvideo.logger import init_logger +from fastvideo.models.encoders.bert import HunyuanClip # type: ignore +from fastvideo.models.encoders.stepllm import STEP1TextEncoder +from fastvideo.models.loader.component_loader import PipelineComponentLoader +from fastvideo.pipelines.composed_pipeline_base import ComposedPipelineBase +from fastvideo.pipelines.lora_pipeline import LoRAPipeline +from fastvideo.pipelines.stages import (DecodingStage, DenoisingStage, + InputValidationStage, + LatentPreparationStage, + StepvideoPromptEncodingStage, + TimestepPreparationStage) logger = init_logger(__name__) diff --git a/fastvideo/v1/pipelines/stepvideo/__init__.py b/fastvideo/pipelines/wan/__init__.py similarity index 100% rename from fastvideo/v1/pipelines/stepvideo/__init__.py rename to fastvideo/pipelines/wan/__init__.py diff --git a/fastvideo/v1/pipelines/wan/wan_dmd_pipeline.py b/fastvideo/pipelines/wan/wan_dmd_pipeline.py similarity index 79% rename from fastvideo/v1/pipelines/wan/wan_dmd_pipeline.py rename to fastvideo/pipelines/wan/wan_dmd_pipeline.py index 79cc4bda3..81ece4609 100644 --- a/fastvideo/v1/pipelines/wan/wan_dmd_pipeline.py +++ b/fastvideo/pipelines/wan/wan_dmd_pipeline.py @@ -6,16 +6,18 @@ This module contains an implementation of the Wan video diffusion pipeline using the modular pipeline architecture. """ -from fastvideo.v1.fastvideo_args import FastVideoArgs -from fastvideo.v1.logger import init_logger -from fastvideo.v1.models.schedulers.scheduling_flow_match_euler_discrete import ( +from fastvideo.fastvideo_args import FastVideoArgs +from fastvideo.logger import init_logger +from fastvideo.models.schedulers.scheduling_flow_match_euler_discrete import ( FlowMatchEulerDiscreteScheduler) -from fastvideo.v1.pipelines import ComposedPipelineBase, LoRAPipeline +from fastvideo.pipelines import ComposedPipelineBase, LoRAPipeline # isort: off -from fastvideo.v1.pipelines.stages import ( - ConditioningStage, DecodingStage, DmdDenoisingStage, InputValidationStage, - LatentPreparationStage, TextEncodingStage, TimestepPreparationStage) +from fastvideo.pipelines.stages import (ConditioningStage, DecodingStage, + DmdDenoisingStage, InputValidationStage, + LatentPreparationStage, + TextEncodingStage, + TimestepPreparationStage) # isort: on logger = init_logger(__name__) diff --git a/fastvideo/v1/pipelines/wan/wan_i2v_pipeline.py b/fastvideo/pipelines/wan/wan_i2v_pipeline.py similarity index 78% rename from fastvideo/v1/pipelines/wan/wan_i2v_pipeline.py rename to fastvideo/pipelines/wan/wan_i2v_pipeline.py index 7344b11f7..29c6824aa 100644 --- a/fastvideo/v1/pipelines/wan/wan_i2v_pipeline.py +++ b/fastvideo/pipelines/wan/wan_i2v_pipeline.py @@ -6,18 +6,20 @@ This module contains an implementation of the Wan video diffusion pipeline using the modular pipeline architecture. """ -from fastvideo.v1.fastvideo_args import FastVideoArgs -from fastvideo.v1.logger import init_logger -from fastvideo.v1.pipelines.composed_pipeline_base import ComposedPipelineBase -from fastvideo.v1.pipelines.lora_pipeline import LoRAPipeline +from fastvideo.fastvideo_args import FastVideoArgs +from fastvideo.logger import init_logger +from fastvideo.pipelines.composed_pipeline_base import ComposedPipelineBase +from fastvideo.pipelines.lora_pipeline import LoRAPipeline # isort: off -from fastvideo.v1.pipelines.stages import ( - ImageEncodingStage, ConditioningStage, DecodingStage, DenoisingStage, - EncodingStage, InputValidationStage, LatentPreparationStage, - TextEncodingStage, TimestepPreparationStage) +from fastvideo.pipelines.stages import (ImageEncodingStage, ConditioningStage, + DecodingStage, DenoisingStage, + EncodingStage, InputValidationStage, + LatentPreparationStage, + TextEncodingStage, + TimestepPreparationStage) # isort: on -from fastvideo.v1.models.schedulers.scheduling_flow_unipc_multistep import ( +from fastvideo.models.schedulers.scheduling_flow_unipc_multistep import ( FlowUniPCMultistepScheduler) logger = init_logger(__name__) diff --git a/fastvideo/v1/pipelines/wan/wan_pipeline.py b/fastvideo/pipelines/wan/wan_pipeline.py similarity index 79% rename from fastvideo/v1/pipelines/wan/wan_pipeline.py rename to fastvideo/pipelines/wan/wan_pipeline.py index f95e16758..8574c2d29 100644 --- a/fastvideo/v1/pipelines/wan/wan_pipeline.py +++ b/fastvideo/pipelines/wan/wan_pipeline.py @@ -6,16 +6,16 @@ This module contains an implementation of the Wan video diffusion pipeline using the modular pipeline architecture. """ -from fastvideo.v1.fastvideo_args import FastVideoArgs -from fastvideo.v1.logger import init_logger -from fastvideo.v1.models.schedulers.scheduling_flow_unipc_multistep import ( +from fastvideo.fastvideo_args import FastVideoArgs +from fastvideo.logger import init_logger +from fastvideo.models.schedulers.scheduling_flow_unipc_multistep import ( FlowUniPCMultistepScheduler) -from fastvideo.v1.pipelines import ComposedPipelineBase, LoRAPipeline -from fastvideo.v1.pipelines.stages import (ConditioningStage, DecodingStage, - DenoisingStage, InputValidationStage, - LatentPreparationStage, - TextEncodingStage, - TimestepPreparationStage) +from fastvideo.pipelines import ComposedPipelineBase, LoRAPipeline +from fastvideo.pipelines.stages import (ConditioningStage, DecodingStage, + DenoisingStage, InputValidationStage, + LatentPreparationStage, + TextEncodingStage, + TimestepPreparationStage) logger = init_logger(__name__) diff --git a/fastvideo/v1/platforms/__init__.py b/fastvideo/platforms/__init__.py similarity index 89% rename from fastvideo/v1/platforms/__init__.py rename to fastvideo/platforms/__init__.py index f8176ad6b..455e2f6c8 100644 --- a/fastvideo/v1/platforms/__init__.py +++ b/fastvideo/platforms/__init__.py @@ -4,11 +4,11 @@ import traceback from typing import TYPE_CHECKING -from fastvideo.v1.logger import init_logger +from fastvideo.logger import init_logger # imported by other files, do not remove -from fastvideo.v1.platforms.interface import AttentionBackendEnum # noqa: F401 -from fastvideo.v1.platforms.interface import Platform, PlatformEnum -from fastvideo.v1.utils import resolve_obj_by_qualname +from fastvideo.platforms.interface import AttentionBackendEnum # noqa: F401 +from fastvideo.platforms.interface import Platform, PlatformEnum +from fastvideo.utils import resolve_obj_by_qualname logger = init_logger(__name__) @@ -17,7 +17,7 @@ def cuda_platform_plugin() -> str | None: is_cuda = False try: - from fastvideo.v1.utils import import_pynvml + from fastvideo.utils import import_pynvml pynvml = import_pynvml() # type: ignore[no-untyped-call] pynvml.nvmlInit() try: @@ -44,7 +44,7 @@ def cuda_platform_plugin() -> str | None: if cuda_is_jetson(): is_cuda = True - return "fastvideo.v1.platforms.cuda.CudaPlatform" if is_cuda else None + return "fastvideo.platforms.cuda.CudaPlatform" if is_cuda else None def mps_platform_plugin() -> str | None: @@ -61,13 +61,13 @@ def mps_platform_plugin() -> str | None: except Exception as e: logger.info("MPS detection failed: %s", e) - return "fastvideo.v1.platforms.mps.MpsPlatform" if is_mps else None + return "fastvideo.platforms.mps.MpsPlatform" if is_mps else None def cpu_platform_plugin() -> str | None: """Detect if CPU platform should be used.""" # CPU is always available as a fallback - return "fastvideo.v1.platforms.cpu.CpuPlatform" + return "fastvideo.platforms.cpu.CpuPlatform" builtin_platform_plugins = { diff --git a/fastvideo/v1/platforms/cpu.py b/fastvideo/platforms/cpu.py similarity index 86% rename from fastvideo/v1/platforms/cpu.py rename to fastvideo/platforms/cpu.py index dac291f93..3aad6ff34 100644 --- a/fastvideo/v1/platforms/cpu.py +++ b/fastvideo/platforms/cpu.py @@ -5,7 +5,7 @@ import platform import torch -from fastvideo.v1.platforms.interface import CpuArchEnum, Platform, PlatformEnum +from fastvideo.platforms.interface import CpuArchEnum, Platform, PlatformEnum class CpuPlatform(Platform): @@ -13,8 +13,6 @@ class CpuPlatform(Platform): device_name = "CPU" device_type = "cpu" dispatch_key = "CPU" - simple_compile_backend = "inductor" - supported_quantization = [] @classmethod def get_cpu_architecture(cls) -> CpuArchEnum: @@ -54,4 +52,4 @@ class CpuPlatform(Platform): @classmethod def get_device_communicator_cls(cls) -> str: - return "fastvideo.v1.distributed.device_communicators.cpu_communicator.CpuCommunicator" + return "fastvideo.distributed.device_communicators.cpu_communicator.CpuCommunicator" diff --git a/fastvideo/v1/platforms/cuda.py b/fastvideo/platforms/cuda.py similarity index 90% rename from fastvideo/v1/platforms/cuda.py rename to fastvideo/platforms/cuda.py index 9d0c3cab9..20ca613fb 100644 --- a/fastvideo/v1/platforms/cuda.py +++ b/fastvideo/platforms/cuda.py @@ -12,12 +12,12 @@ from typing import TypeVar import torch from typing_extensions import ParamSpec -import fastvideo.v1.envs as envs -from fastvideo.v1.logger import init_logger -from fastvideo.v1.platforms.interface import (AttentionBackendEnum, - DeviceCapability, Platform, - PlatformEnum) -from fastvideo.v1.utils import import_pynvml +import fastvideo.envs as envs +from fastvideo.logger import init_logger +from fastvideo.platforms.interface import (AttentionBackendEnum, + DeviceCapability, Platform, + PlatformEnum) +from fastvideo.utils import import_pynvml logger = init_logger(__name__) @@ -119,11 +119,11 @@ class CudaPlatformBase(Platform): try: from st_attn import sliding_tile_attention # noqa: F401 - from fastvideo.v1.attention.backends.sliding_tile_attn import ( # noqa: F401 + from fastvideo.attention.backends.sliding_tile_attn import ( # noqa: F401 SlidingTileAttentionBackend) logger.info("Using Sliding Tile Attention backend.") - return "fastvideo.v1.attention.backends.sliding_tile_attn.SlidingTileAttentionBackend" + return "fastvideo.attention.backends.sliding_tile_attn.SlidingTileAttentionBackend" except ImportError as e: logger.error( "Failed to import Sliding Tile Attention backend: %s", @@ -134,11 +134,11 @@ class CudaPlatformBase(Platform): try: from sageattention import sageattn # noqa: F401 - from fastvideo.v1.attention.backends.sage_attn import ( # noqa: F401 + from fastvideo.attention.backends.sage_attn import ( # noqa: F401 SageAttentionBackend) logger.info("Using Sage Attention backend.") - return "fastvideo.v1.attention.backends.sage_attn.SageAttentionBackend" + return "fastvideo.attention.backends.sage_attn.SageAttentionBackend" except ImportError as e: logger.info(e) logger.info( @@ -148,11 +148,11 @@ class CudaPlatformBase(Platform): try: from vsa import block_sparse_attn # noqa: F401 - from fastvideo.v1.attention.backends.video_sparse_attn import ( # noqa: F401 + from fastvideo.attention.backends.video_sparse_attn import ( # noqa: F401 VideoSparseAttentionBackend) logger.info("Using Video Sparse Attention backend.") - return "fastvideo.v1.attention.backends.video_sparse_attn.VideoSparseAttentionBackend" + return "fastvideo.attention.backends.video_sparse_attn.VideoSparseAttentionBackend" except ImportError as e: logger.error( "Failed to import Video Sparse Attention backend: %s", @@ -161,7 +161,7 @@ class CudaPlatformBase(Platform): "Video Sparse Attention backend is not installed. ") from e elif selected_backend == AttentionBackendEnum.TORCH_SDPA: logger.info("Using Torch SDPA backend.") - return "fastvideo.v1.attention.backends.sdpa.SDPABackend" + return "fastvideo.attention.backends.sdpa.SDPABackend" elif selected_backend == AttentionBackendEnum.FLASH_ATTN or selected_backend is None: pass elif selected_backend: @@ -185,7 +185,7 @@ class CudaPlatformBase(Platform): try: import flash_attn # noqa: F401 - from fastvideo.v1.attention.backends.flash_attn import ( # noqa: F401 + from fastvideo.attention.backends.flash_attn import ( # noqa: F401 FlashAttentionBackend) supported_sizes = \ @@ -205,15 +205,15 @@ class CudaPlatformBase(Platform): if target_backend == AttentionBackendEnum.TORCH_SDPA: logger.info("Using Torch SDPA backend.") - return "fastvideo.v1.attention.backends.sdpa.SDPABackend" + return "fastvideo.attention.backends.sdpa.SDPABackend" logger.info("Using Flash Attention backend.") - return "fastvideo.v1.attention.backends.flash_attn.FlashAttentionBackend" + return "fastvideo.attention.backends.flash_attn.FlashAttentionBackend" @classmethod def get_device_communicator_cls(cls) -> str: - return "fastvideo.v1.distributed.device_communicators.cuda_communicator.CudaCommunicator" # noqa + return "fastvideo.distributed.device_communicators.cuda_communicator.CudaCommunicator" # noqa # NVML utils diff --git a/fastvideo/v1/platforms/interface.py b/fastvideo/platforms/interface.py similarity index 97% rename from fastvideo/v1/platforms/interface.py rename to fastvideo/platforms/interface.py index d1cb2f5d1..da5a49894 100644 --- a/fastvideo/v1/platforms/interface.py +++ b/fastvideo/platforms/interface.py @@ -8,7 +8,7 @@ from typing import NamedTuple import numpy as np import torch -from fastvideo.v1.logger import init_logger +from fastvideo.logger import init_logger logger = init_logger(__name__) @@ -217,7 +217,7 @@ class Platform: """ Get device specific communicator class for distributed communication. """ - return "fastvideo.v1.distributed.device_communicators.base_device_communicator.DeviceCommunicatorBase" # noqa + return "fastvideo.distributed.device_communicators.base_device_communicator.DeviceCommunicatorBase" # noqa @classmethod def get_cpu_architecture(cls) -> CpuArchEnum: diff --git a/fastvideo/v1/platforms/mps.py b/fastvideo/platforms/mps.py similarity index 84% rename from fastvideo/v1/platforms/mps.py rename to fastvideo/platforms/mps.py index ae40f3efc..05870d619 100644 --- a/fastvideo/v1/platforms/mps.py +++ b/fastvideo/platforms/mps.py @@ -2,10 +2,10 @@ import torch -from fastvideo.v1.logger import init_logger -from fastvideo.v1.platforms import AttentionBackendEnum -from fastvideo.v1.platforms.interface import (DeviceCapability, Platform, - PlatformEnum) +from fastvideo.logger import init_logger +from fastvideo.platforms import AttentionBackendEnum +from fastvideo.platforms.interface import (DeviceCapability, Platform, + PlatformEnum) logger = init_logger(__name__) @@ -55,12 +55,12 @@ class MpsPlatform(Platform): head_size: int, dtype: torch.dtype) -> str: # MPS supports SDPA (Scaled Dot-Product Attention) which is the most compatible logger.info("Using Torch SDPA backend for MPS.") - return "fastvideo.v1.attention.backends.sdpa.SDPABackend" + return "fastvideo.attention.backends.sdpa.SDPABackend" @classmethod def get_device_communicator_cls(cls) -> str: # Use base communicator for MPS - return "fastvideo.v1.distributed.device_communicators.base_device_communicator.DeviceCommunicatorBase" + return "fastvideo.distributed.device_communicators.base_device_communicator.DeviceCommunicatorBase" @classmethod def seed_everything(cls, seed: int | None = None) -> None: diff --git a/fastvideo/v1/pipelines/wan/__init__.py b/fastvideo/tests/__init__.py similarity index 100% rename from fastvideo/v1/pipelines/wan/__init__.py rename to fastvideo/tests/__init__.py diff --git a/fastvideo/v1/tests/conftest.py b/fastvideo/tests/conftest.py similarity index 84% rename from fastvideo/v1/tests/conftest.py rename to fastvideo/tests/conftest.py index c7547ad6b..35657b7c8 100644 --- a/fastvideo/v1/tests/conftest.py +++ b/fastvideo/tests/conftest.py @@ -4,7 +4,7 @@ import pytest import torch import numpy as np -from fastvideo.v1.distributed import (maybe_init_distributed_environment_and_model_parallel, +from fastvideo.distributed import (maybe_init_distributed_environment_and_model_parallel, cleanup_dist_env_and_memory) diff --git a/fastvideo/v1/tests/encoders/test_clip_encoder.py b/fastvideo/tests/encoders/test_clip_encoder.py similarity index 93% rename from fastvideo/v1/tests/encoders/test_clip_encoder.py rename to fastvideo/tests/encoders/test_clip_encoder.py index c9680a603..90d21b508 100644 --- a/fastvideo/v1/tests/encoders/test_clip_encoder.py +++ b/fastvideo/tests/encoders/test_clip_encoder.py @@ -6,12 +6,12 @@ import pytest import torch from transformers import AutoConfig, AutoTokenizer, CLIPTextModel import gc -from fastvideo.v1.configs.pipelines import PipelineConfig -from fastvideo.v1.forward_context import set_forward_context -from fastvideo.v1.fastvideo_args import FastVideoArgs -from fastvideo.v1.logger import init_logger -from fastvideo.v1.utils import maybe_download_model -from fastvideo.v1.configs.models.encoders import CLIPTextConfig +from fastvideo.configs.pipelines import PipelineConfig +from fastvideo.forward_context import set_forward_context +from fastvideo.fastvideo_args import FastVideoArgs +from fastvideo.logger import init_logger +from fastvideo.utils import maybe_download_model +from fastvideo.configs.models.encoders import CLIPTextConfig from torch.distributed.tensor import DTensor from torch.testing import assert_close @@ -33,7 +33,7 @@ def test_clip_encoder(): """ Tests compatibility between two different implementations for loading text encoders: 1. load_text_encoder from fastvideo.models.hunyuan.text_encoder - 2. TextEncoderLoader from fastvideo.v1.models.loader + 2. TextEncoderLoader from fastvideo.models.loader The test verifies that both implementations: - Load models with the same weights and parameters @@ -54,7 +54,7 @@ def test_clip_encoder(): # Load HuggingFace implementation model1 = CLIPTextModel.from_pretrained(TEXT_ENCODER_PATH).to(torch.float16).to(device).eval() - from fastvideo.v1.models.loader.component_loader import TextEncoderLoader + from fastvideo.models.loader.component_loader import TextEncoderLoader loader = TextEncoderLoader() model2 = loader.load(TEXT_ENCODER_PATH, args) diff --git a/fastvideo/v1/tests/encoders/test_llama_encoder.py b/fastvideo/tests/encoders/test_llama_encoder.py similarity index 92% rename from fastvideo/v1/tests/encoders/test_llama_encoder.py rename to fastvideo/tests/encoders/test_llama_encoder.py index 668578484..0a7d220ce 100644 --- a/fastvideo/v1/tests/encoders/test_llama_encoder.py +++ b/fastvideo/tests/encoders/test_llama_encoder.py @@ -6,13 +6,13 @@ import pytest import torch from transformers import AutoConfig, AutoTokenizer, LlamaModel import gc -from fastvideo.v1.configs.pipelines import PipelineConfig -from fastvideo.v1.forward_context import set_forward_context -from fastvideo.v1.fastvideo_args import FastVideoArgs -from fastvideo.v1.logger import init_logger -from fastvideo.v1.models.loader.component_loader import TextEncoderLoader -from fastvideo.v1.utils import maybe_download_model -from fastvideo.v1.configs.models.encoders import LlamaConfig +from fastvideo.configs.pipelines import PipelineConfig +from fastvideo.forward_context import set_forward_context +from fastvideo.fastvideo_args import FastVideoArgs +from fastvideo.logger import init_logger +from fastvideo.models.loader.component_loader import TextEncoderLoader +from fastvideo.utils import maybe_download_model +from fastvideo.configs.models.encoders import LlamaConfig from torch.distributed.tensor import DTensor from torch.testing import assert_close logger = init_logger(__name__) @@ -33,7 +33,7 @@ def test_llama_encoder(): """ Tests compatibility between two different implementations for loading text encoders: 1. load_text_encoder from fastvideo.models.hunyuan.text_encoder - 2. TextEncoderLoader from fastvideo.v1.models.loader + 2. TextEncoderLoader from fastvideo.models.loader The test verifies that both implementations: - Load models with the same weights and parameters diff --git a/fastvideo/v1/tests/encoders/test_t5_encoder.py b/fastvideo/tests/encoders/test_t5_encoder.py similarity index 93% rename from fastvideo/v1/tests/encoders/test_t5_encoder.py rename to fastvideo/tests/encoders/test_t5_encoder.py index e56a3e024..fa75d3691 100644 --- a/fastvideo/v1/tests/encoders/test_t5_encoder.py +++ b/fastvideo/tests/encoders/test_t5_encoder.py @@ -8,13 +8,13 @@ from torch.distributed.tensor import DTensor from torch.testing import assert_close from transformers import AutoConfig, AutoTokenizer, UMT5EncoderModel -from fastvideo.v1.configs.pipelines import PipelineConfig -from fastvideo.v1.forward_context import set_forward_context -from fastvideo.v1.logger import init_logger -from fastvideo.v1.models.loader.component_loader import TextEncoderLoader -from fastvideo.v1.utils import maybe_download_model, PRECISION_TO_TYPE -from fastvideo.v1.fastvideo_args import FastVideoArgs -from fastvideo.v1.configs.models.encoders import T5Config +from fastvideo.configs.pipelines import PipelineConfig +from fastvideo.forward_context import set_forward_context +from fastvideo.logger import init_logger +from fastvideo.models.loader.component_loader import TextEncoderLoader +from fastvideo.utils import maybe_download_model, PRECISION_TO_TYPE +from fastvideo.fastvideo_args import FastVideoArgs +from fastvideo.configs.models.encoders import T5Config logger = init_logger(__name__) diff --git a/fastvideo/v1/tests/inference/STA/test_STA_inference.py b/fastvideo/tests/inference/STA/test_STA_inference.py similarity index 100% rename from fastvideo/v1/tests/inference/STA/test_STA_inference.py rename to fastvideo/tests/inference/STA/test_STA_inference.py diff --git a/fastvideo/v1/tests/inference/lora/L40S_reference_videos/Wan2.1-T2V-1.3B-Diffusers/TORCH_SDPA/steamboat-willie-1.3b_steamboat willie style, golden era animation, clos.mp4 b/fastvideo/tests/inference/lora/L40S_reference_videos/Wan2.1-T2V-1.3B-Diffusers/TORCH_SDPA/steamboat-willie-1.3b_steamboat willie style, golden era animation, clos.mp4 similarity index 100% rename from fastvideo/v1/tests/inference/lora/L40S_reference_videos/Wan2.1-T2V-1.3B-Diffusers/TORCH_SDPA/steamboat-willie-1.3b_steamboat willie style, golden era animation, clos.mp4 rename to fastvideo/tests/inference/lora/L40S_reference_videos/Wan2.1-T2V-1.3B-Diffusers/TORCH_SDPA/steamboat-willie-1.3b_steamboat willie style, golden era animation, clos.mp4 diff --git a/fastvideo/v1/tests/inference/lora/L40S_reference_videos/Wan2.1-T2V-1.3B-Diffusers/TORCH_SDPA/wan-flat-color-1.3b-v2_flat color, no lineart, blending, negative space, .mp4 b/fastvideo/tests/inference/lora/L40S_reference_videos/Wan2.1-T2V-1.3B-Diffusers/TORCH_SDPA/wan-flat-color-1.3b-v2_flat color, no lineart, blending, negative space, .mp4 similarity index 100% rename from fastvideo/v1/tests/inference/lora/L40S_reference_videos/Wan2.1-T2V-1.3B-Diffusers/TORCH_SDPA/wan-flat-color-1.3b-v2_flat color, no lineart, blending, negative space, .mp4 rename to fastvideo/tests/inference/lora/L40S_reference_videos/Wan2.1-T2V-1.3B-Diffusers/TORCH_SDPA/wan-flat-color-1.3b-v2_flat color, no lineart, blending, negative space, .mp4 diff --git a/fastvideo/v1/tests/inference/lora/test_lora_inference_similarity.py b/fastvideo/tests/inference/lora/test_lora_inference_similarity.py similarity index 96% rename from fastvideo/v1/tests/inference/lora/test_lora_inference_similarity.py rename to fastvideo/tests/inference/lora/test_lora_inference_similarity.py index 935e14e94..ae4159ee2 100644 --- a/fastvideo/v1/tests/inference/lora/test_lora_inference_similarity.py +++ b/fastvideo/tests/inference/lora/test_lora_inference_similarity.py @@ -5,15 +5,15 @@ import os import pytest from fastvideo import VideoGenerator -from fastvideo.v1.logger import init_logger -from fastvideo.v1.tests.utils import compute_video_ssim_torchvision, write_ssim_results +from fastvideo.logger import init_logger +from fastvideo.tests.utils import compute_video_ssim_torchvision, write_ssim_results from diffusers import DiffusionPipeline -from fastvideo.v1.fastvideo_args import FastVideoArgs -from fastvideo.v1.pipelines import build_pipeline -from fastvideo.v1.models.loader.utils import hf_to_custom_state_dict, get_param_names_mapping +from fastvideo.fastvideo_args import FastVideoArgs +from fastvideo.pipelines import build_pipeline +from fastvideo.models.loader.utils import hf_to_custom_state_dict, get_param_names_mapping from torch.testing import assert_close from torch.distributed.tensor import DTensor -from fastvideo.v1.worker import MultiprocExecutor +from fastvideo.worker import MultiprocExecutor import torch logger = init_logger(__name__) os.environ["MASTER_ADDR"] = "localhost" diff --git a/fastvideo/v1/tests/modal/pr_test.py b/fastvideo/tests/modal/pr_test.py similarity index 83% rename from fastvideo/v1/tests/modal/pr_test.py rename to fastvideo/tests/modal/pr_test.py index ed864bd05..258655973 100644 --- a/fastvideo/v1/tests/modal/pr_test.py +++ b/fastvideo/tests/modal/pr_test.py @@ -64,35 +64,35 @@ def run_test(pytest_command: str): @app.function(gpu="L40S:1", image=image, timeout=900) def run_encoder_tests(): - run_test("pytest ./fastvideo/v1/tests/encoders -vs") + run_test("pytest ./fastvideo/tests/encoders -vs") @app.function(gpu="L40S:1", image=image, timeout=900) def run_vae_tests(): - run_test("pytest ./fastvideo/v1/tests/vaes -vs") + run_test("pytest ./fastvideo/tests/vaes -vs") @app.function(gpu="L40S:1", image=image, timeout=900) def run_transformer_tests(): - run_test("pytest ./fastvideo/v1/tests/transformers -vs") + run_test("pytest ./fastvideo/tests/transformers -vs") @app.function(gpu="L40S:2", image=image, timeout=2700) def run_ssim_tests(): - run_test("pytest ./fastvideo/v1/tests/ssim -vs") + run_test("pytest ./fastvideo/tests/ssim -vs") @app.function(gpu="L40S:4", image=image, timeout=900, secrets=[modal.Secret.from_dict({"WANDB_API_KEY": os.environ.get("WANDB_API_KEY", "")})]) def run_training_tests(): - run_test("wandb login $WANDB_API_KEY && pytest ./fastvideo/v1/tests/training/Vanilla -srP") + run_test("wandb login $WANDB_API_KEY && pytest ./fastvideo/tests/training/Vanilla -srP") @app.function(gpu="L40S:2", image=image, timeout=900, secrets=[modal.Secret.from_dict({"WANDB_API_KEY": os.environ.get("WANDB_API_KEY", "")})]) def run_training_lora_tests(): - run_test("wandb login $WANDB_API_KEY && pytest ./fastvideo/v1/tests/training/lora/test_lora_training.py -srP") + run_test("wandb login $WANDB_API_KEY && pytest ./fastvideo/tests/training/lora/test_lora_training.py -srP") @app.function(gpu="H100:2", image=image, timeout=900, secrets=[modal.Secret.from_dict({"WANDB_API_KEY": os.environ.get("WANDB_API_KEY", "")})]) def run_training_tests_VSA(): - run_test("wandb login $WANDB_API_KEY && pytest ./fastvideo/v1/tests/training/VSA -srP") + run_test("wandb login $WANDB_API_KEY && pytest ./fastvideo/tests/training/VSA -srP") @app.function(gpu="H100:2", image=image, timeout=900) def run_inference_tests_STA(): - run_test("pytest ./fastvideo/v1/tests/inference/STA -srP") + run_test("pytest ./fastvideo/tests/inference/STA -srP") @app.function(gpu="H100:1", image=image, timeout=900) def run_precision_tests_STA(): @@ -105,4 +105,4 @@ def run_precision_tests_VSA(): @app.function(gpu="L40S:1", image=image, timeout=3600) def run_inference_lora_tests(): - run_test("pytest ./fastvideo/v1/tests/inference/lora/test_lora_inference_similarity.py -vs") \ No newline at end of file + run_test("pytest ./fastvideo/tests/inference/lora/test_lora_inference_similarity.py -vs") \ No newline at end of file diff --git a/fastvideo/v1/tests/nightly/i2v-wandb-summary.json b/fastvideo/tests/nightly/i2v-wandb-summary.json similarity index 100% rename from fastvideo/v1/tests/nightly/i2v-wandb-summary.json rename to fastvideo/tests/nightly/i2v-wandb-summary.json diff --git a/fastvideo/v1/tests/nightly/i2v_validation_videos_40_steps_900_581ff5eae2909d3a7b36.mp4 b/fastvideo/tests/nightly/i2v_validation_videos_40_steps_900_581ff5eae2909d3a7b36.mp4 similarity index 100% rename from fastvideo/v1/tests/nightly/i2v_validation_videos_40_steps_900_581ff5eae2909d3a7b36.mp4 rename to fastvideo/tests/nightly/i2v_validation_videos_40_steps_900_581ff5eae2909d3a7b36.mp4 diff --git a/fastvideo/v1/tests/nightly/reference_video_1_sample_v0.mp4 b/fastvideo/tests/nightly/reference_video_1_sample_v0.mp4 similarity index 100% rename from fastvideo/v1/tests/nightly/reference_video_1_sample_v0.mp4 rename to fastvideo/tests/nightly/reference_video_1_sample_v0.mp4 diff --git a/fastvideo/v1/tests/nightly/test_e2e_i2v_overfit_single_sample.py b/fastvideo/tests/nightly/test_e2e_i2v_overfit_single_sample.py similarity index 95% rename from fastvideo/v1/tests/nightly/test_e2e_i2v_overfit_single_sample.py rename to fastvideo/tests/nightly/test_e2e_i2v_overfit_single_sample.py index 5bff8b89f..f7a47361d 100644 --- a/fastvideo/v1/tests/nightly/test_e2e_i2v_overfit_single_sample.py +++ b/fastvideo/tests/nightly/test_e2e_i2v_overfit_single_sample.py @@ -4,7 +4,7 @@ from huggingface_hub import snapshot_download import shutil import subprocess import sys -from fastvideo.v1.tests.ssim.test_inference_similarity import compute_video_ssim_torchvision +from fastvideo.tests.ssim.test_inference_similarity import compute_video_ssim_torchvision # Import the training pipeline sys.path.append(str(Path(__file__).parent.parent.parent.parent.parent)) @@ -16,14 +16,14 @@ MODEL_PATH = "weizhou03/Wan2.1-Fun-1.3B-InP-Diffusers" DATA_DIR = "data" LOCAL_RAW_DATA_DIR = Path(os.path.join(DATA_DIR, "cats")) NUM_GPUS_PER_NODE_PREPROCESSING = "1" -PREPROCESSING_ENTRY_FILE_PATH = "fastvideo/v1/pipelines/preprocess/v1_preprocess.py" +PREPROCESSING_ENTRY_FILE_PATH = "fastvideo/pipelines/preprocess/v1_preprocess.py" LOCAL_PREPROCESSED_DATA_DIR = Path(os.path.join(DATA_DIR, "cats_preprocessed_data_i2v")) # training NUM_GPUS_PER_NODE_TRAINING = "4" -TRAINING_ENTRY_FILE_PATH = "fastvideo/v1/training/wan_i2v_training_pipeline.py" +TRAINING_ENTRY_FILE_PATH = "fastvideo/training/wan_i2v_training_pipeline.py" LOCAL_TRAINING_DATA_DIR = os.path.join(LOCAL_PREPROCESSED_DATA_DIR, "combined_parquet_dataset") LOCAL_VALIDATION_DATASET_FILE = os.path.join(LOCAL_RAW_DATA_DIR, "validation_i2v_prompt_1_sample.json") LOCAL_OUTPUT_DIR = Path(os.path.join(DATA_DIR, "outputs")) diff --git a/fastvideo/v1/tests/nightly/test_e2e_overfit_single_sample.py b/fastvideo/tests/nightly/test_e2e_overfit_single_sample.py similarity index 95% rename from fastvideo/v1/tests/nightly/test_e2e_overfit_single_sample.py rename to fastvideo/tests/nightly/test_e2e_overfit_single_sample.py index 0ace03e18..d52352ec4 100644 --- a/fastvideo/v1/tests/nightly/test_e2e_overfit_single_sample.py +++ b/fastvideo/tests/nightly/test_e2e_overfit_single_sample.py @@ -4,7 +4,7 @@ from huggingface_hub import snapshot_download import shutil import subprocess import sys -from fastvideo.v1.tests.ssim.test_inference_similarity import compute_video_ssim_torchvision +from fastvideo.tests.ssim.test_inference_similarity import compute_video_ssim_torchvision # Import the training pipeline sys.path.append(str(Path(__file__).parent.parent.parent.parent.parent)) @@ -16,14 +16,14 @@ MODEL_PATH = "Wan-AI/Wan2.1-T2V-1.3B-Diffusers" DATA_DIR = "data" LOCAL_RAW_DATA_DIR = Path(os.path.join(DATA_DIR, "cats")) NUM_GPUS_PER_NODE_PREPROCESSING = "1" -PREPROCESSING_ENTRY_FILE_PATH = "fastvideo/v1/pipelines/preprocess/v1_preprocess.py" +PREPROCESSING_ENTRY_FILE_PATH = "fastvideo/pipelines/preprocess/v1_preprocess.py" LOCAL_PREPROCESSED_DATA_DIR = Path(os.path.join(DATA_DIR, "cats_preprocessed_data")) # training NUM_GPUS_PER_NODE_TRAINING = "4" -TRAINING_ENTRY_FILE_PATH = "fastvideo/v1/training/wan_training_pipeline.py" +TRAINING_ENTRY_FILE_PATH = "fastvideo/training/wan_training_pipeline.py" LOCAL_TRAINING_DATA_DIR = os.path.join(LOCAL_PREPROCESSED_DATA_DIR, "combined_parquet_dataset") LOCAL_VALIDATION_DATASET_FILE = os.path.join(LOCAL_RAW_DATA_DIR, "validation_prompt_1_sample.json") LOCAL_OUTPUT_DIR = Path(os.path.join(DATA_DIR, "outputs")) diff --git a/fastvideo/v1/tests/old_tests/distributed_run.sh b/fastvideo/tests/old_tests/distributed_run.sh similarity index 71% rename from fastvideo/v1/tests/old_tests/distributed_run.sh rename to fastvideo/tests/old_tests/distributed_run.sh index 460c625f0..6c2ee410e 100644 --- a/fastvideo/v1/tests/old_tests/distributed_run.sh +++ b/fastvideo/tests/old_tests/distributed_run.sh @@ -10,10 +10,10 @@ torchrun --standalone --nnodes=1 --nproc_per_node=$num_gpus \ num_gpus=2 torchrun --standalone --nnodes=1 --nproc_per_node=$num_gpus \ --master_port 29503 \ - fastvideo/v1/tests/test_hunyuanvideo_load.py --sequence_model_parallel_size $num_gpus + fastvideo/tests/test_hunyuanvideo_load.py --sequence_model_parallel_size $num_gpus -torchrun --nnodes=1 --nproc_per_node=1 --master_port 29503 fastvideo/v1/tests/test_llama_encoder.py +torchrun --nnodes=1 --nproc_per_node=1 --master_port 29503 fastvideo/tests/test_llama_encoder.py export FASTVIDEO_ATTENTION_BACKEND=FLASH_ATTN -torchrun --nnodes=1 --nproc_per_node=1 --master_port 29503 fastvideo/v1/tests/test_clip_encoder.py \ No newline at end of file +torchrun --nnodes=1 --nproc_per_node=1 --master_port 29503 fastvideo/tests/test_clip_encoder.py \ No newline at end of file diff --git a/fastvideo/v1/tests/old_tests/test_t5_encoder.py b/fastvideo/tests/old_tests/test_t5_encoder.py similarity index 96% rename from fastvideo/v1/tests/old_tests/test_t5_encoder.py rename to fastvideo/tests/old_tests/test_t5_encoder.py index 5e9a4bb4e..788010e2f 100644 --- a/fastvideo/v1/tests/old_tests/test_t5_encoder.py +++ b/fastvideo/tests/old_tests/test_t5_encoder.py @@ -5,8 +5,8 @@ import numpy as np import torch from transformers import AutoConfig, AutoTokenizer, UMT5EncoderModel -from fastvideo.v1.distributed import (maybe_init_distributed_environment_and_model_parallel) -from fastvideo.v1.logger import init_logger +from fastvideo.distributed import (maybe_init_distributed_environment_and_model_parallel) +from fastvideo.logger import init_logger logger = init_logger(__name__) @@ -43,7 +43,7 @@ def test_t5_encoder(): device).eval() tokenizer = AutoTokenizer.from_pretrained(tokenizer_path) - from fastvideo.v1.models.loader.component_loader import TextEncoderLoader + from fastvideo.models.loader.component_loader import TextEncoderLoader loader = TextEncoderLoader() model2 = loader.load_model(model_path, hf_config, device) diff --git a/fastvideo/v1/tests/old_tests/test_wan_vae.py b/fastvideo/tests/old_tests/test_wan_vae.py similarity index 97% rename from fastvideo/v1/tests/old_tests/test_wan_vae.py rename to fastvideo/tests/old_tests/test_wan_vae.py index 0cf125c57..b35e24657 100644 --- a/fastvideo/v1/tests/old_tests/test_wan_vae.py +++ b/fastvideo/tests/old_tests/test_wan_vae.py @@ -7,8 +7,8 @@ import torch from diffusers import AutoencoderKLWan from safetensors.torch import load_file -from fastvideo.v1.logger import init_logger -from fastvideo.v1.models.vaes.wanvae import AutoencoderKLWan as MyWanVAE +from fastvideo.logger import init_logger +from fastvideo.models.vaes.wanvae import AutoencoderKLWan as MyWanVAE logger = init_logger(__name__) diff --git a/fastvideo/v1/tests/old_tests/tp_example.py b/fastvideo/tests/old_tests/tp_example.py similarity index 96% rename from fastvideo/v1/tests/old_tests/tp_example.py rename to fastvideo/tests/old_tests/tp_example.py index 51a8d0b80..c66dc79eb 100644 --- a/fastvideo/v1/tests/old_tests/tp_example.py +++ b/fastvideo/tests/old_tests/tp_example.py @@ -5,12 +5,12 @@ import os import torch import torch.nn as nn -from fastvideo.v1.distributed.parallel_state import ( +from fastvideo.distributed.parallel_state import ( cleanup_dist_env_and_memory, destroy_distributed_environment, destroy_model_parallel, get_tp_rank, get_tp_world_size, maybe_init_distributed_environment_and_model_parallel, get_world_group) -from fastvideo.v1.layers.linear import ColumnParallelLinear, RowParallelLinear -from fastvideo.v1.logger import init_logger +from fastvideo.layers.linear import ColumnParallelLinear, RowParallelLinear +from fastvideo.logger import init_logger logger = init_logger(__name__) diff --git a/fastvideo/v1/tests/ssim/A40_reference_videos/FastHunyuan-diffusers/FLASH_ATTN/A lone hiker stands atop a towering cliff, silhouetted against the vast horizon. The rugged landscap.mp4 b/fastvideo/tests/ssim/A40_reference_videos/FastHunyuan-diffusers/FLASH_ATTN/A lone hiker stands atop a towering cliff, silhouetted against the vast horizon. The rugged landscap.mp4 similarity index 100% rename from fastvideo/v1/tests/ssim/A40_reference_videos/FastHunyuan-diffusers/FLASH_ATTN/A lone hiker stands atop a towering cliff, silhouetted against the vast horizon. The rugged landscap.mp4 rename to fastvideo/tests/ssim/A40_reference_videos/FastHunyuan-diffusers/FLASH_ATTN/A lone hiker stands atop a towering cliff, silhouetted against the vast horizon. The rugged landscap.mp4 diff --git a/fastvideo/v1/tests/ssim/A40_reference_videos/FastHunyuan-diffusers/FLASH_ATTN/Will Smith casually eats noodles, his relaxed demeanor contrasting with the energetic background of .mp4 b/fastvideo/tests/ssim/A40_reference_videos/FastHunyuan-diffusers/FLASH_ATTN/Will Smith casually eats noodles, his relaxed demeanor contrasting with the energetic background of .mp4 similarity index 100% rename from fastvideo/v1/tests/ssim/A40_reference_videos/FastHunyuan-diffusers/FLASH_ATTN/Will Smith casually eats noodles, his relaxed demeanor contrasting with the energetic background of .mp4 rename to fastvideo/tests/ssim/A40_reference_videos/FastHunyuan-diffusers/FLASH_ATTN/Will Smith casually eats noodles, his relaxed demeanor contrasting with the energetic background of .mp4 diff --git a/fastvideo/v1/tests/ssim/A40_reference_videos/FastHunyuan-diffusers/TORCH_SDPA/A lone hiker stands atop a towering cliff, silhouetted against the vast horizon. The rugged landscap.mp4 b/fastvideo/tests/ssim/A40_reference_videos/FastHunyuan-diffusers/TORCH_SDPA/A lone hiker stands atop a towering cliff, silhouetted against the vast horizon. The rugged landscap.mp4 similarity index 100% rename from fastvideo/v1/tests/ssim/A40_reference_videos/FastHunyuan-diffusers/TORCH_SDPA/A lone hiker stands atop a towering cliff, silhouetted against the vast horizon. The rugged landscap.mp4 rename to fastvideo/tests/ssim/A40_reference_videos/FastHunyuan-diffusers/TORCH_SDPA/A lone hiker stands atop a towering cliff, silhouetted against the vast horizon. The rugged landscap.mp4 diff --git a/fastvideo/v1/tests/ssim/A40_reference_videos/FastHunyuan-diffusers/TORCH_SDPA/Will Smith casually eats noodles, his relaxed demeanor contrasting with the energetic background of .mp4 b/fastvideo/tests/ssim/A40_reference_videos/FastHunyuan-diffusers/TORCH_SDPA/Will Smith casually eats noodles, his relaxed demeanor contrasting with the energetic background of .mp4 similarity index 100% rename from fastvideo/v1/tests/ssim/A40_reference_videos/FastHunyuan-diffusers/TORCH_SDPA/Will Smith casually eats noodles, his relaxed demeanor contrasting with the energetic background of .mp4 rename to fastvideo/tests/ssim/A40_reference_videos/FastHunyuan-diffusers/TORCH_SDPA/Will Smith casually eats noodles, his relaxed demeanor contrasting with the energetic background of .mp4 diff --git a/fastvideo/v1/tests/ssim/A40_reference_videos/Wan2.1-I2V-14B-480P-Diffusers/FLASH_ATTN/An astronaut hatching from an egg, on the surface of the moon, the darkness and depth of space reali.mp4 b/fastvideo/tests/ssim/A40_reference_videos/Wan2.1-I2V-14B-480P-Diffusers/FLASH_ATTN/An astronaut hatching from an egg, on the surface of the moon, the darkness and depth of space reali.mp4 similarity index 100% rename from fastvideo/v1/tests/ssim/A40_reference_videos/Wan2.1-I2V-14B-480P-Diffusers/FLASH_ATTN/An astronaut hatching from an egg, on the surface of the moon, the darkness and depth of space reali.mp4 rename to fastvideo/tests/ssim/A40_reference_videos/Wan2.1-I2V-14B-480P-Diffusers/FLASH_ATTN/An astronaut hatching from an egg, on the surface of the moon, the darkness and depth of space reali.mp4 diff --git a/fastvideo/v1/tests/ssim/A40_reference_videos/Wan2.1-I2V-14B-480P-Diffusers/TORCH_SDPA/An astronaut hatching from an egg, on the surface of the moon, the darkness and depth of space reali.mp4 b/fastvideo/tests/ssim/A40_reference_videos/Wan2.1-I2V-14B-480P-Diffusers/TORCH_SDPA/An astronaut hatching from an egg, on the surface of the moon, the darkness and depth of space reali.mp4 similarity index 100% rename from fastvideo/v1/tests/ssim/A40_reference_videos/Wan2.1-I2V-14B-480P-Diffusers/TORCH_SDPA/An astronaut hatching from an egg, on the surface of the moon, the darkness and depth of space reali.mp4 rename to fastvideo/tests/ssim/A40_reference_videos/Wan2.1-I2V-14B-480P-Diffusers/TORCH_SDPA/An astronaut hatching from an egg, on the surface of the moon, the darkness and depth of space reali.mp4 diff --git a/fastvideo/v1/tests/ssim/A40_reference_videos/Wan2.1-T2V-1.3B-Diffusers/FLASH_ATTN/A lone hiker stands atop a towering cliff, silhouetted against the vast horizon. The rugged landscap.mp4 b/fastvideo/tests/ssim/A40_reference_videos/Wan2.1-T2V-1.3B-Diffusers/FLASH_ATTN/A lone hiker stands atop a towering cliff, silhouetted against the vast horizon. The rugged landscap.mp4 similarity index 100% rename from fastvideo/v1/tests/ssim/A40_reference_videos/Wan2.1-T2V-1.3B-Diffusers/FLASH_ATTN/A lone hiker stands atop a towering cliff, silhouetted against the vast horizon. The rugged landscap.mp4 rename to fastvideo/tests/ssim/A40_reference_videos/Wan2.1-T2V-1.3B-Diffusers/FLASH_ATTN/A lone hiker stands atop a towering cliff, silhouetted against the vast horizon. The rugged landscap.mp4 diff --git a/fastvideo/v1/tests/ssim/A40_reference_videos/Wan2.1-T2V-1.3B-Diffusers/FLASH_ATTN/Will Smith casually eats noodles, his relaxed demeanor contrasting with the energetic background of .mp4 b/fastvideo/tests/ssim/A40_reference_videos/Wan2.1-T2V-1.3B-Diffusers/FLASH_ATTN/Will Smith casually eats noodles, his relaxed demeanor contrasting with the energetic background of .mp4 similarity index 100% rename from fastvideo/v1/tests/ssim/A40_reference_videos/Wan2.1-T2V-1.3B-Diffusers/FLASH_ATTN/Will Smith casually eats noodles, his relaxed demeanor contrasting with the energetic background of .mp4 rename to fastvideo/tests/ssim/A40_reference_videos/Wan2.1-T2V-1.3B-Diffusers/FLASH_ATTN/Will Smith casually eats noodles, his relaxed demeanor contrasting with the energetic background of .mp4 diff --git a/fastvideo/v1/tests/ssim/A40_reference_videos/Wan2.1-T2V-1.3B-Diffusers/TORCH_SDPA/A lone hiker stands atop a towering cliff, silhouetted against the vast horizon. The rugged landscap.mp4 b/fastvideo/tests/ssim/A40_reference_videos/Wan2.1-T2V-1.3B-Diffusers/TORCH_SDPA/A lone hiker stands atop a towering cliff, silhouetted against the vast horizon. The rugged landscap.mp4 similarity index 100% rename from fastvideo/v1/tests/ssim/A40_reference_videos/Wan2.1-T2V-1.3B-Diffusers/TORCH_SDPA/A lone hiker stands atop a towering cliff, silhouetted against the vast horizon. The rugged landscap.mp4 rename to fastvideo/tests/ssim/A40_reference_videos/Wan2.1-T2V-1.3B-Diffusers/TORCH_SDPA/A lone hiker stands atop a towering cliff, silhouetted against the vast horizon. The rugged landscap.mp4 diff --git a/fastvideo/v1/tests/ssim/A40_reference_videos/Wan2.1-T2V-1.3B-Diffusers/TORCH_SDPA/Will Smith casually eats noodles, his relaxed demeanor contrasting with the energetic background of .mp4 b/fastvideo/tests/ssim/A40_reference_videos/Wan2.1-T2V-1.3B-Diffusers/TORCH_SDPA/Will Smith casually eats noodles, his relaxed demeanor contrasting with the energetic background of .mp4 similarity index 100% rename from fastvideo/v1/tests/ssim/A40_reference_videos/Wan2.1-T2V-1.3B-Diffusers/TORCH_SDPA/Will Smith casually eats noodles, his relaxed demeanor contrasting with the energetic background of .mp4 rename to fastvideo/tests/ssim/A40_reference_videos/Wan2.1-T2V-1.3B-Diffusers/TORCH_SDPA/Will Smith casually eats noodles, his relaxed demeanor contrasting with the energetic background of .mp4 diff --git a/fastvideo/v1/tests/ssim/L40S_reference_videos/FastHunyuan-diffusers/FLASH_ATTN/Will Smith casually eats noodles, his relaxed demeanor contrasting with the energetic background of .mp4 b/fastvideo/tests/ssim/L40S_reference_videos/FastHunyuan-diffusers/FLASH_ATTN/Will Smith casually eats noodles, his relaxed demeanor contrasting with the energetic background of .mp4 similarity index 100% rename from fastvideo/v1/tests/ssim/L40S_reference_videos/FastHunyuan-diffusers/FLASH_ATTN/Will Smith casually eats noodles, his relaxed demeanor contrasting with the energetic background of .mp4 rename to fastvideo/tests/ssim/L40S_reference_videos/FastHunyuan-diffusers/FLASH_ATTN/Will Smith casually eats noodles, his relaxed demeanor contrasting with the energetic background of .mp4 diff --git a/fastvideo/v1/tests/ssim/L40S_reference_videos/FastHunyuan-diffusers/TORCH_SDPA/Will Smith casually eats noodles, his relaxed demeanor contrasting with the energetic background of .mp4 b/fastvideo/tests/ssim/L40S_reference_videos/FastHunyuan-diffusers/TORCH_SDPA/Will Smith casually eats noodles, his relaxed demeanor contrasting with the energetic background of .mp4 similarity index 100% rename from fastvideo/v1/tests/ssim/L40S_reference_videos/FastHunyuan-diffusers/TORCH_SDPA/Will Smith casually eats noodles, his relaxed demeanor contrasting with the energetic background of .mp4 rename to fastvideo/tests/ssim/L40S_reference_videos/FastHunyuan-diffusers/TORCH_SDPA/Will Smith casually eats noodles, his relaxed demeanor contrasting with the energetic background of .mp4 diff --git a/fastvideo/v1/tests/ssim/L40S_reference_videos/Wan2.1-I2V-14B-480P-Diffusers/FLASH_ATTN/An astronaut hatching from an egg, on the surface of the moon, the darkness and depth of space reali.mp4 b/fastvideo/tests/ssim/L40S_reference_videos/Wan2.1-I2V-14B-480P-Diffusers/FLASH_ATTN/An astronaut hatching from an egg, on the surface of the moon, the darkness and depth of space reali.mp4 similarity index 100% rename from fastvideo/v1/tests/ssim/L40S_reference_videos/Wan2.1-I2V-14B-480P-Diffusers/FLASH_ATTN/An astronaut hatching from an egg, on the surface of the moon, the darkness and depth of space reali.mp4 rename to fastvideo/tests/ssim/L40S_reference_videos/Wan2.1-I2V-14B-480P-Diffusers/FLASH_ATTN/An astronaut hatching from an egg, on the surface of the moon, the darkness and depth of space reali.mp4 diff --git a/fastvideo/v1/tests/ssim/L40S_reference_videos/Wan2.1-I2V-14B-480P-Diffusers/TORCH_SDPA/An astronaut hatching from an egg, on the surface of the moon, the darkness and depth of space reali.mp4 b/fastvideo/tests/ssim/L40S_reference_videos/Wan2.1-I2V-14B-480P-Diffusers/TORCH_SDPA/An astronaut hatching from an egg, on the surface of the moon, the darkness and depth of space reali.mp4 similarity index 100% rename from fastvideo/v1/tests/ssim/L40S_reference_videos/Wan2.1-I2V-14B-480P-Diffusers/TORCH_SDPA/An astronaut hatching from an egg, on the surface of the moon, the darkness and depth of space reali.mp4 rename to fastvideo/tests/ssim/L40S_reference_videos/Wan2.1-I2V-14B-480P-Diffusers/TORCH_SDPA/An astronaut hatching from an egg, on the surface of the moon, the darkness and depth of space reali.mp4 diff --git a/fastvideo/v1/tests/ssim/L40S_reference_videos/Wan2.1-T2V-1.3B-Diffusers/FLASH_ATTN/Will Smith casually eats noodles, his relaxed demeanor contrasting with the energetic background of .mp4 b/fastvideo/tests/ssim/L40S_reference_videos/Wan2.1-T2V-1.3B-Diffusers/FLASH_ATTN/Will Smith casually eats noodles, his relaxed demeanor contrasting with the energetic background of .mp4 similarity index 100% rename from fastvideo/v1/tests/ssim/L40S_reference_videos/Wan2.1-T2V-1.3B-Diffusers/FLASH_ATTN/Will Smith casually eats noodles, his relaxed demeanor contrasting with the energetic background of .mp4 rename to fastvideo/tests/ssim/L40S_reference_videos/Wan2.1-T2V-1.3B-Diffusers/FLASH_ATTN/Will Smith casually eats noodles, his relaxed demeanor contrasting with the energetic background of .mp4 diff --git a/fastvideo/v1/tests/ssim/L40S_reference_videos/Wan2.1-T2V-1.3B-Diffusers/TORCH_SDPA/Will Smith casually eats noodles, his relaxed demeanor contrasting with the energetic background of .mp4 b/fastvideo/tests/ssim/L40S_reference_videos/Wan2.1-T2V-1.3B-Diffusers/TORCH_SDPA/Will Smith casually eats noodles, his relaxed demeanor contrasting with the energetic background of .mp4 similarity index 100% rename from fastvideo/v1/tests/ssim/L40S_reference_videos/Wan2.1-T2V-1.3B-Diffusers/TORCH_SDPA/Will Smith casually eats noodles, his relaxed demeanor contrasting with the energetic background of .mp4 rename to fastvideo/tests/ssim/L40S_reference_videos/Wan2.1-T2V-1.3B-Diffusers/TORCH_SDPA/Will Smith casually eats noodles, his relaxed demeanor contrasting with the energetic background of .mp4 diff --git a/fastvideo/v1/tests/ssim/README.md b/fastvideo/tests/ssim/README.md similarity index 95% rename from fastvideo/v1/tests/ssim/README.md rename to fastvideo/tests/ssim/README.md index 0f80e81f2..e9f8fff44 100644 --- a/fastvideo/v1/tests/ssim/README.md +++ b/fastvideo/tests/ssim/README.md @@ -2,7 +2,7 @@ The reference videos in the `*_reference_videos` directory are used as part of a `A40_reference_videos` are generated on A40s and so on. -run `bash update_reference_videos.sh` from inside the `fastvideo/v1/tests/ssim/` directory after running `test_inference_similarity.py` to update reference videos. Note: make sure to update the path to the corresponding device. +run `bash update_reference_videos.sh` from inside the `fastvideo/tests/ssim/` directory after running `test_inference_similarity.py` to update reference videos. Note: make sure to update the path to the corresponding device. all reference videos are were generated on commit `4aeabbc629e0edf91477e80e795e7bb1823c71cb` diff --git a/fastvideo/v1/tests/ssim/test_inference_similarity.py b/fastvideo/tests/ssim/test_inference_similarity.py similarity index 98% rename from fastvideo/v1/tests/ssim/test_inference_similarity.py rename to fastvideo/tests/ssim/test_inference_similarity.py index b811c31dd..457a308dc 100644 --- a/fastvideo/v1/tests/ssim/test_inference_similarity.py +++ b/fastvideo/tests/ssim/test_inference_similarity.py @@ -6,9 +6,9 @@ import torch import pytest from fastvideo import VideoGenerator -from fastvideo.v1.logger import init_logger -from fastvideo.v1.tests.utils import compute_video_ssim_torchvision, write_ssim_results -from fastvideo.v1.worker.multiproc_executor import MultiprocExecutor +from fastvideo.logger import init_logger +from fastvideo.tests.utils import compute_video_ssim_torchvision, write_ssim_results +from fastvideo.worker.multiproc_executor import MultiprocExecutor logger = init_logger(__name__) diff --git a/fastvideo/v1/tests/ssim/update_reference_videos.sh b/fastvideo/tests/ssim/update_reference_videos.sh similarity index 100% rename from fastvideo/v1/tests/ssim/update_reference_videos.sh rename to fastvideo/tests/ssim/update_reference_videos.sh diff --git a/fastvideo/v1/tests/training/VSA/reference_wandb_summary_VSA.json b/fastvideo/tests/training/VSA/reference_wandb_summary_VSA.json similarity index 100% rename from fastvideo/v1/tests/training/VSA/reference_wandb_summary_VSA.json rename to fastvideo/tests/training/VSA/reference_wandb_summary_VSA.json diff --git a/fastvideo/v1/tests/training/VSA/test_training_loss_VSA.py b/fastvideo/tests/training/VSA/test_training_loss_VSA.py similarity index 93% rename from fastvideo/v1/tests/training/VSA/test_training_loss_VSA.py rename to fastvideo/tests/training/VSA/test_training_loss_VSA.py index 670cca47c..c596a4663 100644 --- a/fastvideo/v1/tests/training/VSA/test_training_loss_VSA.py +++ b/fastvideo/tests/training/VSA/test_training_loss_VSA.py @@ -7,12 +7,12 @@ from huggingface_hub import snapshot_download # Import the training pipeline sys.path.append(str(Path(__file__).parent.parent.parent.parent.parent)) -from fastvideo.v1.training.wan_training_pipeline import main -from fastvideo.v1.fastvideo_args import FastVideoArgs, TrainingArgs -from fastvideo.v1.utils import FlexibleArgumentParser +from fastvideo.training.wan_training_pipeline import main +from fastvideo.fastvideo_args import FastVideoArgs, TrainingArgs +from fastvideo.utils import FlexibleArgumentParser wandb_name = "test_training_loss_VSA" -reference_wandb_summary_file = "fastvideo/v1/tests/training/VSA/reference_wandb_summary_VSA.json" +reference_wandb_summary_file = "fastvideo/tests/training/VSA/reference_wandb_summary_VSA.json" NUM_NODES = "1" NUM_GPUS_PER_NODE = "2" diff --git a/fastvideo/v1/tests/training/Vanilla/a40_reference_wandb_summary.json b/fastvideo/tests/training/Vanilla/a40_reference_wandb_summary.json similarity index 100% rename from fastvideo/v1/tests/training/Vanilla/a40_reference_wandb_summary.json rename to fastvideo/tests/training/Vanilla/a40_reference_wandb_summary.json diff --git a/fastvideo/v1/tests/training/Vanilla/l40s_reference_wandb_summary.json b/fastvideo/tests/training/Vanilla/l40s_reference_wandb_summary.json similarity index 100% rename from fastvideo/v1/tests/training/Vanilla/l40s_reference_wandb_summary.json rename to fastvideo/tests/training/Vanilla/l40s_reference_wandb_summary.json diff --git a/fastvideo/v1/tests/training/Vanilla/test_training_loss.py b/fastvideo/tests/training/Vanilla/test_training_loss.py similarity index 91% rename from fastvideo/v1/tests/training/Vanilla/test_training_loss.py rename to fastvideo/tests/training/Vanilla/test_training_loss.py index 35652443a..2b7572952 100644 --- a/fastvideo/v1/tests/training/Vanilla/test_training_loss.py +++ b/fastvideo/tests/training/Vanilla/test_training_loss.py @@ -7,17 +7,17 @@ from pathlib import Path import torch import json from huggingface_hub import snapshot_download -from fastvideo.v1.utils import logger +from fastvideo.utils import logger # Import the training pipeline sys.path.append(str(Path(__file__).parent.parent.parent.parent.parent)) -from fastvideo.v1.training.wan_training_pipeline import main -from fastvideo.v1.fastvideo_args import FastVideoArgs, TrainingArgs -from fastvideo.v1.utils import FlexibleArgumentParser -from fastvideo.v1.training.wan_training_pipeline import WanTrainingPipeline +from fastvideo.training.wan_training_pipeline import main +from fastvideo.fastvideo_args import FastVideoArgs, TrainingArgs +from fastvideo.utils import FlexibleArgumentParser +from fastvideo.training.wan_training_pipeline import WanTrainingPipeline wandb_name = "test_training_loss" -a40_reference_wandb_summary_file = "fastvideo/v1/tests/training/Vanilla/a40_reference_wandb_summary.json" -l40s_reference_wandb_summary_file = "fastvideo/v1/tests/training/Vanilla/l40s_reference_wandb_summary.json" +a40_reference_wandb_summary_file = "fastvideo/tests/training/Vanilla/a40_reference_wandb_summary.json" +l40s_reference_wandb_summary_file = "fastvideo/tests/training/Vanilla/l40s_reference_wandb_summary.json" NUM_NODES = "1" NUM_GPUS_PER_NODE = "2" diff --git a/fastvideo/v1/tests/training/lora/l40s_reference_lora_wandb_summary.json b/fastvideo/tests/training/lora/l40s_reference_lora_wandb_summary.json similarity index 100% rename from fastvideo/v1/tests/training/lora/l40s_reference_lora_wandb_summary.json rename to fastvideo/tests/training/lora/l40s_reference_lora_wandb_summary.json diff --git a/fastvideo/v1/tests/training/lora/test_lora_training.py b/fastvideo/tests/training/lora/test_lora_training.py similarity index 96% rename from fastvideo/v1/tests/training/lora/test_lora_training.py rename to fastvideo/tests/training/lora/test_lora_training.py index bc669eac5..7ed856e8d 100644 --- a/fastvideo/v1/tests/training/lora/test_lora_training.py +++ b/fastvideo/tests/training/lora/test_lora_training.py @@ -9,7 +9,7 @@ import json from huggingface_hub import snapshot_download wandb_name = "test_lora_training" -l40s_reference_wandb_summary_file = "fastvideo/v1/tests/training/lora/l40s_reference_lora_wandb_summary.json" +l40s_reference_wandb_summary_file = "fastvideo/tests/training/lora/l40s_reference_lora_wandb_summary.json" NUM_NODES = "1" NUM_GPUS_PER_NODE = "2" @@ -36,7 +36,7 @@ def test_lora_training(): "--nnodes", NUM_NODES, "--nproc_per_node", NUM_GPUS_PER_NODE, "--master_port", os.environ["MASTER_PORT"], - "fastvideo/v1/training/wan_training_pipeline.py", + "fastvideo/training/wan_training_pipeline.py", "--model_path", "Wan-AI/Wan2.1-T2V-1.3B-Diffusers", "--inference_mode", "False", "--pretrained_model_name_or_path", "Wan-AI/Wan2.1-T2V-1.3B-Diffusers", diff --git a/fastvideo/v1/tests/transformers/test_hunyuanvideo.py b/fastvideo/tests/transformers/test_hunyuanvideo.py similarity index 93% rename from fastvideo/v1/tests/transformers/test_hunyuanvideo.py rename to fastvideo/tests/transformers/test_hunyuanvideo.py index 73eb39d47..def599a52 100644 --- a/fastvideo/v1/tests/transformers/test_hunyuanvideo.py +++ b/fastvideo/tests/transformers/test_hunyuanvideo.py @@ -7,16 +7,16 @@ import pytest import torch import torch.nn as nn -from fastvideo.v1.distributed.parallel_state import ( +from fastvideo.distributed.parallel_state import ( get_sp_parallel_rank, get_sp_world_size) -from fastvideo.v1.logger import init_logger -from fastvideo.v1.models.dits.hunyuanvideo import ( +from fastvideo.logger import init_logger +from fastvideo.models.dits.hunyuanvideo import ( HunyuanVideoTransformer3DModel as HunyuanVideoDit) -from fastvideo.v1.pipelines.pipeline_batch_info import ForwardBatch +from fastvideo.pipelines.pipeline_batch_info import ForwardBatch -from fastvideo.v1.models.loader.fsdp_load import shard_model -from fastvideo.v1.forward_context import set_forward_context +from fastvideo.models.loader.fsdp_load import shard_model +from fastvideo.forward_context import set_forward_context logger = init_logger(__name__) diff --git a/fastvideo/v1/tests/transformers/test_hunyuanvideo_load.py b/fastvideo/tests/transformers/test_hunyuanvideo_load.py similarity index 87% rename from fastvideo/v1/tests/transformers/test_hunyuanvideo_load.py rename to fastvideo/tests/transformers/test_hunyuanvideo_load.py index f36342fa3..c0bfade23 100644 --- a/fastvideo/v1/tests/transformers/test_hunyuanvideo_load.py +++ b/fastvideo/tests/transformers/test_hunyuanvideo_load.py @@ -6,17 +6,17 @@ import os import pytest import torch -from fastvideo.v1.configs.pipelines.base import PipelineConfig -from fastvideo.v1.distributed.parallel_state import ( +from fastvideo.configs.pipelines.base import PipelineConfig +from fastvideo.distributed.parallel_state import ( get_sp_parallel_rank, get_sp_world_size) -from fastvideo.v1.logger import init_logger -from fastvideo.v1.models.loader.component_loader import TransformerLoader -from fastvideo.v1.fastvideo_args import FastVideoArgs -from fastvideo.v1.utils import maybe_download_model -from fastvideo.v1.forward_context import set_forward_context -from fastvideo.v1.configs.models.dits import HunyuanVideoConfig -from fastvideo.v1.pipelines.pipeline_batch_info import ForwardBatch +from fastvideo.logger import init_logger +from fastvideo.models.loader.component_loader import TransformerLoader +from fastvideo.fastvideo_args import FastVideoArgs +from fastvideo.utils import maybe_download_model +from fastvideo.forward_context import set_forward_context +from fastvideo.configs.models.dits import HunyuanVideoConfig +from fastvideo.pipelines.pipeline_batch_info import ForwardBatch logger = init_logger(__name__) diff --git a/fastvideo/v1/tests/transformers/test_wanvideo.py b/fastvideo/tests/transformers/test_wanvideo.py similarity index 91% rename from fastvideo/v1/tests/transformers/test_wanvideo.py rename to fastvideo/tests/transformers/test_wanvideo.py index 403fd6e61..ab4fdd60a 100644 --- a/fastvideo/v1/tests/transformers/test_wanvideo.py +++ b/fastvideo/tests/transformers/test_wanvideo.py @@ -6,14 +6,14 @@ import pytest import torch from diffusers import WanTransformer3DModel -from fastvideo.v1.configs.pipelines import PipelineConfig -from fastvideo.v1.forward_context import set_forward_context -from fastvideo.v1.fastvideo_args import FastVideoArgs -from fastvideo.v1.logger import init_logger -from fastvideo.v1.models.loader.component_loader import TransformerLoader -from fastvideo.v1.utils import maybe_download_model -from fastvideo.v1.configs.models.dits import WanVideoConfig -from fastvideo.v1.pipelines.pipeline_batch_info import ForwardBatch +from fastvideo.configs.pipelines import PipelineConfig +from fastvideo.forward_context import set_forward_context +from fastvideo.fastvideo_args import FastVideoArgs +from fastvideo.logger import init_logger +from fastvideo.models.loader.component_loader import TransformerLoader +from fastvideo.utils import maybe_download_model +from fastvideo.configs.models.dits import WanVideoConfig +from fastvideo.pipelines.pipeline_batch_info import ForwardBatch logger = init_logger(__name__) diff --git a/fastvideo/v1/tests/utils.py b/fastvideo/tests/utils.py similarity index 99% rename from fastvideo/v1/tests/utils.py rename to fastvideo/tests/utils.py index aa2f3b388..de887911c 100644 --- a/fastvideo/v1/tests/utils.py +++ b/fastvideo/tests/utils.py @@ -2,7 +2,7 @@ import argparse import os import json -from fastvideo.v1.logger import init_logger +from fastvideo.logger import init_logger import numpy as np import torch diff --git a/fastvideo/v1/tests/vaes/test_hunyuan_vae.py b/fastvideo/tests/vaes/test_hunyuan_vae.py similarity index 87% rename from fastvideo/v1/tests/vaes/test_hunyuan_vae.py rename to fastvideo/tests/vaes/test_hunyuan_vae.py index 2f6df0368..2dc914ec5 100644 --- a/fastvideo/v1/tests/vaes/test_hunyuan_vae.py +++ b/fastvideo/tests/vaes/test_hunyuan_vae.py @@ -7,14 +7,14 @@ import pytest import torch from safetensors.torch import load_file -from fastvideo.v1.configs.pipelines import PipelineConfig -from fastvideo.v1.logger import init_logger -# from fastvideo.v1.models.vaes.hunyuanvae import ( +from fastvideo.configs.pipelines import PipelineConfig +from fastvideo.logger import init_logger +# from fastvideo.models.vaes.hunyuanvae import ( # AutoencoderKLHunyuanVideo as MyHunyuanVAE) -from fastvideo.v1.fastvideo_args import FastVideoArgs -from fastvideo.v1.models.loader.component_loader import VAELoader -from fastvideo.v1.configs.models.vaes import HunyuanVAEConfig -from fastvideo.v1.utils import maybe_download_model +from fastvideo.fastvideo_args import FastVideoArgs +from fastvideo.models.loader.component_loader import VAELoader +from fastvideo.configs.models.vaes import HunyuanVAEConfig +from fastvideo.utils import maybe_download_model logger = init_logger(__name__) diff --git a/fastvideo/v1/tests/vaes/test_wan_vae.py b/fastvideo/tests/vaes/test_wan_vae.py similarity index 93% rename from fastvideo/v1/tests/vaes/test_wan_vae.py rename to fastvideo/tests/vaes/test_wan_vae.py index 813cc5ab0..cec0e439e 100644 --- a/fastvideo/v1/tests/vaes/test_wan_vae.py +++ b/fastvideo/tests/vaes/test_wan_vae.py @@ -6,12 +6,12 @@ import pytest import torch from diffusers import AutoencoderKLWan -from fastvideo.v1.configs.pipelines import PipelineConfig -from fastvideo.v1.fastvideo_args import FastVideoArgs -from fastvideo.v1.logger import init_logger -from fastvideo.v1.models.loader.component_loader import VAELoader -from fastvideo.v1.configs.models.vaes import WanVAEConfig -from fastvideo.v1.utils import maybe_download_model +from fastvideo.configs.pipelines import PipelineConfig +from fastvideo.fastvideo_args import FastVideoArgs +from fastvideo.logger import init_logger +from fastvideo.models.loader.component_loader import VAELoader +from fastvideo.configs.models.vaes import WanVAEConfig +from fastvideo.utils import maybe_download_model logger = init_logger(__name__) diff --git a/fastvideo/v1/tests/__init__.py b/fastvideo/third_party/__init__.py similarity index 100% rename from fastvideo/v1/tests/__init__.py rename to fastvideo/third_party/__init__.py diff --git a/fastvideo/v1/third_party/pynvml.py b/fastvideo/third_party/pynvml.py similarity index 100% rename from fastvideo/v1/third_party/pynvml.py rename to fastvideo/third_party/pynvml.py diff --git a/fastvideo/v1/training/__init__.py b/fastvideo/training/__init__.py similarity index 100% rename from fastvideo/v1/training/__init__.py rename to fastvideo/training/__init__.py diff --git a/fastvideo/v1/training/activation_checkpoint.py b/fastvideo/training/activation_checkpoint.py similarity index 100% rename from fastvideo/v1/training/activation_checkpoint.py rename to fastvideo/training/activation_checkpoint.py diff --git a/fastvideo/v1/training/checkpointing_utils.py b/fastvideo/training/checkpointing_utils.py similarity index 100% rename from fastvideo/v1/training/checkpointing_utils.py rename to fastvideo/training/checkpointing_utils.py diff --git a/fastvideo/v1/training/training_pipeline.py b/fastvideo/training/training_pipeline.py similarity index 96% rename from fastvideo/v1/training/training_pipeline.py rename to fastvideo/training/training_pipeline.py index 4640373eb..1135ed3ff 100644 --- a/fastvideo/v1/training/training_pipeline.py +++ b/fastvideo/training/training_pipeline.py @@ -19,28 +19,28 @@ from torch.utils.data import DataLoader from torchdata.stateful_dataloader import StatefulDataLoader from tqdm.auto import tqdm -import fastvideo.v1.envs as envs -from fastvideo.v1.attention.backends.video_sparse_attn import ( +import fastvideo.envs as envs +from fastvideo.attention.backends.video_sparse_attn import ( VideoSparseAttentionMetadata) -from fastvideo.v1.configs.sample import SamplingParam -from fastvideo.v1.dataset import build_parquet_map_style_dataloader -from fastvideo.v1.dataset.dataloader.schema import pyarrow_schema_t2v -from fastvideo.v1.dataset.validation_dataset import ValidationDataset -from fastvideo.v1.distributed import (cleanup_dist_env_and_memory, - get_local_torch_device, get_sp_group, - get_world_group) -from fastvideo.v1.fastvideo_args import FastVideoArgs, TrainingArgs -from fastvideo.v1.forward_context import set_forward_context -from fastvideo.v1.logger import init_logger -from fastvideo.v1.pipelines import (ComposedPipelineBase, ForwardBatch, - LoRAPipeline, TrainingBatch) -from fastvideo.v1.training.activation_checkpoint import ( +from fastvideo.configs.sample import SamplingParam +from fastvideo.dataset import build_parquet_map_style_dataloader +from fastvideo.dataset.dataloader.schema import pyarrow_schema_t2v +from fastvideo.dataset.validation_dataset import ValidationDataset +from fastvideo.distributed import (cleanup_dist_env_and_memory, + get_local_torch_device, get_sp_group, + get_world_group) +from fastvideo.fastvideo_args import FastVideoArgs, TrainingArgs +from fastvideo.forward_context import set_forward_context +from fastvideo.logger import init_logger +from fastvideo.pipelines import (ComposedPipelineBase, ForwardBatch, + LoRAPipeline, TrainingBatch) +from fastvideo.training.activation_checkpoint import ( apply_activation_checkpointing) -from fastvideo.v1.training.training_utils import ( +from fastvideo.training.training_utils import ( clip_grad_norm_while_handling_failing_dtensor_cases, compute_density_for_timestep_sampling, get_sigmas, load_checkpoint, normalize_dit_input, save_checkpoint, shard_latents_across_sp) -from fastvideo.v1.utils import is_vsa_available, set_random_seed, shallow_asdict +from fastvideo.utils import is_vsa_available, set_random_seed, shallow_asdict import wandb # isort: skip diff --git a/fastvideo/v1/training/training_utils.py b/fastvideo/training/training_utils.py similarity index 97% rename from fastvideo/v1/training/training_utils.py rename to fastvideo/training/training_utils.py index afc94ee69..fa6925c43 100644 --- a/fastvideo/v1/training/training_utils.py +++ b/fastvideo/training/training_utils.py @@ -12,13 +12,13 @@ import torch.distributed.checkpoint as dcp from einops import rearrange from safetensors.torch import save_file -from fastvideo.v1.distributed.parallel_state import (get_sp_parallel_rank, - get_sp_world_size) -from fastvideo.v1.logger import init_logger -from fastvideo.v1.training.checkpointing_utils import (ModelWrapper, - OptimizerWrapper, - RandomStateWrapper, - SchedulerWrapper) +from fastvideo.distributed.parallel_state import (get_sp_parallel_rank, + get_sp_world_size) +from fastvideo.logger import init_logger +from fastvideo.training.checkpointing_utils import (ModelWrapper, + OptimizerWrapper, + RandomStateWrapper, + SchedulerWrapper) logger = init_logger(__name__) @@ -251,7 +251,7 @@ def normalize_dit_input(model_type, latents, args=None) -> torch.Tensor: if model_type == "hunyuan_hf" or model_type == "hunyuan": return latents * 0.476986 elif model_type == "wan": - from fastvideo.v1.configs.models.vaes.wanvae import WanVAEConfig + from fastvideo.configs.models.vaes.wanvae import WanVAEConfig vae_config = WanVAEConfig() latents_mean = torch.tensor(vae_config.arch_config.latents_mean) latents_std = 1.0 / torch.tensor(vae_config.arch_config.latents_std) diff --git a/fastvideo/v1/training/wan_i2v_training_pipeline.py b/fastvideo/training/wan_i2v_training_pipeline.py similarity index 91% rename from fastvideo/v1/training/wan_i2v_training_pipeline.py rename to fastvideo/training/wan_i2v_training_pipeline.py index ccc0896cc..ca3c16d9e 100644 --- a/fastvideo/v1/training/wan_i2v_training_pipeline.py +++ b/fastvideo/training/wan_i2v_training_pipeline.py @@ -5,18 +5,17 @@ from typing import Any import torch -from fastvideo.v1.configs.sample import SamplingParam -from fastvideo.v1.dataset.dataloader.schema import pyarrow_schema_i2v -from fastvideo.v1.distributed import get_local_torch_device -from fastvideo.v1.fastvideo_args import FastVideoArgs, TrainingArgs -from fastvideo.v1.logger import init_logger -from fastvideo.v1.models.schedulers.scheduling_flow_unipc_multistep import ( +from fastvideo.configs.sample import SamplingParam +from fastvideo.dataset.dataloader.schema import pyarrow_schema_i2v +from fastvideo.distributed import get_local_torch_device +from fastvideo.fastvideo_args import FastVideoArgs, TrainingArgs +from fastvideo.logger import init_logger +from fastvideo.models.schedulers.scheduling_flow_unipc_multistep import ( FlowUniPCMultistepScheduler) -from fastvideo.v1.pipelines.pipeline_batch_info import (ForwardBatch, - TrainingBatch) -from fastvideo.v1.pipelines.wan.wan_i2v_pipeline import WanImageToVideoPipeline -from fastvideo.v1.training.training_pipeline import TrainingPipeline -from fastvideo.v1.utils import is_vsa_available, shallow_asdict +from fastvideo.pipelines.pipeline_batch_info import ForwardBatch, TrainingBatch +from fastvideo.pipelines.wan.wan_i2v_pipeline import WanImageToVideoPipeline +from fastvideo.training.training_pipeline import TrainingPipeline +from fastvideo.utils import is_vsa_available, shallow_asdict vsa_available = is_vsa_available() @@ -220,8 +219,8 @@ def main(args) -> None: if __name__ == "__main__": argv = sys.argv - from fastvideo.v1.fastvideo_args import TrainingArgs - from fastvideo.v1.utils import FlexibleArgumentParser + from fastvideo.fastvideo_args import TrainingArgs + from fastvideo.utils import FlexibleArgumentParser parser = FlexibleArgumentParser() parser = TrainingArgs.add_cli_args(parser) parser = FastVideoArgs.add_cli_args(parser) diff --git a/fastvideo/v1/training/wan_training_pipeline.py b/fastvideo/training/wan_training_pipeline.py similarity index 80% rename from fastvideo/v1/training/wan_training_pipeline.py rename to fastvideo/training/wan_training_pipeline.py index 1405b635b..4ca04379b 100644 --- a/fastvideo/v1/training/wan_training_pipeline.py +++ b/fastvideo/training/wan_training_pipeline.py @@ -2,13 +2,13 @@ import sys from copy import deepcopy -from fastvideo.v1.fastvideo_args import FastVideoArgs, TrainingArgs -from fastvideo.v1.logger import init_logger -from fastvideo.v1.models.schedulers.scheduling_flow_unipc_multistep import ( +from fastvideo.fastvideo_args import FastVideoArgs, TrainingArgs +from fastvideo.logger import init_logger +from fastvideo.models.schedulers.scheduling_flow_unipc_multistep import ( FlowUniPCMultistepScheduler) -from fastvideo.v1.pipelines.wan.wan_pipeline import WanPipeline -from fastvideo.v1.training.training_pipeline import TrainingPipeline -from fastvideo.v1.utils import is_vsa_available +from fastvideo.pipelines.wan.wan_pipeline import WanPipeline +from fastvideo.training.training_pipeline import TrainingPipeline +from fastvideo.utils import is_vsa_available vsa_available = is_vsa_available() @@ -64,8 +64,8 @@ def main(args) -> None: if __name__ == "__main__": argv = sys.argv - from fastvideo.v1.fastvideo_args import TrainingArgs - from fastvideo.v1.utils import FlexibleArgumentParser + from fastvideo.fastvideo_args import TrainingArgs + from fastvideo.utils import FlexibleArgumentParser parser = FlexibleArgumentParser() parser = TrainingArgs.add_cli_args(parser) parser = FastVideoArgs.add_cli_args(parser) diff --git a/fastvideo/v1/utils.py b/fastvideo/utils.py similarity index 98% rename from fastvideo/v1/utils.py rename to fastvideo/utils.py index 4f62ce18a..9bbad98a4 100644 --- a/fastvideo/v1/utils.py +++ b/fastvideo/utils.py @@ -31,8 +31,8 @@ from huggingface_hub import snapshot_download from remote_pdb import RemotePdb from torch.distributed.fsdp import MixedPrecisionPolicy -import fastvideo.v1.envs as envs -from fastvideo.v1.logger import init_logger +import fastvideo.envs as envs +from fastvideo.logger import init_logger logger = init_logger(__name__) @@ -92,7 +92,7 @@ torch.cuda.set_stream = _patched_set_stream def current_stream() -> torch.cuda.Stream | None: """ - replace `torch.cuda.current_stream()` with `fastvideo.v1.utils.current_stream()`. + replace `torch.cuda.current_stream()` with `fastvideo.utils.current_stream()`. it turns out that `torch.cuda.current_stream()` is quite expensive, as it will construct a new stream object at each call. here we patch `torch.cuda.set_stream` to keep track of the current stream @@ -101,7 +101,7 @@ def current_stream() -> torch.cuda.Stream | None: the underlying hypothesis is that we do not call `torch._C._cuda_setStream` from C/C++ code. """ - from fastvideo.v1.platforms import current_platform + from fastvideo.platforms import current_platform # For non-CUDA platforms, return None if not current_platform.is_cuda_alike(): @@ -457,7 +457,7 @@ def import_pynvml(): After all the troubles, we decide to copy the official `pynvml` module to our codebase, and use it directly. """ - import fastvideo.v1.third_party.pynvml as pynvml + import fastvideo.third_party.pynvml as pynvml return pynvml @@ -805,7 +805,7 @@ def dict_to_3d_list( def set_random_seed(seed: int) -> None: - from fastvideo.v1.platforms import current_platform + from fastvideo.platforms import current_platform current_platform.seed_everything(seed) diff --git a/fastvideo/v1/attention/__init__.py b/fastvideo/v1/attention/__init__.py deleted file mode 100644 index 6c703bd22..000000000 --- a/fastvideo/v1/attention/__init__.py +++ /dev/null @@ -1,20 +0,0 @@ -# SPDX-License-Identifier: Apache-2.0 - -from fastvideo.v1.attention.backends.abstract import (AttentionBackend, - AttentionMetadata, - AttentionMetadataBuilder) -from fastvideo.v1.attention.layer import (DistributedAttention, - DistributedAttention_VSA, - LocalAttention) -from fastvideo.v1.attention.selector import get_attn_backend - -__all__ = [ - "DistributedAttention", - "LocalAttention", - "DistributedAttention_VSA", - "AttentionBackend", - "AttentionMetadata", - "AttentionMetadataBuilder", - # "AttentionState", - "get_attn_backend", -] diff --git a/fastvideo/v1/configs/models/__init__.py b/fastvideo/v1/configs/models/__init__.py deleted file mode 100644 index c6ad328e9..000000000 --- a/fastvideo/v1/configs/models/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -from fastvideo.v1.configs.models.base import ModelConfig -from fastvideo.v1.configs.models.dits.base import DiTConfig -from fastvideo.v1.configs.models.encoders.base import EncoderConfig -from fastvideo.v1.configs.models.vaes.base import VAEConfig - -__all__ = ["ModelConfig", "VAEConfig", "DiTConfig", "EncoderConfig"] diff --git a/fastvideo/v1/configs/models/dits/__init__.py b/fastvideo/v1/configs/models/dits/__init__.py deleted file mode 100644 index 1377cb033..000000000 --- a/fastvideo/v1/configs/models/dits/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -from fastvideo.v1.configs.models.dits.hunyuanvideo import HunyuanVideoConfig -from fastvideo.v1.configs.models.dits.stepvideo import StepVideoConfig -from fastvideo.v1.configs.models.dits.wanvideo import WanVideoConfig - -__all__ = ["HunyuanVideoConfig", "WanVideoConfig", "StepVideoConfig"] diff --git a/fastvideo/v1/configs/models/encoders/__init__.py b/fastvideo/v1/configs/models/encoders/__init__.py deleted file mode 100644 index 093eed15f..000000000 --- a/fastvideo/v1/configs/models/encoders/__init__.py +++ /dev/null @@ -1,14 +0,0 @@ -from fastvideo.v1.configs.models.encoders.base import (BaseEncoderOutput, - EncoderConfig, - ImageEncoderConfig, - TextEncoderConfig) -from fastvideo.v1.configs.models.encoders.clip import (CLIPTextConfig, - CLIPVisionConfig) -from fastvideo.v1.configs.models.encoders.llama import LlamaConfig -from fastvideo.v1.configs.models.encoders.t5 import T5Config - -__all__ = [ - "EncoderConfig", "TextEncoderConfig", "ImageEncoderConfig", - "BaseEncoderOutput", "CLIPTextConfig", "CLIPVisionConfig", "LlamaConfig", - "T5Config" -] diff --git a/fastvideo/v1/configs/models/vaes/__init__.py b/fastvideo/v1/configs/models/vaes/__init__.py deleted file mode 100644 index ef5b3822c..000000000 --- a/fastvideo/v1/configs/models/vaes/__init__.py +++ /dev/null @@ -1,9 +0,0 @@ -from fastvideo.v1.configs.models.vaes.hunyuanvae import HunyuanVAEConfig -from fastvideo.v1.configs.models.vaes.stepvideovae import StepVideoVAEConfig -from fastvideo.v1.configs.models.vaes.wanvae import WanVAEConfig - -__all__ = [ - "HunyuanVAEConfig", - "WanVAEConfig", - "StepVideoVAEConfig", -] diff --git a/fastvideo/v1/configs/pipelines/__init__.py b/fastvideo/v1/configs/pipelines/__init__.py deleted file mode 100644 index 4d693daa4..000000000 --- a/fastvideo/v1/configs/pipelines/__init__.py +++ /dev/null @@ -1,18 +0,0 @@ -from fastvideo.v1.configs.pipelines.base import (PipelineConfig, - SlidingTileAttnConfig) -from fastvideo.v1.configs.pipelines.hunyuan import (FastHunyuanConfig, - HunyuanConfig) -from fastvideo.v1.configs.pipelines.registry import ( - get_pipeline_config_cls_from_name) -from fastvideo.v1.configs.pipelines.stepvideo import StepVideoT2VConfig -from fastvideo.v1.configs.pipelines.wan import (WanI2V480PConfig, - WanI2V720PConfig, - WanT2V480PConfig, - WanT2V720PConfig) - -__all__ = [ - "HunyuanConfig", "FastHunyuanConfig", "PipelineConfig", - "SlidingTileAttnConfig", "WanT2V480PConfig", "WanI2V480PConfig", - "WanT2V720PConfig", "WanI2V720PConfig", "StepVideoT2VConfig", - "get_pipeline_config_cls_from_name" -] diff --git a/fastvideo/v1/configs/sample/__init__.py b/fastvideo/v1/configs/sample/__init__.py deleted file mode 100644 index 241d00d87..000000000 --- a/fastvideo/v1/configs/sample/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from fastvideo.v1.configs.sample.base import SamplingParam - -__all__ = ["SamplingParam"] diff --git a/fastvideo/v1/pipelines/stages/__init__.py b/fastvideo/v1/pipelines/stages/__init__.py deleted file mode 100644 index af94f505f..000000000 --- a/fastvideo/v1/pipelines/stages/__init__.py +++ /dev/null @@ -1,38 +0,0 @@ -# SPDX-License-Identifier: Apache-2.0 -""" -Pipeline stages for diffusion models. - -This package contains the various stages that can be composed to create -complete diffusion pipelines. -""" - -from fastvideo.v1.pipelines.stages.base import PipelineStage -from fastvideo.v1.pipelines.stages.conditioning import ConditioningStage -from fastvideo.v1.pipelines.stages.decoding import DecodingStage -from fastvideo.v1.pipelines.stages.denoising import (DenoisingStage, - DmdDenoisingStage) -from fastvideo.v1.pipelines.stages.encoding import EncodingStage -from fastvideo.v1.pipelines.stages.image_encoding import ImageEncodingStage -from fastvideo.v1.pipelines.stages.input_validation import InputValidationStage -from fastvideo.v1.pipelines.stages.latent_preparation import ( - LatentPreparationStage) -from fastvideo.v1.pipelines.stages.stepvideo_encoding import ( - StepvideoPromptEncodingStage) -from fastvideo.v1.pipelines.stages.text_encoding import TextEncodingStage -from fastvideo.v1.pipelines.stages.timestep_preparation import ( - TimestepPreparationStage) - -__all__ = [ - "PipelineStage", - "InputValidationStage", - "TimestepPreparationStage", - "LatentPreparationStage", - "ConditioningStage", - "DenoisingStage", - "DmdDenoisingStage", - "EncodingStage", - "DecodingStage", - "ImageEncodingStage", - "TextEncodingStage", - "StepvideoPromptEncodingStage", -] diff --git a/fastvideo/v1/third_party/__init__.py b/fastvideo/v1/third_party/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/fastvideo/v1/worker/__init__.py b/fastvideo/worker/__init__.py similarity index 100% rename from fastvideo/v1/worker/__init__.py rename to fastvideo/worker/__init__.py diff --git a/fastvideo/v1/worker/executor.py b/fastvideo/worker/executor.py similarity index 93% rename from fastvideo/v1/worker/executor.py rename to fastvideo/worker/executor.py index 276dfe8d0..eabfd9bd7 100644 --- a/fastvideo/v1/worker/executor.py +++ b/fastvideo/worker/executor.py @@ -3,9 +3,9 @@ from abc import ABC, abstractmethod from collections.abc import Callable from typing import Any, TypeVar, cast -from fastvideo.v1.fastvideo_args import FastVideoArgs -from fastvideo.v1.pipelines import ForwardBatch -from fastvideo.v1.utils import init_logger +from fastvideo.fastvideo_args import FastVideoArgs +from fastvideo.pipelines import ForwardBatch +from fastvideo.utils import init_logger logger = init_logger(__name__) @@ -26,7 +26,7 @@ class Executor(ABC): @classmethod def get_class(cls, fastvideo_args: FastVideoArgs) -> type["Executor"]: if fastvideo_args.distributed_executor_backend == "mp": - from fastvideo.v1.worker.multiproc_executor import MultiprocExecutor + from fastvideo.worker.multiproc_executor import MultiprocExecutor return cast(type["Executor"], MultiprocExecutor) else: raise ValueError( diff --git a/fastvideo/v1/worker/gpu_worker.py b/fastvideo/worker/gpu_worker.py similarity index 95% rename from fastvideo/v1/worker/gpu_worker.py rename to fastvideo/worker/gpu_worker.py index cf7465738..3d639c5ad 100644 --- a/fastvideo/v1/worker/gpu_worker.py +++ b/fastvideo/worker/gpu_worker.py @@ -11,16 +11,16 @@ from typing import Any, TextIO, cast import psutil import torch -from fastvideo.v1.distributed import ( +from fastvideo.distributed import ( cleanup_dist_env_and_memory, maybe_init_distributed_environment_and_model_parallel) -from fastvideo.v1.distributed.parallel_state import get_local_torch_device -from fastvideo.v1.fastvideo_args import FastVideoArgs -from fastvideo.v1.logger import init_logger -from fastvideo.v1.pipelines import ForwardBatch, build_pipeline -from fastvideo.v1.platforms import current_platform -from fastvideo.v1.utils import (get_exception_traceback, - kill_itself_when_parent_died) +from fastvideo.distributed.parallel_state import get_local_torch_device +from fastvideo.fastvideo_args import FastVideoArgs +from fastvideo.logger import init_logger +from fastvideo.pipelines import ForwardBatch, build_pipeline +from fastvideo.platforms import current_platform +from fastvideo.utils import (get_exception_traceback, + kill_itself_when_parent_died) logger = init_logger(__name__) diff --git a/fastvideo/v1/worker/multiproc_executor.py b/fastvideo/worker/multiproc_executor.py similarity index 96% rename from fastvideo/v1/worker/multiproc_executor.py rename to fastvideo/worker/multiproc_executor.py index 928aeaea0..1aaca215b 100644 --- a/fastvideo/v1/worker/multiproc_executor.py +++ b/fastvideo/worker/multiproc_executor.py @@ -10,11 +10,11 @@ from collections.abc import Callable from multiprocessing.process import BaseProcess from typing import Any, cast -from fastvideo.v1.fastvideo_args import FastVideoArgs -from fastvideo.v1.logger import init_logger -from fastvideo.v1.pipelines.pipeline_batch_info import ForwardBatch -from fastvideo.v1.worker.executor import Executor -from fastvideo.v1.worker.gpu_worker import run_worker_process +from fastvideo.fastvideo_args import FastVideoArgs +from fastvideo.logger import init_logger +from fastvideo.pipelines.pipeline_batch_info import ForwardBatch +from fastvideo.worker.executor import Executor +from fastvideo.worker.gpu_worker import run_worker_process logger = init_logger(__name__) diff --git a/fastvideo/v1/workflow/workflow_base.py b/fastvideo/workflow/workflow_base.py similarity index 85% rename from fastvideo/v1/workflow/workflow_base.py rename to fastvideo/workflow/workflow_base.py index 258c341aa..e00c4dbcd 100644 --- a/fastvideo/v1/workflow/workflow_base.py +++ b/fastvideo/workflow/workflow_base.py @@ -1,7 +1,7 @@ from abc import ABC, abstractmethod -from fastvideo.v1.fastvideo_args import FastVideoArgs -from fastvideo.v1.pipelines import ComposedPipelineBase, build_pipeline +from fastvideo.fastvideo_args import FastVideoArgs +from fastvideo.pipelines import ComposedPipelineBase, build_pipeline class WorkflowBase(ABC): diff --git a/pyproject.toml b/pyproject.toml index bf212f2ab..8d08fb6fa 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -70,7 +70,7 @@ test = [ dev = [ "fastvideo[lint]", "fastvideo[test]", ] [project.scripts] -fastvideo = "fastvideo.v1.entrypoints.cli.main:main" +fastvideo = "fastvideo.entrypoints.cli.main:main" [tool.setuptools.packages.find] exclude = ["assets*", "docker*", "docs", "scripts*"] diff --git a/scripts/finetune/finetune_v1.sh b/scripts/finetune/finetune_v1.sh index 7d195c73f..b500ee205 100644 --- a/scripts/finetune/finetune_v1.sh +++ b/scripts/finetune/finetune_v1.sh @@ -11,7 +11,7 @@ NUM_GPUS=4 # If you do not have 32 GPUs and to fit in memory, you can: 1. increase sp_size. 2. reduce num_latent_t torchrun --nnodes 1 --nproc_per_node $NUM_GPUS\ - fastvideo/v1/training/wan_training_pipeline.py\ + fastvideo/training/wan_training_pipeline.py\ --model_path Wan-AI/Wan2.1-T2V-1.3B-Diffusers \ --inference_mode False\ --pretrained_model_name_or_path Wan-AI/Wan2.1-T2V-1.3B-Diffusers \ diff --git a/scripts/finetune/finetune_v1_VSA.sh b/scripts/finetune/finetune_v1_VSA.sh index 1229dc773..b1f52344a 100644 --- a/scripts/finetune/finetune_v1_VSA.sh +++ b/scripts/finetune/finetune_v1_VSA.sh @@ -16,7 +16,7 @@ CHECKPOINT_PATH="$DATA_DIR/outputs/wan_finetune/checkpoint-5" # If you do not have 32 GPUs and to fit in memory, you can: 1. increase sp_size. 2. reduce num_latent_t torchrun --nnodes 1 --nproc_per_node $NUM_GPUS \ - fastvideo/v1/training/wan_training_pipeline.py \ + fastvideo/training/wan_training_pipeline.py \ --model_path Wan-AI/Wan2.1-T2V-1.3B-Diffusers \ --inference_mode False\ --pretrained_model_name_or_path Wan-AI/Wan2.1-T2V-1.3B-Diffusers \ diff --git a/scripts/preprocess/v1_preprocess_wan_data_i2v.sh b/scripts/preprocess/v1_preprocess_wan_data_i2v.sh index 15dbd1870..4201a6dd7 100644 --- a/scripts/preprocess/v1_preprocess_wan_data_i2v.sh +++ b/scripts/preprocess/v1_preprocess_wan_data_i2v.sh @@ -7,7 +7,7 @@ OUTPUT_DIR="mini_i2v_dataset/crush-smol_preprocessed" VALIDATION_PATH="mini_i2v_dataset/crush-smol_raw/validation.txt" torchrun --nproc_per_node=$GPU_NUM \ - fastvideo/v1/pipelines/preprocess/v1_preprocess.py \ + fastvideo/pipelines/preprocess/v1_preprocess.py \ --model_path $MODEL_PATH \ --data_merge_path $DATA_MERGE_PATH \ --preprocess_video_batch_size 8 \ diff --git a/scripts/preprocess/v1_preprocess_wan_data_t2v.sh b/scripts/preprocess/v1_preprocess_wan_data_t2v.sh index f587f8a95..a50493973 100644 --- a/scripts/preprocess/v1_preprocess_wan_data_t2v.sh +++ b/scripts/preprocess/v1_preprocess_wan_data_t2v.sh @@ -7,7 +7,7 @@ OUTPUT_DIR="data/mini_i2v_dataset/crush-smol_preprocessed" VALIDATION_PATH="examples/training/finetune/wan_t2v_1_3b/crush_smol/validation.json" torchrun --nproc_per_node=$GPU_NUM \ - fastvideo/v1/pipelines/preprocess/v1_preprocess.py \ + fastvideo/pipelines/preprocess/v1_preprocess.py \ --model_path $MODEL_PATH \ --data_merge_path $DATA_MERGE_PATH \ --preprocess_video_batch_size 1 \