diff --git a/diffsynth.egg-info/PKG-INFO b/diffsynth.egg-info/PKG-INFO new file mode 100644 index 0000000000000000000000000000000000000000..b81ffa5d8491a05109b1c789e6a306734b61f4e6 --- /dev/null +++ b/diffsynth.egg-info/PKG-INFO @@ -0,0 +1,825 @@ +Metadata-Version: 2.4 +Name: diffsynth +Version: 2.1.5 +Summary: Enjoy the magic of Diffusion models! +Author: ModelScope Team +License-Expression: Apache-2.0 +Classifier: Programming Language :: Python :: 3 +Classifier: Operating System :: OS Independent +Requires-Python: >=3.10.1 +Description-Content-Type: text/markdown +License-File: LICENSE +Requires-Dist: torch==2.6.0 +Requires-Dist: torchvision +Requires-Dist: transformers +Requires-Dist: imageio[ffmpeg] +Requires-Dist: safetensors +Requires-Dist: einops +Requires-Dist: modelscope +Requires-Dist: ftfy +Requires-Dist: pandas +Requires-Dist: accelerate +Requires-Dist: peft +Provides-Extra: audio +Requires-Dist: av; extra == "audio" +Requires-Dist: torchaudio; extra == "audio" +Requires-Dist: torchcodec; extra == "audio" +Requires-Dist: librosa; extra == "audio" +Provides-Extra: quant +Requires-Dist: bitsandbytes; extra == "quant" +Requires-Dist: comfy-kitchen; extra == "quant" +Requires-Dist: torchao>=0.16; extra == "quant" +Provides-Extra: training +Requires-Dist: deepspeed; extra == "training" +Provides-Extra: logger +Requires-Dist: tensorboard; extra == "logger" +Requires-Dist: swanlab; extra == "logger" +Requires-Dist: wandb; extra == "logger" +Provides-Extra: npu +Requires-Dist: torch==2.7.1+cpu; extra == "npu" +Requires-Dist: torch-npu==2.7.1; extra == "npu" +Requires-Dist: torchvision==0.22.1+cpu; extra == "npu" +Provides-Extra: npu-aarch64 +Requires-Dist: torch==2.7.1; extra == "npu-aarch64" +Requires-Dist: torch-npu==2.7.1; extra == "npu-aarch64" +Requires-Dist: torchvision==0.22.1; extra == "npu-aarch64" +Provides-Extra: infiniteyou +Requires-Dist: insightface; extra == "infiniteyou" +Requires-Dist: facexlib; extra == "infiniteyou" +Provides-Extra: ses +Requires-Dist: pywt; extra == "ses" +Provides-Extra: nexusgen +Requires-Dist: qwen_vl_utils; extra == "nexusgen" +Requires-Dist: transformers==4.49.0; extra == "nexusgen" +Provides-Extra: all +Requires-Dist: av; extra == "all" +Requires-Dist: torchaudio; extra == "all" +Requires-Dist: torchcodec; extra == "all" +Requires-Dist: librosa; extra == "all" +Requires-Dist: bitsandbytes; extra == "all" +Requires-Dist: comfy-kitchen; extra == "all" +Requires-Dist: torchao>=0.16; extra == "all" +Requires-Dist: deepspeed; extra == "all" +Requires-Dist: tensorboard; extra == "all" +Requires-Dist: swanlab; extra == "all" +Requires-Dist: wandb; extra == "all" +Dynamic: license-file + +# DiffSynth-Studio + + modelscope%2FDiffSynth-Studio | Trendshift

+ +[![PyPI](https://img.shields.io/pypi/v/DiffSynth)](https://pypi.org/project/DiffSynth/) +[![license](https://img.shields.io/github/license/modelscope/DiffSynth-Studio.svg)](https://github.com/modelscope/DiffSynth-Studio/blob/master/LICENSE) +[![open issues](https://isitmaintained.com/badge/open/modelscope/DiffSynth-Studio.svg)](https://github.com/modelscope/DiffSynth-Studio/issues) +[![GitHub pull-requests](https://img.shields.io/github/issues-pr/modelscope/DiffSynth-Studio.svg)](https://GitHub.com/modelscope/DiffSynth-Studio/pull/) +[![GitHub latest commit](https://badgen.net/github/last-commit/modelscope/DiffSynth-Studio)](https://GitHub.com/modelscope/DiffSynth-Studio/commit/) +[![Discord](https://badgen.net//discord/members/Mm9suEeUDc)](https://discord.gg/Mm9suEeUDc) + +[切换到中文版](./README_zh.md) + +## Introduction + +Welcome to the magical world of Diffusion models! DiffSynth-Studio is an open-source Diffusion model engine developed and maintained by the [ModelScope Community](https://www.modelscope.cn/) team. We hope to foster technological innovation through framework construction, aggregate the power of the open-source community, and explore the rich capabilities of generative model technology! + +Framework features: + +* [Model Support](#all-supported-models): The framework integrates mainstream open-source Diffusion models, covering image generation, video generation, audio generation, and image quality metrics models. +* [VRAM Management](https://diffsynth-studio-doc.readthedocs.io/en/latest/Pipeline_Usage/VRAM_management.html): Dynamically schedules model parameters across disk, memory, and VRAM, allowing consumer-grade GPUs with low VRAM to run inference with large models. +* [Parameter Quantization](https://diffsynth-studio-doc.readthedocs.io/en/latest/Pipeline_Usage/Quantization.html): Converts model parameters to quantized precisions such as NF4 and INT8, significantly reducing the VRAM requirements of model inference and LoRA training. +* [Arbitrary Training](https://diffsynth-studio-doc.readthedocs.io/en/latest/Pipeline_Usage/Model_Training.html): Almost every model that supports inference also supports training, whether base models, LoRAs, or any Adapter models with additional inputs. +* [Split Training](https://diffsynth-studio-doc.readthedocs.io/en/latest/Training/Split_Training.html): Uses a computational graph inference engine to track every variable in the Pipeline, splitting the training process into two stages for efficient training. + +References: + +* Developer documentation (for humans): [中文版](https://diffsynth-studio-doc.readthedocs.io/zh-cn/latest/README.html)、[English version](https://diffsynth-studio-doc.readthedocs.io/en/latest/README.html) +* Agent Skills (for AI): [DiffSynth-Studio Model Integration Skills](https://www.modelscope.cn/collections/DiffSynth-Studio/DiffSynth-Studio-Model-Integration-Skills) + +See also: + +* [DiffSynth-WebUI](https://github.com/modelscope/DiffSynth-WebUI): A lightweight LoRA training tool built on DiffSynth-Studio, enabling LoRA training of models on consumer-grade GPUs. +* [ModelScope AIGC Zone (for Chinese users)](https://modelscope.cn/aigc/home): Productized features powered by DiffSynth-Studio as the core inference and training engine; experience the rich potential of the open-source model ecosystem. +* [ModelScope Civision (for global users)](https://modelscope.ai/civision/home): Unlock the vast potential of the open-source model ecosystem through productized capabilities powered by DiffSynth-Studio. + +## Update History + +> DiffSynth-Studio has undergone major version updates, and some old features are no longer maintained. If you need to use old features, please switch to the [last historical version](https://github.com/modelscope/DiffSynth-Studio/tree/afd101f3452c9ecae0c87b79adfa2e22d65ffdc3) before the major version update. + +> Currently, the development personnel of this project are limited, with most of the work handled by [Artiprocher](https://github.com/Artiprocher) and [mi804](https://github.com/mi804). Therefore, the progress of new feature development will be relatively slow, and the speed of responding to and resolving issues is limited. We apologize for this and ask developers to understand. + +- **August 31, 2026** We have integrated [Qwen-Video-Edit](https://modelscope.cn/models/yunpeng1998/Qwen-Video-Edit), a video editing model developed by open-source community contributor [yunpeng1998](https://github.com/yunpeng1998) based on the image editing model Qwen-Image-Edit. This serves as an excellent example of exploring and expanding model capabilities. + +- **August 25, 2026** We have open-sourced [DiffSynth-WebUI](https://github.com/modelscope/DiffSynth-WebUI), enabling one-click private deployment of LoRA training services. Combined with the model quantization feature, you can train large models even with consumer-grade GPUs. + +- **August 19, 2026** We have released the model quantization feature. It provides a unified `QuantizeConfig` entry point supporting multiple quantization backends including bitsandbytes, torchao, and comfy-kitchen, with capabilities such as online quantization, loading pre-quantized weights, mixed quantization, saving quantized models, and quantization + LoRA training. For details, please refer to the [documentation](/docs/en/Pipeline_Usage/Quantization.md). + +- **August 17, 2026** MiniMax-Music3 open-sourced, welcome a new member to the audio model family! Support includes text-to-music generation and low VRAM inference. For details, please refer to the [documentation](/docs/en/Model_Details/MiniMax-Music3.md) and [example code](/examples/minimax_music3/). + +- **August 7, 2026** We add support for Wan-Animate-2 in the Wan series. Given a reference image and a driving video, it makes the reference character perform the motions in the driving video, generating high-quality character animation, with both standard and distilled variants. For details, please refer to the [documentation](/docs/en/Model_Details/Wan.md) and [example code](/examples/wanvideo/). + +- **August 3, 2026** MiniMax-H3 open-sourced, welcome a new member to the video model family! Support includes text-to-video-audio generation, keyframe-guided generation, reference-driven generation, low VRAM inference, and NF4-quantized inference. For details, please refer to the [documentation](/docs/en/Model_Details/MiniMax-H3.md) and [example code](/examples/minimax_h3/). + +- **July 28, 2026** LingBot-Video open-sourced, welcome a new member to the video model family! This release includes two variants, Dense-1.3B and MoE-30B-A3B (30B total parameters, ~3B active per token), both supporting text-to-video, image-to-video and text-to-image generation, low VRAM inference, and LoRA / full training capabilities. For details, please refer to the [documentation](/docs/en/Model_Details/LingBot-Video.md) and [example code](/examples/lingbot_video/). Huge thanks to [NancyFyong](https://github.com/NancyFyong) for contributing the integration of this model! + +- **July 21, 2026** We have open-sourced [DiffSynth-Studio Model Integration Skills](https://www.modelscope.cn/collections/DiffSynth-Studio/DiffSynth-Studio-Model-Integration-Skills). This is a composable collection of Agent Skills that automates the entire workflow of integrating external diffusion models into DiffSynth-Studio, significantly improving the standardization and efficiency of model integration. Get started with the [example](https://www.modelscope.cn/skills/DiffSynth-Studio/diffsynth-integrator/file/view/master/example.md?status=1)! + +
+More + +- **June 29, 2026** Boogu-Image open-sourced. Support includes text-to-image generation, image editing, low VRAM inference, and training capabilities. For details, please refer to the [documentation](/docs/en/Model_Details/Boogu-Image.md) and [example code](/examples/boogu_image/). + +- **June 24, 2026** Krea-2 is now open-source, and we have provided full support. For more details, please refer to the [documentation](/docs/en/Model_Details/Krea-2.md) and [example code](/examples/krea2/). + +- **June 16, 2026**: We have added a new Template model for ACE-Step: [vocals2music](https://www.modelscope.cn/models/DiffSynth-Studio/acestep15xlsft-vocals2music). For more details, please refer to the [documentation](/docs/en/Model_Details/ACE-Step.md) and [example code](/examples/ace_step/). + +- **June 15, 2026** We have open-sourced Image-to-LoRA V2, compressing the hours-long training process for image style LoRAs into a single model inference step, thereby exploring a new paradigm for LoRA model training. The [technical report](https://arxiv.org/abs/2606.13809) has been released. This release includes three models: + * [DiffSynth-Studio/ZImage-i2L-v2](https://modelscope.cn/models/DiffSynth-Studio/ZImage-i2L-v2): Adapted for the Z-Image model + * [DiffSynth-Studio/KleinBase4B-i2L-v2](https://modelscope.cn/models/DiffSynth-Studio/KleinBase4B-i2L-v2): Adapted for the FLUX.2-klein-base-4B model + * [DiffSynth-Studio/HidreamO1-i2L-v2](https://modelscope.cn/models/DiffSynth-Studio/HidreamO1-i2L-v2): Adapted for the Hidream-O1-Image model + +- **June 5, 2026** Ideogram 4 open-sourced. Support includes text-to-image inference. For details, please refer to the [documentation](/docs/en/Model_Details/Ideogram-4.md) and [example code](/examples/ideogram4/). + +- **May 21, 2026**: Added support for image quality metrics models, including FID, CLIP, Aesthetic, PickScore, ImageReward, HPSv2, and HPSv3. For details, refer to the [documentation](/docs/en/Model_Details/Image-Quality-Metrics.md) and [example code](/examples/image_quality_metric/). + +- **May 18, 2026** Added **CPU Offload Training** support. By moving model weights layer-by-layer between CPU and GPU, it significantly reduces GPU VRAM usage during training, enabling LoRA training of large models even on consumer-grade GPUs, compatible with all models. Simply add `--enable_model_cpu_offload` to your training command to enable (currently supports single-GPU training only). For details, see the [documentation](/docs/en/Training/Offload_Training.md). + +- **May 14, 2026** HiDream-O1-Image open-sourced, welcome a new member to the image model family! Support includes text-to-image generation, image editing, low VRAM inference, and training capabilities. For details, please refer to the [documentation](/docs/en/Model_Details/HiDream-O1-Image.md) and [example code](/examples/hidream_o1_image/). + +- **April 28, 2026** We released Diffusion Templates, a plugin framework designed for Diffusion models that significantly lowers the barrier to training controllable generative models. Let's explore this cutting-edge technology together! + * Open-source code: [DiffSynth-Studio](https://github.com/modelscope/DiffSynth-Studio) + * Technical report: [arXiv](https://arxiv.org/abs/2604.24351) + * Project homepage: [GitHub](https://modelscope.github.io/diffusion-templates-web/) + * Documentation: [English Version](https://diffsynth-studio-doc.readthedocs.io/en/latest/Diffusion_Templates/Introducing_Diffusion_Templates.html) | [Chinese Version](https://diffsynth-studio-doc.readthedocs.io/zh-cn/latest/Diffusion_Templates/Introducing_Diffusion_Templates.html) + * Online demo: [ModelScope](https://modelscope.cn/studios/DiffSynth-Studio/Diffusion-Templates) + * Model collections: [ModelScope](https://modelscope.cn/collections/DiffSynth-Studio/KleinBase4B-Templates) | [ModelScope International](https://modelscope.ai/collections/DiffSynth-Studio/KleinBase4B-Templates) | [HuggingFace](https://huggingface.co/collections/DiffSynth-Studio/kleinbase4b-templates) + * Datasets: [ModelScope](https://modelscope.cn/collections/DiffSynth-Studio/ImagePulseV2) | [ModelScope International](https://modelscope.ai/collections/DiffSynth-Studio/ImagePulseV2) | [HuggingFace](https://huggingface.co/collections/DiffSynth-Studio/imagepulsev2) + +- **April 27, 2026** We support ACE-Step-1.5! Support includes text-to-music generation, low VRAM inference, and LoRA training capabilities. For details, please refer to the [documentation](/docs/en/Model_Details/ACE-Step.md) and [example code](/examples/ace_step/). + +- **April 27, 2026**: We have reinstated support for the Stable Diffusion v1.5 and SDXL models, providing academic research support exclusively for these two model types. + +- **April 14, 2026** JoyAI-Image open-sourced, welcome a new member to the image editing model family! Support includes instruction-guided image editing, low VRAM inference, and training capabilities. For details, please refer to the [documentation](/docs/en/Model_Details/JoyAI-Image.md) and [example code](/examples/joyai_image/). + + +- **March 19, 2026**: Added support for [openmoss/MOVA-720p](https://modelscope.cn/models/openmoss/MOVA-720p) and [openmoss/MOVA-360p](https://modelscope.cn/models/openmoss/MOVA-360p) models, including training and inference capabilities. [Documentation](/docs/en/Model_Details/Wan.md) and [example code](/examples/mova/) are now available. + +- **March 12, 2026**: We have added support for the [LTX-2.3](https://modelscope.cn/models/Lightricks/LTX-2.3) audio-video generation model. The features includes text-to-audio/video, image-to-audio/video, IC-LoRA control, audio-to-video, and audio-video inpainting. We have supported the complete inference and training functionalities. For details, please refer to the [documentation](/docs/en/Model_Details/LTX-2.md) and [code](/examples/ltx2/). + +- **March 3, 2026**: We released the [DiffSynth-Studio/Qwen-Image-Layered-Control-V2](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Layered-Control-V2) model, which is an updated version of Qwen-Image-Layered-Control. In addition to the originally supported text-guided functionality, it adds brush-controlled layer separation capabilities. + +- **March 2, 2026** Added support for [Anima](https://modelscope.cn/models/circlestone-labs/Anima). For details, please refer to the [documentation](docs/en/Model_Details/Anima.md). This is an interesting anime-style image generation model. We look forward to its future updates. + +- **February 26, 2026** Added full and lora training support for the LTX-2 audio-video generation model. See the [documentation](/docs/en/Model_Details/LTX-2.md) for details. + +- **February 10, 2026** Added inference support for the LTX-2 audio-video generation model. See the [documentation](/docs/en/Model_Details/LTX-2.md) for details. Support for model training will be implemented in the future. + +- **February 2, 2026** The first document of the Research Tutorial series is now available, guiding you through training a small 0.1B text-to-image model from scratch. For details, see the [documentation](/docs/en/Research_Tutorial/train_from_scratch.md) and [model](https://modelscope.cn/models/DiffSynth-Studio/AAAMyModel). We hope DiffSynth-Studio can evolve into a more powerful training framework for Diffusion models. + +- **January 27, 2026**: [Z-Image](https://modelscope.cn/models/Tongyi-MAI/Z-Image) is released, and our [Z-Image-i2L](https://www.modelscope.cn/models/DiffSynth-Studio/Z-Image-i2L) model is released concurrently. You can use it in [ModelScope Studios](https://modelscope.cn/studios/DiffSynth-Studio/Z-Image-i2L). For details, see the [documentation](/docs/zh/Model_Details/Z-Image.md). + +- **January 19, 2026**: Added support for [FLUX.2-klein-4B](https://modelscope.cn/models/black-forest-labs/FLUX.2-klein-4B) and [FLUX.2-klein-9B](https://modelscope.cn/models/black-forest-labs/FLUX.2-klein-9B) models, including training and inference capabilities. [Documentation](/docs/en/Model_Details/FLUX2.md) and [example code](/examples/flux2/) are now available. + +- **January 12, 2026**: We trained and open-sourced a text-guided image layer separation model ([Model Link](https://modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Layered-Control)). Given an input image and a textual description, the model isolates the image layer corresponding to the described content. For more details, please refer to our blog post ([Chinese version](https://modelscope.cn/learn/4938), [English version](https://huggingface.co/blog/kelseye/qwen-image-layered-control)). + +- **December 24, 2025**: Based on Qwen-Image-Edit-2511, we trained an In-Context Editing LoRA model ([Model Link](https://modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Edit-2511-ICEdit-LoRA)). This model takes three images as input (Image A, Image B, and Image C), and automatically analyzes the transformation from Image A to Image B, then applies the same transformation to Image C to generate Image D. For more details, please refer to our blog post ([Chinese version](https://mp.weixin.qq.com/s/41aEiN3lXKGCJs1-we4Q2g), [English version](https://huggingface.co/blog/kelseye/qwen-image-edit-2511-icedit-lora)). + +- **December 9, 2025** We release a wild model based on DiffSynth-Studio 2.0: [Qwen-Image-i2L](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-i2L) (Image-to-LoRA). This model takes an image as input and outputs a LoRA. Although this version still has significant room for improvement in terms of generalization, detail preservation, and other aspects, we are open-sourcing these models to inspire more innovative research. For more details, please refer to our [blog](https://huggingface.co/blog/kelseye/qwen-image-i2l). + +- **December 4, 2025** DiffSynth-Studio 2.0 released! Many new features online + - [Documentation](/docs/en/README.md) online: Our documentation is still continuously being optimized and updated + - [VRAM Management](/docs/en/Pipeline_Usage/VRAM_management.md) module upgraded, supporting layer-level disk offload, releasing both memory and VRAM simultaneously + - New model support + - Z-Image Turbo: [Model](https://www.modelscope.ai/models/Tongyi-MAI/Z-Image-Turbo), [Documentation](/docs/en/Model_Details/Z-Image.md), [Code](/examples/z_image/) + - FLUX.2-dev: [Model](https://www.modelscope.cn/models/black-forest-labs/FLUX.2-dev), [Documentation](/docs/en/Model_Details/FLUX2.md), [Code](/examples/flux2/) + - Training framework upgrade + - [Split Training](/docs/en/Training/Split_Training.md): Supports automatically splitting the training process into two stages: data processing and training (even for training ControlNet or any other model). Computations that do not require gradient backpropagation, such as text encoding and VAE encoding, are performed during the data processing stage, while other computations are handled during the training stage. Faster speed, less VRAM requirement. + - [Differential LoRA Training](/docs/en/Training/Differential_LoRA.md): This is a training technique we used in [ArtAug](https://www.modelscope.cn/models/DiffSynth-Studio/ArtAug-lora-FLUX.1dev-v1), now available for LoRA training of any model. + - [FP8 Training](/docs/en/Training/FP8_Precision.md): FP8 can be applied to any non-training model during training, i.e., models with gradients turned off or gradients that only affect LoRA weights. + +- **November 4, 2025** Supported the [ByteDance/Video-As-Prompt-Wan2.1-14B](https://modelscope.cn/models/ByteDance/Video-As-Prompt-Wan2.1-14B) model, which is trained based on Wan 2.1 and supports generating corresponding actions based on reference videos. + +- **October 30, 2025** Supported the [meituan-longcat/LongCat-Video](https://www.modelscope.cn/models/meituan-longcat/LongCat-Video) model, which supports text-to-video, image-to-video, and video continuation. This model uses the Wan framework for inference and training in this project. + +- **October 27, 2025** Supported the [krea/krea-realtime-video](https://www.modelscope.cn/models/krea/krea-realtime-video) model, adding another member to the Wan model ecosystem. + +- **September 23, 2025** [DiffSynth-Studio/Qwen-Image-EliGen-Poster](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-EliGen-Poster) released! This model was jointly developed and open-sourced by us and Taobao Experience Design Team. Built upon Qwen-Image, the model is specifically designed for e-commerce poster scenarios, supporting precise partition layout control. Please refer to [our sample code](./examples/qwen_image/model_inference/Qwen-Image-EliGen-Poster.py). + +- **September 9, 2025** Our training framework supports various training modes. Currently adapted for Qwen-Image, in addition to the standard SFT training mode, Direct Distill is now supported. Please refer to [our sample code](./examples/qwen_image/model_training/lora/Qwen-Image-Distill-LoRA.sh). This feature is experimental, and we will continue to improve it to support more comprehensive model training functions. + +- **August 28, 2025** We support Wan2.2-S2V, an audio-driven cinematic video generation model. See [./examples/wanvideo/](./examples/wanvideo/). + +- **August 21, 2025** [DiffSynth-Studio/Qwen-Image-EliGen-V2](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-EliGen-V2) released! Compared to the V1 version, the training dataset has been changed to [Qwen-Image-Self-Generated-Dataset](https://www.modelscope.cn/datasets/DiffSynth-Studio/Qwen-Image-Self-Generated-Dataset), so the generated images better conform to Qwen-Image's own image distribution and style. Please refer to [our sample code](./examples/qwen_image/model_inference_low_vram/Qwen-Image-EliGen-V2.py). + +- **August 21, 2025** We open-sourced the [DiffSynth-Studio/Qwen-Image-In-Context-Control-Union](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-In-Context-Control-Union) structural control LoRA model, adopting the In Context technical route, supporting multiple categories of structural control conditions, including canny, depth, lineart, softedge, normal, and openpose. Please refer to [our sample code](./examples/qwen_image/model_inference/Qwen-Image-In-Context-Control-Union.py). + +- **August 20, 2025** We open-sourced the [DiffSynth-Studio/Qwen-Image-Edit-Lowres-Fix](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Edit-Lowres-Fix) model, improving the editing effect of Qwen-Image-Edit on low-resolution image inputs. Please refer to [our sample code](./examples/qwen_image/model_inference/Qwen-Image-Edit-Lowres-Fix.py) + +- **August 19, 2025** Qwen-Image-Edit open-sourced, welcome a new member to the image editing model family! + +- **August 18, 2025** We trained and open-sourced the Qwen-Image inpainting ControlNet model [DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Inpaint](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Inpaint). The model structure adopts a lightweight design. Please refer to [our sample code](./examples/qwen_image/model_inference/Qwen-Image-Blockwise-ControlNet-Inpaint.py). + +- **August 15, 2025** We open-sourced the [Qwen-Image-Self-Generated-Dataset](https://www.modelscope.cn/datasets/DiffSynth-Studio/Qwen-Image-Self-Generated-Dataset) dataset. This is an image dataset generated using the Qwen-Image model, containing 160,000 `1024 x 1024` images. It includes general, English text rendering, and Chinese text rendering subsets. We provide annotations for image descriptions, entities, and structural control images for each image. Developers can use this dataset to train Qwen-Image models' ControlNet and EliGen models. We aim to promote technological development through open-sourcing! + +- **August 13, 2025** We trained and open-sourced the Qwen-Image ControlNet model [DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Depth](https://modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Depth). The model structure adopts a lightweight design. Please refer to [our sample code](./examples/qwen_image/model_inference/Qwen-Image-Blockwise-ControlNet-Depth.py). + +- **August 12, 2025** We trained and open-sourced the Qwen-Image ControlNet model [DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Canny](https://modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Canny). The model structure adopts a lightweight design. Please refer to [our sample code](./examples/qwen_image/model_inference/Qwen-Image-Blockwise-ControlNet-Canny.py). + +- **August 11, 2025** We open-sourced the distilled acceleration model [DiffSynth-Studio/Qwen-Image-Distill-LoRA](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Distill-LoRA) for Qwen-Image, following the same training process as [DiffSynth-Studio/Qwen-Image-Distill-Full](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Distill-Full), but the model structure has been modified to LoRA, thus being better compatible with other open-source ecosystem models. + +- **August 7, 2025** We open-sourced the entity control LoRA model [DiffSynth-Studio/Qwen-Image-EliGen](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-EliGen) for Qwen-Image. Qwen-Image-EliGen can achieve entity-level controlled text-to-image generation. Technical details can be found in [the paper](https://arxiv.org/abs/2501.01097). Training dataset: [EliGenTrainSet](https://www.modelscope.cn/datasets/DiffSynth-Studio/EliGenTrainSet). + +- **August 5, 2025** We open-sourced the distilled acceleration model [DiffSynth-Studio/Qwen-Image-Distill-Full](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Distill-Full) for Qwen-Image, achieving approximately 5x acceleration. + +- **August 4, 2025** Qwen-Image open-sourced, welcome a new member to the image generation model family! + +- **August 1, 2025** [FLUX.1-Krea-dev](https://www.modelscope.cn/models/black-forest-labs/FLUX.1-Krea-dev) open-sourced, a text-to-image model focused on aesthetic photography. We provided comprehensive support in a timely manner, including low VRAM layer-by-layer offload, LoRA training, and full training. For more details, please refer to [./examples/flux/](./examples/flux/). + +- **July 28, 2025** Wan 2.2 open-sourced. We provided comprehensive support in a timely manner, including low VRAM layer-by-layer offload, FP8 quantization, sequence parallelism, LoRA training, and full training. For more details, please refer to [./examples/wanvideo/](./examples/wanvideo/). + +- **July 11, 2025** We propose Nexus-Gen, a unified framework that combines the language reasoning capabilities of Large Language Models (LLMs) with the image generation capabilities of diffusion models. This framework supports seamless image understanding, generation, and editing tasks. + - Paper: [Nexus-Gen: Unified Image Understanding, Generation, and Editing via Prefilled Autoregression in Shared Embedding Space](https://arxiv.org/pdf/2504.21356) + - GitHub Repository: https://github.com/modelscope/Nexus-Gen + - Model: [ModelScope](https://www.modelscope.cn/models/DiffSynth-Studio/Nexus-GenV2), [HuggingFace](https://huggingface.co/modelscope/Nexus-GenV2) + - Training Dataset: [ModelScope Dataset](https://www.modelscope.cn/datasets/DiffSynth-Studio/Nexus-Gen-Training-Dataset) + - Online Experience: [ModelScope Nexus-Gen Studio](https://www.modelscope.cn/studios/DiffSynth-Studio/Nexus-Gen) + +- **June 15, 2025** ModelScope's official evaluation framework [EvalScope](https://github.com/modelscope/evalscope) now supports text-to-image generation evaluation. Please refer to the [best practices](https://evalscope.readthedocs.io/zh-cn/latest/best_practice/t2i_eval.html) guide to try it out. + +- **March 25, 2025** Our new open-source project [DiffSynth-Engine](https://github.com/modelscope/DiffSynth-Engine) is now open-sourced! Focused on stable model deployment, targeting industry, providing better engineering support, higher computational performance, and more stable features. + +- **March 31, 2025** We support InfiniteYou, a face feature preservation method for FLUX. More details can be found in [./examples/InfiniteYou/](./examples/InfiniteYou/). + +- **March 13, 2025** We support HunyuanVideo-I2V, the image-to-video generation version of Tencent's open-source HunyuanVideo. More details can be found in [./examples/HunyuanVideo/](./examples/HunyuanVideo/). + +- **February 25, 2025** We support Wan-Video, a series of state-of-the-art video synthesis models open-sourced by Alibaba. See [./examples/wanvideo/](./examples/wanvideo/). + +- **February 17, 2025** We support [StepVideo](https://modelscope.cn/models/stepfun-ai/stepvideo-t2v/summary)! Advanced video synthesis model! See [./examples/stepvideo](./examples/stepvideo/). + +- **December 31, 2024** We propose EliGen, a new framework for entity-level controlled text-to-image generation, supplemented with an inpainting fusion pipeline, extending its capabilities to image inpainting tasks. EliGen can seamlessly integrate existing community models such as IP-Adapter and In-Context LoRA, enhancing their versatility. For more details, see [./examples/EntityControl](./examples/EntityControl/). + - Paper: [EliGen: Entity-Level Controlled Image Generation with Regional Attention](https://arxiv.org/abs/2501.01097) + - Model: [ModelScope](https://www.modelscope.cn/models/DiffSynth-Studio/Eligen), [HuggingFace](https://huggingface.co/modelscope/EliGen) + - Online Experience: [ModelScope EliGen Studio](https://www.modelscope.cn/studios/DiffSynth-Studio/EliGen) + - Training Dataset: [EliGen Train Set](https://www.modelscope.cn/datasets/DiffSynth-Studio/EliGenTrainSet) + +- **December 19, 2024** We implemented advanced VRAM management for HunyuanVideo, enabling video generation with resolutions of 129x720x1280 on 24GB VRAM or 129x512x384 on just 6GB VRAM. More details can be found in [./examples/HunyuanVideo/](./examples/HunyuanVideo/). + +- **December 18, 2024** We propose ArtAug, a method to improve text-to-image models through synthesis-understanding interaction. We trained an ArtAug enhancement module for FLUX.1-dev in LoRA format. This model incorporates the aesthetic understanding of Qwen2-VL-72B into FLUX.1-dev, thereby improving the quality of generated images. + - Paper: https://arxiv.org/abs/2412.12888 + - Example: https://github.com/modelscope/DiffSynth-Studio/tree/main/examples/ArtAug + - Model: [ModelScope](https://www.modelscope.cn/models/DiffSynth-Studio/ArtAug-lora-FLUX.1dev-v1), [HuggingFace](https://huggingface.co/ECNU-CILab/ArtAug-lora-FLUX.1dev-v1) + - Demo: [ModelScope](https://modelscope.cn/aigc/imageGeneration?tab=advanced&versionId=7228&modelType=LoRA&sdVersion=FLUX_1&modelUrl=modelscope%3A%2F%2FDiffSynth-Studio%2FArtAug-lora-FLUX.1dev-v1%3Frevision%3Dv1.0), HuggingFace (coming soon) + +- **October 25, 2024** We provide extensive FLUX ControlNet support. This project supports many different ControlNet models and can be freely combined, even if their structures are different. Additionally, ControlNet models are compatible with high-resolution optimization and partition control technologies, enabling very powerful controllable image generation. See [`./examples/ControlNet/`](./examples/ControlNet/). + +- **October 8, 2024** We released extended LoRAs based on CogVideoX-5B and ExVideo. You can download this model from [ModelScope](https://modelscope.cn/models/ECNU-CILab/ExVideo-CogVideoX-LoRA-129f-v1) or [HuggingFace](https://huggingface.co/ECNU-CILab/ExVideo-CogVideoX-LoRA-129f-v1). + +- **August 22, 2024** This project now supports CogVideoX-5B. See [here](/examples/video_synthesis/). We provide several interesting features for this text-to-video model, including: + - Text-to-video + - Video editing + - Self super-resolution + - Video interpolation + +- **August 22, 2024** We implemented an interesting brush feature that supports all text-to-image models. Now you can create stunning images with the assistance of AI using the brush! + - Use it in our [WebUI](#usage-in-webui). + +- **August 21, 2024** DiffSynth-Studio now supports FLUX. + - Enable CFG and high-resolution inpainting to improve visual quality. See [here](/examples/image_synthesis/README.md) + - LoRA, ControlNet, and other addon models will be released soon. + +- **June 21, 2024** We propose ExVideo, a post-training fine-tuning technique aimed at enhancing the capabilities of video generation models. We extended Stable Video Diffusion to achieve long video generation of up to 128 frames. + - [Project Page](https://ecnu-cilab.github.io/ExVideoProjectPage/) + - Source code has been released in this repository. See [`examples/ExVideo`](./examples/ExVideo/). + - Model has been released at [HuggingFace](https://huggingface.co/ECNU-CILab/ExVideo-SVD-128f-v1) and [ModelScope](https://modelscope.cn/models/ECNU-CILab/ExVideo-SVD-128f-v1). + - Technical report has been released at [arXiv](https://arxiv.org/abs/2406.14130). + - You can try ExVideo in this [demo](https://huggingface.co/spaces/modelscope/ExVideo-SVD-128f-v1)! + +- **June 13, 2024** DiffSynth Studio has migrated to ModelScope. The development team has also transitioned from "me" to "us". Of course, I will still participate in subsequent development and maintenance work. + +- **January 29, 2024** We propose Diffutoon, an excellent cartoon coloring solution. + - [Project Page](https://ecnu-cilab.github.io/DiffutoonProjectPage/) + - Source code has been released in this project. + - Technical report (IJCAI 2024) has been released at [arXiv](https://arxiv.org/abs/2401.16224). + +- **December 8, 2023** We decided to initiate a new project aimed at unleashing the potential of diffusion models, especially in video synthesis. The development work of this project officially began. + +- **November 15, 2023** We propose FastBlend, a powerful video deflickering algorithm. + - sd-webui extension has been released at [GitHub](https://github.com/Artiprocher/sd-webui-fastblend). + - Demonstration videos have been showcased on Bilibili, including three tasks: + - [Video Deflickering](https://www.bilibili.com/video/BV1d94y1W7PE) + - [Video Interpolation](https://www.bilibili.com/video/BV1Lw411m71p) + - [Image-Driven Video Rendering](https://www.bilibili.com/video/BV1RB4y1Z7LF) + - Technical report has been released at [arXiv](https://arxiv.org/abs/2311.09265). + - Unofficial ComfyUI extensions developed by other users have been released at [GitHub](https://github.com/AInseven/ComfyUI-fastblend). + +- **October 1, 2023** We released an early version of the project named FastSDXL. This was an initial attempt to build a diffusion engine. + - Source code has been released at [GitHub](https://github.com/Artiprocher/FastSDXL). + - FastSDXL includes a trainable OLSS scheduler to improve efficiency. + - The original repository of OLSS is located [here](https://github.com/alibaba/EasyNLP/tree/master/diffusion/olss_scheduler). + - Technical report (CIKM 2023) has been released at [arXiv](https://arxiv.org/abs/2305.14677). + - Demonstration video has been released at [Bilibili](https://www.bilibili.com/video/BV1w8411y7uj). + - Since OLSS requires additional training, we did not implement it in this project. + +- **August 29, 2023** We propose DiffSynth, a video synthesis framework. + - [Project Page](https://ecnu-cilab.github.io/DiffSynth.github.io/). + - Source code has been released at [EasyNLP](https://github.com/alibaba/EasyNLP/tree/master/diffusion/DiffSynth). + - Technical report (ECML PKDD 2024) has been released at [arXiv](https://arxiv.org/abs/2308.03463). + +
+ +## Installation + +Install from source (recommended): + +``` +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +For more installation methods and instructions for non-NVIDIA GPUs, please refer to the [Installation Guide](/docs/en/Pipeline_Usage/Setup.md). + +
+Download Source Configuration + +> Before model inference and training, you can configure the model download source and other options through [environment variables](/docs/en/Pipeline_Usage/Environment_Variables.md). +> +> This project downloads models from [ModelScope](https://modelscope.cn/) by default. For users outside China, you can download models from the [ModelScope International](https://modelscope.ai) site with the following configuration: +> +> ```shell +> export MODELSCOPE_ENDPOINT=https://modelscope.ai +> ``` +> +> To download models from [HuggingFace](https://huggingface.co/), please modify the [environment variables](/docs/en/Pipeline_Usage/Environment_Variables.md). Note that model IDs may differ across platforms: +> +> ```shell +> export DIFFSYNTH_DOWNLOAD_SOURCE="huggingface" +> ``` + +
+ +## Basic Framework + +DiffSynth-Studio redesigns the inference and training pipelines for mainstream Diffusion models (including FLUX, Wan, etc.), enabling efficient memory management and flexible model training. + +Quick start: experience popular and the latest models: + +| Architecture | Model ID | Inference | Low VRAM Inference | Full Training | Validation After Full Training | LoRA Training | Validation After LoRA Training | +|-|-|-|-|-|-|-|-| +| MiniMax-H3 | [MiniMax/MiniMax-H3: FL2VA](https://www.modelscope.cn/models/MiniMax/MiniMax-H3) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-FL2VA.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-FL2VA.py) | [code](/examples/minimax_h3/model_training/full/MiniMax-H3-FL2VA.sh) | [code](/examples/minimax_h3/model_training/validate_full/MiniMax-H3-FL2VA.py) | [code](/examples/minimax_h3/model_training/lora/MiniMax-H3-FL2VA.sh) | [code](/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-FL2VA.py) | +| MiniMax-H3 | [DiffSynth-Studio/MiniMax-H3-NF4: FL2VA pruned](https://www.modelscope.cn/models/DiffSynth-Studio/MiniMax-H3-NF4) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-NF4-Pruned-FL2VA.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-NF4-Pruned-FL2VA.py) | - | - | [code](/examples/minimax_h3/model_training/lora/MiniMax-H3-NF4-Pruned-FL2VA.sh) | [code](/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-NF4-Pruned-FL2VA.py) | +| ACE-Step | [ACE-Step/acestep-v15-xl-sft](https://www.modelscope.cn/models/ACE-Step/acestep-v15-xl-sft) | [code](/examples/ace_step/model_inference/acestep-v15-xl-sft.py) | [code](/examples/ace_step/model_inference_low_vram/acestep-v15-xl-sft.py) | [code](/examples/ace_step/model_training/full/acestep-v15-xl-sft.sh) | [code](/examples/ace_step/model_training/validate_full/acestep-v15-xl-sft.py) | [code](/examples/ace_step/model_training/lora/acestep-v15-xl-sft.sh) | [code](/examples/ace_step/model_training/validate_lora/acestep-v15-xl-sft.py) | +| Z-Image | [Tongyi-MAI/Z-Image-Turbo](https://www.modelscope.cn/models/Tongyi-MAI/Z-Image-Turbo) | [code](/examples/z_image/model_inference/Z-Image-Turbo.py) | [code](/examples/z_image/model_inference_low_vram/Z-Image-Turbo.py) | [code](/examples/z_image/model_training/full/Z-Image-Turbo.sh) | [code](/examples/z_image/model_training/validate_full/Z-Image-Turbo.py) | [code](/examples/z_image/model_training/lora/Z-Image-Turbo.sh) | [code](/examples/z_image/model_training/validate_lora/Z-Image-Turbo.py) | +| Krea-2 | [krea/Krea-2-Raw](https://www.modelscope.cn/models/krea/Krea-2-Raw) | [code](/examples/krea2/model_inference/Krea-2-Raw.py) | [code](/examples/krea2/model_inference_low_vram/Krea-2-Raw.py) | [code](/examples/krea2/model_training/full/Krea-2-Raw.sh) | [code](/examples/krea2/model_training/validate_full/Krea-2-Raw.py) | [code](/examples/krea2/model_training/lora/Krea-2-Raw.sh) | [code](/examples/krea2/model_training/validate_lora/Krea-2-Raw.py) | +| Krea-2 | [krea/Krea-2-Turbo](https://www.modelscope.cn/models/krea/Krea-2-Turbo) | [code](/examples/krea2/model_inference/Krea-2-Turbo.py) | [code](/examples/krea2/model_inference_low_vram/Krea-2-Turbo.py) | [code](/examples/krea2/model_training/full/Krea-2-Turbo.sh) | [code](/examples/krea2/model_training/validate_full/Krea-2-Turbo.py) | [code](/examples/krea2/model_training/lora/Krea-2-Turbo.sh) | [code](/examples/krea2/model_training/validate_lora/Krea-2-Turbo.py) | + +Model overview: + +- Image generation + - Boogu-Image: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/Boogu-Image.html), [Example code](/examples/boogu_image/) + - Krea-2: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/Krea-2.html), [Example code](/examples/krea2/) + - Ideogram 4: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/Ideogram-4.html), [Example code](/examples/ideogram4/) + - HiDream-O1-Image: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/HiDream-O1-Image.html), [Example code](/examples/hidream_o1_image/) + - JoyAI-Image: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/JoyAI-Image.html), [Example code](/examples/joyai_image/) + - ERNIE-Image: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/ERNIE-Image.html), [Example code](/examples/ernie_image/) + - FLUX.2: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/FLUX2.html), [Example code](/examples/flux2/) + - Z-Image: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/Z-Image.html), [Example code](/examples/z_image/) + - Anima: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/Anima.html), [Example code](/examples/anima/) + - Qwen-Image: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/Qwen-Image.html), [Example code](/examples/qwen_image/) + - FLUX.1: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/FLUX.html), [Example code](/examples/flux/) + - Stable Diffusion XL: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/Stable-Diffusion-XL.html), [Example code](/examples/stable_diffusion_xl/) + - Stable Diffusion: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/Stable-Diffusion.html), [Example code](/examples/stable_diffusion/) +- Video generation + - MiniMax-H3: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/MiniMax-H3.html), [Example code](/examples/minimax_h3/) + - LingBot-Video: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/LingBot-Video.html), [Example code](/examples/lingbot_video/) + - LTX-2: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/LTX-2.html), [Example code](/examples/ltx2/) + - Wan: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/Wan.html), [Example code](/examples/wanvideo/) +- Audio generation + - MiniMax-Music3: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/MiniMax-Music3.html), [Example code](/examples/minimax_music3/) + - ACE-Step: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/ACE-Step.html), [Example code](/examples/ace_step/) +- Evaluation models: [Documentation](https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/Image-Quality-Metrics.html), [Example code](/examples/image_quality_metric/) + +[View all supported models](#all-supported-models) + +## Innovative Achievements + +We believe that a well-developed open-source code framework can lower the threshold for technical exploration. We have achieved many interesting technologies based on this codebase. Perhaps you also have many wild ideas, and with DiffSynth-Studio, you can quickly realize these ideas. + +
+ +TreeAdapter: A Model System Built from Structured LoRAs + +> A model system composed of 10,000+ LoRAs challenges the precise generation of tens of thousands of rare species. + +* Paper: [TreeAdapter: Hierarchical Taxonomy-Guided Adapter Composition for Fine-Grained Species Image Generation](https://arxiv.org/abs/2607.24215) +* Model: [ModelScope](https://modelscope.cn/models/DiffSynth-Studio/TreeAdapter-KleinBase4B) + +![Image](https://github.com/user-attachments/assets/1b461e0f-60aa-4b38-a44d-d1646cbbbc75) + +
+ + +
+ +Image-to-LoRA: Compressing Model Training into Model Inference + +> True Meta Learning: feed a dataset of images into one end of the model, and the trained LoRA model comes out the other end. + +* Paper: [Compressing Image Style Training into a Single Model Forward](https://arxiv.org/abs/2606.13809) +* Model: + * [DiffSynth-Studio/ZImage-i2L-v2](https://modelscope.cn/models/DiffSynth-Studio/ZImage-i2L-v2): Adapted for the Z-Image model + * [DiffSynth-Studio/KleinBase4B-i2L-v2](https://modelscope.cn/models/DiffSynth-Studio/KleinBase4B-i2L-v2): Adapted for the FLUX.2-klein-base-4B model + * [DiffSynth-Studio/HidreamO1-i2L-v2](https://modelscope.cn/models/DiffSynth-Studio/HidreamO1-i2L-v2): Adapted for the Hidream-O1-Image model + +|Input example 1|Output example 1|Input example 2|Output example 2| +|-|-|-|-| +|![Image](https://github.com/user-attachments/assets/0a1fd252-851f-414e-af24-4c656ab54277)|![Image](https://github.com/user-attachments/assets/96259993-e732-424d-bf07-9ca1ede27890)|![Image](https://github.com/user-attachments/assets/a78573a0-c2cf-4e33-ac21-276078e8cad3)|![Image](https://github.com/user-attachments/assets/8177e883-cfef-4e38-a528-cdef01a9f9b8)| + +
+ + +
+ +Diffusion-Templates: A Plugin-Based Controllable Generation Framework + +> One framework that turns every controllable generation capability into a plugin, allowing multiple models to combine and emerge with rich generation capabilities. + +* Paper: [Diffusion Templates: A Unified Plugin Framework for Controllable Diffusion](https://arxiv.org/abs/2604.24351) +* Project homepage: [GitHub](https://modelscope.github.io/diffusion-templates-web/) +* Documentation: [English Version](https://diffsynth-studio-doc.readthedocs.io/en/latest/Diffusion_Templates/Introducing_Diffusion_Templates.html) | [Chinese Version](https://diffsynth-studio-doc.readthedocs.io/zh-cn/latest/Diffusion_Templates/Introducing_Diffusion_Templates.html) +* Online demo: [ModelScope](https://modelscope.cn/studios/DiffSynth-Studio/Diffusion-Templates) +* Model collections: [ModelScope](https://modelscope.cn/collections/DiffSynth-Studio/KleinBase4B-Templates) | [ModelScope International](https://modelscope.ai/collections/DiffSynth-Studio/KleinBase4B-Templates) | [HuggingFace](https://huggingface.co/collections/DiffSynth-Studio/kleinbase4b-templates) +* Datasets: [ModelScope](https://modelscope.cn/collections/DiffSynth-Studio/ImagePulseV2) | [ModelScope International](https://modelscope.cn/collections/DiffSynth-Studio/ImagePulseV2) | [HuggingFace](https://huggingface.co/collections/DiffSynth-Studio/imagepulsev2) + +|Reference image|Local editing|Style transfer|Sharpness enhancement| +|-|-|-|-| +|![](https://modelscope.cn/datasets/DiffSynth-Studio/examples_in_diffsynth/resolve/master/templates/image_reference.jpg)|![](https://modelscope.cn/datasets/DiffSynth-Studio/examples_in_diffsynth/resolve/master/templates/image_Brightness_Edit_Inpaint.png)|![](https://modelscope.cn/datasets/DiffSynth-Studio/examples_in_diffsynth/resolve/master/templates/image_Controlnet_Edit_SoftRGB.png)|![](https://modelscope.cn/datasets/DiffSynth-Studio/examples_in_diffsynth/resolve/master/templates/image_Upscaler_Sharpness.png)| + +
+ + + +
+ +Spectral Evolution Search: Efficient Inference-Time Scaling for Reward-Aligned Image Generation + +> Trade inference time for higher quality of generated content. + +- Paper: [Spectral Evolution Search: Efficient Inference-Time Scaling for Reward-Aligned Image Generation +](https://arxiv.org/abs/2602.03208) +- Sample Code: [/docs/en/Research_Tutorial/inference_time_scaling.md](/docs/en/Research_Tutorial/inference_time_scaling.md) + +|FLUX.1-dev|FLUX.1-dev + SES|Qwen-Image|Qwen-Image + SES| +|-|-|-|-| +|![Image](https://github.com/user-attachments/assets/5be15dc6-2805-4822-b04c-2573fc0f45f0)|![Image](https://github.com/user-attachments/assets/e71b8c20-1629-41d9-b0ff-185805c1da4e)|![Image](https://github.com/user-attachments/assets/7a73c968-133a-4545-9aa2-205533861cd4)|![Image](https://github.com/user-attachments/assets/c8390b22-14fe-48a0-a6e6-d6556d31235e)| + +
+ + +
+ +VIRAL: Visual In-Context Reasoning via Analogy in Diffusion Transformers + +> Transform image 3 into image 4 based on the change from image 1 to image 2 — the emergent capability of image editing models. + +- Paper: [VIRAL: Visual In-Context Reasoning via Analogy in Diffusion Transformers +](https://arxiv.org/abs/2602.03210) +- Sample code: [/examples/qwen_image/model_inference/Qwen-Image-Edit-2511-ICEdit.py](/examples/qwen_image/model_inference/Qwen-Image-Edit-2511-ICEdit.py) +- Model: [ModelScope](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Edit-2511-ICEdit-LoRA) + +|Example 1|Example 2|Query|Output| +|-|-|-|-| +|![Image](https://github.com/user-attachments/assets/380d2670-47bf-41cd-b5c9-37110cc4a943)|![Image](https://github.com/user-attachments/assets/7ceaf345-0992-46e6-b38f-394c2065b165)|![Image](https://github.com/user-attachments/assets/f7c26c21-6894-4d9e-b570-f1d44ca7c1de)|![Image](https://github.com/user-attachments/assets/c2bebe3b-5984-41ba-94bf-9509f6a8a990)| + +
+ + +
+ +AttriCtrl: Attribute Intensity Control for Image Generation Models + +> Numerical attributes can also precisely control image generation models. + +- Paper: [AttriCtrl: Fine-Grained Control of Aesthetic Attribute Intensity in Diffusion Models](https://arxiv.org/abs/2508.02151) +- Sample Code: [/examples/flux/model_inference/FLUX.1-dev-AttriCtrl.py](/examples/flux/model_inference/FLUX.1-dev-AttriCtrl.py) +- Model: [ModelScope](https://www.modelscope.cn/models/DiffSynth-Studio/AttriCtrl-FLUX.1-Dev) + +|brightness scale = 0.1|brightness scale = 0.3|brightness scale = 0.5|brightness scale = 0.7|brightness scale = 0.9| +|-|-|-|-|-| +|![Image](https://github.com/user-attachments/assets/e74b32a5-5b2e-4c87-9df8-487c0f8366b7)|![Image](https://github.com/user-attachments/assets/bfe8bec2-9e55-493d-9a26-7e9cce28e03d)|![Image](https://github.com/user-attachments/assets/b099dfe3-ff1f-4b96-894c-d48bbe92db7a)|![Image](https://github.com/user-attachments/assets/0a6b2982-deab-4b0d-91ad-888782de01c9)|![Image](https://github.com/user-attachments/assets/fcecb755-7d03-4020-b83a-13ad2b38705c)| + +
+ + +
+ +AutoLoRA: Automated LoRA Retrieval and Fusion + +> LoRA is a product that unifies needs and solutions — how can we make better use of these LoRAs? + +- Paper: [AutoLoRA: Automatic LoRA Retrieval and Fine-Grained Gated Fusion for Text-to-Image Generation](https://arxiv.org/abs/2508.02107) +- Sample Code: [/examples/flux/model_inference/FLUX.1-dev-LoRA-Fusion.py](/examples/flux/model_inference/FLUX.1-dev-LoRA-Fusion.py) +- Model: [ModelScope](https://www.modelscope.cn/models/DiffSynth-Studio/LoRAFusion-preview-FLUX.1-dev) + +||[LoRA 1](https://modelscope.cn/models/cancel13/cxsk)|[LoRA 2](https://modelscope.cn/models/wy413928499/xuancai2)|[LoRA 3](https://modelscope.cn/models/DiffSynth-Studio/ArtAug-lora-FLUX.1dev-v1)|[LoRA 4](https://modelscope.cn/models/hongyanbujian/JPL)| +|-|-|-|-|-| +|[LoRA 1](https://modelscope.cn/models/cancel13/cxsk) |![Image](https://github.com/user-attachments/assets/01c54d5a-4f00-4c2e-982a-4ec0a4c6a6e3)|![Image](https://github.com/user-attachments/assets/e6621457-b9f1-437c-bcc8-3e12e41646de)|![Image](https://github.com/user-attachments/assets/4b7f721f-a2e5-416c-af2c-b53ef236c321)|![Image](https://github.com/user-attachments/assets/802d554e-0402-482c-9f28-87605f8fe318)| +|[LoRA 2](https://modelscope.cn/models/wy413928499/xuancai2) |![Image](https://github.com/user-attachments/assets/e6621457-b9f1-437c-bcc8-3e12e41646de)|![Image](https://github.com/user-attachments/assets/43720a9f-aa27-4918-947d-545389375d46)|![Image](https://github.com/user-attachments/assets/418c725b-6d35-41f4-b18f-c7e3867cc142)|![Image](https://github.com/user-attachments/assets/8c8f22fa-9643-4019-b6d7-396d8b7fed9a)| +|[LoRA 3](https://modelscope.cn/models/DiffSynth-Studio/ArtAug-lora-FLUX.1dev-v1) |![Image](https://github.com/user-attachments/assets/4b7f721f-a2e5-416c-af2c-b53ef236c321)|![Image](https://github.com/user-attachments/assets/418c725b-6d35-41f4-b18f-c7e3867cc142)|![Image](https://github.com/user-attachments/assets/041a3f9a-c7b4-4311-8582-cb71a7226d80)|![Image](https://github.com/user-attachments/assets/b54ebaa4-31a7-4536-a2c1-496adba0c013)| +|[LoRA 4](https://modelscope.cn/models/hongyanbujian/JPL) |![Image](https://github.com/user-attachments/assets/802d554e-0402-482c-9f28-87605f8fe318)|![Image](https://github.com/user-attachments/assets/8c8f22fa-9643-4019-b6d7-396d8b7fed9a)|![Image](https://github.com/user-attachments/assets/b54ebaa4-31a7-4536-a2c1-496adba0c013)|![Image](https://github.com/user-attachments/assets/a640fd54-3192-49a0-9281-b43d9ba64f09)| + +
+ + +
+ +Nexus-Gen: Unified Architecture for Image Understanding, Generation, and Editing + +> What happens when a single model combines image understanding, generation, and editing capabilities? + +- Detailed Page: https://github.com/modelscope/Nexus-Gen +- Paper: [Nexus-Gen: Unified Image Understanding, Generation, and Editing via Prefilled Autoregression in Shared Embedding Space](https://arxiv.org/pdf/2504.21356) +- Model: [ModelScope](https://www.modelscope.cn/models/DiffSynth-Studio/Nexus-GenV2), [HuggingFace](https://huggingface.co/modelscope/Nexus-GenV2) +- Dataset: [ModelScope Dataset](https://www.modelscope.cn/datasets/DiffSynth-Studio/Nexus-Gen-Training-Dataset) +- Online Experience: [ModelScope Nexus-Gen Studio](https://www.modelscope.cn/studios/DiffSynth-Studio/Nexus-Gen) + +![](https://github.com/modelscope/Nexus-Gen/raw/main/assets/illustrations/gen_edit.jpg) + +
+ + +
+ +ArtAug: Aesthetic Enhancement for Image Generation Models + +> A single LoRA that significantly enhances detail and aesthetics. + +- Detailed Page: [./examples/ArtAug/](./examples/ArtAug/) +- Paper: [ArtAug: Enhancing Text-to-Image Generation through Synthesis-Understanding Interaction](https://arxiv.org/abs/2412.12888) +- Model: [ModelScope](https://www.modelscope.cn/models/DiffSynth-Studio/ArtAug-lora-FLUX.1dev-v1), [HuggingFace](https://huggingface.co/ECNU-CILab/ArtAug-lora-FLUX.1dev-v1) +- Online Experience: [ModelScope AIGC Tab](https://www.modelscope.cn/aigc/imageGeneration?tab=advanced&versionId=7228&modelType=LoRA&sdVersion=FLUX_1&modelUrl=modelscope%3A%2F%2FDiffSynth-Studio%2FArtAug-lora-FLUX.1dev-v1%3Frevision%3Dv1.0) + +|FLUX.1-dev|FLUX.1-dev + ArtAug LoRA| +|-|-| +|![image_1_base](https://github.com/user-attachments/assets/e1d5c505-b423-45fe-be01-25c2758f5417)|![image_1_enhance](https://github.com/user-attachments/assets/335908e3-d0bd-41c2-9d99-d10528a2d719)| + +
+ + +
+ +EliGen: Precise Image Partition Control + +> How can region-based layers control the position of content in an image? + +- Paper: [EliGen: Entity-Level Controlled Image Generation with Regional Attention](https://arxiv.org/abs/2501.01097) +- Sample Code: [/examples/flux/model_inference/FLUX.1-dev-EliGen.py](/examples/flux/model_inference/FLUX.1-dev-EliGen.py) +- Model: [ModelScope](https://www.modelscope.cn/models/DiffSynth-Studio/Eligen), [HuggingFace](https://huggingface.co/modelscope/EliGen) +- Online Experience: [ModelScope EliGen Studio](https://www.modelscope.cn/studios/DiffSynth-Studio/EliGen) +- Dataset: [EliGen Train Set](https://www.modelscope.cn/datasets/DiffSynth-Studio/EliGenTrainSet) + +|Entity Control Region|Generated Image| +|-|-| +|![eligen_example_2_mask_0](https://github.com/user-attachments/assets/1c6d9445-5022-4d91-ad2e-dc05321883d1)|![eligen_example_2_0](https://github.com/user-attachments/assets/86739945-cb07-4a49-b3b3-3bb65c90d14f)| + +
+ + +
+ +ExVideo: Extended Training for Video Generation Models + +> If a video generation model can only generate 25 frames, how can we make it generate longer videos? + +- Project Page: [Project Page](https://ecnu-cilab.github.io/ExVideoProjectPage/) +- Paper: [ExVideo: Extending Video Diffusion Models via Parameter-Efficient Post-Tuning](https://arxiv.org/abs/2406.14130) +- Sample Code: Please refer to the [older version](https://github.com/modelscope/DiffSynth-Studio/tree/afd101f3452c9ecae0c87b79adfa2e22d65ffdc3/examples/ExVideo) +- Model: [ModelScope](https://modelscope.cn/models/ECNU-CILab/ExVideo-SVD-128f-v1), [HuggingFace](https://huggingface.co/ECNU-CILab/ExVideo-SVD-128f-v1) + +https://github.com/modelscope/DiffSynth-Studio/assets/35051019/d97f6aa9-8064-4b5b-9d49-ed6001bb9acc + +
+ + +
+ +Diffutoon: High-Resolution Anime-Style Video Rendering + +> I don't care what you say, I just love anime! + +- Project Page: [Project Page](https://ecnu-cilab.github.io/DiffutoonProjectPage/) +- Paper: [Diffutoon: High-Resolution Editable Toon Shading via Diffusion Models](https://arxiv.org/abs/2401.16224) +- Sample Code: Please refer to the [older version](https://github.com/modelscope/DiffSynth-Studio/tree/afd101f3452c9ecae0c87b79adfa2e22d65ffdc3/examples/Diffutoon) + +The Diffutoon examples are from the pre-2.0 codebase and are not included in the current `main` branch. Use the older source tree above with the corresponding older version of DiffSynth-Studio. + +https://github.com/Artiprocher/DiffSynth-Studio/assets/35051019/b54c05c5-d747-4709-be5e-b39af82404dd + +
+ + +
+ +DiffSynth: The Original Version of This Project + +> In the era before video generation models, how could image generation models be used to process videos? + +- Project Page: [Project Page](https://ecnu-cilab.github.io/DiffSynth.github.io/) +- Paper: [DiffSynth: Latent In-Iteration Deflickering for Realistic Video Synthesis](https://arxiv.org/abs/2308.03463) +- Sample Code: Please refer to the [older version](https://github.com/modelscope/DiffSynth-Studio/tree/afd101f3452c9ecae0c87b79adfa2e22d65ffdc3/examples/diffsynth) + +https://github.com/Artiprocher/DiffSynth-Studio/assets/35051019/59fb2f7b-8de0-4481-b79f-0c3a7361a1ea + +
+ +## Contact Us + +|Discord:https://discord.gg/Mm9suEeUDc| +|-| +|Image| + + +## All Supported Models + +| Architecture | Model ID | Inference | Low VRAM Inference | Full Training | Validation After Full Training | LoRA Training | Validation After LoRA Training | +|-|-|-|-|-|-|-|-| +| MiniMax-Music3 | [MiniMax/MiniMax-Music3](https://www.modelscope.cn/models/MiniMax/MiniMax-Music3) | [code](/examples/minimax_music3/model_inference/MiniMax-Music3.py) | [code](/examples/minimax_music3/model_inference_low_vram/MiniMax-Music3.py) | — | — | — | — | +| MiniMax-H3 | [MiniMax/MiniMax-H3: FL2VA](https://www.modelscope.cn/models/MiniMax/MiniMax-H3) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-FL2VA.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-FL2VA.py) | [code](/examples/minimax_h3/model_training/full/MiniMax-H3-FL2VA.sh) | [code](/examples/minimax_h3/model_training/validate_full/MiniMax-H3-FL2VA.py) | [code](/examples/minimax_h3/model_training/lora/MiniMax-H3-FL2VA.sh) | [code](/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-FL2VA.py) | +| MiniMax-H3 | [MiniMax/MiniMax-H3: Ref2VA](https://www.modelscope.cn/models/MiniMax/MiniMax-H3) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-Ref2VA.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-Ref2VA.py) | [code](/examples/minimax_h3/model_training/full/MiniMax-H3-Ref2VA.sh) | [code](/examples/minimax_h3/model_training/validate_full/MiniMax-H3-Ref2VA.py) | [code](/examples/minimax_h3/model_training/lora/MiniMax-H3-Ref2VA.sh) | [code](/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-Ref2VA.py) | +| MiniMax-H3 | [MiniMax/MiniMax-H3: Retake](https://www.modelscope.cn/models/MiniMax/MiniMax-H3) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-Retake.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-Retake.py) | - | - | - | - | +| MiniMax-H3 | [DiffSynth-Studio/MiniMax-H3-NF4: FL2VA](https://www.modelscope.cn/models/DiffSynth-Studio/MiniMax-H3-NF4) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-NF4-FL2VA.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-NF4-FL2VA.py) | - | - | [code](/examples/minimax_h3/model_training/lora/MiniMax-H3-NF4-FL2VA.sh) | [code](/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-NF4-FL2VA.py) | +| MiniMax-H3 | [DiffSynth-Studio/MiniMax-H3-NF4: Ref2VA](https://www.modelscope.cn/models/DiffSynth-Studio/MiniMax-H3-NF4) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-NF4-Ref2VA.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-NF4-Ref2VA.py) | - | - | [code](/examples/minimax_h3/model_training/lora/MiniMax-H3-NF4-Ref2VA.sh) | [code](/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-NF4-Ref2VA.py) | +| MiniMax-H3 | [Comfy-Org/MiniMax-H3: FL2VA pruned](https://www.modelscope.cn/models/Comfy-Org/MiniMax-H3) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-Pruned-FL2VA.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-Pruned-FL2VA.py) | [code](/examples/minimax_h3/model_training/full/MiniMax-H3-Pruned-FL2VA.sh) | [code](/examples/minimax_h3/model_training/validate_full/MiniMax-H3-Pruned-FL2VA.py) | [code](/examples/minimax_h3/model_training/lora/MiniMax-H3-Pruned-FL2VA.sh) | [code](/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-Pruned-FL2VA.py) | +| MiniMax-H3 | [Comfy-Org/MiniMax-H3: Ref2VA pruned](https://www.modelscope.cn/models/Comfy-Org/MiniMax-H3) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-Pruned-Ref2VA.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-Pruned-Ref2VA.py) | [code](/examples/minimax_h3/model_training/full/MiniMax-H3-Pruned-Ref2VA.sh) | [code](/examples/minimax_h3/model_training/validate_full/MiniMax-H3-Pruned-Ref2VA.py) | [code](/examples/minimax_h3/model_training/lora/MiniMax-H3-Pruned-Ref2VA.sh) | [code](/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-Pruned-Ref2VA.py) | +| MiniMax-H3 | [DiffSynth-Studio/MiniMax-H3-NF4: FL2VA pruned](https://www.modelscope.cn/models/DiffSynth-Studio/MiniMax-H3-NF4) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-NF4-Pruned-FL2VA.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-NF4-Pruned-FL2VA.py) | - | - | [code](/examples/minimax_h3/model_training/lora/MiniMax-H3-NF4-Pruned-FL2VA.sh) | [code](/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-NF4-Pruned-FL2VA.py) | +| MiniMax-H3 | [DiffSynth-Studio/MiniMax-H3-NF4: Ref2VA pruned](https://www.modelscope.cn/models/DiffSynth-Studio/MiniMax-H3-NF4) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-NF4-Pruned-Ref2VA.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-NF4-Pruned-Ref2VA.py) | - | - | [code](/examples/minimax_h3/model_training/lora/MiniMax-H3-NF4-Pruned-Ref2VA.sh) | [code](/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-NF4-Pruned-Ref2VA.py) | +| MiniMax-H3 | [Comfy-Org/MiniMax-H3: FL2VA int8_convrot](https://www.modelscope.cn/models/Comfy-Org/MiniMax-H3) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-Int8-ConvRot-FL2VA.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-Int8-ConvRot-FL2VA.py) | - | - | [code](/examples/minimax_h3/model_training/lora/MiniMax-H3-Int8-ConvRot-FL2VA.sh) | [code](/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-Int8-ConvRot-FL2VA.py) | +| MiniMax-H3 | [Comfy-Org/MiniMax-H3: Ref2VA int8_convrot](https://www.modelscope.cn/models/Comfy-Org/MiniMax-H3) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-Int8-ConvRot-Ref2VA.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-Int8-ConvRot-Ref2VA.py) | - | - | [code](/examples/minimax_h3/model_training/lora/MiniMax-H3-Int8-ConvRot-Ref2VA.sh) | [code](/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-Int8-ConvRot-Ref2VA.py) | +| MiniMax-H3 | [Comfy-Org/MiniMax-H3: FL2VA pruned int8_convrot](https://www.modelscope.cn/models/Comfy-Org/MiniMax-H3) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-Int8-ConvRot-Pruned-FL2VA.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-Int8-ConvRot-Pruned-FL2VA.py) | - | - | [code](/examples/minimax_h3/model_training/lora/MiniMax-H3-Int8-ConvRot-Pruned-FL2VA.sh) | [code](/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-Int8-ConvRot-Pruned-FL2VA.py) | +| MiniMax-H3 | [Comfy-Org/MiniMax-H3: Ref2VA pruned int8_convrot](https://www.modelscope.cn/models/Comfy-Org/MiniMax-H3) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-Int8-ConvRot-Pruned-Ref2VA.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-Int8-ConvRot-Pruned-Ref2VA.py) | - | - | [code](/examples/minimax_h3/model_training/lora/MiniMax-H3-Int8-ConvRot-Pruned-Ref2VA.sh) | [code](/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-Int8-ConvRot-Pruned-Ref2VA.py) | +| MiniMax-H3 | [Comfy-Org/MiniMax-H3: FL2VA pruned fp8](https://www.modelscope.cn/models/Comfy-Org/MiniMax-H3) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-FP8-Pruned-FL2VA.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-FP8-Pruned-FL2VA.py) | - | - | [code](/examples/minimax_h3/model_training/lora/MiniMax-H3-FP8-Pruned-FL2VA.sh) | [code](/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-FP8-Pruned-FL2VA.py) | +| MiniMax-H3 | [Comfy-Org/MiniMax-H3: Ref2VA pruned fp8](https://www.modelscope.cn/models/Comfy-Org/MiniMax-H3) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-FP8-Pruned-Ref2VA.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-FP8-Pruned-Ref2VA.py) | - | - | [code](/examples/minimax_h3/model_training/lora/MiniMax-H3-FP8-Pruned-Ref2VA.sh) | [code](/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-FP8-Pruned-Ref2VA.py) | +| MiniMax-H3 | [lightx2v/Minimax-h3-Turbo: FL2VA 4steps](https://www.modelscope.cn/models/lightx2v/Minimax-h3-Turbo) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference/MiniMax-H3-FL2VA-Turbo.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-FL2VA-Turbo.py) | - | - | - | - | +| MiniMax-H3 | [DiffSynth-Studio/MiniMax-H3-Text-Embeddings](https://www.modelscope.cn/models/DiffSynth-Studio/MiniMax-H3-Text-Embeddings) | [code](/examples/minimax_h3/model_inference/MiniMax-H3-Text-Embeddings.py) | [code](/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-Text-Embeddings.py) | [code](/examples/minimax_h3/model_training/full/MiniMax-H3-Text-Embeddings.sh) | [code](/examples/minimax_h3/model_training/validate_full/MiniMax-H3-Text-Embeddings.py) | - | - | +| LingBot-Video | [Robbyant/lingbot-video-dense-1.3b: T2V](https://modelscope.cn/models/Robbyant/lingbot-video-dense-1.3b) | [code](/examples/lingbot_video/model_inference/lingbot-video-dense-1.3b_t2v.py) | [code](/examples/lingbot_video/model_inference_low_vram/lingbot-video-dense-1.3b_t2v.py) | [code](/examples/lingbot_video/model_training/full/lingbot-video-dense-1.3b_t2v.sh) | [code](/examples/lingbot_video/model_training/validate_full/lingbot-video-dense-1.3b_t2v.py) | [code](/examples/lingbot_video/model_training/lora/lingbot-video-dense-1.3b_t2v.sh) | [code](/examples/lingbot_video/model_training/validate_lora/lingbot-video-dense-1.3b_t2v.py) | +| LingBot-Video | [Robbyant/lingbot-video-dense-1.3b: TI2V](https://modelscope.cn/models/Robbyant/lingbot-video-dense-1.3b) | [code](/examples/lingbot_video/model_inference/lingbot-video-dense-1.3b_ti2v.py) | [code](/examples/lingbot_video/model_inference_low_vram/lingbot-video-dense-1.3b_ti2v.py) | [code](/examples/lingbot_video/model_training/full/lingbot-video-dense-1.3b_ti2v.sh) | [code](/examples/lingbot_video/model_training/validate_full/lingbot-video-dense-1.3b_ti2v.py) | [code](/examples/lingbot_video/model_training/lora/lingbot-video-dense-1.3b_ti2v.sh) | [code](/examples/lingbot_video/model_training/validate_lora/lingbot-video-dense-1.3b_ti2v.py) | +| LingBot-Video | [Robbyant/lingbot-video-dense-1.3b: T2I](https://modelscope.cn/models/Robbyant/lingbot-video-dense-1.3b) | [code](/examples/lingbot_video/model_inference/lingbot-video-dense-1.3b_t2i.py) | [code](/examples/lingbot_video/model_inference_low_vram/lingbot-video-dense-1.3b_t2i.py) | - | - | - | - | +| LingBot-Video | [Robbyant/lingbot-video-moe-30b-a3b: T2V](https://modelscope.cn/models/Robbyant/lingbot-video-moe-30b-a3b) | [code](/examples/lingbot_video/model_inference/lingbot-video-moe-30b-a3b_t2v.py) | [code](/examples/lingbot_video/model_inference_low_vram/lingbot-video-moe-30b-a3b_t2v.py) | [code](/examples/lingbot_video/model_training/full/lingbot-video-moe-30b-a3b_t2v.sh) | [code](/examples/lingbot_video/model_training/validate_full/lingbot-video-moe-30b-a3b_t2v.py) | [code](/examples/lingbot_video/model_training/lora/lingbot-video-moe-30b-a3b_t2v.sh) | [code](/examples/lingbot_video/model_training/validate_lora/lingbot-video-moe-30b-a3b_t2v.py) | +| LingBot-Video | [Robbyant/lingbot-video-moe-30b-a3b: TI2V](https://modelscope.cn/models/Robbyant/lingbot-video-moe-30b-a3b) | [code](/examples/lingbot_video/model_inference/lingbot-video-moe-30b-a3b_ti2v.py) | [code](/examples/lingbot_video/model_inference_low_vram/lingbot-video-moe-30b-a3b_ti2v.py) | [code](/examples/lingbot_video/model_training/full/lingbot-video-moe-30b-a3b_ti2v.sh) | [code](/examples/lingbot_video/model_training/validate_full/lingbot-video-moe-30b-a3b_ti2v.py) | [code](/examples/lingbot_video/model_training/lora/lingbot-video-moe-30b-a3b_ti2v.sh) | [code](/examples/lingbot_video/model_training/validate_lora/lingbot-video-moe-30b-a3b_ti2v.py) | +| LingBot-Video | [Robbyant/lingbot-video-moe-30b-a3b: T2I](https://modelscope.cn/models/Robbyant/lingbot-video-moe-30b-a3b) | [code](/examples/lingbot_video/model_inference/lingbot-video-moe-30b-a3b_t2i.py) | [code](/examples/lingbot_video/model_inference_low_vram/lingbot-video-moe-30b-a3b_t2i.py) | - | - | - | - | +| LingBot-Video | [Robbyant/lingbot-video-moe-30b-a3b: T2V + Refinement](https://modelscope.cn/models/Robbyant/lingbot-video-moe-30b-a3b) | [code](/examples/lingbot_video/model_inference/lingbot-video-moe-30b-a3b_t2v_refiner.py) | [code](/examples/lingbot_video/model_inference_low_vram/lingbot-video-moe-30b-a3b_t2v_refiner.py) | - | - | - | - | +| LingBot-Video | [Robbyant/lingbot-video-moe-30b-a3b: TI2V + Refinement](https://modelscope.cn/models/Robbyant/lingbot-video-moe-30b-a3b) | [code](/examples/lingbot_video/model_inference/lingbot-video-moe-30b-a3b_ti2v_refiner.py) | [code](/examples/lingbot_video/model_inference_low_vram/lingbot-video-moe-30b-a3b_ti2v_refiner.py) | - | - | - | - | +| ACE-Step | [ACE-Step/Ace-Step1.5](https://www.modelscope.cn/models/ACE-Step/Ace-Step1.5) | [code](/examples/ace_step/model_inference/Ace-Step1.5.py) | [code](/examples/ace_step/model_inference_low_vram/Ace-Step1.5.py) | [code](/examples/ace_step/model_training/full/Ace-Step1.5.sh) | [code](/examples/ace_step/model_training/validate_full/Ace-Step1.5.py) | [code](/examples/ace_step/model_training/lora/Ace-Step1.5.sh) | [code](/examples/ace_step/model_training/validate_lora/Ace-Step1.5.py) | +| ACE-Step | [ACE-Step/acestep-v15-turbo-shift1](https://www.modelscope.cn/models/ACE-Step/acestep-v15-turbo-shift1) | [code](/examples/ace_step/model_inference/acestep-v15-turbo-shift1.py) | [code](/examples/ace_step/model_inference_low_vram/acestep-v15-turbo-shift1.py) | [code](/examples/ace_step/model_training/full/acestep-v15-turbo-shift1.sh) | [code](/examples/ace_step/model_training/validate_full/acestep-v15-turbo-shift1.py) | [code](/examples/ace_step/model_training/lora/acestep-v15-turbo-shift1.sh) | [code](/examples/ace_step/model_training/validate_lora/acestep-v15-turbo-shift1.py) | +| ACE-Step | [ACE-Step/acestep-v15-turbo-shift3](https://www.modelscope.cn/models/ACE-Step/acestep-v15-turbo-shift3) | [code](/examples/ace_step/model_inference/acestep-v15-turbo-shift3.py) | [code](/examples/ace_step/model_inference_low_vram/acestep-v15-turbo-shift3.py) | [code](/examples/ace_step/model_training/full/acestep-v15-turbo-shift3.sh) | [code](/examples/ace_step/model_training/validate_full/acestep-v15-turbo-shift3.py) | [code](/examples/ace_step/model_training/lora/acestep-v15-turbo-shift3.sh) | [code](/examples/ace_step/model_training/validate_lora/acestep-v15-turbo-shift3.py) | +| ACE-Step | [ACE-Step/acestep-v15-turbo-continuous](https://www.modelscope.cn/models/ACE-Step/acestep-v15-turbo-continuous) | [code](/examples/ace_step/model_inference/acestep-v15-turbo-continuous.py) | [code](/examples/ace_step/model_inference_low_vram/acestep-v15-turbo-continuous.py) | [code](/examples/ace_step/model_training/full/acestep-v15-turbo-continuous.sh) | [code](/examples/ace_step/model_training/validate_full/acestep-v15-turbo-continuous.py) | [code](/examples/ace_step/model_training/lora/acestep-v15-turbo-continuous.sh) | [code](/examples/ace_step/model_training/validate_lora/acestep-v15-turbo-continuous.py) | +| ACE-Step | [ACE-Step/acestep-v15-base](https://www.modelscope.cn/models/ACE-Step/acestep-v15-base) | [code](/examples/ace_step/model_inference/acestep-v15-base.py) | [code](/examples/ace_step/model_inference_low_vram/acestep-v15-base.py) | [code](/examples/ace_step/model_training/full/acestep-v15-base.sh) | [code](/examples/ace_step/model_training/validate_full/acestep-v15-base.py) | [code](/examples/ace_step/model_training/lora/acestep-v15-base.sh) | [code](/examples/ace_step/model_training/validate_lora/acestep-v15-base.py) | +| ACE-Step | [ACE-Step/acestep-v15-base: CoverTask](https://www.modelscope.cn/models/ACE-Step/acestep-v15-base) | [code](/examples/ace_step/model_inference/acestep-v15-base-CoverTask.py) | [code](/examples/ace_step/model_inference_low_vram/acestep-v15-base-CoverTask.py) | — | — | — | — | +| ACE-Step | [ACE-Step/acestep-v15-base: RepaintTask](https://www.modelscope.cn/models/ACE-Step/acestep-v15-base) | [code](/examples/ace_step/model_inference/acestep-v15-base-RepaintTask.py) | [code](/examples/ace_step/model_inference_low_vram/acestep-v15-base-RepaintTask.py) | — | — | — | — | +| ACE-Step | [ACE-Step/acestep-v15-sft](https://www.modelscope.cn/models/ACE-Step/acestep-v15-sft) | [code](/examples/ace_step/model_inference/acestep-v15-sft.py) | [code](/examples/ace_step/model_inference_low_vram/acestep-v15-sft.py) | [code](/examples/ace_step/model_training/full/acestep-v15-sft.sh) | [code](/examples/ace_step/model_training/validate_full/acestep-v15-sft.py) | [code](/examples/ace_step/model_training/lora/acestep-v15-sft.sh) | [code](/examples/ace_step/model_training/validate_lora/acestep-v15-sft.py) | +| ACE-Step | [ACE-Step/acestep-v15-xl-base](https://www.modelscope.cn/models/ACE-Step/acestep-v15-xl-base) | [code](/examples/ace_step/model_inference/acestep-v15-xl-base.py) | [code](/examples/ace_step/model_inference_low_vram/acestep-v15-xl-base.py) | [code](/examples/ace_step/model_training/full/acestep-v15-xl-base.sh) | [code](/examples/ace_step/model_training/validate_full/acestep-v15-xl-base.py) | [code](/examples/ace_step/model_training/lora/acestep-v15-xl-base.sh) | [code](/examples/ace_step/model_training/validate_lora/acestep-v15-xl-base.py) | +| ACE-Step | [ACE-Step/acestep-v15-xl-sft](https://www.modelscope.cn/models/ACE-Step/acestep-v15-xl-sft) | [code](/examples/ace_step/model_inference/acestep-v15-xl-sft.py) | [code](/examples/ace_step/model_inference_low_vram/acestep-v15-xl-sft.py) | [code](/examples/ace_step/model_training/full/acestep-v15-xl-sft.sh) | [code](/examples/ace_step/model_training/validate_full/acestep-v15-xl-sft.py) | [code](/examples/ace_step/model_training/lora/acestep-v15-xl-sft.sh) | [code](/examples/ace_step/model_training/validate_lora/acestep-v15-xl-sft.py) | +| ACE-Step | [ACE-Step/acestep-v15-xl-turbo](https://www.modelscope.cn/models/ACE-Step/acestep-v15-xl-turbo) | [code](/examples/ace_step/model_inference/acestep-v15-xl-turbo.py) | [code](/examples/ace_step/model_inference_low_vram/acestep-v15-xl-turbo.py) | [code](/examples/ace_step/model_training/full/acestep-v15-xl-turbo.sh) | [code](/examples/ace_step/model_training/validate_full/acestep-v15-xl-turbo.py) | [code](/examples/ace_step/model_training/lora/acestep-v15-xl-turbo.sh) | [code](/examples/ace_step/model_training/validate_lora/acestep-v15-xl-turbo.py) | +| ACE-Step | [DiffSynth-Studio/acestep15xlsft-lora-music](https://www.modelscope.cn/models/DiffSynth-Studio/acestep15xlsft-lora-music) | [code](/examples/ace_step/model_inference/acestep15xlsft-vocals2music.py) | [code](/examples/ace_step/model_inference_low_vram/acestep15xlsft-vocals2music.py) | [code](/examples/ace_step/model_training/full/acestep15xlsft-vocals2music.sh) | [code](/examples/ace_step/model_training/validate_full/acestep15xlsft-vocals2music.py) | - | - | +| Boogu-Image | [Boogu/Boogu-Image-0.1-Base](https://modelscope.cn/models/Boogu/Boogu-Image-0.1-Base) | [code](/examples/boogu_image/model_inference/Boogu-Image-0.1-Base.py) | [code](/examples/boogu_image/model_inference_low_vram/Boogu-Image-0.1-Base.py) | [code](/examples/boogu_image/model_training/full/Boogu-Image-0.1-Base.sh) | [code](/examples/boogu_image/model_training/validate_full/Boogu-Image-0.1-Base.py) | [code](/examples/boogu_image/model_training/lora/Boogu-Image-0.1-Base.sh) | [code](/examples/boogu_image/model_training/validate_lora/Boogu-Image-0.1-Base.py) | +| Boogu-Image | [Boogu/Boogu-Image-0.1-Turbo](https://modelscope.cn/models/Boogu/Boogu-Image-0.1-Turbo) | [code](/examples/boogu_image/model_inference/Boogu-Image-0.1-Turbo.py) | [code](/examples/boogu_image/model_inference_low_vram/Boogu-Image-0.1-Turbo.py) | [code](/examples/boogu_image/model_training/full/Boogu-Image-0.1-Turbo.sh) | [code](/examples/boogu_image/model_training/validate_full/Boogu-Image-0.1-Turbo.py) | [code](/examples/boogu_image/model_training/lora/Boogu-Image-0.1-Turbo.sh) | [code](/examples/boogu_image/model_training/validate_lora/Boogu-Image-0.1-Turbo.py) | +| Boogu-Image | [Boogu/Boogu-Image-0.1-Edit](https://modelscope.cn/models/Boogu/Boogu-Image-0.1-Edit) | [code](/examples/boogu_image/model_inference/Boogu-Image-0.1-Edit.py) | [code](/examples/boogu_image/model_inference_low_vram/Boogu-Image-0.1-Edit.py) | [code](/examples/boogu_image/model_training/full/Boogu-Image-0.1-Edit.sh) | [code](/examples/boogu_image/model_training/validate_full/Boogu-Image-0.1-Edit.py) | [code](/examples/boogu_image/model_training/lora/Boogu-Image-0.1-Edit.sh) | [code](/examples/boogu_image/model_training/validate_lora/Boogu-Image-0.1-Edit.py) | +| Krea-2 | [krea/Krea-2-Raw](https://www.modelscope.cn/models/krea/Krea-2-Raw) | [code](/examples/krea2/model_inference/Krea-2-Raw.py) | [code](/examples/krea2/model_inference_low_vram/Krea-2-Raw.py) | [code](/examples/krea2/model_training/full/Krea-2-Raw.sh) | [code](/examples/krea2/model_training/validate_full/Krea-2-Raw.py) | [code](/examples/krea2/model_training/lora/Krea-2-Raw.sh) | [code](/examples/krea2/model_training/validate_lora/Krea-2-Raw.py) | +| Krea-2 | [krea/Krea-2-Turbo](https://www.modelscope.cn/models/krea/Krea-2-Turbo) | [code](/examples/krea2/model_inference/Krea-2-Turbo.py) | [code](/examples/krea2/model_inference_low_vram/Krea-2-Turbo.py) | [code](/examples/krea2/model_training/full/Krea-2-Turbo.sh) | [code](/examples/krea2/model_training/validate_full/Krea-2-Turbo.py) | [code](/examples/krea2/model_training/lora/Krea-2-Turbo.sh) | [code](/examples/krea2/model_training/validate_lora/Krea-2-Turbo.py) | +| Ideogram 4 | [ideogram-ai/ideogram-4-fp8](https://www.modelscope.cn/models/ideogram-ai/ideogram-4-fp8) | [code](/examples/ideogram4/model_inference/ideogram-4-fp8.py) | - | - | - | - | - | +| Ideogram 4 | [DiffSynth-Studio/ideogram-4-bf16-repackage](https://www.modelscope.cn/models/DiffSynth-Studio/ideogram-4-bf16-repackage) | [code](/examples/ideogram4/model_inference/ideogram-4-bf16-repackage.py) | [code](/examples/ideogram4/model_inference_low_vram/ideogram-4-bf16-repackage.py) | [code](/examples/ideogram4/model_training/full/Ideogram-4-bf16-repackage.sh) | - | [code](/examples/ideogram4/model_training/lora/Ideogram-4-bf16-repackage.sh) | [code](/examples/ideogram4/model_training/validate_lora/Ideogram-4-bf16-repackage.py) | +| HiDream-O1-Image | [HiDream-ai/HiDream-O1-Image](https://modelscope.cn/models/HiDream-ai/HiDream-O1-Image) | [code](/examples/hidream_o1_image/model_inference/HiDream-O1-Image.py) | [code](/examples/hidream_o1_image/model_inference_low_vram/HiDream-O1-Image.py) | [code](/examples/hidream_o1_image/model_training/full/HiDream-O1-Image.sh) | [code](/examples/hidream_o1_image/model_training/validate_full/HiDream-O1-Image.py) | [code](/examples/hidream_o1_image/model_training/lora/HiDream-O1-Image.sh) | [code](/examples/hidream_o1_image/model_training/validate_lora/HiDream-O1-Image.py) | +| HiDream-O1-Image | [HiDream-ai/HiDream-O1-Image-Dev](https://modelscope.cn/models/HiDream-ai/HiDream-O1-Image-Dev) | [code](/examples/hidream_o1_image/model_inference/HiDream-O1-Image-Dev.py) | [code](/examples/hidream_o1_image/model_inference_low_vram/HiDream-O1-Image-Dev.py) | [code](/examples/hidream_o1_image/model_training/full/HiDream-O1-Image-Dev.sh) | [code](/examples/hidream_o1_image/model_training/validate_full/HiDream-O1-Image-Dev.py) | [code](/examples/hidream_o1_image/model_training/lora/HiDream-O1-Image-Dev.sh) | [code](/examples/hidream_o1_image/model_training/validate_lora/HiDream-O1-Image-Dev.py) | +| HiDream-O1-Image | [DiffSynth-Studio/HidreamO1-i2L-v2](https://www.modelscope.cn/models/DiffSynth-Studio/HidreamO1-i2L-v2) | [code](/examples/hidream_o1_image/model_inference/HidreamO1-i2L-v2.py) | [code](/examples/hidream_o1_image/model_inference_low_vram/HidreamO1-i2L-v2.py) | [code](/examples/hidream_o1_image/model_training/full/HidreamO1-i2L-v2.sh) | [code](/examples/hidream_o1_image/model_training/validate_full/HidreamO1-i2L-v2.py) | - | - | +| JoyAI-Image | [jd-opensource/JoyAI-Image-Edit](https://modelscope.cn/models/jd-opensource/JoyAI-Image-Edit) | [code](/examples/joyai_image/model_inference/JoyAI-Image-Edit.py) | [code](/examples/joyai_image/model_inference_low_vram/JoyAI-Image-Edit.py) | [code](/examples/joyai_image/model_training/full/JoyAI-Image-Edit.sh) | [code](/examples/joyai_image/model_training/validate_full/JoyAI-Image-Edit.py) | [code](/examples/joyai_image/model_training/lora/JoyAI-Image-Edit.sh) | [code](/examples/joyai_image/model_training/validate_lora/JoyAI-Image-Edit.py) | +| ERNIE-Image | [PaddlePaddle/ERNIE-Image](https://www.modelscope.cn/models/PaddlePaddle/ERNIE-Image) | [code](/examples/ernie_image/model_inference/ERNIE-Image.py) | [code](/examples/ernie_image/model_inference_low_vram/ERNIE-Image.py) | [code](/examples/ernie_image/model_training/full/ERNIE-Image.sh) | [code](/examples/ernie_image/model_training/validate_full/ERNIE-Image.py) | [code](/examples/ernie_image/model_training/lora/ERNIE-Image.sh) | [code](/examples/ernie_image/model_training/validate_lora/ERNIE-Image.py) | +| ERNIE-Image | [PaddlePaddle/ERNIE-Image-Turbo](https://www.modelscope.cn/models/PaddlePaddle/ERNIE-Image-Turbo) | [code](/examples/ernie_image/model_inference/ERNIE-Image-Turbo.py) | [code](/examples/ernie_image/model_inference_low_vram/ERNIE-Image-Turbo.py) | — | — | — | — | +| LTX-2 | [jd-opensource/JoyAI-Echo](https://modelscope.cn/models/jd-opensource/JoyAI-Echo) | [code](/examples/ltx2/model_inference/JoyAI-Echo-T2AV.py) | [code](/examples/ltx2/model_inference_low_vram/JoyAI-Echo-T2AV.py) | [code](/examples/ltx2/model_training/full/JoyAI-Echo-T2AV-splited.sh) | [code](/examples/ltx2/model_training/validate_full/JoyAI-Echo-T2AV.py) | [code](/examples/ltx2/model_training/lora/JoyAI-Echo-T2AV-splited.sh) | [code](/examples/ltx2/model_training/validate_lora/JoyAI-Echo-T2AV.py) | +| LTX-2 | [Lightricks/LTX-2.3: OneStagePipeline-I2AV](https://www.modelscope.cn/models/Lightricks/LTX-2.3) | [code](/examples/ltx2/model_inference/LTX-2.3-I2AV-OneStage.py) | [code](/examples/ltx2/model_inference_low_vram/LTX-2.3-I2AV-OneStage.py) | [code](/examples/ltx2/model_training/full/LTX-2.3-I2AV-splited.sh) | [code](/examples/ltx2/model_training/validate_full/LTX-2.3-I2AV.py) | [code](/examples/ltx2/model_training/lora/LTX-2.3-I2AV-splited.sh) | [code](/examples/ltx2/model_training/validate_lora/LTX-2.3-I2AV.py) | +| LTX-2 | [Lightricks/LTX-2.3: TwoStagePipeline-I2AV](https://www.modelscope.cn/models/Lightricks/LTX-2.3) | [code](/examples/ltx2/model_inference/LTX-2.3-I2AV-TwoStage.py) | [code](/examples/ltx2/model_inference_low_vram/LTX-2.3-I2AV-TwoStage.py) | - | - | - | - | +| LTX-2 | [Lightricks/LTX-2.3: DistilledPipeline-I2AV](https://www.modelscope.cn/models/Lightricks/LTX-2.3) | [code](/examples/ltx2/model_inference/LTX-2.3-I2AV-DistilledPipeline.py) | [code](/examples/ltx2/model_inference_low_vram/LTX-2.3-I2AV-DistilledPipeline.py) | - | - | - | - | +| LTX-2 | [Lightricks/LTX-2.3: OneStagePipeline-T2AV](https://www.modelscope.cn/models/Lightricks/LTX-2.3) | [code](/examples/ltx2/model_inference/LTX-2.3-T2AV-OneStage.py) | [code](/examples/ltx2/model_inference_low_vram/LTX-2.3-T2AV-OneStage.py) | [code](/examples/ltx2/model_training/full/LTX-2.3-T2AV-splited.sh) | [code](/examples/ltx2/model_training/validate_full/LTX-2.3-T2AV.py) | [code](/examples/ltx2/model_training/lora/LTX-2.3-T2AV-splited.sh) | [code](/examples/ltx2/model_training/validate_lora/LTX-2.3-T2AV.py) | +| LTX-2 | [Lightricks/LTX-2.3: TwoStagePipeline-T2AV](https://www.modelscope.cn/models/Lightricks/LTX-2.3) | [code](/examples/ltx2/model_inference/LTX-2.3-T2AV-TwoStage.py) | [code](/examples/ltx2/model_inference_low_vram/LTX-2.3-T2AV-TwoStage.py) | - | - | - | - | +| LTX-2 | [Lightricks/LTX-2.3: DistilledPipeline-T2AV](https://www.modelscope.cn/models/Lightricks/LTX-2.3) | [code](/examples/ltx2/model_inference/LTX-2.3-T2AV-DistilledPipeline.py) | [code](/examples/ltx2/model_inference_low_vram/LTX-2.3-T2AV-DistilledPipeline.py) | - | - | - | - | +| LTX-2 | [Lightricks/LTX-2.3: A2V](https://www.modelscope.cn/models/Lightricks/LTX-2.3) | [code](/examples/ltx2/model_inference/LTX-2.3-A2V-TwoStage.py) | [code](/examples/ltx2/model_inference_low_vram/LTX-2.3-A2V-TwoStage.py) | - | - | - | - | +| LTX-2 | [Lightricks/LTX-2.3: Retake](https://www.modelscope.cn/models/Lightricks/LTX-2.3) | [code](/examples/ltx2/model_inference/LTX-2.3-T2AV-TwoStage-Retake.py) | [code](/examples/ltx2/model_inference_low_vram/LTX-2.3-T2AV-TwoStage-Retake.py) | - | - | - | - | +| LTX-2 | [Lightricks/LTX-2.3-22b-IC-LoRA-Union-Control](https://www.modelscope.cn/models/Lightricks/LTX-2.3-22b-IC-LoRA-Union-Control) | [code](/examples/ltx2/model_inference/LTX-2.3-T2AV-IC-LoRA-Union-Control.py) | [code](/examples/ltx2/model_inference_low_vram/LTX-2.3-T2AV-IC-LoRA-Union-Control.py) | - | - | [code](/examples/ltx2/model_training/lora/LTX-2.3-T2AV-IC-LoRA-splited.sh) | [code](/examples/ltx2/model_training/validate_lora/LTX-2.3-T2AV-IC-LoRA.py) | +| LTX-2 | [Lightricks/LTX-2.3-22b-IC-LoRA-Motion-Track-Control](https://www.modelscope.cn/models/Lightricks/LTX-2.3-22b-IC-LoRA-Motion-Track-Control) | [code](/examples/ltx2/model_inference/LTX-2.3-T2AV-IC-LoRA-Motion-Track-Control.py) | [code](/examples/ltx2/model_inference_low_vram/LTX-2.3-T2AV-IC-LoRA-Motion-Track-Control.py) | - | - | [code](/examples/ltx2/model_training/lora/LTX-2.3-T2AV-IC-LoRA-splited.sh) | [code](/examples/ltx2/model_training/validate_lora/LTX-2.3-T2AV-IC-LoRA.py) | +| LTX-2 | [Lightricks/LTX-2: OneStagePipeline-T2AV](https://www.modelscope.cn/models/Lightricks/LTX-2) | [code](/examples/ltx2/model_inference/LTX-2-T2AV-OneStage.py) | [code](/examples/ltx2/model_inference_low_vram/LTX-2-T2AV-OneStage.py) | [code](/examples/ltx2/model_training/full/LTX-2-T2AV-splited.sh) | [code](/examples/ltx2/model_training/validate_full/LTX-2-T2AV.py) | [code](/examples/ltx2/model_training/lora/LTX-2-T2AV-splited.sh) | [code](/examples/ltx2/model_training/validate_lora/LTX-2-T2AV.py) | +| LTX-2 | [Lightricks/LTX-2-19b-IC-LoRA-Union-Control](https://www.modelscope.cn/models/Lightricks/LTX-2-19b-IC-LoRA-Union-Control) | [code](/examples/ltx2/model_inference/LTX-2-T2AV-IC-LoRA-Union-Control.py) | [code](/examples/ltx2/model_inference_low_vram/LTX-2-T2AV-IC-LoRA-Union-Control.py) | - | - | [code](/examples/ltx2/model_training/lora/LTX-2-T2AV-IC-LoRA-splited.sh) | [code](/examples/ltx2/model_training/validate_lora/LTX-2-T2AV-IC-LoRA.py) | +| LTX-2 | [Lightricks/LTX-2-19b-IC-LoRA-Detailer](https://www.modelscope.cn/models/Lightricks/LTX-2-19b-IC-LoRA-Detailer) | [code](/examples/ltx2/model_inference/LTX-2-T2AV-IC-LoRA-Detailer.py) | [code](/examples/ltx2/model_inference_low_vram/LTX-2-T2AV-IC-LoRA-Detailer.py) | - | - | [code](/examples/ltx2/model_training/lora/LTX-2-T2AV-IC-LoRA-splited.sh) | [code](/examples/ltx2/model_training/validate_lora/LTX-2-T2AV-IC-LoRA.py) | +| LTX-2 | [Lightricks/LTX-2: TwoStagePipeline-T2AV](https://www.modelscope.cn/models/Lightricks/LTX-2) | [code](/examples/ltx2/model_inference/LTX-2-T2AV-TwoStage.py) | [code](/examples/ltx2/model_inference_low_vram/LTX-2-T2AV-TwoStage.py) | - | - | - | - | +| LTX-2 | [Lightricks/LTX-2: DistilledPipeline-T2AV](https://www.modelscope.cn/models/Lightricks/LTX-2) | [code](/examples/ltx2/model_inference/LTX-2-T2AV-DistilledPipeline.py) | [code](/examples/ltx2/model_inference_low_vram/LTX-2-T2AV-DistilledPipeline.py) | - | - | - | - | +| LTX-2 | [Lightricks/LTX-2: OneStagePipeline-I2AV](https://www.modelscope.cn/models/Lightricks/LTX-2) | [code](/examples/ltx2/model_inference/LTX-2-I2AV-OneStage.py) | [code](/examples/ltx2/model_inference_low_vram/LTX-2-I2AV-OneStage.py) | - | - | - | - | +| LTX-2 | [Lightricks/LTX-2: TwoStagePipeline-I2AV](https://www.modelscope.cn/models/Lightricks/LTX-2) | [code](/examples/ltx2/model_inference/LTX-2-I2AV-TwoStage.py) | [code](/examples/ltx2/model_inference_low_vram/LTX-2-I2AV-TwoStage.py) | - | - | - | - | +| LTX-2 | [Lightricks/LTX-2: DistilledPipeline-I2AV](https://www.modelscope.cn/models/Lightricks/LTX-2) | [code](/examples/ltx2/model_inference/LTX-2-I2AV-DistilledPipeline.py) | [code](/examples/ltx2/model_inference_low_vram/LTX-2-I2AV-DistilledPipeline.py) | - | - | - | - | +| LTX-2 | [Lightricks/LTX-2-19b-LoRA-Camera-Control-Dolly-In](https://www.modelscope.cn/models/Lightricks/LTX-2-19b-LoRA-Camera-Control-Dolly-In) | [code](/examples/ltx2/model_inference/LTX-2-T2AV-Camera-Control-Dolly-In.py) | [code](/examples/ltx2/model_inference_low_vram/LTX-2-T2AV-Camera-Control-Dolly-In.py) | - | - | - | - | +| LTX-2 | [Lightricks/LTX-2-19b-LoRA-Camera-Control-Dolly-Out](https://www.modelscope.cn/models/Lightricks/LTX-2-19b-LoRA-Camera-Control-Dolly-Out) | [code](/examples/ltx2/model_inference/LTX-2-T2AV-Camera-Control-Dolly-Out.py) | [code](/examples/ltx2/model_inference_low_vram/LTX-2-T2AV-Camera-Control-Dolly-Out.py) | - | - | - | - | +| LTX-2 | [Lightricks/LTX-2-19b-LoRA-Camera-Control-Dolly-Left](https://www.modelscope.cn/models/Lightricks/LTX-2-19b-LoRA-Camera-Control-Dolly-Left) | [code](/examples/ltx2/model_inference/LTX-2-T2AV-Camera-Control-Dolly-Left.py) | [code](/examples/ltx2/model_inference_low_vram/LTX-2-T2AV-Camera-Control-Dolly-Left.py) | - | - | - | - | +| LTX-2 | [Lightricks/LTX-2-19b-LoRA-Camera-Control-Dolly-Right](https://www.modelscope.cn/models/Lightricks/LTX-2-19b-LoRA-Camera-Control-Dolly-Right) | [code](/examples/ltx2/model_inference/LTX-2-T2AV-Camera-Control-Dolly-Right.py) | [code](/examples/ltx2/model_inference_low_vram/LTX-2-T2AV-Camera-Control-Dolly-Right.py) | - | - | - | - | +| LTX-2 | [Lightricks/LTX-2-19b-LoRA-Camera-Control-Jib-Up](https://www.modelscope.cn/models/Lightricks/LTX-2-19b-LoRA-Camera-Control-Jib-Up) | [code](/examples/ltx2/model_inference/LTX-2-T2AV-Camera-Control-Jib-Up.py) | [code](/examples/ltx2/model_inference_low_vram/LTX-2-T2AV-Camera-Control-Jib-Up.py) | - | - | - | - | +| LTX-2 | [Lightricks/LTX-2-19b-LoRA-Camera-Control-Jib-Down](https://www.modelscope.cn/models/Lightricks/LTX-2-19b-LoRA-Camera-Control-Jib-Down) | [code](/examples/ltx2/model_inference/LTX-2-T2AV-Camera-Control-Jib-Down.py) | [code](/examples/ltx2/model_inference_low_vram/LTX-2-T2AV-Camera-Control-Jib-Down.py) | - | - | - | - | +| LTX-2 | [Lightricks/LTX-2-19b-LoRA-Camera-Control-Static](https://www.modelscope.cn/models/Lightricks/LTX-2-19b-LoRA-Camera-Control-Static) | [code](/examples/ltx2/model_inference/LTX-2-T2AV-Camera-Control-Static.py) | [code](/examples/ltx2/model_inference_low_vram/LTX-2-T2AV-Camera-Control-Static.py) | - | - | - | - | +| FLUX.2 | [black-forest-labs/FLUX.2-dev](https://www.modelscope.cn/models/black-forest-labs/FLUX.2-dev) | [code](/examples/flux2/model_inference/FLUX.2-dev.py) | [code](/examples/flux2/model_inference_low_vram/FLUX.2-dev.py) | - | - | [code](/examples/flux2/model_training/lora/FLUX.2-dev.sh) | [code](/examples/flux2/model_training/validate_lora/FLUX.2-dev.py) | +| FLUX.2 | [black-forest-labs/FLUX.2-klein-4B](https://www.modelscope.cn/models/black-forest-labs/FLUX.2-klein-4B) | [code](/examples/flux2/model_inference/FLUX.2-klein-4B.py) | [code](/examples/flux2/model_inference_low_vram/FLUX.2-klein-4B.py) | [code](/examples/flux2/model_training/full/FLUX.2-klein-4B.sh) | [code](/examples/flux2/model_training/validate_full/FLUX.2-klein-4B.py) | [code](/examples/flux2/model_training/lora/FLUX.2-klein-4B.sh) | [code](/examples/flux2/model_training/validate_lora/FLUX.2-klein-4B.py) | +| FLUX.2 | [black-forest-labs/FLUX.2-klein-9B](https://www.modelscope.cn/models/black-forest-labs/FLUX.2-klein-9B) | [code](/examples/flux2/model_inference/FLUX.2-klein-9B.py) | [code](/examples/flux2/model_inference_low_vram/FLUX.2-klein-9B.py) | [code](/examples/flux2/model_training/full/FLUX.2-klein-9B.sh) | [code](/examples/flux2/model_training/validate_full/FLUX.2-klein-9B.py) | [code](/examples/flux2/model_training/lora/FLUX.2-klein-9B.sh) | [code](/examples/flux2/model_training/validate_lora/FLUX.2-klein-9B.py) | +| FLUX.2 | [black-forest-labs/FLUX.2-klein-base-4B](https://www.modelscope.cn/models/black-forest-labs/FLUX.2-klein-base-4B) | [code](/examples/flux2/model_inference/FLUX.2-klein-base-4B.py) | [code](/examples/flux2/model_inference_low_vram/FLUX.2-klein-base-4B.py) | [code](/examples/flux2/model_training/full/FLUX.2-klein-base-4B.sh) | [code](/examples/flux2/model_training/validate_full/FLUX.2-klein-base-4B.py) | [code](/examples/flux2/model_training/lora/FLUX.2-klein-base-4B.sh) | [code](/examples/flux2/model_training/validate_lora/FLUX.2-klein-base-4B.py) | +| FLUX.2 | [black-forest-labs/FLUX.2-klein-base-9B](https://www.modelscope.cn/models/black-forest-labs/FLUX.2-klein-base-9B) | [code](/examples/flux2/model_inference/FLUX.2-klein-base-9B.py) | [code](/examples/flux2/model_inference_low_vram/FLUX.2-klein-base-9B.py) | [code](/examples/flux2/model_training/full/FLUX.2-klein-base-9B.sh) | [code](/examples/flux2/model_training/validate_full/FLUX.2-klein-base-9B.py) | [code](/examples/flux2/model_training/lora/FLUX.2-klein-base-9B.sh) | [code](/examples/flux2/model_training/validate_lora/FLUX.2-klein-base-9B.py) | +| FLUX.2 | [DiffSynth-Studio/Template-KleinBase4B-Aesthetic](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Aesthetic) | [code](/examples/flux2/model_inference/Template-KleinBase4B-Aesthetic.py) | [code](/examples/flux2/model_inference_low_vram/Template-KleinBase4B-Aesthetic.py) | [code](/examples/flux2/model_training/full/Template-KleinBase4B-Aesthetic.sh) | [code](/examples/flux2/model_training/validate_full/Template-KleinBase4B-Aesthetic.py) | - | - | +| FLUX.2 | [DiffSynth-Studio/Template-KleinBase4B-Brightness](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Brightness) | [code](/examples/flux2/model_inference/Template-KleinBase4B-Brightness.py) | [code](/examples/flux2/model_inference_low_vram/Template-KleinBase4B-Brightness.py) | [code](/examples/flux2/model_training/full/Template-KleinBase4B-Brightness.sh) | [code](/examples/flux2/model_training/validate_full/Template-KleinBase4B-Brightness.py) | - | - | +| FLUX.2 | [DiffSynth-Studio/Template-KleinBase4B-Age](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Age) | [code](/examples/flux2/model_inference/Template-KleinBase4B-Age.py) | [code](/examples/flux2/model_inference_low_vram/Template-KleinBase4B-Age.py) | [code](/examples/flux2/model_training/full/Template-KleinBase4B-Age.sh) | [code](/examples/flux2/model_training/validate_full/Template-KleinBase4B-Age.py) | - | - | +| FLUX.2 | [DiffSynth-Studio/Template-KleinBase4B-ControlNet](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-ControlNet) | [code](/examples/flux2/model_inference/Template-KleinBase4B-ControlNet.py) | [code](/examples/flux2/model_inference_low_vram/Template-KleinBase4B-ControlNet.py) | [code](/examples/flux2/model_training/full/Template-KleinBase4B-ControlNet.sh) | [code](/examples/flux2/model_training/validate_full/Template-KleinBase4B-ControlNet.py) | - | - | +| FLUX.2 | [DiffSynth-Studio/Template-KleinBase4B-Edit](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Edit) | [code](/examples/flux2/model_inference/Template-KleinBase4B-Edit.py) | [code](/examples/flux2/model_inference_low_vram/Template-KleinBase4B-Edit.py) | [code](/examples/flux2/model_training/full/Template-KleinBase4B-Edit.sh) | [code](/examples/flux2/model_training/validate_full/Template-KleinBase4B-Edit.py) | - | - | +| FLUX.2 | [DiffSynth-Studio/Template-KleinBase4B-Inpaint](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Inpaint) | [code](/examples/flux2/model_inference/Template-KleinBase4B-Inpaint.py) | [code](/examples/flux2/model_inference_low_vram/Template-KleinBase4B-Inpaint.py) | [code](/examples/flux2/model_training/full/Template-KleinBase4B-Inpaint.sh) | [code](/examples/flux2/model_training/validate_full/Template-KleinBase4B-Inpaint.py) | - | - | +| FLUX.2 | [DiffSynth-Studio/Template-KleinBase4B-PandaMeme](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-PandaMeme) | [code](/examples/flux2/model_inference/Template-KleinBase4B-PandaMeme.py) | [code](/examples/flux2/model_inference_low_vram/Template-KleinBase4B-PandaMeme.py) | [code](/examples/flux2/model_training/full/Template-KleinBase4B-PandaMeme.sh) | [code](/examples/flux2/model_training/validate_full/Template-KleinBase4B-PandaMeme.py) | - | - | +| FLUX.2 | [DiffSynth-Studio/Template-KleinBase4B-Sharpness](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Sharpness) | [code](/examples/flux2/model_inference/Template-KleinBase4B-Sharpness.py) | [code](/examples/flux2/model_inference_low_vram/Template-KleinBase4B-Sharpness.py) | [code](/examples/flux2/model_training/full/Template-KleinBase4B-Sharpness.sh) | [code](/examples/flux2/model_training/validate_full/Template-KleinBase4B-Sharpness.py) | - | - | +| FLUX.2 | [DiffSynth-Studio/Template-KleinBase4B-SoftRGB](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-SoftRGB) | [code](/examples/flux2/model_inference/Template-KleinBase4B-SoftRGB.py) | [code](/examples/flux2/model_inference_low_vram/Template-KleinBase4B-SoftRGB.py) | [code](/examples/flux2/model_training/full/Template-KleinBase4B-SoftRGB.sh) | [code](/examples/flux2/model_training/validate_full/Template-KleinBase4B-SoftRGB.py) | - | - | +| FLUX.2 | [DiffSynth-Studio/Template-KleinBase4B-Upscaler](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Upscaler) | [code](/examples/flux2/model_inference/Template-KleinBase4B-Upscaler.py) | [code](/examples/flux2/model_inference_low_vram/Template-KleinBase4B-Upscaler.py) | [code](/examples/flux2/model_training/full/Template-KleinBase4B-Upscaler.sh) | [code](/examples/flux2/model_training/validate_full/Template-KleinBase4B-Upscaler.py) | - | - | +| FLUX.2 | [DiffSynth-Studio/Template-KleinBase4B-ContentRef](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-ContentRef) | [code](/examples/flux2/model_inference/Template-KleinBase4B-ContentRef.py) | [code](/examples/flux2/model_inference_low_vram/Template-KleinBase4B-ContentRef.py) | [code](/examples/flux2/model_training/full/Template-KleinBase4B-ContentRef.sh) | [code](/examples/flux2/model_training/validate_full/Template-KleinBase4B-ContentRef.py) | - | - | +| FLUX.2 | [DiffSynth-Studio/KleinBase4B-i2L-v2](https://www.modelscope.cn/models/DiffSynth-Studio/KleinBase4B-i2L-v2) | [code](/examples/flux2/model_inference/KleinBase4B-i2L-v2.py) | [code](/examples/flux2/model_inference_low_vram/KleinBase4B-i2L-v2.py) | [code](/examples/flux2/model_training/full/KleinBase4B-i2L-v2.sh) | [code](/examples/flux2/model_training/validate_full/KleinBase4B-i2L-v2.py) | - | - | +| Z-Image | [Tongyi-MAI/Z-Image](https://www.modelscope.cn/models/Tongyi-MAI/Z-Image) | [code](/examples/z_image/model_inference/Z-Image.py) | [code](/examples/z_image/model_inference_low_vram/Z-Image.py) | [code](/examples/z_image/model_training/full/Z-Image.sh) | [code](/examples/z_image/model_training/validate_full/Z-Image.py) | [code](/examples/z_image/model_training/lora/Z-Image.sh) | [code](/examples/z_image/model_training/validate_lora/Z-Image.py) | +| Z-Image | [DiffSynth-Studio/Z-Image-i2L](https://www.modelscope.cn/models/DiffSynth-Studio/Z-Image-i2L) | [code](/examples/z_image/model_inference/Z-Image-i2L.py) | [code](/examples/z_image/model_inference_low_vram/Z-Image-i2L.py) | - | - | - | - | +| Z-Image | [Tongyi-MAI/Z-Image-Turbo](https://www.modelscope.cn/models/Tongyi-MAI/Z-Image-Turbo) | [code](/examples/z_image/model_inference/Z-Image-Turbo.py) | [code](/examples/z_image/model_inference_low_vram/Z-Image-Turbo.py) | [code](/examples/z_image/model_training/full/Z-Image-Turbo.sh) | [code](/examples/z_image/model_training/validate_full/Z-Image-Turbo.py) | [code](/examples/z_image/model_training/lora/Z-Image-Turbo.sh) | [code](/examples/z_image/model_training/validate_lora/Z-Image-Turbo.py) | +| Z-Image | [PAI/Z-Image-Turbo-Fun-Controlnet-Union-2.1](https://www.modelscope.cn/models/PAI/Z-Image-Turbo-Fun-Controlnet-Union-2.1) | [code](/examples/z_image/model_inference/Z-Image-Turbo-Fun-Controlnet-Union-2.1.py) | [code](/examples/z_image/model_inference_low_vram/Z-Image-Turbo-Fun-Controlnet-Union-2.1.py) | [code](/examples/z_image/model_training/full/Z-Image-Turbo-Fun-Controlnet-Union-2.1.sh) | [code](/examples/z_image/model_training/validate_full/Z-Image-Turbo-Fun-Controlnet-Union-2.1.py) | [code](/examples/z_image/model_training/lora/Z-Image-Turbo-Fun-Controlnet-Union-2.1.sh) | [code](/examples/z_image/model_training/validate_lora/Z-Image-Turbo-Fun-Controlnet-Union-2.1.py) | +| Z-Image | [PAI/Z-Image-Turbo-Fun-Controlnet-Union-2.1-8steps](https://www.modelscope.cn/models/PAI/Z-Image-Turbo-Fun-Controlnet-Union-2.1) | [code](/examples/z_image/model_inference/Z-Image-Turbo-Fun-Controlnet-Union-2.1-8steps.py) | [code](/examples/z_image/model_inference_low_vram/Z-Image-Turbo-Fun-Controlnet-Union-2.1-8steps.py) | [code](/examples/z_image/model_training/full/Z-Image-Turbo-Fun-Controlnet-Union-2.1-8steps.sh) | [code](/examples/z_image/model_training/validate_full/Z-Image-Turbo-Fun-Controlnet-Union-2.1-8steps.py) | [code](/examples/z_image/model_training/lora/Z-Image-Turbo-Fun-Controlnet-Union-2.1-8steps.sh) | [code](/examples/z_image/model_training/validate_lora/Z-Image-Turbo-Fun-Controlnet-Union-2.1-8steps.py) | +| Z-Image | [PAI/Z-Image-Turbo-Fun-Controlnet-Tile-2.1-8steps](https://www.modelscope.cn/models/PAI/Z-Image-Turbo-Fun-Controlnet-Union-2.1) | [code](/examples/z_image/model_inference/Z-Image-Turbo-Fun-Controlnet-Tile-2.1-8steps.py) | [code](/examples/z_image/model_inference_low_vram/Z-Image-Turbo-Fun-Controlnet-Tile-2.1-8steps.py) | [code](/examples/z_image/model_training/full/Z-Image-Turbo-Fun-Controlnet-Tile-2.1-8steps.sh) | [code](/examples/z_image/model_training/validate_full/Z-Image-Turbo-Fun-Controlnet-Tile-2.1-8steps.py) | [code](/examples/z_image/model_training/lora/Z-Image-Turbo-Fun-Controlnet-Tile-2.1-8steps.sh) | [code](/examples/z_image/model_training/validate_lora/Z-Image-Turbo-Fun-Controlnet-Tile-2.1-8steps.py) | +| Z-Image | [DiffSynth-Studio/ZImage-i2L-v2](https://www.modelscope.cn/models/DiffSynth-Studio/ZImage-i2L-v2) | [code](/examples/z_image/model_inference/ZImage-i2L-v2.py) | [code](/examples/z_image/model_inference_low_vram/ZImage-i2L-v2.py) | [code](/examples/z_image/model_training/full/ZImage-i2L-v2.sh) | [code](/examples/z_image/model_training/validate_full/ZImage-i2L-v2.py) | - | - | +| Anima | [circlestone-labs/Anima](https://www.modelscope.cn/models/circlestone-labs/Anima) | [code](/examples/anima/model_inference/anima-preview.py) | [code](/examples/anima/model_inference_low_vram/anima-preview.py) | [code](/examples/anima/model_training/full/anima-preview.sh) | [code](/examples/anima/model_training/validate_full/anima-preview.py) | [code](/examples/anima/model_training/lora/anima-preview.sh) | [code](/examples/anima/model_training/validate_lora/anima-preview.py) | +| Qwen-Image | [Qwen/Qwen-Image](https://www.modelscope.cn/models/Qwen/Qwen-Image) | [code](/examples/qwen_image/model_inference/Qwen-Image.py) | [code](/examples/qwen_image/model_inference_low_vram/Qwen-Image.py) | [code](/examples/qwen_image/model_training/full/Qwen-Image.sh) | [code](/examples/qwen_image/model_training/validate_full/Qwen-Image.py) | [code](/examples/qwen_image/model_training/lora/Qwen-Image.sh) | [code](/examples/qwen_image/model_training/validate_lora/Qwen-Image.py) | +| Qwen-Image | [Qwen/Qwen-Image-2512](https://www.modelscope.cn/models/Qwen/Qwen-Image-2512) | [code](/examples/qwen_image/model_inference/Qwen-Image-2512.py) | [code](/examples/qwen_image/model_inference_low_vram/Qwen-Image-2512.py) | [code](/examples/qwen_image/model_training/full/Qwen-Image-2512.sh) | [code](/examples/qwen_image/model_training/validate_full/Qwen-Image-2512.py) | [code](/examples/qwen_image/model_training/lora/Qwen-Image-2512.sh) | [code](/examples/qwen_image/model_training/validate_lora/Qwen-Image-2512.py) | +| Qwen-Image | [Qwen/Qwen-Image-Edit](https://www.modelscope.cn/models/Qwen/Qwen-Image-Edit) | [code](/examples/qwen_image/model_inference/Qwen-Image-Edit.py) | [code](/examples/qwen_image/model_inference_low_vram/Qwen-Image-Edit.py) | [code](/examples/qwen_image/model_training/full/Qwen-Image-Edit.sh) | [code](/examples/qwen_image/model_training/validate_full/Qwen-Image-Edit.py) | [code](/examples/qwen_image/model_training/lora/Qwen-Image-Edit.sh) | [code](/examples/qwen_image/model_training/validate_lora/Qwen-Image-Edit.py) | +| Qwen-Image | [Qwen/Qwen-Image-Edit-2509](https://www.modelscope.cn/models/Qwen/Qwen-Image-Edit-2509) | [code](/examples/qwen_image/model_inference/Qwen-Image-Edit-2509.py) | [code](/examples/qwen_image/model_inference_low_vram/Qwen-Image-Edit-2509.py) | [code](/examples/qwen_image/model_training/full/Qwen-Image-Edit-2509.sh) | [code](/examples/qwen_image/model_training/validate_full/Qwen-Image-Edit-2509.py) | [code](/examples/qwen_image/model_training/lora/Qwen-Image-Edit-2509.sh) | [code](/examples/qwen_image/model_training/validate_lora/Qwen-Image-Edit-2509.py) | +| Qwen-Image | [Qwen/Qwen-Image-Edit-2511](https://www.modelscope.cn/models/Qwen/Qwen-Image-Edit-2511) | [code](/examples/qwen_image/model_inference/Qwen-Image-Edit-2511.py) | [code](/examples/qwen_image/model_inference_low_vram/Qwen-Image-Edit-2511.py) | [code](/examples/qwen_image/model_training/full/Qwen-Image-Edit-2511.sh) | [code](/examples/qwen_image/model_training/validate_full/Qwen-Image-Edit-2511.py) | [code](/examples/qwen_image/model_training/lora/Qwen-Image-Edit-2511.sh) | [code](/examples/qwen_image/model_training/validate_lora/Qwen-Image-Edit-2511.py) | +| Qwen-Image | [FireRedTeam/FireRed-Image-Edit-1.0](https://www.modelscope.cn/models/FireRedTeam/FireRed-Image-Edit-1.0) | [code](/examples/qwen_image/model_inference/FireRed-Image-Edit-1.0.py) | [code](/examples/qwen_image/model_inference_low_vram/FireRed-Image-Edit-1.0.py) | [code](/examples/qwen_image/model_training/full/FireRed-Image-Edit-1.0.sh) | [code](/examples/qwen_image/model_training/validate_full/FireRed-Image-Edit-1.0.py) | [code](/examples/qwen_image/model_training/lora/FireRed-Image-Edit-1.0.sh) | [code](/examples/qwen_image/model_training/validate_lora/FireRed-Image-Edit-1.0.py) | +| Qwen-Image | [FireRedTeam/FireRed-Image-Edit-1.1](https://www.modelscope.cn/models/FireRedTeam/FireRed-Image-Edit-1.1) | [code](/examples/qwen_image/model_inference/FireRed-Image-Edit-1.1.py) | [code](/examples/qwen_image/model_inference_low_vram/FireRed-Image-Edit-1.1.py) | [code](/examples/qwen_image/model_training/full/FireRed-Image-Edit-1.1.sh) | [code](/examples/qwen_image/model_training/validate_full/FireRed-Image-Edit-1.1.py) | [code](/examples/qwen_image/model_training/lora/FireRed-Image-Edit-1.1.sh) | [code](/examples/qwen_image/model_training/validate_lora/FireRed-Image-Edit-1.1.py) | +| Qwen-Image | [lightx2v/Qwen-Image-Edit-2511-Lightning](https://modelscope.cn/models/lightx2v/Qwen-Image-Edit-2511-Lightning) | [code](/examples/qwen_image/model_inference/Qwen-Image-Edit-2511-Lightning.py) | [code](/examples/qwen_image/model_inference_low_vram/Qwen-Image-Edit-2511-Lightning.py) | - | - | - | - | +| Qwen-Image | [Qwen/Qwen-Image-Layered](https://www.modelscope.cn/models/Qwen/Qwen-Image-Layered) | [code](/examples/qwen_image/model_inference/Qwen-Image-Layered.py) | [code](/examples/qwen_image/model_inference_low_vram/Qwen-Image-Layered.py) | [code](/examples/qwen_image/model_training/full/Qwen-Image-Layered.sh) | [code](/examples/qwen_image/model_training/validate_full/Qwen-Image-Layered.py) | [code](/examples/qwen_image/model_training/lora/Qwen-Image-Layered.sh) | [code](/examples/qwen_image/model_training/validate_lora/Qwen-Image-Layered.py) | +| Qwen-Image | [DiffSynth-Studio/Qwen-Image-Layered-Control](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Layered-Control) | [code](/examples/qwen_image/model_inference/Qwen-Image-Layered-Control.py) | [code](/examples/qwen_image/model_inference_low_vram/Qwen-Image-Layered-Control.py) | [code](/examples/qwen_image/model_training/full/Qwen-Image-Layered-Control.sh) | [code](/examples/qwen_image/model_training/validate_full/Qwen-Image-Layered-Control.py) | [code](/examples/qwen_image/model_training/lora/Qwen-Image-Layered-Control.sh) | [code](/examples/qwen_image/model_training/validate_lora/Qwen-Image-Layered-Control.py) | +| Qwen-Image | [DiffSynth-Studio/Qwen-Image-Layered-Control-V2](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Layered-Control-V2) | [code](/examples/qwen_image/model_inference/Qwen-Image-Layered-Control-V2.py) | [code](/examples/qwen_image/model_inference_low_vram/Qwen-Image-Layered-Control-V2.py) | - | - | [code](/examples/qwen_image/model_training/lora/Qwen-Image-Layered-Control-V2.sh) | [code](/examples/qwen_image/model_training/validate_lora/Qwen-Image-Layered-Control-V2.py) | +| Qwen-Image | [DiffSynth-Studio/Qwen-Image-EliGen](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-EliGen) | [code](/examples/qwen_image/model_inference/Qwen-Image-EliGen.py) | [code](/examples/qwen_image/model_inference_low_vram/Qwen-Image-EliGen.py) | - | - | [code](/examples/qwen_image/model_training/lora/Qwen-Image-EliGen.sh) | [code](/examples/qwen_image/model_training/validate_lora/Qwen-Image-EliGen.py) | +| Qwen-Image | [DiffSynth-Studio/Qwen-Image-EliGen-V2](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-EliGen-V2) | [code](/examples/qwen_image/model_inference/Qwen-Image-EliGen-V2.py) | [code](/examples/qwen_image/model_inference_low_vram/Qwen-Image-EliGen-V2.py) | - | - | [code](/examples/qwen_image/model_training/lora/Qwen-Image-EliGen.sh) | [code](/examples/qwen_image/model_training/validate_lora/Qwen-Image-EliGen.py) | +| Qwen-Image | [DiffSynth-Studio/Qwen-Image-EliGen-Poster](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-EliGen-Poster) | [code](/examples/qwen_image/model_inference/Qwen-Image-EliGen-Poster.py) | [code](/examples/qwen_image/model_inference_low_vram/Qwen-Image-EliGen-Poster.py) | - | - | [code](/examples/qwen_image/model_training/lora/Qwen-Image-EliGen-Poster.sh) | [code](/examples/qwen_image/model_training/validate_lora/Qwen-Image-EliGen-Poster.py) | +| Qwen-Image | [DiffSynth-Studio/Qwen-Image-Distill-Full](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Distill-Full) | [code](/examples/qwen_image/model_inference/Qwen-Image-Distill-Full.py) | [code](/examples/qwen_image/model_inference_low_vram/Qwen-Image-Distill-Full.py) | [code](/examples/qwen_image/model_training/full/Qwen-Image-Distill-Full.sh) | [code](/examples/qwen_image/model_training/validate_full/Qwen-Image-Distill-Full.py) | [code](/examples/qwen_image/model_training/lora/Qwen-Image-Distill-Full.sh) | [code](/examples/qwen_image/model_training/validate_lora/Qwen-Image-Distill-Full.py) | +| Qwen-Image | [DiffSynth-Studio/Qwen-Image-Distill-LoRA](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Distill-LoRA) | [code](/examples/qwen_image/model_inference/Qwen-Image-Distill-LoRA.py) | [code](/examples/qwen_image/model_inference_low_vram/Qwen-Image-Distill-LoRA.py) | - | - | [code](/examples/qwen_image/model_training/lora/Qwen-Image-Distill-LoRA.sh) | [code](/examples/qwen_image/model_training/validate_lora/Qwen-Image-Distill-LoRA.py) | +| Qwen-Image | [DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Canny](https://modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Canny) | [code](/examples/qwen_image/model_inference/Qwen-Image-Blockwise-ControlNet-Canny.py) | [code](/examples/qwen_image/model_inference_low_vram/Qwen-Image-Blockwise-ControlNet-Canny.py) | [code](/examples/qwen_image/model_training/full/Qwen-Image-Blockwise-ControlNet-Canny.sh) | [code](/examples/qwen_image/model_training/validate_full/Qwen-Image-Blockwise-ControlNet-Canny.py) | [code](/examples/qwen_image/model_training/lora/Qwen-Image-Blockwise-ControlNet-Canny.sh) | [code](/examples/qwen_image/model_training/validate_lora/Qwen-Image-Blockwise-ControlNet-Canny.py) | +| Qwen-Image | [DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Depth](https://modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Depth) | [code](/examples/qwen_image/model_inference/Qwen-Image-Blockwise-ControlNet-Depth.py) | [code](/examples/qwen_image/model_inference_low_vram/Qwen-Image-Blockwise-ControlNet-Depth.py) | [code](/examples/qwen_image/model_training/full/Qwen-Image-Blockwise-ControlNet-Depth.sh) | [code](/examples/qwen_image/model_training/validate_full/Qwen-Image-Blockwise-ControlNet-Depth.py) | [code](/examples/qwen_image/model_training/lora/Qwen-Image-Blockwise-ControlNet-Depth.sh) | [code](/examples/qwen_image/model_training/validate_lora/Qwen-Image-Blockwise-ControlNet-Depth.py) | +| Qwen-Image | [DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Inpaint](https://modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Inpaint) | [code](/examples/qwen_image/model_inference/Qwen-Image-Blockwise-ControlNet-Inpaint.py) | [code](/examples/qwen_image/model_inference_low_vram/Qwen-Image-Blockwise-ControlNet-Inpaint.py) | [code](/examples/qwen_image/model_training/full/Qwen-Image-Blockwise-ControlNet-Inpaint.sh) | [code](/examples/qwen_image/model_training/validate_full/Qwen-Image-Blockwise-ControlNet-Inpaint.py) | [code](/examples/qwen_image/model_training/lora/Qwen-Image-Blockwise-ControlNet-Inpaint.sh) | [code](/examples/qwen_image/model_training/validate_lora/Qwen-Image-Blockwise-ControlNet-Inpaint.py) | +| Qwen-Image | [DiffSynth-Studio/Qwen-Image-In-Context-Control-Union](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-In-Context-Control-Union) | [code](/examples/qwen_image/model_inference/Qwen-Image-In-Context-Control-Union.py) | [code](/examples/qwen_image/model_inference_low_vram/Qwen-Image-In-Context-Control-Union.py) | - | - | [code](/examples/qwen_image/model_training/lora/Qwen-Image-In-Context-Control-Union.sh) | [code](/examples/qwen_image/model_training/validate_lora/Qwen-Image-In-Context-Control-Union.py) | +| Qwen-Image | [DiffSynth-Studio/Qwen-Image-Edit-Lowres-Fix](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Edit-Lowres-Fix) | [code](/examples/qwen_image/model_inference/Qwen-Image-Edit-Lowres-Fix.py) | [code](/examples/qwen_image/model_inference_low_vram/Qwen-Image-Edit-Lowres-Fix.py) | - | - | - | - | +| Qwen-Image | [DiffSynth-Studio/Qwen-Image-i2L](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-i2L) | [code](/examples/qwen_image/model_inference/Qwen-Image-i2L.py) | [code](/examples/qwen_image/model_inference_low_vram/Qwen-Image-i2L.py) | - | - | - | - | +| Qwen-Video-Edit | [yunpeng1998/Qwen-Video-Edit](https://www.modelscope.cn/models/yunpeng1998/Qwen-Video-Edit) | [code](/examples/qwen_video_edit/model_inference/Qwen-Video-Edit.py) | [code](/examples/qwen_video_edit/model_inference_low_vram/Qwen-Video-Edit.py) | [code](/examples/qwen_video_edit/model_training/full/Qwen-Video-Edit.sh) | [code](/examples/qwen_video_edit/model_training/validate_full/Qwen-Video-Edit.py) | [code](/examples/qwen_video_edit/model_training/lora/Qwen-Video-Edit.sh) | [code](/examples/qwen_video_edit/model_training/validate_lora/Qwen-Video-Edit.py) | +| Wan | [Wan-AI/Wan2.1-T2V-1.3B](https://modelscope.cn/models/Wan-AI/Wan2.1-T2V-1.3B) | [code](/examples/wanvideo/model_inference/Wan2.1-T2V-1.3B.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.1-T2V-1.3B.py) | [code](/examples/wanvideo/model_training/full/Wan2.1-T2V-1.3B.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.1-T2V-1.3B.py) | [code](/examples/wanvideo/model_training/lora/Wan2.1-T2V-1.3B.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.1-T2V-1.3B.py) | +| Wan | [Wan-AI/Wan2.1-T2V-14B](https://modelscope.cn/models/Wan-AI/Wan2.1-T2V-14B) | [code](/examples/wanvideo/model_inference/Wan2.1-T2V-14B.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.1-T2V-14B.py) | [code](/examples/wanvideo/model_training/full/Wan2.1-T2V-14B.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.1-T2V-14B.py) | [code](/examples/wanvideo/model_training/lora/Wan2.1-T2V-14B.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.1-T2V-14B.py) | +| Wan | [Wan-AI/Wan2.1-I2V-14B-480P](https://modelscope.cn/models/Wan-AI/Wan2.1-I2V-14B-480P) | [code](/examples/wanvideo/model_inference/Wan2.1-I2V-14B-480P.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.1-I2V-14B-480P.py) | [code](/examples/wanvideo/model_training/full/Wan2.1-I2V-14B-480P.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.1-I2V-14B-480P.py) | [code](/examples/wanvideo/model_training/lora/Wan2.1-I2V-14B-480P.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.1-I2V-14B-480P.py) | +| Wan | [Wan-AI/Wan2.1-I2V-14B-720P](https://modelscope.cn/models/Wan-AI/Wan2.1-I2V-14B-720P) | [code](/examples/wanvideo/model_inference/Wan2.1-I2V-14B-720P.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.1-I2V-14B-720P.py) | [code](/examples/wanvideo/model_training/full/Wan2.1-I2V-14B-720P.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.1-I2V-14B-720P.py) | [code](/examples/wanvideo/model_training/lora/Wan2.1-I2V-14B-720P.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.1-I2V-14B-720P.py) | +| Wan | [Wan-AI/Wan2.1-FLF2V-14B-720P](https://modelscope.cn/models/Wan-AI/Wan2.1-FLF2V-14B-720P) | [code](/examples/wanvideo/model_inference/Wan2.1-FLF2V-14B-720P.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.1-FLF2V-14B-720P.py) | [code](/examples/wanvideo/model_training/full/Wan2.1-FLF2V-14B-720P.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.1-FLF2V-14B-720P.py) | [code](/examples/wanvideo/model_training/lora/Wan2.1-FLF2V-14B-720P.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.1-FLF2V-14B-720P.py) | +| Wan | [iic/VACE-Wan2.1-1.3B-Preview](https://modelscope.cn/models/iic/VACE-Wan2.1-1.3B-Preview) | [code](/examples/wanvideo/model_inference/Wan2.1-VACE-1.3B-Preview.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.1-VACE-1.3B-Preview.py) | [code](/examples/wanvideo/model_training/full/Wan2.1-VACE-1.3B-Preview.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.1-VACE-1.3B-Preview.py) | [code](/examples/wanvideo/model_training/lora/Wan2.1-VACE-1.3B-Preview.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.1-VACE-1.3B-Preview.py) | +| Wan | [Wan-AI/Wan2.1-VACE-1.3B](https://modelscope.cn/models/Wan-AI/Wan2.1-VACE-1.3B) | [code](/examples/wanvideo/model_inference/Wan2.1-VACE-1.3B.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.1-VACE-1.3B.py) | [code](/examples/wanvideo/model_training/full/Wan2.1-VACE-1.3B.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.1-VACE-1.3B.py) | [code](/examples/wanvideo/model_training/lora/Wan2.1-VACE-1.3B.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.1-VACE-1.3B.py) | +| Wan | [Wan-AI/Wan2.1-VACE-14B](https://modelscope.cn/models/Wan-AI/Wan2.1-VACE-14B) | [code](/examples/wanvideo/model_inference/Wan2.1-VACE-14B.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.1-VACE-14B.py) | [code](/examples/wanvideo/model_training/full/Wan2.1-VACE-14B.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.1-VACE-14B.py) | [code](/examples/wanvideo/model_training/lora/Wan2.1-VACE-14B.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.1-VACE-14B.py) | +| Wan | [PAI/Wan2.1-Fun-1.3B-InP](https://modelscope.cn/models/PAI/Wan2.1-Fun-1.3B-InP) | [code](/examples/wanvideo/model_inference/Wan2.1-Fun-1.3B-InP.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.1-Fun-1.3B-InP.py) | [code](/examples/wanvideo/model_training/full/Wan2.1-Fun-1.3B-InP.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.1-Fun-1.3B-InP.py) | [code](/examples/wanvideo/model_training/lora/Wan2.1-Fun-1.3B-InP.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.1-Fun-1.3B-InP.py) | +| Wan | [PAI/Wan2.1-Fun-1.3B-Control](https://modelscope.cn/models/PAI/Wan2.1-Fun-1.3B-Control) | [code](/examples/wanvideo/model_inference/Wan2.1-Fun-1.3B-Control.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.1-Fun-1.3B-Control.py) | [code](/examples/wanvideo/model_training/full/Wan2.1-Fun-1.3B-Control.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.1-Fun-1.3B-Control.py) | [code](/examples/wanvideo/model_training/lora/Wan2.1-Fun-1.3B-Control.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.1-Fun-1.3B-Control.py) | +| Wan | [PAI/Wan2.1-Fun-14B-InP](https://modelscope.cn/models/PAI/Wan2.1-Fun-14B-InP) | [code](/examples/wanvideo/model_inference/Wan2.1-Fun-14B-InP.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.1-Fun-14B-InP.py) | [code](/examples/wanvideo/model_training/full/Wan2.1-Fun-14B-InP.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.1-Fun-14B-InP.py) | [code](/examples/wanvideo/model_training/lora/Wan2.1-Fun-14B-InP.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.1-Fun-14B-InP.py) | +| Wan | [PAI/Wan2.1-Fun-14B-Control](https://modelscope.cn/models/PAI/Wan2.1-Fun-14B-Control) | [code](/examples/wanvideo/model_inference/Wan2.1-Fun-14B-Control.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.1-Fun-14B-Control.py) | [code](/examples/wanvideo/model_training/full/Wan2.1-Fun-14B-Control.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.1-Fun-14B-Control.py) | [code](/examples/wanvideo/model_training/lora/Wan2.1-Fun-14B-Control.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.1-Fun-14B-Control.py) | +| Wan | [PAI/Wan2.1-Fun-V1.1-1.3B-Control](https://modelscope.cn/models/PAI/Wan2.1-Fun-V1.1-1.3B-Control) | [code](/examples/wanvideo/model_inference/Wan2.1-Fun-V1.1-1.3B-Control.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.1-Fun-V1.1-1.3B-Control.py) | [code](/examples/wanvideo/model_training/full/Wan2.1-Fun-V1.1-1.3B-Control.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.1-Fun-V1.1-1.3B-Control.py) | [code](/examples/wanvideo/model_training/lora/Wan2.1-Fun-V1.1-1.3B-Control.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.1-Fun-V1.1-1.3B-Control.py) | +| Wan | [PAI/Wan2.1-Fun-V1.1-14B-Control](https://modelscope.cn/models/PAI/Wan2.1-Fun-V1.1-14B-Control) | [code](/examples/wanvideo/model_inference/Wan2.1-Fun-V1.1-14B-Control.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.1-Fun-V1.1-14B-Control.py) | [code](/examples/wanvideo/model_training/full/Wan2.1-Fun-V1.1-14B-Control.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.1-Fun-V1.1-14B-Control.py) | [code](/examples/wanvideo/model_training/lora/Wan2.1-Fun-V1.1-14B-Control.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.1-Fun-V1.1-14B-Control.py) | +| Wan | [PAI/Wan2.1-Fun-V1.1-1.3B-InP](https://modelscope.cn/models/PAI/Wan2.1-Fun-V1.1-1.3B-InP) | [code](/examples/wanvideo/model_inference/Wan2.1-Fun-V1.1-1.3B-InP.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.1-Fun-V1.1-1.3B-InP.py) | [code](/examples/wanvideo/model_training/full/Wan2.1-Fun-V1.1-1.3B-InP.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.1-Fun-V1.1-1.3B-InP.py) | [code](/examples/wanvideo/model_training/lora/Wan2.1-Fun-V1.1-1.3B-InP.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.1-Fun-V1.1-1.3B-InP.py) | +| Wan | [PAI/Wan2.1-Fun-V1.1-14B-InP](https://modelscope.cn/models/PAI/Wan2.1-Fun-V1.1-14B-InP) | [code](/examples/wanvideo/model_inference/Wan2.1-Fun-V1.1-14B-InP.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.1-Fun-V1.1-14B-InP.py) | [code](/examples/wanvideo/model_training/full/Wan2.1-Fun-V1.1-14B-InP.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.1-Fun-V1.1-14B-InP.py) | [code](/examples/wanvideo/model_training/lora/Wan2.1-Fun-V1.1-14B-InP.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.1-Fun-V1.1-14B-InP.py) | +| Wan | [PAI/Wan2.1-Fun-V1.1-1.3B-Control-Camera](https://modelscope.cn/models/PAI/Wan2.1-Fun-V1.1-1.3B-Control-Camera) | [code](/examples/wanvideo/model_inference/Wan2.1-Fun-V1.1-1.3B-Control-Camera.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.1-Fun-V1.1-1.3B-Control-Camera.py) | [code](/examples/wanvideo/model_training/full/Wan2.1-Fun-V1.1-1.3B-Control-Camera.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.1-Fun-V1.1-1.3B-Control-Camera.py) | [code](/examples/wanvideo/model_training/lora/Wan2.1-Fun-V1.1-1.3B-Control-Camera.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.1-Fun-V1.1-1.3B-Control-Camera.py) | +| Wan | [PAI/Wan2.1-Fun-V1.1-14B-Control-Camera](https://modelscope.cn/models/PAI/Wan2.1-Fun-V1.1-14B-Control-Camera) | [code](/examples/wanvideo/model_inference/Wan2.1-Fun-V1.1-14B-Control-Camera.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.1-Fun-V1.1-14B-Control-Camera.py) | [code](/examples/wanvideo/model_training/full/Wan2.1-Fun-V1.1-14B-Control-Camera.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.1-Fun-V1.1-14B-Control-Camera.py) | [code](/examples/wanvideo/model_training/lora/Wan2.1-Fun-V1.1-14B-Control-Camera.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.1-Fun-V1.1-14B-Control-Camera.py) | +| Wan | [DiffSynth-Studio/Wan2.1-1.3b-speedcontrol-v1](https://modelscope.cn/models/DiffSynth-Studio/Wan2.1-1.3b-speedcontrol-v1) | [code](/examples/wanvideo/model_inference/Wan2.1-1.3b-speedcontrol-v1.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.1-1.3b-speedcontrol-v1.py) | [code](/examples/wanvideo/model_training/full/Wan2.1-1.3b-speedcontrol-v1.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.1-1.3b-speedcontrol-v1.py) | [code](/examples/wanvideo/model_training/lora/Wan2.1-1.3b-speedcontrol-v1.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.1-1.3b-speedcontrol-v1.py) | +| Wan | [krea/krea-realtime-video](https://www.modelscope.cn/models/krea/krea-realtime-video) | [code](/examples/wanvideo/model_inference/krea-realtime-video.py) | [code](/examples/wanvideo/model_inference_low_vram/krea-realtime-video.py) | [code](/examples/wanvideo/model_training/full/krea-realtime-video.sh) | [code](/examples/wanvideo/model_training/validate_full/krea-realtime-video.py) | [code](/examples/wanvideo/model_training/lora/krea-realtime-video.sh) | [code](/examples/wanvideo/model_training/validate_lora/krea-realtime-video.py) | +| Wan | [meituan-longcat/LongCat-Video](https://www.modelscope.cn/models/meituan-longcat/LongCat-Video) | [code](/examples/wanvideo/model_inference/LongCat-Video.py) | [code](/examples/wanvideo/model_inference_low_vram/LongCat-Video.py) | [code](/examples/wanvideo/model_training/full/LongCat-Video.sh) | [code](/examples/wanvideo/model_training/validate_full/LongCat-Video.py) | [code](/examples/wanvideo/model_training/lora/LongCat-Video.sh) | [code](/examples/wanvideo/model_training/validate_lora/LongCat-Video.py) | +| Wan | [ByteDance/Video-As-Prompt-Wan2.1-14B](https://modelscope.cn/models/ByteDance/Video-As-Prompt-Wan2.1-14B) | [code](/examples/wanvideo/model_inference/Video-As-Prompt-Wan2.1-14B.py) | [code](/examples/wanvideo/model_inference_low_vram/Video-As-Prompt-Wan2.1-14B.py) | [code](/examples/wanvideo/model_training/full/Video-As-Prompt-Wan2.1-14B.sh) | [code](/examples/wanvideo/model_training/validate_full/Video-As-Prompt-Wan2.1-14B.py) | [code](/examples/wanvideo/model_training/lora/Video-As-Prompt-Wan2.1-14B.sh) | [code](/examples/wanvideo/model_training/validate_lora/Video-As-Prompt-Wan2.1-14B.py) | +| Wan | [Wan-AI/Wan2.2-T2V-A14B](https://modelscope.cn/models/Wan-AI/Wan2.2-T2V-A14B) | [code](/examples/wanvideo/model_inference/Wan2.2-T2V-A14B.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.2-T2V-A14B.py) | [code](/examples/wanvideo/model_training/full/Wan2.2-T2V-A14B.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.2-T2V-A14B.py) | [code](/examples/wanvideo/model_training/lora/Wan2.2-T2V-A14B.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.2-T2V-A14B.py) | +| Wan | [Wan-AI/Wan2.2-I2V-A14B](https://modelscope.cn/models/Wan-AI/Wan2.2-I2V-A14B) | [code](/examples/wanvideo/model_inference/Wan2.2-I2V-A14B.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.2-I2V-A14B.py) | [code](/examples/wanvideo/model_training/full/Wan2.2-I2V-A14B.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.2-I2V-A14B.py) | [code](/examples/wanvideo/model_training/lora/Wan2.2-I2V-A14B.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.2-I2V-A14B.py) | +| Wan | [Wan-AI/Wan2.2-TI2V-5B](https://modelscope.cn/models/Wan-AI/Wan2.2-TI2V-5B) | [code](/examples/wanvideo/model_inference/Wan2.2-TI2V-5B.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.2-TI2V-5B.py) | [code](/examples/wanvideo/model_training/full/Wan2.2-TI2V-5B.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.2-TI2V-5B.py) | [code](/examples/wanvideo/model_training/lora/Wan2.2-TI2V-5B.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.2-TI2V-5B.py) | +| Wan | [Wan-AI/Wan2.2-Animate-14B](https://www.modelscope.cn/models/Wan-AI/Wan2.2-Animate-14B) | [code](/examples/wanvideo/model_inference/Wan2.2-Animate-14B.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.2-Animate-14B.py) | [code](/examples/wanvideo/model_training/full/Wan2.2-Animate-14B.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.2-Animate-14B.py) | [code](/examples/wanvideo/model_training/lora/Wan2.2-Animate-14B.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.2-Animate-14B.py) | +| Wan | [Wan-AI/Wan2.2-Animate-2-14B](https://www.modelscope.cn/models/Wan-AI/Wan2.2-Animate-2-14B) | [code](/examples/wanvideo/model_inference/Wan2.2-Animate-2-14B.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.2-Animate-2-14B.py) | [code](/examples/wanvideo/model_training/full/Wan2.2-Animate-2-14B.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.2-Animate-2-14B.py) | [code](/examples/wanvideo/model_training/lora/Wan2.2-Animate-2-14B.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.2-Animate-2-14B.py) | +| Wan | [Wan-AI/Wan2.2-Animate-2-14B: Distilled](https://www.modelscope.cn/models/Wan-AI/Wan2.2-Animate-2-14B) | [code](/examples/wanvideo/model_inference/Wan2.2-Animate-2-14B-Distilled.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.2-Animate-2-14B-Distilled.py) | [code](/examples/wanvideo/model_training/full/Wan2.2-Animate-2-14B-Distilled.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.2-Animate-2-14B-Distilled.py) | [code](/examples/wanvideo/model_training/lora/Wan2.2-Animate-2-14B-Distilled.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.2-Animate-2-14B-Distilled.py) | +| Wan | [Wan-AI/Wan2.2-S2V-14B](https://www.modelscope.cn/models/Wan-AI/Wan2.2-S2V-14B) | [code](/examples/wanvideo/model_inference/Wan2.2-S2V-14B_multi_clips.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.2-S2V-14B_multi_clips.py) | [code](/examples/wanvideo/model_training/full/Wan2.2-S2V-14B.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.2-S2V-14B.py) | [code](/examples/wanvideo/model_training/lora/Wan2.2-S2V-14B.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.2-S2V-14B.py) | +| Wan | [PAI/Wan2.2-VACE-Fun-A14B](https://www.modelscope.cn/models/PAI/Wan2.2-VACE-Fun-A14B) | [code](/examples/wanvideo/model_inference/Wan2.2-VACE-Fun-A14B.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.2-VACE-Fun-A14B.py) | [code](/examples/wanvideo/model_training/full/Wan2.2-VACE-Fun-A14B.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.2-VACE-Fun-A14B.py) | [code](/examples/wanvideo/model_training/lora/Wan2.2-VACE-Fun-A14B.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.2-VACE-Fun-A14B.py) | +| Wan | [PAI/Wan2.2-Fun-A14B-InP](https://modelscope.cn/models/PAI/Wan2.2-Fun-A14B-InP) | [code](/examples/wanvideo/model_inference/Wan2.2-Fun-A14B-InP.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.2-Fun-A14B-InP.py) | [code](/examples/wanvideo/model_training/full/Wan2.2-Fun-A14B-InP.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.2-Fun-A14B-InP.py) | [code](/examples/wanvideo/model_training/lora/Wan2.2-Fun-A14B-InP.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.2-Fun-A14B-InP.py) | +| Wan | [PAI/Wan2.2-Fun-A14B-Control](https://modelscope.cn/models/PAI/Wan2.2-Fun-A14B-Control) | [code](/examples/wanvideo/model_inference/Wan2.2-Fun-A14B-Control.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.2-Fun-A14B-Control.py) | [code](/examples/wanvideo/model_training/full/Wan2.2-Fun-A14B-Control.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.2-Fun-A14B-Control.py) | [code](/examples/wanvideo/model_training/lora/Wan2.2-Fun-A14B-Control.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.2-Fun-A14B-Control.py) | +| Wan | [PAI/Wan2.2-Fun-A14B-Control-Camera](https://modelscope.cn/models/PAI/Wan2.2-Fun-A14B-Control-Camera) | [code](/examples/wanvideo/model_inference/Wan2.2-Fun-A14B-Control-Camera.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan2.2-Fun-A14B-Control-Camera.py) | [code](/examples/wanvideo/model_training/full/Wan2.2-Fun-A14B-Control-Camera.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan2.2-Fun-A14B-Control-Camera.py) | [code](/examples/wanvideo/model_training/lora/Wan2.2-Fun-A14B-Control-Camera.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan2.2-Fun-A14B-Control-Camera.py) | +| Wan | [openmoss/MOVA-360p](https://modelscope.cn/models/openmoss/MOVA-360p) | [code](/examples/mova/model_inference/MOVA-360p-I2AV.py) | [code](/examples/mova/model_inference_low_vram/MOVA-360p-I2AV.py) | [code](/examples/mova/model_training/full/MOVA-360P-I2AV.sh) | [code](/examples/mova/model_training/validate_full/MOVA-360p-I2AV.py) | [code](/examples/mova/model_training/lora/MOVA-360P-I2AV.sh) | [code](/examples/mova/model_training/validate_lora/MOVA-360p-I2AV.py) | +| Wan | [openmoss/MOVA-720p](https://modelscope.cn/models/openmoss/MOVA-720p) | [code](/examples/mova/model_inference/MOVA-720p-I2AV.py) | [code](/examples/mova/model_inference_low_vram/MOVA-720p-I2AV.py) | [code](/examples/mova/model_training/full/MOVA-720P-I2AV.sh) | [code](/examples/mova/model_training/validate_full/MOVA-720p-I2AV.py) | [code](/examples/mova/model_training/lora/MOVA-720P-I2AV.sh) | [code](/examples/mova/model_training/validate_lora/MOVA-720p-I2AV.py) | +| Wan | [Wan-AI/Wan-Dancer-14B (global model)](https://modelscope.cn/models/Wan-AI/Wan-Dancer-14B) | [code](/examples/wanvideo/model_inference/Wan-Dancer-14B-global.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan-Dancer-14B-global.py) | [code](/examples/wanvideo/model_training/full/Wan-Dancer-14B-global.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan-Dancer-14B-global.py) | [code](/examples/wanvideo/model_training/lora/Wan-Dancer-14B-global.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan-Dancer-14B-global.py) | +| Wan | [Wan-AI/Wan-Dancer-14B (local model)](https://modelscope.cn/models/Wan-AI/Wan-Dancer-14B) | [code](/examples/wanvideo/model_inference/Wan-Dancer-14B-local.py) | [code](/examples/wanvideo/model_inference_low_vram/Wan-Dancer-14B-local.py) | [code](/examples/wanvideo/model_training/full/Wan-Dancer-14B-local.sh) | [code](/examples/wanvideo/model_training/validate_full/Wan-Dancer-14B-local.py) | [code](/examples/wanvideo/model_training/lora/Wan-Dancer-14B-local.sh) | [code](/examples/wanvideo/model_training/validate_lora/Wan-Dancer-14B-local.py) | +| FLUX.1 | [black-forest-labs/FLUX.1-dev](https://www.modelscope.cn/models/black-forest-labs/FLUX.1-dev) | [code](/examples/flux/model_inference/FLUX.1-dev.py) | [code](/examples/flux/model_inference_low_vram/FLUX.1-dev.py) | [code](/examples/flux/model_training/full/FLUX.1-dev.sh) | [code](/examples/flux/model_training/validate_full/FLUX.1-dev.py) | [code](/examples/flux/model_training/lora/FLUX.1-dev.sh) | [code](/examples/flux/model_training/validate_lora/FLUX.1-dev.py) | +| FLUX.1 | [black-forest-labs/FLUX.1-Krea-dev](https://www.modelscope.cn/models/black-forest-labs/FLUX.1-Krea-dev) | [code](/examples/flux/model_inference/FLUX.1-Krea-dev.py) | [code](/examples/flux/model_inference_low_vram/FLUX.1-Krea-dev.py) | [code](/examples/flux/model_training/full/FLUX.1-Krea-dev.sh) | [code](/examples/flux/model_training/validate_full/FLUX.1-Krea-dev.py) | [code](/examples/flux/model_training/lora/FLUX.1-Krea-dev.sh) | [code](/examples/flux/model_training/validate_lora/FLUX.1-Krea-dev.py) | +| FLUX.1 | [black-forest-labs/FLUX.1-Kontext-dev](https://www.modelscope.cn/models/black-forest-labs/FLUX.1-Kontext-dev) | [code](/examples/flux/model_inference/FLUX.1-Kontext-dev.py) | [code](/examples/flux/model_inference_low_vram/FLUX.1-Kontext-dev.py) | [code](/examples/flux/model_training/full/FLUX.1-Kontext-dev.sh) | [code](/examples/flux/model_training/validate_full/FLUX.1-Kontext-dev.py) | [code](/examples/flux/model_training/lora/FLUX.1-Kontext-dev.sh) | [code](/examples/flux/model_training/validate_lora/FLUX.1-Kontext-dev.py) | +| FLUX.1 | [black-forest-labs/FLUX.1-Fill-dev](https://www.modelscope.cn/models/black-forest-labs/FLUX.1-Fill-dev) | [code](/examples/flux/model_inference/FLUX.1-Fill-dev.py) | [code](/examples/flux/model_inference_low_vram/FLUX.1-Fill-dev.py) | [code](/examples/flux/model_training/full/FLUX.1-Fill-dev.sh) | [code](/examples/flux/model_training/validate_full/FLUX.1-Fill-dev.py) | [code](/examples/flux/model_training/lora/FLUX.1-Fill-dev.sh) | [code](/examples/flux/model_training/validate_lora/FLUX.1-Fill-dev.py) | +| FLUX.1 | [black-forest-labs/FLUX.1-Redux-dev](https://www.modelscope.cn/models/black-forest-labs/FLUX.1-Redux-dev) | [code](/examples/flux/model_inference/FLUX.1-Redux-dev.py) | [code](/examples/flux/model_inference_low_vram/FLUX.1-Redux-dev.py) | [code](/examples/flux/model_training/full/FLUX.1-Redux-dev.sh) | [code](/examples/flux/model_training/validate_full/FLUX.1-Redux-dev.py) | [code](/examples/flux/model_training/lora/FLUX.1-Redux-dev.sh) | [code](/examples/flux/model_training/validate_lora/FLUX.1-Redux-dev.py) | +| FLUX.1 | [HuanJue/Insert-Anything](https://www.modelscope.cn/models/HuanJue/Insert-Anything) | [code](/examples/flux/model_inference/Insert-Anything.py) | [code](/examples/flux/model_inference_low_vram/Insert-Anything.py) | - | - | [code](/examples/flux/model_training/lora/Insert-Anything.sh) | [code](/examples/flux/model_training/validate_lora/Insert-Anything.py) | +| FLUX.1 | [alimama-creative/FLUX.1-dev-Controlnet-Inpainting-Beta](https://www.modelscope.cn/models/alimama-creative/FLUX.1-dev-Controlnet-Inpainting-Beta) | [code](/examples/flux/model_inference/FLUX.1-dev-Controlnet-Inpainting-Beta.py) | [code](/examples/flux/model_inference_low_vram/FLUX.1-dev-Controlnet-Inpainting-Beta.py) | [code](/examples/flux/model_training/full/FLUX.1-dev-Controlnet-Inpainting-Beta.sh) | [code](/examples/flux/model_training/validate_full/FLUX.1-dev-Controlnet-Inpainting-Beta.py) | [code](/examples/flux/model_training/lora/FLUX.1-dev-Controlnet-Inpainting-Beta.sh) | [code](/examples/flux/model_training/validate_lora/FLUX.1-dev-Controlnet-Inpainting-Beta.py) | +| FLUX.1 | [InstantX/FLUX.1-dev-Controlnet-Union-alpha](https://www.modelscope.cn/models/InstantX/FLUX.1-dev-Controlnet-Union-alpha) | [code](/examples/flux/model_inference/FLUX.1-dev-Controlnet-Union-alpha.py) | [code](/examples/flux/model_inference_low_vram/FLUX.1-dev-Controlnet-Union-alpha.py) | [code](/examples/flux/model_training/full/FLUX.1-dev-Controlnet-Union-alpha.sh) | [code](/examples/flux/model_training/validate_full/FLUX.1-dev-Controlnet-Union-alpha.py) | [code](/examples/flux/model_training/lora/FLUX.1-dev-Controlnet-Union-alpha.sh) | [code](/examples/flux/model_training/validate_lora/FLUX.1-dev-Controlnet-Union-alpha.py) | +| FLUX.1 | [jasperai/Flux.1-dev-Controlnet-Upscaler](https://www.modelscope.cn/models/jasperai/Flux.1-dev-Controlnet-Upscaler) | [code](/examples/flux/model_inference/FLUX.1-dev-Controlnet-Upscaler.py) | [code](/examples/flux/model_inference_low_vram/FLUX.1-dev-Controlnet-Upscaler.py) | [code](/examples/flux/model_training/full/FLUX.1-dev-Controlnet-Upscaler.sh) | [code](/examples/flux/model_training/validate_full/FLUX.1-dev-Controlnet-Upscaler.py) | [code](/examples/flux/model_training/lora/FLUX.1-dev-Controlnet-Upscaler.sh) | [code](/examples/flux/model_training/validate_lora/FLUX.1-dev-Controlnet-Upscaler.py) | +| FLUX.1 | [InstantX/FLUX.1-dev-IP-Adapter](https://www.modelscope.cn/models/InstantX/FLUX.1-dev-IP-Adapter) | [code](/examples/flux/model_inference/FLUX.1-dev-IP-Adapter.py) | [code](/examples/flux/model_inference_low_vram/FLUX.1-dev-IP-Adapter.py) | [code](/examples/flux/model_training/full/FLUX.1-dev-IP-Adapter.sh) | [code](/examples/flux/model_training/validate_full/FLUX.1-dev-IP-Adapter.py) | [code](/examples/flux/model_training/lora/FLUX.1-dev-IP-Adapter.sh) | [code](/examples/flux/model_training/validate_lora/FLUX.1-dev-IP-Adapter.py) | +| FLUX.1 | [ByteDance/InfiniteYou](https://www.modelscope.cn/models/ByteDance/InfiniteYou) | [code](/examples/flux/model_inference/FLUX.1-dev-InfiniteYou.py) | [code](/examples/flux/model_inference_low_vram/FLUX.1-dev-InfiniteYou.py) | [code](/examples/flux/model_training/full/FLUX.1-dev-InfiniteYou.sh) | [code](/examples/flux/model_training/validate_full/FLUX.1-dev-InfiniteYou.py) | [code](/examples/flux/model_training/lora/FLUX.1-dev-InfiniteYou.sh) | [code](/examples/flux/model_training/validate_lora/FLUX.1-dev-InfiniteYou.py) | +| FLUX.1 | [DiffSynth-Studio/Eligen](https://www.modelscope.cn/models/DiffSynth-Studio/Eligen) | [code](/examples/flux/model_inference/FLUX.1-dev-EliGen.py) | [code](/examples/flux/model_inference_low_vram/FLUX.1-dev-EliGen.py) | - | - | [code](/examples/flux/model_training/lora/FLUX.1-dev-EliGen.sh) | [code](/examples/flux/model_training/validate_lora/FLUX.1-dev-EliGen.py) | +| FLUX.1 | [DiffSynth-Studio/LoRA-Encoder-FLUX.1-Dev](https://www.modelscope.cn/models/DiffSynth-Studio/LoRA-Encoder-FLUX.1-Dev) | [code](/examples/flux/model_inference/FLUX.1-dev-LoRA-Encoder.py) | [code](/examples/flux/model_inference_low_vram/FLUX.1-dev-LoRA-Encoder.py) | [code](/examples/flux/model_training/full/FLUX.1-dev-LoRA-Encoder.sh) | [code](/examples/flux/model_training/validate_full/FLUX.1-dev-LoRA-Encoder.py) | - | - | +| FLUX.1 | [DiffSynth-Studio/LoRAFusion-preview-FLUX.1-dev](https://modelscope.cn/models/DiffSynth-Studio/LoRAFusion-preview-FLUX.1-dev) | [code](/examples/flux/model_inference/FLUX.1-dev-LoRA-Fusion.py) | - | - | - | - | - | +| FLUX.1 | [stepfun-ai/Step1X-Edit](https://www.modelscope.cn/models/stepfun-ai/Step1X-Edit) | [code](/examples/flux/model_inference/Step1X-Edit.py) | [code](/examples/flux/model_inference_low_vram/Step1X-Edit.py) | [code](/examples/flux/model_training/full/Step1X-Edit.sh) | [code](/examples/flux/model_training/validate_full/Step1X-Edit.py) | [code](/examples/flux/model_training/lora/Step1X-Edit.sh) | [code](/examples/flux/model_training/validate_lora/Step1X-Edit.py) | +| FLUX.1 | [ostris/Flex.2-preview](https://www.modelscope.cn/models/ostris/Flex.2-preview) | [code](/examples/flux/model_inference/FLEX.2-preview.py) | [code](/examples/flux/model_inference_low_vram/FLEX.2-preview.py) | [code](/examples/flux/model_training/full/FLEX.2-preview.sh) | [code](/examples/flux/model_training/validate_full/FLEX.2-preview.py) | [code](/examples/flux/model_training/lora/FLEX.2-preview.sh) | [code](/examples/flux/model_training/validate_lora/FLEX.2-preview.py) | +| FLUX.1 | [DiffSynth-Studio/Nexus-GenV2](https://www.modelscope.cn/models/DiffSynth-Studio/Nexus-GenV2) | [code](/examples/flux/model_inference/Nexus-Gen-Editing.py) | [code](/examples/flux/model_inference_low_vram/Nexus-Gen-Editing.py) | [code](/examples/flux/model_training/full/Nexus-Gen.sh) | [code](/examples/flux/model_training/validate_full/Nexus-Gen.py) | [code](/examples/flux/model_training/lora/Nexus-Gen.sh) | [code](/examples/flux/model_training/validate_lora/Nexus-Gen.py) | +| Stable Diffusion XL | [stabilityai/stable-diffusion-xl-base-1.0](https://www.modelscope.cn/models/stabilityai/stable-diffusion-xl-base-1.0) | [code](/examples/stable_diffusion_xl/model_inference/stable-diffusion-xl-base-1.0.py) | [code](/examples/stable_diffusion_xl/model_inference_low_vram/stable-diffusion-xl-base-1.0.py) | [code](/examples/stable_diffusion_xl/model_training/full/stable-diffusion-xl-base-1.0.sh) | [code](/examples/stable_diffusion_xl/model_training/validate_full/stable-diffusion-xl-base-1.0.py) | [code](/examples/stable_diffusion_xl/model_training/lora/stable-diffusion-xl-base-1.0.sh) | [code](/examples/stable_diffusion_xl/model_training/validate_lora/stable-diffusion-xl-base-1.0.py) | +| Stable Diffusion | [AI-ModelScope/stable-diffusion-v1-5](https://www.modelscope.cn/models/AI-ModelScope/stable-diffusion-v1-5) | [code](/examples/stable_diffusion/model_inference/stable-diffusion-v1-5.py) | [code](/examples/stable_diffusion/model_inference_low_vram/stable-diffusion-v1-5.py) | [code](/examples/stable_diffusion/model_training/full/stable-diffusion-v1-5.sh) | [code](/examples/stable_diffusion/model_training/validate_full/stable-diffusion-v1-5.py) | [code](/examples/stable_diffusion/model_training/lora/stable-diffusion-v1-5.sh) | [code](/examples/stable_diffusion/model_training/validate_lora/stable-diffusion-v1-5.py) | diff --git a/diffsynth.egg-info/SOURCES.txt b/diffsynth.egg-info/SOURCES.txt new file mode 100644 index 0000000000000000000000000000000000000000..28af0578177f89307a5e975217338c358221057a --- /dev/null +++ b/diffsynth.egg-info/SOURCES.txt @@ -0,0 +1,271 @@ +LICENSE +README.md +pyproject.toml +diffsynth/__init__.py +diffsynth/version.py +diffsynth.egg-info/PKG-INFO +diffsynth.egg-info/SOURCES.txt +diffsynth.egg-info/dependency_links.txt +diffsynth.egg-info/requires.txt +diffsynth.egg-info/top_level.txt +diffsynth/configs/__init__.py +diffsynth/configs/model_configs.py +diffsynth/configs/vram_management_module_maps.py +diffsynth/core/__init__.py +diffsynth/core/attention/__init__.py +diffsynth/core/attention/attention.py +diffsynth/core/data/__init__.py +diffsynth/core/data/operators.py +diffsynth/core/data/unified_dataset.py +diffsynth/core/device/__init__.py +diffsynth/core/device/npu_compatible_device.py +diffsynth/core/gradient/__init__.py +diffsynth/core/gradient/gradient_checkpoint.py +diffsynth/core/loader/__init__.py +diffsynth/core/loader/config.py +diffsynth/core/loader/file.py +diffsynth/core/loader/model.py +diffsynth/core/npu_patch/npu_fused_operator.py +diffsynth/core/offload_training/__init__.py +diffsynth/core/offload_training/manager.py +diffsynth/core/offload_training/memory_buffer.py +diffsynth/core/offload_training/offloader.py +diffsynth/core/quant/__init__.py +diffsynth/core/quant/base.py +diffsynth/core/quant/config.py +diffsynth/core/quant/backends/__init__.py +diffsynth/core/quant/backends/bitsandbytes.py +diffsynth/core/quant/backends/comfy_kitchen.py +diffsynth/core/quant/backends/torchao.py +diffsynth/core/vram/__init__.py +diffsynth/core/vram/disk_map.py +diffsynth/core/vram/initialization.py +diffsynth/core/vram/layers.py +diffsynth/diffusion/__init__.py +diffsynth/diffusion/base_pipeline.py +diffsynth/diffusion/ddim_scheduler.py +diffsynth/diffusion/dmd2.py +diffsynth/diffusion/flow_match.py +diffsynth/diffusion/logger.py +diffsynth/diffusion/loss.py +diffsynth/diffusion/parsers.py +diffsynth/diffusion/runner.py +diffsynth/diffusion/template.py +diffsynth/diffusion/training_module.py +diffsynth/metrics/__init__.py +diffsynth/metrics/aesthetic.py +diffsynth/metrics/base.py +diffsynth/metrics/bioclip.py +diffsynth/metrics/clip.py +diffsynth/metrics/fid.py +diffsynth/metrics/hpsv2.py +diffsynth/metrics/hpsv3.py +diffsynth/metrics/image_reward.py +diffsynth/metrics/lpips.py +diffsynth/metrics/pickscore.py +diffsynth/metrics/qwen_image_bench.py +diffsynth/metrics/unified_reward_2.py +diffsynth/metrics/unified_reward_edit.py +diffsynth/models/ace_step_conditioner.py +diffsynth/models/ace_step_dit.py +diffsynth/models/ace_step_residual_fsq.py +diffsynth/models/ace_step_text_encoder.py +diffsynth/models/ace_step_tokenizer.py +diffsynth/models/ace_step_vae.py +diffsynth/models/aesthetic.py +diffsynth/models/anima_dit.py +diffsynth/models/bioclip.py +diffsynth/models/boogu_image_dit.py +diffsynth/models/clip.py +diffsynth/models/demucs.py +diffsynth/models/dinov3_image_encoder.py +diffsynth/models/ernie_image_dit.py +diffsynth/models/ernie_image_text_encoder.py +diffsynth/models/fid.py +diffsynth/models/flux2_dit.py +diffsynth/models/flux2_text_encoder.py +diffsynth/models/flux2_vae.py +diffsynth/models/flux_controlnet.py +diffsynth/models/flux_dit.py +diffsynth/models/flux_infiniteyou.py +diffsynth/models/flux_ipadapter.py +diffsynth/models/flux_lora_encoder.py +diffsynth/models/flux_lora_patcher.py +diffsynth/models/flux_redux.py +diffsynth/models/flux_text_encoder_clip.py +diffsynth/models/flux_text_encoder_t5.py +diffsynth/models/flux_vae.py +diffsynth/models/flux_value_control.py +diffsynth/models/general_modules.py +diffsynth/models/hidream_common.py +diffsynth/models/hidream_o1_image_dit.py +diffsynth/models/hpsv2.py +diffsynth/models/hpsv3.py +diffsynth/models/ideogram4_dit.py +diffsynth/models/ideogram4_text_encoder.py +diffsynth/models/ideogram4_vae.py +diffsynth/models/image_reward.py +diffsynth/models/joyai_image_dit.py +diffsynth/models/joyai_image_text_encoder.py +diffsynth/models/krea2_dit.py +diffsynth/models/krea2_text_encoder.py +diffsynth/models/lingbot_video_dit.py +diffsynth/models/longcat_video_dit.py +diffsynth/models/lpips.py +diffsynth/models/ltx2_audio_vae.py +diffsynth/models/ltx2_common.py +diffsynth/models/ltx2_dit.py +diffsynth/models/ltx2_text_encoder.py +diffsynth/models/ltx2_upsampler.py +diffsynth/models/ltx2_video_vae.py +diffsynth/models/minimax_h3_audio_vae.py +diffsynth/models/minimax_h3_dit.py +diffsynth/models/minimax_h3_dit_comfy.py +diffsynth/models/minimax_h3_text_encoder.py +diffsynth/models/minimax_h3_video_vae.py +diffsynth/models/minimax_music3_condition_encoder.py +diffsynth/models/minimax_music3_dit.py +diffsynth/models/minimax_music3_rvq_depth_decoder.py +diffsynth/models/minimax_music3_text_encoder.py +diffsynth/models/minimax_music3_vocoder.py +diffsynth/models/model_loader.py +diffsynth/models/mova_audio_dit.py +diffsynth/models/mova_audio_vae.py +diffsynth/models/mova_dual_tower_bridge.py +diffsynth/models/nexus_gen.py +diffsynth/models/nexus_gen_ar_model.py +diffsynth/models/nexus_gen_projector.py +diffsynth/models/pickscore.py +diffsynth/models/qwen_image_bench.py +diffsynth/models/qwen_image_controlnet.py +diffsynth/models/qwen_image_dit.py +diffsynth/models/qwen_image_image2lora.py +diffsynth/models/qwen_image_text_encoder.py +diffsynth/models/qwen_image_vae.py +diffsynth/models/qwen_video_edit_dit.py +diffsynth/models/sd_text_encoder.py +diffsynth/models/siglip2_image_encoder.py +diffsynth/models/stable_diffusion_text_encoder.py +diffsynth/models/stable_diffusion_unet.py +diffsynth/models/stable_diffusion_vae.py +diffsynth/models/stable_diffusion_xl_text_encoder.py +diffsynth/models/stable_diffusion_xl_unet.py +diffsynth/models/step1x_connector.py +diffsynth/models/step1x_text_encoder.py +diffsynth/models/unified_reward_2.py +diffsynth/models/unified_reward_edit.py +diffsynth/models/wan_animate_2_dit.py +diffsynth/models/wan_video_animate_adapter.py +diffsynth/models/wan_video_camera_controller.py +diffsynth/models/wan_video_dit.py +diffsynth/models/wan_video_dit_s2v.py +diffsynth/models/wan_video_image_encoder.py +diffsynth/models/wan_video_mot.py +diffsynth/models/wan_video_motion_controller.py +diffsynth/models/wan_video_text_encoder.py +diffsynth/models/wan_video_vace.py +diffsynth/models/wan_video_vae.py +diffsynth/models/wantodance.py +diffsynth/models/wav2vec.py +diffsynth/models/z_image_controlnet.py +diffsynth/models/z_image_dit.py +diffsynth/models/z_image_image2lora.py +diffsynth/models/z_image_text_encoder.py +diffsynth/pipelines/ace_step.py +diffsynth/pipelines/anima_image.py +diffsynth/pipelines/boogu_image.py +diffsynth/pipelines/ernie_image.py +diffsynth/pipelines/flux2_image.py +diffsynth/pipelines/flux_image.py +diffsynth/pipelines/hidream_o1_image.py +diffsynth/pipelines/ideogram4.py +diffsynth/pipelines/joyai_image.py +diffsynth/pipelines/krea2.py +diffsynth/pipelines/lingbot_video.py +diffsynth/pipelines/ltx2_audio_video.py +diffsynth/pipelines/minimax_h3_audio_video.py +diffsynth/pipelines/minimax_music3.py +diffsynth/pipelines/mova_audio_video.py +diffsynth/pipelines/qwen_image.py +diffsynth/pipelines/qwen_video_edit.py +diffsynth/pipelines/stable_diffusion.py +diffsynth/pipelines/stable_diffusion_xl.py +diffsynth/pipelines/wan_video.py +diffsynth/pipelines/z_image.py +diffsynth/utils/controlnet/__init__.py +diffsynth/utils/controlnet/annotator.py +diffsynth/utils/controlnet/controlnet_input.py +diffsynth/utils/data/__init__.py +diffsynth/utils/data/audio.py +diffsynth/utils/data/audio_video.py +diffsynth/utils/data/media_io_ltx2.py +diffsynth/utils/data/minimax_h3.py +diffsynth/utils/demucs/__init__.py +diffsynth/utils/dequantizer/__init__.py +diffsynth/utils/lora/__init__.py +diffsynth/utils/lora/flux.py +diffsynth/utils/lora/flux_timestep.py +diffsynth/utils/lora/general.py +diffsynth/utils/lora/krea2.py +diffsynth/utils/lora/merge.py +diffsynth/utils/lora/minimax_h3.py +diffsynth/utils/lora/reset_rank.py +diffsynth/utils/lora/sdxl.py +diffsynth/utils/quant/serialization.py +diffsynth/utils/ses/__init__.py +diffsynth/utils/ses/ses.py +diffsynth/utils/state_dict_converters/__init__.py +diffsynth/utils/state_dict_converters/ace_step_conditioner.py +diffsynth/utils/state_dict_converters/ace_step_dit.py +diffsynth/utils/state_dict_converters/ace_step_text_encoder.py +diffsynth/utils/state_dict_converters/ace_step_tokenizer.py +diffsynth/utils/state_dict_converters/anima_dit.py +diffsynth/utils/state_dict_converters/dino_v3.py +diffsynth/utils/state_dict_converters/ernie_image_text_encoder.py +diffsynth/utils/state_dict_converters/flux2_text_encoder.py +diffsynth/utils/state_dict_converters/flux_controlnet.py +diffsynth/utils/state_dict_converters/flux_dit.py +diffsynth/utils/state_dict_converters/flux_infiniteyou.py +diffsynth/utils/state_dict_converters/flux_ipadapter.py +diffsynth/utils/state_dict_converters/flux_text_encoder_clip.py +diffsynth/utils/state_dict_converters/flux_text_encoder_t5.py +diffsynth/utils/state_dict_converters/flux_vae.py +diffsynth/utils/state_dict_converters/ideogram4_text_encoder.py +diffsynth/utils/state_dict_converters/image_metrics.py +diffsynth/utils/state_dict_converters/joyai_image_text_encoder.py +diffsynth/utils/state_dict_converters/krea2_dit.py +diffsynth/utils/state_dict_converters/krea2_text_encoder.py +diffsynth/utils/state_dict_converters/lingbot_video_dit.py +diffsynth/utils/state_dict_converters/ltx2_audio_vae.py +diffsynth/utils/state_dict_converters/ltx2_dit.py +diffsynth/utils/state_dict_converters/ltx2_text_encoder.py +diffsynth/utils/state_dict_converters/ltx2_video_vae.py +diffsynth/utils/state_dict_converters/minimax_h3_audio_vae.py +diffsynth/utils/state_dict_converters/minimax_h3_text_encoder.py +diffsynth/utils/state_dict_converters/minimax_h3_video_vae.py +diffsynth/utils/state_dict_converters/minimax_music3_text_encoder.py +diffsynth/utils/state_dict_converters/nexus_gen.py +diffsynth/utils/state_dict_converters/nexus_gen_projector.py +diffsynth/utils/state_dict_converters/qwen_image_text_encoder.py +diffsynth/utils/state_dict_converters/qwen_video_edit.py +diffsynth/utils/state_dict_converters/sdxl.py +diffsynth/utils/state_dict_converters/sdxl_text_encoder.py +diffsynth/utils/state_dict_converters/sdxl_text_encoder_2.py +diffsynth/utils/state_dict_converters/sdxl_vae.py +diffsynth/utils/state_dict_converters/stable_diffusion_text_encoder.py +diffsynth/utils/state_dict_converters/stable_diffusion_vae.py +diffsynth/utils/state_dict_converters/stable_diffusion_xl_text_encoder.py +diffsynth/utils/state_dict_converters/step1x_connector.py +diffsynth/utils/state_dict_converters/wan_video_animate_adapter.py +diffsynth/utils/state_dict_converters/wan_video_dit.py +diffsynth/utils/state_dict_converters/wan_video_image_encoder.py +diffsynth/utils/state_dict_converters/wan_video_mot.py +diffsynth/utils/state_dict_converters/wan_video_vace.py +diffsynth/utils/state_dict_converters/wan_video_vae.py +diffsynth/utils/state_dict_converters/wans2v_audio_encoder.py +diffsynth/utils/state_dict_converters/z_image_dit.py +diffsynth/utils/state_dict_converters/z_image_text_encoder.py +diffsynth/utils/tile/__init__.py +diffsynth/utils/tile/tile_worker.py +diffsynth/utils/xfuser/__init__.py +diffsynth/utils/xfuser/xdit_context_parallel.py \ No newline at end of file diff --git a/diffsynth.egg-info/dependency_links.txt b/diffsynth.egg-info/dependency_links.txt new file mode 100644 index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc --- /dev/null +++ b/diffsynth.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/diffsynth.egg-info/requires.txt b/diffsynth.egg-info/requires.txt new file mode 100644 index 0000000000000000000000000000000000000000..fa3d33323a3c10ae6285d57b13cab2c3547b9f74 --- /dev/null +++ b/diffsynth.egg-info/requires.txt @@ -0,0 +1,64 @@ +torch==2.6.0 +torchvision +transformers +imageio[ffmpeg] +safetensors +einops +modelscope +ftfy +pandas +accelerate +peft + +[all] +av +torchaudio +torchcodec +librosa +bitsandbytes +comfy-kitchen +torchao>=0.16 +deepspeed +tensorboard +swanlab +wandb + +[audio] +av +torchaudio +torchcodec +librosa + +[infiniteyou] +insightface +facexlib + +[logger] +tensorboard +swanlab +wandb + +[nexusgen] +qwen_vl_utils +transformers==4.49.0 + +[npu] +torch==2.7.1+cpu +torch-npu==2.7.1 +torchvision==0.22.1+cpu + +[npu_aarch64] +torch==2.7.1 +torch-npu==2.7.1 +torchvision==0.22.1 + +[quant] +bitsandbytes +comfy-kitchen +torchao>=0.16 + +[ses] +pywt + +[training] +deepspeed diff --git a/diffsynth.egg-info/top_level.txt b/diffsynth.egg-info/top_level.txt new file mode 100644 index 0000000000000000000000000000000000000000..a4c845e23f3cd1bc9c56115f1c9a0b1a0c6b68bc --- /dev/null +++ b/diffsynth.egg-info/top_level.txt @@ -0,0 +1 @@ +diffsynth diff --git a/diffsynth/utils/state_dict_converters/sdxl_text_encoder_2.py b/diffsynth/utils/state_dict_converters/sdxl_text_encoder_2.py new file mode 100644 index 0000000000000000000000000000000000000000..f8a816898107933bd1523cd4ece4d6655eee1634 --- /dev/null +++ b/diffsynth/utils/state_dict_converters/sdxl_text_encoder_2.py @@ -0,0 +1,345 @@ +rename_dict = { + "model.text_model.embeddings.position_embedding.weight": "conditioner.embedders.1.model.positional_embedding", + "model.text_model.embeddings.token_embedding.weight": "conditioner.embedders.1.model.token_embedding.weight", + "model.text_model.encoder.layers.0.layer_norm1.bias": "conditioner.embedders.1.model.transformer.resblocks.0.ln_1.bias", + "model.text_model.encoder.layers.0.layer_norm1.weight": "conditioner.embedders.1.model.transformer.resblocks.0.ln_1.weight", + "model.text_model.encoder.layers.0.layer_norm2.bias": "conditioner.embedders.1.model.transformer.resblocks.0.ln_2.bias", + "model.text_model.encoder.layers.0.layer_norm2.weight": "conditioner.embedders.1.model.transformer.resblocks.0.ln_2.weight", + "model.text_model.encoder.layers.0.mlp.fc1.bias": "conditioner.embedders.1.model.transformer.resblocks.0.mlp.c_fc.bias", + "model.text_model.encoder.layers.0.mlp.fc1.weight": "conditioner.embedders.1.model.transformer.resblocks.0.mlp.c_fc.weight", + "model.text_model.encoder.layers.0.mlp.fc2.bias": "conditioner.embedders.1.model.transformer.resblocks.0.mlp.c_proj.bias", + "model.text_model.encoder.layers.0.mlp.fc2.weight": "conditioner.embedders.1.model.transformer.resblocks.0.mlp.c_proj.weight", + "model.text_model.encoder.layers.0.self_attn.out_proj.bias": "conditioner.embedders.1.model.transformer.resblocks.0.attn.out_proj.bias", + "model.text_model.encoder.layers.0.self_attn.out_proj.weight": "conditioner.embedders.1.model.transformer.resblocks.0.attn.out_proj.weight", + "model.text_model.encoder.layers.1.layer_norm1.bias": "conditioner.embedders.1.model.transformer.resblocks.1.ln_1.bias", + "model.text_model.encoder.layers.1.layer_norm1.weight": "conditioner.embedders.1.model.transformer.resblocks.1.ln_1.weight", + "model.text_model.encoder.layers.1.layer_norm2.bias": "conditioner.embedders.1.model.transformer.resblocks.1.ln_2.bias", + "model.text_model.encoder.layers.1.layer_norm2.weight": "conditioner.embedders.1.model.transformer.resblocks.1.ln_2.weight", + "model.text_model.encoder.layers.1.mlp.fc1.bias": "conditioner.embedders.1.model.transformer.resblocks.1.mlp.c_fc.bias", + "model.text_model.encoder.layers.1.mlp.fc1.weight": "conditioner.embedders.1.model.transformer.resblocks.1.mlp.c_fc.weight", + "model.text_model.encoder.layers.1.mlp.fc2.bias": "conditioner.embedders.1.model.transformer.resblocks.1.mlp.c_proj.bias", + "model.text_model.encoder.layers.1.mlp.fc2.weight": "conditioner.embedders.1.model.transformer.resblocks.1.mlp.c_proj.weight", + "model.text_model.encoder.layers.1.self_attn.out_proj.bias": "conditioner.embedders.1.model.transformer.resblocks.1.attn.out_proj.bias", + "model.text_model.encoder.layers.1.self_attn.out_proj.weight": "conditioner.embedders.1.model.transformer.resblocks.1.attn.out_proj.weight", + "model.text_model.encoder.layers.10.layer_norm1.bias": "conditioner.embedders.1.model.transformer.resblocks.10.ln_1.bias", + "model.text_model.encoder.layers.10.layer_norm1.weight": "conditioner.embedders.1.model.transformer.resblocks.10.ln_1.weight", + "model.text_model.encoder.layers.10.layer_norm2.bias": "conditioner.embedders.1.model.transformer.resblocks.10.ln_2.bias", + "model.text_model.encoder.layers.10.layer_norm2.weight": "conditioner.embedders.1.model.transformer.resblocks.10.ln_2.weight", + "model.text_model.encoder.layers.10.mlp.fc1.bias": "conditioner.embedders.1.model.transformer.resblocks.10.mlp.c_fc.bias", + "model.text_model.encoder.layers.10.mlp.fc1.weight": "conditioner.embedders.1.model.transformer.resblocks.10.mlp.c_fc.weight", + "model.text_model.encoder.layers.10.mlp.fc2.bias": "conditioner.embedders.1.model.transformer.resblocks.10.mlp.c_proj.bias", + "model.text_model.encoder.layers.10.mlp.fc2.weight": "conditioner.embedders.1.model.transformer.resblocks.10.mlp.c_proj.weight", + "model.text_model.encoder.layers.10.self_attn.out_proj.bias": "conditioner.embedders.1.model.transformer.resblocks.10.attn.out_proj.bias", + "model.text_model.encoder.layers.10.self_attn.out_proj.weight": "conditioner.embedders.1.model.transformer.resblocks.10.attn.out_proj.weight", + "model.text_model.encoder.layers.11.layer_norm1.bias": "conditioner.embedders.1.model.transformer.resblocks.11.ln_1.bias", + "model.text_model.encoder.layers.11.layer_norm1.weight": "conditioner.embedders.1.model.transformer.resblocks.11.ln_1.weight", + "model.text_model.encoder.layers.11.layer_norm2.bias": "conditioner.embedders.1.model.transformer.resblocks.11.ln_2.bias", + "model.text_model.encoder.layers.11.layer_norm2.weight": "conditioner.embedders.1.model.transformer.resblocks.11.ln_2.weight", + "model.text_model.encoder.layers.11.mlp.fc1.bias": "conditioner.embedders.1.model.transformer.resblocks.11.mlp.c_fc.bias", + "model.text_model.encoder.layers.11.mlp.fc1.weight": "conditioner.embedders.1.model.transformer.resblocks.11.mlp.c_fc.weight", + "model.text_model.encoder.layers.11.mlp.fc2.bias": "conditioner.embedders.1.model.transformer.resblocks.11.mlp.c_proj.bias", + "model.text_model.encoder.layers.11.mlp.fc2.weight": "conditioner.embedders.1.model.transformer.resblocks.11.mlp.c_proj.weight", + "model.text_model.encoder.layers.11.self_attn.out_proj.bias": "conditioner.embedders.1.model.transformer.resblocks.11.attn.out_proj.bias", + "model.text_model.encoder.layers.11.self_attn.out_proj.weight": "conditioner.embedders.1.model.transformer.resblocks.11.attn.out_proj.weight", + "model.text_model.encoder.layers.12.layer_norm1.bias": "conditioner.embedders.1.model.transformer.resblocks.12.ln_1.bias", + "model.text_model.encoder.layers.12.layer_norm1.weight": "conditioner.embedders.1.model.transformer.resblocks.12.ln_1.weight", + "model.text_model.encoder.layers.12.layer_norm2.bias": "conditioner.embedders.1.model.transformer.resblocks.12.ln_2.bias", + "model.text_model.encoder.layers.12.layer_norm2.weight": "conditioner.embedders.1.model.transformer.resblocks.12.ln_2.weight", + "model.text_model.encoder.layers.12.mlp.fc1.bias": "conditioner.embedders.1.model.transformer.resblocks.12.mlp.c_fc.bias", + "model.text_model.encoder.layers.12.mlp.fc1.weight": "conditioner.embedders.1.model.transformer.resblocks.12.mlp.c_fc.weight", + "model.text_model.encoder.layers.12.mlp.fc2.bias": "conditioner.embedders.1.model.transformer.resblocks.12.mlp.c_proj.bias", + "model.text_model.encoder.layers.12.mlp.fc2.weight": "conditioner.embedders.1.model.transformer.resblocks.12.mlp.c_proj.weight", + "model.text_model.encoder.layers.12.self_attn.out_proj.bias": "conditioner.embedders.1.model.transformer.resblocks.12.attn.out_proj.bias", + "model.text_model.encoder.layers.12.self_attn.out_proj.weight": "conditioner.embedders.1.model.transformer.resblocks.12.attn.out_proj.weight", + "model.text_model.encoder.layers.13.layer_norm1.bias": "conditioner.embedders.1.model.transformer.resblocks.13.ln_1.bias", + "model.text_model.encoder.layers.13.layer_norm1.weight": "conditioner.embedders.1.model.transformer.resblocks.13.ln_1.weight", + "model.text_model.encoder.layers.13.layer_norm2.bias": "conditioner.embedders.1.model.transformer.resblocks.13.ln_2.bias", + "model.text_model.encoder.layers.13.layer_norm2.weight": "conditioner.embedders.1.model.transformer.resblocks.13.ln_2.weight", + "model.text_model.encoder.layers.13.mlp.fc1.bias": "conditioner.embedders.1.model.transformer.resblocks.13.mlp.c_fc.bias", + "model.text_model.encoder.layers.13.mlp.fc1.weight": "conditioner.embedders.1.model.transformer.resblocks.13.mlp.c_fc.weight", + "model.text_model.encoder.layers.13.mlp.fc2.bias": "conditioner.embedders.1.model.transformer.resblocks.13.mlp.c_proj.bias", + "model.text_model.encoder.layers.13.mlp.fc2.weight": "conditioner.embedders.1.model.transformer.resblocks.13.mlp.c_proj.weight", + "model.text_model.encoder.layers.13.self_attn.out_proj.bias": "conditioner.embedders.1.model.transformer.resblocks.13.attn.out_proj.bias", + "model.text_model.encoder.layers.13.self_attn.out_proj.weight": "conditioner.embedders.1.model.transformer.resblocks.13.attn.out_proj.weight", + "model.text_model.encoder.layers.14.layer_norm1.bias": "conditioner.embedders.1.model.transformer.resblocks.14.ln_1.bias", + "model.text_model.encoder.layers.14.layer_norm1.weight": "conditioner.embedders.1.model.transformer.resblocks.14.ln_1.weight", + "model.text_model.encoder.layers.14.layer_norm2.bias": "conditioner.embedders.1.model.transformer.resblocks.14.ln_2.bias", + "model.text_model.encoder.layers.14.layer_norm2.weight": "conditioner.embedders.1.model.transformer.resblocks.14.ln_2.weight", + "model.text_model.encoder.layers.14.mlp.fc1.bias": "conditioner.embedders.1.model.transformer.resblocks.14.mlp.c_fc.bias", + "model.text_model.encoder.layers.14.mlp.fc1.weight": "conditioner.embedders.1.model.transformer.resblocks.14.mlp.c_fc.weight", + "model.text_model.encoder.layers.14.mlp.fc2.bias": "conditioner.embedders.1.model.transformer.resblocks.14.mlp.c_proj.bias", + "model.text_model.encoder.layers.14.mlp.fc2.weight": "conditioner.embedders.1.model.transformer.resblocks.14.mlp.c_proj.weight", + "model.text_model.encoder.layers.14.self_attn.out_proj.bias": "conditioner.embedders.1.model.transformer.resblocks.14.attn.out_proj.bias", + "model.text_model.encoder.layers.14.self_attn.out_proj.weight": "conditioner.embedders.1.model.transformer.resblocks.14.attn.out_proj.weight", + "model.text_model.encoder.layers.15.layer_norm1.bias": "conditioner.embedders.1.model.transformer.resblocks.15.ln_1.bias", + "model.text_model.encoder.layers.15.layer_norm1.weight": "conditioner.embedders.1.model.transformer.resblocks.15.ln_1.weight", + "model.text_model.encoder.layers.15.layer_norm2.bias": "conditioner.embedders.1.model.transformer.resblocks.15.ln_2.bias", + "model.text_model.encoder.layers.15.layer_norm2.weight": "conditioner.embedders.1.model.transformer.resblocks.15.ln_2.weight", + "model.text_model.encoder.layers.15.mlp.fc1.bias": "conditioner.embedders.1.model.transformer.resblocks.15.mlp.c_fc.bias", + "model.text_model.encoder.layers.15.mlp.fc1.weight": "conditioner.embedders.1.model.transformer.resblocks.15.mlp.c_fc.weight", + "model.text_model.encoder.layers.15.mlp.fc2.bias": "conditioner.embedders.1.model.transformer.resblocks.15.mlp.c_proj.bias", + "model.text_model.encoder.layers.15.mlp.fc2.weight": "conditioner.embedders.1.model.transformer.resblocks.15.mlp.c_proj.weight", + "model.text_model.encoder.layers.15.self_attn.out_proj.bias": "conditioner.embedders.1.model.transformer.resblocks.15.attn.out_proj.bias", + "model.text_model.encoder.layers.15.self_attn.out_proj.weight": "conditioner.embedders.1.model.transformer.resblocks.15.attn.out_proj.weight", + "model.text_model.encoder.layers.16.layer_norm1.bias": "conditioner.embedders.1.model.transformer.resblocks.16.ln_1.bias", + "model.text_model.encoder.layers.16.layer_norm1.weight": "conditioner.embedders.1.model.transformer.resblocks.16.ln_1.weight", + "model.text_model.encoder.layers.16.layer_norm2.bias": "conditioner.embedders.1.model.transformer.resblocks.16.ln_2.bias", + "model.text_model.encoder.layers.16.layer_norm2.weight": "conditioner.embedders.1.model.transformer.resblocks.16.ln_2.weight", + "model.text_model.encoder.layers.16.mlp.fc1.bias": "conditioner.embedders.1.model.transformer.resblocks.16.mlp.c_fc.bias", + "model.text_model.encoder.layers.16.mlp.fc1.weight": "conditioner.embedders.1.model.transformer.resblocks.16.mlp.c_fc.weight", + "model.text_model.encoder.layers.16.mlp.fc2.bias": "conditioner.embedders.1.model.transformer.resblocks.16.mlp.c_proj.bias", + "model.text_model.encoder.layers.16.mlp.fc2.weight": "conditioner.embedders.1.model.transformer.resblocks.16.mlp.c_proj.weight", + "model.text_model.encoder.layers.16.self_attn.out_proj.bias": "conditioner.embedders.1.model.transformer.resblocks.16.attn.out_proj.bias", + "model.text_model.encoder.layers.16.self_attn.out_proj.weight": "conditioner.embedders.1.model.transformer.resblocks.16.attn.out_proj.weight", + "model.text_model.encoder.layers.17.layer_norm1.bias": "conditioner.embedders.1.model.transformer.resblocks.17.ln_1.bias", + "model.text_model.encoder.layers.17.layer_norm1.weight": "conditioner.embedders.1.model.transformer.resblocks.17.ln_1.weight", + "model.text_model.encoder.layers.17.layer_norm2.bias": "conditioner.embedders.1.model.transformer.resblocks.17.ln_2.bias", + "model.text_model.encoder.layers.17.layer_norm2.weight": "conditioner.embedders.1.model.transformer.resblocks.17.ln_2.weight", + "model.text_model.encoder.layers.17.mlp.fc1.bias": "conditioner.embedders.1.model.transformer.resblocks.17.mlp.c_fc.bias", + "model.text_model.encoder.layers.17.mlp.fc1.weight": "conditioner.embedders.1.model.transformer.resblocks.17.mlp.c_fc.weight", + "model.text_model.encoder.layers.17.mlp.fc2.bias": "conditioner.embedders.1.model.transformer.resblocks.17.mlp.c_proj.bias", + "model.text_model.encoder.layers.17.mlp.fc2.weight": "conditioner.embedders.1.model.transformer.resblocks.17.mlp.c_proj.weight", + "model.text_model.encoder.layers.17.self_attn.out_proj.bias": "conditioner.embedders.1.model.transformer.resblocks.17.attn.out_proj.bias", + "model.text_model.encoder.layers.17.self_attn.out_proj.weight": "conditioner.embedders.1.model.transformer.resblocks.17.attn.out_proj.weight", + "model.text_model.encoder.layers.18.layer_norm1.bias": "conditioner.embedders.1.model.transformer.resblocks.18.ln_1.bias", + "model.text_model.encoder.layers.18.layer_norm1.weight": "conditioner.embedders.1.model.transformer.resblocks.18.ln_1.weight", + "model.text_model.encoder.layers.18.layer_norm2.bias": "conditioner.embedders.1.model.transformer.resblocks.18.ln_2.bias", + "model.text_model.encoder.layers.18.layer_norm2.weight": "conditioner.embedders.1.model.transformer.resblocks.18.ln_2.weight", + "model.text_model.encoder.layers.18.mlp.fc1.bias": "conditioner.embedders.1.model.transformer.resblocks.18.mlp.c_fc.bias", + "model.text_model.encoder.layers.18.mlp.fc1.weight": "conditioner.embedders.1.model.transformer.resblocks.18.mlp.c_fc.weight", + "model.text_model.encoder.layers.18.mlp.fc2.bias": "conditioner.embedders.1.model.transformer.resblocks.18.mlp.c_proj.bias", + "model.text_model.encoder.layers.18.mlp.fc2.weight": "conditioner.embedders.1.model.transformer.resblocks.18.mlp.c_proj.weight", + "model.text_model.encoder.layers.18.self_attn.out_proj.bias": "conditioner.embedders.1.model.transformer.resblocks.18.attn.out_proj.bias", + "model.text_model.encoder.layers.18.self_attn.out_proj.weight": "conditioner.embedders.1.model.transformer.resblocks.18.attn.out_proj.weight", + "model.text_model.encoder.layers.19.layer_norm1.bias": "conditioner.embedders.1.model.transformer.resblocks.19.ln_1.bias", + "model.text_model.encoder.layers.19.layer_norm1.weight": "conditioner.embedders.1.model.transformer.resblocks.19.ln_1.weight", + "model.text_model.encoder.layers.19.layer_norm2.bias": "conditioner.embedders.1.model.transformer.resblocks.19.ln_2.bias", + "model.text_model.encoder.layers.19.layer_norm2.weight": "conditioner.embedders.1.model.transformer.resblocks.19.ln_2.weight", + "model.text_model.encoder.layers.19.mlp.fc1.bias": "conditioner.embedders.1.model.transformer.resblocks.19.mlp.c_fc.bias", + "model.text_model.encoder.layers.19.mlp.fc1.weight": "conditioner.embedders.1.model.transformer.resblocks.19.mlp.c_fc.weight", + "model.text_model.encoder.layers.19.mlp.fc2.bias": "conditioner.embedders.1.model.transformer.resblocks.19.mlp.c_proj.bias", + "model.text_model.encoder.layers.19.mlp.fc2.weight": "conditioner.embedders.1.model.transformer.resblocks.19.mlp.c_proj.weight", + "model.text_model.encoder.layers.19.self_attn.out_proj.bias": "conditioner.embedders.1.model.transformer.resblocks.19.attn.out_proj.bias", + "model.text_model.encoder.layers.19.self_attn.out_proj.weight": "conditioner.embedders.1.model.transformer.resblocks.19.attn.out_proj.weight", + "model.text_model.encoder.layers.2.layer_norm1.bias": "conditioner.embedders.1.model.transformer.resblocks.2.ln_1.bias", + "model.text_model.encoder.layers.2.layer_norm1.weight": "conditioner.embedders.1.model.transformer.resblocks.2.ln_1.weight", + "model.text_model.encoder.layers.2.layer_norm2.bias": "conditioner.embedders.1.model.transformer.resblocks.2.ln_2.bias", + "model.text_model.encoder.layers.2.layer_norm2.weight": "conditioner.embedders.1.model.transformer.resblocks.2.ln_2.weight", + "model.text_model.encoder.layers.2.mlp.fc1.bias": "conditioner.embedders.1.model.transformer.resblocks.2.mlp.c_fc.bias", + "model.text_model.encoder.layers.2.mlp.fc1.weight": "conditioner.embedders.1.model.transformer.resblocks.2.mlp.c_fc.weight", + "model.text_model.encoder.layers.2.mlp.fc2.bias": "conditioner.embedders.1.model.transformer.resblocks.2.mlp.c_proj.bias", + "model.text_model.encoder.layers.2.mlp.fc2.weight": "conditioner.embedders.1.model.transformer.resblocks.2.mlp.c_proj.weight", + "model.text_model.encoder.layers.2.self_attn.out_proj.bias": "conditioner.embedders.1.model.transformer.resblocks.2.attn.out_proj.bias", + "model.text_model.encoder.layers.2.self_attn.out_proj.weight": "conditioner.embedders.1.model.transformer.resblocks.2.attn.out_proj.weight", + "model.text_model.encoder.layers.20.layer_norm1.bias": "conditioner.embedders.1.model.transformer.resblocks.20.ln_1.bias", + "model.text_model.encoder.layers.20.layer_norm1.weight": "conditioner.embedders.1.model.transformer.resblocks.20.ln_1.weight", + "model.text_model.encoder.layers.20.layer_norm2.bias": "conditioner.embedders.1.model.transformer.resblocks.20.ln_2.bias", + "model.text_model.encoder.layers.20.layer_norm2.weight": "conditioner.embedders.1.model.transformer.resblocks.20.ln_2.weight", + "model.text_model.encoder.layers.20.mlp.fc1.bias": "conditioner.embedders.1.model.transformer.resblocks.20.mlp.c_fc.bias", + "model.text_model.encoder.layers.20.mlp.fc1.weight": "conditioner.embedders.1.model.transformer.resblocks.20.mlp.c_fc.weight", + "model.text_model.encoder.layers.20.mlp.fc2.bias": "conditioner.embedders.1.model.transformer.resblocks.20.mlp.c_proj.bias", + "model.text_model.encoder.layers.20.mlp.fc2.weight": "conditioner.embedders.1.model.transformer.resblocks.20.mlp.c_proj.weight", + "model.text_model.encoder.layers.20.self_attn.out_proj.bias": "conditioner.embedders.1.model.transformer.resblocks.20.attn.out_proj.bias", + "model.text_model.encoder.layers.20.self_attn.out_proj.weight": "conditioner.embedders.1.model.transformer.resblocks.20.attn.out_proj.weight", + "model.text_model.encoder.layers.21.layer_norm1.bias": "conditioner.embedders.1.model.transformer.resblocks.21.ln_1.bias", + "model.text_model.encoder.layers.21.layer_norm1.weight": "conditioner.embedders.1.model.transformer.resblocks.21.ln_1.weight", + "model.text_model.encoder.layers.21.layer_norm2.bias": "conditioner.embedders.1.model.transformer.resblocks.21.ln_2.bias", + "model.text_model.encoder.layers.21.layer_norm2.weight": "conditioner.embedders.1.model.transformer.resblocks.21.ln_2.weight", + "model.text_model.encoder.layers.21.mlp.fc1.bias": "conditioner.embedders.1.model.transformer.resblocks.21.mlp.c_fc.bias", + "model.text_model.encoder.layers.21.mlp.fc1.weight": "conditioner.embedders.1.model.transformer.resblocks.21.mlp.c_fc.weight", + "model.text_model.encoder.layers.21.mlp.fc2.bias": "conditioner.embedders.1.model.transformer.resblocks.21.mlp.c_proj.bias", + "model.text_model.encoder.layers.21.mlp.fc2.weight": "conditioner.embedders.1.model.transformer.resblocks.21.mlp.c_proj.weight", + "model.text_model.encoder.layers.21.self_attn.out_proj.bias": "conditioner.embedders.1.model.transformer.resblocks.21.attn.out_proj.bias", + "model.text_model.encoder.layers.21.self_attn.out_proj.weight": "conditioner.embedders.1.model.transformer.resblocks.21.attn.out_proj.weight", + "model.text_model.encoder.layers.22.layer_norm1.bias": "conditioner.embedders.1.model.transformer.resblocks.22.ln_1.bias", + "model.text_model.encoder.layers.22.layer_norm1.weight": "conditioner.embedders.1.model.transformer.resblocks.22.ln_1.weight", + "model.text_model.encoder.layers.22.layer_norm2.bias": "conditioner.embedders.1.model.transformer.resblocks.22.ln_2.bias", + "model.text_model.encoder.layers.22.layer_norm2.weight": "conditioner.embedders.1.model.transformer.resblocks.22.ln_2.weight", + "model.text_model.encoder.layers.22.mlp.fc1.bias": "conditioner.embedders.1.model.transformer.resblocks.22.mlp.c_fc.bias", + "model.text_model.encoder.layers.22.mlp.fc1.weight": "conditioner.embedders.1.model.transformer.resblocks.22.mlp.c_fc.weight", + "model.text_model.encoder.layers.22.mlp.fc2.bias": "conditioner.embedders.1.model.transformer.resblocks.22.mlp.c_proj.bias", + "model.text_model.encoder.layers.22.mlp.fc2.weight": "conditioner.embedders.1.model.transformer.resblocks.22.mlp.c_proj.weight", + "model.text_model.encoder.layers.22.self_attn.out_proj.bias": "conditioner.embedders.1.model.transformer.resblocks.22.attn.out_proj.bias", + "model.text_model.encoder.layers.22.self_attn.out_proj.weight": "conditioner.embedders.1.model.transformer.resblocks.22.attn.out_proj.weight", + "model.text_model.encoder.layers.23.layer_norm1.bias": "conditioner.embedders.1.model.transformer.resblocks.23.ln_1.bias", + "model.text_model.encoder.layers.23.layer_norm1.weight": "conditioner.embedders.1.model.transformer.resblocks.23.ln_1.weight", + "model.text_model.encoder.layers.23.layer_norm2.bias": "conditioner.embedders.1.model.transformer.resblocks.23.ln_2.bias", + "model.text_model.encoder.layers.23.layer_norm2.weight": "conditioner.embedders.1.model.transformer.resblocks.23.ln_2.weight", + "model.text_model.encoder.layers.23.mlp.fc1.bias": "conditioner.embedders.1.model.transformer.resblocks.23.mlp.c_fc.bias", + "model.text_model.encoder.layers.23.mlp.fc1.weight": "conditioner.embedders.1.model.transformer.resblocks.23.mlp.c_fc.weight", + "model.text_model.encoder.layers.23.mlp.fc2.bias": "conditioner.embedders.1.model.transformer.resblocks.23.mlp.c_proj.bias", + "model.text_model.encoder.layers.23.mlp.fc2.weight": "conditioner.embedders.1.model.transformer.resblocks.23.mlp.c_proj.weight", + "model.text_model.encoder.layers.23.self_attn.out_proj.bias": "conditioner.embedders.1.model.transformer.resblocks.23.attn.out_proj.bias", + "model.text_model.encoder.layers.23.self_attn.out_proj.weight": "conditioner.embedders.1.model.transformer.resblocks.23.attn.out_proj.weight", + "model.text_model.encoder.layers.24.layer_norm1.bias": "conditioner.embedders.1.model.transformer.resblocks.24.ln_1.bias", + "model.text_model.encoder.layers.24.layer_norm1.weight": "conditioner.embedders.1.model.transformer.resblocks.24.ln_1.weight", + "model.text_model.encoder.layers.24.layer_norm2.bias": "conditioner.embedders.1.model.transformer.resblocks.24.ln_2.bias", + "model.text_model.encoder.layers.24.layer_norm2.weight": "conditioner.embedders.1.model.transformer.resblocks.24.ln_2.weight", + "model.text_model.encoder.layers.24.mlp.fc1.bias": "conditioner.embedders.1.model.transformer.resblocks.24.mlp.c_fc.bias", + "model.text_model.encoder.layers.24.mlp.fc1.weight": "conditioner.embedders.1.model.transformer.resblocks.24.mlp.c_fc.weight", + "model.text_model.encoder.layers.24.mlp.fc2.bias": "conditioner.embedders.1.model.transformer.resblocks.24.mlp.c_proj.bias", + "model.text_model.encoder.layers.24.mlp.fc2.weight": "conditioner.embedders.1.model.transformer.resblocks.24.mlp.c_proj.weight", + "model.text_model.encoder.layers.24.self_attn.out_proj.bias": "conditioner.embedders.1.model.transformer.resblocks.24.attn.out_proj.bias", + "model.text_model.encoder.layers.24.self_attn.out_proj.weight": "conditioner.embedders.1.model.transformer.resblocks.24.attn.out_proj.weight", + "model.text_model.encoder.layers.25.layer_norm1.bias": "conditioner.embedders.1.model.transformer.resblocks.25.ln_1.bias", + "model.text_model.encoder.layers.25.layer_norm1.weight": "conditioner.embedders.1.model.transformer.resblocks.25.ln_1.weight", + "model.text_model.encoder.layers.25.layer_norm2.bias": "conditioner.embedders.1.model.transformer.resblocks.25.ln_2.bias", + "model.text_model.encoder.layers.25.layer_norm2.weight": "conditioner.embedders.1.model.transformer.resblocks.25.ln_2.weight", + "model.text_model.encoder.layers.25.mlp.fc1.bias": "conditioner.embedders.1.model.transformer.resblocks.25.mlp.c_fc.bias", + "model.text_model.encoder.layers.25.mlp.fc1.weight": "conditioner.embedders.1.model.transformer.resblocks.25.mlp.c_fc.weight", + "model.text_model.encoder.layers.25.mlp.fc2.bias": "conditioner.embedders.1.model.transformer.resblocks.25.mlp.c_proj.bias", + "model.text_model.encoder.layers.25.mlp.fc2.weight": "conditioner.embedders.1.model.transformer.resblocks.25.mlp.c_proj.weight", + "model.text_model.encoder.layers.25.self_attn.out_proj.bias": "conditioner.embedders.1.model.transformer.resblocks.25.attn.out_proj.bias", + "model.text_model.encoder.layers.25.self_attn.out_proj.weight": "conditioner.embedders.1.model.transformer.resblocks.25.attn.out_proj.weight", + "model.text_model.encoder.layers.26.layer_norm1.bias": "conditioner.embedders.1.model.transformer.resblocks.26.ln_1.bias", + "model.text_model.encoder.layers.26.layer_norm1.weight": "conditioner.embedders.1.model.transformer.resblocks.26.ln_1.weight", + "model.text_model.encoder.layers.26.layer_norm2.bias": "conditioner.embedders.1.model.transformer.resblocks.26.ln_2.bias", + "model.text_model.encoder.layers.26.layer_norm2.weight": "conditioner.embedders.1.model.transformer.resblocks.26.ln_2.weight", + "model.text_model.encoder.layers.26.mlp.fc1.bias": "conditioner.embedders.1.model.transformer.resblocks.26.mlp.c_fc.bias", + "model.text_model.encoder.layers.26.mlp.fc1.weight": "conditioner.embedders.1.model.transformer.resblocks.26.mlp.c_fc.weight", + "model.text_model.encoder.layers.26.mlp.fc2.bias": "conditioner.embedders.1.model.transformer.resblocks.26.mlp.c_proj.bias", + "model.text_model.encoder.layers.26.mlp.fc2.weight": "conditioner.embedders.1.model.transformer.resblocks.26.mlp.c_proj.weight", + "model.text_model.encoder.layers.26.self_attn.out_proj.bias": "conditioner.embedders.1.model.transformer.resblocks.26.attn.out_proj.bias", + "model.text_model.encoder.layers.26.self_attn.out_proj.weight": "conditioner.embedders.1.model.transformer.resblocks.26.attn.out_proj.weight", + "model.text_model.encoder.layers.27.layer_norm1.bias": "conditioner.embedders.1.model.transformer.resblocks.27.ln_1.bias", + "model.text_model.encoder.layers.27.layer_norm1.weight": "conditioner.embedders.1.model.transformer.resblocks.27.ln_1.weight", + "model.text_model.encoder.layers.27.layer_norm2.bias": "conditioner.embedders.1.model.transformer.resblocks.27.ln_2.bias", + "model.text_model.encoder.layers.27.layer_norm2.weight": "conditioner.embedders.1.model.transformer.resblocks.27.ln_2.weight", + "model.text_model.encoder.layers.27.mlp.fc1.bias": "conditioner.embedders.1.model.transformer.resblocks.27.mlp.c_fc.bias", + "model.text_model.encoder.layers.27.mlp.fc1.weight": "conditioner.embedders.1.model.transformer.resblocks.27.mlp.c_fc.weight", + "model.text_model.encoder.layers.27.mlp.fc2.bias": "conditioner.embedders.1.model.transformer.resblocks.27.mlp.c_proj.bias", + "model.text_model.encoder.layers.27.mlp.fc2.weight": "conditioner.embedders.1.model.transformer.resblocks.27.mlp.c_proj.weight", + "model.text_model.encoder.layers.27.self_attn.out_proj.bias": "conditioner.embedders.1.model.transformer.resblocks.27.attn.out_proj.bias", + "model.text_model.encoder.layers.27.self_attn.out_proj.weight": "conditioner.embedders.1.model.transformer.resblocks.27.attn.out_proj.weight", + "model.text_model.encoder.layers.28.layer_norm1.bias": "conditioner.embedders.1.model.transformer.resblocks.28.ln_1.bias", + "model.text_model.encoder.layers.28.layer_norm1.weight": "conditioner.embedders.1.model.transformer.resblocks.28.ln_1.weight", + "model.text_model.encoder.layers.28.layer_norm2.bias": "conditioner.embedders.1.model.transformer.resblocks.28.ln_2.bias", + "model.text_model.encoder.layers.28.layer_norm2.weight": "conditioner.embedders.1.model.transformer.resblocks.28.ln_2.weight", + "model.text_model.encoder.layers.28.mlp.fc1.bias": "conditioner.embedders.1.model.transformer.resblocks.28.mlp.c_fc.bias", + "model.text_model.encoder.layers.28.mlp.fc1.weight": "conditioner.embedders.1.model.transformer.resblocks.28.mlp.c_fc.weight", + "model.text_model.encoder.layers.28.mlp.fc2.bias": "conditioner.embedders.1.model.transformer.resblocks.28.mlp.c_proj.bias", + "model.text_model.encoder.layers.28.mlp.fc2.weight": "conditioner.embedders.1.model.transformer.resblocks.28.mlp.c_proj.weight", + "model.text_model.encoder.layers.28.self_attn.out_proj.bias": "conditioner.embedders.1.model.transformer.resblocks.28.attn.out_proj.bias", + "model.text_model.encoder.layers.28.self_attn.out_proj.weight": "conditioner.embedders.1.model.transformer.resblocks.28.attn.out_proj.weight", + "model.text_model.encoder.layers.29.layer_norm1.bias": "conditioner.embedders.1.model.transformer.resblocks.29.ln_1.bias", + "model.text_model.encoder.layers.29.layer_norm1.weight": "conditioner.embedders.1.model.transformer.resblocks.29.ln_1.weight", + "model.text_model.encoder.layers.29.layer_norm2.bias": "conditioner.embedders.1.model.transformer.resblocks.29.ln_2.bias", + "model.text_model.encoder.layers.29.layer_norm2.weight": "conditioner.embedders.1.model.transformer.resblocks.29.ln_2.weight", + "model.text_model.encoder.layers.29.mlp.fc1.bias": "conditioner.embedders.1.model.transformer.resblocks.29.mlp.c_fc.bias", + "model.text_model.encoder.layers.29.mlp.fc1.weight": "conditioner.embedders.1.model.transformer.resblocks.29.mlp.c_fc.weight", + "model.text_model.encoder.layers.29.mlp.fc2.bias": "conditioner.embedders.1.model.transformer.resblocks.29.mlp.c_proj.bias", + "model.text_model.encoder.layers.29.mlp.fc2.weight": "conditioner.embedders.1.model.transformer.resblocks.29.mlp.c_proj.weight", + "model.text_model.encoder.layers.29.self_attn.out_proj.bias": "conditioner.embedders.1.model.transformer.resblocks.29.attn.out_proj.bias", + "model.text_model.encoder.layers.29.self_attn.out_proj.weight": "conditioner.embedders.1.model.transformer.resblocks.29.attn.out_proj.weight", + "model.text_model.encoder.layers.3.layer_norm1.bias": "conditioner.embedders.1.model.transformer.resblocks.3.ln_1.bias", + "model.text_model.encoder.layers.3.layer_norm1.weight": "conditioner.embedders.1.model.transformer.resblocks.3.ln_1.weight", + "model.text_model.encoder.layers.3.layer_norm2.bias": "conditioner.embedders.1.model.transformer.resblocks.3.ln_2.bias", + "model.text_model.encoder.layers.3.layer_norm2.weight": "conditioner.embedders.1.model.transformer.resblocks.3.ln_2.weight", + "model.text_model.encoder.layers.3.mlp.fc1.bias": "conditioner.embedders.1.model.transformer.resblocks.3.mlp.c_fc.bias", + "model.text_model.encoder.layers.3.mlp.fc1.weight": "conditioner.embedders.1.model.transformer.resblocks.3.mlp.c_fc.weight", + "model.text_model.encoder.layers.3.mlp.fc2.bias": "conditioner.embedders.1.model.transformer.resblocks.3.mlp.c_proj.bias", + "model.text_model.encoder.layers.3.mlp.fc2.weight": "conditioner.embedders.1.model.transformer.resblocks.3.mlp.c_proj.weight", + "model.text_model.encoder.layers.3.self_attn.out_proj.bias": "conditioner.embedders.1.model.transformer.resblocks.3.attn.out_proj.bias", + "model.text_model.encoder.layers.3.self_attn.out_proj.weight": "conditioner.embedders.1.model.transformer.resblocks.3.attn.out_proj.weight", + "model.text_model.encoder.layers.30.layer_norm1.bias": "conditioner.embedders.1.model.transformer.resblocks.30.ln_1.bias", + "model.text_model.encoder.layers.30.layer_norm1.weight": "conditioner.embedders.1.model.transformer.resblocks.30.ln_1.weight", + "model.text_model.encoder.layers.30.layer_norm2.bias": "conditioner.embedders.1.model.transformer.resblocks.30.ln_2.bias", + "model.text_model.encoder.layers.30.layer_norm2.weight": "conditioner.embedders.1.model.transformer.resblocks.30.ln_2.weight", + "model.text_model.encoder.layers.30.mlp.fc1.bias": "conditioner.embedders.1.model.transformer.resblocks.30.mlp.c_fc.bias", + "model.text_model.encoder.layers.30.mlp.fc1.weight": "conditioner.embedders.1.model.transformer.resblocks.30.mlp.c_fc.weight", + "model.text_model.encoder.layers.30.mlp.fc2.bias": "conditioner.embedders.1.model.transformer.resblocks.30.mlp.c_proj.bias", + "model.text_model.encoder.layers.30.mlp.fc2.weight": "conditioner.embedders.1.model.transformer.resblocks.30.mlp.c_proj.weight", + "model.text_model.encoder.layers.30.self_attn.out_proj.bias": "conditioner.embedders.1.model.transformer.resblocks.30.attn.out_proj.bias", + "model.text_model.encoder.layers.30.self_attn.out_proj.weight": "conditioner.embedders.1.model.transformer.resblocks.30.attn.out_proj.weight", + "model.text_model.encoder.layers.31.layer_norm1.bias": "conditioner.embedders.1.model.transformer.resblocks.31.ln_1.bias", + "model.text_model.encoder.layers.31.layer_norm1.weight": "conditioner.embedders.1.model.transformer.resblocks.31.ln_1.weight", + "model.text_model.encoder.layers.31.layer_norm2.bias": "conditioner.embedders.1.model.transformer.resblocks.31.ln_2.bias", + "model.text_model.encoder.layers.31.layer_norm2.weight": "conditioner.embedders.1.model.transformer.resblocks.31.ln_2.weight", + "model.text_model.encoder.layers.31.mlp.fc1.bias": "conditioner.embedders.1.model.transformer.resblocks.31.mlp.c_fc.bias", + "model.text_model.encoder.layers.31.mlp.fc1.weight": "conditioner.embedders.1.model.transformer.resblocks.31.mlp.c_fc.weight", + "model.text_model.encoder.layers.31.mlp.fc2.bias": "conditioner.embedders.1.model.transformer.resblocks.31.mlp.c_proj.bias", + "model.text_model.encoder.layers.31.mlp.fc2.weight": "conditioner.embedders.1.model.transformer.resblocks.31.mlp.c_proj.weight", + "model.text_model.encoder.layers.31.self_attn.out_proj.bias": "conditioner.embedders.1.model.transformer.resblocks.31.attn.out_proj.bias", + "model.text_model.encoder.layers.31.self_attn.out_proj.weight": "conditioner.embedders.1.model.transformer.resblocks.31.attn.out_proj.weight", + "model.text_model.encoder.layers.4.layer_norm1.bias": "conditioner.embedders.1.model.transformer.resblocks.4.ln_1.bias", + "model.text_model.encoder.layers.4.layer_norm1.weight": "conditioner.embedders.1.model.transformer.resblocks.4.ln_1.weight", + "model.text_model.encoder.layers.4.layer_norm2.bias": "conditioner.embedders.1.model.transformer.resblocks.4.ln_2.bias", + "model.text_model.encoder.layers.4.layer_norm2.weight": "conditioner.embedders.1.model.transformer.resblocks.4.ln_2.weight", + "model.text_model.encoder.layers.4.mlp.fc1.bias": "conditioner.embedders.1.model.transformer.resblocks.4.mlp.c_fc.bias", + "model.text_model.encoder.layers.4.mlp.fc1.weight": "conditioner.embedders.1.model.transformer.resblocks.4.mlp.c_fc.weight", + "model.text_model.encoder.layers.4.mlp.fc2.bias": "conditioner.embedders.1.model.transformer.resblocks.4.mlp.c_proj.bias", + "model.text_model.encoder.layers.4.mlp.fc2.weight": "conditioner.embedders.1.model.transformer.resblocks.4.mlp.c_proj.weight", + "model.text_model.encoder.layers.4.self_attn.out_proj.bias": "conditioner.embedders.1.model.transformer.resblocks.4.attn.out_proj.bias", + "model.text_model.encoder.layers.4.self_attn.out_proj.weight": "conditioner.embedders.1.model.transformer.resblocks.4.attn.out_proj.weight", + "model.text_model.encoder.layers.5.layer_norm1.bias": "conditioner.embedders.1.model.transformer.resblocks.5.ln_1.bias", + "model.text_model.encoder.layers.5.layer_norm1.weight": "conditioner.embedders.1.model.transformer.resblocks.5.ln_1.weight", + "model.text_model.encoder.layers.5.layer_norm2.bias": "conditioner.embedders.1.model.transformer.resblocks.5.ln_2.bias", + "model.text_model.encoder.layers.5.layer_norm2.weight": "conditioner.embedders.1.model.transformer.resblocks.5.ln_2.weight", + "model.text_model.encoder.layers.5.mlp.fc1.bias": "conditioner.embedders.1.model.transformer.resblocks.5.mlp.c_fc.bias", + "model.text_model.encoder.layers.5.mlp.fc1.weight": "conditioner.embedders.1.model.transformer.resblocks.5.mlp.c_fc.weight", + "model.text_model.encoder.layers.5.mlp.fc2.bias": "conditioner.embedders.1.model.transformer.resblocks.5.mlp.c_proj.bias", + "model.text_model.encoder.layers.5.mlp.fc2.weight": "conditioner.embedders.1.model.transformer.resblocks.5.mlp.c_proj.weight", + "model.text_model.encoder.layers.5.self_attn.out_proj.bias": "conditioner.embedders.1.model.transformer.resblocks.5.attn.out_proj.bias", + "model.text_model.encoder.layers.5.self_attn.out_proj.weight": "conditioner.embedders.1.model.transformer.resblocks.5.attn.out_proj.weight", + "model.text_model.encoder.layers.6.layer_norm1.bias": "conditioner.embedders.1.model.transformer.resblocks.6.ln_1.bias", + "model.text_model.encoder.layers.6.layer_norm1.weight": "conditioner.embedders.1.model.transformer.resblocks.6.ln_1.weight", + "model.text_model.encoder.layers.6.layer_norm2.bias": "conditioner.embedders.1.model.transformer.resblocks.6.ln_2.bias", + "model.text_model.encoder.layers.6.layer_norm2.weight": "conditioner.embedders.1.model.transformer.resblocks.6.ln_2.weight", + "model.text_model.encoder.layers.6.mlp.fc1.bias": "conditioner.embedders.1.model.transformer.resblocks.6.mlp.c_fc.bias", + "model.text_model.encoder.layers.6.mlp.fc1.weight": "conditioner.embedders.1.model.transformer.resblocks.6.mlp.c_fc.weight", + "model.text_model.encoder.layers.6.mlp.fc2.bias": "conditioner.embedders.1.model.transformer.resblocks.6.mlp.c_proj.bias", + "model.text_model.encoder.layers.6.mlp.fc2.weight": "conditioner.embedders.1.model.transformer.resblocks.6.mlp.c_proj.weight", + "model.text_model.encoder.layers.6.self_attn.out_proj.bias": "conditioner.embedders.1.model.transformer.resblocks.6.attn.out_proj.bias", + "model.text_model.encoder.layers.6.self_attn.out_proj.weight": "conditioner.embedders.1.model.transformer.resblocks.6.attn.out_proj.weight", + "model.text_model.encoder.layers.7.layer_norm1.bias": "conditioner.embedders.1.model.transformer.resblocks.7.ln_1.bias", + "model.text_model.encoder.layers.7.layer_norm1.weight": "conditioner.embedders.1.model.transformer.resblocks.7.ln_1.weight", + "model.text_model.encoder.layers.7.layer_norm2.bias": "conditioner.embedders.1.model.transformer.resblocks.7.ln_2.bias", + "model.text_model.encoder.layers.7.layer_norm2.weight": "conditioner.embedders.1.model.transformer.resblocks.7.ln_2.weight", + "model.text_model.encoder.layers.7.mlp.fc1.bias": "conditioner.embedders.1.model.transformer.resblocks.7.mlp.c_fc.bias", + "model.text_model.encoder.layers.7.mlp.fc1.weight": "conditioner.embedders.1.model.transformer.resblocks.7.mlp.c_fc.weight", + "model.text_model.encoder.layers.7.mlp.fc2.bias": "conditioner.embedders.1.model.transformer.resblocks.7.mlp.c_proj.bias", + "model.text_model.encoder.layers.7.mlp.fc2.weight": "conditioner.embedders.1.model.transformer.resblocks.7.mlp.c_proj.weight", + "model.text_model.encoder.layers.7.self_attn.out_proj.bias": "conditioner.embedders.1.model.transformer.resblocks.7.attn.out_proj.bias", + "model.text_model.encoder.layers.7.self_attn.out_proj.weight": "conditioner.embedders.1.model.transformer.resblocks.7.attn.out_proj.weight", + "model.text_model.encoder.layers.8.layer_norm1.bias": "conditioner.embedders.1.model.transformer.resblocks.8.ln_1.bias", + "model.text_model.encoder.layers.8.layer_norm1.weight": "conditioner.embedders.1.model.transformer.resblocks.8.ln_1.weight", + "model.text_model.encoder.layers.8.layer_norm2.bias": "conditioner.embedders.1.model.transformer.resblocks.8.ln_2.bias", + "model.text_model.encoder.layers.8.layer_norm2.weight": "conditioner.embedders.1.model.transformer.resblocks.8.ln_2.weight", + "model.text_model.encoder.layers.8.mlp.fc1.bias": "conditioner.embedders.1.model.transformer.resblocks.8.mlp.c_fc.bias", + "model.text_model.encoder.layers.8.mlp.fc1.weight": "conditioner.embedders.1.model.transformer.resblocks.8.mlp.c_fc.weight", + "model.text_model.encoder.layers.8.mlp.fc2.bias": "conditioner.embedders.1.model.transformer.resblocks.8.mlp.c_proj.bias", + "model.text_model.encoder.layers.8.mlp.fc2.weight": "conditioner.embedders.1.model.transformer.resblocks.8.mlp.c_proj.weight", + "model.text_model.encoder.layers.8.self_attn.out_proj.bias": "conditioner.embedders.1.model.transformer.resblocks.8.attn.out_proj.bias", + "model.text_model.encoder.layers.8.self_attn.out_proj.weight": "conditioner.embedders.1.model.transformer.resblocks.8.attn.out_proj.weight", + "model.text_model.encoder.layers.9.layer_norm1.bias": "conditioner.embedders.1.model.transformer.resblocks.9.ln_1.bias", + "model.text_model.encoder.layers.9.layer_norm1.weight": "conditioner.embedders.1.model.transformer.resblocks.9.ln_1.weight", + "model.text_model.encoder.layers.9.layer_norm2.bias": "conditioner.embedders.1.model.transformer.resblocks.9.ln_2.bias", + "model.text_model.encoder.layers.9.layer_norm2.weight": "conditioner.embedders.1.model.transformer.resblocks.9.ln_2.weight", + "model.text_model.encoder.layers.9.mlp.fc1.bias": "conditioner.embedders.1.model.transformer.resblocks.9.mlp.c_fc.bias", + "model.text_model.encoder.layers.9.mlp.fc1.weight": "conditioner.embedders.1.model.transformer.resblocks.9.mlp.c_fc.weight", + "model.text_model.encoder.layers.9.mlp.fc2.bias": "conditioner.embedders.1.model.transformer.resblocks.9.mlp.c_proj.bias", + "model.text_model.encoder.layers.9.mlp.fc2.weight": "conditioner.embedders.1.model.transformer.resblocks.9.mlp.c_proj.weight", + "model.text_model.encoder.layers.9.self_attn.out_proj.bias": "conditioner.embedders.1.model.transformer.resblocks.9.attn.out_proj.bias", + "model.text_model.encoder.layers.9.self_attn.out_proj.weight": "conditioner.embedders.1.model.transformer.resblocks.9.attn.out_proj.weight", + "model.text_model.final_layer_norm.bias": "conditioner.embedders.1.model.ln_final.bias", + "model.text_model.final_layer_norm.weight": "conditioner.embedders.1.model.ln_final.weight", +} + +def SDXLTextEncoder2StateDictConverter_Original2Diffusers(state_dict): + state_dict_ = {name: state_dict[rename_dict[name]] for name in rename_dict if rename_dict[name] in state_dict} + for i in range(32): + name = f"conditioner.embedders.1.model.transformer.resblocks.{i}.attn.in_proj_weight" + if name not in state_dict: + continue + state_dict_[f"model.text_model.encoder.layers.{i}.self_attn.q_proj.weight"] = state_dict[name][:1280] + state_dict_[f"model.text_model.encoder.layers.{i}.self_attn.k_proj.weight"] = state_dict[name][1280:1280*2] + state_dict_[f"model.text_model.encoder.layers.{i}.self_attn.v_proj.weight"] = state_dict[name][1280*2:] + for i in range(32): + name = f"conditioner.embedders.1.model.transformer.resblocks.{i}.attn.in_proj_bias" + if name not in state_dict: + continue + state_dict_[f"model.text_model.encoder.layers.{i}.self_attn.q_proj.bias"] = state_dict[name][:1280] + state_dict_[f"model.text_model.encoder.layers.{i}.self_attn.k_proj.bias"] = state_dict[name][1280:1280*2] + state_dict_[f"model.text_model.encoder.layers.{i}.self_attn.v_proj.bias"] = state_dict[name][1280*2:] + state_dict_["model.text_projection.weight"] = state_dict["conditioner.embedders.1.model.text_projection"].T + return state_dict_ diff --git a/diffsynth/utils/state_dict_converters/sdxl_vae.py b/diffsynth/utils/state_dict_converters/sdxl_vae.py new file mode 100644 index 0000000000000000000000000000000000000000..e7faa27cbf8111f2cfdd0240cda6876caf7c12cd --- /dev/null +++ b/diffsynth/utils/state_dict_converters/sdxl_vae.py @@ -0,0 +1,265 @@ +rename_dict = { + "decoder.conv_in.bias": "first_stage_model.decoder.conv_in.bias", + "decoder.conv_in.weight": "first_stage_model.decoder.conv_in.weight", + "decoder.conv_norm_out.bias": "first_stage_model.decoder.norm_out.bias", + "decoder.conv_norm_out.weight": "first_stage_model.decoder.norm_out.weight", + "decoder.conv_out.bias": "first_stage_model.decoder.conv_out.bias", + "decoder.conv_out.weight": "first_stage_model.decoder.conv_out.weight", + "decoder.mid_block.attentions.0.group_norm.bias": "first_stage_model.decoder.mid.attn_1.norm.bias", + "decoder.mid_block.attentions.0.group_norm.weight": "first_stage_model.decoder.mid.attn_1.norm.weight", + "decoder.mid_block.attentions.0.to_k.bias": "first_stage_model.decoder.mid.attn_1.k.bias", + "decoder.mid_block.attentions.0.to_k.weight": "first_stage_model.decoder.mid.attn_1.k.weight", + "decoder.mid_block.attentions.0.to_out.0.bias": "first_stage_model.decoder.mid.attn_1.proj_out.bias", + "decoder.mid_block.attentions.0.to_out.0.weight": "first_stage_model.decoder.mid.attn_1.proj_out.weight", + "decoder.mid_block.attentions.0.to_q.bias": "first_stage_model.decoder.mid.attn_1.q.bias", + "decoder.mid_block.attentions.0.to_q.weight": "first_stage_model.decoder.mid.attn_1.q.weight", + "decoder.mid_block.attentions.0.to_v.bias": "first_stage_model.decoder.mid.attn_1.v.bias", + "decoder.mid_block.attentions.0.to_v.weight": "first_stage_model.decoder.mid.attn_1.v.weight", + "decoder.mid_block.resnets.0.conv1.bias": "first_stage_model.decoder.mid.block_1.conv1.bias", + "decoder.mid_block.resnets.0.conv1.weight": "first_stage_model.decoder.mid.block_1.conv1.weight", + "decoder.mid_block.resnets.0.conv2.bias": "first_stage_model.decoder.mid.block_1.conv2.bias", + "decoder.mid_block.resnets.0.conv2.weight": "first_stage_model.decoder.mid.block_1.conv2.weight", + "decoder.mid_block.resnets.0.norm1.bias": "first_stage_model.decoder.mid.block_1.norm1.bias", + "decoder.mid_block.resnets.0.norm1.weight": "first_stage_model.decoder.mid.block_1.norm1.weight", + "decoder.mid_block.resnets.0.norm2.bias": "first_stage_model.decoder.mid.block_1.norm2.bias", + "decoder.mid_block.resnets.0.norm2.weight": "first_stage_model.decoder.mid.block_1.norm2.weight", + "decoder.mid_block.resnets.1.conv1.bias": "first_stage_model.decoder.mid.block_2.conv1.bias", + "decoder.mid_block.resnets.1.conv1.weight": "first_stage_model.decoder.mid.block_2.conv1.weight", + "decoder.mid_block.resnets.1.conv2.bias": "first_stage_model.decoder.mid.block_2.conv2.bias", + "decoder.mid_block.resnets.1.conv2.weight": "first_stage_model.decoder.mid.block_2.conv2.weight", + "decoder.mid_block.resnets.1.norm1.bias": "first_stage_model.decoder.mid.block_2.norm1.bias", + "decoder.mid_block.resnets.1.norm1.weight": "first_stage_model.decoder.mid.block_2.norm1.weight", + "decoder.mid_block.resnets.1.norm2.bias": "first_stage_model.decoder.mid.block_2.norm2.bias", + "decoder.mid_block.resnets.1.norm2.weight": "first_stage_model.decoder.mid.block_2.norm2.weight", + "decoder.up_blocks.0.resnets.0.conv1.bias": "first_stage_model.decoder.up.3.block.0.conv1.bias", + "decoder.up_blocks.0.resnets.0.conv1.weight": "first_stage_model.decoder.up.3.block.0.conv1.weight", + "decoder.up_blocks.0.resnets.0.conv2.bias": "first_stage_model.decoder.up.3.block.0.conv2.bias", + "decoder.up_blocks.0.resnets.0.conv2.weight": "first_stage_model.decoder.up.3.block.0.conv2.weight", + "decoder.up_blocks.0.resnets.0.norm1.bias": "first_stage_model.decoder.up.3.block.0.norm1.bias", + "decoder.up_blocks.0.resnets.0.norm1.weight": "first_stage_model.decoder.up.3.block.0.norm1.weight", + "decoder.up_blocks.0.resnets.0.norm2.bias": "first_stage_model.decoder.up.3.block.0.norm2.bias", + "decoder.up_blocks.0.resnets.0.norm2.weight": "first_stage_model.decoder.up.3.block.0.norm2.weight", + "decoder.up_blocks.0.resnets.1.conv1.bias": "first_stage_model.decoder.up.3.block.1.conv1.bias", + "decoder.up_blocks.0.resnets.1.conv1.weight": "first_stage_model.decoder.up.3.block.1.conv1.weight", + "decoder.up_blocks.0.resnets.1.conv2.bias": "first_stage_model.decoder.up.3.block.1.conv2.bias", + "decoder.up_blocks.0.resnets.1.conv2.weight": "first_stage_model.decoder.up.3.block.1.conv2.weight", + "decoder.up_blocks.0.resnets.1.norm1.bias": "first_stage_model.decoder.up.3.block.1.norm1.bias", + "decoder.up_blocks.0.resnets.1.norm1.weight": "first_stage_model.decoder.up.3.block.1.norm1.weight", + "decoder.up_blocks.0.resnets.1.norm2.bias": "first_stage_model.decoder.up.3.block.1.norm2.bias", + "decoder.up_blocks.0.resnets.1.norm2.weight": "first_stage_model.decoder.up.3.block.1.norm2.weight", + "decoder.up_blocks.0.resnets.2.conv1.bias": "first_stage_model.decoder.up.3.block.2.conv1.bias", + "decoder.up_blocks.0.resnets.2.conv1.weight": "first_stage_model.decoder.up.3.block.2.conv1.weight", + "decoder.up_blocks.0.resnets.2.conv2.bias": "first_stage_model.decoder.up.3.block.2.conv2.bias", + "decoder.up_blocks.0.resnets.2.conv2.weight": "first_stage_model.decoder.up.3.block.2.conv2.weight", + "decoder.up_blocks.0.resnets.2.norm1.bias": "first_stage_model.decoder.up.3.block.2.norm1.bias", + "decoder.up_blocks.0.resnets.2.norm1.weight": "first_stage_model.decoder.up.3.block.2.norm1.weight", + "decoder.up_blocks.0.resnets.2.norm2.bias": "first_stage_model.decoder.up.3.block.2.norm2.bias", + "decoder.up_blocks.0.resnets.2.norm2.weight": "first_stage_model.decoder.up.3.block.2.norm2.weight", + "decoder.up_blocks.0.upsamplers.0.conv.bias": "first_stage_model.decoder.up.3.upsample.conv.bias", + "decoder.up_blocks.0.upsamplers.0.conv.weight": "first_stage_model.decoder.up.3.upsample.conv.weight", + "decoder.up_blocks.1.resnets.0.conv1.bias": "first_stage_model.decoder.up.2.block.0.conv1.bias", + "decoder.up_blocks.1.resnets.0.conv1.weight": "first_stage_model.decoder.up.2.block.0.conv1.weight", + "decoder.up_blocks.1.resnets.0.conv2.bias": "first_stage_model.decoder.up.2.block.0.conv2.bias", + "decoder.up_blocks.1.resnets.0.conv2.weight": "first_stage_model.decoder.up.2.block.0.conv2.weight", + "decoder.up_blocks.1.resnets.0.norm1.bias": "first_stage_model.decoder.up.2.block.0.norm1.bias", + "decoder.up_blocks.1.resnets.0.norm1.weight": "first_stage_model.decoder.up.2.block.0.norm1.weight", + "decoder.up_blocks.1.resnets.0.norm2.bias": "first_stage_model.decoder.up.2.block.0.norm2.bias", + "decoder.up_blocks.1.resnets.0.norm2.weight": "first_stage_model.decoder.up.2.block.0.norm2.weight", + "decoder.up_blocks.1.resnets.1.conv1.bias": "first_stage_model.decoder.up.2.block.1.conv1.bias", + "decoder.up_blocks.1.resnets.1.conv1.weight": "first_stage_model.decoder.up.2.block.1.conv1.weight", + "decoder.up_blocks.1.resnets.1.conv2.bias": "first_stage_model.decoder.up.2.block.1.conv2.bias", + "decoder.up_blocks.1.resnets.1.conv2.weight": "first_stage_model.decoder.up.2.block.1.conv2.weight", + "decoder.up_blocks.1.resnets.1.norm1.bias": "first_stage_model.decoder.up.2.block.1.norm1.bias", + "decoder.up_blocks.1.resnets.1.norm1.weight": "first_stage_model.decoder.up.2.block.1.norm1.weight", + "decoder.up_blocks.1.resnets.1.norm2.bias": "first_stage_model.decoder.up.2.block.1.norm2.bias", + "decoder.up_blocks.1.resnets.1.norm2.weight": "first_stage_model.decoder.up.2.block.1.norm2.weight", + "decoder.up_blocks.1.resnets.2.conv1.bias": "first_stage_model.decoder.up.2.block.2.conv1.bias", + "decoder.up_blocks.1.resnets.2.conv1.weight": "first_stage_model.decoder.up.2.block.2.conv1.weight", + "decoder.up_blocks.1.resnets.2.conv2.bias": "first_stage_model.decoder.up.2.block.2.conv2.bias", + "decoder.up_blocks.1.resnets.2.conv2.weight": "first_stage_model.decoder.up.2.block.2.conv2.weight", + "decoder.up_blocks.1.resnets.2.norm1.bias": "first_stage_model.decoder.up.2.block.2.norm1.bias", + "decoder.up_blocks.1.resnets.2.norm1.weight": "first_stage_model.decoder.up.2.block.2.norm1.weight", + "decoder.up_blocks.1.resnets.2.norm2.bias": "first_stage_model.decoder.up.2.block.2.norm2.bias", + "decoder.up_blocks.1.resnets.2.norm2.weight": "first_stage_model.decoder.up.2.block.2.norm2.weight", + "decoder.up_blocks.1.upsamplers.0.conv.bias": "first_stage_model.decoder.up.2.upsample.conv.bias", + "decoder.up_blocks.1.upsamplers.0.conv.weight": "first_stage_model.decoder.up.2.upsample.conv.weight", + "decoder.up_blocks.2.resnets.0.conv1.bias": "first_stage_model.decoder.up.1.block.0.conv1.bias", + "decoder.up_blocks.2.resnets.0.conv1.weight": "first_stage_model.decoder.up.1.block.0.conv1.weight", + "decoder.up_blocks.2.resnets.0.conv2.bias": "first_stage_model.decoder.up.1.block.0.conv2.bias", + "decoder.up_blocks.2.resnets.0.conv2.weight": "first_stage_model.decoder.up.1.block.0.conv2.weight", + "decoder.up_blocks.2.resnets.0.conv_shortcut.bias": "first_stage_model.decoder.up.1.block.0.nin_shortcut.bias", + "decoder.up_blocks.2.resnets.0.conv_shortcut.weight": "first_stage_model.decoder.up.1.block.0.nin_shortcut.weight", + "decoder.up_blocks.2.resnets.0.norm1.bias": "first_stage_model.decoder.up.1.block.0.norm1.bias", + "decoder.up_blocks.2.resnets.0.norm1.weight": "first_stage_model.decoder.up.1.block.0.norm1.weight", + "decoder.up_blocks.2.resnets.0.norm2.bias": "first_stage_model.decoder.up.1.block.0.norm2.bias", + "decoder.up_blocks.2.resnets.0.norm2.weight": "first_stage_model.decoder.up.1.block.0.norm2.weight", + "decoder.up_blocks.2.resnets.1.conv1.bias": "first_stage_model.decoder.up.1.block.1.conv1.bias", + "decoder.up_blocks.2.resnets.1.conv1.weight": "first_stage_model.decoder.up.1.block.1.conv1.weight", + "decoder.up_blocks.2.resnets.1.conv2.bias": "first_stage_model.decoder.up.1.block.1.conv2.bias", + "decoder.up_blocks.2.resnets.1.conv2.weight": "first_stage_model.decoder.up.1.block.1.conv2.weight", + "decoder.up_blocks.2.resnets.1.norm1.bias": "first_stage_model.decoder.up.1.block.1.norm1.bias", + "decoder.up_blocks.2.resnets.1.norm1.weight": "first_stage_model.decoder.up.1.block.1.norm1.weight", + "decoder.up_blocks.2.resnets.1.norm2.bias": "first_stage_model.decoder.up.1.block.1.norm2.bias", + "decoder.up_blocks.2.resnets.1.norm2.weight": "first_stage_model.decoder.up.1.block.1.norm2.weight", + "decoder.up_blocks.2.resnets.2.conv1.bias": "first_stage_model.decoder.up.1.block.2.conv1.bias", + "decoder.up_blocks.2.resnets.2.conv1.weight": "first_stage_model.decoder.up.1.block.2.conv1.weight", + "decoder.up_blocks.2.resnets.2.conv2.bias": "first_stage_model.decoder.up.1.block.2.conv2.bias", + "decoder.up_blocks.2.resnets.2.conv2.weight": "first_stage_model.decoder.up.1.block.2.conv2.weight", + "decoder.up_blocks.2.resnets.2.norm1.bias": "first_stage_model.decoder.up.1.block.2.norm1.bias", + "decoder.up_blocks.2.resnets.2.norm1.weight": "first_stage_model.decoder.up.1.block.2.norm1.weight", + "decoder.up_blocks.2.resnets.2.norm2.bias": "first_stage_model.decoder.up.1.block.2.norm2.bias", + "decoder.up_blocks.2.resnets.2.norm2.weight": "first_stage_model.decoder.up.1.block.2.norm2.weight", + "decoder.up_blocks.2.upsamplers.0.conv.bias": "first_stage_model.decoder.up.1.upsample.conv.bias", + "decoder.up_blocks.2.upsamplers.0.conv.weight": "first_stage_model.decoder.up.1.upsample.conv.weight", + "decoder.up_blocks.3.resnets.0.conv1.bias": "first_stage_model.decoder.up.0.block.0.conv1.bias", + "decoder.up_blocks.3.resnets.0.conv1.weight": "first_stage_model.decoder.up.0.block.0.conv1.weight", + "decoder.up_blocks.3.resnets.0.conv2.bias": "first_stage_model.decoder.up.0.block.0.conv2.bias", + "decoder.up_blocks.3.resnets.0.conv2.weight": "first_stage_model.decoder.up.0.block.0.conv2.weight", + "decoder.up_blocks.3.resnets.0.conv_shortcut.bias": "first_stage_model.decoder.up.0.block.0.nin_shortcut.bias", + "decoder.up_blocks.3.resnets.0.conv_shortcut.weight": "first_stage_model.decoder.up.0.block.0.nin_shortcut.weight", + "decoder.up_blocks.3.resnets.0.norm1.bias": "first_stage_model.decoder.up.0.block.0.norm1.bias", + "decoder.up_blocks.3.resnets.0.norm1.weight": "first_stage_model.decoder.up.0.block.0.norm1.weight", + "decoder.up_blocks.3.resnets.0.norm2.bias": "first_stage_model.decoder.up.0.block.0.norm2.bias", + "decoder.up_blocks.3.resnets.0.norm2.weight": "first_stage_model.decoder.up.0.block.0.norm2.weight", + "decoder.up_blocks.3.resnets.1.conv1.bias": "first_stage_model.decoder.up.0.block.1.conv1.bias", + "decoder.up_blocks.3.resnets.1.conv1.weight": "first_stage_model.decoder.up.0.block.1.conv1.weight", + "decoder.up_blocks.3.resnets.1.conv2.bias": "first_stage_model.decoder.up.0.block.1.conv2.bias", + "decoder.up_blocks.3.resnets.1.conv2.weight": "first_stage_model.decoder.up.0.block.1.conv2.weight", + "decoder.up_blocks.3.resnets.1.norm1.bias": "first_stage_model.decoder.up.0.block.1.norm1.bias", + "decoder.up_blocks.3.resnets.1.norm1.weight": "first_stage_model.decoder.up.0.block.1.norm1.weight", + "decoder.up_blocks.3.resnets.1.norm2.bias": "first_stage_model.decoder.up.0.block.1.norm2.bias", + "decoder.up_blocks.3.resnets.1.norm2.weight": "first_stage_model.decoder.up.0.block.1.norm2.weight", + "decoder.up_blocks.3.resnets.2.conv1.bias": "first_stage_model.decoder.up.0.block.2.conv1.bias", + "decoder.up_blocks.3.resnets.2.conv1.weight": "first_stage_model.decoder.up.0.block.2.conv1.weight", + "decoder.up_blocks.3.resnets.2.conv2.bias": "first_stage_model.decoder.up.0.block.2.conv2.bias", + "decoder.up_blocks.3.resnets.2.conv2.weight": "first_stage_model.decoder.up.0.block.2.conv2.weight", + "decoder.up_blocks.3.resnets.2.norm1.bias": "first_stage_model.decoder.up.0.block.2.norm1.bias", + "decoder.up_blocks.3.resnets.2.norm1.weight": "first_stage_model.decoder.up.0.block.2.norm1.weight", + "decoder.up_blocks.3.resnets.2.norm2.bias": "first_stage_model.decoder.up.0.block.2.norm2.bias", + "decoder.up_blocks.3.resnets.2.norm2.weight": "first_stage_model.decoder.up.0.block.2.norm2.weight", + "encoder.conv_in.bias": "first_stage_model.encoder.conv_in.bias", + "encoder.conv_in.weight": "first_stage_model.encoder.conv_in.weight", + "encoder.conv_norm_out.bias": "first_stage_model.encoder.norm_out.bias", + "encoder.conv_norm_out.weight": "first_stage_model.encoder.norm_out.weight", + "encoder.conv_out.bias": "first_stage_model.encoder.conv_out.bias", + "encoder.conv_out.weight": "first_stage_model.encoder.conv_out.weight", + "encoder.down_blocks.0.downsamplers.0.conv.bias": "first_stage_model.encoder.down.0.downsample.conv.bias", + "encoder.down_blocks.0.downsamplers.0.conv.weight": "first_stage_model.encoder.down.0.downsample.conv.weight", + "encoder.down_blocks.0.resnets.0.conv1.bias": "first_stage_model.encoder.down.0.block.0.conv1.bias", + "encoder.down_blocks.0.resnets.0.conv1.weight": "first_stage_model.encoder.down.0.block.0.conv1.weight", + "encoder.down_blocks.0.resnets.0.conv2.bias": "first_stage_model.encoder.down.0.block.0.conv2.bias", + "encoder.down_blocks.0.resnets.0.conv2.weight": "first_stage_model.encoder.down.0.block.0.conv2.weight", + "encoder.down_blocks.0.resnets.0.norm1.bias": "first_stage_model.encoder.down.0.block.0.norm1.bias", + "encoder.down_blocks.0.resnets.0.norm1.weight": "first_stage_model.encoder.down.0.block.0.norm1.weight", + "encoder.down_blocks.0.resnets.0.norm2.bias": "first_stage_model.encoder.down.0.block.0.norm2.bias", + "encoder.down_blocks.0.resnets.0.norm2.weight": "first_stage_model.encoder.down.0.block.0.norm2.weight", + "encoder.down_blocks.0.resnets.1.conv1.bias": "first_stage_model.encoder.down.0.block.1.conv1.bias", + "encoder.down_blocks.0.resnets.1.conv1.weight": "first_stage_model.encoder.down.0.block.1.conv1.weight", + "encoder.down_blocks.0.resnets.1.conv2.bias": "first_stage_model.encoder.down.0.block.1.conv2.bias", + "encoder.down_blocks.0.resnets.1.conv2.weight": "first_stage_model.encoder.down.0.block.1.conv2.weight", + "encoder.down_blocks.0.resnets.1.norm1.bias": "first_stage_model.encoder.down.0.block.1.norm1.bias", + "encoder.down_blocks.0.resnets.1.norm1.weight": "first_stage_model.encoder.down.0.block.1.norm1.weight", + "encoder.down_blocks.0.resnets.1.norm2.bias": "first_stage_model.encoder.down.0.block.1.norm2.bias", + "encoder.down_blocks.0.resnets.1.norm2.weight": "first_stage_model.encoder.down.0.block.1.norm2.weight", + "encoder.down_blocks.1.downsamplers.0.conv.bias": "first_stage_model.encoder.down.1.downsample.conv.bias", + "encoder.down_blocks.1.downsamplers.0.conv.weight": "first_stage_model.encoder.down.1.downsample.conv.weight", + "encoder.down_blocks.1.resnets.0.conv1.bias": "first_stage_model.encoder.down.1.block.0.conv1.bias", + "encoder.down_blocks.1.resnets.0.conv1.weight": "first_stage_model.encoder.down.1.block.0.conv1.weight", + "encoder.down_blocks.1.resnets.0.conv2.bias": "first_stage_model.encoder.down.1.block.0.conv2.bias", + "encoder.down_blocks.1.resnets.0.conv2.weight": "first_stage_model.encoder.down.1.block.0.conv2.weight", + "encoder.down_blocks.1.resnets.0.conv_shortcut.bias": "first_stage_model.encoder.down.1.block.0.nin_shortcut.bias", + "encoder.down_blocks.1.resnets.0.conv_shortcut.weight": "first_stage_model.encoder.down.1.block.0.nin_shortcut.weight", + "encoder.down_blocks.1.resnets.0.norm1.bias": "first_stage_model.encoder.down.1.block.0.norm1.bias", + "encoder.down_blocks.1.resnets.0.norm1.weight": "first_stage_model.encoder.down.1.block.0.norm1.weight", + "encoder.down_blocks.1.resnets.0.norm2.bias": "first_stage_model.encoder.down.1.block.0.norm2.bias", + "encoder.down_blocks.1.resnets.0.norm2.weight": "first_stage_model.encoder.down.1.block.0.norm2.weight", + "encoder.down_blocks.1.resnets.1.conv1.bias": "first_stage_model.encoder.down.1.block.1.conv1.bias", + "encoder.down_blocks.1.resnets.1.conv1.weight": "first_stage_model.encoder.down.1.block.1.conv1.weight", + "encoder.down_blocks.1.resnets.1.conv2.bias": "first_stage_model.encoder.down.1.block.1.conv2.bias", + "encoder.down_blocks.1.resnets.1.conv2.weight": "first_stage_model.encoder.down.1.block.1.conv2.weight", + "encoder.down_blocks.1.resnets.1.norm1.bias": "first_stage_model.encoder.down.1.block.1.norm1.bias", + "encoder.down_blocks.1.resnets.1.norm1.weight": "first_stage_model.encoder.down.1.block.1.norm1.weight", + "encoder.down_blocks.1.resnets.1.norm2.bias": "first_stage_model.encoder.down.1.block.1.norm2.bias", + "encoder.down_blocks.1.resnets.1.norm2.weight": "first_stage_model.encoder.down.1.block.1.norm2.weight", + "encoder.down_blocks.2.downsamplers.0.conv.bias": "first_stage_model.encoder.down.2.downsample.conv.bias", + "encoder.down_blocks.2.downsamplers.0.conv.weight": "first_stage_model.encoder.down.2.downsample.conv.weight", + "encoder.down_blocks.2.resnets.0.conv1.bias": "first_stage_model.encoder.down.2.block.0.conv1.bias", + "encoder.down_blocks.2.resnets.0.conv1.weight": "first_stage_model.encoder.down.2.block.0.conv1.weight", + "encoder.down_blocks.2.resnets.0.conv2.bias": "first_stage_model.encoder.down.2.block.0.conv2.bias", + "encoder.down_blocks.2.resnets.0.conv2.weight": "first_stage_model.encoder.down.2.block.0.conv2.weight", + "encoder.down_blocks.2.resnets.0.conv_shortcut.bias": "first_stage_model.encoder.down.2.block.0.nin_shortcut.bias", + "encoder.down_blocks.2.resnets.0.conv_shortcut.weight": "first_stage_model.encoder.down.2.block.0.nin_shortcut.weight", + "encoder.down_blocks.2.resnets.0.norm1.bias": "first_stage_model.encoder.down.2.block.0.norm1.bias", + "encoder.down_blocks.2.resnets.0.norm1.weight": "first_stage_model.encoder.down.2.block.0.norm1.weight", + "encoder.down_blocks.2.resnets.0.norm2.bias": "first_stage_model.encoder.down.2.block.0.norm2.bias", + "encoder.down_blocks.2.resnets.0.norm2.weight": "first_stage_model.encoder.down.2.block.0.norm2.weight", + "encoder.down_blocks.2.resnets.1.conv1.bias": "first_stage_model.encoder.down.2.block.1.conv1.bias", + "encoder.down_blocks.2.resnets.1.conv1.weight": "first_stage_model.encoder.down.2.block.1.conv1.weight", + "encoder.down_blocks.2.resnets.1.conv2.bias": "first_stage_model.encoder.down.2.block.1.conv2.bias", + "encoder.down_blocks.2.resnets.1.conv2.weight": "first_stage_model.encoder.down.2.block.1.conv2.weight", + "encoder.down_blocks.2.resnets.1.norm1.bias": "first_stage_model.encoder.down.2.block.1.norm1.bias", + "encoder.down_blocks.2.resnets.1.norm1.weight": "first_stage_model.encoder.down.2.block.1.norm1.weight", + "encoder.down_blocks.2.resnets.1.norm2.bias": "first_stage_model.encoder.down.2.block.1.norm2.bias", + "encoder.down_blocks.2.resnets.1.norm2.weight": "first_stage_model.encoder.down.2.block.1.norm2.weight", + "encoder.down_blocks.3.resnets.0.conv1.bias": "first_stage_model.encoder.down.3.block.0.conv1.bias", + "encoder.down_blocks.3.resnets.0.conv1.weight": "first_stage_model.encoder.down.3.block.0.conv1.weight", + "encoder.down_blocks.3.resnets.0.conv2.bias": "first_stage_model.encoder.down.3.block.0.conv2.bias", + "encoder.down_blocks.3.resnets.0.conv2.weight": "first_stage_model.encoder.down.3.block.0.conv2.weight", + "encoder.down_blocks.3.resnets.0.norm1.bias": "first_stage_model.encoder.down.3.block.0.norm1.bias", + "encoder.down_blocks.3.resnets.0.norm1.weight": "first_stage_model.encoder.down.3.block.0.norm1.weight", + "encoder.down_blocks.3.resnets.0.norm2.bias": "first_stage_model.encoder.down.3.block.0.norm2.bias", + "encoder.down_blocks.3.resnets.0.norm2.weight": "first_stage_model.encoder.down.3.block.0.norm2.weight", + "encoder.down_blocks.3.resnets.1.conv1.bias": "first_stage_model.encoder.down.3.block.1.conv1.bias", + "encoder.down_blocks.3.resnets.1.conv1.weight": "first_stage_model.encoder.down.3.block.1.conv1.weight", + "encoder.down_blocks.3.resnets.1.conv2.bias": "first_stage_model.encoder.down.3.block.1.conv2.bias", + "encoder.down_blocks.3.resnets.1.conv2.weight": "first_stage_model.encoder.down.3.block.1.conv2.weight", + "encoder.down_blocks.3.resnets.1.norm1.bias": "first_stage_model.encoder.down.3.block.1.norm1.bias", + "encoder.down_blocks.3.resnets.1.norm1.weight": "first_stage_model.encoder.down.3.block.1.norm1.weight", + "encoder.down_blocks.3.resnets.1.norm2.bias": "first_stage_model.encoder.down.3.block.1.norm2.bias", + "encoder.down_blocks.3.resnets.1.norm2.weight": "first_stage_model.encoder.down.3.block.1.norm2.weight", + "encoder.mid_block.attentions.0.group_norm.bias": "first_stage_model.encoder.mid.attn_1.norm.bias", + "encoder.mid_block.attentions.0.group_norm.weight": "first_stage_model.encoder.mid.attn_1.norm.weight", + "encoder.mid_block.attentions.0.to_k.bias": "first_stage_model.encoder.mid.attn_1.k.bias", + "encoder.mid_block.attentions.0.to_k.weight": "first_stage_model.encoder.mid.attn_1.k.weight", + "encoder.mid_block.attentions.0.to_out.0.bias": "first_stage_model.encoder.mid.attn_1.proj_out.bias", + "encoder.mid_block.attentions.0.to_out.0.weight": "first_stage_model.encoder.mid.attn_1.proj_out.weight", + "encoder.mid_block.attentions.0.to_q.bias": "first_stage_model.encoder.mid.attn_1.q.bias", + "encoder.mid_block.attentions.0.to_q.weight": "first_stage_model.encoder.mid.attn_1.q.weight", + "encoder.mid_block.attentions.0.to_v.bias": "first_stage_model.encoder.mid.attn_1.v.bias", + "encoder.mid_block.attentions.0.to_v.weight": "first_stage_model.encoder.mid.attn_1.v.weight", + "encoder.mid_block.resnets.0.conv1.bias": "first_stage_model.encoder.mid.block_1.conv1.bias", + "encoder.mid_block.resnets.0.conv1.weight": "first_stage_model.encoder.mid.block_1.conv1.weight", + "encoder.mid_block.resnets.0.conv2.bias": "first_stage_model.encoder.mid.block_1.conv2.bias", + "encoder.mid_block.resnets.0.conv2.weight": "first_stage_model.encoder.mid.block_1.conv2.weight", + "encoder.mid_block.resnets.0.norm1.bias": "first_stage_model.encoder.mid.block_1.norm1.bias", + "encoder.mid_block.resnets.0.norm1.weight": "first_stage_model.encoder.mid.block_1.norm1.weight", + "encoder.mid_block.resnets.0.norm2.bias": "first_stage_model.encoder.mid.block_1.norm2.bias", + "encoder.mid_block.resnets.0.norm2.weight": "first_stage_model.encoder.mid.block_1.norm2.weight", + "encoder.mid_block.resnets.1.conv1.bias": "first_stage_model.encoder.mid.block_2.conv1.bias", + "encoder.mid_block.resnets.1.conv1.weight": "first_stage_model.encoder.mid.block_2.conv1.weight", + "encoder.mid_block.resnets.1.conv2.bias": "first_stage_model.encoder.mid.block_2.conv2.bias", + "encoder.mid_block.resnets.1.conv2.weight": "first_stage_model.encoder.mid.block_2.conv2.weight", + "encoder.mid_block.resnets.1.norm1.bias": "first_stage_model.encoder.mid.block_2.norm1.bias", + "encoder.mid_block.resnets.1.norm1.weight": "first_stage_model.encoder.mid.block_2.norm1.weight", + "encoder.mid_block.resnets.1.norm2.bias": "first_stage_model.encoder.mid.block_2.norm2.bias", + "encoder.mid_block.resnets.1.norm2.weight": "first_stage_model.encoder.mid.block_2.norm2.weight", + "post_quant_conv.bias": "first_stage_model.post_quant_conv.bias", + "post_quant_conv.weight": "first_stage_model.post_quant_conv.weight", + "quant_conv.bias": "first_stage_model.quant_conv.bias", + "quant_conv.weight": "first_stage_model.quant_conv.weight", +} + +def SDXLVAEStateDictConverter_Original2Diffusers(state_dict): + state_dict_ = {name: state_dict[rename_dict[name]] for name in rename_dict if rename_dict[name] in state_dict} + for name in [ + "encoder.mid_block.attentions.0.to_q.weight", + "encoder.mid_block.attentions.0.to_k.weight", + "encoder.mid_block.attentions.0.to_v.weight", + "encoder.mid_block.attentions.0.to_out.0.weight", + "decoder.mid_block.attentions.0.to_q.weight", + "decoder.mid_block.attentions.0.to_k.weight", + "decoder.mid_block.attentions.0.to_v.weight", + "decoder.mid_block.attentions.0.to_out.0.weight", + ]: + state_dict_[name] = state_dict_[name].squeeze() + return state_dict_ diff --git a/diffsynth/utils/state_dict_converters/stable_diffusion_text_encoder.py b/diffsynth/utils/state_dict_converters/stable_diffusion_text_encoder.py new file mode 100644 index 0000000000000000000000000000000000000000..3086b65e57fe5359b9c96be734e25c8296872077 --- /dev/null +++ b/diffsynth/utils/state_dict_converters/stable_diffusion_text_encoder.py @@ -0,0 +1,7 @@ +def SDTextEncoderStateDictConverter(state_dict): + new_state_dict = {} + for key in state_dict: + if key.startswith("text_model.") and "position_ids" not in key: + new_key = "model." + key + new_state_dict[new_key] = state_dict[key] + return new_state_dict diff --git a/diffsynth/utils/state_dict_converters/stable_diffusion_vae.py b/diffsynth/utils/state_dict_converters/stable_diffusion_vae.py new file mode 100644 index 0000000000000000000000000000000000000000..a41d3ce0d204a78794e538bcb83896af62367049 --- /dev/null +++ b/diffsynth/utils/state_dict_converters/stable_diffusion_vae.py @@ -0,0 +1,18 @@ +def SDVAEStateDictConverter(state_dict): + new_state_dict = {} + for key in state_dict: + if ".query." in key: + new_key = key.replace(".query.", ".to_q.") + new_state_dict[new_key] = state_dict[key] + elif ".key." in key: + new_key = key.replace(".key.", ".to_k.") + new_state_dict[new_key] = state_dict[key] + elif ".value." in key: + new_key = key.replace(".value.", ".to_v.") + new_state_dict[new_key] = state_dict[key] + elif ".proj_attn." in key: + new_key = key.replace(".proj_attn.", ".to_out.0.") + new_state_dict[new_key] = state_dict[key] + else: + new_state_dict[key] = state_dict[key] + return new_state_dict diff --git a/diffsynth/utils/state_dict_converters/stable_diffusion_xl_text_encoder.py b/diffsynth/utils/state_dict_converters/stable_diffusion_xl_text_encoder.py new file mode 100644 index 0000000000000000000000000000000000000000..ec3ae2801009830129ff30baaf3a7f75b21a92aa --- /dev/null +++ b/diffsynth/utils/state_dict_converters/stable_diffusion_xl_text_encoder.py @@ -0,0 +1,13 @@ +import torch + +def SDXLTextEncoder2StateDictConverter(state_dict): + new_state_dict = {} + for key in state_dict: + if key == "text_projection.weight": + val = state_dict[key] + new_state_dict["model.text_projection.weight"] = val.float() if val.dtype == torch.float16 else val + elif key.startswith("text_model.") and "position_ids" not in key: + new_key = "model." + key + val = state_dict[key] + new_state_dict[new_key] = val.float() if val.dtype == torch.float16 else val + return new_state_dict diff --git a/diffsynth/utils/state_dict_converters/step1x_connector.py b/diffsynth/utils/state_dict_converters/step1x_connector.py new file mode 100644 index 0000000000000000000000000000000000000000..35a2a4167b16ea5cc16aaa1b0f20575bc2918bbf --- /dev/null +++ b/diffsynth/utils/state_dict_converters/step1x_connector.py @@ -0,0 +1,7 @@ +def Qwen2ConnectorStateDictConverter(state_dict): + state_dict_ = {} + for name in state_dict: + if name.startswith("connector."): + name_ = name[len("connector."):] + state_dict_[name_] = state_dict[name] + return state_dict_ \ No newline at end of file diff --git a/diffsynth/utils/state_dict_converters/wan_video_animate_adapter.py b/diffsynth/utils/state_dict_converters/wan_video_animate_adapter.py new file mode 100644 index 0000000000000000000000000000000000000000..8ea69f4e6696bbef6de197abaa031ea8cc5b398e --- /dev/null +++ b/diffsynth/utils/state_dict_converters/wan_video_animate_adapter.py @@ -0,0 +1,6 @@ +def WanAnimateAdapterStateDictConverter(state_dict): + state_dict_ = {} + for name in state_dict: + if name.startswith("pose_patch_embedding.") or name.startswith("face_adapter") or name.startswith("face_encoder") or name.startswith("motion_encoder"): + state_dict_[name] = state_dict[name] + return state_dict_ \ No newline at end of file diff --git a/diffsynth/utils/state_dict_converters/wan_video_dit.py b/diffsynth/utils/state_dict_converters/wan_video_dit.py new file mode 100644 index 0000000000000000000000000000000000000000..c7716dad52e42ebf76f98dd85511ac0a04b3d3b3 --- /dev/null +++ b/diffsynth/utils/state_dict_converters/wan_video_dit.py @@ -0,0 +1,83 @@ +def WanVideoDiTFromDiffusers(state_dict): + rename_dict = { + "blocks.0.attn1.norm_k.weight": "blocks.0.self_attn.norm_k.weight", + "blocks.0.attn1.norm_q.weight": "blocks.0.self_attn.norm_q.weight", + "blocks.0.attn1.to_k.bias": "blocks.0.self_attn.k.bias", + "blocks.0.attn1.to_k.weight": "blocks.0.self_attn.k.weight", + "blocks.0.attn1.to_out.0.bias": "blocks.0.self_attn.o.bias", + "blocks.0.attn1.to_out.0.weight": "blocks.0.self_attn.o.weight", + "blocks.0.attn1.to_q.bias": "blocks.0.self_attn.q.bias", + "blocks.0.attn1.to_q.weight": "blocks.0.self_attn.q.weight", + "blocks.0.attn1.to_v.bias": "blocks.0.self_attn.v.bias", + "blocks.0.attn1.to_v.weight": "blocks.0.self_attn.v.weight", + "blocks.0.attn2.norm_k.weight": "blocks.0.cross_attn.norm_k.weight", + "blocks.0.attn2.norm_q.weight": "blocks.0.cross_attn.norm_q.weight", + "blocks.0.attn2.to_k.bias": "blocks.0.cross_attn.k.bias", + "blocks.0.attn2.to_k.weight": "blocks.0.cross_attn.k.weight", + "blocks.0.attn2.to_out.0.bias": "blocks.0.cross_attn.o.bias", + "blocks.0.attn2.to_out.0.weight": "blocks.0.cross_attn.o.weight", + "blocks.0.attn2.to_q.bias": "blocks.0.cross_attn.q.bias", + "blocks.0.attn2.to_q.weight": "blocks.0.cross_attn.q.weight", + "blocks.0.attn2.to_v.bias": "blocks.0.cross_attn.v.bias", + "blocks.0.attn2.to_v.weight": "blocks.0.cross_attn.v.weight", + "blocks.0.attn2.add_k_proj.bias":"blocks.0.cross_attn.k_img.bias", + "blocks.0.attn2.add_k_proj.weight":"blocks.0.cross_attn.k_img.weight", + "blocks.0.attn2.add_v_proj.bias":"blocks.0.cross_attn.v_img.bias", + "blocks.0.attn2.add_v_proj.weight":"blocks.0.cross_attn.v_img.weight", + "blocks.0.attn2.norm_added_k.weight":"blocks.0.cross_attn.norm_k_img.weight", + "blocks.0.ffn.net.0.proj.bias": "blocks.0.ffn.0.bias", + "blocks.0.ffn.net.0.proj.weight": "blocks.0.ffn.0.weight", + "blocks.0.ffn.net.2.bias": "blocks.0.ffn.2.bias", + "blocks.0.ffn.net.2.weight": "blocks.0.ffn.2.weight", + "blocks.0.norm2.bias": "blocks.0.norm3.bias", + "blocks.0.norm2.weight": "blocks.0.norm3.weight", + "blocks.0.scale_shift_table": "blocks.0.modulation", + "condition_embedder.text_embedder.linear_1.bias": "text_embedding.0.bias", + "condition_embedder.text_embedder.linear_1.weight": "text_embedding.0.weight", + "condition_embedder.text_embedder.linear_2.bias": "text_embedding.2.bias", + "condition_embedder.text_embedder.linear_2.weight": "text_embedding.2.weight", + "condition_embedder.time_embedder.linear_1.bias": "time_embedding.0.bias", + "condition_embedder.time_embedder.linear_1.weight": "time_embedding.0.weight", + "condition_embedder.time_embedder.linear_2.bias": "time_embedding.2.bias", + "condition_embedder.time_embedder.linear_2.weight": "time_embedding.2.weight", + "condition_embedder.time_proj.bias": "time_projection.1.bias", + "condition_embedder.time_proj.weight": "time_projection.1.weight", + "condition_embedder.image_embedder.ff.net.0.proj.bias":"img_emb.proj.1.bias", + "condition_embedder.image_embedder.ff.net.0.proj.weight":"img_emb.proj.1.weight", + "condition_embedder.image_embedder.ff.net.2.bias":"img_emb.proj.3.bias", + "condition_embedder.image_embedder.ff.net.2.weight":"img_emb.proj.3.weight", + "condition_embedder.image_embedder.norm1.bias":"img_emb.proj.0.bias", + "condition_embedder.image_embedder.norm1.weight":"img_emb.proj.0.weight", + "condition_embedder.image_embedder.norm2.bias":"img_emb.proj.4.bias", + "condition_embedder.image_embedder.norm2.weight":"img_emb.proj.4.weight", + "patch_embedding.bias": "patch_embedding.bias", + "patch_embedding.weight": "patch_embedding.weight", + "scale_shift_table": "head.modulation", + "proj_out.bias": "head.head.bias", + "proj_out.weight": "head.head.weight", + } + state_dict_ = {} + for name in state_dict: + if name in rename_dict: + state_dict_[rename_dict[name]] = state_dict[name] + else: + name_ = ".".join(name.split(".")[:1] + ["0"] + name.split(".")[2:]) + if name_ in rename_dict: + name_ = rename_dict[name_] + name_ = ".".join(name_.split(".")[:1] + [name.split(".")[1]] + name_.split(".")[2:]) + state_dict_[name_] = state_dict[name] + return state_dict_ + + +def WanVideoDiTStateDictConverter(state_dict): + state_dict_ = {} + for name in state_dict: + if name.startswith("vace"): + continue + if name.split(".")[0] in ["pose_patch_embedding", "face_adapter", "face_encoder", "motion_encoder"]: + continue + name_ = name + if name_.startswith("model."): + name_ = name_[len("model."):] + state_dict_[name_] = state_dict[name] + return state_dict_ diff --git a/diffsynth/utils/state_dict_converters/wan_video_image_encoder.py b/diffsynth/utils/state_dict_converters/wan_video_image_encoder.py new file mode 100644 index 0000000000000000000000000000000000000000..ecb7e9bfce50e88601f8876341ac56645a8e5913 --- /dev/null +++ b/diffsynth/utils/state_dict_converters/wan_video_image_encoder.py @@ -0,0 +1,8 @@ +def WanImageEncoderStateDictConverter(state_dict): + state_dict_ = {} + for name in state_dict: + if name.startswith("textual."): + continue + name_ = "model." + name + state_dict_[name_] = state_dict[name] + return state_dict_ \ No newline at end of file diff --git a/diffsynth/utils/state_dict_converters/wan_video_mot.py b/diffsynth/utils/state_dict_converters/wan_video_mot.py new file mode 100644 index 0000000000000000000000000000000000000000..12b42d7db752fca1cb24c0f16217deab925916f5 --- /dev/null +++ b/diffsynth/utils/state_dict_converters/wan_video_mot.py @@ -0,0 +1,78 @@ +def WanVideoMotStateDictConverter(state_dict): + rename_dict = { + "blocks.0.attn1.norm_k.weight": "blocks.0.self_attn.norm_k.weight", + "blocks.0.attn1.norm_q.weight": "blocks.0.self_attn.norm_q.weight", + "blocks.0.attn1.to_k.bias": "blocks.0.self_attn.k.bias", + "blocks.0.attn1.to_k.weight": "blocks.0.self_attn.k.weight", + "blocks.0.attn1.to_out.0.bias": "blocks.0.self_attn.o.bias", + "blocks.0.attn1.to_out.0.weight": "blocks.0.self_attn.o.weight", + "blocks.0.attn1.to_q.bias": "blocks.0.self_attn.q.bias", + "blocks.0.attn1.to_q.weight": "blocks.0.self_attn.q.weight", + "blocks.0.attn1.to_v.bias": "blocks.0.self_attn.v.bias", + "blocks.0.attn1.to_v.weight": "blocks.0.self_attn.v.weight", + "blocks.0.attn2.norm_k.weight": "blocks.0.cross_attn.norm_k.weight", + "blocks.0.attn2.norm_q.weight": "blocks.0.cross_attn.norm_q.weight", + "blocks.0.attn2.to_k.bias": "blocks.0.cross_attn.k.bias", + "blocks.0.attn2.to_k.weight": "blocks.0.cross_attn.k.weight", + "blocks.0.attn2.to_out.0.bias": "blocks.0.cross_attn.o.bias", + "blocks.0.attn2.to_out.0.weight": "blocks.0.cross_attn.o.weight", + "blocks.0.attn2.to_q.bias": "blocks.0.cross_attn.q.bias", + "blocks.0.attn2.to_q.weight": "blocks.0.cross_attn.q.weight", + "blocks.0.attn2.to_v.bias": "blocks.0.cross_attn.v.bias", + "blocks.0.attn2.to_v.weight": "blocks.0.cross_attn.v.weight", + "blocks.0.attn2.add_k_proj.bias":"blocks.0.cross_attn.k_img.bias", + "blocks.0.attn2.add_k_proj.weight":"blocks.0.cross_attn.k_img.weight", + "blocks.0.attn2.add_v_proj.bias":"blocks.0.cross_attn.v_img.bias", + "blocks.0.attn2.add_v_proj.weight":"blocks.0.cross_attn.v_img.weight", + "blocks.0.attn2.norm_added_k.weight":"blocks.0.cross_attn.norm_k_img.weight", + "blocks.0.ffn.net.0.proj.bias": "blocks.0.ffn.0.bias", + "blocks.0.ffn.net.0.proj.weight": "blocks.0.ffn.0.weight", + "blocks.0.ffn.net.2.bias": "blocks.0.ffn.2.bias", + "blocks.0.ffn.net.2.weight": "blocks.0.ffn.2.weight", + "blocks.0.norm2.bias": "blocks.0.norm3.bias", + "blocks.0.norm2.weight": "blocks.0.norm3.weight", + "blocks.0.scale_shift_table": "blocks.0.modulation", + "condition_embedder.text_embedder.linear_1.bias": "text_embedding.0.bias", + "condition_embedder.text_embedder.linear_1.weight": "text_embedding.0.weight", + "condition_embedder.text_embedder.linear_2.bias": "text_embedding.2.bias", + "condition_embedder.text_embedder.linear_2.weight": "text_embedding.2.weight", + "condition_embedder.time_embedder.linear_1.bias": "time_embedding.0.bias", + "condition_embedder.time_embedder.linear_1.weight": "time_embedding.0.weight", + "condition_embedder.time_embedder.linear_2.bias": "time_embedding.2.bias", + "condition_embedder.time_embedder.linear_2.weight": "time_embedding.2.weight", + "condition_embedder.time_proj.bias": "time_projection.1.bias", + "condition_embedder.time_proj.weight": "time_projection.1.weight", + "condition_embedder.image_embedder.ff.net.0.proj.bias":"img_emb.proj.1.bias", + "condition_embedder.image_embedder.ff.net.0.proj.weight":"img_emb.proj.1.weight", + "condition_embedder.image_embedder.ff.net.2.bias":"img_emb.proj.3.bias", + "condition_embedder.image_embedder.ff.net.2.weight":"img_emb.proj.3.weight", + "condition_embedder.image_embedder.norm1.bias":"img_emb.proj.0.bias", + "condition_embedder.image_embedder.norm1.weight":"img_emb.proj.0.weight", + "condition_embedder.image_embedder.norm2.bias":"img_emb.proj.4.bias", + "condition_embedder.image_embedder.norm2.weight":"img_emb.proj.4.weight", + "patch_embedding.bias": "patch_embedding.bias", + "patch_embedding.weight": "patch_embedding.weight", + "scale_shift_table": "head.modulation", + "proj_out.bias": "head.head.bias", + "proj_out.weight": "head.head.weight", + } + mot_layers = (0, 4, 8, 12, 16, 20, 24, 28, 32, 36) + mot_layers_mapping = {i:n for n, i in enumerate(mot_layers)} + state_dict_ = {} + for name in state_dict: + if "_mot_ref" not in name: + continue + param = state_dict[name] + name = name.replace("_mot_ref", "") + if name in rename_dict: + state_dict_[rename_dict[name]] = param + else: + if name.split(".")[1].isdigit(): + block_id = int(name.split(".")[1]) + name = name.replace(str(block_id), str(mot_layers_mapping[block_id])) + name_ = ".".join(name.split(".")[:1] + ["0"] + name.split(".")[2:]) + if name_ in rename_dict: + name_ = rename_dict[name_] + name_ = ".".join(name_.split(".")[:1] + [name.split(".")[1]] + name_.split(".")[2:]) + state_dict_[name_] = param + return state_dict_ diff --git a/diffsynth/utils/state_dict_converters/wan_video_vace.py b/diffsynth/utils/state_dict_converters/wan_video_vace.py new file mode 100644 index 0000000000000000000000000000000000000000..cdfef6998f47ac7d3640b28b99f109e7f04baeba --- /dev/null +++ b/diffsynth/utils/state_dict_converters/wan_video_vace.py @@ -0,0 +1,3 @@ +def VaceWanModelDictConverter(state_dict): + state_dict_ = {name: state_dict[name] for name in state_dict if name.startswith("vace")} + return state_dict_ diff --git a/diffsynth/utils/state_dict_converters/wan_video_vae.py b/diffsynth/utils/state_dict_converters/wan_video_vae.py new file mode 100644 index 0000000000000000000000000000000000000000..76a430e1bd4575e0ae06234de23b620d4877566f --- /dev/null +++ b/diffsynth/utils/state_dict_converters/wan_video_vae.py @@ -0,0 +1,7 @@ +def WanVideoVAEStateDictConverter(state_dict): + state_dict_ = {} + if 'model_state' in state_dict: + state_dict = state_dict['model_state'] + for name in state_dict: + state_dict_['model.' + name] = state_dict[name] + return state_dict_ \ No newline at end of file diff --git a/diffsynth/utils/state_dict_converters/wans2v_audio_encoder.py b/diffsynth/utils/state_dict_converters/wans2v_audio_encoder.py new file mode 100644 index 0000000000000000000000000000000000000000..eaa12c0d4ff7fc166eea1f804cb645be9aa28776 --- /dev/null +++ b/diffsynth/utils/state_dict_converters/wans2v_audio_encoder.py @@ -0,0 +1,12 @@ +def WanS2VAudioEncoderStateDictConverter(state_dict): + rename_dict = { + "model.wav2vec2.encoder.pos_conv_embed.conv.weight_g": "model.wav2vec2.encoder.pos_conv_embed.conv.parametrizations.weight.original0", + "model.wav2vec2.encoder.pos_conv_embed.conv.weight_v": "model.wav2vec2.encoder.pos_conv_embed.conv.parametrizations.weight.original1", + } + state_dict_ = {} + for name in state_dict: + name_ = "model." + name + if name_ in rename_dict: + name_ = rename_dict[name_] + state_dict_[name_] = state_dict[name] + return state_dict_ diff --git a/diffsynth/utils/state_dict_converters/z_image_dit.py b/diffsynth/utils/state_dict_converters/z_image_dit.py new file mode 100644 index 0000000000000000000000000000000000000000..0f44d8bbc067236b2cb74abe10496ff2ebf468b0 --- /dev/null +++ b/diffsynth/utils/state_dict_converters/z_image_dit.py @@ -0,0 +1,3 @@ +def ZImageDiTStateDictConverter(state_dict): + state_dict_ = {name.replace("model.diffusion_model.", ""): state_dict[name] for name in state_dict} + return state_dict_ diff --git a/diffsynth/utils/state_dict_converters/z_image_text_encoder.py b/diffsynth/utils/state_dict_converters/z_image_text_encoder.py new file mode 100644 index 0000000000000000000000000000000000000000..b11461345e808edd2c4ca793419ae137b70bfbc9 --- /dev/null +++ b/diffsynth/utils/state_dict_converters/z_image_text_encoder.py @@ -0,0 +1,6 @@ +def ZImageTextEncoderStateDictConverter(state_dict): + state_dict_ = {} + for name in state_dict: + if name != "lm_head.weight": + state_dict_[name] = state_dict[name] + return state_dict_ \ No newline at end of file diff --git a/diffsynth/utils/tile/__init__.py b/diffsynth/utils/tile/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..ec2c200c4509dfde29e955727993683f6c9a040f --- /dev/null +++ b/diffsynth/utils/tile/__init__.py @@ -0,0 +1 @@ +from .tile_worker import TileWorker diff --git a/diffsynth/utils/tile/tile_worker.py b/diffsynth/utils/tile/tile_worker.py new file mode 100644 index 0000000000000000000000000000000000000000..5cc7e4541a41108169929e3abf6764779d55a54e --- /dev/null +++ b/diffsynth/utils/tile/tile_worker.py @@ -0,0 +1,55 @@ +from einops import repeat, rearrange +from tqdm import tqdm +import torch + + +class TileWorker: + def __init__(self): + pass + + def build_mask(self, data, is_bound): + H, W = data.shape[:2] + h = repeat(torch.arange(H), "H -> H W", H=H, W=W) + w = repeat(torch.arange(W), "W -> H W", H=H, W=W) + border_width = (H + W) // 4 + pad = torch.ones_like(h) * border_width + mask = torch.stack([ + pad if is_bound[0] else h + 1, + pad if is_bound[1] else H - h, + pad if is_bound[2] else w + 1, + pad if is_bound[3] else W - w + ]).min(dim=0).values + mask = mask.clip(1, border_width) + mask = (mask / border_width).to(dtype=data.dtype, device=data.device) + mask = rearrange(mask, "H W -> H W 1") + return mask + + def tiled_forward(self, forward_fn, channels, tile_size, tile_stride, tile_range, output_scale=1, device="cpu", dtype=torch.float32, border_width=None, progress_bar=tqdm): + # Prepare + H, W = tile_range + border_width = int(tile_stride*0.5) if border_width is None else border_width + weight = torch.zeros((H, W, 1), dtype=dtype, device=device) + values = torch.zeros((H, W, channels), dtype=dtype, device=device) + + # Split tasks + tasks = [] + for h in range(0, H, tile_stride): + for w in range(0, W, tile_stride): + if (h-tile_stride >= 0 and h-tile_stride+tile_size >= H) or (w-tile_stride >= 0 and w-tile_stride+tile_size >= W): + continue + h_, w_ = h + tile_size, w + tile_size + if h_ > H: h, h_ = H - tile_size, H + if w_ > W: w, w_ = W - tile_size, W + tasks.append((h, h_, w, w_)) + + # Run + for hl, hr, wl, wr in progress_bar(tasks): + # Forward + x = forward_fn(hl, hr, wl, wr).to(dtype=dtype, device=device) + mask = self.build_mask(x, is_bound=(hl==0, hr>=H, wl==0, wr>=W)) + hl, hr = int(hl * output_scale), int(hr * output_scale) + wl, wr = int(wl * output_scale), int(wr * output_scale) + values[hl:hr, wl:wr] += x * mask + weight[hl:hr, wl:wr] += mask + values /= weight + return values diff --git a/diffsynth/utils/xfuser/__init__.py b/diffsynth/utils/xfuser/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..8a3a4f1f2d96623960c3374e40ed51807f630657 --- /dev/null +++ b/diffsynth/utils/xfuser/__init__.py @@ -0,0 +1 @@ +from .xdit_context_parallel import usp_attn_forward, usp_dit_forward, usp_vace_forward, get_sequence_parallel_world_size, get_sequence_parallel_rank, get_sp_group, initialize_usp, get_current_chunk, gather_all_chunks, all_to_all_4d, is_evenly_divisible diff --git a/diffsynth/utils/xfuser/xdit_context_parallel.py b/diffsynth/utils/xfuser/xdit_context_parallel.py new file mode 100644 index 0000000000000000000000000000000000000000..aec279eab1f3317a292a1d4766d4e084f7b7cf41 --- /dev/null +++ b/diffsynth/utils/xfuser/xdit_context_parallel.py @@ -0,0 +1,219 @@ +import torch +from typing import Optional +from einops import rearrange +from yunchang.kernels import AttnType +from yunchang.comm.all_to_all import SeqAllToAll4D +from xfuser.core.distributed import (get_sequence_parallel_rank, + get_sequence_parallel_world_size, + get_sp_group) +from xfuser.core.long_ctx_attention import xFuserLongContextAttention + +from ... import IS_NPU_AVAILABLE +from ...core.device import parse_nccl_backend, parse_device_type +from ...core.gradient import gradient_checkpoint_forward + + +def initialize_usp(device_type): + import torch.distributed as dist + from xfuser.core.distributed import initialize_model_parallel, init_distributed_environment + dist.init_process_group(backend=parse_nccl_backend(device_type), init_method="env://") + init_distributed_environment(rank=dist.get_rank(), world_size=dist.get_world_size()) + initialize_model_parallel( + sequence_parallel_degree=dist.get_world_size(), + ring_degree=1, + ulysses_degree=dist.get_world_size(), + ) + getattr(torch, device_type).set_device(dist.get_rank()) + + +def sinusoidal_embedding_1d(dim, position): + sinusoid = torch.outer(position.type(torch.float64), torch.pow( + 10000, -torch.arange(dim//2, dtype=torch.float64, device=position.device).div(dim//2))) + x = torch.cat([torch.cos(sinusoid), torch.sin(sinusoid)], dim=1) + return x.to(position.dtype) + +def pad_freqs(original_tensor, target_len): + seq_len, s1, s2 = original_tensor.shape + pad_size = target_len - seq_len + original_tensor_device = original_tensor.device + if original_tensor.device.type == "npu": + original_tensor = original_tensor.cpu() + padding_tensor = torch.ones( + pad_size, + s1, + s2, + dtype=original_tensor.dtype, + device=original_tensor.device) + padded_tensor = torch.cat([original_tensor, padding_tensor], dim=0).to(device=original_tensor_device) + return padded_tensor + +def rope_apply(x, freqs, num_heads): + x = rearrange(x, "b s (n d) -> b s n d", n=num_heads) + s_per_rank = x.shape[1] + + x_out = torch.view_as_complex(x.to(torch.float64).reshape( + x.shape[0], x.shape[1], x.shape[2], -1, 2)) + + sp_size = get_sequence_parallel_world_size() + sp_rank = get_sequence_parallel_rank() + freqs = pad_freqs(freqs, s_per_rank * sp_size) + freqs_rank = freqs[(sp_rank * s_per_rank):((sp_rank + 1) * s_per_rank), :, :] + freqs_rank = freqs_rank.to(torch.complex64) if freqs_rank.device.type == "npu" else freqs_rank + x_out = torch.view_as_real(x_out * freqs_rank).flatten(2) + return x_out.to(x.dtype) + +def usp_dit_forward(self, + x: torch.Tensor, + timestep: torch.Tensor, + context: torch.Tensor, + clip_feature: Optional[torch.Tensor] = None, + y: Optional[torch.Tensor] = None, + use_gradient_checkpointing: bool = False, + use_gradient_checkpointing_offload: bool = False, + **kwargs, + ): + t = self.time_embedding( + sinusoidal_embedding_1d(self.freq_dim, timestep)) + t_mod = self.time_projection(t).unflatten(1, (6, self.dim)) + context = self.text_embedding(context) + + if self.has_image_input: + x = torch.cat([x, y], dim=1) # (b, c_x + c_y, f, h, w) + clip_embdding = self.img_emb(clip_feature) + context = torch.cat([clip_embdding, context], dim=1) + + x, (f, h, w) = self.patchify(x) + + freqs = torch.cat([ + self.freqs[0][:f].view(f, 1, 1, -1).expand(f, h, w, -1), + self.freqs[1][:h].view(1, h, 1, -1).expand(f, h, w, -1), + self.freqs[2][:w].view(1, 1, w, -1).expand(f, h, w, -1) + ], dim=-1).reshape(f * h * w, 1, -1).to(x.device) + + # Context Parallel + chunks = torch.chunk(x, get_sequence_parallel_world_size(), dim=1) + pad_shape = chunks[0].shape[1] - chunks[-1].shape[1] + chunks = [torch.nn.functional.pad(chunk, (0, 0, 0, chunks[0].shape[1]-chunk.shape[1]), value=0) for chunk in chunks] + x = chunks[get_sequence_parallel_rank()] + + for block in self.blocks: + if self.training: + x = gradient_checkpoint_forward( + block, + use_gradient_checkpointing, + use_gradient_checkpointing_offload, + x, context, t_mod, freqs + ) + else: + x = block(x, context, t_mod, freqs) + + x = self.head(x, t) + + # Context Parallel + x = get_sp_group().all_gather(x, dim=1) + x = x[:, :-pad_shape] if pad_shape > 0 else x + + # unpatchify + x = self.unpatchify(x, (f, h, w)) + return x + + +def usp_vace_forward( + self, x, vace_context, context, t_mod, freqs, + use_gradient_checkpointing: bool = False, + use_gradient_checkpointing_offload: bool = False, +): + # Compute full sequence length from the sharded x + full_seq_len = x.shape[1] * get_sequence_parallel_world_size() + + # Embed vace_context via patch embedding + c = [self.vace_patch_embedding(u.unsqueeze(0)) for u in vace_context] + c = [u.flatten(2).transpose(1, 2) for u in c] + c = torch.cat([ + torch.cat([u, u.new_zeros(1, full_seq_len - u.size(1), u.size(2))], + dim=1) for u in c + ]) + + # Chunk VACE context along sequence dim BEFORE processing through blocks + c = torch.chunk(c, get_sequence_parallel_world_size(), dim=1)[get_sequence_parallel_rank()] + + # Process through vace_blocks (self_attn already monkey-patched to usp_attn_forward) + for block in self.vace_blocks: + c = gradient_checkpoint_forward( + block, + use_gradient_checkpointing, + use_gradient_checkpointing_offload, + c, x, context, t_mod, freqs + ) + + # Hints are already sharded per-rank + hints = torch.unbind(c)[:-1] + return hints + + +def usp_attn_forward(self, x, freqs): + q = self.norm_q(self.q(x)) + k = self.norm_k(self.k(x)) + v = self.v(x) + + q = rope_apply(q, freqs, self.num_heads) + k = rope_apply(k, freqs, self.num_heads) + q = rearrange(q, "b s (n d) -> b s n d", n=self.num_heads) + k = rearrange(k, "b s (n d) -> b s n d", n=self.num_heads) + v = rearrange(v, "b s (n d) -> b s n d", n=self.num_heads) + + attn_type = AttnType.FA + ring_impl_type = "basic" + if IS_NPU_AVAILABLE: + attn_type = AttnType.NPU + ring_impl_type = "basic_npu" + x = xFuserLongContextAttention(attn_type=attn_type, ring_impl_type=ring_impl_type)( + None, + query=q, + key=k, + value=v, + ) + x = x.flatten(2) + + del q, k, v + getattr(torch, parse_device_type(x.device)).empty_cache() + return self.o(x) + + +def get_current_chunk(x, dim=1): + chunks = torch.chunk(x, get_sequence_parallel_world_size(), dim=dim) + ndims = len(chunks[0].shape) + pad_list = [0] * (2 * ndims) + pad_end_index = 2 * (ndims - 1 - dim) + 1 + max_size = chunks[0].size(dim) + chunks = [ + torch.nn.functional.pad( + chunk, + tuple(pad_list[:pad_end_index] + [max_size - chunk.size(dim)] + pad_list[pad_end_index+1:]), + value=0 + ) + for chunk in chunks + ] + x = chunks[get_sequence_parallel_rank()] + return x + + +def gather_all_chunks(x, seq_len=None, dim=1): + x = get_sp_group().all_gather(x, dim=dim) + if seq_len is not None: + slices = [slice(None)] * x.ndim + slices[dim] = slice(0, seq_len) + x = x[tuple(slices)] + return x + + +def all_to_all_4d(x, scatter_dim, gather_dim): + world_size = get_sequence_parallel_world_size() + if world_size == 1: + return x + return SeqAllToAll4D.apply(get_sp_group().ulysses_group, x, scatter_dim, gather_dim) + + +def is_evenly_divisible(seq_len): + world_size = get_sequence_parallel_world_size() + return seq_len % world_size == 0 diff --git a/diffsynth/version.py b/diffsynth/version.py new file mode 100644 index 0000000000000000000000000000000000000000..2ea2ed723018f14763da79da7fa6dbf6eddc9324 --- /dev/null +++ b/diffsynth/version.py @@ -0,0 +1,5 @@ +# Make sure to modify __release_datetime__ to release time when making official release. +__version__ = '2.1.5' +# default release datetime for branches under active development is set +# to be a time far-far-away-into-the-future +__release_datetime__ = '2099-10-13 08:56:12' \ No newline at end of file diff --git a/docs/en/.readthedocs.yaml b/docs/en/.readthedocs.yaml new file mode 100644 index 0000000000000000000000000000000000000000..61972763d800a180ccaf379083aafddffe6871b6 --- /dev/null +++ b/docs/en/.readthedocs.yaml @@ -0,0 +1,28 @@ +# .readthedocs.yaml +# Read the Docs configuration file +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details + +# Required +version: 2 + +# Set the OS, Python version and other tools you might need +build: + os: ubuntu-22.04 + tools: + python: "3.10" + +# Build documentation in the "docs/" directory with Sphinx +sphinx: + configuration: docs/en/conf.py + +# Optionally build your docs in additional formats such as PDF and ePub +# formats: +# - pdf +# - epub + +# Optional but recommended, declare the Python requirements required +# to build your documentation +# See https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html +python: + install: + - requirements: docs/requirements.txt diff --git a/docs/en/API_Reference/core/attention.md b/docs/en/API_Reference/core/attention.md new file mode 100644 index 0000000000000000000000000000000000000000..f9eb23ea3325e01b24515f03fc74266dcceea343 --- /dev/null +++ b/docs/en/API_Reference/core/attention.md @@ -0,0 +1,80 @@ +# `diffsynth.core.attention`: Attention Mechanism Implementation + +`diffsynth.core.attention` provides routing mechanisms for attention mechanism implementations, automatically selecting efficient attention implementations based on available packages in the `Python` environment and [environment variables](../../Pipeline_Usage/Environment_Variables.md#diffsynth_attention_implementation). + +## Attention Mechanism + +The attention mechanism is a model structure proposed in the paper ["Attention Is All You Need"](https://arxiv.org/abs/1706.03762). In the original paper, the attention mechanism is implemented according to the following formula: + +$$ +\text{Attention}(Q, K, V) = \text{Softmax}\left( + \frac{QK^T}{\sqrt{d_k}} +\right) +V. +$$ + +In `PyTorch`, it can be implemented with the following code: +```python +import torch + +def attention(query, key, value): + scale_factor = 1 / query.size(-1)**0.5 + attn_weight = query @ key.transpose(-2, -1) * scale_factor + attn_weight = torch.softmax(attn_weight, dim=-1) + return attn_weight @ value + +query = torch.rand(32, 8, 128, 64, dtype=torch.bfloat16, device="cuda") +key = torch.rand(32, 8, 128, 64, dtype=torch.bfloat16, device="cuda") +value = torch.rand(32, 8, 128, 64, dtype=torch.bfloat16, device="cuda") +output_1 = attention(query, key, value) +``` + +The dimensions of `query`, `key`, and `value` are $(b, n, s, d)$: +* $b$: Batch size +* $n$: Number of attention heads +* $s$: Sequence length +* $d$: Dimension of each attention head + +This computation does not include any trainable parameters. Modern transformer architectures will pass through Linear layers before and after this computation, but the "attention mechanism" discussed in this article refers only to the computation in the above code, not including these calculations. + +## More Efficient Implementations + +Note that the dimension of the Attention Score in the attention mechanism ( $\text{Softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)$ in the formula, `attn_weight` in the code) is $(b, n, s, s)$, where the sequence length $s$ is typically very large, causing the time and space complexity of computation to reach quadratic level. Taking image generation models as an example, when the width and height of the image increase to 2 times, the sequence length increases to 4 times, and the computational load and memory requirements increase to 16 times. To avoid high computational costs, more efficient attention mechanism implementations are needed, including: +* Flash Attention 4: [GitHub](https://github.com/Dao-AILab/flash-attention), [Paper](https://arxiv.org/abs/2603.05451) +* Flash Attention 3: [GitHub](https://github.com/Dao-AILab/flash-attention), [Paper](https://arxiv.org/abs/2407.08608) +* Flash Attention 2: [GitHub](https://github.com/Dao-AILab/flash-attention), [Paper](https://arxiv.org/abs/2307.08691) +* Sage Attention: [GitHub](https://github.com/thu-ml/SageAttention), [Paper](https://arxiv.org/abs/2505.11594) +* xFormers: [GitHub](https://github.com/facebookresearch/xformers), [Documentation](https://facebookresearch.github.io/xformers/components/ops.html#module-xformers.ops) +* PyTorch: [GitHub](https://github.com/pytorch/pytorch), [Documentation](https://docs.pytorch.org/docs/stable/generated/torch.nn.functional.scaled_dot_product_attention.html) + +To call attention implementations other than `PyTorch`, please follow the instructions on their GitHub pages to install the corresponding packages. `DiffSynth-Studio` will automatically route to the corresponding implementation based on available packages in the Python environment, or can be controlled through [environment variables](../../Pipeline_Usage/Environment_Variables.md#diffsynth_attention_implementation). + +```python +from diffsynth.core.attention import attention_forward +import torch + +def attention(query, key, value): + scale_factor = 1 / query.size(-1)**0.5 + attn_weight = query @ key.transpose(-2, -1) * scale_factor + attn_weight = torch.softmax(attn_weight, dim=-1) + return attn_weight @ value + +query = torch.rand(32, 8, 128, 64, dtype=torch.bfloat16, device="cuda") +key = torch.rand(32, 8, 128, 64, dtype=torch.bfloat16, device="cuda") +value = torch.rand(32, 8, 128, 64, dtype=torch.bfloat16, device="cuda") +output_1 = attention(query, key, value) +output_2 = attention_forward(query, key, value) +print((output_1 - output_2).abs().mean()) +``` + +Please note that acceleration will introduce errors, but in most cases, the error is negligible. + +## Developer Guide + +When integrating new models into `DiffSynth-Studio`, developers can decide whether to call `attention_forward` in `diffsynth.core.attention`, but we expect models to prioritize calling this module as much as possible, so that new attention mechanism implementations can take effect directly on these models. + +## Best Practices + +**In most cases, we recommend directly using the native `PyTorch` implementation without installing any additional packages.** Although other attention mechanism implementations can accelerate, the acceleration effect is relatively limited, and in a few cases, compatibility and precision issues may arise. + +In addition, efficient attention mechanism implementations will gradually be integrated into `PyTorch`. The `scaled_dot_product_attention` in `PyTorch` version 2.9.0 has already integrated Flash Attention 2. We still provide this interface in `DiffSynth-Studio` to allow some aggressive acceleration schemes to quickly move toward application, even though they still need time to be verified for stability. \ No newline at end of file diff --git a/docs/en/API_Reference/core/data.md b/docs/en/API_Reference/core/data.md new file mode 100644 index 0000000000000000000000000000000000000000..0a6f11dd3e7f36c94f3c8b6c3d560143209a8db9 --- /dev/null +++ b/docs/en/API_Reference/core/data.md @@ -0,0 +1,151 @@ +# `diffsynth.core.data`: Data Processing Operators and Universal Dataset + +## Data Processing Operators + +### Available Data Processing Operators + +`diffsynth.core.data` provides a series of data processing operators for data processing, including: + +* Data format conversion operators + * `ToInt`: Convert to int format + * `ToFloat`: Convert to float format + * `ToStr`: Convert to str format + * `ToList`: Convert to list format, wrapping this data in a list + * `ToAbsolutePath`: Convert relative paths to absolute paths +* File loading operators + * `LoadImage`: Read image files + * `LoadVideo`: Read video files + * `LoadAudio`: Read audio files + * `LoadGIF`: Read GIF files + * `LoadTorchPickle`: Read binary files saved by [`torch.save`](https://docs.pytorch.org/docs/stable/generated/torch.save.html) [This operator may cause code injection attacks in binary files, please use with caution!] +* Media file processing operators + * `ImageCropAndResize`: Crop and resize images +* Meta operators + * `SequencialProcess`: Route each data in the sequence to an operator + * `RouteByExtensionName`: Route to specific operators by file extension + * `RouteByType`: Route to specific operators by data type + +### Operator Usage + +Data operators are connected with the `>>` symbol to form data processing pipelines, for example: + +```python +from diffsynth.core.data.operators import * + +data = "image.jpg" +data_pipeline = ToAbsolutePath(base_path="/data") >> LoadImage() >> ImageCropAndResize(max_pixels=512*512) +data = data_pipeline(data) +``` + +After passing through each operator, the data is processed in sequence: + +* `ToAbsolutePath(base_path="/data")`: `"/data/image.jpg"` +* `LoadImage()`: `` +* `ImageCropAndResize(max_pixels=512*512)`: `` + +We can compose functionally complete data pipelines, for example, the default video data operator for the universal dataset is: + +```python +RouteByType(operator_map=[ + (str, ToAbsolutePath(base_path) >> RouteByExtensionName(operator_map=[ + (("jpg", "jpeg", "png", "webp"), LoadImage() >> ImageCropAndResize(height, width, max_pixels, height_division_factor, width_division_factor) >> ToList()), + (("gif",), LoadGIF( + num_frames, time_division_factor, time_division_remainder, + frame_processor=ImageCropAndResize(height, width, max_pixels, height_division_factor, width_division_factor), + )), + (("mp4", "avi", "mov", "wmv", "mkv", "flv", "webm"), LoadVideo( + num_frames, time_division_factor, time_division_remainder, + frame_processor=ImageCropAndResize(height, width, max_pixels, height_division_factor, width_division_factor), + )), + ])), +]) +``` + +It includes the following logic: + +* If the data is of type `str` + * If it's a `"jpg", "jpeg", "png", "webp"` type file + * Load this image + * Crop and scale to a specific resolution + * Pack into a list, treating it as a single-frame video + * If it's a `"gif"` type file + * Load the GIF file content + * Crop and scale each frame to a specific resolution + * If it's a `"mp4", "avi", "mov", "wmv", "mkv", "flv", "webm"` type file + * Load the video file content + * Crop and scale each frame to a specific resolution +* If the data is not of type `str`, an error is reported + +## Universal Dataset + +`diffsynth.core.data` provides a unified dataset implementation. The dataset requires the following parameters: + +* `base_path`: Root directory. If the dataset contains relative paths to image files, this field needs to be filled in to load the files pointed to by these paths +* `metadata_path`: Metadata directory, records the file paths of all metadata, supports `csv`, `json`, `jsonl` formats +* `repeat`: Data repetition count, defaults to 1, this parameter affects the number of training steps in an epoch +* `data_file_keys`: Data field names that need to be loaded, for example `(image, edit_image)` +* `main_data_operator`: Main loading operator, needs to assemble the data processing pipeline through data processing operators +* `special_operator_map`: Special operator mapping, operator mappings built for fields that require special processing + +### Metadata + +The dataset's `metadata_path` points to a metadata file, supporting `csv`, `json`, `jsonl` formats. The following provides examples: + +* `csv` format: High readability, does not support list data, small memory footprint + +```csv +image,prompt +image_1.jpg,"a dog" +image_2.jpg,"a cat" +``` + +* `json` format: High readability, supports list data, large memory footprint + +```json +[ + { + "image": "image_1.jpg", + "prompt": "a dog" + }, + { + "image": "image_2.jpg", + "prompt": "a cat" + } +] +``` + +* `jsonl` format: Low readability, supports list data, small memory footprint + +```json +{"image": "image_1.jpg", "prompt": "a dog"} +{"image": "image_2.jpg", "prompt": "a cat"} +``` + +How to choose the best metadata format? + +* If the data volume is large, reaching tens of millions, since `json` file parsing requires additional memory, it's not available. Please use `csv` or `jsonl` format +* If the dataset contains list data, such as edit models that require multiple images as input, since `csv` format cannot store list format data, it's not available. Please use `json` or `jsonl` format + +### Data Loading Logic + +When no additional settings are made, the dataset defaults to outputting data from the metadata set. Image and video file paths will be output in string format. To load these files, you need to set `data_file_keys`, `main_data_operator`, and `special_operator_map`. + +In the data processing flow, processing is done according to the following logic: +* If the field is in `special_operator_map`, call the corresponding operator in `special_operator_map` for processing +* If the field is not in `special_operator_map` + * If the field is in `data_file_keys`, call the `main_data_operator` operator for processing + * If the field is not in `data_file_keys`, no processing is done + +`special_operator_map` can be used to implement special data processing. For example, in the model [Wan-AI/Wan2.2-Animate-14B](https://www.modelscope.cn/models/Wan-AI/Wan2.2-Animate-14B), the input character face video `animate_face_video` is processed at a fixed resolution, inconsistent with the output video. Therefore, this field is processed by a dedicated operator: + +```python +special_operator_map={ + "animate_face_video": ToAbsolutePath(args.dataset_base_path) >> LoadVideo(args.num_frames, 4, 1, frame_processor=ImageCropAndResize(512, 512, None, 16, 16)), +} +``` + +### Other Notes + +When the data volume is too small, you can appropriately increase `repeat` to extend the training time of a single epoch, avoiding frequent model saving that generates considerable overhead. + +When data volume * `repeat` exceeds $10^9$, we observe that the dataset speed becomes significantly slower. This seems to be a `PyTorch` bug, and we are not sure if newer versions of `PyTorch` have fixed this issue. \ No newline at end of file diff --git a/docs/en/API_Reference/core/gradient.md b/docs/en/API_Reference/core/gradient.md new file mode 100644 index 0000000000000000000000000000000000000000..eeca81cac27028d51fc49e8088fa8faf30c23faf --- /dev/null +++ b/docs/en/API_Reference/core/gradient.md @@ -0,0 +1,69 @@ +# `diffsynth.core.gradient`: Gradient Checkpointing and Offload + +`diffsynth.core.gradient` provides encapsulated gradient checkpointing and its Offload version for model training. + +## Gradient Checkpointing + +Gradient checkpointing is a technique used to reduce memory usage during training. We provide an example to help you understand this technique. Here is a simple model structure: + +```python +import torch + +class ToyModel(torch.nn.Module): + def __init__(self): + super().__init__() + self.activation = torch.nn.Sigmoid() + + def forward(self, x): + return self.activation(x) + +model = ToyModel() +x = torch.randn((2, 3)) +y = model(x) +``` + +In this model structure, the input parameter $x$ passes through the Sigmoid activation function to obtain the output value $y=\frac{1}{1+e^{-x}}$. + +During the training process, assuming our loss function value is $\mathcal L$, when backpropagating gradients, we obtain $\frac{\partial \mathcal L}{\partial y}$. At this point, we need to calculate $\frac{\partial \mathcal L}{\partial x}$. It's not difficult to find that $\frac{\partial y}{\partial x}=y(1-y)$, and thus $\frac{\partial \mathcal L}{\partial x}=\frac{\partial \mathcal L}{\partial y}\frac{\partial y}{\partial x}=\frac{\partial \mathcal L}{\partial y}y(1-y)$. If we save the value of $y$ during the model's forward propagation and directly compute $y(1-y)$ during gradient backpropagation, this will avoid complex exp computations, speeding up the calculation. However, this requires additional memory to store the intermediate variable $y$. + +When gradient checkpointing is not enabled, the training framework will default to storing all intermediate variables that assist gradient computation, thereby achieving optimal computational speed. When gradient checkpointing is enabled, intermediate variables are not stored, but the input parameter $x$ is still stored, reducing memory usage. During gradient backpropagation, these variables need to be recomputed, slowing down the calculation. + +## Enabling Gradient Checkpointing and Its Offload + +`gradient_checkpoint_forward` in `diffsynth.core.gradient` implements gradient checkpointing and its Offload. Refer to the following code for calling: + +```python +import torch +from diffsynth.core.gradient import gradient_checkpoint_forward + +class ToyModel(torch.nn.Module): + def __init__(self): + super().__init__() + self.activation = torch.nn.Sigmoid() + + def forward(self, x): + return self.activation(x) + +model = ToyModel() +x = torch.randn((2, 3)) +y = gradient_checkpoint_forward( + model, + use_gradient_checkpointing=True, + use_gradient_checkpointing_offload=False, + x=x, +) +``` + +* When `use_gradient_checkpointing=False` and `use_gradient_checkpointing_offload=False`, the computation process is exactly the same as the original computation, not affecting the model's inference and training. You can directly integrate it into your code. +* When `use_gradient_checkpointing=True` and `use_gradient_checkpointing_offload=False`, gradient checkpointing is enabled. +* When `use_gradient_checkpointing_offload=True`, gradient checkpointing is enabled, and all gradient checkpoint input parameters are stored in memory, further reducing memory usage and slowing down computation. + +## Best Practices + +> Q: Where should gradient checkpointing be enabled? +> +> A: When enabling gradient checkpointing for the entire model, computational efficiency and memory usage are not optimal. We need to set fine-grained gradient checkpoints, but we don't want to add too much complicated code to the framework. Therefore, we recommend implementing it in the `model_fn` of `Pipeline`, for example, `model_fn_qwen_image` in `diffsynth/pipelines/qwen_image.py`, enabling gradient checkpointing at the Block level without modifying any code in the model structure. + +> Q: When should gradient checkpointing be enabled? +> +> A: As model parameters become increasingly large, gradient checkpointing has become a necessary training technique. Gradient checkpointing usually needs to be enabled. Gradient checkpointing Offload should only be enabled in models where activation values occupy excessive memory (such as video generation models). \ No newline at end of file diff --git a/docs/en/API_Reference/core/loader.md b/docs/en/API_Reference/core/loader.md new file mode 100644 index 0000000000000000000000000000000000000000..7f1018a2b81bf47b8d5d68d33391c17b8381d85c --- /dev/null +++ b/docs/en/API_Reference/core/loader.md @@ -0,0 +1,141 @@ +# `diffsynth.core.loader`: Model Download and Loading + +This document introduces the model download and loading functionalities in `diffsynth.core.loader`. + +## ModelConfig + +`ModelConfig` in `diffsynth.core.loader` is used to annotate model download sources, local paths, VRAM management configurations, and other information. + +### Downloading and Loading Models from Remote Sources + +Taking the model [DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Canny](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Canny) as an example, after filling in `model_id` and `origin_file_pattern` in `ModelConfig`, the model can be automatically downloaded. By default, it downloads to the `./models` path, which can be modified through the [environment variable DIFFSYNTH_MODEL_BASE_PATH](../../Pipeline_Usage/Environment_Variables.md#diffsynth_model_base_path). + +By default, even if the model has already been downloaded, the program will still query the remote for any missing files. To completely disable remote requests, set the [environment variable DIFFSYNTH_SKIP_DOWNLOAD](../../Pipeline_Usage/Environment_Variables.md#diffsynth_skip_download) to `True`. + +```python +from diffsynth.core import ModelConfig + +config = ModelConfig( + model_id="DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Canny", + origin_file_pattern="model.safetensors", +) +# Download models +config.download_if_necessary() +print(config.path) +``` + +After calling `download_if_necessary`, the model will be automatically downloaded, and the path will be returned to `config.path`. + +### Loading Models from Local Paths + +If loading models from local paths, you need to fill in `path`: + +```python +from diffsynth.core import ModelConfig + +config = ModelConfig(path="models/DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Canny/model.safetensors") +``` + +If the model contains multiple shard files, input them in list form: + +```python +from diffsynth.core import ModelConfig + +config = ModelConfig(path=[ + "models/Qwen/Qwen-Image/text_encoder/model-00001-of-00004.safetensors", + "models/Qwen/Qwen-Image/text_encoder/model-00002-of-00004.safetensors", + "models/Qwen/Qwen-Image/text_encoder/model-00003-of-00004.safetensors", + "models/Qwen/Qwen-Image/text_encoder/model-00004-of-00004.safetensors" +]) +``` + +### VRAM Management Configuration + +`ModelConfig` also contains VRAM management configuration information. See [VRAM Management](../../Pipeline_Usage/VRAM_management.md#more-usage-methods) for details. + +## Model File Loading + +`diffsynth.core.loader` provides a unified `load_state_dict` for loading state dicts from model files. + +Loading a single model file: + +```python +from diffsynth.core import load_state_dict + +state_dict = load_state_dict("models/DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Canny/model.safetensors") +``` + +Loading multiple model files (merged into one state dict): + +```python +from diffsynth.core import load_state_dict + +state_dict = load_state_dict([ + "models/Qwen/Qwen-Image/text_encoder/model-00001-of-00004.safetensors", + "models/Qwen/Qwen-Image/text_encoder/model-00002-of-00004.safetensors", + "models/Qwen/Qwen-Image/text_encoder/model-00003-of-00004.safetensors", + "models/Qwen/Qwen-Image/text_encoder/model-00004-of-00004.safetensors" +]) +``` + +## Model Hash + +Model hash is used to determine the model type. The hash value can be obtained through `hash_model_file`: + +```python +from diffsynth.core import hash_model_file + +print(hash_model_file("models/DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Canny/model.safetensors")) +``` + +The hash value of multiple model files can also be calculated, which is equivalent to calculating the model hash value after merging the state dict: + +```python +from diffsynth.core import hash_model_file + +print(hash_model_file([ + "models/Qwen/Qwen-Image/text_encoder/model-00001-of-00004.safetensors", + "models/Qwen/Qwen-Image/text_encoder/model-00002-of-00004.safetensors", + "models/Qwen/Qwen-Image/text_encoder/model-00003-of-00004.safetensors", + "models/Qwen/Qwen-Image/text_encoder/model-00004-of-00004.safetensors" +])) +``` + +The model hash value is only related to the keys and tensor shapes in the state dict of the model file, and is unrelated to the numerical values of the model parameters, file saving time, and other information. When calculating the model hash value of `.safetensors` format files, `hash_model_file` is almost instantly completed without reading the model parameters. However, when calculating the model hash value of `.bin`, `.pth`, `.ckpt`, and other binary files, all model parameters need to be read, so **we do not recommend developers to continue using these formats of files.** + +By [writing model Config](../../Developer_Guide/Integrating_Your_Model.md#step-3-writing-model-config) and filling in model hash value and other information into `diffsynth/configs/model_configs.py`, developers can let `DiffSynth-Studio` automatically identify the model type and load it. + +## Model Loading + +`load_model` is the external entry for loading models in `diffsynth.core.loader`. It will call [skip_model_initialization](../../API_Reference/core/vram.md#skipping-model-parameter-initialization) to skip model parameter initialization. If [Disk Offload](../../Pipeline_Usage/VRAM_management.md#disk-offload) is enabled, it calls [DiskMap](../../API_Reference/core/vram.md#state-dict-disk-mapping) for lazy loading. If Disk Offload is not enabled, it calls [load_state_dict](#model-file-loading) to load model parameters. If necessary, it will also call [state dict converter](../../Developer_Guide/Integrating_Your_Model.md#step-2-model-file-format-conversion) for model format conversion. Finally, it calls `model.eval()` to switch to inference mode. + +Here is a usage example with Disk Offload enabled: + +```python +from diffsynth.core import load_model, enable_vram_management, AutoWrappedLinear, AutoWrappedModule +from diffsynth.models.qwen_image_dit import QwenImageDiT, RMSNorm +import torch + +prefix = "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model" +model_path = [prefix + f"-0000{i}-of-00009.safetensors" for i in range(1, 10)] + +model = load_model( + QwenImageDiT, + model_path, + module_map={ + torch.nn.Linear: AutoWrappedLinear, + RMSNorm: AutoWrappedModule, + }, + vram_config={ + "offload_dtype": "disk", + "offload_device": "disk", + "onload_dtype": "disk", + "onload_device": "disk", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", + }, + vram_limit=0, +) +``` \ No newline at end of file diff --git a/docs/en/API_Reference/core/quant.md b/docs/en/API_Reference/core/quant.md new file mode 100644 index 0000000000000000000000000000000000000000..a5b58fb0a6cc82a1a51b58996e8f6873de49c8ab --- /dev/null +++ b/docs/en/API_Reference/core/quant.md @@ -0,0 +1,295 @@ +# `diffsynth.core.quant`: Model Quantization + +This document introduces the low-level quantization interfaces in `diffsynth.core.quant`. Refer to it if you want to use these features in another codebase. If you only want to enable quantization in a `Pipeline`, see [Model Quantization](../../Pipeline_Usage/Quantization.md). + +The module exports the following interfaces through `diffsynth.core.quant`, organized in three categories: + +| Category | Interfaces | +| --- | --- | +| User interfaces | `QuantizeConfig`, `MixedQuantizeConfig`, `describe_quant_method`, `QUANT_METHODS` | +| Extension interfaces | `QuantBackend`, `BackendConfig`, `register_quant_backend`, `register_quant_method`, `QuantMethodSpec`, `QUANT_BACKENDS` | +| Verification tools | `check_differentiable`, `check_backend_contract` | + +Quantization operates on the `nn.Linear` layers in a model: the framework traverses the model and replaces the matched `nn.Linear` layers with the backend's quantized Linears (all subclasses of `nn.Linear`, so LoRA injection, VRAM management, and other mechanisms recognize them without modification). A backend is only responsible for quantizing a single layer; model-level traversal and replacement is done by `QuantizeConfig`. + +## User Interfaces + +### QuantizeConfig + +`QuantizeConfig` is both the quantization config and the operation entry point for any `nn.Module`. + +Fields: + +| Field | Type | Description | +| --- | --- | --- | +| `method` | `str` | Quantization method name, from `QUANT_METHODS`; determines the backend, scheme, and backend config. Required | +| `mode` | `str` | `"dynamic"` (default) keeps the backend-native quantized Linears, dequantizing at every forward; `"dequant_once"` restores plain fp `nn.Linear` right after the weights are quantized or loaded | +| `target_modules` | `list` | Only quantize the matched layers; `None` means no restriction | +| `exclude_modules` | `list` | Exclude the matched layers | +| `backend_config_kwargs` | `dict` | Parameters passed to the method's backend config factory, determining the quantization behavior, e.g. nf4's `blocksize` | +| `load_prequantized` | `bool` | The checkpoint already holds quantized weights; load them directly instead of quantizing online | + +Matching rule for `target_modules` / `exclude_modules`: a layer matches if its full dotted name equals an entry, or ends with `"." + entry`. For example, `"img_mod.1"` matches `transformer_blocks.0.img_mod.1`. + +Constructing a `QuantizeConfig` validates the backend dependencies and parameters, and raises immediately (with installation instructions) when they are not satisfied, rather than failing later at inference time. + +Main methods: + +#### `quantize_model(model, compute_device=None, model_device=None)` + +Quantizes the matched `nn.Linear` layers in `model` in place, keeping each layer's existing dtype. Must be called **after** `load_state_dict`. Does nothing when `load_prequantized=True` (such a checkpoint is already quantized). + +- `compute_device`: the device where quantization computation happens; `None` means quantize in place. +- `model_device`: the device where each layer is stored after quantization; `None` means leaving it on `compute_device`. + +With an fp model on the CPU and `compute_device="cuda", model_device="cpu"`, quantization streams layer by layer, so the accelerator only ever holds one layer at a time: + +```python +import torch +from diffsynth.core.quant import QuantizeConfig + +cfg = QuantizeConfig(method="bitsandbytes_nf4") +model.load_state_dict(fp_state_dict) +cfg.quantize_model(model, compute_device="cuda", model_device="cpu") +``` + +#### `prepare_for_prequantized_load(model, compute_dtype=torch.bfloat16)` + +Replaces the matched `nn.Linear` layers with empty quantized layers ("shells") matching the structure of a pre-quantized checkpoint. Must be called **before** `load_state_dict(assign=True)`. `compute_dtype` is the dtype the quantized layers dequantize to at forward time. + +#### `unflatten_state_dict(state_dict, metadata)` / `flatten_state_dict(state_dict)` + +Quantized weights are often composite structures of "packed tensors + quant state", while `.safetensors` can only store plain tensors. These two methods convert between the two forms. + +- `unflatten_state_dict(state_dict, metadata)`: rebuilds composite quantized tensors from the flat tensors read out of a checkpoint; the result can be given to `load_state_dict(assign=True)`. +- `flatten_state_dict(state_dict)`: flattens a quantized model's state dict into plain tensors and string-only metadata, returning `(tensors, metadata)`, which can be passed directly to `safetensors.torch.save_file(tensors, path, metadata=metadata)`. Raises `NotImplementedError` if the backend does not declare `is_serializable`. + +The complete flow for loading a pre-quantized checkpoint: + +```python +import torch +from diffsynth.core.quant import QuantizeConfig + +cfg = QuantizeConfig(method="bitsandbytes_nf4", load_prequantized=True) +cfg.prepare_for_prequantized_load(model, compute_dtype=torch.bfloat16) +state_dict = cfg.unflatten_state_dict(state_dict, metadata) +model.load_state_dict(state_dict, assign=True) +``` + +#### `dequantize_model(model, compute_dtype=torch.bfloat16, compute_device=None, model_device=None)` + +Replaces all quantized Linears in the model with plain fp `nn.Linear`; the restored weights carry the quantization error. **Only takes effect when `mode="dequant_once"`**; otherwise returns directly. Can be called after either of the two flows above: + +```python +cfg.dequantize_model(model, compute_dtype=torch.bfloat16) +``` + +#### `is_quantized_linear(module)` + +Whether `module` is one of the quantized Linears produced by this config's backend. + +#### `build_quantized_shell(module, compute_dtype)` + +Builds an empty quantized Linear matching `module`'s shape and bias presence. Used to release a layer's weights while keeping it routable, and to stage a transient copy on the computation device — a companion interface for VRAM management. + +### MixedQuantizeConfig + +Combines multiple `QuantizeConfig`s into one mixed quantization; each sub-config is responsible for a mutually disjoint set of layers. It exposes the same interface as a single `QuantizeConfig` (`quantize_model`, `prepare_for_prequantized_load`, `dequantize_model`, `flatten_state_dict`, `unflatten_state_dict`, `is_quantized_linear`, `build_quantized_shell`, plus the two read-only properties `method` / `mode`). + +```python +from diffsynth.core.quant import QuantizeConfig, MixedQuantizeConfig + +mod_layers = ["img_mod.1", "txt_mod.1", "norm_out.linear", "img_in", "txt_in", "proj_out"] +cfg = MixedQuantizeConfig(configs=[ + QuantizeConfig(method="bitsandbytes_nf4", exclude_modules=mod_layers), + QuantizeConfig(method="torchao_int8_w8a16", target_modules=mod_layers), +]) +cfg.quantize_model(model, compute_device="cuda") +``` + +Fields and constraints: + +- `configs`: a list of `QuantizeConfig`, executed in order. All sub-configs must share the same `mode`, and their `load_prequantized` must be `False`. +- `load_prequantized`: set on this wrapper when loading a mixed quantized checkpoint, not on the sub-configs. +- The layer sets matched by the sub-configs must be pairwise disjoint. `quantize_model` and `prepare_for_prequantized_load` verify this before touching the model, and raise on conflict, naming the overlapping layers. + +`build_quantized_shell(module, compute_dtype, layer_name=None)` gains an extra `layer_name` parameter here: when multiple sub-configs share the same backend, the quantized Linears they produce are the same class, and ownership can only be determined by layer name. + +### describe_quant_method and QUANT_METHODS + +`QUANT_METHODS` is a registry of `{method name: QuantMethodSpec}`. `QuantMethodSpec` has three fields: `backend` (backend name), `config_factory` (a callable turning `backend_config_kwargs` into the backend config), and `label` (a human-readable description). + +Call `backends.load_all_backends()` before enumerating all methods: + +```python +from diffsynth.core.quant import QUANT_METHODS, backends + +backends.load_all_backends() +print(sorted(QUANT_METHODS)) +``` + +`describe_quant_method(name)` prints a method's backend, description, and the accepted `backend_config_kwargs` with defaults (it loads the backend internally): + +```python +from diffsynth.core.quant import describe_quant_method + +describe_quant_method("comfy_kitchen_int8_w8a8") +``` + +``` +method: comfy_kitchen_int8_w8a8 +backend: comfy_kitchen +detail: W8A8, int8 weight + int8 dynamic activation (ComfyUI int8_tensorwise) +backend config: diffsynth.core.quant.backends.comfy_kitchen.ComfyKitchenInt8Config +backend_config_kwargs (user-tunable): + per_channel = True + convrot = True + convrot_groupsize = 256 + orig_dtype = torch.bfloat16 +pinned by method (not overridable): + format = 'int8_tensorwise' +``` + +`user-tunable` are the parameters that can be modified via `backend_config_kwargs`; `pinned by method` are fixed for the method and cannot be modified (e.g. `comfy_kitchen_int8_w8a8` and `comfy_kitchen_fp8_w8a8` share one backend and are distinguished by `format`). Passing an unaccepted key raises an error listing the available keys. + +## Extension Interface: Custom Backends + +### The QuantBackend Contract + +`QuantBackend` is the adapter layer between the framework and a concrete quantization library (bitsandbytes / torchao / custom). Subclasses are registered into `QUANT_BACKENDS` via `register_quant_backend`, instantiated by `QuantizeConfig`, and injected with the method's backend config. + +The quantized Linear produced by a backend must satisfy the following four contract clauses: + +- **(a)** It is a drop-in replacement for `nn.Linear`: `forward(x)` performs dequantization + matmul internally. +- **(b)** `.to(...)` only moves devices, never re-types the packed weight / quant state: dtype casts (`.to(dtype)`, `.half()`, `.float()`, etc.) must leave their storage format and values intact. +- **(c)** `state_dict()` and `load_state_dict(assign=True)` round-trip (via `flatten_state_dict` / `unflatten_state_dict` when necessary). +- **(d)** (Training only) `forward` is differentiable with respect to its input, so gradients can pass through frozen quantized layers to reach LoRA branches. Declared statically by `capabilities()["is_differentiable"]` and verifiable at runtime with `check_differentiable`. + +Clause (b) is necessary because VRAM management performs dtype/device conversions on the model; if a packed weight were accidentally cast to bf16, the quant state would be corrupted. See `Fp8Linear._apply` in `diffsynth/models/ideogram4_dit.py` for a reference: register the tensor names that need protection, and downgrade conversions that would change their dtype to device-only moves inside `_apply`. + +Members to implement or override: + +| Member | Description | +| --- | --- | +| `name` | Set automatically by `register_quant_backend` | +| `project_url` | The project page of the library this backend belongs to; `announce_environment()` prints it, pointing hardware compatibility issues upstream | +| `capabilities()` | Returns four boolean flags `is_serializable` / `is_differentiable` / `is_compileable` / `requires_calibration`, all defaulting to `False` | +| `validate_environment()` | Checks dependencies and hardware, raising an exception with installation instructions when missing. Called when constructing `QuantizeConfig` | +| `quantized_linear_classes()` | Declares the Linear classes this backend produces; they must all be subclasses of `torch.nn.Linear`. `is_quantized_linear` defaults to an `isinstance` check against them | +| `create_quantized_linear(linear, compute_device, model_device)` | Online quantization: turns an fp `nn.Linear` into a quantized Linear. If unimplemented, the backend does not support online quantization | +| `create_quantized_linear_shell(linear, compute_dtype)` | Builds an empty shell for loading pre-quantized checkpoints. If unimplemented, the backend does not support pre-quantized loading | +| `dequantize_to_linear(module, compute_dtype, compute_device, model_device)` | Restores a plain `nn.Linear`. If unimplemented, `mode="dequant_once"` is unavailable | +| `flatten_state_dict` / `unflatten_state_dict` | Conversion between quantized state dicts and flat tensors; must be implemented when `is_serializable=True` | + +The base class provides clear error messages for unimplemented methods, so a backend supporting only some capabilities can implement just the ones it needs. + +### BackendConfig + +`BackendConfig` is the base class for a backend's typed config. User-tunable parameters are written as ordinary dataclass fields; values pinned by the method are declared with `field(init=False, default=...)`, so they are both shown separately by `describe_quant_method` and impossible to modify via `backend_config_kwargs`. + +The classmethod `from_kwargs(kwargs)` validates the keys passed in: unknown keys raise a `ValueError` listing all accepted keys. It is typically used directly as the `config_factory` of `register_quant_method`. + +The bitsandbytes backend is a canonical example of this pattern — the shared 4bit parameters live in the base class, while `quant_type` is pinned by each method's subclass: + +```python +from dataclasses import dataclass, field +import torch +from diffsynth.core.quant import BackendConfig, register_quant_method + + +@dataclass +class BitsAndBytes4bitConfig(BackendConfig): + compress_statistics: bool = True + blocksize: int = None + quant_storage: torch.dtype = torch.uint8 + + +@dataclass +class BitsAndBytesNF4Config(BitsAndBytes4bitConfig): + quant_type: str = field(init=False, default="nf4") + + +register_quant_method("bitsandbytes_nf4", "bitsandbytes", BitsAndBytesNF4Config.from_kwargs, label="4bit, nf4, weight-only") +``` + +`config_factory` is not required to return a `BackendConfig`: if the backend directly consumes a third-party library's config object, you can pass any function that turns a `dict` into that object (the torchao backend does this, building `Int8WeightOnlyConfig` and the like directly). + +### register_quant_backend and register_quant_method + +- `register_quant_backend(name)`: a class decorator that registers a backend class into `QUANT_BACKENDS` and sets its `name`. +- `register_quant_method(name, backend, config_factory, label="")`: registers a method name into `QUANT_METHODS`, specifying which backend it uses and how its backend config is built. One backend can register multiple methods, distinguished by pinned fields. + +A complete skeleton of a minimal backend: + +```python +import torch +from diffsynth.core.quant import QuantBackend, register_quant_backend, register_quant_method + + +class MyQuantLinear(torch.nn.Linear): + """Custom quantized Linear; must satisfy contract clauses (a)-(d).""" + + +@register_quant_backend("my_backend") +class MyQuantBackend(QuantBackend): + project_url = "https://example.com/my-quant-lib" + + def capabilities(self): + return {**super().capabilities(), "is_serializable": True, "is_differentiable": True} + + def validate_environment(self): + ... # raise ImportError when dependencies are missing + + def quantized_linear_classes(self): + return (MyQuantLinear,) + + def create_quantized_linear(self, linear, compute_device=None, model_device=None): + ... + + def create_quantized_linear_shell(self, linear, compute_dtype): + ... + + def dequantize_to_linear(self, module, compute_dtype, compute_device=None, model_device=None): + ... + + +register_quant_method("my_method", "my_backend", lambda kwargs: dict(kwargs), label="my custom method") +``` + +Once registered, it can be used just like a built-in method: `QuantizeConfig(method="my_method")`. If the backend is defined outside `diffsynth/core/quant/backends/` (e.g. alongside a model), it only needs to be imported before constructing `QuantizeConfig`. + +## Verification Tools + +### check_differentiable + +```python +check_differentiable(module, example_input=None, verbose=True) -> bool +``` + +Checks whether gradients can pass through `module` to its input: runs a real backward pass from the output (`torch.autograd.grad`) and confirms a finite gradient arrives at the input. This is exactly what LoRA training requires from frozen (quantized) layers. The module is cast to bfloat16 in place and probed with a bfloat16 input; when `example_input` is `None`, a random input is constructed automatically for modules exposing `in_features`. + +```python +import torch +from diffsynth.core.quant import check_differentiable +from torchao.quantization import quantize_, Int8WeightOnlyConfig + +linear = torch.nn.Linear(1024, 1024, dtype=torch.bfloat16, device="cuda") +quantize_(linear, Int8WeightOnlyConfig(version=2)) +check_differentiable(linear) +``` + +### check_backend_contract + +```python +check_backend_contract(backend, in_features=512, out_features=512, + compute_dtype=torch.bfloat16, compute_device="cuda", verbose=True) -> bool +``` + +An admission self-check for new backends: verifies that it declares its Linear classes, that both factory methods return instances of those classes, and that every declared class is a subclass of `torch.nn.Linear` (otherwise LoRA target detection and VRAM management cannot see it). It also checks that the checkpoint keys the backend actually writes all live under the layer name — a key pattern missing a scale would make Disk Offload silently load corrupted layers. Unsupported factory methods are skipped rather than counted as failures. + +```python +from diffsynth.core.quant import QUANT_BACKENDS, QUANT_METHODS, check_backend_contract + +spec = QUANT_METHODS["bitsandbytes_nf4"] +check_backend_contract(QUANT_BACKENDS[spec.backend](spec.config_factory({}))) +``` diff --git a/docs/en/API_Reference/core/vram.md b/docs/en/API_Reference/core/vram.md new file mode 100644 index 0000000000000000000000000000000000000000..6b4878f0ed84bfc63f9c588a2e5893530dc525e8 --- /dev/null +++ b/docs/en/API_Reference/core/vram.md @@ -0,0 +1,66 @@ +# `diffsynth.core.vram`: VRAM Management + +This document introduces the underlying VRAM management functionalities in `diffsynth.core.vram`. If you wish to use these functionalities in other codebases, you can refer to this document. + +## Skipping Model Parameter Initialization + +When loading models in `PyTorch`, model parameters default to occupying VRAM or memory and initializing parameters, but these parameters will be overwritten when loading pretrained weights, leading to redundant computations. `PyTorch` does not provide an interface to skip these redundant computations. We provide `skip_model_initialization` in `diffsynth.core.vram` to skip model parameter initialization. + +Default model loading approach: + +```python +from diffsynth.core import load_state_dict +from diffsynth.models.qwen_image_controlnet import QwenImageBlockWiseControlNet + +model = QwenImageBlockWiseControlNet() # Slow +path = "models/DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Canny/model.safetensors" +state_dict = load_state_dict(path, device="cpu") +model.load_state_dict(state_dict, assign=True) +``` + +Model loading approach that skips parameter initialization: + +```python +from diffsynth.core import load_state_dict, skip_model_initialization +from diffsynth.models.qwen_image_controlnet import QwenImageBlockWiseControlNet + +with skip_model_initialization(): + model = QwenImageBlockWiseControlNet() # Fast +path = "models/DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Canny/model.safetensors" +state_dict = load_state_dict(path, device="cpu") +model.load_state_dict(state_dict, assign=True) +``` + +In `DiffSynth-Studio`, all pretrained models follow this loading logic. After developers [integrate models](../../Developer_Guide/Integrating_Your_Model.md), they can directly load models quickly using this approach. + +## State Dict Disk Mapping + +For pretrained weight files of a model, if we only need to read a set of parameters rather than all parameters, State Dict Disk Mapping can accelerate this process. We provide `DiskMap` in `diffsynth.core.vram` for on-demand loading of model parameters. + +Default weight loading approach: + +```python +from diffsynth.core import load_state_dict + +path = "models/DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Canny/model.safetensors" +state_dict = load_state_dict(path, device="cpu") # Slow +print(state_dict["img_in.weight"]) +``` + +Using `DiskMap` to load only specific parameters: + +```python +from diffsynth.core import DiskMap + +path = "models/DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Canny/model.safetensors" +state_dict = DiskMap(path, device="cpu") # Fast +print(state_dict["img_in.weight"]) +``` + +`DiskMap` is the basic component of Disk Offload in `DiffSynth-Studio`. After developers [configure fine-grained VRAM management schemes](../../Developer_Guide/Enabling_VRAM_management.md), they can directly enable Disk Offload. + +`DiskMap` is a functionality implemented using the characteristics of `.safetensors` files. Therefore, when using `.bin`, `.pth`, `.ckpt`, and other binary files, model parameters are fully loaded, which causes Disk Offload to not support these formats of files. **We do not recommend developers to continue using these formats of files.** + +## Replacable Modules for VRAM Management + +When `DiffSynth-Studio`'s VRAM management is enabled, the modules inside the model will be replaced with replacable modules in `diffsynth.core.vram.layers`. For usage, see [Fine-grained VRAM Management Scheme](../../Developer_Guide/Enabling_VRAM_management.md#writing-fine-grained-vram-management-schemes). \ No newline at end of file diff --git a/docs/en/Developer_Guide/Building_a_Pipeline.md b/docs/en/Developer_Guide/Building_a_Pipeline.md new file mode 100644 index 0000000000000000000000000000000000000000..43ab6d7857a829f2fc27dd8e6fe9674055fbc62b --- /dev/null +++ b/docs/en/Developer_Guide/Building_a_Pipeline.md @@ -0,0 +1,254 @@ +# Building a Pipeline + +After [integrating the required models for the Pipeline](../Developer_Guide/Integrating_Your_Model.md), you also need to build a `Pipeline` for model inference. This document provides a standardized process for building a `Pipeline`. Developers can also refer to existing `Pipeline` implementations for construction. + +The `Pipeline` implementation is located in `diffsynth/pipelines`. Each `Pipeline` contains the following essential key components: + +* `__init__` +* `from_pretrained` +* `__call__` +* `units` +* `model_fn` + +## `__init__` + +In `__init__`, the `Pipeline` is initialized. Here is a simple implementation: + +```python +import torch +from PIL import Image +from typing import Union +from tqdm import tqdm +from ..diffusion import FlowMatchScheduler +from ..core import ModelConfig +from ..diffusion.base_pipeline import BasePipeline, PipelineUnit +from ..models.new_models import XXX_Model, YYY_Model, ZZZ_Model + +class NewDiffSynthPipeline(BasePipeline): + + def __init__(self, device="cuda", torch_dtype=torch.bfloat16): + super().__init__(device=device, torch_dtype=torch_dtype) + self.scheduler = FlowMatchScheduler() + self.text_encoder: XXX_Model = None + self.dit: YYY_Model = None + self.vae: ZZZ_Model = None + self.in_iteration_models = ("dit",) + self.units = [ + NewDiffSynthPipelineUnit_xxx(), + ... + ] + self.model_fn = model_fn_new +``` + +This includes the following parts: + +* `scheduler`: Scheduler, used to control the coefficients in the iterative formula during inference, controlling the noise content at each step. +* `text_encoder`, `dit`, `vae`: Models. Since [Latent Diffusion](https://arxiv.org/abs/2112.10752) was proposed, this three-stage model architecture has become the mainstream Diffusion model architecture. However, this is not immutable, and any number of models can be added to the `Pipeline`. +* `in_iteration_models`: Iteration models. This tuple marks which models will be called during iteration. +* `units`: Pre-processing units for model iteration. See [`units`](#units) for details. +* `model_fn`: The `forward` function of the denoising model during iteration. See [`model_fn`](#model_fn) for details. + +> Q: Model loading does not occur in `__init__`, why initialize each model as `None` here? +> +> A: By annotating the type of each model here, the code editor can provide code completion prompts based on each model, facilitating subsequent development. + +## `from_pretrained` + +`from_pretrained` is responsible for loading the required models to make the `Pipeline` callable. Here is a simple implementation: + +```python + @staticmethod + def from_pretrained( + torch_dtype: torch.dtype = torch.bfloat16, + device: Union[str, torch.device] = "cuda", + model_configs: list[ModelConfig] = [], + vram_limit: float = None, + ): + # Initialize pipeline + pipe = NewDiffSynthPipeline(device=device, torch_dtype=torch_dtype) + model_pool = pipe.download_and_load_models(model_configs, vram_limit) + + # Fetch models + pipe.text_encoder = model_pool.fetch_model("xxx_text_encoder") + pipe.dit = model_pool.fetch_model("yyy_dit") + pipe.vae = model_pool.fetch_model("zzz_vae") + # If necessary, load tokenizers here. + + # VRAM Management + pipe.vram_management_enabled = pipe.check_vram_management_state() + return pipe +``` + +Developers need to implement the logic for fetching models. The corresponding model names are the `"model_name"` in the [model Config filled in during model integration](../Developer_Guide/Integrating_Your_Model.md#step-3-writing-model-config). + +Some models also need to load `tokenizer`. Extra `tokenizer_config` parameters can be added to `from_pretrained` as needed, and this part can be implemented after fetching the models. + +## `__call__` + +`__call__` implements the entire generation process of the Pipeline. Below is a common generation process template. Developers can modify it based on their needs. + +```python + @torch.no_grad() + def __call__( + self, + prompt: str, + negative_prompt: str = "", + cfg_scale: float = 4.0, + input_image: Image.Image = None, + denoising_strength: float = 1.0, + height: int = 1328, + width: int = 1328, + seed: int = None, + rand_device: str = "cpu", + num_inference_steps: int = 30, + progress_bar_cmd = tqdm, + ): + # Scheduler + self.scheduler.set_timesteps( + num_inference_steps, + denoising_strength=denoising_strength + ) + + # Parameters + inputs_posi = { + "prompt": prompt, + } + inputs_nega = { + "negative_prompt": negative_prompt, + } + inputs_shared = { + "cfg_scale": cfg_scale, + "input_image": input_image, + "denoising_strength": denoising_strength, + "height": height, + "width": width, + "seed": seed, + "rand_device": rand_device, + "num_inference_steps": num_inference_steps, + } + for unit in self.units: + inputs_shared, inputs_posi, inputs_nega = self.unit_runner(unit, self, inputs_shared, inputs_posi, inputs_nega) + + # Denoise + self.load_models_to_device(self.in_iteration_models) + models = {name: getattr(self, name) for name in self.in_iteration_models} + for progress_id, timestep in enumerate(progress_bar_cmd(self.scheduler.timesteps)): + timestep = timestep.unsqueeze(0).to(dtype=self.torch_dtype, device=self.device) + + # Inference + noise_pred_posi = self.model_fn(**models, **inputs_shared, **inputs_posi, timestep=timestep, progress_id=progress_id) + if cfg_scale != 1.0: + noise_pred_nega = self.model_fn(**models, **inputs_shared, **inputs_nega, timestep=timestep, progress_id=progress_id) + noise_pred = noise_pred_nega + cfg_scale * (noise_pred_posi - noise_pred_nega) + else: + noise_pred = noise_pred_posi + + # Scheduler + inputs_shared["latents"] = self.step(self.scheduler, progress_id=progress_id, noise_pred=noise_pred, **inputs_shared) + + # Decode + self.load_models_to_device(['vae']) + image = self.vae.decode(inputs_shared["latents"], device=self.device) + image = self.vae_output_to_image(image) + self.load_models_to_device([]) + + return image +``` + +## `units` + +`units` contains all the preprocessing processes, such as: width/height checking, prompt encoding, initial noise generation, etc. In the entire model preprocessing process, data is abstracted into three mutually exclusive parts, stored in corresponding dictionaries: + +* `inputs_shared`: Shared inputs, parameters unrelated to [Classifier-Free Guidance](https://arxiv.org/abs/2207.12598) (CFG for short). +* `inputs_posi`: Positive side inputs for Classifier-Free Guidance, containing content related to positive prompts. +* `inputs_nega`: Negative side inputs for Classifier-Free Guidance, containing content related to negative prompts. + +Pipeline Unit implementations include three types: direct mode, CFG separation mode, and takeover mode. + +If some calculations are unrelated to CFG, direct mode can be used, for example, Qwen-Image's random noise initialization: + +```python +class QwenImageUnit_NoiseInitializer(PipelineUnit): + def __init__(self): + super().__init__( + input_params=("height", "width", "seed", "rand_device"), + output_params=("noise",), + ) + + def process(self, pipe: QwenImagePipeline, height, width, seed, rand_device): + noise = pipe.generate_noise((1, 16, height//8, width//8), seed=seed, rand_device=rand_device, rand_torch_dtype=pipe.torch_dtype) + return {"noise": noise} +``` + +If some calculations are related to CFG and need to separately process positive and negative prompts, but the input parameters on both sides are the same, CFG separation mode can be used, for example, Qwen-image's prompt encoding: + +```python +class QwenImageUnit_PromptEmbedder(PipelineUnit): + def __init__(self): + super().__init__( + seperate_cfg=True, + input_params_posi={"prompt": "prompt"}, + input_params_nega={"prompt": "negative_prompt"}, + input_params=("edit_image",), + output_params=("prompt_emb", "prompt_emb_mask"), + onload_model_names=("text_encoder",) + ) + + def process(self, pipe: QwenImagePipeline, prompt, edit_image=None) -> dict: + pipe.load_models_to_device(self.onload_model_names) + # Do something + return {"prompt_emb": prompt_embeds, "prompt_emb_mask": encoder_attention_mask} +``` + +If some calculations need global information, takeover mode is required, for example, Qwen-Image's entity partition control: + +```python +class QwenImageUnit_EntityControl(PipelineUnit): + def __init__(self): + super().__init__( + take_over=True, + input_params=("eligen_entity_prompts", "width", "height", "eligen_enable_on_negative", "cfg_scale"), + output_params=("entity_prompt_emb", "entity_masks", "entity_prompt_emb_mask"), + onload_model_names=("text_encoder",) + ) + + def process(self, pipe: QwenImagePipeline, inputs_shared, inputs_posi, inputs_nega): + # Do something + return inputs_shared, inputs_posi, inputs_nega +``` + +The following are the parameter configurations required for Pipeline Unit: + +* `seperate_cfg`: Whether to enable CFG separation mode +* `take_over`: Whether to enable takeover mode +* `input_params`: Shared input parameters +* `output_params`: Output parameters +* `input_params_posi`: Positive side input parameters +* `input_params_nega`: Negative side input parameters +* `onload_model_names`: Names of model components to be called + +When designing `unit`, please try to follow these principles: + +* Default fallback: For optional function `unit` input parameters, the default is `None` rather than `False` or other values. Please provide fallback processing for this default value. +* Parameter triggering: Some Adapter models may not be loaded, such as ControlNet. The corresponding `unit` should control triggering based on whether the parameter input is `None` rather than whether the model is loaded. For example, when the user inputs `controlnet_image` but does not load the ControlNet model, the code should give an error rather than ignore these input parameters and continue execution. +* Simplicity first: Use direct mode as much as possible, only use takeover mode when the function cannot be implemented. +* VRAM efficiency: When calling models in `unit`, please use `pipe.load_models_to_device(self.onload_model_names)` to activate the corresponding models. Do not call other models outside `onload_model_names`. After `unit` calculation is completed, do not manually release VRAM with `pipe.load_models_to_device([])`. + +> Q: Some parameters are not called during the inference process, such as `output_params`. Is it still necessary to configure them? +> +> A: These parameters will not affect the inference process, but they will affect some experimental features. Therefore, we recommend configuring them properly. For example, "split training" - we can complete the preprocessing offline during training, but some model calculations that require gradient backpropagation cannot be split. These parameters are used to build computational graphs to infer which calculations can be split. + +## `model_fn` + +`model_fn` is the unified `forward` interface during iteration. For models where the open-source ecosystem is not yet formed, you can directly use the denoising model's `forward`, for example: + +```python +def model_fn_new(dit=None, latents=None, timestep=None, prompt_emb=None, **kwargs): + return dit(latents, prompt_emb, timestep) +``` + +For models with rich open-source ecosystems, `model_fn` usually contains complex and chaotic cross-model inference. Taking `diffsynth/pipelines/qwen_image.py` as an example, the additional calculations implemented in this function include: entity partition control, three types of ControlNet, Gradient Checkpointing, etc. Developers need to be extra careful when implementing this part to avoid conflicts between module functions. + +## Compilation Acceleration + +To enable compilation acceleration, please refer to [Inference Acceleration](../Pipeline_Usage/Accelerated_Inference.md). \ No newline at end of file diff --git a/docs/en/Developer_Guide/Enabling_VRAM_management.md b/docs/en/Developer_Guide/Enabling_VRAM_management.md new file mode 100644 index 0000000000000000000000000000000000000000..ef4ee5856ef95a059c35f82ef56849944ae45454 --- /dev/null +++ b/docs/en/Developer_Guide/Enabling_VRAM_management.md @@ -0,0 +1,455 @@ +# Fine-Grained VRAM Management Scheme + +This document introduces how to write reasonable fine-grained VRAM management schemes for models, and how to use the VRAM management functions in `DiffSynth-Studio` for other external code libraries. Before reading this document, please read the document [VRAM Management](../Pipeline_Usage/VRAM_management.md). + +## How Much VRAM Does a 20B Model Need? + +Taking Qwen-Image's DiT model as an example, this model has reached 20B parameters. The following code will load this model and perform inference, requiring about 40G VRAM. This model obviously cannot run on consumer-grade GPUs with smaller VRAM. + +```python +from diffsynth.core import load_model +from diffsynth.models.qwen_image_dit import QwenImageDiT +from modelscope import snapshot_download +import torch + +snapshot_download( + model_id="Qwen/Qwen-Image", + local_dir="models/Qwen/Qwen-Image", + allow_file_pattern="transformer/*" +) +prefix = "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model" +model_path = [prefix + f"-0000{i}-of-00009.safetensors" for i in range(1, 10)] +inputs = { + "latents": torch.randn((1, 16, 128, 128), dtype=torch.bfloat16, device="cuda"), + "timestep": torch.zeros((1,), dtype=torch.bfloat16, device="cuda"), + "prompt_emb": torch.randn((1, 5, 3584), dtype=torch.bfloat16, device="cuda"), + "prompt_emb_mask": torch.ones((1, 5), dtype=torch.int64, device="cuda"), + "height": 1024, + "width": 1024, +} + +model = load_model(QwenImageDiT, model_path, torch_dtype=torch.bfloat16, device="cuda") +with torch.no_grad(): + output = model(**inputs) +``` + +## Writing Fine-Grained VRAM Management Scheme + +To write a fine-grained VRAM management scheme, we need to use `print(model)` to observe and analyze the model structure: + +``` +QwenImageDiT( + (pos_embed): QwenEmbedRope() + (time_text_embed): TimestepEmbeddings( + (time_proj): TemporalTimesteps() + (timestep_embedder): DiffusersCompatibleTimestepProj( + (linear_1): Linear(in_features=256, out_features=3072, bias=True) + (act): SiLU() + (linear_2): Linear(in_features=3072, out_features=3072, bias=True) + ) + ) + (txt_norm): RMSNorm() + (img_in): Linear(in_features=64, out_features=3072, bias=True) + (txt_in): Linear(in_features=3584, out_features=3072, bias=True) + (transformer_blocks): ModuleList( + (0-59): 60 x QwenImageTransformerBlock( + (img_mod): Sequential( + (0): SiLU() + (1): Linear(in_features=3072, out_features=18432, bias=True) + ) + (img_norm1): LayerNorm((3072,), eps=1e-06, elementwise_affine=False) + (attn): QwenDoubleStreamAttention( + (to_q): Linear(in_features=3072, out_features=3072, bias=True) + (to_k): Linear(in_features=3072, out_features=3072, bias=True) + (to_v): Linear(in_features=3072, out_features=3072, bias=True) + (norm_q): RMSNorm() + (norm_k): RMSNorm() + (add_q_proj): Linear(in_features=3072, out_features=3072, bias=True) + (add_k_proj): Linear(in_features=3072, out_features=3072, bias=True) + (add_v_proj): Linear(in_features=3072, out_features=3072, bias=True) + (norm_added_q): RMSNorm() + (norm_added_k): RMSNorm() + (to_out): Sequential( + (0): Linear(in_features=3072, out_features=3072, bias=True) + ) + (to_add_out): Linear(in_features=3072, out_features=3072, bias=True) + ) + (img_norm2): LayerNorm((3072,), eps=1e-06, elementwise_affine=False) + (img_mlp): QwenFeedForward( + (net): ModuleList( + (0): ApproximateGELU( + (proj): Linear(in_features=3072, out_features=12288, bias=True) + ) + (1): Dropout(p=0.0, inplace=False) + (2): Linear(in_features=12288, out_features=3072, bias=True) + ) + ) + (txt_mod): Sequential( + (0): SiLU() + (1): Linear(in_features=3072, out_features=18432, bias=True) + ) + (txt_norm1): LayerNorm((3072,), eps=1e-06, elementwise_affine=False) + (txt_norm2): LayerNorm((3072,), eps=1e-06, elementwise_affine=False) + (txt_mlp): QwenFeedForward( + (net): ModuleList( + (0): ApproximateGELU( + (proj): Linear(in_features=3072, out_features=12288, bias=True) + ) + (1): Dropout(p=0.0, inplace=False) + (2): Linear(in_features=12288, out_features=3072, bias=True) + ) + ) + ) + ) + (norm_out): AdaLayerNorm( + (linear): Linear(in_features=3072, out_features=6144, bias=True) + (norm): LayerNorm((3072,), eps=1e-06, elementwise_affine=False) + ) + (proj_out): Linear(in_features=3072, out_features=64, bias=True) +) +``` + +In VRAM management, we only care about layers containing parameters. In this model structure, `QwenEmbedRope`, `TemporalTimesteps`, `SiLU` and other Layers do not contain parameters. `LayerNorm` also does not contain parameters because `elementwise_affine=False` is set. Layers containing parameters are only `Linear` and `RMSNorm`. + +`diffsynth.core.vram` provides two replacement modules for VRAM management: +* `AutoWrappedLinear`: Used to replace `Linear` layers +* `AutoWrappedModule`: Used to replace any other layer + +Write a `module_map` to map `Linear` and `RMSNorm` in the model to the corresponding modules: + +```python +module_map={ + torch.nn.Linear: AutoWrappedLinear, + RMSNorm: AutoWrappedModule, +} +``` + +In addition, `vram_config` and `vram_limit` are also required, which have been introduced in [VRAM Management](../Pipeline_Usage/VRAM_management.md#more-usage-methods). + +Call `enable_vram_management` to enable VRAM management. Note that the `device` when loading the model is `cpu`, consistent with `offload_device`: + +```python +from diffsynth.core import load_model, enable_vram_management, AutoWrappedLinear, AutoWrappedModule +from diffsynth.models.qwen_image_dit import QwenImageDiT, RMSNorm +import torch + +prefix = "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model" +model_path = [prefix + f"-0000{i}-of-00009.safetensors" for i in range(1, 10)] +inputs = { + "latents": torch.randn((1, 16, 128, 128), dtype=torch.bfloat16, device="cuda"), + "timestep": torch.zeros((1,), dtype=torch.bfloat16, device="cuda"), + "prompt_emb": torch.randn((1, 5, 3584), dtype=torch.bfloat16, device="cuda"), + "prompt_emb_mask": torch.ones((1, 5), dtype=torch.int64, device="cuda"), + "height": 1024, + "width": 1024, +} + +model = load_model(QwenImageDiT, model_path, torch_dtype=torch.bfloat16, device="cpu") +enable_vram_management( + model, + module_map={ + torch.nn.Linear: AutoWrappedLinear, + RMSNorm: AutoWrappedModule, + }, + vram_config = { + "offload_dtype": torch.bfloat16, + "offload_device": "cpu", + "onload_dtype": torch.bfloat16, + "onload_device": "cpu", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", + }, + vram_limit=0, +) +with torch.no_grad(): + output = model(**inputs) +``` + +The above code only requires 2G VRAM to run the `forward` of a 20B model. + +## Disk Offload + +[Disk Offload](../Pipeline_Usage/VRAM_management.md#disk-offload) is a special VRAM management scheme that needs to be enabled during the model loading process, not after the model is loaded. Usually, when the above code can run smoothly, Disk Offload can be directly enabled: + +```python +from diffsynth.core import load_model, enable_vram_management, AutoWrappedLinear, AutoWrappedModule +from diffsynth.models.qwen_image_dit import QwenImageDiT, RMSNorm +import torch + +prefix = "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model" +model_path = [prefix + f"-0000{i}-of-00009.safetensors" for i in range(1, 10)] +inputs = { + "latents": torch.randn((1, 16, 128, 128), dtype=torch.bfloat16, device="cuda"), + "timestep": torch.zeros((1,), dtype=torch.bfloat16, device="cuda"), + "prompt_emb": torch.randn((1, 5, 3584), dtype=torch.bfloat16, device="cuda"), + "prompt_emb_mask": torch.ones((1, 5), dtype=torch.int64, device="cuda"), + "height": 1024, + "width": 1024, +} + +model = load_model( + QwenImageDiT, + model_path, + module_map={ + torch.nn.Linear: AutoWrappedLinear, + RMSNorm: AutoWrappedModule, + }, + vram_config={ + "offload_dtype": "disk", + "offload_device": "disk", + "onload_dtype": "disk", + "onload_device": "disk", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", + }, + vram_limit=0, +) +with torch.no_grad(): + output = model(**inputs) +``` + +Disk Offload is an extremely special VRAM management scheme. It only supports `.safetensors` format files, not binary files such as `.bin`, `.pth`, `.ckpt`, and does not support [state dict converter](../Developer_Guide/Integrating_Your_Model.md#step-2-model-file-format-conversion) with Tensor reshape. + +If there are situations where Disk Offload cannot run normally but non-Disk Offload can run normally, please submit an issue to us on GitHub. + +## Writing Default Configuration + +To make it easier for users to use the VRAM management function, we write the fine-grained VRAM management configuration in `diffsynth/configs/vram_management_module_maps.py`. The configuration information for the above model is: + +```python +"diffsynth.models.qwen_image_dit.QwenImageDiT": { + "diffsynth.models.qwen_image_dit.RMSNorm": "diffsynth.core.vram.layers.AutoWrappedModule", + "torch.nn.Linear": "diffsynth.core.vram.layers.AutoWrappedLinear", +} +```# Fine-Grained VRAM Management Scheme + +This document introduces how to write reasonable fine-grained VRAM management schemes for models, and how to use the VRAM management functions in `DiffSynth-Studio` for other external code libraries. Before reading this document, please read the document [VRAM Management](../Pipeline_Usage/VRAM_management.md). + +## How Much VRAM Does a 20B Model Need? + +Taking Qwen-Image's DiT model as an example, this model has reached 20B parameters. The following code will load this model and perform inference, requiring about 40G VRAM. This model obviously cannot run on consumer-grade GPUs with smaller VRAM. + +```python +from diffsynth.core import load_model +from diffsynth.models.qwen_image_dit import QwenImageDiT +from modelscope import snapshot_download +import torch + +snapshot_download( + model_id="Qwen/Qwen-Image", + local_dir="models/Qwen/Qwen-Image", + allow_file_pattern="transformer/*" +) +prefix = "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model" +model_path = [prefix + f"-0000{i}-of-00009.safetensors" for i in range(1, 10)] +inputs = { + "latents": torch.randn((1, 16, 128, 128), dtype=torch.bfloat16, device="cuda"), + "timestep": torch.zeros((1,), dtype=torch.bfloat16, device="cuda"), + "prompt_emb": torch.randn((1, 5, 3584), dtype=torch.bfloat16, device="cuda"), + "prompt_emb_mask": torch.ones((1, 5), dtype=torch.int64, device="cuda"), + "height": 1024, + "width": 1024, +} + +model = load_model(QwenImageDiT, model_path, torch_dtype=torch.bfloat16, device="cuda") +with torch.no_grad(): + output = model(**inputs) +``` + +## Writing Fine-Grained VRAM Management Scheme + +To write a fine-grained VRAM management scheme, we need to use `print(model)` to observe and analyze the model structure: + +``` +QwenImageDiT( + (pos_embed): QwenEmbedRope() + (time_text_embed): TimestepEmbeddings( + (time_proj): TemporalTimesteps() + (timestep_embedder): DiffusersCompatibleTimestepProj( + (linear_1): Linear(in_features=256, out_features=3072, bias=True) + (act): SiLU() + (linear_2): Linear(in_features=3072, out_features=3072, bias=True) + ) + ) + (txt_norm): RMSNorm() + (img_in): Linear(in_features=64, out_features=3072, bias=True) + (txt_in): Linear(in_features=3584, out_features=3072, bias=True) + (transformer_blocks): ModuleList( + (0-59): 60 x QwenImageTransformerBlock( + (img_mod): Sequential( + (0): SiLU() + (1): Linear(in_features=3072, out_features=18432, bias=True) + ) + (img_norm1): LayerNorm((3072,), eps=1e-06, elementwise_affine=False) + (attn): QwenDoubleStreamAttention( + (to_q): Linear(in_features=3072, out_features=3072, bias=True) + (to_k): Linear(in_features=3072, out_features=3072, bias=True) + (to_v): Linear(in_features=3072, out_features=3072, bias=True) + (norm_q): RMSNorm() + (norm_k): RMSNorm() + (add_q_proj): Linear(in_features=3072, out_features=3072, bias=True) + (add_k_proj): Linear(in_features=3072, out_features=3072, bias=True) + (add_v_proj): Linear(in_features=3072, out_features=3072, bias=True) + (norm_added_q): RMSNorm() + (norm_added_k): RMSNorm() + (to_out): Sequential( + (0): Linear(in_features=3072, out_features=3072, bias=True) + ) + (to_add_out): Linear(in_features=3072, out_features=3072, bias=True) + ) + (img_norm2): LayerNorm((3072,), eps=1e-06, elementwise_affine=False) + (img_mlp): QwenFeedForward( + (net): ModuleList( + (0): ApproximateGELU( + (proj): Linear(in_features=3072, out_features=12288, bias=True) + ) + (1): Dropout(p=0.0, inplace=False) + (2): Linear(in_features=12288, out_features=3072, bias=True) + ) + ) + (txt_mod): Sequential( + (0): SiLU() + (1): Linear(in_features=3072, out_features=18432, bias=True) + ) + (txt_norm1): LayerNorm((3072,), eps=1e-06, elementwise_affine=False) + (txt_norm2): LayerNorm((3072,), eps=1e-06, elementwise_affine=False) + (txt_mlp): QwenFeedForward( + (net): ModuleList( + (0): ApproximateGELU( + (proj): Linear(in_features=3072, out_features=12288, bias=True) + ) + (1): Dropout(p=0.0, inplace=False) + (2): Linear(in_features=12288, out_features=3072, bias=True) + ) + ) + ) + ) + (norm_out): AdaLayerNorm( + (linear): Linear(in_features=3072, out_features=6144, bias=True) + (norm): LayerNorm((3072,), eps=1e-06, elementwise_affine=False) + ) + (proj_out): Linear(in_features=3072, out_features=64, bias=True) +) +``` + +In VRAM management, we only care about layers containing parameters. In this model structure, `QwenEmbedRope`, `TemporalTimesteps`, `SiLU` and other Layers do not contain parameters. `LayerNorm` also does not contain parameters because `elementwise_affine=False` is set. Layers containing parameters are only `Linear` and `RMSNorm`. + +`diffsynth.core.vram` provides two replacement modules for VRAM management: +* `AutoWrappedLinear`: Used to replace `Linear` layers +* `AutoWrappedModule`: Used to replace any other layer + +Write a `module_map` to map `Linear` and `RMSNorm` in the model to the corresponding modules: + +```python +module_map={ + torch.nn.Linear: AutoWrappedLinear, + RMSNorm: AutoWrappedModule, +} +``` + +In addition, `vram_config` and `vram_limit` are also required, which have been introduced in [VRAM Management](../Pipeline_Usage/VRAM_management.md#more-usage-methods). + +Call `enable_vram_management` to enable VRAM management. Note that the `device` when loading the model is `cpu`, consistent with `offload_device`: + +```python +from diffsynth.core import load_model, enable_vram_management, AutoWrappedLinear, AutoWrappedModule +from diffsynth.models.qwen_image_dit import QwenImageDiT, RMSNorm +import torch + +prefix = "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model" +model_path = [prefix + f"-0000{i}-of-00009.safetensors" for i in range(1, 10)] +inputs = { + "latents": torch.randn((1, 16, 128, 128), dtype=torch.bfloat16, device="cuda"), + "timestep": torch.zeros((1,), dtype=torch.bfloat16, device="cuda"), + "prompt_emb": torch.randn((1, 5, 3584), dtype=torch.bfloat16, device="cuda"), + "prompt_emb_mask": torch.ones((1, 5), dtype=torch.int64, device="cuda"), + "height": 1024, + "width": 1024, +} + +model = load_model(QwenImageDiT, model_path, torch_dtype=torch.bfloat16, device="cpu") +enable_vram_management( + model, + module_map={ + torch.nn.Linear: AutoWrappedLinear, + RMSNorm: AutoWrappedModule, + }, + vram_config = { + "offload_dtype": torch.bfloat16, + "offload_device": "cpu", + "onload_dtype": torch.bfloat16, + "onload_device": "cpu", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", + }, + vram_limit=0, +) +with torch.no_grad(): + output = model(**inputs) +``` + +The above code only requires 2G VRAM to run the `forward` of a 20B model. + +## Disk Offload + +[Disk Offload](../Pipeline_Usage/VRAM_management.md#disk-offload) is a special VRAM management scheme that needs to be enabled during the model loading process, not after the model is loaded. Usually, when the above code can run smoothly, Disk Offload can be directly enabled: + +```python +from diffsynth.core import load_model, enable_vram_management, AutoWrappedLinear, AutoWrappedModule +from diffsynth.models.qwen_image_dit import QwenImageDiT, RMSNorm +import torch + +prefix = "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model" +model_path = [prefix + f"-0000{i}-of-00009.safetensors" for i in range(1, 10)] +inputs = { + "latents": torch.randn((1, 16, 128, 128), dtype=torch.bfloat16, device="cuda"), + "timestep": torch.zeros((1,), dtype=torch.bfloat16, device="cuda"), + "prompt_emb": torch.randn((1, 5, 3584), dtype=torch.bfloat16, device="cuda"), + "prompt_emb_mask": torch.ones((1, 5), dtype=torch.int64, device="cuda"), + "height": 1024, + "width": 1024, +} + +model = load_model( + QwenImageDiT, + model_path, + module_map={ + torch.nn.Linear: AutoWrappedLinear, + RMSNorm: AutoWrappedModule, + }, + vram_config={ + "offload_dtype": "disk", + "offload_device": "disk", + "onload_dtype": "disk", + "onload_device": "disk", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", + }, + vram_limit=0, +) +with torch.no_grad(): + output = model(**inputs) +``` + +Disk Offload is an extremely special VRAM management scheme. It only supports `.safetensors` format files, not binary files such as `.bin`, `.pth`, `.ckpt`, and does not support [state dict converter](../Developer_Guide/Integrating_Your_Model.md#step-2-model-file-format-conversion) with Tensor reshape. + +If there are situations where Disk Offload cannot run normally but non-Disk Offload can run normally, please submit an issue to us on GitHub. + +## Writing Default Configuration + +To make it easier for users to use the VRAM management function, we write the fine-grained VRAM management configuration in `diffsynth/configs/vram_management_module_maps.py`. The configuration information for the above model is: + +```python +"diffsynth.models.qwen_image_dit.QwenImageDiT": { + "diffsynth.models.qwen_image_dit.RMSNorm": "diffsynth.core.vram.layers.AutoWrappedModule", + "torch.nn.Linear": "diffsynth.core.vram.layers.AutoWrappedLinear", +} +``` \ No newline at end of file diff --git a/docs/en/Developer_Guide/Integrating_Quantization_Backend.md b/docs/en/Developer_Guide/Integrating_Quantization_Backend.md new file mode 100644 index 0000000000000000000000000000000000000000..997766d25af56378da5165306238559cd7864a39 --- /dev/null +++ b/docs/en/Developer_Guide/Integrating_Quantization_Backend.md @@ -0,0 +1,473 @@ +# Integrating a Quantization Backend + +The quantization framework of `DiffSynth-Studio` lives in `diffsynth.core.quant` and ships with bitsandbytes, torchao, and comfy-kitchen backends (see [Model Quantization](../Pipeline_Usage/Quantization.md)). If you have your own quantization algorithm, or want to plug in another quantization library, you only need to implement a `QuantBackend` — online quantization, saving/loading pre-quantized checkpoints, mixed quantization, VRAM management, and quantization + LoRA training are all reused as-is. + +This guide walks through the whole process with a toy backend: **INT9** — 9-bit symmetric weight-only quantization, genuinely stored at 9 bits per weight, with one fp32 scale per output channel. INT9 does not exist on any hardware; it is used here because it keeps the example short while still covering every interface you have to implement. For the full interface signatures and contracts, see the [`diffsynth.core.quant` API documentation](../API_Reference/core/quant.md#extension-interface-custom-backends). + +## Framework Structure + +The framework has three layers: + +- **`QuantizeConfig`**: the user-facing config and entry point, responsible for traversing the model, matching layers, and replacing `nn.Linear`. You never need to touch it. +- **`QuantBackend`**: the adapter layer, which only ever deals with a **single** `nn.Linear`: how to quantize it, how to build an empty shell, how to dequantize it, how to read and write its state dict. This is the part you implement. +- **The quantized Linear**: the module that actually holds the quantized weight and performs dequantization + matmul in `forward`. + +The quantized Linear must satisfy four contract clauses: + +- **(a)** It is a drop-in replacement for `nn.Linear`, with `forward(x)` doing dequantization + matmul internally. It must subclass `torch.nn.Linear`, otherwise LoRA injection and VRAM management cannot see it. +- **(b)** `.to(...)` only moves devices, never re-types the packed weight or quant state. VRAM management performs dtype conversions on the model; if a packed weight were cast to bf16, the quant state would be corrupted. +- **(c)** `state_dict()` and `load_state_dict(assign=True)` round-trip, via `flatten_state_dict` / `unflatten_state_dict` when necessary. +- **(d)** (Training only) `forward` is differentiable w.r.t. its input, so gradients can pass through frozen quantized layers to reach LoRA branches. + +## Step 1: Write the Quantized Linear + +INT9's storage layout needs a little thought: there is no native 9-bit dtype, and simply putting the codes into an int16 tensor would still spend 16 bits per weight — exactly as much as bf16, so the quantization would save nothing. Each weight is therefore split in two: the low 8 bits go into a uint8 `weight` buffer, and the 9th (most significant) bit forms a separate bit plane where 8 weights are packed into one byte in `weight_msb`, plus one fp32 `weight_scale` per output channel. That is 9 bits per weight, 56% of bf16. + +Two more details matter: + +- Delete `nn.Linear`'s original `weight` parameter and register a buffer under the same name, so checkpoint keys stay `layer_name.weight`. Disk offload and mixed-quantization key ownership rely on this. +- Guard the dtype of the packed tensors by overriding `_apply`, i.e. contract clause (b). Every conversion (`.to()`, `.half()`, `.float()`, ...) funnels through `_apply`, so a conversion that would change the dtype is downgraded to a device-only move. + +```python +from dataclasses import dataclass, field + +import torch +import torch.nn.functional as F + +from diffsynth.core.quant import BackendConfig, QuantBackend, register_quant_backend, register_quant_method + + +def pack_msb(bits): + """Pack a 0/1 bit plane into one bit per weight, 8 weights per byte.""" + flat = bits.reshape(-1) + padding = (-flat.numel()) % 8 + if padding: + flat = torch.cat([flat, flat.new_zeros(padding)]) + groups = flat.view(-1, 8) + packed = torch.zeros(groups.shape[0], dtype=torch.uint8, device=flat.device) + for index in range(8): + packed |= groups[:, index] << index + return packed + + +def unpack_msb(packed, numel): + bits = torch.stack([(packed >> index) & 1 for index in range(8)], dim=1) + return bits.reshape(-1)[:numel] + + +class Int9Linear(torch.nn.Linear): + """int9 weight: low 8 bits in the uint8 `weight`, the 9th bit packed into `weight_msb`, + plus one fp32 scale per output channel. 9 bits per weight, 56% of bf16.""" + + dtype_guarded_tensor_names = ("weight", "weight_msb", "weight_scale") + + def __init__(self, in_features, out_features, bias, compute_dtype): + with torch.device("meta"): + super().__init__(in_features, out_features, bias=bias, dtype=compute_dtype) + del self.weight + self.register_buffer("weight", torch.empty(out_features, in_features, dtype=torch.uint8, device="meta")) + self.register_buffer("weight_msb", torch.empty((in_features * out_features + 7) // 8, dtype=torch.uint8, device="meta")) + self.register_buffer("weight_scale", torch.empty(out_features, dtype=torch.float32, device="meta")) + if self.bias is not None: + self.bias.requires_grad_(False) + + def _apply(self, fn, recurse=True): + protected = {id(tensor) for name in self.dtype_guarded_tensor_names + if (tensor := getattr(self, name, None)) is not None} + + def guard(tensor): + converted = fn(tensor) + if id(tensor) in protected and converted.dtype != tensor.dtype: + return tensor.to(device=converted.device) + return converted + + return super()._apply(guard, recurse) + + def dequantize_weight(self, dtype): + msb = unpack_msb(self.weight_msb, self.weight.numel()).view_as(self.weight) + codes = self.weight.to(torch.int16) | (msb.to(torch.int16) << 8) + return ((codes - 256).float() * self.weight_scale.unsqueeze(1)).to(dtype) + + def forward(self, x): + bias = self.bias.to(x.dtype) if self.bias is not None else None + return F.linear(x, self.dequantize_weight(x.dtype), bias) +``` + +Dequantization in `forward` uses ordinary tensor ops, so gradients flow back to the input `x` through `F.linear` and contract clause (d) holds automatically. Unpacking here is written bit by bit with PyTorch ops purely for clarity; a real backend fuses unpacking into the matmul kernel instead of materializing an fp weight on every forward. + +There is an easy trap in `dequantize_weight`: the integer codes must be reconstructed in fp32. bf16 only carries 8 bits of significand, so integers above 256 are not representable exactly; casting the codes to bf16 before applying the scale rounds the 9th bit away and throws the accuracy gain out (measured: the advantage over int8 collapses from 2.25x to 1.15x). This applies to any format whose code width exceeds the significand of the compute dtype. + +## Step 2: Write the Backend + +Every backend method operates on a single `nn.Linear`: + +- `capabilities()`: declares what the backend supports; all four flags default to `False`. Saving quantized weights requires `is_serializable=True`, and quantization + LoRA training requires `is_differentiable=True`. +- `quantized_linear_classes()`: declares the Linear classes this backend produces; `is_quantized_linear` defaults to an `isinstance` check against them. +- `create_quantized_linear()`: online quantization, turning an fp `nn.Linear` into a quantized one. `compute_device` is where quantization runs and `model_device` is where the result is stored, so the two together stream the work layer by layer with only one layer on the accelerator at a time. +- `create_quantized_linear_shell()`: builds an empty shell, used for loading pre-quantized checkpoints and for disk offload. It is rebuilt on every offload cycle, so build it on the `meta` device and keep it cheap. +- `dequantize_to_linear()`: restores a plain `nn.Linear`, used by `mode="dequant_once"`. +- `flatten_state_dict` / `unflatten_state_dict`: conversion between the state dict and flat tensors. INT9's state dict already holds plain tensors, so the base class implementation is enough; only backends with composite tensors (tensor subclasses, nested quant state) such as bitsandbytes and torchao need to override them. + +Unimplemented methods raise a descriptive exception from the base class, so a backend that only supports some capabilities can implement just what it needs. `self.config` is the backend config instance injected by the framework — the `Int9WeightOnlyConfig` written in the next step. + +```python +@register_quant_backend("toy_int9") +class Int9QuantBackend(QuantBackend): + project_url = "https://example.com/toy-int9" + + def capabilities(self): + return {**super().capabilities(), "is_serializable": True, "is_differentiable": True} + + def quantized_linear_classes(self): + return (Int9Linear,) + + def create_quantized_linear(self, linear, compute_device=None, model_device=None): + weight = linear.weight.data + if compute_device is not None: + weight = weight.to(device=compute_device) + amax = weight.abs().amax(dim=1) if self.config.per_channel else weight.abs().amax().expand(weight.shape[0]) + scale = (amax.float() / 255).clamp(min=1e-8) + codes = (weight.float() / scale.unsqueeze(1)).round().clamp(-256, 255).to(torch.int16) + 256 + + quant_linear = Int9Linear(linear.in_features, linear.out_features, bias=linear.bias is not None, compute_dtype=weight.dtype) + quant_linear.weight = (codes & 0xFF).to(torch.uint8) + quant_linear.weight_msb = pack_msb((codes >> 8).to(torch.uint8)) + quant_linear.weight_scale = scale + if linear.bias is not None: + quant_linear.bias = torch.nn.Parameter(linear.bias.data.to(device=scale.device), requires_grad=False) + return quant_linear if model_device is None else quant_linear.to(device=model_device) + + def create_quantized_linear_shell(self, linear, compute_dtype): + return Int9Linear(linear.in_features, linear.out_features, bias=linear.bias is not None, compute_dtype=compute_dtype) + + def dequantize_to_linear(self, module, compute_dtype, compute_device=None, model_device=None): + if compute_device is not None: + module = module.to(device=compute_device) + fp_weight = module.dequantize_weight(compute_dtype) + linear = torch.nn.Linear(module.in_features, module.out_features, bias=module.bias is not None, device="meta") + linear.weight = torch.nn.Parameter(fp_weight, requires_grad=False) + if module.bias is not None: + linear.bias = torch.nn.Parameter(module.bias.data.to(dtype=compute_dtype, device=fp_weight.device), requires_grad=False) + return linear if model_device is None else linear.to(device=model_device) +``` + +## Step 3: Write the Backend Config + +The backend config subclasses `BackendConfig`: user-tunable parameters are ordinary dataclass fields, while values pinned by the method are declared with `field(init=False, default=...)`. `describe_quant_method` reports the two groups separately, and `from_kwargs` raises when a user passes unknown `backend_config_kwargs`. + +```python +@dataclass +class Int9WeightOnlyConfig(BackendConfig): + per_channel: bool = True # user-tunable: per-channel or per-tensor + bits: int = field(init=False, default=9) # pinned by the method, not overridable +``` + +## Step 4: Register the Quantization Method + +One backend can register several methods, distinguished by the fields pinned in its config (the bitsandbytes backend, for example, distinguishes nf4 from fp4 via `quant_type`). Method names should follow the `__wa` convention: + +```python +register_quant_method("toy_int9_w9a16", "toy_int9", Int9WeightOnlyConfig.from_kwargs, label="9bit, int9, weight-only (toy)") +``` + +There are two ways to register a backend and its methods: + +**Option 1: keep it in your own code (recommended, plug-and-play).** Put the code above in any module; as long as that module is imported before you construct `QuantizeConfig`, the method is already in `QUANT_METHODS` and can be used just like a built-in one, with no framework changes: + +```python +import my_project.toy_int9 # triggers register_quant_backend / register_quant_method + +from diffsynth.core.quant import QuantizeConfig + +quantize = QuantizeConfig(method="toy_int9_w9a16", backend_config_kwargs={"per_channel": True}) +``` + +**Option 2: ship it as a built-in backend (permanent).** Put the backend file under `diffsynth/core/quant/backends/` and register it in `_LAZY_BACKENDS` in `diffsynth/core/quant/backends/__init__.py`; the framework then imports it on demand and users do not need to import anything: + +```python +_LAZY_BACKENDS = { + "bitsandbytes": ".bitsandbytes", + "torchao": ".torchao", + "comfy_kitchen": ".comfy_kitchen", + "toy_int9": ".toy_int9", +} +``` + +If your quantization algorithm or library is generally useful, you are welcome to submit it as a PR following Option 2, so that more users can benefit from it. A backend that depends on a third-party library should check its dependencies in `validate_environment()` with an installation hint, and point `project_url` at the upstream project. + +## Step 5: Self-Check + +The framework provides two verification tools; run them right after integrating. `check_backend_contract` verifies that the backend declares its Linear classes, that both factory methods return instances of those classes, that all declared classes subclass `nn.Linear`, and that every checkpoint key the backend actually writes lives under the layer name (a missing scale would make disk offload silently load corrupted layers). Unsupported factory methods are skipped rather than counted as failures. + +```python +from diffsynth.core.quant import QUANT_BACKENDS, QUANT_METHODS, check_backend_contract, check_differentiable, describe_quant_method + +describe_quant_method("toy_int9_w9a16") + +spec = QUANT_METHODS["toy_int9_w9a16"] +check_backend_contract(QUANT_BACKENDS[spec.backend](spec.config_factory({})), compute_device="cpu") +``` + +The output is as follows; `describe_quant_method` also confirms that the split between user-tunable and pinned parameters is what you intended: + +``` +method: toy_int9_w9a16 +backend: toy_int9 +detail: 9bit, int9, weight-only (toy) +backend config: my_project.toy_int9.Int9WeightOnlyConfig +backend_config_kwargs (user-tunable): + per_channel = True +pinned by method (not overridable): + bits = 9 +check_backend_contract (toy_int9): + [PASS] quantized_linear_classes() is non-empty: ['Int9Linear'] + [PASS] Int9Linear subclasses torch.nn.Linear + [PASS] a plain nn.Linear is not reported as quantized + [PASS] create_quantized_linear_shell() returns a declared class, got Int9Linear + [PASS] the shell is recognized before load_state_dict (disk offload routing) + [PASS] create_quantized_linear() returns a declared class, got Int9Linear + [PASS] every stored key lives under the layer name; uncovered: [] + => OK +``` + +Next, check the numerical error, the real memory saving, the dtype guard of clause (b), and the differentiability of clause (d) on a small model: + +```python +import torch +from diffsynth.core.quant import QuantizeConfig, check_differentiable + + +class ToyModel(torch.nn.Module): + def __init__(self): + super().__init__() + self.fc1 = torch.nn.Linear(256, 512) + self.fc2 = torch.nn.Linear(512, 256, bias=False) + + def forward(self, x): + return self.fc2(torch.nn.functional.silu(self.fc1(x))) + + +def footprint(model): + return sum(t.numel() * t.element_size() for t in list(model.parameters()) + list(model.buffers())) + + +torch.manual_seed(0) +model = ToyModel().to(torch.bfloat16) +x = torch.randn(4, 256, dtype=torch.bfloat16) +reference = model(x) +fp_bytes = footprint(model) + +QuantizeConfig(method="toy_int9_w9a16").quantize_model(model, compute_device="cpu") +print("relative error:", ((model(x) - reference).norm() / reference.norm()).item()) +print(f"footprint: {fp_bytes} -> {footprint(model)} bytes ({footprint(model) / fp_bytes:.3f} of bf16)") + +model.to(torch.float32) # clause (b): packed dtypes must not change +print(model.fc1.weight.dtype, model.fc1.weight_msb.dtype, model.fc1.weight_scale.dtype, model.fc1.bias.dtype) + +check_differentiable(model.fc1) # clause (d) +``` + +``` +2 nn.Linear layers quantized (method: toy_int9_w9a16). +relative error: 0.004150390625 +footprint: 525312 -> 299008 bytes (0.569 of bf16) +torch.uint8 torch.uint8 torch.float32 torch.float32 +check_differentiable (Int9Linear): OK -- gradients pass through the module to its input +``` + +The measured footprint is 0.569 of bf16, slightly above 9/16 = 0.5625 because of the fp32 scales and the unquantized bias. If this ratio comes out close to 1, the packing format is not actually compressing the weights and you should revisit the storage layout in Step 1. + +### Inference on a Real Model: Z-Image + +Once the small-model checks pass, the backend is ready for real models — a custom backend is used exactly like a built-in method. Import the module that registers it, then pass the method to `ModelConfig(quantize=...)`: + +```python +import torch + +import my_project.toy_int9 # registers the toy_int9 backend and the toy_int9_w9a16 method +from diffsynth.core.quant import QuantizeConfig +from diffsynth.pipelines.z_image import ModelConfig, ZImagePipeline + +pipe = ZImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig( + model_id="Tongyi-MAI/Z-Image-Turbo", + origin_file_pattern="transformer/*.safetensors", + quantize=QuantizeConfig(method="toy_int9_w9a16"), + ), + ModelConfig(model_id="Tongyi-MAI/Z-Image-Turbo", origin_file_pattern="text_encoder/*.safetensors"), + ModelConfig(model_id="Tongyi-MAI/Z-Image-Turbo", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + tokenizer_config=ModelConfig(model_id="Tongyi-MAI/Z-Image-Turbo", origin_file_pattern="tokenizer/"), +) + +dit_bytes = sum(t.numel() * t.element_size() for t in list(pipe.dit.parameters()) + list(pipe.dit.buffers())) +print(f"dit weights: {dit_bytes / 1024 ** 3:.3f} GiB") + +prompt = "A delicate portrait of an underwater girl, blue dress flowing, hair gently drifting, light and shadow clear, surrounded by bubbles, serene expression, exquisite details, dreamlike and beautiful." +image = pipe(prompt=prompt, seed=42, rand_device="cuda") +image.save("z_image_toy_int9.jpg") +``` + +Measured DiT weight footprint on Z-Image Turbo (the 8-step Turbo generation works normally, with no visible quality difference from bf16): + +| | DiT weights | +| --- | --- | +| bf16 | 11.464 GiB | +| `toy_int9_w9a16` | 6.456 GiB (0.563x) | + +Note that peak memory and weight footprint are not the same thing: this toy materializes a temporary fp weight on every forward, so the peak saving is smaller than the storage saving. Measured on a synthetic model with 48 Linears, all weights resident on the GPU: + +| | Weights | Forward peak | +| --- | --- | --- | +| bf16 | 1.500 GiB | 1.527 GiB | +| `toy_int9_w9a16` | 0.845 GiB (0.563x) | 1.036 GiB (0.678x) | + +That temporary weight depends only on the **largest single layer** and does not grow with depth, so the deeper the model, the closer the peak saving gets to the weight ratio; a real backend fusing unpacking into the matmul kernel does not need it at all. To push the peak down further, stack [VRAM management](../Pipeline_Usage/VRAM_management.md) on top and move weights layer by layer (pass a `vram_config` to each `ModelConfig` above — measured peak drops to 2.1 GiB). + +### Accuracy: int9 vs int8 + +Does the extra bit actually buy accuracy? Quantize the same weight with the **identical** per-channel symmetric scheme at 8 and 9 bits, then compare the dequantized weight error and the layer output error. This is the general recipe for an accuracy regression on a new backend: hold everything else fixed and change only the bit width. + +```python +import torch +from my_project.toy_int9 import Int9QuantBackend, Int9WeightOnlyConfig + + +def quantize_int8(linear): + """The same per-channel symmetric scheme with one bit less: codes in [-128, 127].""" + weight = linear.weight.data + scale = (weight.abs().amax(dim=1).float() / 127).clamp(min=1e-8) + codes = (weight.float() / scale.unsqueeze(1)).round().clamp(-128, 127) + return (codes * scale.unsqueeze(1)).to(weight.dtype) + + +def relative_error(reference, value): + return ((value.float() - reference.float()).norm() / reference.float().norm()).item() + + +torch.manual_seed(0) +backend = Int9QuantBackend(Int9WeightOnlyConfig()) +linear = torch.nn.Linear(2048, 2048, bias=False).to(torch.bfloat16) +fp_weight = linear.weight.data.clone() + +int9_weight = backend.create_quantized_linear(linear).dequantize_weight(torch.bfloat16) +int8_weight = quantize_int8(linear) +error8, error9 = relative_error(fp_weight, int8_weight), relative_error(fp_weight, int9_weight) +print(f"weight error: int8 {error8:.6f} | int9 {error9:.6f} ({error8 / error9:.2f}x lower)") + +x = torch.randn(64, 2048, dtype=torch.bfloat16) +reference = torch.nn.functional.linear(x, fp_weight) +out8 = relative_error(reference, torch.nn.functional.linear(x, int8_weight)) +out9 = relative_error(reference, torch.nn.functional.linear(x, int9_weight)) +print(f"output error: int8 {out8:.6f} | int9 {out9:.6f} ({out8 / out9:.2f}x lower)") +``` + +``` +weight error: int8 0.004353 | int9 0.001937 (2.25x lower) +output error: int8 0.004947 | int9 0.002816 (1.76x lower) +``` + +This matches the theory: going from 255 to 511 levels halves the quantization step, and for uniform quantization the error is proportional to the step, so the weight error drops to roughly half (2.25x measured). The end-to-end layer output gain is smaller (1.76x) because the activations themselves are bf16 and the matmul's own rounding noise eats part of the benefit — a reminder to evaluate bit-width gains at the actual compute precision, not only on the weights. + +Finally, verify clause (c): save the quantized weights, load them back into shells, and confirm both produce identical outputs. + +```python +from safetensors.torch import load_file, save_file + +save_config = QuantizeConfig(method="toy_int9_w9a16") +tensors, metadata = save_config.flatten_state_dict(model.state_dict()) +save_file(tensors, "toy_int9.safetensors", metadata=metadata) + +loaded = ToyModel().to(torch.bfloat16) +load_config = QuantizeConfig(method="toy_int9_w9a16", load_prequantized=True) +load_config.prepare_for_prequantized_load(loaded, compute_dtype=torch.bfloat16) +loaded.load_state_dict(load_config.unflatten_state_dict(load_file("toy_int9.safetensors"), metadata), assign=True) +print("reload match:", torch.equal(loaded(x.float()), model(x.float()))) +``` + +``` +reload match: True +``` + +### Combining with Disk Offload + +Disk offload, part of [VRAM management](../Pipeline_Usage/VRAM_management.md), places the strictest demands on a quantization backend: the resident model keeps only `meta` shells, and each layer's tensors are streamed back from disk at forward time and dropped right after. It relies on two things: + +- It only supports **pre-quantized checkpoints**, so `load_prequantized=True` is required and `prepare_for_prequantized_load` must first swap the target layers for shells. +- Which tensors a layer needs is resolved by a prefix scan over the checkpoint keys using the layer's dotted name, and the result is loaded with a strict `load_state_dict(assign=True)`. So the only requirement on a backend is that every tensor lives under `{layer_name}.` — flat siblings like `layer.weight_scale` and nested quant state like bnb's both work. A missing or extra key raises instead of silently loading a corrupted layer. + +```python +import torch +from safetensors.torch import save_file + +from diffsynth.core.loader.model import load_metadata_from_safetensors +from diffsynth.core.quant import QuantizeConfig +from diffsynth.core.vram.disk_map import DiskMap +from diffsynth.core.vram.layers import AutoWrappedLinear, enable_vram_management_recursively + +resident = ToyModel().to(torch.bfloat16) +x = torch.randn(2, 256, dtype=torch.bfloat16, device="cuda") + +save_config = QuantizeConfig(method="toy_int9_w9a16") +save_config.quantize_model(resident, compute_device="cuda") +resident = resident.to("cuda") +reference = resident(x) + +tensors, metadata = save_config.flatten_state_dict(resident.state_dict()) +save_file({key: value.cpu() for key, value in tensors.items()}, "toy_int9.safetensors", metadata=metadata) + +fresh = ToyModel().to(torch.bfloat16) +load_config = QuantizeConfig(method="toy_int9_w9a16", load_prequantized=True) +load_config.prepare_for_prequantized_load(fresh, compute_dtype=torch.bfloat16) +enable_vram_management_recursively( + fresh, + module_map={torch.nn.Linear: AutoWrappedLinear}, + vram_config={ + "offload_dtype": "disk", "offload_device": "disk", + "onload_dtype": "disk", "onload_device": "disk", + "preparing_dtype": torch.bfloat16, "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, "computation_device": "cuda", + }, + disk_map=DiskMap(["toy_int9.safetensors"], "cuda", torch_dtype=None), + quantize=load_config, + metadata=load_metadata_from_safetensors("toy_int9.safetensors"), +) + +for name, module in fresh.named_modules(): + if getattr(module, "disk_offload", False): + print(f"{name}: {module._disk_required_keys()}") + +resident_bytes = sum(t.numel() * t.element_size() for t in list(resident.parameters()) + list(resident.buffers())) +offloaded_bytes = sum(t.numel() * t.element_size() for t in list(fresh.parameters()) + list(fresh.buffers()) if not t.is_meta) +print(f"resident {resident_bytes} bytes -> in memory after disk offload {offloaded_bytes} bytes") +print("output matches:", torch.equal(fresh(x), reference), "| repeatable:", torch.equal(fresh(x), reference)) +``` + +Measured on the same `ToyModel` (`torch_dtype=None` on `DiskMap` is essential — it guarantees the packed tensors are not re-typed while being read): + +``` +2 nn.Linear layers replaced for loading the pre-quantized checkpoint (method: toy_int9_w9a16). +fc1: ['fc1.bias', 'fc1.weight', 'fc1.weight_msb', 'fc1.weight_scale'] +fc2: ['fc2.weight', 'fc2.weight_msb', 'fc2.weight_scale'] +resident 299008 bytes -> in memory after disk offload 0 bytes +output matches: True | repeatable: True +``` + +Each layer's `weight` / `weight_msb` / `weight_scale` / `bias` is correctly attributed to that layer, the resident footprint drops to 0 bytes (everything is a `meta` shell), the output is bit-identical to the resident quantized model, and repeated forwards stay stable — so rebuilding shells and streaming from disk has no side effects. + +On a real model, use the standard workflows from [Model Quantization](../Pipeline_Usage/Quantization.md) for end-to-end validation: pass `QuantizeConfig(method="toy_int9_w9a16")` to `ModelConfig(quantize=...)` for online-quantized inference, save the quantized weights with `save_quantized_model` and load them back after registering the hash, and inject LoRA into the quantized model for training. + +## Integration Checklist + +- The packing format really shrinks the weights: the measured footprint ratio should be close to the theoretical bit-width ratio, not close to 1. +- The accuracy gain is verified: compared against the same scheme with one bit less, the error really goes down; otherwise precision is being lost somewhere in the dequantization path. +- The quantized Linear subclasses `torch.nn.Linear`, and all `state_dict` keys live under the layer name. +- `_apply` guards the dtype of every packed tensor and quant state. +- `capabilities()` matches reality: declaring `is_serializable` requires a round-tripping state dict, and declaring `is_differentiable` requires passing `check_differentiable`. +- `create_quantized_linear` honors `compute_device` / `model_device`, so layer-by-layer streaming quantization works. +- Disk offload works: the shell is built on `meta` and cheap to rebuild, every stored tensor lives under the layer's dotted name, and `unflatten_state_dict` tolerates being called with a single layer's subdict plus whole-file metadata. +- When depending on a third-party library, `validate_environment()` gives a clear installation hint and `project_url` points at the upstream project. +- `check_backend_contract` passes completely. diff --git a/docs/en/Developer_Guide/Integrating_Your_Model.md b/docs/en/Developer_Guide/Integrating_Your_Model.md new file mode 100644 index 0000000000000000000000000000000000000000..817c875621cbbed374a71038c26f068d228728eb --- /dev/null +++ b/docs/en/Developer_Guide/Integrating_Your_Model.md @@ -0,0 +1,186 @@ +# Integrating Model Architecture + +This document introduces how to integrate models into the `DiffSynth-Studio` framework for use by modules such as `Pipeline`. + +## Step 1: Integrate Model Architecture Code + +All model architecture implementations in `DiffSynth-Studio` are unified in `diffsynth/models`. Each `.py` code file implements a model architecture, and all models are loaded through `ModelPool` in `diffsynth/models/model_loader.py`. When integrating new model architectures, please create a new `.py` file under this path. + +```shell +diffsynth/models/ +├── general_modules.py +├── model_loader.py +├── qwen_image_controlnet.py +├── qwen_image_dit.py +├── qwen_image_text_encoder.py +├── qwen_image_vae.py +└── ... +``` + +In most cases, we recommend integrating models in native `PyTorch` code form, with the model architecture class directly inheriting from `torch.nn.Module`, for example: + +```python +import torch + +class NewDiffSynthModel(torch.nn.Module): + def __init__(self, dim=1024): + super().__init__() + self.linear = torch.nn.Linear(dim, dim) + self.activation = torch.nn.Sigmoid() + + def forward(self, x): + x = self.linear(x) + x = self.activation(x) + return x +``` + +If the model architecture implementation contains additional dependencies, we strongly recommend removing them, otherwise this will cause heavy package dependency issues. In our existing models, Qwen-Image's Blockwise ControlNet is integrated in this way. The code is lightweight, please refer to `diffsynth/models/qwen_image_controlnet.py`. + +If the model has been integrated by Huggingface Library ([`transformers`](https://huggingface.co/docs/transformers/main/index), [`diffusers`](https://huggingface.co/docs/diffusers/main/index), etc.), we can integrate the model in a simpler way: + +
+Integrating Huggingface Library Style Model Architecture Code + +The loading method for these models in Huggingface Library is: + +```python +from transformers import XXX_Model + +model = XXX_Model.from_pretrained("path_to_your_model") +``` + +`DiffSynth-Studio` does not support loading models through `from_pretrained` because this conflicts with VRAM management and other functions. Please rewrite the model architecture in the following format: + +```python +import torch + +class DiffSynth_XXX_Model(torch.nn.Module): + def __init__(self): + super().__init__() + from transformers import XXX_Config, XXX_Model + config = XXX_Config(**{ + "architectures": ["XXX_Model"], + "other_configs": "Please copy and paste the other configs here.", + }) + self.model = XXX_Model(config) + + def forward(self, x): + outputs = self.model(x) + return outputs +``` + +Where `XXX_Config` is the Config class corresponding to the model. For example, the Config class for `Qwen2_5_VLModel` is `Qwen2_5_VLConfig`, which can be found by consulting its source code. The content inside Config can usually be found in the `config.json` file in the model library. `DiffSynth-Studio` will not read the `config.json` file, so the content needs to be copied and pasted into the code. + +In rare cases, version updates of `transformers` and `diffusers` may cause some models to be unable to import. Therefore, if possible, we still recommend using the model integration method in Step 1.1. + +In our existing models, Qwen-Image's Text Encoder is integrated in this way. The code is lightweight, please refer to `diffsynth/models/qwen_image_text_encoder.py`. + +
+ +## Step 2: Model File Format Conversion + +Due to the variety of model file formats provided by developers in the open-source community, we sometimes need to convert model file formats to form correctly formatted [state dict](https://docs.pytorch.org/tutorials/recipes/recipes/what_is_state_dict.html). This is common in the following situations: + +* Model files built by different code libraries, for example [Wan-AI/Wan2.1-T2V-1.3B](https://www.modelscope.cn/models/Wan-AI/Wan2.1-T2V-1.3B) and [Wan-AI/Wan2.1-T2V-1.3B-Diffusers](https://www.modelscope.cn/models/Wan-AI/Wan2.1-T2V-1.3B-Diffusers). +* Models modified during integration, for example, the Text Encoder of [Qwen/Qwen-Image](https://www.modelscope.cn/models/Qwen/Qwen-Image) adds a `model.` prefix in `diffsynth/models/qwen_image_text_encoder.py`. +* Model files containing multiple models, for example, the VACE Adapter and base DiT model of [Wan-AI/Wan2.1-VACE-14B](https://www.modelscope.cn/models/Wan-AI/Wan2.1-VACE-14B) are mixed and stored in the same set of model files. + +In our development philosophy, we hope to respect the wishes of model authors as much as possible. If we repackage the model files, for example [Comfy-Org/Qwen-Image_ComfyUI](https://www.modelscope.cn/models/Comfy-Org/Qwen-Image_ComfyUI), although we can call the model more conveniently, traffic (model page views and downloads, etc.) will be directed elsewhere, and the original author of the model will also lose the power to delete the model. Therefore, we have added the `diffsynth/utils/state_dict_converters` module to the framework for file format conversion during model loading. + +This part of logic is very simple. Taking Qwen-Image's Text Encoder as an example, only 10 lines of code are needed: + +```python +def QwenImageTextEncoderStateDictConverter(state_dict): + state_dict_ = {} + for k in state_dict: + v = state_dict[k] + if k.startswith("visual."): + k = "model." + k + elif k.startswith("model."): + k = k.replace("model.", "model.language_model.") + state_dict_[k] = v + return state_dict_ +``` + +## Step 3: Writing Model Config + +Model Config is located in `diffsynth/configs/model_configs.py`, used to identify model types and load them. The following fields need to be filled in: + +* `model_hash`: Model file hash value, which can be obtained through the `hash_model_file` function. This hash value is only related to the keys and tensor shapes in the model file's state dict, and is unrelated to other information in the file. +* `model_name`: Model name, used for `Pipeline` to identify the required model. If different structured models play the same role in `Pipeline`, the same `model_name` can be used. When integrating new models, just ensure that `model_name` is different from other existing functional models. The corresponding model is fetched through `model_name` in the `Pipeline`'s `from_pretrained`. +* `model_class`: Model architecture import path, pointing to the model architecture class implemented in Step 1, for example `diffsynth.models.qwen_image_text_encoder.QwenImageTextEncoder`. +* `state_dict_converter`: Optional parameter. If model file format conversion is needed, the import path of the model conversion logic needs to be filled in, for example `diffsynth.utils.state_dict_converters.qwen_image_text_encoder.QwenImageTextEncoderStateDictConverter`. +* `extra_kwargs`: Optional parameter. If additional parameters need to be passed when initializing the model, these parameters need to be filled in. For example, models [DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Canny](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Canny) and [DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Inpaint](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Inpaint) both adopt the `QwenImageBlockWiseControlNet` structure in `diffsynth/models/qwen_image_controlnet.py`, but the latter also needs additional configuration `additional_in_dim=4`. Therefore, this configuration information needs to be filled in the `extra_kwargs` field. + +We provide a piece of code to quickly understand how models are loaded through this configuration information: + +```python +from diffsynth.core import hash_model_file, load_state_dict, skip_model_initialization +from diffsynth.models.qwen_image_text_encoder import QwenImageTextEncoder +from diffsynth.utils.state_dict_converters.qwen_image_text_encoder import QwenImageTextEncoderStateDictConverter +import torch + +model_hash = "8004730443f55db63092006dd9f7110e" +model_name = "qwen_image_text_encoder" +model_class = QwenImageTextEncoder +state_dict_converter = QwenImageTextEncoderStateDictConverter +extra_kwargs = {} + +model_path = [ + "models/Qwen/Qwen-Image/text_encoder/model-00001-of-00004.safetensors", + "models/Qwen/Qwen-Image/text_encoder/model-00002-of-00004.safetensors", + "models/Qwen/Qwen-Image/text_encoder/model-00003-of-00004.safetensors", + "models/Qwen/Qwen-Image/text_encoder/model-00004-of-00004.safetensors", +] +if hash_model_file(model_path) == model_hash: + with skip_model_initialization(): + model = model_class(**extra_kwargs) + state_dict = load_state_dict(model_path, torch_dtype=torch.bfloat16, device="cuda") + state_dict = state_dict_converter(state_dict) + model.load_state_dict(state_dict, assign=True) + print("Done!") +``` + +> Q: The logic of the above code looks very simple, why is this part of code in `DiffSynth-Studio` extremely complex? +> +> A: Because we provide aggressive VRAM management functions that are coupled with the model loading logic, this leads to the complexity of the framework structure. We have tried our best to simplify the interface exposed to developers. + +The `model_hash` in `diffsynth/configs/model_configs.py` is not uniquely existing. Multiple models may exist in the same model file. For this situation, please use multiple model Configs to load each model separately, and write the corresponding `state_dict_converter` to separate the parameters required by each model. + +## Step 4: Verifying Whether the Model Can Be Recognized and Loaded + +After model integration, the following code can be used to verify whether the model can be correctly recognized and loaded. The following code will attempt to load the model into memory: + +```python +from diffsynth.models.model_loader import ModelPool + +model_pool = ModelPool() +model_pool.auto_load_model( + [ + "models/Qwen/Qwen-Image/text_encoder/model-00001-of-00004.safetensors", + "models/Qwen/Qwen-Image/text_encoder/model-00002-of-00004.safetensors", + "models/Qwen/Qwen-Image/text_encoder/model-00003-of-00004.safetensors", + "models/Qwen/Qwen-Image/text_encoder/model-00004-of-00004.safetensors", + ], +) +``` + +If the model can be recognized and loaded, you will see the following output: + +``` +Loading models from: [ + "models/Qwen/Qwen-Image/text_encoder/model-00001-of-00004.safetensors", + "models/Qwen/Qwen-Image/text_encoder/model-00002-of-00004.safetensors", + "models/Qwen/Qwen-Image/text_encoder/model-00003-of-00004.safetensors", + "models/Qwen/Qwen-Image/text_encoder/model-00004-of-00004.safetensors" +] +Loaded model: { + "model_name": "qwen_image_text_encoder", + "model_class": "diffsynth.models.qwen_image_text_encoder.QwenImageTextEncoder", + "extra_kwargs": null +} +``` + +## Step 5: Writing Model VRAM Management Scheme + +`DiffSynth-Studio` supports complex VRAM management. See [Enabling VRAM Management](../Developer_Guide/Enabling_VRAM_management.md) for details. \ No newline at end of file diff --git a/docs/en/Developer_Guide/Training_Diffusion_Models.md b/docs/en/Developer_Guide/Training_Diffusion_Models.md new file mode 100644 index 0000000000000000000000000000000000000000..6f2aefebf7f245eab075a7646f1dcbcc8e919bb1 --- /dev/null +++ b/docs/en/Developer_Guide/Training_Diffusion_Models.md @@ -0,0 +1,66 @@ +# Integrating Model Training + +After [integrating models](../Developer_Guide/Integrating_Your_Model.md) and [implementing Pipeline](../Developer_Guide/Building_a_Pipeline.md), the next step is to integrate model training functionality. + +## Training-Inference Consistent Pipeline Modification + +To ensure strict consistency between training and inference processes, we will use most of the inference code during training, but still need to make minor modifications. + +First, add extra logic during inference to switch the image-to-image/video-to-video logic based on the `scheduler` state. Taking Qwen-Image as an example: + +```python +class QwenImageUnit_InputImageEmbedder(PipelineUnit): + def __init__(self): + super().__init__( + input_params=("input_image", "noise", "tiled", "tile_size", "tile_stride"), + output_params=("latents", "input_latents"), + onload_model_names=("vae",) + ) + + def process(self, pipe: QwenImagePipeline, input_image, noise, tiled, tile_size, tile_stride): + if input_image is None: + return {"latents": noise, "input_latents": None} + pipe.load_models_to_device(['vae']) + image = pipe.preprocess_image(input_image).to(device=pipe.device, dtype=pipe.torch_dtype) + input_latents = pipe.vae.encode(image, tiled=tiled, tile_size=tile_size, tile_stride=tile_stride) + if pipe.scheduler.training: + return {"latents": noise, "input_latents": input_latents} + else: + latents = pipe.scheduler.add_noise(input_latents, noise, timestep=pipe.scheduler.timesteps[0]) + return {"latents": latents, "input_latents": input_latents} +``` + +Then, enable Gradient Checkpointing in `model_fn`, which will significantly reduce the VRAM required for training at the cost of computational speed. This is not mandatory, but we strongly recommend doing so. + +Taking Qwen-Image as an example, before modification: + +```python +text, image = block( + image=image, + text=text, + temb=conditioning, + image_rotary_emb=image_rotary_emb, + attention_mask=attention_mask, +) +``` + +After modification: + +```python +from ..core import gradient_checkpoint_forward + +text, image = gradient_checkpoint_forward( + block, + use_gradient_checkpointing, + use_gradient_checkpointing_offload, + image=image, + text=text, + temb=conditioning, + image_rotary_emb=image_rotary_emb, + attention_mask=attention_mask, +) +``` + +## Writing Training Scripts + +`DiffSynth-Studio` does not strictly encapsulate the training framework, but exposes the script content to developers. This approach makes it more convenient to modify training scripts to implement additional functions. Developers can refer to existing training scripts, such as `examples/qwen_image/model_training/train.py`, for modification to adapt to new model training. \ No newline at end of file diff --git a/docs/en/Diffusion_Templates/Introducing_Diffusion_Templates.md b/docs/en/Diffusion_Templates/Introducing_Diffusion_Templates.md new file mode 100644 index 0000000000000000000000000000000000000000..f106515f35068fe344c0bd20574d879f40909924 --- /dev/null +++ b/docs/en/Diffusion_Templates/Introducing_Diffusion_Templates.md @@ -0,0 +1,76 @@ +# Diffusion Templates + +Diffusion Templates is a controllable generation plugin framework for Diffusion models in DiffSynth-Studio, providing additional controllable generation capabilities for base models. + +* Open-source code: [DiffSynth-Studio](https://github.com/modelscope/DiffSynth-Studio) +* Technical report: [arXiv](https://arxiv.org/abs/2604.24351) +* Project page: [GitHub](https://modelscope.github.io/diffusion-templates-web/) +* Documentation reference + * Introduction to Diffusion Templates: [English Version](https://diffsynth-studio-doc.readthedocs.io/en/latest/Diffusion_Templates/Introducing_Diffusion_Templates.html)、[中文版](https://diffsynth-studio-doc.readthedocs.io/zh-cn/latest/Diffusion_Templates/Introducing_Diffusion_Templates.html) + * Detailed Architecture of Diffusion Templates: [English Version](https://diffsynth-studio-doc.readthedocs.io/en/latest/Diffusion_Templates/Understanding_Diffusion_Templates.html)、[中文版](https://diffsynth-studio-doc.readthedocs.io/zh-cn/latest/Diffusion_Templates/Understanding_Diffusion_Templates.html) + * Template Model Inference: [English Version](https://diffsynth-studio-doc.readthedocs.io/en/latest/Diffusion_Templates/Template_Model_Inference.html)、[中文版](https://diffsynth-studio-doc.readthedocs.io/zh-cn/latest/Diffusion_Templates/Template_Model_Inference.html) + * Template Model Training: [English Version](https://diffsynth-studio-doc.readthedocs.io/en/latest/Diffusion_Templates/Template_Model_Training.html)、[中文版](https://diffsynth-studio-doc.readthedocs.io/zh-cn/latest/Diffusion_Templates/Template_Model_Training.html) +* Online demo: [ModelScope](https://modelscope.cn/studios/DiffSynth-Studio/Diffusion-Templates) +* Model collection: [ModelScope](https://modelscope.cn/collections/DiffSynth-Studio/KleinBase4B-Templates)、[ModelScope International](https://modelscope.ai/collections/DiffSynth-Studio/KleinBase4B-Templates)、[HuggingFace](https://huggingface.co/collections/DiffSynth-Studio/kleinbase4b-templates) + +|Model Name|ModelScope|ModelScope International|HuggingFace|Inference Code|Low VRAM Inference Code|Training Code|Training Validation Code| +|-|-|-|-|-|-|-|-| +|Structure Control|[link](https://modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-ControlNet)|[link](https://modelscope.ai/models/DiffSynth-Studio/Template-KleinBase4B-ControlNet)|[link](https://huggingface.co/DiffSynth-Studio/Template-KleinBase4B-ControlNet)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-ControlNet.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-ControlNet.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-ControlNet.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-ControlNet.py)| +|Brightness Adjustment|[link](https://modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Brightness)|[link](https://modelscope.ai/models/DiffSynth-Studio/Template-KleinBase4B-Brightness)|[link](https://huggingface.co/DiffSynth-Studio/Template-KleinBase4B-Brightness)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-Brightness.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-Brightness.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-Brightness.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-Brightness.py)| +|Color Adjustment|[link](https://modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-SoftRGB)|[link](https://modelscope.ai/models/DiffSynth-Studio/Template-KleinBase4B-SoftRGB)|[link](https://huggingface.co/DiffSynth-Studio/Template-KleinBase4B-SoftRGB)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-SoftRGB.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-SoftRGB.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-SoftRGB.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-SoftRGB.py)| +|Image Editing|[link](https://modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Edit)|[link](https://modelscope.ai/models/DiffSynth-Studio/Template-KleinBase4B-Edit)|[link](https://huggingface.co/DiffSynth-Studio/Template-KleinBase4B-Edit)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-Edit.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-Edit.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-Edit.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-Edit.py)| +|Super-Resolution|[link](https://modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Upscaler)|[link](https://modelscope.ai/models/DiffSynth-Studio/Template-KleinBase4B-Upscaler)|[link](https://huggingface.co/DiffSynth-Studio/Template-KleinBase4B-Upscaler)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-Upscaler.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-Upscaler.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-Upscaler.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-Upscaler.py)| +|Sharpness Enhancement|[link](https://modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Sharpness)|[link](https://modelscope.ai/models/DiffSynth-Studio/Template-KleinBase4B-Sharpness)|[link](https://huggingface.co/DiffSynth-Studio/Template-KleinBase4B-Sharpness)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-Sharpness.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-Sharpness.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-Sharpness.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-Sharpness.py)| +|Aesthetic Alignment|[link](https://modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Aesthetic)|[link](https://modelscope.ai/models/DiffSynth-Studio/Template-KleinBase4B-Aesthetic)|[link](https://huggingface.co/DiffSynth-Studio/Template-KleinBase4B-Aesthetic)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-Aesthetic.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-Aesthetic.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-Aesthetic.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-Aesthetic.py)| +|Local Redrawing|[link](https://modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Inpaint)|[link](https://modelscope.ai/models/DiffSynth-Studio/Template-KleinBase4B-Inpaint)|[link](https://huggingface.co/DiffSynth-Studio/Template-KleinBase4B-Inpaint)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-Inpaint.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-Inpaint.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-Inpaint.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-Inpaint.py)| +|Content Reference|[link](https://modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-ContentRef)|[link](https://modelscope.ai/models/DiffSynth-Studio/Template-KleinBase4B-ContentRef)|[link](https://huggingface.co/DiffSynth-Studio/Template-KleinBase4B-ContentRef)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-ContentRef.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-ContentRef.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-ContentRef.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-ContentRef.py)| +|Age Control|[link](https://modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Age)|[link](https://modelscope.ai/models/DiffSynth-Studio/Template-KleinBase4B-Age)|[link](https://huggingface.co/DiffSynth-Studio/Template-KleinBase4B-Age)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-Age.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-Age.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-Age.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-Age.py)| +|Panda Meme (Easter Egg Model)|[link](https://modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-PandaMeme)|[link](https://modelscope.ai/models/DiffSynth-Studio/Template-KleinBase4B-PandaMeme)|[link](https://huggingface.co/DiffSynth-Studio/Template-KleinBase4B-PandaMeme)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-PandaMeme.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-PandaMeme.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-PandaMeme.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-PandaMeme.py)| + +* Dataset: [ModelScope](https://modelscope.cn/collections/DiffSynth-Studio/ImagePulseV2)、[ModelScope International](https://modelscope.cn/collections/DiffSynth-Studio/ImagePulseV2)、[HuggingFace](https://huggingface.co/collections/DiffSynth-Studio/imagepulsev2) + +|Dataset Name|ModelScope|ModelScope International|HuggingFace| +|-|-|-|-| +|Text-to-Image|[link](https://modelscope.cn/datasets/DiffSynth-Studio/ImagePulseV2-TextImage)|[link](https://modelscope.ai/datasets/DiffSynth-Studio/ImagePulseV2-TextImage)|[link](https://huggingface.co/datasets/DiffSynth-Studio/ImagePulseV2-TextImage)| +|Local Redrawing|[link](https://modelscope.cn/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Inpaint)|[link](https://modelscope.ai/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Inpaint)|[link](https://huggingface.co/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Inpaint)| +|Background Replacement|[link](https://modelscope.cn/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Background)|[link](https://modelscope.ai/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Background)|[link](https://huggingface.co/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Background)| +|Clothing Replacement|[link](https://modelscope.cn/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Clothes)|[link](https://modelscope.ai/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Clothes)|[link](https://huggingface.co/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Clothes)| +|Pose Adjustment|[link](https://modelscope.cn/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Pose)|[link](https://modelscope.ai/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Pose)|[link](https://huggingface.co/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Pose)| +|Foreground Modification|[link](https://modelscope.cn/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Change)|[link](https://modelscope.ai/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Change)|[link](https://huggingface.co/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Change)| +|Local Addition/Removal|[link](https://modelscope.cn/datasets/DiffSynth-Studio/ImagePulseV2-Edit-AddRemove)|[link](https://modelscope.ai/datasets/DiffSynth-Studio/ImagePulseV2-Edit-AddRemove)|[link](https://huggingface.co/datasets/DiffSynth-Studio/ImagePulseV2-Edit-AddRemove)| +|Super-Resolution|[link](https://modelscope.cn/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Upscale)|[link](https://modelscope.ai/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Upscale)|[link](https://huggingface.co/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Upscale)| +|Portrait Generation|[link](https://modelscope.cn/datasets/DiffSynth-Studio/ImagePulseV2-TextImage-Human)|[link](https://modelscope.ai/datasets/DiffSynth-Studio/ImagePulseV2-TextImage-Human)|[link](https://huggingface.co/datasets/DiffSynth-Studio/ImagePulseV2-TextImage-Human)| +|Random Cropping|[link](https://modelscope.cn/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Crop)|[link](https://modelscope.ai/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Crop)|[link](https://huggingface.co/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Crop)| +|Lighting Adjustment|[link](https://modelscope.cn/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Light)|[link](https://modelscope.ai/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Light)|[link](https://huggingface.co/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Light)| +|Scene Structure|[link](https://modelscope.cn/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Structure)|[link](https://modelscope.ai/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Structure)|[link](https://huggingface.co/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Structure)| +|Facial Expression Editing|[link](https://modelscope.cn/datasets/DiffSynth-Studio/ImagePulseV2-Edit-HumanFace)|[link](https://modelscope.ai/datasets/DiffSynth-Studio/ImagePulseV2-Edit-HumanFace)|[link](https://huggingface.co/datasets/DiffSynth-Studio/ImagePulseV2-Edit-HumanFace)| +|View Angle Adjustment|[link](https://modelscope.cn/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Angle)|[link](https://modelscope.ai/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Angle)|[link](https://huggingface.co/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Angle)| +|Style Transfer|[link](https://modelscope.cn/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Style)|[link](https://modelscope.ai/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Style)|[link](https://huggingface.co/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Style)| +|Multi-Resolution|[link](https://modelscope.cn/datasets/DiffSynth-Studio/ImagePulseV2-TextImage-MultiResolution)|[link](https://modelscope.ai/datasets/DiffSynth-Studio/ImagePulseV2-TextImage-MultiResolution)|[link](https://huggingface.co/datasets/DiffSynth-Studio/ImagePulseV2-TextImage-MultiResolution)| +|Multi-Image Merge|[link](https://modelscope.cn/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Merge)|[link](https://modelscope.ai/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Merge)|[link](https://huggingface.co/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Merge)| + +## Model Performance Overview + +* Super-Resolution + Sharpness Enhancement: Generate ultra-high-resolution images + +|Low Resolution Input|High Resolution Output| +|-|-| +|![](https://github.com/user-attachments/assets/53f378f7-0dc5-44cd-bc39-032d0b1d0208)|![](https://github.com/user-attachments/assets/135bab89-6d76-4d5c-ae5e-44b2826b5c50)| + +* Structure Control + Aesthetic Alignment + Sharpness Enhancement: Fully-equipped ControlNet + +|Structure Control Image|Output Image| +|-|-| +|![](https://github.com/user-attachments/assets/1feeb13f-f8a7-40df-958c-90463ef5eaf4)|![](https://github.com/user-attachments/assets/ea406387-9695-4efd-b0cb-980686474ab7)| + +* Structure Control + Image Editing + Color Adjustment: Artistic Style Creation at Will + +|Structure Control Image|Editing Input Image|Output Image| +|-|-|-| +|![](https://github.com/user-attachments/assets/1feeb13f-f8a7-40df-958c-90463ef5eaf4)|![](https://github.com/user-attachments/assets/4866e14b-0ac7-4099-aab5-86048a645cb7)|![](https://github.com/user-attachments/assets/0fd613a5-885b-44b0-83db-9dd08859cc24)| + +* Brightness Control + Image Editing + Local Redrawing: Cross-dimensional Elements in Images + +|Reference Image|Redrawing Area|Output Image| +|-|-|-| +|![](https://github.com/user-attachments/assets/4866e14b-0ac7-4099-aab5-86048a645cb7)|![](https://github.com/user-attachments/assets/52148a91-7c03-4042-944a-4c3182abe889)|![](https://github.com/user-attachments/assets/3e4cbc26-f6b5-4cc7-a017-d0e0165703ca)| diff --git a/docs/en/Diffusion_Templates/Template_Model_Inference.md b/docs/en/Diffusion_Templates/Template_Model_Inference.md new file mode 100644 index 0000000000000000000000000000000000000000..bcadff5342163e38d40a5f76a52c0143d83712f3 --- /dev/null +++ b/docs/en/Diffusion_Templates/Template_Model_Inference.md @@ -0,0 +1,333 @@ +# Template Model Inference + +## Enabling Template Models on Base Model Pipelines + +Using the base model [black-forest-labs/FLUX.2-klein-base-4B](https://modelscope.cn/models/black-forest-labs/FLUX.2-klein-base-4B) as an example, when generating images using only the base model: + +```python +from diffsynth.diffusion.template import TemplatePipeline +from diffsynth.pipelines.flux2_image import Flux2ImagePipeline, ModelConfig +import torch + +# Load base model +pipe = Flux2ImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="black-forest-labs/FLUX.2-klein-4B", origin_file_pattern="text_encoder/*.safetensors"), + ModelConfig(model_id="black-forest-labs/FLUX.2-klein-base-4B", origin_file_pattern="transformer/*.safetensors"), + ModelConfig(model_id="black-forest-labs/FLUX.2-klein-4B", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + tokenizer_config=ModelConfig(model_id="black-forest-labs/FLUX.2-klein-4B", origin_file_pattern="tokenizer/"), +) +# Generate an image +image = pipe( + prompt="a cat", + seed=0, cfg_scale=4, + height=1024, width=1024, +) +image.save("image.png") +``` + +The Template model [DiffSynth-Studio/Template-KleinBase4B-Brightness](https://modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Brightness) can control image brightness during generation. Through the `TemplatePipeline` model, it can be loaded from ModelScope (via `ModelConfig(model_id="xxx/xxx")`) or from a local path (via `ModelConfig(path="xxx")`). Inputting `scale=0.8` increases image brightness. Note that in the code, input parameters for `pipe` must be transferred to `template_pipeline`, and `template_inputs` should be added. + +```python +# Load Template model +template_pipeline = TemplatePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="DiffSynth-Studio/Template-KleinBase4B-Brightness") + ], +) +# Generate an image +image = template_pipeline( + pipe, + prompt="a cat", + seed=0, cfg_scale=4, + height=1024, width=1024, + template_inputs=[{"scale": 0.8}], +) +image.save("image_0.8.png") +``` + +## CFG Enhancement for Template Models + +Template models can enable CFG (Classifier-Free Guidance) to make control effects more pronounced. For example, with the model [DiffSynth-Studio/Template-KleinBase4B-Brightness](https://modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Brightness), adding `negative_template_inputs` to the TemplatePipeline input parameters and setting its scale to 0.5 will generate images with more noticeable brightness variations by contrasting both sides. + +```python +# Generate an image with CFG +image = template_pipeline( + pipe, + prompt="a cat", + seed=0, cfg_scale=4, + height=1024, width=1024, + template_inputs=[{"scale": 0.8}], + negative_template_inputs=[{"scale": 0.5}], +) +image.save("image_0.8_cfg.png") +``` + +## Low VRAM Support + +Template models currently do not support the main framework's VRAM management, but lazy loading can be used - loading Template models only when needed for inference. This significantly reduces VRAM requirements when enabling multiple Template models, with peak VRAM usage being that of a single Template model. Add parameter `lazy_loading=True` to enable. + +```python +template_pipeline = TemplatePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="DiffSynth-Studio/Template-KleinBase4B-Brightness") + ], + lazy_loading=True, +) +``` + +The base model's Pipeline and Template Pipeline are completely independent and can enable VRAM management on demand. + +When Template model outputs contain LoRA in Template Cache, you need to enable VRAM management for the base model's Pipeline or enable LoRA hot loading (using the code below), otherwise LoRA weights will be fused repeatedly. + +```python +pipe.dit = pipe.enable_lora_hot_loading(pipe.dit) +``` + +## Enabling Multiple Template Models + +`TemplatePipeline` can load multiple Template models. During inference, use `model_id` in `template_inputs` to distinguish inputs for each Template model. + +After enabling VRAM management for the base model's Pipeline and lazy loading for Template Pipeline, you can load any number of Template models. + +```python +from diffsynth.diffusion.template import TemplatePipeline +from diffsynth.pipelines.flux2_image import Flux2ImagePipeline, ModelConfig +from modelscope import dataset_snapshot_download +import torch +from PIL import Image + +vram_config = { + "offload_dtype": "disk", + "offload_device": "disk", + "onload_dtype": torch.bfloat16, + "onload_device": "cuda", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} +pipe = Flux2ImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="black-forest-labs/FLUX.2-klein-base-4B", origin_file_pattern="transformer/*.safetensors", **vram_config), + ModelConfig(model_id="black-forest-labs/FLUX.2-klein-4B", origin_file_pattern="text_encoder/*.safetensors", **vram_config), + ModelConfig(model_id="black-forest-labs/FLUX.2-klein-4B", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + tokenizer_config=ModelConfig(model_id="black-forest-labs/FLUX.2-klein-4B", origin_file_pattern="tokenizer/"), +) +pipe.dit = pipe.enable_lora_hot_loading(pipe.dit) +template = TemplatePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + lazy_loading=True, + model_configs=[ + ModelConfig(model_id="DiffSynth-Studio/Template-KleinBase4B-Brightness"), + ModelConfig(model_id="DiffSynth-Studio/Template-KleinBase4B-ControlNet"), + ModelConfig(model_id="DiffSynth-Studio/Template-KleinBase4B-Edit"), + ModelConfig(model_id="DiffSynth-Studio/Template-KleinBase4B-Upscaler"), + ModelConfig(model_id="DiffSynth-Studio/Template-KleinBase4B-SoftRGB"), + ModelConfig(model_id="DiffSynth-Studio/Template-KleinBase4B-Sharpness"), + ModelConfig(model_id="DiffSynth-Studio/Template-KleinBase4B-Inpaint"), + ModelConfig(model_id="DiffSynth-Studio/Template-KleinBase4B-Aesthetic"), + ModelConfig(model_id="DiffSynth-Studio/Template-KleinBase4B-ContentRef"), + ModelConfig(model_id="DiffSynth-Studio/Template-KleinBase4B-Age"), + ModelConfig(model_id="DiffSynth-Studio/Template-KleinBase4B-PandaMeme"), + ], +) +``` + +### Super-Resolution + Sharpness Enhancement + +Combining [DiffSynth-Studio/Template-KleinBase4B-Upscaler](https://modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Upscaler) and [DiffSynth-Studio/Template-KleinBase4B-Sharpness](https://modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Sharpness) can upscale blurry images while improving detail clarity. + +```python +image = template( + pipe, + prompt="A cat is sitting on a stone.", + seed=0, cfg_scale=4, num_inference_steps=50, + template_inputs = [ + { + "model_id": 3, + "image": Image.open("data/examples/templates/image_lowres_100.jpg"), + "prompt": "A cat is sitting on a stone.", + }, + { + "model_id": 5, + "scale": 1, + }, + ], + negative_template_inputs = [ + { + "model_id": 3, + "image": Image.open("data/examples/templates/image_lowres_100.jpg"), + "prompt": "", + }, + { + "model_id": 5, + "scale": 0, + }, + ], +) +image.save("image_Upscaler_Sharpness.png") +``` + +| Low Resolution Input | High Resolution Output | +|----------------------|------------------------| +| ![](https://github.com/user-attachments/assets/53f378f7-0dc5-44cd-bc39-032d0b1d0208) | ![](https://github.com/user-attachments/assets/135bab89-6d76-4d5c-ae5e-44b2826b5c50) | + +### Structure Control + Aesthetic Alignment + Sharpness Enhancement + +[DiffSynth-Studio/Template-KleinBase4B-ControlNet](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-ControlNet) controls composition, [DiffSynth-Studio/Template-KleinBase4B-Aesthetic](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Aesthetic) fills in details, and [DiffSynth-Studio/Template-KleinBase4B-Sharpness](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Sharpness) ensures clarity. Combining these three Template models produces exquisite images. + +```python +image = template( + pipe, + prompt="A cat is sitting on a stone, bathed in bright sunshine.", + seed=0, cfg_scale=4, num_inference_steps=50, + template_inputs = [ + { + "model_id": 1, + "image": Image.open("data/examples/templates/image_depth.jpg"), + "prompt": "A cat is sitting on a stone, bathed in bright sunshine.", + }, + { + "model_id": 7, + "lora_ids": list(range(1, 180, 2)), + "lora_scales": 2.0, + "merge_type": "mean", + }, + { + "model_id": 5, + "scale": 0.8, + }, + ], + negative_template_inputs = [ + { + "model_id": 1, + "image": Image.open("data/examples/templates/image_depth.jpg"), + "prompt": "", + }, + { + "model_id": 7, + "lora_ids": list(range(1, 180, 2)), + "lora_scales": 2.0, + "merge_type": "mean", + }, + { + "model_id": 5, + "scale": 0, + }, + ], +) +image.save("image_Controlnet_Aesthetic_Sharpness.png") +``` + +| Structure Control Image | Output Image | +|-------------------------|--------------| +| ![](https://github.com/user-attachments/assets/1feeb13f-f8a7-40df-958c-90463ef5eaf4) | ![](https://github.com/user-attachments/assets/ea406387-9695-4efd-b0cb-980686474ab7) | + +### Structure Control + Image Editing + Color Adjustment + +[DiffSynth-Studio/Template-KleinBase4B-ControlNet](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-ControlNet) controls composition, [DiffSynth-Studio/Template-KleinBase4B-Edit](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Edit) preserves original image details like fur texture, and [DiffSynth-Studio/Template-KleinBase4B-SoftRGB](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-SoftRGB) controls color tones, creating an artistic masterpiece. + +```python +image = template( + pipe, + prompt="A cat is sitting on a stone. Colored ink painting.", + seed=0, cfg_scale=4, num_inference_steps=50, + template_inputs = [ + { + "model_id": 1, + "image": Image.open("data/examples/templates/image_depth.jpg"), + "prompt": "A cat is sitting on a stone. Colored ink painting.", + }, + { + "model_id": 2, + "image": Image.open("data/examples/templates/image_reference.jpg"), + "prompt": "Convert the image style to colored ink painting.", + }, + { + "model_id": 4, + "R": 0.9, + "G": 0.5, + "B": 0.3, + }, + ], + negative_template_inputs = [ + { + "model_id": 1, + "image": Image.open("data/examples/templates/image_depth.jpg"), + "prompt": "", + }, + { + "model_id": 2, + "image": Image.open("data/examples/templates/image_reference.jpg"), + "prompt": "", + }, + ], +) +image.save("image_Controlnet_Edit_SoftRGB.png") +``` + +| Structure Control Image | Editing Input Image | Output Image | +|-------------------------|---------------------|--------------| +| ![](https://github.com/user-attachments/assets/1feeb13f-f8a7-40df-958c-90463ef5eaf4) | ![](https://github.com/user-attachments/assets/4866e14b-0ac7-4099-aab5-86048a645cb7) | ![](https://github.com/user-attachments/assets/0fd613a5-885b-44b0-83db-9dd08859cc24) | + +### Brightness Control + Image Editing + Local Redrawing + +[DiffSynth-Studio/Template-KleinBase4B-Brightness](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Brightness) generates bright scenes, [DiffSynth-Studio/Template-KleinBase4B-Edit](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Edit) references original image layout, and [DiffSynth-Studio/Template-KleinBase4B-Inpaint](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Inpaint) keeps background unchanged, generating cross-dimensional content. + +```python +image = template( + pipe, + prompt="A cat is sitting on a stone. Flat anime style.", + seed=0, cfg_scale=4, num_inference_steps=50, + template_inputs = [ + { + "model_id": 0, + "scale": 0.6, + }, + { + "model_id": 2, + "image": Image.open("data/examples/templates/image_reference.jpg"), + "prompt": "Convert the image style to flat anime style.", + }, + { + "model_id": 6, + "image": Image.open("data/examples/templates/image_reference.jpg"), + "mask": Image.open("data/examples/templates/image_mask_1.jpg"), + "force_inpaint": True, + }, + ], + negative_template_inputs = [ + { + "model_id": 0, + "scale": 0.5, + }, + { + "model_id": 2, + "image": Image.open("data/examples/templates/image_reference.jpg"), + "prompt": "", + }, + { + "model_id": 6, + "image": Image.open("data/examples/templates/image_reference.jpg"), + "mask": Image.open("data/examples/templates/image_mask_1.jpg"), + }, + ], +) +image.save("image_Brightness_Edit_Inpaint.png") +``` + +| Reference Image | Redrawing Area | Output Image | +|------------------|----------------|--------------| +| ![](https://github.com/user-attachments/assets/4866e14b-0ac7-4099-aab5-86048a645cb7) | ![](https://github.com/user-attachments/assets/52148a91-7c03-4042-944a-4c3182abe889) | ![](https://github.com/user-attachments/assets/3e4cbc26-f6b5-4cc7-a017-d0e0165703ca) | \ No newline at end of file diff --git a/docs/en/Diffusion_Templates/Template_Model_Training.md b/docs/en/Diffusion_Templates/Template_Model_Training.md new file mode 100644 index 0000000000000000000000000000000000000000..485c29d29939423b3b566d637e55e0e837cb9435 --- /dev/null +++ b/docs/en/Diffusion_Templates/Template_Model_Training.md @@ -0,0 +1,344 @@ +# Template Model Training + +DiffSynth-Studio currently provides comprehensive Template training support for [black-forest-labs/FLUX.2-klein-base-4B](https://www.modelscope.cn/models/black-forest-labs/FLUX.2-klein-base-4B), with more model adaptations coming soon. + +## Continuing Training from Pretrained Models + +To continue training from our pretrained models, refer to the table in [FLUX.2](../Model_Details/FLUX2.md#model-overview) to find the corresponding training script. + +## Building New Template Models + +### Template Model Component Format + +A Template model binds to a model repository (or local folder) containing a code file `model.py` as the entry point. Here's the template for `model.py`: + +```python +import torch + +class CustomizedTemplateModel(torch.nn.Module): + def __init__(self): + super().__init__() + + @torch.no_grad() + def process_inputs(self, xxx, **kwargs): + yyy = xxx + return {"yyy": yyy} + + def forward(self, yyy, **kwargs): + zzz = yyy + return {"zzz": zzz} + +class DataProcessor: + def __call__(self, www, **kwargs): + xxx = www + return {"xxx": xxx} + +TEMPLATE_MODEL = CustomizedTemplateModel +TEMPLATE_MODEL_PATH = "model.safetensors" +TEMPLATE_DATA_PROCESSOR = DataProcessor +``` + +During Template model inference, Template Input passes through `TEMPLATE_MODEL`'s `process_inputs` and `forward` to generate Template Cache. + +```mermaid +flowchart LR; + i@{shape: text, label: "Template Input"}-->p[process_inputs]; + subgraph TEMPLATE_MODEL + p[process_inputs]-->f[forward] + end + f[forward]-->c@{shape: text, label: "Template Cache"}; +``` + +During Template model training, Template Input comes from the dataset through `TEMPLATE_DATA_PROCESSOR`. + +```mermaid +flowchart LR; + d@{shape: text, label: "Dataset"}-->dp[TEMPLATE_DATA_PROCESSOR]-->p[process_inputs]; + subgraph TEMPLATE_MODEL + p[process_inputs]-->f[forward] + end + f[forward]-->c@{shape: text, label: "Template Cache"}; +``` + +#### `TEMPLATE_MODEL` + +`TEMPLATE_MODEL` implements the Template model logic, inheriting from `torch.nn.Module` with required `process_inputs` and `forward` methods. These two methods form the complete Template model inference process, split into two stages to better support [two-stage split training](https://diffsynth-studio-doc.readthedocs.io/en/latest/Training/Split_Training.html). + +* `process_inputs` must use `@torch.no_grad()` for gradient-free computation +* `forward` must contain all gradient computations required for training + +Both methods should accept `**kwargs` for compatibility. Reserved parameters include: + +* To interact with the base model Pipeline (e.g., call text encoder), add `pipe` parameter to method inputs +* To enable Gradient Checkpointing, add `use_gradient_checkpointing` and `use_gradient_checkpointing_offload` to `forward` inputs +* Multiple Template models use `model_id` to distinguish Template Inputs - do not use this field in method parameters + +#### `TEMPLATE_MODEL_PATH` (Optional) + +`TEMPLATE_MODEL_PATH` specifies the relative path to pretrained weights. For example: + +```python +TEMPLATE_MODEL_PATH = "model.safetensors" +``` + +For multi-file models: + +```python +TEMPLATE_MODEL_PATH = [ + "model-00001-of-00003.safetensors", + "model-00002-of-00003.safetensors", + "model-00003-of-00003.safetensors", +] +``` + +Set to `None` for random initialization: + +```python +TEMPLATE_MODEL_PATH = None +``` + +#### `TEMPLATE_DATA_PROCESSOR` (Optional) + +To train Template models with DiffSynth-Studio, datasets should contain `template_inputs` fields in `metadata.json`. These fields pass through `TEMPLATE_DATA_PROCESSOR` to generate inputs for Template model methods. + +For example, the brightness control model [DiffSynth-Studio/Template-KleinBase4B-Brightness](https://modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Brightness) takes `scale` as input: + +```json +[ + { + "image": "images/image_1.jpg", + "prompt": "a cat", + "template_inputs": {"scale": 0.2} + }, + { + "image": "images/image_2.jpg", + "prompt": "a dog", + "template_inputs": {"scale": 0.6} + } +] +``` + +```python +class DataProcessor: + def __call__(self, scale, **kwargs): + return {"scale": scale} + +TEMPLATE_DATA_PROCESSOR = DataProcessor +``` + +Or calculate scale from image paths: + +```json +[ + { + "image": "images/image_1.jpg", + "prompt": "a cat", + "template_inputs": {"image": "/path/to/your/dataset/images/image_1.jpg"} + } +] +``` + +```python +class DataProcessor: + def __call__(self, image, **kwargs): + image = Image.open(image) + image = np.array(image) + return {"scale": image.astype(np.float32).mean() / 255} + +TEMPLATE_DATA_PROCESSOR = DataProcessor +``` + +### Training Template Models + +A Template model is "trainable" if its Template Cache variables are fully decoupled from the base model Pipeline - these variables should reach `model_fn` without participating in any Pipeline Unit calculations. + +For training with [black-forest-labs/FLUX.2-klein-base-4B](https://www.modelscope.cn/models/black-forest-labs/FLUX.2-klein-base-4B), use these training script parameters: + +* `--extra_inputs`: Additional inputs. Use `template_inputs` for text-to-image models, `edit_image,template_inputs` for image editing models +* `--template_model_id_or_path`: Template model ID or local path (use `:` suffix for ModelScope IDs, e.g., `"DiffSynth-Studio/Template-KleinBase4B-Brightness:"`) +* `--remove_prefix_in_ckpt`: State dict prefix to remove when saving models (use `"pipe.template_model."`) +* `--trainable_models`: Trainable components (use `"template_model"` for full model, or `"template_model.xxx,template_model.yyy"` for specific components) + +Example training script: + +```shell +accelerate launch examples/flux2/model_training/train.py \ + --dataset_base_path data/diffsynth_example_dataset/flux2/Template-KleinBase4B-Brightness \ + --dataset_metadata_path data/diffsynth_example_dataset/flux2/Template-KleinBase4B-Brightness/metadata.jsonl \ + --extra_inputs "template_inputs" \ + --max_pixels 1048576 \ + --dataset_repeat 50 \ + --model_id_with_origin_paths "black-forest-labs/FLUX.2-klein-4B:text_encoder/*.safetensors,black-forest-labs/FLUX.2-klein-base-4B:transformer/*.safetensors,black-forest-labs/FLUX.2-klein-4B:vae/diffusion_pytorch_model.safetensors" \ + --template_model_id_or_path "examples/flux2/model_training/scripts/brightness" \ + --tokenizer_path "black-forest-labs/FLUX.2-klein-4B:tokenizer/" \ + --learning_rate 1e-4 \ + --num_epochs 2 \ + --remove_prefix_in_ckpt "pipe.template_model." \ + --output_path "./models/train/Template-KleinBase4B-Brightness_example" \ + --trainable_models "template_model" \ + --use_gradient_checkpointing \ + --find_unused_parameters +``` + +### Interacting with Base Model Pipeline Components + +Template models can interact with base model Pipelines. For example, using the text encoder: + +```python +class CustomizedTemplateModel(torch.nn.Module): + def __init__(self): + super().__init__() + self.xxx = xxx() + + @torch.no_grad() + def process_inputs(self, text, pipe, **kwargs): + input_ids = pipe.tokenizer(text) + text_emb = pipe.text_encoder(input_ids) + return {"text_emb": text_emb} + + def forward(self, text_emb, pipe, **kwargs): + kv_cache = self.xxx(text_emb) + return {"kv_cache": kv_cache} + +TEMPLATE_MODEL = CustomizedTemplateModel +``` + +### Using Non-Trainable Components + +For models with pretrained components: + +```python +class CustomizedTemplateModel(torch.nn.Module): + def __init__(self): + super().__init__() + self.image_encoder = XXXEncoder.from_pretrained(xxx) + self.mlp = MLP() + + @torch.no_grad() + def process_inputs(self, image, **kwargs): + emb = self.image_encoder(image) + return {"emb": emb} + + def forward(self, emb, **kwargs): + kv_cache = self.mlp(emb) + return {"kv_cache": kv_cache} + +TEMPLATE_MODEL = CustomizedTemplateModel +``` + +Set `--trainable_models template_model.mlp` to train only the MLP component. + +### Training on Low VRAM Devices + +The framework supports splitting Template model training into two stages: the first stage performs gradient-free computation, and the second stage performs gradient updates. For more information, refer to the documentation: [Two-stage Split Training](https://diffsynth-studio-doc.readthedocs.io/en/latest/Training/Split_Training.html). Here's a sample script: + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "flux2/Template-KleinBase4B-Brightness/*" --local_dir ./data/diffsynth_example_dataset + +accelerate launch examples/flux2/model_training/train.py \ + --dataset_base_path data/diffsynth_example_dataset/flux2/Template-KleinBase4B-Brightness \ + --dataset_metadata_path data/diffsynth_example_dataset/flux2/Template-KleinBase4B-Brightness/metadata.jsonl \ + --extra_inputs "template_inputs" \ + --max_pixels 1048576 \ + --dataset_repeat 1 \ + --model_id_with_origin_paths "black-forest-labs/FLUX.2-klein-4B:text_encoder/*.safetensors,black-forest-labs/FLUX.2-klein-4B:vae/diffusion_pytorch_model.safetensors" \ + --template_model_id_or_path "DiffSynth-Studio/Template-KleinBase4B-Brightness:" \ + --tokenizer_path "black-forest-labs/FLUX.2-klein-4B:tokenizer/" \ + --learning_rate 1e-4 \ + --num_epochs 2 \ + --remove_prefix_in_ckpt "pipe.template_model." \ + --output_path "./models/train/Template-KleinBase4B-Brightness_full_cache" \ + --trainable_models "template_model" \ + --use_gradient_checkpointing \ + --find_unused_parameters \ + --task "sft:data_process" + +accelerate launch examples/flux2/model_training/train.py \ + --dataset_base_path "./models/train/Template-KleinBase4B-Brightness_full_cache" \ + --extra_inputs "template_inputs" \ + --max_pixels 1048576 \ + --dataset_repeat 50 \ + --model_id_with_origin_paths "black-forest-labs/FLUX.2-klein-base-4B:transformer/*.safetensors" \ + --template_model_id_or_path "DiffSynth-Studio/Template-KleinBase4B-Brightness:" \ + --tokenizer_path "black-forest-labs/FLUX.2-klein-4B:tokenizer/" \ + --learning_rate 1e-4 \ + --num_epochs 2 \ + --remove_prefix_in_ckpt "pipe.template_model." \ + --output_path "./models/train/Template-KleinBase4B-Brightness_full" \ + --trainable_models "template_model" \ + --use_gradient_checkpointing \ + --find_unused_parameters \ + --task "sft:train" +``` + +Two-stage split training can reduce VRAM requirements and improve training speed. The training process is lossless in precision, but requires significant disk space for storing cache files. + +To further reduce VRAM requirements, you can enable fp8 precision by adding the parameters `--fp8_models "black-forest-labs/FLUX.2-klein-4B:text_encoder/*.safetensors,black-forest-labs/FLUX.2-klein-4B:vae/diffusion_pytorch_model.safetensors"` and `--fp8_models "black-forest-labs/FLUX.2-klein-base-4B:transformer/*.safetensors"` to the two-stage training. Note that fp8 precision can only be enabled on non-trainable model components and introduces minor errors. + +### Uploading Template Models + +After training, follow these steps to upload Template models to ModelScope for wider distribution. + +1. Set model path in `model.py`: +```python +TEMPLATE_MODEL_PATH = "model.safetensors" +``` + +2. Upload using ModelScope CLI: +```shell +modelscope upload user_name/your_model_id /path/to/your/model.py model.py --token ms-xxx +``` + +3. Package model files: +```python +from diffsynth.diffusion.template import load_template_model, load_state_dict +from safetensors.torch import save_file +import torch + +model = load_template_model("path/to/your/template/model", torch_dtype=torch.bfloat16, device="cpu") +state_dict = load_state_dict("path/to/your/ckpt/epoch-1.safetensors", torch_dtype=torch.bfloat16, device="cpu") +state_dict.update(model.state_dict()) +save_file(state_dict, "model.safetensors") +``` + +4. Upload model file: +```shell +modelscope upload user_name/your_model_id /path/to/your/model/epoch-1.safetensors model.safetensors --token ms-xxx +``` + +5. Verify inference: +```python +from diffsynth.diffusion.template import TemplatePipeline +from diffsynth.pipelines.flux2_image import Flux2ImagePipeline, ModelConfig +import torch + +# Load base model +pipe = Flux2ImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="black-forest-labs/FLUX.2-klein-4B", origin_file_pattern="text_encoder/*.safetensors"), + ModelConfig(model_id="black-forest-labs/FLUX.2-klein-base-4B", origin_file_pattern="transformer/*.safetensors"), + ModelConfig(model_id="black-forest-labs/FLUX.2-klein-4B", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + tokenizer_config=ModelConfig(model_id="black-forest-labs/FLUX.2-klein-4B", origin_file_pattern="tokenizer/"), +) + +# Load Template model +template_pipeline = TemplatePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="user_name/your_model_id") + ], +) + +# Generate image +image = template_pipeline( + pipe, + prompt="a cat", + seed=0, cfg_scale=4, + height=1024, width=1024, + template_inputs=[{xxx}], +) +image.save("image.png") \ No newline at end of file diff --git a/docs/en/Diffusion_Templates/Understanding_Diffusion_Templates.md b/docs/en/Diffusion_Templates/Understanding_Diffusion_Templates.md new file mode 100644 index 0000000000000000000000000000000000000000..900d1115a28393f35b0e189f912c9439afddb3a9 --- /dev/null +++ b/docs/en/Diffusion_Templates/Understanding_Diffusion_Templates.md @@ -0,0 +1,62 @@ +# Diffusion Templates Architecture Details + +The Diffusion Templates framework is a controllable generation plugin framework in DiffSynth-Studio that provides additional controllable generation capabilities for Diffusion models. + +## Framework Structure + +The Diffusion Templates framework structure is shown below: + +```mermaid +flowchart TD; + subgraph Template Pipeline + si@{shape: text, label: "Template Input"}-->i1@{shape: text, label: "Template Input 1"}; + si@{shape: text, label: "Template Input"}-->i2@{shape: text, label: "Template Input 2"}; + si@{shape: text, label: "Template Input"}-->i3@{shape: text, label: "Template Input 3"}; + i1@{shape: text, label: "Template Input 1"}-->m1[Template Model 1]-->c1@{shape: text, label: "Template Cache 1"}; + i2@{shape: text, label: "Template Input 2"}-->m2[Template Model 2]-->c2@{shape: text, label: "Template Cache 2"}; + i3@{shape: text, label: "Template Input 3"}-->m3[Template Model 3]-->c3@{shape: text, label: "Template Cache 3"}; + c1-->c@{shape: text, label: "Template Cache"}; + c2-->c; + c3-->c; + end + i@{shape: text, label: "Model Input"}-->m[Diffusion Pipeline]-->o@{shape: text, label: "Model Output"}; + c-->m; +``` + +The framework contains these module designs: + +* **Template Input**: Template model input. Format: Python dictionary with fields determined by each Template model (e.g., `{"scale": 0.8}`) +* **Template Model**: Template model, loadable from ModelScope (`ModelConfig(model_id="xxx/xxx")`) or local path (`ModelConfig(path="xxx")`) +* **Template Cache**: Template model output. Format: Python dictionary with fields matching base model Pipeline input parameters +* **Template Pipeline**: Module for managing multiple Template models. Handles model loading and cache integration + +When the Diffusion Templates framework is disabled, base model components (Text Encoder, DiT, VAE) are loaded into the Diffusion Pipeline. Model Input (prompt, height, width) produces Model Output (e.g., images). + +When enabled, Template models are loaded into the Template Pipeline. The Template Pipeline outputs Template Cache (a subset of Diffusion Pipeline input parameters) for subsequent processing in the Diffusion Pipeline. This enables controllable generation by intercepting part of the Diffusion Pipeline's input parameters. + +## Model Capability Medium + +Template Cache is defined as a subset of Diffusion Pipeline input parameters, ensuring framework generality. We restrict Template model inputs to only be Diffusion Pipeline parameters. The KV-Cache is particularly suitable as a Diffusion medium: + +* Proven effective in LLM Skills (prompts are converted to KV-Cache) +* Has "high permission" in Diffusion models - can directly control image generation +* Supports sequence-level concatenation for multiple Template models +* Requires minimal development (add pipeline parameter and integrate to model) + +Other potential Template mediums: +* **Residual**: Used in ControlNet for point-to-point control, but has resolution limitations and potential conflicts when merging +* **LoRA**: Treated as input parameters rather than model components + +**Currently, we only support KV-Cache and LoRA as Template Cache mediums in FLUX.2 Pipeline, with plans to support more models and mediums in the future.** + +## Template Model Format + +A Template model has this structure: + +``` +Template_Model +├── model.py +└── model.safetensors +``` + +Where `model.py` is the entry point and `model.safetensors` contains model weights. For implementation details, see [Template Model Training](Template_Model_Training.md) or [existing Template models](https://modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Brightness). \ No newline at end of file diff --git a/docs/en/Makefile b/docs/en/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..41c270bb329da10ec93643ce0524634cfa40331d --- /dev/null +++ b/docs/en/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/docs/en/Model_Details/ACE-Step.md b/docs/en/Model_Details/ACE-Step.md new file mode 100644 index 0000000000000000000000000000000000000000..7b715cb95c1432722f56581c7c356ca86e75ea2f --- /dev/null +++ b/docs/en/Model_Details/ACE-Step.md @@ -0,0 +1,166 @@ +# ACE-Step + +ACE-Step 1.5 is an open-source music generation model based on DiT architecture, supporting text-to-music, audio cover, repainting and other functionalities, running efficiently on consumer-grade hardware. + +## Installation + +Before performing model inference and training, please install DiffSynth-Studio first. + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +For more information on installation, please refer to [Setup Dependencies](../Pipeline_Usage/Setup.md). + +## Quick Start + +Running the following code will load the [ACE-Step/Ace-Step1.5](https://www.modelscope.cn/models/ACE-Step/Ace-Step1.5) model for inference. VRAM management is enabled, the framework automatically controls parameter loading based on available VRAM, requiring a minimum of 3GB VRAM. + +```python +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio +import torch + + +vram_config = { + "offload_dtype": torch.bfloat16, + "offload_device": "cpu", + "onload_dtype": torch.bfloat16, + "onload_device": "cpu", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} + + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="acestep-v15-turbo/model.safetensors", **vram_config), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors", **vram_config), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors", **vram_config), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' +audio = pipe( + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=42, +) + +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-turbo.wav") +``` + +## Model Overview + +|Model ID|Inference|Low VRAM Inference|Full Training|Full Training Validation|LoRA Training|LoRA Training Validation| +|-|-|-|-|-|-|-| +|[ACE-Step/Ace-Step1.5](https://www.modelscope.cn/models/ACE-Step/Ace-Step1.5)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference/Ace-Step1.5.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference_low_vram/Ace-Step1.5.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/full/Ace-Step1.5.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/validate_full/Ace-Step1.5.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/lora/Ace-Step1.5.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/validate_lora/Ace-Step1.5.py)| +|[ACE-Step/acestep-v15-turbo-shift1](https://www.modelscope.cn/models/ACE-Step/acestep-v15-turbo-shift1)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference/acestep-v15-turbo-shift1.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference_low_vram/acestep-v15-turbo-shift1.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/full/acestep-v15-turbo-shift1.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/validate_full/acestep-v15-turbo-shift1.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/lora/acestep-v15-turbo-shift1.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/validate_lora/acestep-v15-turbo-shift1.py)| +|[ACE-Step/acestep-v15-turbo-shift3](https://www.modelscope.cn/models/ACE-Step/acestep-v15-turbo-shift3)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference/acestep-v15-turbo-shift3.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference_low_vram/acestep-v15-turbo-shift3.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/full/acestep-v15-turbo-shift3.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/validate_full/acestep-v15-turbo-shift3.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/lora/acestep-v15-turbo-shift3.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/validate_lora/acestep-v15-turbo-shift3.py)| +|[ACE-Step/acestep-v15-turbo-continuous](https://www.modelscope.cn/models/ACE-Step/acestep-v15-turbo-continuous)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference/acestep-v15-turbo-continuous.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference_low_vram/acestep-v15-turbo-continuous.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/full/acestep-v15-turbo-continuous.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/validate_full/acestep-v15-turbo-continuous.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/lora/acestep-v15-turbo-continuous.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/validate_lora/acestep-v15-turbo-continuous.py)| +|[ACE-Step/acestep-v15-base](https://www.modelscope.cn/models/ACE-Step/acestep-v15-base)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference/acestep-v15-base.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference_low_vram/acestep-v15-base.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/full/acestep-v15-base.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/validate_full/acestep-v15-base.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/lora/acestep-v15-base.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/validate_lora/acestep-v15-base.py)| +|[ACE-Step/acestep-v15-base: CoverTask](https://www.modelscope.cn/models/ACE-Step/acestep-v15-base)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference/acestep-v15-base-CoverTask.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference_low_vram/acestep-v15-base-CoverTask.py)|—|—|—|—| +|[ACE-Step/acestep-v15-base: RepaintTask](https://www.modelscope.cn/models/ACE-Step/acestep-v15-base)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference/acestep-v15-base-RepaintTask.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference_low_vram/acestep-v15-base-RepaintTask.py)|—|—|—|—| +|[ACE-Step/acestep-v15-sft](https://www.modelscope.cn/models/ACE-Step/acestep-v15-sft)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference/acestep-v15-sft.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference_low_vram/acestep-v15-sft.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/full/acestep-v15-sft.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/validate_full/acestep-v15-sft.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/lora/acestep-v15-sft.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/validate_lora/acestep-v15-sft.py)| +|[ACE-Step/acestep-v15-xl-base](https://www.modelscope.cn/models/ACE-Step/acestep-v15-xl-base)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference/acestep-v15-xl-base.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference_low_vram/acestep-v15-xl-base.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/full/acestep-v15-xl-base.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/validate_full/acestep-v15-xl-base.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/lora/acestep-v15-xl-base.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/validate_lora/acestep-v15-xl-base.py)| +|[ACE-Step/acestep-v15-xl-sft](https://www.modelscope.cn/models/ACE-Step/acestep-v15-xl-sft)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference/acestep-v15-xl-sft.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference_low_vram/acestep-v15-xl-sft.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/full/acestep-v15-xl-sft.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/validate_full/acestep-v15-xl-sft.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/lora/acestep-v15-xl-sft.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/validate_lora/acestep-v15-xl-sft.py)| +|[ACE-Step/acestep-v15-xl-turbo](https://www.modelscope.cn/models/ACE-Step/acestep-v15-xl-turbo)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference/acestep-v15-xl-turbo.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference_low_vram/acestep-v15-xl-turbo.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/full/acestep-v15-xl-turbo.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/validate_full/acestep-v15-xl-turbo.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/lora/acestep-v15-xl-turbo.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/validate_lora/acestep-v15-xl-turbo.py)| +|[DiffSynth-Studio/acestep15xlsft-lora-music](https://www.modelscope.cn/models/DiffSynth-Studio/acestep15xlsft-lora-music)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference/acestep15xlsft-vocals2music.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference_low_vram/acestep15xlsft-vocals2music.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/full/acestep15xlsft-vocals2music.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/validate_full/acestep15xlsft-vocals2music.py)|-|-| + +## Model Inference + +The model is loaded via `AceStepPipeline.from_pretrained`, see [Loading Models](../Pipeline_Usage/Model_Inference.md#loading-models) for details. + +The input parameters for `AceStepPipeline` inference include: + +* `prompt`: Text description of the music. +* `cfg_scale`: Classifier-free guidance scale, defaults to 1.0. +* `lyrics`: Lyrics text. +* `task_type`: Task type,可选 values include `"text2music"` (text-to-music), `"cover"` (audio cover), `"repaint"` (repainting), defaults to `"text2music"`. +* `reference_audios`: List of reference audio tensors for timbre reference. +* `src_audio`: Source audio tensor for cover or repaint tasks. +* `denoising_strength`: Denoising strength, controlling how much the output is influenced by source audio, defaults to 1.0. +* `audio_cover_strength`: Audio cover step ratio, controlling how many steps use cover condition in cover tasks, defaults to 1.0. +* `audio_code_string`: Input audio code string for cover tasks with discrete audio codes. +* `repainting_ranges`: List of repainting time ranges (tuples of floats, in seconds) for repaint tasks. +* `repainting_strength`: Repainting intensity, controlling the degree of change in repainted areas, defaults to 1.0. +* `duration`: Audio duration in seconds, defaults to 60. +* `bpm`: Beats per minute, defaults to 100. +* `keyscale`: Musical key scale, defaults to "B minor". +* `timesignature`: Time signature, defaults to "4". +* `vocal_language`: Vocal language, defaults to "unknown". +* `seed`: Random seed. +* `rand_device`: Device for noise generation, defaults to "cpu". +* `num_inference_steps`: Number of inference steps, defaults to 8. +* `shift`: Timestep shift parameter for the scheduler, defaults to 3.0. + +## Model Training + +Models in the ace_step series are trained uniformly via `examples/ace_step/model_training/train.py`. The script parameters include: + +* General Training Parameters + * Dataset Configuration + * `--dataset_base_path`: Root directory of the dataset. + * `--dataset_metadata_path`: Path to the dataset metadata file. + * `--dataset_repeat`: Number of dataset repeats per epoch. + * `--dataset_num_workers`: Number of processes per DataLoader. + * `--data_file_keys`: Field names to load from metadata, typically paths to image or video files, separated by `,`. + * Model Loading Configuration + * `--model_paths`: Paths to load models from, in JSON format. + * `--model_id_with_origin_paths`: Model IDs with original paths, separated by commas. + * `--extra_inputs`: Additional input parameters required by the model Pipeline, separated by `,`. + * `--fp8_models`: Models to load in FP8 format, currently only supported for models whose parameters are not updated by gradients. + * `--quant_options`: Dynamically quantize loaded models. Semicolon-separated entries, each `:[/]`, where `` matches an entry in `--model_paths`/`--model_id_with_origin_paths`, `method` is a registered method (e.g. `bitsandbytes_nf4`), and `exclude_modules` optionally lists layers kept in full precision. + * Basic Training Configuration + * `--learning_rate`: Learning rate. + * `--num_epochs`: Number of epochs. + * `--trainable_models`: Trainable models, e.g., `dit`, `vae`, `text_encoder`. + * `--find_unused_parameters`: Whether unused parameters exist in DDP training. + * `--weight_decay`: Weight decay magnitude. + * `--task`: Training task, defaults to `sft`. + * Output Configuration + * `--output_path`: Path to save the model. + * `--remove_prefix_in_ckpt`: Remove prefix in the model's state dict. + * `--save_steps`: Interval in training steps to save the model. + * LoRA Configuration + * `--lora_base_model`: Which model to add LoRA to. + * `--lora_target_modules`: Which layers to add LoRA to. + * `--lora_rank`: Rank of LoRA. + * `--lora_checkpoint`: Path to LoRA checkpoint. + * `--preset_lora_path`: Path to preset LoRA checkpoint for LoRA differential training. + * `--preset_lora_model`: Which model to integrate preset LoRA into, e.g., `dit`. + * Gradient Configuration + * `--use_gradient_checkpointing`: Whether to enable gradient checkpointing. + * `--use_gradient_checkpointing_offload`: Whether to offload gradient checkpointing to CPU memory. + * `--gradient_accumulation_steps`: Number of gradient accumulation steps. + * Resolution Configuration + * `--height`: Height of the image/video. Leave empty to enable dynamic resolution. + * `--width`: Width of the image/video. Leave empty to enable dynamic resolution. + * `--max_pixels`: Maximum pixel area, images larger than this will be scaled down during dynamic resolution. + * `--num_frames`: Number of frames for video (video generation models only). +* ACE-Step Specific Parameters + * `--tokenizer_path`: Tokenizer path, in format model_id:origin_pattern. + * `--silence_latent_path`: Silence latent path, in format model_id:origin_pattern. + * `--initialize_model_on_cpu`: Whether to initialize models on CPU. + +### Example Dataset + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --local_dir ./data/diffsynth_example_dataset +``` + +We provide recommended training scripts for each model, please refer to the table in "Model Overview" above. For guidance on writing model training scripts, see [Model Training](../Pipeline_Usage/Model_Training.md); for more advanced training algorithms, see [Training Framework Overview](https://github.com/modelscope/DiffSynth-Studio/tree/main/docs/en/Training/). diff --git a/docs/en/Model_Details/Anima.md b/docs/en/Model_Details/Anima.md new file mode 100644 index 0000000000000000000000000000000000000000..9bcea2b31b97637d30d343cbc38e76e5e931b3b0 --- /dev/null +++ b/docs/en/Model_Details/Anima.md @@ -0,0 +1,140 @@ +# Anima + +Anima is an image generation model trained and open-sourced by CircleStone Labs and Comfy Org. + +## Installation + +Before using this project for model inference and training, please install DiffSynth-Studio first. + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +For more installation information, please refer to [Install Dependencies](../Pipeline_Usage/Setup.md). + +## Quick Start + +The following code demonstrates how to quickly load the [circlestone-labs/Anima](https://www.modelscope.cn/models/circlestone-labs/Anima) model for inference. VRAM management is enabled by default, allowing the framework to automatically control model parameter loading based on available VRAM. Minimum 8GB VRAM required. + +```python +from diffsynth.pipelines.anima_image import AnimaImagePipeline, ModelConfig +import torch + +vram_config = { + "offload_dtype": "disk", + "offload_device": "disk", + "onload_dtype": "disk", + "onload_device": "disk", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} +pipe = AnimaImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="circlestone-labs/Anima", origin_file_pattern="split_files/diffusion_models/anima-preview.safetensors", **vram_config), + ModelConfig(model_id="circlestone-labs/Anima", origin_file_pattern="split_files/text_encoders/qwen_3_06b_base.safetensors", **vram_config), + ModelConfig(model_id="circlestone-labs/Anima", origin_file_pattern="split_files/vae/qwen_image_vae.safetensors", **vram_config), + ], + tokenizer_config=ModelConfig(model_id="Qwen/Qwen3-0.6B", origin_file_pattern="./"), + tokenizer_t5xxl_config=ModelConfig(model_id="stabilityai/stable-diffusion-3.5-large", origin_file_pattern="tokenizer_3/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) +prompt = "Masterpiece, best quality, solo, long hair, wavy hair, silver hair, blue eyes, blue dress, medium breasts, dress, underwater, air bubble, floating hair, refraction, portrait." +negative_prompt = "worst quality, low quality, monochrome, zombie, interlocked fingers, Aissist, cleavage, nsfw," +image = pipe(prompt, seed=0, num_inference_steps=50) +image.save("image.jpg") +``` + +## Model Overview + +|Model ID|Inference|Low VRAM Inference|Full Training|Validation after Full Training|LoRA Training|Validation after LoRA Training| +|-|-|-|-|-|-|-| +|[circlestone-labs/Anima](https://www.modelscope.cn/models/circlestone-labs/Anima)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/anima/model_inference/anima-preview.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/anima/model_inference_low_vram/anima-preview.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/anima/model_training/full/anima-preview.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/anima/model_training/validate_full/anima-preview.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/anima/model_training/lora/anima-preview.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/anima/model_training/validate_lora/anima-preview.py)| + +Special training scripts: + +* Differential LoRA Training: [doc](../Training/Differential_LoRA.md) +* FP8 Precision Training: [doc](../Training/FP8_Precision.md) +* Two-Stage Split Training: [doc](../Training/Split_Training.md) +* End-to-End Direct Distillation: [doc](../Training/Direct_Distill.md) + +## Model Inference + +Models are loaded through `AnimaImagePipeline.from_pretrained`, see [Model Inference](../Pipeline_Usage/Model_Inference.md#loading-models) for details. + +Input parameters for `AnimaImagePipeline` inference include: + +* `prompt`: Text description of the desired image content. +* `negative_prompt`: Content to exclude from the generated image (default: `""`). +* `cfg_scale`: Classifier-free guidance parameter (default: 4.0). +* `input_image`: Input image for image-to-image generation (default: `None`). +* `denoising_strength`: Controls similarity to input image (default: 1.0). +* `height`: Image height (must be multiple of 16, default: 1024). +* `width`: Image width (must be multiple of 16, default: 1024). +* `seed`: Random seed (default: `None`). +* `rand_device`: Device for random noise generation (default: `"cpu"`). +* `num_inference_steps`: Inference steps (default: 30). +* `sigma_shift`: Scheduler sigma offset (default: `None`). +* `progress_bar_cmd`: Progress bar implementation (default: `tqdm.tqdm`). + +For VRAM constraints, enable [VRAM Management](../Pipeline_Usage/VRAM_management.md). Recommended low-VRAM configurations are provided in the "Model Overview" table above. + +## Model Training + +Anima models are trained through [`examples/anima/model_training/train.py`](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/anima/model_training/train.py) with parameters including: + +* General Training Parameters + * Dataset Configuration + * `--dataset_base_path`: Dataset root directory. + * `--dataset_metadata_path`: Metadata file path. + * `--dataset_repeat`: Dataset repetition per epoch. + * `--dataset_num_workers`: Dataloader worker count. + * `--data_file_keys`: Metadata fields to load (comma-separated). + * Model Loading + * `--model_paths`: Model paths (JSON format). + * `--model_id_with_origin_paths`: Model IDs with origin paths (e.g., `"anima-team/anima-1B:text_encoder/*.safetensors"`). + * `--extra_inputs`: Additional pipeline inputs (e.g., `controlnet_inputs` for ControlNet). + * `--fp8_models`: FP8-formatted models (same format as `--model_paths`). + * `--quant_options`: Dynamically quantize loaded models. Semicolon-separated entries, each `:[/]`, where `` matches an entry in `--model_paths`/`--model_id_with_origin_paths`, `method` is a registered method (e.g. `bitsandbytes_nf4`), and `exclude_modules` optionally lists layers kept in full precision. + * Training Configuration + * `--learning_rate`: Learning rate. + * `--num_epochs`: Training epochs. + * `--trainable_models`: Trainable components (e.g., `dit`, `vae`, `text_encoder`). + * `--find_unused_parameters`: Handle unused parameters in DDP training. + * `--weight_decay`: Weight decay value. + * `--task`: Training task (default: `sft`). + * Output Configuration + * `--output_path`: Model output directory. + * `--remove_prefix_in_ckpt`: Remove state dict prefixes. + * `--save_steps`: Model saving interval. + * LoRA Configuration + * `--lora_base_model`: Target model for LoRA. + * `--lora_target_modules`: Target modules for LoRA. + * `--lora_rank`: LoRA rank. + * `--lora_checkpoint`: LoRA checkpoint path. + * `--preset_lora_path`: Preloaded LoRA checkpoint path. + * `--preset_lora_model`: Model to merge LoRA with (e.g., `dit`). + * Gradient Configuration + * `--use_gradient_checkpointing`: Enable gradient checkpointing. + * `--use_gradient_checkpointing_offload`: Offload checkpointing to CPU. + * `--gradient_accumulation_steps`: Gradient accumulation steps. + * Image Resolution + * `--height`: Image height (empty for dynamic resolution). + * `--width`: Image width (empty for dynamic resolution). + * `--max_pixels`: Maximum pixel area for dynamic resolution. +* Anima-Specific Parameters + * `--tokenizer_path`: Tokenizer path for text-to-image models. + * `--tokenizer_t5xxl_path`: T5-XXL tokenizer path. + +We provide a sample image dataset for testing: + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --local_dir ./data/diffsynth_example_dataset +``` + +For training script details, refer to [Model Training](../Pipeline_Usage/Model_Training.md). For advanced training techniques, see [Training Framework Documentation](https://github.com/modelscope/DiffSynth-Studio/tree/main/docs/zh/Training/). \ No newline at end of file diff --git a/docs/en/Model_Details/Boogu-Image.md b/docs/en/Model_Details/Boogu-Image.md new file mode 100644 index 0000000000000000000000000000000000000000..30287a50d965478d1ac2306f45bc4c48a8b7bb39 --- /dev/null +++ b/docs/en/Model_Details/Boogu-Image.md @@ -0,0 +1,148 @@ +# Boogu-Image + +Boogu-Image supports text-to-image, image-to-image, and instruction-guided image editing. + +## Installation + +Before performing model inference and training, please install DiffSynth-Studio first. + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +For more information on installation, please refer to [Setup Dependencies](../Pipeline_Usage/Setup.md). + +## Quick Start + +Running the following code will load the [Boogu/Boogu-Image-0.1-Base](https://modelscope.cn/models/Boogu/Boogu-Image-0.1-Base) model for inference. VRAM management is enabled, the framework automatically controls parameter loading based on available VRAM, requiring a minimum of 8GB VRAM. + +```python +from diffsynth.pipelines.boogu_image import BooguImagePipeline, ModelConfig +import torch + + +vram_config = { + "offload_dtype": torch.float8_e4m3fn, + "offload_device": "cpu", + "onload_dtype": torch.float8_e4m3fn, + "onload_device": "cpu", + "preparing_dtype": torch.float8_e4m3fn, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} + +pipe = BooguImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Boogu/Boogu-Image-0.1-Base", origin_file_pattern="transformer/*.safetensors", **vram_config), + ModelConfig(model_id="Boogu/Boogu-Image-0.1-Base", origin_file_pattern="mllm/*.safetensors", **vram_config), + ModelConfig(model_id="Boogu/Boogu-Image-0.1-Base", origin_file_pattern="vae/*.safetensors", **vram_config), + ], + processor_config=ModelConfig(model_id="Boogu/Boogu-Image-0.1-Base", origin_file_pattern="mllm/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) + +output = pipe( + prompt="a cat", + negative_prompt="", + height=1024, + width=1024, + seed=42, + num_inference_steps=50, + cfg_scale=4.0, +) +output.save("image_Boogu-Image-0.1-Base.jpg") +``` + +## Model Overview + +|Model ID|Inference|Low VRAM Inference|Full Training|Full Training Validation|LoRA Training|LoRA Training Validation| +|-|-|-|-|-|-|-| +|[Boogu/Boogu-Image-0.1-Base](https://modelscope.cn/models/Boogu/Boogu-Image-0.1-Base)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/boogu_image/model_inference/Boogu-Image-0.1-Base.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/boogu_image/model_inference_low_vram/Boogu-Image-0.1-Base.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/boogu_image/model_training/full/Boogu-Image-0.1-Base.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/boogu_image/model_training/validate_full/Boogu-Image-0.1-Base.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/boogu_image/model_training/lora/Boogu-Image-0.1-Base.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/boogu_image/model_training/validate_lora/Boogu-Image-0.1-Base.py)| +|[Boogu/Boogu-Image-0.1-Turbo](https://modelscope.cn/models/Boogu/Boogu-Image-0.1-Turbo)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/boogu_image/model_inference/Boogu-Image-0.1-Turbo.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/boogu_image/model_inference_low_vram/Boogu-Image-0.1-Turbo.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/boogu_image/model_training/full/Boogu-Image-0.1-Turbo.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/boogu_image/model_training/validate_full/Boogu-Image-0.1-Turbo.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/boogu_image/model_training/lora/Boogu-Image-0.1-Turbo.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/boogu_image/model_training/validate_lora/Boogu-Image-0.1-Turbo.py)| +|[Boogu/Boogu-Image-0.1-Edit](https://modelscope.cn/models/Boogu/Boogu-Image-0.1-Edit)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/boogu_image/model_inference/Boogu-Image-0.1-Edit.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/boogu_image/model_inference_low_vram/Boogu-Image-0.1-Edit.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/boogu_image/model_training/full/Boogu-Image-0.1-Edit.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/boogu_image/model_training/validate_full/Boogu-Image-0.1-Edit.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/boogu_image/model_training/lora/Boogu-Image-0.1-Edit.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/boogu_image/model_training/validate_lora/Boogu-Image-0.1-Edit.py)| + +## Model Inference + +The model is loaded via `BooguImagePipeline.from_pretrained`, see [Loading Models](../Pipeline_Usage/Model_Inference.md#loading-models) for details. + +The input parameters for `BooguImagePipeline` inference include: + +* `prompt`: Text prompt describing the desired content or editing instruction. +* `negative_prompt`: Negative prompt specifying what should not appear in the result, defaults to empty string. +* `cfg_scale`: Classifier-free guidance scale factor, defaults to 4.0. Higher values make the output more closely follow the prompt. +* `input_image`: Input image for image-to-image (img2img). When provided, the input image is noised and denoised according to `denoising_strength`. +* `edit_image`: Image to be edited for instruction-guided editing. When provided, the model modifies the image according to the `prompt` instruction. +* `height`: Height of the output image, defaults to 1024. Must be divisible by 16. +* `width`: Width of the output image, defaults to 1024. Must be divisible by 16. +* `seed`: Random seed for reproducibility. Set to `None` for random seed. +* `denoising_strength`: Denoising strength controlling how much the input image is repainted, defaults to 1.0. Only effective when `input_image` is provided. +* `sigmas`: Custom sigma scheduling sequence to override the default scheduling strategy. Required for Turbo models. +* `num_inference_steps`: Number of inference steps, defaults to 20. More steps typically yield better quality. +* `max_sequence_length`: Maximum sequence length for the text encoder, defaults to 1280. +* `max_input_image_pixels`: Maximum pixel area for input images, defaults to 4194304. Images larger than this will be scaled down. +* `max_input_image_side_length`: Maximum side length for input images, defaults to 4096. +* `max_vlm_input_pil_pixels`: Maximum pixel area for VLM input images, defaults to 147456. Only effective in image editing mode. +* `max_vlm_input_pil_side_length`: Maximum side length for VLM input images, defaults to 768. Only effective in image editing mode. +* `rand_device`: Device for generating initial noise, defaults to "cpu". +* `progress_bar_cmd`: Progress bar display mode, defaults to tqdm. + +When running low on VRAM, please refer to [VRAM Management](../Pipeline_Usage/VRAM_management.md) to enable VRAM management features. + +## Model Training + +Models in the boogu_image series are trained uniformly via `examples/boogu_image/model_training/train.py`. The script parameters include: + +* General Training Parameters + * Dataset Configuration + * `--dataset_base_path`: Root directory of the dataset. + * `--dataset_metadata_path`: Path to the dataset metadata file. + * `--dataset_repeat`: Number of dataset repeats per epoch. + * `--dataset_num_workers`: Number of processes per DataLoader. + * `--data_file_keys`: Field names to load from metadata, typically paths to image or video files, separated by `,`. + * Model Loading Configuration + * `--model_paths`: Paths to load models from, in JSON format. + * `--model_id_with_origin_paths`: Model IDs with original paths, separated by commas. + * `--extra_inputs`: Additional input parameters required by the model Pipeline, separated by `,`. + * `--fp8_models`: Models to load in FP8 format, currently only supported for models whose parameters are not updated by gradients. + * `--quant_options`: Dynamically quantize loaded models. Semicolon-separated entries, each `:[/]`, where `` matches an entry in `--model_paths`/`--model_id_with_origin_paths`, `method` is a registered method (e.g. `bitsandbytes_nf4`), and `exclude_modules` optionally lists layers kept in full precision. + * Basic Training Configuration + * `--learning_rate`: Learning rate. + * `--num_epochs`: Number of epochs. + * `--trainable_models`: Trainable models, e.g., `dit`, `vae`, `text_encoder`. + * `--find_unused_parameters`: Whether unused parameters exist in DDP training. + * `--weight_decay`: Weight decay magnitude. + * `--task`: Training task, defaults to `sft`. + * Output Configuration + * `--output_path`: Path to save the model. + * `--remove_prefix_in_ckpt`: Remove prefix in the model's state dict. + * `--save_steps`: Interval in training steps to save the model. + * LoRA Configuration + * `--lora_base_model`: Which model to add LoRA to. + * `--lora_target_modules`: Which layers to add LoRA to. + * `--lora_rank`: Rank of LoRA. + * `--lora_checkpoint`: Path to LoRA checkpoint. + * `--preset_lora_path`: Path to preset LoRA checkpoint for LoRA differential training. + * `--preset_lora_model`: Which model to integrate preset LoRA into, e.g., `dit`. + * Gradient Configuration + * `--use_gradient_checkpointing`: Whether to enable gradient checkpointing. + * `--use_gradient_checkpointing_offload`: Whether to offload gradient checkpointing to CPU memory. + * `--gradient_accumulation_steps`: Number of gradient accumulation steps. + * Resolution Configuration + * `--height`: Height of the image/video. Leave empty to enable dynamic resolution. + * `--width`: Width of the image/video. Leave empty to enable dynamic resolution. + * `--max_pixels`: Maximum pixel area, images larger than this will be scaled down during dynamic resolution. + * `--num_frames`: Number of frames for video (video generation models only). +* Boogu-Image Specific Parameters + * `--processor_path`: Path to the processor for processing text and image encoder inputs. + * `--initialize_model_on_cpu`: Whether to initialize models on CPU. By default, models are initialized on the accelerator device. + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --local_dir ./data/diffsynth_example_dataset +``` + +We provide recommended training scripts for each model, please refer to the table in "Model Overview" above. For guidance on writing model training scripts, see [Model Training](../Pipeline_Usage/Model_Training.md); for more advanced training algorithms, see [Training Framework Overview](https://github.com/modelscope/DiffSynth-Studio/tree/main/docs/en/Training/). diff --git a/docs/en/Model_Details/ERNIE-Image.md b/docs/en/Model_Details/ERNIE-Image.md new file mode 100644 index 0000000000000000000000000000000000000000..f55a03e6f69df52c061fab711b28a4773863577d --- /dev/null +++ b/docs/en/Model_Details/ERNIE-Image.md @@ -0,0 +1,135 @@ +# ERNIE-Image + +ERNIE-Image is a powerful image generation model with 8B parameters developed by Baidu, featuring a compact and efficient architecture with strong instruction-following capability. Based on an 8B DiT backbone, it delivers performance comparable to larger (20B+) models in certain scenarios while maintaining parameter efficiency. It offers reliable performance in instruction understanding and execution, text generation (English/Chinese/Japanese), and overall stability. + +## Installation + +Before performing model inference and training, please install DiffSynth-Studio first. + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +For more information on installation, please refer to [Setup Dependencies](../Pipeline_Usage/Setup.md). + +## Quick Start + +Running the following code will load the [PaddlePaddle/ERNIE-Image](https://www.modelscope.cn/models/PaddlePaddle/ERNIE-Image) model for inference. VRAM management is enabled, the framework automatically controls parameter loading based on available VRAM, requiring a minimum of 3G VRAM. + +```python +from diffsynth.pipelines.ernie_image import ErnieImagePipeline, ModelConfig +import torch + +vram_config = { + "offload_dtype": torch.bfloat16, + "offload_device": "cpu", + "onload_dtype": torch.bfloat16, + "onload_device": "cpu", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} +pipe = ErnieImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device='cuda', + model_configs=[ + ModelConfig(model_id="PaddlePaddle/ERNIE-Image", origin_file_pattern="transformer/diffusion_pytorch_model*.safetensors", **vram_config), + ModelConfig(model_id="PaddlePaddle/ERNIE-Image", origin_file_pattern="text_encoder/model.safetensors", **vram_config), + ModelConfig(model_id="PaddlePaddle/ERNIE-Image", origin_file_pattern="vae/diffusion_pytorch_model.safetensors", **vram_config), + ], + tokenizer_config=ModelConfig(model_id="PaddlePaddle/ERNIE-Image", origin_file_pattern="tokenizer/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) + +image = pipe( + prompt="一只黑白相间的中华田园犬", + negative_prompt="", + height=1024, + width=1024, + seed=42, + num_inference_steps=50, + cfg_scale=4.0, +) +image.save("output.jpg") +``` + +## Model Overview + +|Model ID|Inference|Low VRAM Inference|Full Training|Full Training Validation|LoRA Training|LoRA Training Validation| +|-|-|-|-|-|-|-| +|[PaddlePaddle/ERNIE-Image](https://www.modelscope.cn/models/PaddlePaddle/ERNIE-Image)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ernie_image/model_inference/ERNIE-Image.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ernie_image/model_inference_low_vram/ERNIE-Image.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ernie_image/model_training/full/ERNIE-Image.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ernie_image/model_training/validate_full/ERNIE-Image.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ernie_image/model_training/lora/ERNIE-Image.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ernie_image/model_training/validate_lora/ERNIE-Image.py)| +|[PaddlePaddle/ERNIE-Image-Turbo](https://www.modelscope.cn/models/PaddlePaddle/ERNIE-Image-Turbo)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ernie_image/model_inference/ERNIE-Image-Turbo.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ernie_image/model_inference_low_vram/ERNIE-Image-Turbo.py)|—|—|—|—| + +## Model Inference + +The model is loaded via `ErnieImagePipeline.from_pretrained`, see [Loading Models](../Pipeline_Usage/Model_Inference.md#loading-models) for details. + +The input parameters for `ErnieImagePipeline` inference include: + +* `prompt`: The prompt describing the content to appear in the image. +* `negative_prompt`: The negative prompt describing what should not appear in the image, default value is `""`. +* `cfg_scale`: Classifier-free guidance parameter, default value is 4.0. +* `height`: Image height, must be a multiple of 16, default value is 1024. +* `width`: Image width, must be a multiple of 16, default value is 1024. +* `seed`: Random seed. Default is `None`, meaning completely random. +* `rand_device`: The computing device for generating random Gaussian noise matrices, default is `"cuda"`. When set to `cuda`, different GPUs will produce different results. +* `num_inference_steps`: Number of inference steps, default value is 50. + +If VRAM is insufficient, please enable [VRAM Management](../Pipeline_Usage/VRAM_management.md). We provide recommended low-VRAM configurations for each model in the "Model Overview" table above. + +## Model Training + +ERNIE-Image series models are trained uniformly via [`examples/ernie_image/model_training/train.py`](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ernie_image/model_training/train.py). The script parameters include: + +* General Training Parameters + * Dataset Configuration + * `--dataset_base_path`: Root directory of the dataset. + * `--dataset_metadata_path`: Path to the dataset metadata file. + * `--dataset_repeat`: Number of dataset repeats per epoch. + * `--dataset_num_workers`: Number of processes per DataLoader. + * `--data_file_keys`: Field names to load from metadata, typically paths to image or video files, separated by `,`. + * Model Loading Configuration + * `--model_paths`: Paths to load models from, in JSON format. + * `--model_id_with_origin_paths`: Model IDs with original paths, e.g., `"PaddlePaddle/ERNIE-Image:transformer/diffusion_pytorch_model*.safetensors"`, separated by commas. + * `--extra_inputs`: Additional input parameters required by the model Pipeline, separated by `,`. + * `--fp8_models`: Models to load in FP8 format, currently only supported for models whose parameters are not updated by gradients. + * `--quant_options`: Dynamically quantize loaded models. Semicolon-separated entries, each `:[/]`, where `` matches an entry in `--model_paths`/`--model_id_with_origin_paths`, `method` is a registered method (e.g. `bitsandbytes_nf4`), and `exclude_modules` optionally lists layers kept in full precision. + * Basic Training Configuration + * `--learning_rate`: Learning rate. + * `--num_epochs`: Number of epochs. + * `--trainable_models`: Trainable models, e.g., `dit`, `vae`, `text_encoder`. + * `--find_unused_parameters`: Whether unused parameters exist in DDP training. + * `--weight_decay`: Weight decay magnitude. + * `--task`: Training task, defaults to `sft`. + * Output Configuration + * `--output_path`: Path to save the model. + * `--remove_prefix_in_ckpt`: Remove prefix in the model's state dict. + * `--save_steps`: Interval in training steps to save the model. + * LoRA Configuration + * `--lora_base_model`: Which model to add LoRA to. + * `--lora_target_modules`: Which layers to add LoRA to. + * `--lora_rank`: Rank of LoRA. + * `--lora_checkpoint`: Path to LoRA checkpoint. + * `--preset_lora_path`: Path to preset LoRA checkpoint for LoRA differential training. + * `--preset_lora_model`: Which model to integrate preset LoRA into, e.g., `dit`. + * Gradient Configuration + * `--use_gradient_checkpointing`: Whether to enable gradient checkpointing. + * `--use_gradient_checkpointing_offload`: Whether to offload gradient checkpointing to CPU memory. + * `--gradient_accumulation_steps`: Number of gradient accumulation steps. + * Resolution Configuration + * `--height`: Height of the image. Leave empty to enable dynamic resolution. + * `--width`: Width of the image. Leave empty to enable dynamic resolution. + * `--max_pixels`: Maximum pixel area, images larger than this will be scaled down during dynamic resolution. +* ERNIE-Image Specific Parameters + * `--tokenizer_path`: Path to the tokenizer, leave empty to auto-download from remote. + +We provide an example image dataset for testing, which can be downloaded with the following command: + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --local_dir ./data/diffsynth_example_dataset +``` + +We provide recommended training scripts for each model, please refer to the table in "Model Overview" above. For guidance on writing model training scripts, see [Model Training](../Pipeline_Usage/Model_Training.md); for more advanced training algorithms, see [Training Framework Overview](https://github.com/modelscope/DiffSynth-Studio/tree/main/docs/en/Training/). diff --git a/docs/en/Model_Details/FLUX.md b/docs/en/Model_Details/FLUX.md new file mode 100644 index 0000000000000000000000000000000000000000..c62273da0511e2a15dfa300dcf18e43f6b78e20b --- /dev/null +++ b/docs/en/Model_Details/FLUX.md @@ -0,0 +1,185 @@ +# FLUX + +![Image](https://github.com/user-attachments/assets/c01258e2-f251-441a-aa1e-ebb22f02594d) + +FLUX is an image generation model series developed and open-sourced by Black Forest Labs. + +## Installation + +Before using this project for model inference and training, please install DiffSynth-Studio first. + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +For more information about installation, please refer to [Install Dependencies](../Pipeline_Usage/Setup.md). + +## Quick Start + +Run the following code to quickly load the [black-forest-labs/FLUX.1-dev](https://www.modelscope.cn/models/black-forest-labs/FLUX.1-dev) model and perform inference. VRAM management is enabled, and the framework will automatically control model parameter loading based on remaining VRAM. Minimum 8GB VRAM is required to run. + +```python +import torch +from diffsynth.pipelines.flux_image import FluxImagePipeline, ModelConfig + +vram_config = { + "offload_dtype": torch.float8_e4m3fn, + "offload_device": "cpu", + "onload_dtype": torch.float8_e4m3fn, + "onload_device": "cpu", + "preparing_dtype": torch.float8_e4m3fn, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} +pipe = FluxImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="black-forest-labs/FLUX.1-dev", origin_file_pattern="flux1-dev.safetensors", **vram_config), + ModelConfig(model_id="black-forest-labs/FLUX.1-dev", origin_file_pattern="text_encoder/model.safetensors", **vram_config), + ModelConfig(model_id="black-forest-labs/FLUX.1-dev", origin_file_pattern="text_encoder_2/*.safetensors", **vram_config), + ModelConfig(model_id="black-forest-labs/FLUX.1-dev", origin_file_pattern="ae.safetensors", **vram_config), + ], + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 1, +) +prompt = "CG, masterpiece, best quality, solo, long hair, wavy hair, silver hair, blue eyes, blue dress, medium breasts, dress, underwater, air bubble, floating hair, refraction, portrait. The girl's flowing silver hair shimmers with every color of the rainbow and cascades down, merging with the floating flora around her." +image = pipe(prompt=prompt, seed=0) +image.save("image.jpg") +``` + +## Model Overview + +| Model ID | Extra Parameters | Inference | Low VRAM Inference | Full Training | Validation After Full Training | LoRA Training | Validation After LoRA Training | +| - | - | - | - | - | - | - | - | +| [black-forest-labs/FLUX.1-dev](https://www.modelscope.cn/models/black-forest-labs/FLUX.1-dev) | | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference/FLUX.1-dev.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference_low_vram/FLUX.1-dev.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/full/FLUX.1-dev.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_full/FLUX.1-dev.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/lora/FLUX.1-dev.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_lora/FLUX.1-dev.py) | +| [black-forest-labs/FLUX.1-Krea-dev](https://www.modelscope.cn/models/black-forest-labs/FLUX.1-Krea-dev) | | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference/FLUX.1-Krea-dev.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference_low_vram/FLUX.1-Krea-dev.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/full/FLUX.1-Krea-dev.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_full/FLUX.1-Krea-dev.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/lora/FLUX.1-Krea-dev.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_lora/FLUX.1-Krea-dev.py) | +| [black-forest-labs/FLUX.1-Kontext-dev](https://www.modelscope.cn/models/black-forest-labs/FLUX.1-Kontext-dev) | `kontext_images` | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference/FLUX.1-Kontext-dev.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference_low_vram/FLUX.1-Kontext-dev.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/full/FLUX.1-Kontext-dev.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_full/FLUX.1-Kontext-dev.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/lora/FLUX.1-Kontext-dev.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_lora/FLUX.1-Kontext-dev.py) | +| [black-forest-labs/FLUX.1-Fill-dev](https://www.modelscope.cn/models/black-forest-labs/FLUX.1-Fill-dev) | `flux_fill_image`, `flux_fill_mask` | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference/FLUX.1-Fill-dev.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference_low_vram/FLUX.1-Fill-dev.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/full/FLUX.1-Fill-dev.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_full/FLUX.1-Fill-dev.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/lora/FLUX.1-Fill-dev.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_lora/FLUX.1-Fill-dev.py) | +| [black-forest-labs/FLUX.1-Redux-dev](https://www.modelscope.cn/models/black-forest-labs/FLUX.1-Redux-dev) | `flux_redux_image` | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference/FLUX.1-Redux-dev.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference_low_vram/FLUX.1-Redux-dev.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/full/FLUX.1-Redux-dev.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_full/FLUX.1-Redux-dev.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/lora/FLUX.1-Redux-dev.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_lora/FLUX.1-Redux-dev.py) | +| [HuanJue/Insert-Anything](https://www.modelscope.cn/models/HuanJue/Insert-Anything) | `insert_anything_source_image`, `insert_anything_source_mask`, `insert_anything_ref_image`, `insert_anything_ref_mask` | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference/Insert-Anything.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference_low_vram/Insert-Anything.py) | - | - | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/lora/Insert-Anything.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_lora/Insert-Anything.py) | +| [alimama-creative/FLUX.1-dev-Controlnet-Inpainting-Beta](https://www.modelscope.cn/models/alimama-creative/FLUX.1-dev-Controlnet-Inpainting-Beta) | `controlnet_inputs` | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference/FLUX.1-dev-Controlnet-Inpainting-Beta.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference_low_vram/FLUX.1-dev-Controlnet-Inpainting-Beta.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/full/FLUX.1-dev-Controlnet-Inpainting-Beta.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_full/FLUX.1-dev-Controlnet-Inpainting-Beta.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/lora/FLUX.1-dev-Controlnet-Inpainting-Beta.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_lora/FLUX.1-dev-Controlnet-Inpainting-Beta.py) | +| [InstantX/FLUX.1-dev-Controlnet-Union-alpha](https://www.modelscope.cn/models/InstantX/FLUX.1-dev-Controlnet-Union-alpha) | `controlnet_inputs` | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference/FLUX.1-dev-Controlnet-Union-alpha.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference_low_vram/FLUX.1-dev-Controlnet-Union-alpha.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/full/FLUX.1-dev-Controlnet-Union-alpha.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_full/FLUX.1-dev-Controlnet-Union-alpha.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/lora/FLUX.1-dev-Controlnet-Union-alpha.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_lora/FLUX.1-dev-Controlnet-Union-alpha.py) | +| [jasperai/Flux.1-dev-Controlnet-Upscaler](https://www.modelscope.cn/models/jasperai/Flux.1-dev-Controlnet-Upscaler) | `controlnet_inputs` | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference/FLUX.1-dev-Controlnet-Upscaler.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference_low_vram/FLUX.1-dev-Controlnet-Upscaler.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/full/FLUX.1-dev-Controlnet-Upscaler.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_full/FLUX.1-dev-Controlnet-Upscaler.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/lora/FLUX.1-dev-Controlnet-Upscaler.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_lora/FLUX.1-dev-Controlnet-Upscaler.py) | +| [InstantX/FLUX.1-dev-IP-Adapter](https://www.modelscope.cn/models/InstantX/FLUX.1-dev-IP-Adapter) | `ipadapter_images`, `ipadapter_scale` | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference/FLUX.1-dev-IP-Adapter.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference_low_vram/FLUX.1-dev-IP-Adapter.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/full/FLUX.1-dev-IP-Adapter.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_full/FLUX.1-dev-IP-Adapter.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/lora/FLUX.1-dev-IP-Adapter.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_lora/FLUX.1-dev-IP-Adapter.py) | +| [ByteDance/InfiniteYou](https://www.modelscope.cn/models/ByteDance/InfiniteYou) | `infinityou_id_image`, `infinityou_guidance`, `controlnet_inputs` | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference/FLUX.1-dev-InfiniteYou.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference_low_vram/FLUX.1-dev-InfiniteYou.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/full/FLUX.1-dev-InfiniteYou.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_full/FLUX.1-dev-InfiniteYou.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/lora/FLUX.1-dev-InfiniteYou.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_lora/FLUX.1-dev-InfiniteYou.py) | +| [DiffSynth-Studio/Eligen](https://www.modelscope.cn/models/DiffSynth-Studio/Eligen) | `eligen_entity_prompts`, `eligen_entity_masks`, `eligen_enable_on_negative`, `eligen_enable_inpaint` | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference/FLUX.1-dev-EliGen.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference_low_vram/FLUX.1-dev-EliGen.py) | - | - | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/lora/FLUX.1-dev-EliGen.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_lora/FLUX.1-dev-EliGen.py) | +| [DiffSynth-Studio/LoRA-Encoder-FLUX.1-Dev](https://www.modelscope.cn/models/DiffSynth-Studio/LoRA-Encoder-FLUX.1-Dev) | `lora_encoder_inputs`, `lora_encoder_scale` | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference/FLUX.1-dev-LoRA-Encoder.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference_low_vram/FLUX.1-dev-LoRA-Encoder.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/full/FLUX.1-dev-LoRA-Encoder.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_full/FLUX.1-dev-LoRA-Encoder.py) | - | - | +| [DiffSynth-Studio/LoRAFusion-preview-FLUX.1-dev](https://modelscope.cn/models/DiffSynth-Studio/LoRAFusion-preview-FLUX.1-dev) | | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference/FLUX.1-dev-LoRA-Fusion.py) | - | - | - | - | - | +| [stepfun-ai/Step1X-Edit](https://www.modelscope.cn/models/stepfun-ai/Step1X-Edit) | `step1x_reference_image` | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference/Step1X-Edit.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference_low_vram/Step1X-Edit.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/full/Step1X-Edit.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_full/Step1X-Edit.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/lora/Step1X-Edit.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_lora/Step1X-Edit.py) | +| [ostris/Flex.2-preview](https://www.modelscope.cn/models/ostris/Flex.2-preview) | `flex_inpaint_image`, `flex_inpaint_mask`, `flex_control_image`, `flex_control_strength`, `flex_control_stop` | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference/FLEX.2-preview.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference_low_vram/FLEX.2-preview.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/full/FLEX.2-preview.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_full/FLEX.2-preview.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/lora/FLEX.2-preview.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_lora/FLEX.2-preview.py) | +| [DiffSynth-Studio/Nexus-GenV2](https://www.modelscope.cn/models/DiffSynth-Studio/Nexus-GenV2) | `nexus_gen_reference_image` | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference/Nexus-Gen-Editing.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference_low_vram/Nexus-Gen-Editing.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/full/Nexus-Gen.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_full/Nexus-Gen.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/lora/Nexus-Gen.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_lora/Nexus-Gen.py) | + +Special Training Scripts: + +* Differential LoRA Training: [doc](../Training/Differential_LoRA.md) +* FP8 Precision Training: [doc](../Training/FP8_Precision.md) +* Two-stage Split Training: [doc](../Training/Split_Training.md) +* End-to-end Direct Distillation: [doc](../Training/Direct_Distill.md) + +## Model Inference + +Models are loaded via `FluxImagePipeline.from_pretrained`, see [Loading Models](../Pipeline_Usage/Model_Inference.md#loading-models). + +Input parameters for `FluxImagePipeline` inference include: + +* `prompt`: Prompt describing the content appearing in the image. +* `negative_prompt`: Negative prompt describing content that should not appear in the image, default value is `""`. +* `cfg_scale`: Classifier-free guidance parameter, default value is 1. When set to a value greater than 1, CFG is enabled. +* `height`: Image height, must be a multiple of 16. +* `width`: Image width, must be a multiple of 16. +* `seed`: Random seed. Default is `None`, meaning completely random. +* `rand_device`: Computing device for generating random Gaussian noise matrix, default is `"cpu"`. When set to `cuda`, different GPUs will produce different generation results. +* `num_inference_steps`: Number of inference steps, default value is 30. +* `embedded_guidance`: Embedded guidance parameter, default value is 3.5. +* `t5_sequence_length`: Sequence length of the T5 text encoder, default is 512. +* `tiled`: Whether to enable VAE tiling inference, default is `False`. Setting to `True` can significantly reduce VRAM usage during VAE encoding/decoding stages, producing slight errors and slightly longer inference time. +* `tile_size`: Tile size during VAE encoding/decoding stages, default is 128, only effective when `tiled=True`. +* `tile_stride`: Tile stride during VAE encoding/decoding stages, default is 64, only effective when `tiled=True`, must be less than or equal to `tile_size`. +* `progress_bar_cmd`: Progress bar, default is `tqdm.tqdm`. Can be disabled by setting to `lambda x:x`. +* `controlnet_inputs`: ControlNet model inputs, type is `ControlNetInput` list. +* `ipadapter_images`: IP-Adapter model input image list. +* `ipadapter_scale`: Guidance strength of the IP-Adapter model. +* `infinityou_id_image`: InfiniteYou model input image. +* `infinityou_guidance`: Guidance strength of the InfiniteYou model. +* `kontext_images`: Kontext model input images. +* `eligen_entity_prompts`: EliGen partition control prompt list. +* `eligen_entity_masks`: EliGen partition control region mask image list. +* `eligen_enable_on_negative`: Whether to enable EliGen partition control on the negative side of CFG. +* `eligen_enable_inpaint`: Whether to enable EliGen partition control inpainting function. +* `lora_encoder_inputs`: LoRA encoder input image list. +* `lora_encoder_scale`: Guidance strength of the LoRA encoder. +* `step1x_reference_image`: Step1X model reference image. +* `flex_inpaint_image`: Flex model image to be inpainted. +* `flex_inpaint_mask`: Flex model inpainting mask. +* `flex_control_image`: Flex model control image. +* `flex_control_strength`: Flex model control strength. +* `flex_control_stop`: Flex model control stop timestep. +* `nexus_gen_reference_image`: Nexus-Gen model reference image. +* `flux_fill_image`: FLUX.1-Fill model image to be inpainted. +* `flux_fill_mask`: FLUX.1-Fill model inpainting mask. +* `flux_redux_image`: FLUX.1-Redux model reference image. +* `insert_anything_source_image`: Insert-Anything model source image, i.e., the target image to be edited. +* `insert_anything_source_mask`: Insert-Anything model source image mask, specifying the region to be edited. +* `insert_anything_ref_image`: Insert-Anything model reference image, providing the content to be inserted. +* `insert_anything_ref_mask`: Insert-Anything model reference image mask, specifying the target object in the reference image. + +If VRAM is insufficient, please enable [VRAM Management](../Pipeline_Usage/VRAM_management.md). We provide recommended low VRAM configurations for each model in the example code, see the table in the "Model Overview" section above. + +## Model Training + +FLUX series models are uniformly trained through [`examples/flux/model_training/train.py`](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/train.py), and the script parameters include: + +* General Training Parameters + * Dataset Basic Configuration + * `--dataset_base_path`: Root directory of the dataset. + * `--dataset_metadata_path`: Metadata file path of the dataset. + * `--dataset_repeat`: Number of times the dataset is repeated in each epoch. + * `--dataset_num_workers`: Number of processes for each DataLoader. + * `--data_file_keys`: Field names to be loaded from metadata, usually image or video file paths, separated by `,`. + * Model Loading Configuration + * `--model_paths`: Paths of models to be loaded. JSON format. + * `--model_id_with_origin_paths`: Model IDs with original paths, e.g., `"black-forest-labs/FLUX.1-dev:flux1-dev.safetensors"`. Separated by commas. + * `--extra_inputs`: Extra input parameters required by the model Pipeline, e.g., `controlnet_inputs` when training ControlNet models, separated by `,`. + * `--fp8_models`: Models loaded in FP8 format, consistent with `--model_paths` or `--model_id_with_origin_paths` format. Currently only supports models whose parameters are not updated by gradients (no gradient backpropagation, or gradients only update their LoRA). + * `--quant_options`: Dynamically quantize loaded models. Semicolon-separated entries, each `:[/]`, where `` matches an entry in `--model_paths`/`--model_id_with_origin_paths`, `method` is a registered method (e.g. `bitsandbytes_nf4`), and `exclude_modules` optionally lists layers kept in full precision. + * Training Basic Configuration + * `--learning_rate`: Learning rate. + * `--num_epochs`: Number of epochs. + * `--trainable_models`: Trainable models, e.g., `dit`, `vae`, `text_encoder`. + * `--find_unused_parameters`: Whether there are unused parameters in DDP training. Some models contain redundant parameters that do not participate in gradient calculation, and this setting needs to be enabled to avoid errors in multi-GPU training. + * `--weight_decay`: Weight decay size, see [torch.optim.AdamW](https://docs.pytorch.org/docs/stable/generated/torch.optim.AdamW.html). + * `--task`: Training task, default is `sft`. Some models support more training modes, please refer to the documentation of each specific model. + * Output Configuration + * `--output_path`: Model saving path. + * `--remove_prefix_in_ckpt`: Remove prefix in the state dict of the model file. + * `--save_steps`: Interval of training steps to save the model. If this parameter is left blank, the model is saved once per epoch. + * LoRA Configuration + * `--lora_base_model`: Which model to add LoRA to. + * `--lora_target_modules`: Which layers to add LoRA to. + * `--lora_rank`: Rank of LoRA. + * `--lora_checkpoint`: Path of the LoRA checkpoint. If this path is provided, LoRA will be loaded from this checkpoint. + * `--preset_lora_path`: Preset LoRA checkpoint path. If this path is provided, this LoRA will be loaded in the form of being merged into the base model. This parameter is used for LoRA differential training. + * `--preset_lora_model`: Model that the preset LoRA is merged into, e.g., `dit`. + * Gradient Configuration + * `--use_gradient_checkpointing`: Whether to enable gradient checkpointing. + * `--use_gradient_checkpointing_offload`: Whether to offload gradient checkpointing to memory. + * `--gradient_accumulation_steps`: Number of gradient accumulation steps. + * Image Width/Height Configuration (Applicable to Image Generation and Video Generation Models) + * `--height`: Height of image or video. Leave `height` and `width` blank to enable dynamic resolution. + * `--width`: Width of image or video. Leave `height` and `width` blank to enable dynamic resolution. + * `--max_pixels`: Maximum pixel area of image or video frames. When dynamic resolution is enabled, images with resolution larger than this value will be downscaled, and images with resolution smaller than this value will remain unchanged. +* FLUX Specific Parameters + * `--tokenizer_1_path`: Path of the CLIP tokenizer, leave blank to automatically download from remote. + * `--tokenizer_2_path`: Path of the T5 tokenizer, leave blank to automatically download from remote. + * `--align_to_opensource_format`: Whether to align LoRA format to open-source format, only applicable to DiT's LoRA. + +We have built a sample image dataset for your testing. You can download this dataset with the following command: + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --local_dir ./data/diffsynth_example_dataset +``` + +We have written recommended training scripts for each model, please refer to the table in the "Model Overview" section above. For how to write model training scripts, please refer to [Model Training](../Pipeline_Usage/Model_Training.md); for more advanced training algorithms, please refer to [Training Framework Detailed Explanation](https://github.com/modelscope/DiffSynth-Studio/tree/main/docs/en/Training/). diff --git a/docs/en/Model_Details/FLUX2.md b/docs/en/Model_Details/FLUX2.md new file mode 100644 index 0000000000000000000000000000000000000000..2ca1d51f366472df1bfad9d031fa28790f53eefa --- /dev/null +++ b/docs/en/Model_Details/FLUX2.md @@ -0,0 +1,155 @@ +# FLUX.2 + +FLUX.2 is an image generation model trained and open-sourced by Black Forest Labs. + +## Installation + +Before using this project for model inference and training, please install DiffSynth-Studio first. + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +For more information about installation, please refer to [Install Dependencies](../Pipeline_Usage/Setup.md). + +## Quick Start + +Run the following code to quickly load the [black-forest-labs/FLUX.2-dev](https://www.modelscope.cn/models/black-forest-labs/FLUX.2-dev) model and perform inference. VRAM management is enabled, and the framework will automatically control model parameter loading based on remaining VRAM. Minimum 10GB VRAM is required to run. + +```python +from diffsynth.pipelines.flux2_image import Flux2ImagePipeline, ModelConfig +import torch + +vram_config = { + "offload_dtype": "disk", + "offload_device": "disk", + "onload_dtype": torch.float8_e4m3fn, + "onload_device": "cpu", + "preparing_dtype": torch.float8_e4m3fn, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} +pipe = Flux2ImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="black-forest-labs/FLUX.2-dev", origin_file_pattern="text_encoder/*.safetensors", **vram_config), + ModelConfig(model_id="black-forest-labs/FLUX.2-dev", origin_file_pattern="transformer/*.safetensors", **vram_config), + ModelConfig(model_id="black-forest-labs/FLUX.2-dev", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + tokenizer_config=ModelConfig(model_id="black-forest-labs/FLUX.2-dev", origin_file_pattern="tokenizer/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) +prompt = "High resolution. A dreamy underwater portrait of a serene young woman in a flowing blue dress. Her hair floats softly around her face, strands delicately suspended in the water. Clear, shimmering light filters through, casting gentle highlights, while tiny bubbles rise around her. Her expression is calm, her features finely detailed—creating a tranquil, ethereal scene." +image = pipe(prompt, seed=42, rand_device="cuda", num_inference_steps=50) +image.save("image.jpg") +``` + +## Model Overview + +| Model ID | Inference | Low VRAM Inference | Full Training | Validation After Full Training | LoRA Training | Validation After LoRA Training | +| - | - | - | - | - | - | - | +|[black-forest-labs/FLUX.2-dev](https://www.modelscope.cn/models/black-forest-labs/FLUX.2-dev)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/FLUX.2-dev.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/FLUX.2-dev.py)|-|-|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/lora/FLUX.2-dev.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_lora/FLUX.2-dev.py)| +|[black-forest-labs/FLUX.2-klein-4B](https://www.modelscope.cn/models/black-forest-labs/FLUX.2-klein-4B)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/FLUX.2-klein-4B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/FLUX.2-klein-4B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/FLUX.2-klein-4B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/FLUX.2-klein-4B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/lora/FLUX.2-klein-4B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_lora/FLUX.2-klein-4B.py)| +|[black-forest-labs/FLUX.2-klein-9B](https://www.modelscope.cn/models/black-forest-labs/FLUX.2-klein-9B)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/FLUX.2-klein-9B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/FLUX.2-klein-9B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/FLUX.2-klein-9B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/FLUX.2-klein-9B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/lora/FLUX.2-klein-9B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_lora/FLUX.2-klein-9B.py)| +|[black-forest-labs/FLUX.2-klein-base-4B](https://www.modelscope.cn/models/black-forest-labs/FLUX.2-klein-base-4B)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/FLUX.2-klein-base-4B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/FLUX.2-klein-base-4B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/FLUX.2-klein-base-4B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/FLUX.2-klein-base-4B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/lora/FLUX.2-klein-base-4B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_lora/FLUX.2-klein-base-4B.py)| +|[black-forest-labs/FLUX.2-klein-base-9B](https://www.modelscope.cn/models/black-forest-labs/FLUX.2-klein-base-9B)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/FLUX.2-klein-base-9B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/FLUX.2-klein-base-9B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/FLUX.2-klein-base-9B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/FLUX.2-klein-base-9B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/lora/FLUX.2-klein-base-9B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_lora/FLUX.2-klein-base-9B.py)| +|[DiffSynth-Studio/Template-KleinBase4B-Aesthetic](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Aesthetic)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-Aesthetic.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-Aesthetic.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-Aesthetic.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-Aesthetic.py)|-|-| +|[DiffSynth-Studio/Template-KleinBase4B-Brightness](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Brightness)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-Brightness.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-Brightness.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-Brightness.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-Brightness.py)|-|-| +|[DiffSynth-Studio/Template-KleinBase4B-Age](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Age)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-Age.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-Age.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-Age.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-Age.py)|-|-| +|[DiffSynth-Studio/Template-KleinBase4B-ControlNet](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-ControlNet)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-ControlNet.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-ControlNet.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-ControlNet.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-ControlNet.py)|-|-| +|[DiffSynth-Studio/Template-KleinBase4B-Edit](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Edit)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-Edit.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-Edit.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-Edit.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-Edit.py)|-|-| +|[DiffSynth-Studio/Template-KleinBase4B-Inpaint](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Inpaint)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-Inpaint.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-Inpaint.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-Inpaint.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-Inpaint.py)|-|-| +|[DiffSynth-Studio/Template-KleinBase4B-PandaMeme](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-PandaMeme)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-PandaMeme.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-PandaMeme.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-PandaMeme.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-PandaMeme.py)|-|-| +|[DiffSynth-Studio/Template-KleinBase4B-Sharpness](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Sharpness)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-Sharpness.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-Sharpness.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-Sharpness.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-Sharpness.py)|-|-| +|[DiffSynth-Studio/Template-KleinBase4B-SoftRGB](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-SoftRGB)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-SoftRGB.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-SoftRGB.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-SoftRGB.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-SoftRGB.py)|-|-| +|[DiffSynth-Studio/Template-KleinBase4B-Upscaler](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Upscaler)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-Upscaler.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-Upscaler.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-Upscaler.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-Upscaler.py)|-|-| +|[DiffSynth-Studio/Template-KleinBase4B-ContentRef](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-ContentRef)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-ContentRef.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-ContentRef.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-ContentRef.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-ContentRef.py)|-|-| +|[DiffSynth-Studio/KleinBase4B-i2L-v2](https://www.modelscope.cn/models/DiffSynth-Studio/KleinBase4B-i2L-v2)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/KleinBase4B-i2L-v2.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/KleinBase4B-i2L-v2.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/KleinBase4B-i2L-v2.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/KleinBase4B-i2L-v2.py)|-|-| + +Special Training Scripts: + +* Differential LoRA Training: [doc](../Training/Differential_LoRA.md) +* FP8 Precision Training: [doc](../Training/FP8_Precision.md) +* Two-stage Split Training: [doc](../Training/Split_Training.md) +* End-to-end Direct Distillation: [doc](../Training/Direct_Distill.md) + +## Model Inference + +Models are loaded via `Flux2ImagePipeline.from_pretrained`, see [Loading Models](../Pipeline_Usage/Model_Inference.md#loading-models). + +Input parameters for `Flux2ImagePipeline` inference include: + +* `prompt`: Prompt describing the content appearing in the image. +* `negative_prompt`: Negative prompt describing content that should not appear in the image, default value is `""`. +* `cfg_scale`: Classifier-free guidance parameter, default value is 1. When set to a value greater than 1, CFG is enabled. +* `height`: Image height, must be a multiple of 16. +* `width`: Image width, must be a multiple of 16. +* `seed`: Random seed. Default is `None`, meaning completely random. +* `rand_device`: Computing device for generating random Gaussian noise matrix, default is `"cpu"`. When set to `cuda`, different GPUs will produce different generation results. +* `num_inference_steps`: Number of inference steps, default value is 30. +* `embedded_guidance`: Embedded guidance parameter, default value is 3.5. +* `t5_sequence_length`: Sequence length of the T5 text encoder, default is 512. +* `tiled`: Whether to enable VAE tiling inference, default is `False`. Setting to `True` can significantly reduce VRAM usage during VAE encoding/decoding stages, producing slight errors and slightly longer inference time. +* `tile_size`: Tile size during VAE encoding/decoding stages, default is 128, only effective when `tiled=True`. +* `tile_stride`: Tile stride during VAE encoding/decoding stages, default is 64, only effective when `tiled=True`, must be less than or equal to `tile_size`. +* `progress_bar_cmd`: Progress bar, default is `tqdm.tqdm`. Can be disabled by setting to `lambda x:x`. + +If VRAM is insufficient, please enable [VRAM Management](../Pipeline_Usage/VRAM_management.md). We provide recommended low VRAM configurations for each model in the example code, see the table in the "Model Overview" section above. + +## Model Training + +FLUX.2 series models are uniformly trained through [`examples/flux2/model_training/train.py`](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/train.py), and the script parameters include: + +* General Training Parameters + * Dataset Basic Configuration + * `--dataset_base_path`: Root directory of the dataset. + * `--dataset_metadata_path`: Metadata file path of the dataset. + * `--dataset_repeat`: Number of times the dataset is repeated in each epoch. + * `--dataset_num_workers`: Number of processes for each DataLoader. + * `--data_file_keys`: Field names to be loaded from metadata, usually image or video file paths, separated by `,`. + * Model Loading Configuration + * `--model_paths`: Paths of models to be loaded. JSON format. + * `--model_id_with_origin_paths`: Model IDs with original paths, e.g., `"black-forest-labs/FLUX.2-dev:text_encoder/*.safetensors"`. Separated by commas. + * `--extra_inputs`: Extra input parameters required by the model Pipeline, e.g., `controlnet_inputs` when training ControlNet models, separated by `,`. + * `--fp8_models`: Models loaded in FP8 format, consistent with `--model_paths` or `--model_id_with_origin_paths` format. Currently only supports models whose parameters are not updated by gradients (no gradient backpropagation, or gradients only update their LoRA). + * `--quant_options`: Dynamically quantize loaded models. Semicolon-separated entries, each `:[/]`, where `` matches an entry in `--model_paths`/`--model_id_with_origin_paths`, `method` is a registered method (e.g. `bitsandbytes_nf4`), and `exclude_modules` optionally lists layers kept in full precision. + * Training Basic Configuration + * `--learning_rate`: Learning rate. + * `--num_epochs`: Number of epochs. + * `--trainable_models`: Trainable models, e.g., `dit`, `vae`, `text_encoder`. + * `--find_unused_parameters`: Whether there are unused parameters in DDP training. Some models contain redundant parameters that do not participate in gradient calculation, and this setting needs to be enabled to avoid errors in multi-GPU training. + * `--weight_decay`: Weight decay size, see [torch.optim.AdamW](https://docs.pytorch.org/docs/stable/generated/torch.optim.AdamW.html). + * `--task`: Training task, default is `sft`. Some models support more training modes, please refer to the documentation of each specific model. + * Output Configuration + * `--output_path`: Model saving path. + * `--remove_prefix_in_ckpt`: Remove prefix in the state dict of the model file. + * `--save_steps`: Interval of training steps to save the model. If this parameter is left blank, the model is saved once per epoch. + * LoRA Configuration + * `--lora_base_model`: Which model to add LoRA to. + * `--lora_target_modules`: Which layers to add LoRA to. + * `--lora_rank`: Rank of LoRA. + * `--lora_checkpoint`: Path of the LoRA checkpoint. If this path is provided, LoRA will be loaded from this checkpoint. + * `--preset_lora_path`: Preset LoRA checkpoint path. If this path is provided, this LoRA will be loaded in the form of being merged into the base model. This parameter is used for LoRA differential training. + * `--preset_lora_model`: Model that the preset LoRA is merged into, e.g., `dit`. + * Gradient Configuration + * `--use_gradient_checkpointing`: Whether to enable gradient checkpointing. + * `--use_gradient_checkpointing_offload`: Whether to offload gradient checkpointing to memory. + * `--gradient_accumulation_steps`: Number of gradient accumulation steps. + * Image Width/Height Configuration (Applicable to Image Generation and Video Generation Models) + * `--height`: Height of image or video. Leave `height` and `width` blank to enable dynamic resolution. + * `--width`: Width of image or video. Leave `height` and `width` blank to enable dynamic resolution. + * `--max_pixels`: Maximum pixel area of image or video frames. When dynamic resolution is enabled, images with resolution larger than this value will be downscaled, and images with resolution smaller than this value will remain unchanged. +* FLUX.2 Specific Parameters + * `--tokenizer_path`: Path of the tokenizer, applicable to text-to-image models, leave blank to automatically download from remote. + +We have built a sample image dataset for your testing. You can download this dataset with the following command: + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --local_dir ./data/diffsynth_example_dataset +``` + +We have written recommended training scripts for each model, please refer to the table in the "Model Overview" section above. For how to write model training scripts, please refer to [Model Training](../Pipeline_Usage/Model_Training.md); for more advanced training algorithms, please refer to [Training Framework Detailed Explanation](https://github.com/modelscope/DiffSynth-Studio/tree/main/docs/en/Training/). diff --git a/docs/en/Model_Details/HiDream-O1-Image.md b/docs/en/Model_Details/HiDream-O1-Image.md new file mode 100644 index 0000000000000000000000000000000000000000..e6c17a0b1074d445111559895aab7ef548980c7f --- /dev/null +++ b/docs/en/Model_Details/HiDream-O1-Image.md @@ -0,0 +1,143 @@ +# HiDream-O1-Image + +HiDream-O1-Image is an image generation model open-sourced by HiDream.ai, based on the Pixel-Level Unified Transformer (UiT) architecture. This model unifies VAE, DiT, and TextEncoder within a single Qwen3VLModel, performing diffusion denoising directly in pixel patch space without requiring a separate VAE component. + +## Installation + +Before performing model inference and training, please install DiffSynth-Studio first. + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +For more information on installation, please refer to [Setup Dependencies](../Pipeline_Usage/Setup.md). + +## Quick Start + +Running the following code will quickly load the [HiDream-ai/HiDream-O1-Image](https://modelscope.cn/HiDream-ai/HiDream-O1-Image) model for inference. VRAM management is enabled, the framework automatically controls parameter loading based on available VRAM, requiring a minimum of 3GB VRAM. + +```python +from diffsynth.pipelines.hidream_o1_image import HiDreamO1ImagePipeline +from diffsynth.core.loader.config import ModelConfig +import torch + + +vram_config = { + "offload_dtype": torch.bfloat16, + "offload_device": "cpu", + "onload_dtype": torch.bfloat16, + "onload_device": "cpu", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} + + +pipe = HiDreamO1ImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="HiDream-ai/HiDream-O1-Image", origin_file_pattern="model-*.safetensors", **vram_config), + ], + processor_config=ModelConfig(model_id="HiDream-ai/HiDream-O1-Image", origin_file_pattern="./"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) +image = pipe( + prompt="medium shot, eye-level, front view. A woman is seated in an ornate bedroom, illuminated by candlelight, with a calm and composed expression. The subject is a young woman with fair skin, light brown hair styled in an updo with loose tendrils framing her face, and blue eyes. She wears a cream-colored satin robe with delicate floral embroidery and lace trim along the neckline. Her ears are adorned with pearl drop earrings. She is seated on a bed with a dark, intricately carved wooden headboard. To her left, a wooden nightstand holds three lit white candles and a candelabra with multiple lit candles in the background. The bed is covered with patterned pillows and a dark, textured blanket. The walls are paneled with dark wood and feature a large, ornate tapestry with muted earth tones. The lighting creates soft highlights on her face and robe, with warm shadows cast across the room.", + negative_prompt=" ", + cfg_scale=4.0, + height=2048, + width=2048, + seed=42, + num_inference_steps=50, +) +image.save("image.jpg") +``` + +## Model Overview + +|Model ID|Inference|Low VRAM Inference|Full Training|Full Training Validation|LoRA Training|LoRA Training Validation| +|-|-|-|-|-|-|-| +|[HiDream-ai/HiDream-O1-Image](https://modelscope.cn/HiDream-ai/HiDream-O1-Image)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/hidream_o1_image/model_inference/HiDream-O1-Image.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/hidream_o1_image/model_inference_low_vram/HiDream-O1-Image.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/hidream_o1_image/model_training/full/HiDream-O1-Image.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/hidream_o1_image/model_training/validate_full/HiDream-O1-Image.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/hidream_o1_image/model_training/lora/HiDream-O1-Image.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/hidream_o1_image/model_training/validate_lora/HiDream-O1-Image.py)| +|[HiDream-ai/HiDream-O1-Image-Dev](https://modelscope.cn/HiDream-ai/HiDream-O1-Image-Dev)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/hidream_o1_image/model_inference/HiDream-O1-Image-Dev.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/hidream_o1_image/model_inference_low_vram/HiDream-O1-Image-Dev.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/hidream_o1_image/model_training/full/HiDream-O1-Image-Dev.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/hidream_o1_image/model_training/validate_full/HiDream-O1-Image-Dev.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/hidream_o1_image/model_training/lora/HiDream-O1-Image-Dev.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/hidream_o1_image/model_training/validate_lora/HiDream-O1-Image-Dev.py)| +|[DiffSynth-Studio/HidreamO1-i2L-v2](https://www.modelscope.cn/models/DiffSynth-Studio/HidreamO1-i2L-v2)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/hidream_o1_image/model_inference/HidreamO1-i2L-v2.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/hidream_o1_image/model_inference_low_vram/HidreamO1-i2L-v2.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/hidream_o1_image/model_training/full/HidreamO1-i2L-v2.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/hidream_o1_image/model_training/validate_full/HidreamO1-i2L-v2.py)|-|-| + +## Model Inference + +The model is loaded via `HiDreamO1ImagePipeline.from_pretrained`, see [Loading Models](../Pipeline_Usage/Model_Inference.md#loading-models) for details. + +The input parameters for `HiDreamO1ImagePipeline` inference include: + +* `prompt`: Text prompt. +* `negative_prompt`: Negative prompt, defaults to `" "`. +* `cfg_scale`: Classifier-Free Guidance scale, defaults to 4.0. For the Dev model, it is recommended to set to 1.0. +* `height`: Output image height, defaults to 2048. +* `width`: Output image width, defaults to 2048. +* `seed`: Random seed, defaults to random. +* `rand_device`: Noise generation device, defaults to `"cpu"`. +* `num_inference_steps`: Number of inference steps, defaults to 50 for Full model and 28 for Dev model. +* `model_type`: Model type, `"full"` for Full model, `"dev"` for distilled Dev model. +* `shift`: Timestep shift parameter affecting sigma computation, defaults to 3.0. +* `noise_scale`: Noise scaling factor, defaults to 8.0. For the Dev model, it is recommended to set to 7.5. +* `edit_image`: List of reference images for image editing. Defaults to None (text-to-image mode). +* `keep_original_aspect`: Whether to preserve the original aspect ratio of reference images, defaults to True. + +> **VRAM Note**: HiDream-O1-Image has a large parameter count (~8B). When generating 2048x2048 images, it is recommended to enable VRAM management (vram_config) or use the low VRAM inference scripts. + +## Model Training + +Models in the hidream_o1_image series are trained uniformly via `examples/hidream_o1_image/model_training/train.py`. The script parameters include: + +* General Training Parameters + * Dataset Configuration + * `--dataset_base_path`: Root directory of the dataset. + * `--dataset_metadata_path`: Path to the dataset metadata file. + * `--dataset_repeat`: Number of dataset repeats per epoch. + * `--dataset_num_workers`: Number of processes per DataLoader. + * `--data_file_keys`: Field names to load from metadata, typically paths to image or video files, separated by `,`. + * Model Loading Configuration + * `--model_paths`: Paths to load models from, in JSON format. + * `--model_id_with_origin_paths`: Model IDs with original paths, separated by commas. + * `--extra_inputs`: Additional input parameters required by the model Pipeline, separated by `,`. + * `--fp8_models`: Models to load in FP8 format, currently only supported for models whose parameters are not updated by gradients. + * `--quant_options`: Dynamically quantize loaded models. Semicolon-separated entries, each `:[/]`, where `` matches an entry in `--model_paths`/`--model_id_with_origin_paths`, `method` is a registered method (e.g. `bitsandbytes_nf4`), and `exclude_modules` optionally lists layers kept in full precision. + * Basic Training Configuration + * `--learning_rate`: Learning rate. + * `--num_epochs`: Number of epochs. + * `--trainable_models`: Trainable models, e.g., `dit`, `vae`, `text_encoder`. + * `--find_unused_parameters`: Whether unused parameters exist in DDP training. + * `--weight_decay`: Weight decay magnitude. + * `--task`: Training task, defaults to `sft`. + * Output Configuration + * `--output_path`: Path to save the model. + * `--remove_prefix_in_ckpt`: Remove prefix in the model's state dict. + * `--save_steps`: Interval in training steps to save the model. + * LoRA Configuration + * `--lora_base_model`: Which model to add LoRA to. + * `--lora_target_modules`: Which layers to add LoRA to. + * `--lora_rank`: Rank of LoRA. + * `--lora_checkpoint`: Path to LoRA checkpoint. + * `--preset_lora_path`: Path to preset LoRA checkpoint for LoRA differential training. + * `--preset_lora_model`: Which model to integrate preset LoRA into, e.g., `dit`. + * Gradient Configuration + * `--use_gradient_checkpointing`: Whether to enable gradient checkpointing. + * `--use_gradient_checkpointing_offload`: Whether to offload gradient checkpointing to CPU memory. + * `--gradient_accumulation_steps`: Number of gradient accumulation steps. + * Resolution Configuration + * `--height`: Height of the image/video. Leave empty to enable dynamic resolution. + * `--width`: Width of the image/video. Leave empty to enable dynamic resolution. + * `--max_pixels`: Maximum pixel area, images larger than this will be scaled down during dynamic resolution. + * `--num_frames`: Number of frames for video (video generation models only). +* HiDream-O1-Image Specific Parameters + * `--processor_config`: Path to the processor configuration file, used for loading AutoProcessor for text tokenization. + * `--noise_scale`: Noise scaling factor, defaults to 8.0. + * `--initialize_model_on_cpu`: Whether to initialize the model on CPU, which can help reduce peak GPU VRAM usage. + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --local_dir ./data/diffsynth_example_dataset +``` + +We provide recommended training scripts for each model, please refer to the table in "Model Overview" above. For guidance on writing model training scripts, see [Model Training](../Pipeline_Usage/Model_Training.md); for more advanced training algorithms, see [Training Framework Overview](https://github.com/modelscope/DiffSynth-Studio/tree/main/docs/en/Training/). diff --git a/docs/en/Model_Details/Ideogram-4.md b/docs/en/Model_Details/Ideogram-4.md new file mode 100644 index 0000000000000000000000000000000000000000..04132f26f2d1e110a072e7ccba4ef5e76afccb40 --- /dev/null +++ b/docs/en/Model_Details/Ideogram-4.md @@ -0,0 +1,151 @@ +# Ideogram 4 + +Ideogram 4 is an image generation model open-sourced by Ideogram. DiffSynth-Studio supports inference, low VRAM inference, full training, and LoRA training for both the FP8 quantized version and the BF16 repackaged version. + +## Installation + +Before performing model inference and training, please install DiffSynth-Studio first. + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +For more information about installation, please refer to [Install Dependencies](../Pipeline_Usage/Setup.md). + +## Quick Start + +Running the following code will load the [ideogram-ai/ideogram-4-fp8](https://www.modelscope.cn/models/ideogram-ai/ideogram-4-fp8) model for inference. A minimum of 24GB VRAM is required to run. + +```python +from diffsynth.pipelines.ideogram4 import Ideogram4Pipeline +from diffsynth.core import ModelConfig +import torch + + +pipe = Ideogram4Pipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ideogram-ai/ideogram-4-fp8", origin_file_pattern="transformer/diffusion_pytorch_model.safetensors"), + # unconditional_transformer is optional. You can delete this line to reduce VRAM required. + ModelConfig(model_id="ideogram-ai/ideogram-4-fp8", origin_file_pattern="unconditional_transformer/diffusion_pytorch_model.safetensors"), + ModelConfig(model_id="ideogram-ai/ideogram-4-fp8", origin_file_pattern="text_encoder/model.safetensors"), + ModelConfig(model_id="ideogram-ai/ideogram-4-fp8", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + tokenizer_config=ModelConfig(model_id="ideogram-ai/ideogram-4-fp8", origin_file_pattern="tokenizer/"), +) +prompt = r""" +{ + "high_level_description": "A medium-shot photograph of Formula 1 driver Max Verstappen wearing his Red Bull Racing racing suit and cap, smiling as he holds his racing helmet and talks to a man in a white shirt and black vest at a race track.", + "style_description": { + "aesthetics": "saturated primary colors, rule of thirds, joyful and triumphant", + "lighting": "overcast daylight, diffused, soft subtle shadows", + "photo": "shallow depth of field, sharp focus, eye-level, telephoto", + "medium": "photograph" + }, + "compositional_deconstruction": { + "background": "The background is an out-of-focus racing paddock or track environment. Several blurred figures are visible, including one in an orange shirt. A purple and white structure with a red 'F1' logo stands on the left. The scene is outdoors with daylight, though the sky is not visible.", + "elements": [ + {"type": "obj", "bbox": [55, 642, 1000, 937], "desc": "An older man standing in profile, facing left toward Max Verstappen. He has grey hair and fair skin. He is wearing a white long-sleeved button-down shirt with a navy blue quilted vest over it. He has a slight smile."}, + {"type": "obj", "bbox": [34, 137, 1000, 617], "desc": "Max Verstappen, a fair-skinned male Formula 1 driver, positioned in the center. He is facing forward with a joyful expression and a slight smile. He wears a navy blue Red Bull Racing team uniform with numerous sponsor logos and a matching baseball cap with the number '1'. He is holding a white and red racing helmet in his hands. He has a silver watch on his left wrist."}, + {"type": "obj", "bbox": [422, 212, 792, 452], "desc": "Max Verstappen's racing helmet, held in front of his chest. It features a white, red, and yellow design with the Red Bull logo and the 'Player 0.0' branding. The visor is clear and open."}, + {"type": "text", "bbox": [657, 0, 755, 142], "text": "F1", "desc": "Large, stylized red logo on a black and purple background in the lower left."}, + {"type": "text", "bbox": [768, 0, 818, 147], "text": "Formula 1\nWorld Championship™", "desc": "Small white sans-serif text below the F1 logo on the left side."}, + {"type": "text", "bbox": [78, 447, 117, 510], "text": "ORACLE\nRed Bull\nRacing", "desc": "Very small white and orange logo on the front of the navy blue cap."}, + {"type": "text", "bbox": [78, 417, 120, 440], "text": "1", "desc": "Bold red numeral '1' on the front left side of the navy blue cap."}, + {"type": "text", "bbox": [332, 442, 363, 483], "text": "Red Bull", "desc": "Small yellow and red text logo on the collar of the uniform."}, + {"type": "text", "bbox": [373, 490, 423, 532], "text": "RAUCH", "desc": "Small yellow and blue logo on the right chest of the uniform."}, + {"type": "text", "bbox": [422, 473, 500, 532], "text": "BYBIT\nHONDA", "desc": "Medium-sized white sans-serif text on the right chest of the uniform."}, + {"type": "text", "bbox": [410, 203, 442, 257], "text": "RAUCH", "desc": "Small yellow logo on the left upper arm of the uniform."}, + {"type": "text", "bbox": [530, 448, 627, 510], "text": "Red Bull", "desc": "Medium red text logo on the right side of the torso, part of the Red Bull graphic."}, + {"type": "text", "bbox": [680, 417, 768, 523], "text": "Red Bull", "desc": "Large red text logo across the lower torso of the uniform."}, + {"type": "text", "bbox": [797, 475, 815, 518], "text": "MAX", "desc": "Small white text next to a Dutch flag on the belt area of the uniform."}, + {"type": "text", "bbox": [558, 317, 715, 355], "text": "Player 0.0", "desc": "Black sans-serif text on a white band on the racing helmet."}, + {"type": "text", "bbox": [560, 800, 582, 835], "text": "IA.COM", "desc": "Small blue sans-serif text on the right sleeve of the white shirt."}, + {"type": "text", "bbox": [968, 8, 997, 332], "text": "© Anadolu Agency via Getty Images", "desc": "Small white watermark text in the bottom left corner."} + ] + } +} +""" +image = pipe(prompt=prompt, height=1024, width=1024, num_inference_steps=48, cfg_scale=7.0, seed=42) +image.save("image_ideogram-4-fp8.jpg") +``` + +## Model Overview + +|Model ID|Inference|Low VRAM Inference|Full Training|Full Training Validation|LoRA Training|LoRA Training Validation| +|-|-|-|-|-|-|-| +|[ideogram-ai/ideogram-4-fp8](https://www.modelscope.cn/models/ideogram-ai/ideogram-4-fp8)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ideogram4/model_inference/ideogram-4-fp8.py)|-|-|-|-|-| +|[DiffSynth-Studio/ideogram-4-bf16-repackage](https://www.modelscope.cn/models/DiffSynth-Studio/ideogram-4-bf16-repackage)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ideogram4/model_inference/ideogram-4-bf16-repackage.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ideogram4/model_inference_low_vram/ideogram-4-bf16-repackage.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ideogram4/model_training/full/Ideogram-4-bf16-repackage.sh)|-|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ideogram4/model_training/lora/Ideogram-4-bf16-repackage.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ideogram4/model_training/validate_lora/Ideogram-4-bf16-repackage.py)| + +## Model Inference + +The model is loaded via `Ideogram4Pipeline.from_pretrained`, see [Loading Models](../Pipeline_Usage/Model_Inference.md#loading-models) for details. + +The input parameters for `Ideogram4Pipeline` inference include: + +* `prompt`: Prompt describing the content appearing in the image. Ideogram 4 supports structured JSON format prompts, including high-level description, style description, and compositional deconstruction. +* `negative_prompt`: Negative prompt describing content that should not appear in the image, default value is `""`. +* `cfg_scale`: Classifier-free guidance parameter, default value is 7.0. +* `input_image`: Input image for image-to-image generation, used in conjunction with `denoising_strength`. +* `denoising_strength`: Denoising strength, range is 0~1, default value is 1. When the value approaches 0, the generated image is similar to the input image; when the value approaches 1, the generated image differs more from the input image. When `input_image` parameter is not provided, do not set this to a non-1 value. +* `height`: Image height, must be a multiple of 16, default value is 1024. +* `width`: Image width, must be a multiple of 16, default value is 1024. +* `seed`: Random seed. Default is `None`, meaning completely random. +* `rand_device`: Computing device for generating random Gaussian noise matrix, default is `"cpu"`. +* `num_inference_steps`: Number of inference steps, default value is 50. + +## Model Training + +Models in the ideogram4 series are trained uniformly via `examples/ideogram4/model_training/train.py`. The script parameters include: + +* General Training Parameters + * Dataset Configuration + * `--dataset_base_path`: Root directory of the dataset. + * `--dataset_metadata_path`: Path to the dataset metadata file. + * `--dataset_repeat`: Number of dataset repeats per epoch. + * `--dataset_num_workers`: Number of processes per DataLoader. + * `--data_file_keys`: Field names to load from metadata, typically paths to image or video files, separated by `,`. + * Model Loading Configuration + * `--model_paths`: Paths to load models from, in JSON format. + * `--model_id_with_origin_paths`: Model IDs with original paths, separated by commas. + * `--extra_inputs`: Additional input parameters required by the model Pipeline, separated by `,`. + * `--fp8_models`: Models to load in FP8 format, currently only supported for models whose parameters are not updated by gradients. + * `--quant_options`: Dynamically quantize loaded models. Semicolon-separated entries, each `:[/]`, where `` matches an entry in `--model_paths`/`--model_id_with_origin_paths`, `method` is a registered method (e.g. `bitsandbytes_nf4`), and `exclude_modules` optionally lists layers kept in full precision. + * Basic Training Configuration + * `--learning_rate`: Learning rate. + * `--num_epochs`: Number of epochs. + * `--trainable_models`: Trainable models, e.g., `dit`, `vae`, `text_encoder`. + * `--find_unused_parameters`: Whether unused parameters exist in DDP training. + * `--weight_decay`: Weight decay magnitude. + * `--task`: Training task, defaults to `sft`. + * Output Configuration + * `--output_path`: Path to save the model. + * `--remove_prefix_in_ckpt`: Remove prefix in the model's state dict. + * `--save_steps`: Interval in training steps to save the model. + * LoRA Configuration + * `--lora_base_model`: Which model to add LoRA to. + * `--lora_target_modules`: Which layers to add LoRA to. + * `--lora_rank`: Rank of LoRA. + * `--lora_checkpoint`: Path to LoRA checkpoint. + * `--preset_lora_path`: Path to preset LoRA checkpoint for LoRA differential training. + * `--preset_lora_model`: Which model to integrate preset LoRA into, e.g., `dit`. + * Gradient Configuration + * `--use_gradient_checkpointing`: Whether to enable gradient checkpointing. + * `--use_gradient_checkpointing_offload`: Whether to offload gradient checkpointing to CPU memory. + * `--gradient_accumulation_steps`: Number of gradient accumulation steps. + * Resolution Configuration + * `--height`: Height of the image/video. Leave empty to enable dynamic resolution. + * `--width`: Width of the image/video. Leave empty to enable dynamic resolution. + * `--max_pixels`: Maximum pixel area, images larger than this will be scaled down during dynamic resolution. + * `--num_frames`: Number of frames for video (video generation models only). +* Ideogram-4 Specific Parameters + * `--tokenizer_path`: Path to tokenizer. Defaults to downloading from `ideogram-ai/ideogram-4-fp8`. + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --local_dir ./data/diffsynth_example_dataset +``` + +We provide recommended training scripts for each model, please refer to the table in "Model Overview" above. For guidance on writing model training scripts, see [Model Training](../Pipeline_Usage/Model_Training.md); for more advanced training algorithms, see [Training Framework Overview](https://github.com/modelscope/DiffSynth-Studio/tree/main/docs/en/Training/). diff --git a/docs/en/Model_Details/Image-Quality-Metrics.md b/docs/en/Model_Details/Image-Quality-Metrics.md new file mode 100644 index 0000000000000000000000000000000000000000..71c2cf204b4cf1e1c96376201c78a8304cdbd1ef --- /dev/null +++ b/docs/en/Model_Details/Image-Quality-Metrics.md @@ -0,0 +1,179 @@ +# Image Quality Evaluation Metrics + +DiffSynth-Studio provides a suite of image quality evaluation metrics and reward models in `diffsynth.metrics` to assess text alignment, aesthetic quality, human preference, and image distribution quality of generated images. Example code for these metrics can be found in [`examples/image_quality_metric/`](../../../examples/image_quality_metric/). + +## Installation + +Before using this project for model inference and training, please install DiffSynth-Studio first. + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +For more information about installation, please refer to [Install Dependencies](../Pipeline_Usage/Setup.md). + +## Quick Start + +Run the following code to quickly load PickScore and score an image against a prompt. The default models will be downloaded from ModelScope to `./models`. + +```python +from diffsynth.metrics import PickScoreMetric, ModelConfig +from modelscope import dataset_snapshot_download +from PIL import Image + +dataset_snapshot_download( + "DiffSynth-Studio/diffsynth_example_dataset", + allow_file_pattern="flux/FLUX.1-dev/*", + local_dir="./data/diffsynth_example_dataset", +) +image = Image.open("data/diffsynth_example_dataset/flux/FLUX.1-dev/1.jpg").convert("RGB") +prompt = "a dog" +metric = PickScoreMetric.from_pretrained( + model_config=ModelConfig(model_id="DiffSynth-Studio/ImageMetrics", origin_file_pattern="PickScore/model.safetensors"), + device="cuda" +) +score = metric.compute(prompt, image)[0] +print(f"PickScore score:: {score:.3f}") +``` + +## Metrics Overview + +| Metric | Input | Output | Example Code | +| --- | --- | --- | --- | +| PickScore | prompt + PIL Image | Preference Score | [code](../../../examples/image_quality_metric/pickscore.py) | +| ImageReward | prompt + PIL Image | Preference Score | [code](../../../examples/image_quality_metric/image_reward.py) | +| HPSv2 | prompt + PIL Image | Preference Score | [code](../../../examples/image_quality_metric/hpsv2.py) | +| HPSv3 | prompt + PIL Image | Preference Score | [code](../../../examples/image_quality_metric/hpsv3.py) | +| CLIP Score | prompt + PIL Image | Text-Image Similarity | [code](../../../examples/image_quality_metric/clipscore.py) | +| UnifiedReward 2.0 | prompt + PIL Image | multi-dimension scores | [code](../../../examples/image_quality_metric/unified_reward_2.py) | +| Qwen-Image-Bench | prompt + PIL Image | Overall score and multi-level dimension scores | [code](../../../examples/image_quality_metric/qwen_image_bench.py) | +| UnifiedReward Edit | editing instruction + source image + edited image | Image editing quality score | [code](../../../examples/image_quality_metric/unified_reward_edit.py) | +| Aesthetic | PIL Image | Aesthetic Score | [code](../../../examples/image_quality_metric/aesthetic.py) | +| FID | reference image directory + generated image directory | Distribution Distance | [code](../../../examples/image_quality_metric/fid.py) | + +### Text-Image Alignment and Preference Evaluation + +Applicable metrics: **PickScore**, **ImageReward**, **HPSv2**, **HPSv3**, **CLIP Score**, **UnifiedReward 2.0**, **Qwen-Image-Bench** + +These models are used to evaluate whether an image follows the prompt and aligns with human visual preferences. They must receive both the `prompt` and the `image` simultaneously. + +**Basic Scoring** + +```python +score = metric.compute(prompt, image)[0] +``` + +**Batch Scoring** + +If you need to evaluate multiple images, you can directly pass a list: + +```python +scores = metric.compute("a cute cat", [image1, image2, image3]) + +scores = metric.compute(["a cat", "a dog"], [image_cat, image_dog]) +``` + +When prompt is a single string, the same prompt will be applied to every image. When prompt is a list of strings, the number of prompts must exactly match the number of images. + +### Multi-Dimensional Image Quality Evaluation + +Applicable metrics: **UnifiedReward 2.0**, **Qwen-Image-Bench** + +These metrics also receive a `prompt` and an `image`, but in addition to the primary score, `evaluate()` returns more detailed evaluation dimensions. They are useful when you need to analyze text-image alignment, visual coherence, style, or multi-level quality dimensions. + +**Qwen-Image-Bench** + +```python +from diffsynth.metrics import ModelConfig, QwenImageBenchMetric + +metric = QwenImageBenchMetric.from_pretrained( + model_config=ModelConfig( + model_id="Qwen/Qwen-Image-Bench", + origin_file_pattern="model-*.safetensors", + ), + processor_config=ModelConfig( + model_id="Qwen/Qwen-Image-Bench", + origin_file_pattern="", + ), + device="cuda", +) +details = metric.evaluate(prompt, image)[0] +score = details["total_score"] +print(details["level1_scores"]) +print(details["level2_scores"]) +``` + +If you only need the primary score, you can also call `metric.compute(prompt, image)`. + +### Image Editing Quality Evaluation + +Applicable metric: **UnifiedReward Edit** + +UnifiedReward Edit evaluates whether an edited image follows the editing instruction and whether it is over-edited. The input usually includes an editing instruction, a source image, and edited image candidates. It supports three tasks: + +* `edit_pointwise_score`: scores a single edited result with `[source_image, edited_image]`. +* `edit_pairwise_rank`: compares two edited results and returns the winner with `[source_image, edited_image_1, edited_image_2]`. +* `edit_pairwise_score`: returns separate scores for two edited results with `[source_image, edited_image_1, edited_image_2]`. + +```python +from diffsynth.metrics import ModelConfig, UnifiedRewardEditMetric + +metric = UnifiedRewardEditMetric.from_pretrained( + model_config=ModelConfig( + model_id="DiffSynth-Studio/ImageMetrics", + origin_file_pattern="UnifiedReward-Edit-qwen3vl-8b/model-*.safetensors", + ), + processor_config=ModelConfig( + model_id="DiffSynth-Studio/ImageMetrics", + origin_file_pattern="UnifiedReward-Edit-qwen3vl-8b/", + ), + device="cuda", +) + +details = metric.evaluate( + instruction, + [source_image, edited_image], + task="edit_pointwise_score", +)[0] +print(details["score"], details["editing_success"], details["overediting"]) +``` + +### Pure Image Aesthetics Evaluation + +Applicable metric: **Aesthetic** + +This model solely evaluates aesthetic features such as the composition, color, and clarity of the image itself. It does not require a prompt. + +```python +from diffsynth.metrics import AestheticMetric + +metric = AestheticMetric.from_pretrained(device="cuda") +score = metric.compute(image)[0] +``` + +### Dataset Distribution Evaluation + +Applicable metric: **FID** (Fréchet Inception Distance) + +FID does not score individual images; instead, it compares the overall feature distribution distance between a real reference image set and a generated image set. A lower score indicates that the generated distribution is closer to the real distribution. + +```python +from diffsynth.metrics import FIDMetric + +reference_dir = "path/to/real_reference_images" +generated_dir = "path/to/model_generated_images" + +metric = FIDMetric.from_pretrained(device="cuda", batch_size=16) +fid_score = metric.compute(reference_dir, generated_dir) +print(f"FID: {fid_score:.3f}") +``` + +The baseline for FID is not fixed or unique. For general image generation, COCO Validation is commonly used; for specific domains (such as medical images or e-commerce products), a `reference_dir` composed of real data from that specific domain should be provided. + +## Important Notes + +* The scores from PickScore, ImageReward, HPSv2, HPSv3, CLIPScore, UnifiedReward 2.0, Qwen-Image-Bench, UnifiedReward Edit, and Aesthetic are suitable for relative comparison within the same metric. It is not recommended to directly compare the numerical values across different metrics. +* HPSv3, UnifiedReward 2.0, UnifiedReward Edit, and Qwen-Image-Bench are based on multimodal large models, requiring significantly more VRAM than CLIP-based metrics. +* FID is sensitive to the choice of reference, the reference sample size, and the generated sample size. diff --git a/docs/en/Model_Details/JoyAI-Image.md b/docs/en/Model_Details/JoyAI-Image.md new file mode 100644 index 0000000000000000000000000000000000000000..8ae8cad093776c522b302f4f2ab2401a73a736b5 --- /dev/null +++ b/docs/en/Model_Details/JoyAI-Image.md @@ -0,0 +1,155 @@ +# JoyAI-Image + +JoyAI-Image is a unified multi-modal foundation model open-sourced by JD.com, supporting image understanding, text-to-image generation, and instruction-guided image editing. + +## Installation + +Before performing model inference and training, please install DiffSynth-Studio first. + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +For more information on installation, please refer to [Setup Dependencies](../Pipeline_Usage/Setup.md). + +## Quick Start + +Running the following code will load the [jd-opensource/JoyAI-Image-Edit](https://modelscope.cn/models/jd-opensource/JoyAI-Image-Edit) model for inference. VRAM management is enabled, the framework automatically controls parameter loading based on available VRAM, requiring a minimum of 4GB VRAM. + +```python +from diffsynth.pipelines.joyai_image import JoyAIImagePipeline, ModelConfig +import torch +from PIL import Image +from modelscope import dataset_snapshot_download + +# Download dataset +dataset_snapshot_download( + dataset_id="DiffSynth-Studio/diffsynth_example_dataset", + local_dir="data/diffsynth_example_dataset", + allow_file_pattern="joyai_image/JoyAI-Image-Edit/*" +) + +vram_config = { + "offload_dtype": torch.bfloat16, + "offload_device": "cpu", + "onload_dtype": torch.bfloat16, + "onload_device": "cpu", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} + +pipe = JoyAIImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="jd-opensource/JoyAI-Image-Edit", origin_file_pattern="transformer/transformer.pth", **vram_config), + ModelConfig(model_id="jd-opensource/JoyAI-Image-Edit", origin_file_pattern="JoyAI-Image-Und/model*.safetensors", **vram_config), + ModelConfig(model_id="jd-opensource/JoyAI-Image-Edit", origin_file_pattern="vae/Wan2.1_VAE.pth", **vram_config), + ], + processor_config=ModelConfig(model_id="jd-opensource/JoyAI-Image-Edit", origin_file_pattern="JoyAI-Image-Und/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) + +# Use first sample from dataset +dataset_base_path = "data/diffsynth_example_dataset/joyai_image/JoyAI-Image-Edit" +prompt = "将裙子改为粉色" +edit_image = Image.open(f"{dataset_base_path}/edit/image1.jpg").convert("RGB") + +output = pipe( + prompt=prompt, + edit_image=edit_image, + height=1024, + width=1024, + seed=0, + num_inference_steps=30, + cfg_scale=5.0, +) + +output.save("output_joyai_edit_low_vram.png") +``` + +## Model Overview + +|Model ID|Inference|Low VRAM Inference|Full Training|Full Training Validation|LoRA Training|LoRA Training Validation| +|-|-|-|-|-|-|-| +|[jd-opensource/JoyAI-Image-Edit](https://modelscope.cn/models/jd-opensource/JoyAI-Image-Edit)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/joyai_image/model_inference/JoyAI-Image-Edit.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/joyai_image/model_inference_low_vram/JoyAI-Image-Edit.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/joyai_image/model_training/full/JoyAI-Image-Edit.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/joyai_image/model_training/validate_full/JoyAI-Image-Edit.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/joyai_image/model_training/lora/JoyAI-Image-Edit.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/joyai_image/model_training/validate_lora/JoyAI-Image-Edit.py)| + +## Model Inference + +The model is loaded via `JoyAIImagePipeline.from_pretrained`, see [Loading Models](../Pipeline_Usage/Model_Inference.md#loading-models) for details. + +The input parameters for `JoyAIImagePipeline` inference include: + +* `prompt`: Text prompt describing the desired image editing effect. +* `negative_prompt`: Negative prompt specifying what should not appear in the result, defaults to empty string. +* `cfg_scale`: Classifier-free guidance scale factor, defaults to 5.0. Higher values make the output more closely follow the prompt. +* `edit_image`: Image to be edited. +* `denoising_strength`: Denoising strength controlling how much the input image is repainted, defaults to 1.0. +* `height`: Height of the output image, defaults to 1024. Must be divisible by 16. +* `width`: Width of the output image, defaults to 1024. Must be divisible by 16. +* `seed`: Random seed for reproducibility. Set to `None` for random seed. +* `max_sequence_length`: Maximum sequence length for the text encoder, defaults to 4096. +* `num_inference_steps`: Number of inference steps, defaults to 30. More steps typically yield better quality. +* `tiled`: Whether to enable tiling for reduced VRAM usage, defaults to False. +* `tile_size`: Tile size, defaults to (30, 52). +* `tile_stride`: Tile stride, defaults to (15, 26). +* `shift`: Shift parameter for the scheduler, controlling the Flow Match scheduling curve, defaults to 4.0. +* `progress_bar_cmd`: Progress bar display mode, defaults to tqdm. + +## Model Training + +Models in the joyai_image series are trained uniformly via `examples/joyai_image/model_training/train.py`. The script parameters include: + +* General Training Parameters + * Dataset Configuration + * `--dataset_base_path`: Root directory of the dataset. + * `--dataset_metadata_path`: Path to the dataset metadata file. + * `--dataset_repeat`: Number of dataset repeats per epoch. + * `--dataset_num_workers`: Number of processes per DataLoader. + * `--data_file_keys`: Field names to load from metadata, typically paths to image or video files, separated by `,`. + * Model Loading Configuration + * `--model_paths`: Paths to load models from, in JSON format. + * `--model_id_with_origin_paths`: Model IDs with original paths, separated by commas. + * `--extra_inputs`: Additional input parameters required by the model Pipeline, separated by `,`. + * `--fp8_models`: Models to load in FP8 format, currently only supported for models whose parameters are not updated by gradients. + * `--quant_options`: Dynamically quantize loaded models. Semicolon-separated entries, each `:[/]`, where `` matches an entry in `--model_paths`/`--model_id_with_origin_paths`, `method` is a registered method (e.g. `bitsandbytes_nf4`), and `exclude_modules` optionally lists layers kept in full precision. + * Basic Training Configuration + * `--learning_rate`: Learning rate. + * `--num_epochs`: Number of epochs. + * `--trainable_models`: Trainable models, e.g., `dit`, `vae`, `text_encoder`. + * `--find_unused_parameters`: Whether unused parameters exist in DDP training. + * `--weight_decay`: Weight decay magnitude. + * `--task`: Training task, defaults to `sft`. + * Output Configuration + * `--output_path`: Path to save the model. + * `--remove_prefix_in_ckpt`: Remove prefix in the model's state dict. + * `--save_steps`: Interval in training steps to save the model. + * LoRA Configuration + * `--lora_base_model`: Which model to add LoRA to. + * `--lora_target_modules`: Which layers to add LoRA to. + * `--lora_rank`: Rank of LoRA. + * `--lora_checkpoint`: Path to LoRA checkpoint. + * `--preset_lora_path`: Path to preset LoRA checkpoint for LoRA differential training. + * `--preset_lora_model`: Which model to integrate preset LoRA into, e.g., `dit`. + * Gradient Configuration + * `--use_gradient_checkpointing`: Whether to enable gradient checkpointing. + * `--use_gradient_checkpointing_offload`: Whether to offload gradient checkpointing to CPU memory. + * `--gradient_accumulation_steps`: Number of gradient accumulation steps. + * Resolution Configuration + * `--height`: Height of the image/video. Leave empty to enable dynamic resolution. + * `--width`: Width of the image/video. Leave empty to enable dynamic resolution. + * `--max_pixels`: Maximum pixel area, images larger than this will be scaled down during dynamic resolution. + * `--num_frames`: Number of frames for video (video generation models only). +* JoyAI-Image Specific Parameters + * `--processor_path`: Path to the processor for processing text and image encoder inputs. + * `--initialize_model_on_cpu`: Whether to initialize models on CPU. By default, models are initialized on the accelerator device. + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --local_dir ./data/diffsynth_example_dataset +``` + +We provide recommended training scripts for each model, please refer to the table in "Model Overview" above. For guidance on writing model training scripts, see [Model Training](../Pipeline_Usage/Model_Training.md); for more advanced training algorithms, see [Training Framework Overview](https://github.com/modelscope/DiffSynth-Studio/tree/main/docs/en/Training/). diff --git a/docs/en/Model_Details/Krea-2.md b/docs/en/Model_Details/Krea-2.md new file mode 100644 index 0000000000000000000000000000000000000000..8d695d7aa061e7ee1a04d83420968c19b9d23a93 --- /dev/null +++ b/docs/en/Model_Details/Krea-2.md @@ -0,0 +1,136 @@ +# Krea-2 + +Krea-2 is an image generation model developed by the Krea team. + +## Installation + +Before performing model inference and training, please install DiffSynth-Studio first. + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +For more information on installation, please refer to [Setup Dependencies](../Pipeline_Usage/Setup.md). + +## Quick Start + +Running the following code will load the [krea/Krea-2-Raw](https://www.modelscope.cn/models/krea/Krea-2-Raw) model for inference. VRAM management is enabled, the framework automatically controls parameter loading based on available VRAM, requiring a minimum of 24GB VRAM. + +```python +from diffsynth.pipelines.krea2 import Krea2Pipeline, ModelConfig +import torch + +vram_config = { + "offload_dtype": "disk", + "offload_device": "disk", + "onload_dtype": torch.float8_e4m3fn, + "onload_device": "cpu", + "preparing_dtype": torch.float8_e4m3fn, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} +pipe = Krea2Pipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="krea/Krea-2-Raw", origin_file_pattern="raw.safetensors", **vram_config), + ModelConfig(model_id="Qwen/Qwen3-VL-4B-Instruct", origin_file_pattern="*.safetensors", **vram_config), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="vae/diffusion_pytorch_model.safetensors", **vram_config), + ], + tokenizer_config=ModelConfig(model_id="Qwen/Qwen3-VL-4B-Instruct", origin_file_pattern=""), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 1, +) +prompt = "A cat standing on a stone." +image = pipe(prompt, seed=0, num_inference_steps=52, cfg_scale=4.5) +image.save("image.jpg") +``` + +## Model Overview + +|Model ID|Inference|Low VRAM Inference|Full Training|Full Training Validation|LoRA Training|LoRA Training Validation| +|-|-|-|-|-|-|-| +|[krea/Krea-2-Raw](https://www.modelscope.cn/models/krea/Krea-2-Raw)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/krea2/model_inference/Krea-2-Raw.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/krea2/model_inference_low_vram/Krea-2-Raw.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/krea2/model_training/full/Krea-2-Raw.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/krea2/model_training/validate_full/Krea-2-Raw.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/krea2/model_training/lora/Krea-2-Raw.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/krea2/model_training/validate_lora/Krea-2-Raw.py)| +|[krea/Krea-2-Turbo](https://www.modelscope.cn/models/krea/Krea-2-Turbo)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/krea2/model_inference/Krea-2-Turbo.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/krea2/model_inference_low_vram/Krea-2-Turbo.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/krea2/model_training/full/Krea-2-Turbo.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/krea2/model_training/validate_full/Krea-2-Turbo.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/krea2/model_training/lora/Krea-2-Turbo.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/krea2/model_training/validate_lora/Krea-2-Turbo.py)| + +## Model Inference + +The model is loaded via `Krea2Pipeline.from_pretrained`, see [Loading Models](../Pipeline_Usage/Model_Inference.md#loading-models) for details. + +The input parameters for `Krea2Pipeline` inference include: + +* `prompt`: Prompt describing the content of the image to generate, default value is `""`. +* `negative_prompt`: Negative prompt describing content that should not appear in the image, default value is `""`. +* `cfg_scale`: Classifier-free guidance parameter, default value is 3.5. +* `height`: Image height, must be a multiple of 16, default value is 1024. +* `width`: Image width, must be a multiple of 16, default value is 1024. +* `seed`: Random seed, default is `None`, meaning completely random. +* `rand_device`: Computing device for generating random Gaussian noise matrix, default is `"cpu"`. +* `num_inference_steps`: Number of inference steps, default value is 52. +* `mu`: Timestep dynamic shift parameter, default is `None`. +* `progress_bar_cmd`: Progress bar, default is `tqdm.tqdm`. Can be disabled by setting to `lambda x:x`. + +If VRAM is insufficient, please enable [VRAM Management](../Pipeline_Usage/VRAM_management.md). We provide recommended low VRAM configurations for each model in the example code, see the table in the "Model Overview" section above. + +## Model Training + +Models in the Krea-2 series are trained uniformly via [`examples/krea2/model_training/train.py`](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/krea2/model_training/train.py). The script parameters include: + +* General Training Parameters + * Dataset Configuration + * `--dataset_base_path`: Root directory of the dataset. + * `--dataset_metadata_path`: Path to the dataset metadata file. + * `--dataset_repeat`: Number of dataset repeats per epoch. + * `--dataset_num_workers`: Number of processes per DataLoader. + * `--data_file_keys`: Field names to load from metadata, typically paths to image or video files, separated by `,`. + * Model Loading Configuration + * `--model_paths`: Paths to load models from, in JSON format. + * `--model_id_with_origin_paths`: Model IDs with original paths, separated by commas. + * `--extra_inputs`: Additional input parameters required by the model Pipeline, separated by `,`. + * `--fp8_models`: Models to load in FP8 format, currently only supported for models whose parameters are not updated by gradients. + * `--quant_options`: Dynamically quantize loaded models. Semicolon-separated entries, each `:[/]`, where `` matches an entry in `--model_paths`/`--model_id_with_origin_paths`, `method` is a registered method (e.g. `bitsandbytes_nf4`), and `exclude_modules` optionally lists layers kept in full precision. + * Basic Training Configuration + * `--learning_rate`: Learning rate. + * `--num_epochs`: Number of epochs. + * `--trainable_models`: Trainable models, e.g., `dit`, `vae`, `text_encoder`. + * `--find_unused_parameters`: Whether unused parameters exist in DDP training. + * `--weight_decay`: Weight decay magnitude. + * `--task`: Training task, defaults to `sft`. + * Output Configuration + * `--output_path`: Path to save the model. + * `--remove_prefix_in_ckpt`: Remove prefix in the model's state dict. + * `--save_steps`: Interval in training steps to save the model. + * LoRA Configuration + * `--lora_base_model`: Which model to add LoRA to. + * `--lora_target_modules`: Which layers to add LoRA to. + * `--lora_rank`: Rank of LoRA. + * `--lora_checkpoint`: Path to LoRA checkpoint. + * `--preset_lora_path`: Path to preset LoRA checkpoint for LoRA differential training. + * `--preset_lora_model`: Which model to integrate preset LoRA into, e.g., `dit`. + * Gradient Configuration + * `--use_gradient_checkpointing`: Whether to enable gradient checkpointing. + * `--use_gradient_checkpointing_offload`: Whether to offload gradient checkpointing to CPU memory. + * `--gradient_accumulation_steps`: Number of gradient accumulation steps. + * Resolution Configuration + * `--height`: Height of the image. Leave empty to enable dynamic resolution. + * `--width`: Width of the image. Leave empty to enable dynamic resolution. + * `--max_pixels`: Maximum pixel area, images larger than this will be scaled down during dynamic resolution. +* Krea-2 Specific Parameters + * `--tokenizer_path`: Path to the tokenizer, leave blank to automatically download from remote. + * `--initialize_model_on_cpu`: Whether to initialize models on CPU. + * `--align_to_opensource_format`: Whether to align the LoRA format to the opensource format, useful for compatibility with other frameworks. + +We have built a sample dataset for your testing. You can download it with the following command: + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "krea2/*" --local_dir ./data/diffsynth_example_dataset +``` + +We provide recommended training scripts for each model, please refer to the table in "Model Overview" above. For guidance on writing model training scripts, see [Model Training](../Pipeline_Usage/Model_Training.md); for more advanced training algorithms, see [Training Framework Overview](https://github.com/modelscope/DiffSynth-Studio/tree/main/docs/en/Training/). + + +## License + +> **⚠️ Notice**: **Krea-2** weights (Raw and Turbo) are released under the [Krea 2 Community License](https://www.krea.ai/krea-2-licensing), **not** the Apache 2.0 license that governs DiffSynth-Studio itself. \ No newline at end of file diff --git a/docs/en/Model_Details/LTX-2.md b/docs/en/Model_Details/LTX-2.md new file mode 100644 index 0000000000000000000000000000000000000000..6760cdd89065400bc1654653c5e45a495a6e6aa9 --- /dev/null +++ b/docs/en/Model_Details/LTX-2.md @@ -0,0 +1,173 @@ +# LTX-2 + +LTX-2 is a series of audio-video generation models developed by Lightricks. + +## Installation + +Before using this project for model inference and training, please install DiffSynth-Studio first. + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +For more information about installation, please refer to [Installation Dependencies](../Pipeline_Usage/Setup.md). + +## Quick Start + +Run the following code to quickly load the [Lightricks/LTX-2.3](https://www.modelscope.cn/models/Lightricks/LTX-2.3) model and perform inference. VRAM management has been enabled, and the framework will automatically control model parameter loading based on remaining VRAM. It can run with a minimum of 8GB VRAM. + +```python +import torch +from diffsynth.pipelines.ltx2_audio_video import LTX2AudioVideoPipeline, ModelConfig +from diffsynth.utils.data.media_io_ltx2 import write_video_audio_ltx2 + +vram_config = { + "offload_dtype": torch.bfloat16, + "offload_device": "cpu", + "onload_dtype": torch.bfloat16, + "onload_device": "cuda", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} +pipe = LTX2AudioVideoPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="google/gemma-3-12b-it-qat-q4_0-unquantized", origin_file_pattern="model-*.safetensors", **vram_config), + ModelConfig(model_id="Lightricks/LTX-2.3", origin_file_pattern="ltx-2.3-22b-dev.safetensors", **vram_config), + ModelConfig(model_id="Lightricks/LTX-2.3", origin_file_pattern="ltx-2.3-spatial-upscaler-x2-1.0.safetensors", **vram_config), + ], + tokenizer_config=ModelConfig(model_id="google/gemma-3-12b-it-qat-q4_0-unquantized"), + stage2_lora_config=ModelConfig(model_id="Lightricks/LTX-2.3", origin_file_pattern="ltx-2.3-22b-distilled-lora-384.safetensors"), +) +prompt = "Two cute orange cats, wearing boxing gloves, stand in a boxing ring and fight each other. They are punching each other fast and yelling: 'I will win!'" +negative_prompt = pipe.default_negative_prompt["LTX-2.3"] +video, audio = pipe( + prompt=prompt, + negative_prompt=negative_prompt, + seed=43, + height=1024, width=1536, num_frames=121, + tiled=True, use_two_stage_pipeline=True, +) +write_video_audio_ltx2(video=video, audio=audio, output_path='video.mp4', fps=24, audio_sample_rate=pipe.audio_vocoder.output_sampling_rate) +``` + +## Model Overview +|Model ID|Additional Parameters|Inference|Low VRAM Inference|Full Training|Validation After Full Training|LoRA Training|Validation After LoRA Training| +|-|-|-|-|-|-|-|-| +|[jd-opensource/JoyAI-Echo](https://modelscope.cn/models/jd-opensource/JoyAI-Echo)||[code](/examples/ltx2/model_inference/JoyAI-Echo-T2AV.py)|[code](/examples/ltx2/model_inference_low_vram/JoyAI-Echo-T2AV.py)|[code](/examples/ltx2/model_training/full/JoyAI-Echo-T2AV-splited.sh)|[code](/examples/ltx2/model_training/validate_full/JoyAI-Echo-T2AV.py)|[code](/examples/ltx2/model_training/lora/JoyAI-Echo-T2AV-splited.sh)|[code](/examples/ltx2/model_training/validate_lora/JoyAI-Echo-T2AV.py)| +|[Lightricks/LTX-2.3: OneStagePipeline-I2AV](https://www.modelscope.cn/models/Lightricks/LTX-2.3)|`input_images`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2.3-I2AV-OneStage.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2.3-I2AV-OneStage.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/full/LTX-2.3-I2AV-splited.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/validate_full/LTX-2.3-I2AV.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/lora/LTX-2.3-I2AV-splited.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/validate_lora/LTX-2.3-I2AV.py)| +|[Lightricks/LTX-2.3: TwoStagePipeline-I2AV](https://www.modelscope.cn/models/Lightricks/LTX-2.3)|`input_images`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2.3-I2AV-TwoStage.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2.3-I2AV-TwoStage.py)|-|-|-|-| +|[Lightricks/LTX-2.3: DistilledPipeline-I2AV](https://www.modelscope.cn/models/Lightricks/LTX-2.3)|`input_images`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2.3-I2AV-DistilledPipeline.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2.3-I2AV-DistilledPipeline.py)|-|-|-|-| +|[Lightricks/LTX-2.3: OneStagePipeline-T2AV](https://www.modelscope.cn/models/Lightricks/LTX-2.3)||[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2.3-T2AV-OneStage.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2.3-T2AV-OneStage.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/full/LTX-2.3-T2AV-splited.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/validate_full/LTX-2.3-T2AV.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/lora/LTX-2.3-T2AV-splited.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/validate_lora/LTX-2.3-T2AV.py)| +|[Lightricks/LTX-2.3: TwoStagePipeline-T2AV](https://www.modelscope.cn/models/Lightricks/LTX-2.3)||[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2.3-T2AV-TwoStage.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2.3-T2AV-TwoStage.py)|-|-|-|-| +|[Lightricks/LTX-2.3: DistilledPipeline-T2AV](https://www.modelscope.cn/models/Lightricks/LTX-2.3)||[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2.3-T2AV-DistilledPipeline.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2.3-T2AV-DistilledPipeline.py)|-|-|-|-| +|[Lightricks/LTX-2.3: A2V](https://www.modelscope.cn/models/Lightricks/LTX-2.3)|`retake_audio`,`audio_sample_rate`,`retake_audio_regions`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2.3-A2V-TwoStage.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2.3-A2V-TwoStage.py)|-|-|-|-| +|[Lightricks/LTX-2.3: Retake](https://www.modelscope.cn/models/Lightricks/LTX-2.3)|`retake_video`,`retake_video_regions`,`retake_audio`,`audio_sample_rate`,`retake_audio_regions`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2.3-T2AV-TwoStage-Retake.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2.3-T2AV-TwoStage-Retake.py)|-|-|-|-| +|[Lightricks/LTX-2.3-22b-IC-LoRA-Union-Control](https://www.modelscope.cn/models/Lightricks/LTX-2.3-22b-IC-LoRA-Union-Control)|`in_context_videos`,`in_context_downsample_factor`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2.3-T2AV-IC-LoRA-Union-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2.3-T2AV-IC-LoRA-Union-Control.py)|-|-|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/lora/LTX-2.3-T2AV-IC-LoRA-splited.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/validate_lora/LTX-2.3-T2AV-IC-LoRA.py)| +|[Lightricks/LTX-2.3-22b-IC-LoRA-Motion-Track-Control](https://www.modelscope.cn/models/Lightricks/LTX-2.3-22b-IC-LoRA-Motion-Track-Control)|`in_context_videos`,`in_context_downsample_factor`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2.3-T2AV-IC-LoRA-Motion-Track-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2.3-T2AV-IC-LoRA-Motion-Track-Control.py)|-|-|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/lora/LTX-2.3-T2AV-IC-LoRA-splited.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/validate_lora/LTX-2.3-T2AV-IC-LoRA.py)| +|[Lightricks/LTX-2: OneStagePipeline-T2AV](https://www.modelscope.cn/models/Lightricks/LTX-2)||[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2-T2AV-OneStage.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2-T2AV-OneStage.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/full/LTX-2-T2AV-splited.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/validate_full/LTX-2-T2AV.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/lora/LTX-2-T2AV-splited.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/validate_lora/LTX-2-T2AV.py)| +|[Lightricks/LTX-2-19b-IC-LoRA-Union-Control](https://www.modelscope.cn/models/Lightricks/LTX-2-19b-IC-LoRA-Union-Control)|`in_context_videos`,`in_context_downsample_factor`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2-T2AV-IC-LoRA-Union-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2-T2AV-IC-LoRA-Union-Control.py)|-|-|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/lora/LTX-2-T2AV-IC-LoRA-splited.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/validate_lora/LTX-2-T2AV-IC-LoRA.py)| +|[Lightricks/LTX-2-19b-IC-LoRA-Detailer](https://www.modelscope.cn/models/Lightricks/LTX-2-19b-IC-LoRA-Detailer)|`in_context_videos`,`in_context_downsample_factor`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2-T2AV-IC-LoRA-Detailer.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2-T2AV-IC-LoRA-Detailer.py)|-|-|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/lora/LTX-2-T2AV-IC-LoRA-splited.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/validate_lora/LTX-2-T2AV-IC-LoRA.py)| +|[Lightricks/LTX-2: TwoStagePipeline-T2AV](https://www.modelscope.cn/models/Lightricks/LTX-2)||[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2-T2AV-TwoStage.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2-T2AV-TwoStage.py)|-|-|-|-| +|[Lightricks/LTX-2: DistilledPipeline-T2AV](https://www.modelscope.cn/models/Lightricks/LTX-2)||[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2-T2AV-DistilledPipeline.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2-T2AV-DistilledPipeline.py)|-|-|-|-| +|[Lightricks/LTX-2: OneStagePipeline-I2AV](https://www.modelscope.cn/models/Lightricks/LTX-2)|`input_images`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2-I2AV-OneStage.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2-I2AV-OneStage.py)|-|-|-|-| +|[Lightricks/LTX-2: TwoStagePipeline-I2AV](https://www.modelscope.cn/models/Lightricks/LTX-2)|`input_images`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2-I2AV-TwoStage.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2-I2AV-TwoStage.py)|-|-|-|-| +|[Lightricks/LTX-2: DistilledPipeline-I2AV](https://www.modelscope.cn/models/Lightricks/LTX-2)|`input_images`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2-I2AV-DistilledPipeline.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2-I2AV-DistilledPipeline.py)|-|-|-|-| +|[Lightricks/LTX-2-19b-LoRA-Camera-Control-Dolly-In](https://www.modelscope.cn/models/Lightricks/LTX-2-19b-LoRA-Camera-Control-Dolly-In)||[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2-T2AV-Camera-Control-Dolly-In.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2-T2AV-Camera-Control-Dolly-In.py)|-|-|-|-| +|[Lightricks/LTX-2-19b-LoRA-Camera-Control-Dolly-Out](https://www.modelscope.cn/models/Lightricks/LTX-2-19b-LoRA-Camera-Control-Dolly-Out)||[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2-T2AV-Camera-Control-Dolly-Out.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2-T2AV-Camera-Control-Dolly-Out.py)|-|-|-|-| +|[Lightricks/LTX-2-19b-LoRA-Camera-Control-Dolly-Left](https://www.modelscope.cn/models/Lightricks/LTX-2-19b-LoRA-Camera-Control-Dolly-Left)||[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2-T2AV-Camera-Control-Dolly-Left.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2-T2AV-Camera-Control-Dolly-Left.py)|-|-|-|-| +|[Lightricks/LTX-2-19b-LoRA-Camera-Control-Dolly-Right](https://www.modelscope.cn/models/Lightricks/LTX-2-19b-LoRA-Camera-Control-Dolly-Right)||[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2-T2AV-Camera-Control-Dolly-Right.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2-T2AV-Camera-Control-Dolly-Right.py)|-|-|-|-| +|[Lightricks/LTX-2-19b-LoRA-Camera-Control-Jib-Up](https://www.modelscope.cn/models/Lightricks/LTX-2-19b-LoRA-Camera-Control-Jib-Up)||[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2-T2AV-Camera-Control-Jib-Up.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2-T2AV-Camera-Control-Jib-Up.py)|-|-|-|-| +|[Lightricks/LTX-2-19b-LoRA-Camera-Control-Jib-Down](https://www.modelscope.cn/models/Lightricks/LTX-2-19b-LoRA-Camera-Control-Jib-Down)||[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2-T2AV-Camera-Control-Jib-Down.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2-T2AV-Camera-Control-Jib-Down.py)|-|-|-|-| +|[Lightricks/LTX-2-19b-LoRA-Camera-Control-Static](https://www.modelscope.cn/models/Lightricks/LTX-2-19b-LoRA-Camera-Control-Static)||[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2-T2AV-Camera-Control-Static.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2-T2AV-Camera-Control-Static.py)|-|-|-|-| + +## Model Inference + +Models are loaded through `LTX2AudioVideoPipeline.from_pretrained`, see [Loading Models](../Pipeline_Usage/Model_Inference.md#loading-models) for details. + +Input parameters for `LTX2AudioVideoPipeline` inference include: + +* `prompt`: Prompt describing the content appearing in the video. +* `negative_prompt`: Negative prompt describing content that should not appear in the video, default value is `""`. +* `cfg_scale`: Classifier-free guidance parameter, default value is 3.0. +* `input_images`: List of input images for image-to-video generation. +* `input_images_indexes`: Frame index list of input images in the video. +* `input_images_strength`: Strength of input images, default value is 1.0. +* `denoising_strength`: Denoising strength, range is 0~1, default value is 1.0. +* `seed`: Random seed. Default is `None`, which means completely random. +* `rand_device`: Computing device for generating random Gaussian noise matrix, default is `"cpu"`. When set to `cuda`, different results will be generated on different GPUs. +* `height`: Video height, must be a multiple of 32 (single-stage) or 64 (two-stage). +* `width`: Video width, must be a multiple of 32 (single-stage) or 64 (two-stage). +* `num_frames`: Number of video frames, default value is 121, must be a multiple of 8 + 1. +* `num_inference_steps`: Number of inference steps, default value is 40. +* `tiled`: Whether to enable VAE tiling inference, default is `True`. When set to `True`, it can significantly reduce VRAM usage during VAE encoding/decoding stages, with slight errors and minor inference time extension. +* `tile_size_in_pixels`: Pixel tiling size during VAE encoding/decoding stages, default is 512. +* `tile_overlap_in_pixels`: Pixel tiling overlap size during VAE encoding/decoding stages, default is 128. +* `tile_size_in_frames`: Frame tiling size during VAE encoding/decoding stages, default is 128. +* `tile_overlap_in_frames`: Frame tiling overlap size during VAE encoding/decoding stages, default is 24. +* `use_two_stage_pipeline`: Whether to use two-stage pipeline, default is `False`. +* `use_distilled_pipeline`: Whether to use distilled pipeline, default is `False`. +* `progress_bar_cmd`: Progress bar, default is `tqdm.tqdm`. Can be set to `lambda x:x` to hide the progress bar. + +If VRAM is insufficient, please enable [VRAM Management](../Pipeline_Usage/VRAM_management.md). We provide recommended low VRAM configurations for each model in the example code, see the table in the previous "Supported Inference Scripts" section. + +## Model Training + +LTX-2 series models are uniformly trained through [`examples/ltx2/model_training/train.py`](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/train.py), and the script parameters include: + +* General Training Parameters + * Dataset Basic Configuration + * `--dataset_base_path`: Root directory of the dataset. + * `--dataset_metadata_path`: Metadata file path of the dataset. + * `--dataset_repeat`: Number of times the dataset is repeated in each epoch. + * `--dataset_num_workers`: Number of processes for each DataLoader. + * `--data_file_keys`: Field names to be loaded from metadata, usually image or video file paths, separated by `,`. + * Model Loading Configuration + * `--model_paths`: Paths of models to be loaded. JSON format. + * `--model_id_with_origin_paths`: Model IDs with original paths, e.g., `"Wan-AI/Wan2.1-T2V-1.3B:diffusion_pytorch_model*.safetensors"`. Separated by commas. + * `--extra_inputs`: Extra input parameters required by the model Pipeline, e.g., extra parameters when training image editing models, separated by `,`. + * `--fp8_models`: Models loaded in FP8 format, consistent with `--model_paths` or `--model_id_with_origin_paths` format. Currently only supports models whose parameters are not updated by gradients (no gradient backpropagation, or gradients only update their LoRA). + * `--quant_options`: Dynamically quantize loaded models. Semicolon-separated entries, each `:[/]`, where `` matches an entry in `--model_paths`/`--model_id_with_origin_paths`, `method` is a registered method (e.g. `bitsandbytes_nf4`), and `exclude_modules` optionally lists layers kept in full precision. + * Training Basic Configuration + * `--learning_rate`: Learning rate. + * `--num_epochs`: Number of epochs. + * `--trainable_models`: Trainable models, e.g., `dit`, `vae`, `text_encoder`. + * `--find_unused_parameters`: Whether there are unused parameters in DDP training. Some models contain redundant parameters that do not participate in gradient calculation, and this setting needs to be enabled to avoid errors in multi-GPU training. + * `--weight_decay`: Weight decay size, see [torch.optim.AdamW](https://docs.pytorch.org/docs/stable/generated/torch.optim.AdamW.html). + * `--task`: Training task, default is `sft`. Some models support more training modes, please refer to the documentation of each specific model. + * Output Configuration + * `--output_path`: Model saving path. + * `--remove_prefix_in_ckpt`: Remove prefix in the state dict of the model file. + * `--save_steps`: Interval of training steps to save the model. If this parameter is left blank, the model is saved once per epoch. + * LoRA Configuration + * `--lora_base_model`: Which model to add LoRA to. + * `--lora_target_modules`: Which layers to add LoRA to. + * `--lora_rank`: Rank of LoRA. + * `--lora_checkpoint`: Path of the LoRA checkpoint. If this path is provided, LoRA will be loaded from this checkpoint. + * `--preset_lora_path`: Preset LoRA checkpoint path. If this path is provided, this LoRA will be loaded in the form of being merged into the base model. This parameter is used for LoRA differential training. + * `--preset_lora_model`: Model that the preset LoRA is merged into, e.g., `dit`. + * Gradient Configuration + * `--use_gradient_checkpointing`: Whether to enable gradient checkpointing. + * `--use_gradient_checkpointing_offload`: Whether to offload gradient checkpointing to memory. + * `--gradient_accumulation_steps`: Number of gradient accumulation steps. + * Video Width/Height Configuration + * `--height`: Height of the video. Leave `height` and `width` blank to enable dynamic resolution. + * `--width`: Width of the video. Leave `height` and `width` blank to enable dynamic resolution. + * `--max_pixels`: Maximum pixel area of video frames. When dynamic resolution is enabled, video frames with resolution larger than this value will be downscaled, and video frames with resolution smaller than this value will remain unchanged. + * `--num_frames`: Number of frames in the video. +* LTX-2 Series Specific Parameters + * `--tokenizer_path`: Path of the tokenizer, applicable to text-to-video models, leave blank to automatically download from remote. + * `--frame_rate`: frame rate of the training videos. + +We have built a sample video dataset for your testing. You can download this dataset with the following command: + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --local_dir ./data/diffsynth_example_dataset +``` + +We have written recommended training scripts for each model, please refer to the table in the "Model Overview" section above. For how to write model training scripts, please refer to [Model Training](../Pipeline_Usage/Model_Training.md); for more advanced training algorithms, please refer to [Training Framework Detailed Explanation](https://github.com/modelscope/DiffSynth-Studio/tree/main/docs/en/Training/). diff --git a/docs/en/Model_Details/LingBot-Video.md b/docs/en/Model_Details/LingBot-Video.md new file mode 100644 index 0000000000000000000000000000000000000000..33f62c9a537e035b70dc1a53827ce584560ec1aa --- /dev/null +++ b/docs/en/Model_Details/LingBot-Video.md @@ -0,0 +1,213 @@ +# LingBot-Video + +LingBot-Video is a flow-matching video generation model developed by the LingBot team; a single model handles text-to-video, image-to-video and text-to-image tasks. + +Huge thanks to [NancyFyong](https://github.com/NancyFyong) for the outstanding contribution to the integration of this model! + +## Installation + +Before performing model inference and training, please install DiffSynth-Studio first. + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +For more information on installation, please refer to [Setup Dependencies](../Pipeline_Usage/Setup.md). + +## Quick Start + +Running the following code will load the [Robbyant/lingbot-video-dense-1.3b](https://modelscope.cn/models/Robbyant/lingbot-video-dense-1.3b) model for inference. VRAM management is enabled, the framework automatically controls parameter loading based on available VRAM, requiring a minimum of 6GB VRAM. + +```python +import torch +import json +from diffsynth.utils.data import save_video, VideoData +from diffsynth.pipelines.lingbot_video import LingBotVideoPipeline, ModelConfig +from modelscope import dataset_snapshot_download + +vram_config = { + "offload_dtype": "disk", + "offload_device": "disk", + "onload_dtype": torch.float8_e4m3fn, + "onload_device": "cpu", + "preparing_dtype": torch.float8_e4m3fn, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} + +pipe = LingBotVideoPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Robbyant/lingbot-video-dense-1.3b", origin_file_pattern="transformer/diffusion_pytorch_model.safetensors", **vram_config), + ModelConfig(model_id="Qwen/Qwen3-VL-4B-Instruct", origin_file_pattern="*.safetensors", **vram_config), + ModelConfig(model_id="Robbyant/lingbot-video-dense-1.3b", origin_file_pattern="vae/diffusion_pytorch_model.safetensors", **vram_config), + ], + processor_config=ModelConfig(model_id="Qwen/Qwen3-VL-4B-Instruct", origin_file_pattern=""), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) + +dataset_snapshot_download( + dataset_id="DiffSynth-Studio/diffsynth_example_dataset", + local_dir="data/diffsynth_example_dataset", + allow_file_pattern="lingbot_video/lingbot-video-dense-1.3b_t2v/*", +) +with open("data/diffsynth_example_dataset/lingbot_video/lingbot-video-dense-1.3b_t2v/t2v_example_1.json", "r", encoding="utf-8") as f: + caption = json.load(f) + +video = pipe( + prompt=caption, + negative_prompt=pipe.default_negative_prompt, + height=480, width=832, num_frames=81, + num_inference_steps=40, cfg_scale=3.0, + seed=0, +) +save_video(video, "video.mp4", fps=15, quality=10) +``` + +## Model Overview + +|Model ID|Inference|Low VRAM Inference|Full Training|Full Training Validation|LoRA Training|LoRA Training Validation| +|-|-|-|-|-|-|-| +|[Robbyant/lingbot-video-dense-1.3b: T2V](https://modelscope.cn/models/Robbyant/lingbot-video-dense-1.3b)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_inference/lingbot-video-dense-1.3b_t2v.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_inference_low_vram/lingbot-video-dense-1.3b_t2v.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_training/full/lingbot-video-dense-1.3b_t2v.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_training/validate_full/lingbot-video-dense-1.3b_t2v.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_training/lora/lingbot-video-dense-1.3b_t2v.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_training/validate_lora/lingbot-video-dense-1.3b_t2v.py)| +|[Robbyant/lingbot-video-dense-1.3b: TI2V](https://modelscope.cn/models/Robbyant/lingbot-video-dense-1.3b)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_inference/lingbot-video-dense-1.3b_ti2v.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_inference_low_vram/lingbot-video-dense-1.3b_ti2v.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_training/full/lingbot-video-dense-1.3b_ti2v.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_training/validate_full/lingbot-video-dense-1.3b_ti2v.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_training/lora/lingbot-video-dense-1.3b_ti2v.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_training/validate_lora/lingbot-video-dense-1.3b_ti2v.py)| +|[Robbyant/lingbot-video-dense-1.3b: T2I](https://modelscope.cn/models/Robbyant/lingbot-video-dense-1.3b)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_inference/lingbot-video-dense-1.3b_t2i.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_inference_low_vram/lingbot-video-dense-1.3b_t2i.py)|-|-|-|-| +|[Robbyant/lingbot-video-moe-30b-a3b: T2V](https://modelscope.cn/models/Robbyant/lingbot-video-moe-30b-a3b)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_inference/lingbot-video-moe-30b-a3b_t2v.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_inference_low_vram/lingbot-video-moe-30b-a3b_t2v.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_training/full/lingbot-video-moe-30b-a3b_t2v.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_training/validate_full/lingbot-video-moe-30b-a3b_t2v.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_training/lora/lingbot-video-moe-30b-a3b_t2v.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_training/validate_lora/lingbot-video-moe-30b-a3b_t2v.py)| +|[Robbyant/lingbot-video-moe-30b-a3b: TI2V](https://modelscope.cn/models/Robbyant/lingbot-video-moe-30b-a3b)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_inference/lingbot-video-moe-30b-a3b_ti2v.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_inference_low_vram/lingbot-video-moe-30b-a3b_ti2v.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_training/full/lingbot-video-moe-30b-a3b_ti2v.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_training/validate_full/lingbot-video-moe-30b-a3b_ti2v.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_training/lora/lingbot-video-moe-30b-a3b_ti2v.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_training/validate_lora/lingbot-video-moe-30b-a3b_ti2v.py)| +|[Robbyant/lingbot-video-moe-30b-a3b: T2I](https://modelscope.cn/models/Robbyant/lingbot-video-moe-30b-a3b)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_inference/lingbot-video-moe-30b-a3b_t2i.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_inference_low_vram/lingbot-video-moe-30b-a3b_t2i.py)|-|-|-|-| +|[Robbyant/lingbot-video-moe-30b-a3b: T2V + Refinement](https://modelscope.cn/models/Robbyant/lingbot-video-moe-30b-a3b)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_inference/lingbot-video-moe-30b-a3b_t2v_refiner.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_inference_low_vram/lingbot-video-moe-30b-a3b_t2v_refiner.py)|-|-|-|-| +|[Robbyant/lingbot-video-moe-30b-a3b: TI2V + Refinement](https://modelscope.cn/models/Robbyant/lingbot-video-moe-30b-a3b)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_inference/lingbot-video-moe-30b-a3b_ti2v_refiner.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_inference_low_vram/lingbot-video-moe-30b-a3b_ti2v_refiner.py)|-|-|-|-| + +## Model Inference + +The model is loaded via `LingBotVideoPipeline.from_pretrained`, see [Loading Models](../Pipeline_Usage/Model_Inference.md#loading-models) for details. + +The input parameters for `LingBotVideoPipeline` inference include: + +* `prompt`: Structured-JSON caption (`dict`) or a plain string describing the content. LingBot-Video is trained on structured captions; the pipeline normalises a `dict` automatically. Released structured captions ship in the example dataset (see [Prompt rewriting](#prompt-rewriting) below). +* `negative_prompt`: Negative prompt describing content that should not appear. `pipe.default_negative_prompt` ships the official T2V/V2V/TI2V negative prompt; `pipe.default_negative_prompt_image` is the T2I variant with temporal terms removed. +* `input_image`: First-frame PIL image for image-to-video (TI2V). The frame is VAE-encoded to a clean latent pinned into the first temporal slot after every scheduler step, so the model only generates the frames that follow. Leave `None` for T2V / V2V / T2I. +* `input_video`: Input video (a list of frames or a `VideoData`) for video-to-video generation, used together with `denoising_strength`. +* `denoising_strength`: Denoising strength in `[0, 1]`, default `1.0`. Lower values keep more of the input video structure. Only effective when `input_video` is provided. +* `height`: Video / image height, default `480`. Must be a multiple of 16. +* `width`: Video / image width, default `480`. Must be a multiple of 16. +* `num_frames`: Number of frames, default `81`. Must satisfy `4k+1` (the VAE compresses time by 4×). Use `num_frames=1` for text-to-image. +* `cfg_scale`: Classifier-free guidance scale, default `3.0`. +* `num_inference_steps`: Number of inference steps, default `40`. +* `sigma_shift`: Flow-matching timestep shift, default `3.0`. +* `t_thresh`: Refinement start sigma, default `None` (plain generation). When set, the schedule is truncated so that sampling starts at `sigma=t_thresh` and `input_video` is noised to exactly that level. Only meaningful together with `input_video`; TI2V additionally re-pins the clean first-frame latent after every step. The official refiner setting is `0.85`. +* `sigma_tail_steps`: Number of extra low-noise steps appended to the tail of the refinement schedule, default `2`. Only effective when `t_thresh` is set. +* `seed`: Random seed. Default is `None`, meaning completely random. +* `rand_device`: Device for generating the initial noise, default `"cpu"`. +* `progress_bar_cmd`: Progress bar, default `tqdm`. Can be disabled by setting to `lambda x: x`. + +If VRAM is insufficient, please enable [VRAM Management](../Pipeline_Usage/VRAM_management.md). We provide recommended low-VRAM configurations for each task in the example code, see the table in the "Model Overview" section above. + +### Two-stage refinement + +The MoE refiner performs a short second pass at a higher resolution: the official setup generates at 480×832 with 40 steps, then refines at 1088×1920 with 8 steps. Load the pipeline with the `refiner/` shards instead of `transformer/`, feed the base clip back in through `input_video` at the higher resolution, and set `t_thresh`: + +```python +input_video = VideoData("video_base.mp4", height=1088, width=1920) +video = pipe( + prompt=caption, + negative_prompt=pipe.default_negative_prompt, + input_video=input_video, + height=1088, width=1920, num_frames=81, + num_inference_steps=8, cfg_scale=3.0, + t_thresh=0.85, sigma_tail_steps=2, + seed=0, +) +``` + +The upscaled clip is VAE-encoded and noised back to `sigma=t_thresh`, so the pass keeps the structure of the base clip and regenerates detail at the target resolution. Pass the same caption as the base pass and keep the same aspect ratio. The refinement resolution dominates the cost — at 1088×1920 the sequence is ~5× longer than at 480×832 — so run this pass with VRAM management enabled. + +### Prompt rewriting + +LingBot-Video is trained on **structured-JSON captions**, not free-form prose. Feeding a flat sentence is out-of-distribution and visibly degrades quality. The pipeline accepts a caption as a `dict` (the format used at training time) or a plain string, and normalises the `dict` internally. + +Released structured captions ship in the example dataset (`t2v_example_*.json`, `ti2v_example.json`, `t2i_example.json` under `DiffSynth-Studio/diffsynth_example_dataset`, downloaded automatically by the inference example scripts). Load one with `json.load` and pass the resulting `dict` to the pipeline, or use one as a template. + +To turn a brief idea into a structured caption, use the two-stage rewriter shipped under `examples/lingbot_video/model_training/scripts/prompt_rewriter.py` — stage 1 expands the idea into a natural-language caption, stage 2 maps it into structured JSON. The rewriter is a **separate VLM + stage-2 LoRA adapter** and is not downloaded automatically: + +| Role | Model ID | Size | +|-|-|-| +| Rewriter base VLM (stage 1 + 2) | [`Qwen/Qwen3.6-27B`](https://modelscope.cn/models/Qwen/Qwen3.6-27B) | ~55 GB | +| Rewriter stage-2 LoRA adapter | [`Robbyant/lingbot-video-rewriter-lora`](https://modelscope.cn/models/Robbyant/lingbot-video-rewriter-lora) | ~0.5 GB | + +```python +import os +os.environ["REWRITER_BASE_MODEL"] = "./models/Qwen/Qwen3.6-27B" +os.environ["REWRITER_ADAPTER"] = "./models/Robbyant/lingbot-video-rewriter-lora" + +# Run from the repo root so the package-style import resolves. +from examples.lingbot_video.model_training.scripts.prompt_rewriter import rewrite_prompt +caption = rewrite_prompt("a puppy running across a meadow", mode="t2v", duration=5) +video = pipe(prompt=caption, height=480, width=832, num_frames=81, cfg_scale=3.0) +``` + +Instead of the env vars you can pass `base=` / `adapter=` to `rewrite_prompt`, or drive a hosted / OpenAI-compatible endpoint by passing a custom object exposing `generate(text, image, use_lora)` as `backend=`. + +## Model Training + +Models in the LingBot-Video series are trained uniformly via [`examples/lingbot_video/model_training/train.py`](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_training/train.py). The script parameters include: + +* General Training Parameters + * Dataset Configuration + * `--dataset_base_path`: Root directory of the dataset. + * `--dataset_metadata_path`: Path to the dataset metadata file. + * `--dataset_repeat`: Number of dataset repeats per epoch. + * `--dataset_num_workers`: Number of processes per DataLoader. + * `--data_file_keys`: Field names to load from metadata, typically paths to image or video files, separated by `,`. + * Model Loading Configuration + * `--model_paths`: Paths to load models from, in JSON format. + * `--model_id_with_origin_paths`: Model IDs with original paths, separated by commas. + * `--extra_inputs`: Additional input parameters required by the model Pipeline, separated by `,`. + * `--fp8_models`: Models to load in FP8 format, currently only supported for models whose parameters are not updated by gradients. + * `--quant_options`: Dynamically quantize loaded models. Semicolon-separated entries, each `:[/]`, where `` matches an entry in `--model_paths`/`--model_id_with_origin_paths`, `method` is a registered method (e.g. `bitsandbytes_nf4`), and `exclude_modules` optionally lists layers kept in full precision. + * Basic Training Configuration + * `--learning_rate`: Learning rate. + * `--num_epochs`: Number of epochs. + * `--trainable_models`: Trainable models, e.g., `dit`, `vae`, `text_encoder`. + * `--find_unused_parameters`: Whether unused parameters exist in DDP training. + * `--weight_decay`: Weight decay magnitude. + * `--task`: Training task, defaults to `sft`. + * Output Configuration + * `--output_path`: Path to save the model. + * `--remove_prefix_in_ckpt`: Remove prefix in the model's state dict. + * `--save_steps`: Interval in training steps to save the model. + * LoRA Configuration + * `--lora_base_model`: Which model to add LoRA to. + * `--lora_target_modules`: Which layers to add LoRA to. + * `--lora_rank`: Rank of LoRA. + * `--lora_checkpoint`: Path to LoRA checkpoint. + * `--preset_lora_path`: Path to preset LoRA checkpoint for LoRA differential training. + * `--preset_lora_model`: Which model to integrate preset LoRA into, e.g., `dit`. + * Gradient Configuration + * `--use_gradient_checkpointing`: Whether to enable gradient checkpointing. + * `--use_gradient_checkpointing_offload`: Whether to offload gradient checkpointing to CPU memory. + * `--gradient_accumulation_steps`: Number of gradient accumulation steps. + * Resolution Configuration + * `--height`: Height of the video. Must be divisible by 16. + * `--width`: Width of the video. Must be divisible by 16. + * `--max_pixels`: Maximum pixel area, images larger than this will be scaled down during dynamic resolution. + * `--num_frames`: Number of frames in the video. Must satisfy `4k+1`. +* LingBot-Video Specific Parameters + * `--processor_path`: Path to the Qwen3-VL processor directory (or `model_id:origin_file_pattern`). Used to tokenize prompts. + * `--first_frame_as_condition`: Enable image-to-video (TI2V) LoRA / full training. Each clip is conditioned on its own first frame: the frame is VAE-encoded to a clean latent pinned into the first temporal slot (and fed to the Qwen3-VL text encoder as vision input), and excluded from the flow-matching loss. + * `--max_timestep_boundary`: Max timestep boundary as a fraction of the training schedule, in `[0, 1]`. + * `--min_timestep_boundary`: Min timestep boundary as a fraction of the training schedule, in `[0, 1]`. + * `--initialize_model_on_cpu`: Whether to initialize models on CPU. + +We provide a sample dataset for your testing. You can download it with the following command: + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "lingbot_video/lingbot-video-dense-1.3b_t2v/*" --local_dir ./data/diffsynth_example_dataset +``` + +Training captions should be **structured-JSON captions** (the same in-distribution format used at inference). If your dataset stores raw prose, rewrite it once offline with [`examples/lingbot_video/model_training/scripts/rewrite_captions.py`](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_training/scripts/rewrite_captions.py) before training. + +We provide recommended training scripts for each task, please refer to the table in "Model Overview" above. For guidance on writing model training scripts, see [Model Training](../Pipeline_Usage/Model_Training.md); for more advanced training algorithms, see [Training Framework Overview](https://github.com/modelscope/DiffSynth-Studio/tree/main/docs/en/Training/). diff --git a/docs/en/Model_Details/MiniMax-H3.md b/docs/en/Model_Details/MiniMax-H3.md new file mode 100644 index 0000000000000000000000000000000000000000..45d2815a4082c44f9555b02761e1561a751fde77 --- /dev/null +++ b/docs/en/Model_Details/MiniMax-H3.md @@ -0,0 +1,246 @@ +# MiniMax-H3 + +MiniMax H3 is a general-purpose omni-modal generation system. It supports unified understanding of multimodal contexts composed of text, images, video, and audio, and can generate videos of up to 2K resolution and up to 15 seconds in length with native stereo audio. Thanks to a system design oriented toward task generalization, H3 already acquires broad multimodal context understanding and generation capabilities during pre-training, and therefore excels at following complex multimodal instructions. + +## Installation + +Before performing model inference and training, please install DiffSynth-Studio first. + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +For more information on installation, please refer to [Setup Dependencies](../Pipeline_Usage/Setup.md). + +## Quick Start + +Running the following code will quickly load the [DiffSynth-Studio/MiniMax-H3-NF4](https://www.modelscope.cn/models/DiffSynth-Studio/MiniMax-H3-NF4) NF4-quantized model and perform text-to-video-audio inference. VRAM management is enabled, and the framework automatically controls the loading of model parameters based on available VRAM, requiring a minimum of 7GB VRAM. + +```python +import torch +from diffsynth.pipelines.minimax_h3_audio_video import MiniMaxH3Pipeline, ModelConfig +from diffsynth.utils.data.audio_video import write_video_audio + +vram_config = { + "offload_dtype": torch.bfloat16, + "offload_device": "cpu", + "onload_dtype": torch.bfloat16, + "onload_device": "cpu", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} +pipe = MiniMaxH3Pipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="DiffSynth-Studio/MiniMax-H3-NF4", origin_file_pattern="minimax-h3-fl2va-nf4.safetensors", **vram_config), + ModelConfig(model_id="DiffSynth-Studio/MiniMax-H3-NF4", origin_file_pattern="minimax-h3-text-encoder-nf4.safetensors", **vram_config), + ModelConfig(model_id="DiffSynth-Studio/MiniMax-H3-NF4", origin_file_pattern="video_vae_nf4.safetensors", **vram_config), + ModelConfig(model_id="DiffSynth-Studio/MiniMax-H3-NF4", origin_file_pattern="audio_vae_nf4.safetensors", **vram_config), + ], + processor_config=ModelConfig(model_id="MiniMax/MiniMax-H3", origin_file_pattern="FL2VA/processor/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 2, +) + +# Text -> Video + Audio +prompt = "A girl is very happy, she is speaking in english: “I enjoy working with Diffsynth-Studio, it's a perfect framework.”" +video, audio = pipe( + prompt=prompt, + height=480, width=832, num_frames=124, num_inference_steps=50, seed=0, +) +write_video_audio( + video=video, audio=audio, + output_path="t2va.mp4", fps=24, audio_sample_rate=32000, +) +``` + +## Model Overview + +|Model ID|Inference|Low VRAM Inference|Full Training|Full Training Validation|LoRA Training|LoRA Training Validation| +|-|-|-|-|-|-|-| +|[MiniMax/MiniMax-H3: FL2VA](https://www.modelscope.cn/models/MiniMax/MiniMax-H3)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference/MiniMax-H3-FL2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-FL2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/full/MiniMax-H3-FL2VA.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/validate_full/MiniMax-H3-FL2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/lora/MiniMax-H3-FL2VA.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-FL2VA.py)| +|[MiniMax/MiniMax-H3: Ref2VA](https://www.modelscope.cn/models/MiniMax/MiniMax-H3)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference/MiniMax-H3-Ref2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-Ref2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/full/MiniMax-H3-Ref2VA.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/validate_full/MiniMax-H3-Ref2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/lora/MiniMax-H3-Ref2VA.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-Ref2VA.py)| +|[MiniMax/MiniMax-H3: Retake](https://www.modelscope.cn/models/MiniMax/MiniMax-H3)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference/MiniMax-H3-Retake.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-Retake.py)|-|-|-|-| +|[DiffSynth-Studio/MiniMax-H3-NF4: FL2VA](https://www.modelscope.cn/models/DiffSynth-Studio/MiniMax-H3-NF4)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference/MiniMax-H3-NF4-FL2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-NF4-FL2VA.py)|-|-|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/lora/MiniMax-H3-NF4-FL2VA.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-NF4-FL2VA.py)| +|[DiffSynth-Studio/MiniMax-H3-NF4: Ref2VA](https://www.modelscope.cn/models/DiffSynth-Studio/MiniMax-H3-NF4)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference/MiniMax-H3-NF4-Ref2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-NF4-Ref2VA.py)|-|-|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/lora/MiniMax-H3-NF4-Ref2VA.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-NF4-Ref2VA.py)| +|[Comfy-Org/MiniMax-H3: FL2VA pruned](https://www.modelscope.cn/models/Comfy-Org/MiniMax-H3)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference/MiniMax-H3-Pruned-FL2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-Pruned-FL2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/full/MiniMax-H3-Pruned-FL2VA.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/validate_full/MiniMax-H3-Pruned-FL2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/lora/MiniMax-H3-Pruned-FL2VA.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-Pruned-FL2VA.py)| +|[Comfy-Org/MiniMax-H3: Ref2VA pruned](https://www.modelscope.cn/models/Comfy-Org/MiniMax-H3)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference/MiniMax-H3-Pruned-Ref2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-Pruned-Ref2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/full/MiniMax-H3-Pruned-Ref2VA.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/validate_full/MiniMax-H3-Pruned-Ref2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/lora/MiniMax-H3-Pruned-Ref2VA.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-Pruned-Ref2VA.py)| +|[DiffSynth-Studio/MiniMax-H3-NF4: FL2VA pruned](https://www.modelscope.cn/models/DiffSynth-Studio/MiniMax-H3-NF4)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference/MiniMax-H3-NF4-Pruned-FL2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-NF4-Pruned-FL2VA.py)|-|-|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/lora/MiniMax-H3-NF4-Pruned-FL2VA.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-NF4-Pruned-FL2VA.py)| +|[DiffSynth-Studio/MiniMax-H3-NF4: Ref2VA pruned](https://www.modelscope.cn/models/DiffSynth-Studio/MiniMax-H3-NF4)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference/MiniMax-H3-NF4-Pruned-Ref2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-NF4-Pruned-Ref2VA.py)|-|-|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/lora/MiniMax-H3-NF4-Pruned-Ref2VA.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-NF4-Pruned-Ref2VA.py)| +|[Comfy-Org/MiniMax-H3: FL2VA int8_convrot](https://www.modelscope.cn/models/Comfy-Org/MiniMax-H3)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference/MiniMax-H3-Int8-ConvRot-FL2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-Int8-ConvRot-FL2VA.py)|-|-|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/lora/MiniMax-H3-Int8-ConvRot-FL2VA.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-Int8-ConvRot-FL2VA.py)| +|[Comfy-Org/MiniMax-H3: Ref2VA int8_convrot](https://www.modelscope.cn/models/Comfy-Org/MiniMax-H3)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference/MiniMax-H3-Int8-ConvRot-Ref2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-Int8-ConvRot-Ref2VA.py)|-|-|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/lora/MiniMax-H3-Int8-ConvRot-Ref2VA.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-Int8-ConvRot-Ref2VA.py)| +|[Comfy-Org/MiniMax-H3: FL2VA pruned int8_convrot](https://www.modelscope.cn/models/Comfy-Org/MiniMax-H3)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference/MiniMax-H3-Int8-ConvRot-Pruned-FL2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-Int8-ConvRot-Pruned-FL2VA.py)|-|-|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/lora/MiniMax-H3-Int8-ConvRot-Pruned-FL2VA.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-Int8-ConvRot-Pruned-FL2VA.py)| +|[Comfy-Org/MiniMax-H3: Ref2VA pruned int8_convrot](https://www.modelscope.cn/models/Comfy-Org/MiniMax-H3)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference/MiniMax-H3-Int8-ConvRot-Pruned-Ref2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-Int8-ConvRot-Pruned-Ref2VA.py)|-|-|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/lora/MiniMax-H3-Int8-ConvRot-Pruned-Ref2VA.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-Int8-ConvRot-Pruned-Ref2VA.py)| +|[Comfy-Org/MiniMax-H3: FL2VA pruned fp8](https://www.modelscope.cn/models/Comfy-Org/MiniMax-H3)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference/MiniMax-H3-FP8-Pruned-FL2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-FP8-Pruned-FL2VA.py)|-|-|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/lora/MiniMax-H3-FP8-Pruned-FL2VA.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-FP8-Pruned-FL2VA.py)| +|[Comfy-Org/MiniMax-H3: Ref2VA pruned fp8](https://www.modelscope.cn/models/Comfy-Org/MiniMax-H3)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference/MiniMax-H3-FP8-Pruned-Ref2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-FP8-Pruned-Ref2VA.py)|-|-|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/lora/MiniMax-H3-FP8-Pruned-Ref2VA.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-FP8-Pruned-Ref2VA.py)| +|[lightx2v/Minimax-h3-Turbo: FL2VA 4steps](https://www.modelscope.cn/models/lightx2v/Minimax-h3-Turbo)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference/MiniMax-H3-FL2VA-Turbo.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-FL2VA-Turbo.py)|-|-|-|-| +|[DiffSynth-Studio/MiniMax-H3-Text-Embeddings](https://www.modelscope.cn/models/DiffSynth-Studio/MiniMax-H3-Text-Embeddings)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference/MiniMax-H3-Text-Embeddings.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-Text-Embeddings.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/full/MiniMax-H3-Text-Embeddings.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/validate_full/MiniMax-H3-Text-Embeddings.py)|-|-| + +The model weights are split into two partitions: the `FL2VA` partition serves text-to-video-audio and keyframe-guided generation, while the `Ref2VA` partition serves reference-driven generation. The two partitions have different DiT and text encoder weights, so choose the `origin_file_pattern` of the matching partition for your task. + +## Model Inference + +The model is loaded via `MiniMaxH3Pipeline.from_pretrained`, see [Loading Models](../Pipeline_Usage/Model_Inference.md#loading-models) for details. Besides `model_configs`, the loading parameters include: + +* `processor_config`: `ModelConfig` of the Qwen3-VL processor, used to tokenize the prompt and reference images. Defaults to `FL2VA/processor/`; set it explicitly to `Ref2VA/processor/` when using the `Ref2VA` partition. +* `vram_limit`: VRAM budget for VRAM management (in GB). Leave empty for no limit. + +The input parameters for `MiniMaxH3Pipeline` inference include: + +* `prompt`: Prompt describing the content of the video as well as the lines spoken by the characters. +* `negative_prompt`: Negative prompt, defaults to `" "`. This model is CFG-distilled, so it takes no effect by default. +* `height`: Height of the video, defaults to 768, must be a multiple of 32. +* `width`: Width of the video, defaults to 1344, must be a multiple of 32. +* `num_frames`: Number of frames, defaults to 124. It is snapped up to the nearest `17n+5`, so the returned clip may be slightly longer than requested. The frame rate is fixed at 24. +* `num_inference_steps`: Number of inference steps, defaults to 50. +* `seed`: Random seed, defaults to 42. +* `rand_device`: Device used to generate the random Gaussian noise tensor, defaults to `"cpu"`. When set to `cuda`, results differ across GPUs. +* `cfg_scale`: Classifier-free guidance scale, defaults to 1.0. This model is CFG-distilled, keeping the default value is recommended. +* `flow_shift`: Flow matching timestep shift for the video modality, defaults to 12.0. +* `audio_flow_shift`: Flow matching timestep shift for the audio modality, defaults to 3.0. Video and audio use two independent sigma schedules. +* `tiled`: Whether to enable tiled VAE inference, defaults to `True`. Enabling it significantly reduces VRAM usage during VAE encoding/decoding, at the cost of a slight numerical error and a small increase in inference time. +* `tile_size`: Tile size during VAE encoding/decoding, defaults to 256. +* `tile_overlap`: Tile overlap during VAE encoding/decoding, defaults to 64. +* `keyframes`: List of keyframe images for keyframe-guided generation. Images are resized onto the target canvas. +* `keyframe_indices`: Frame indices of the keyframes in the video, either `0` (first frame) or `-1` (last frame), corresponding one-to-one with `keyframes`. +* `references`: List of reference conditions in request order. Each element is a dict in one of the following four forms: + * `{"type": "image", "image": PIL.Image}` + * `{"type": "video", "video": list[PIL.Image]}` (silent video) + * `{"type": "audio", "audio": Tensor[C, L], "sample_rate": int}` + * `{"type": "video_audio", "video": list[PIL.Image], "audio": Tensor[C, L], "sample_rate": int}` + + Video frame lists must ALREADY be at 24fps; the pipeline never resamples the frame rate. A `video` is always treated as silent, so conditioning on a reference video's own soundtrack requires `video_audio` with the waveform passed explicitly — the pipeline receives frame lists rather than files and cannot probe for a soundtrack itself. `diffsynth.utils.data.audio_video.read_video_audio` reads the frames and the soundtrack out of one file with their durations already aligned: + + ```python + from diffsynth.utils.data.audio_video import read_video_audio + + frames, waveform, sample_rate = read_video_audio( + "video.mp4", height=480, width=832, num_frames=124, fps=24, + audio_sample_rate=pipe.audio_vae.sample_rate, + ) + ``` +* `ref_image_short_edge`: Target short edge of a reference image, defaults to 2048. A reference image is rescaled onto that short edge with its aspect ratio preserved (upscaling allowed) and both axes rounded to the nearest multiple of 32. No area cap applies. +* `ref_video_short_edge`: Target short edge of a reference video, defaults to 768. +* `ref_video_max_pixels`: Soft area cap for a reference video, defaults to `768 * 1344`. A reference video is first scaled onto the short edge, then scaled back down proportionally if its area exceeds the cap, and finally both axes are rounded to a multiple of 32. Footage wider than 16:9 usually hits the cap. +* `retake_video`: Source video frame list for video retake, which must already be at 24fps. Frames are resized onto the target canvas and truncated to `num_frames`. Because `num_frames` is first snapped up to the nearest `17n+5`, a source clip is often a few frames short (e.g. a 121-frame clip against an aligned 124); the tail is padded by repeating the last frame, and that padded tail is regenerated rather than frozen. Supply at least `num_frames` frames to avoid this. +* `frame_regions_to_retake`: Half-open **frame-id** ranges of `retake_video` to regenerate, counted from 0, e.g. `[(17, 51)]`. Everything outside them is preserved from the source. The 17 frames of a VAE clip are coupled in latent space, so retaking any frame of a clip retakes the whole clip: each range is widened outwards to clip boundaries. Pass multiples of 17 to get exactly the range you asked for. Omit it, or pass an empty list, to preserve the whole source video, which turns `retake_video` into video-driven audio generation. +* `retake_audio`: Source waveform `Tensor[C, L]` for audio retake. It is converted to stereo and resampled to the audio VAE's sample rate, then trimmed or padded to the video duration. +* `retake_audio_sample_rate`: Sample rate of `retake_audio`, defaults to 32000. +* `seconds_regions_to_retake`: Half-open ranges of `retake_audio` to regenerate, in **seconds**, e.g. `[(0, 1), (4, 5)]`. The audio VAE compresses uniformly at 40 latent frames per second and has no clip structure, so ranges are used as given, at a 1/40 s granularity. Omitting it preserves the whole source audio, which turns `retake_audio` into audio-driven video generation. + + Video and audio retake are independent: either one can be used alone, and note the two use different units -- frame ids for video, seconds for audio. `read_video_audio` is the convenient way to get a time-aligned `(frames, waveform, sample_rate)` triple out of a single file: + + ```python + source_video, source_audio, audio_sample_rate = read_video_audio( + "video.mp4", height=480, width=832, num_frames=124, fps=24, + audio_sample_rate=pipe.audio_vae.sample_rate, + ) + + def align_to_clips(start, end, total_frames, clip_frames=17): + """Widen the half-open frame range [start, end) to whole clips. Frames count from 0.""" + first_clip, last_clip = start // clip_frames, (end - 1) // clip_frames + return first_clip * clip_frames, min((last_clip + 1) * clip_frames, total_frames) + + video, audio = pipe( + prompt=prompt, height=480, width=832, num_frames=124, + retake_video=source_video, + frame_regions_to_retake=[align_to_clips(24, 48, 124)], # frames [24,48) -> (17, 51) + retake_audio=source_audio, + retake_audio_sample_rate=audio_sample_rate, + seconds_regions_to_retake=[(0, 1), (4, 5)], # seconds + ) + ``` +* `progress_bar_cmd`: Progress bar, defaults to `tqdm`. Set it to `lambda x: x` to disable the progress bar. + +The pipeline returns a `(video, audio)` tuple, where the video is a list of PIL images and the audio is a waveform tensor. Use `diffsynth.utils.data.audio_video.write_video_audio` to mux them into an MP4: + +```python +write_video_audio(video=video, audio=audio, output_path="video.mp4", fps=24, audio_sample_rate=pipe.audio_vae.sample_rate) +``` + +If VRAM is insufficient, please enable [VRAM management](../Pipeline_Usage/VRAM_management.md). We provide a recommended low VRAM configuration for each model in the example code, see the table in "Model Overview" above. We also provide NF4-quantized weights to further reduce VRAM requirements; the corresponding scripts are listed in the same table. The int8-quantized weights released by Comfy-Org are supported as well, via the comfy-kitchen backend, which requires `pip install "diffsynth[quant]"`. + +## Model Training + +Models in the MiniMax-H3 series are trained uniformly via [`examples/minimax_h3/model_training/train.py`](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/train.py). The script parameters include: + +* General Training Parameters + * Dataset Configuration + * `--dataset_base_path`: Root directory of the dataset. + * `--dataset_metadata_path`: Path to the dataset metadata file. + * `--dataset_repeat`: Number of dataset repeats per epoch. + * `--dataset_num_workers`: Number of processes per DataLoader. + * `--data_file_keys`: Field names to load from metadata, typically paths to image or video files, separated by `,`. + * Model Loading Configuration + * `--model_paths`: Paths to load models from, in JSON format. + * `--model_id_with_origin_paths`: Model IDs with original paths, separated by commas. + * `--extra_inputs`: Additional input parameters required by the model Pipeline, separated by `,`. + * `--fp8_models`: Models to load in FP8 format, currently only supported for models whose parameters are not updated by gradients. + * `--quant_options`: Dynamically quantize loaded models. Semicolon-separated entries, each `:[/]`, where `` matches an entry in `--model_paths`/`--model_id_with_origin_paths`, `method` is a registered method (e.g. `bitsandbytes_nf4`), and `exclude_modules` optionally lists layers kept in full precision. + * Basic Training Configuration + * `--learning_rate`: Learning rate. + * `--num_epochs`: Number of epochs. + * `--trainable_models`: Trainable models, e.g., `dit`, `vae`, `text_encoder`. + * `--find_unused_parameters`: Whether unused parameters exist in DDP training. + * `--weight_decay`: Weight decay magnitude. + * `--task`: Training task, defaults to `sft`. + * Output Configuration + * `--output_path`: Path to save the model. + * `--remove_prefix_in_ckpt`: Remove prefix in the model's state dict. + * `--save_steps`: Interval in training steps to save the model. + * LoRA Configuration + * `--lora_base_model`: Which model to add LoRA to. + * `--lora_target_modules`: Which layers to add LoRA to. + * `--lora_rank`: Rank of LoRA. + * `--lora_checkpoint`: Path to LoRA checkpoint. + * `--preset_lora_path`: Path to preset LoRA checkpoint for LoRA differential training. + * `--preset_lora_model`: Which model to integrate preset LoRA into, e.g., `dit`. + * Gradient Configuration + * `--use_gradient_checkpointing`: Whether to enable gradient checkpointing. + * `--use_gradient_checkpointing_offload`: Whether to offload gradient checkpointing to CPU memory. + * `--gradient_accumulation_steps`: Number of gradient accumulation steps. + * Resolution Configuration + * `--height`: Height of the video. Leave `height` and `width` empty to enable dynamic resolution. + * `--width`: Width of the video. Leave `height` and `width` empty to enable dynamic resolution. + * `--max_pixels`: Maximum pixel area, images larger than this will be scaled down during dynamic resolution. + * `--num_frames`: Number of frames for the video. +* MiniMax-H3 Specific Parameters + * `--processor_path`: Path of the Qwen3-VL processor, supports the `model_id:origin_file_pattern` form, used to tokenize the prompt. + * `--initialize_model_on_cpu`: Whether to initialize models on CPU. + * `--silent_on_missing_audio`: Whether to use silent audio as a fallback when no audio track is present in the video data. + * `--training_cfg_scale`: Inverse-CFG scale for preserving MiniMax-H3 guidance distillation during fine-tuning. Values greater than 1 enable a no-grad unconditional branch; 1 keeps the standard flow-matching loss. + * `--audio_loss_weight`: Weight of the audio term in the MiniMax-H3 loss. 1 keeps video and audio equally weighted; 0 trains on the video term only while the audio stream is still noised and forwarded. + +We provide an example dataset for testing, which can be downloaded with the following command: + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --local_dir ./data/diffsynth_example_dataset +``` + +The LoRA training scripts use a two-stage workflow: first preprocess and cache the dataset with `--task "sft:data_process"`, then run the actual training with `--task "sft:train"`. The split is required because the DiT and the Qwen3-VL text encoder cannot be resident on one GPU at the same time. LoRA is applied to the `qkv_proj,out_proj` modules of the DiT by default, with a rank of 32. Full training follows the same two-stage workflow; its second stage enables DeepSpeed ZeRO-3 through [`accelerate_config_zero3.yaml`](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/full/accelerate_config_zero3.yaml) and selects the trained model with `--trainable_models "dit"`. + +LoRA training on the NF4 quantized weights is a single-stage workflow: once quantized, every component fits on one GPU, so no dataset cache is needed. In this case `--lora_target_modules` must be given explicitly, because quantized weights are stored packed in the state dict and the automatic search cannot recognise their shape. + +Keyframe-guided (FL2VA) training appends `input_image,end_image` to `--extra_inputs`, taking the first and last frame of the training video as conditions respectively, so the dataset needs no extra column. Reference-driven (Ref2VA) training uses `metadata.json`, whose `references` field is a list of reference blocks supporting four types -- `image`, `video`, `audio` and `video_audio`: + +```json +[ + { + "video": "train_video.mp4", + "prompt": "...", + "input_audio": "train_video.mp4", + "references": [ + {"type": "image", "image": "0.png"} + ], + "frame_rate": 24 + } +] +``` + +`references` must appear in both `--data_file_keys` and `--extra_inputs`: the former loads the files according to their type, the latter injects the reference blocks into the pipeline. Reference images are handed to the pipeline at native resolution (it rescales them by its own reference short edge internally), while reference videos are cropped to the training canvas and sampled at 24fps. + +We provide recommended training scripts for each model, please refer to the table in "Model Overview" above. For guidance on writing model training scripts, see [Model Training](../Pipeline_Usage/Model_Training.md); for more advanced training algorithms, see [Training Framework Overview](https://github.com/modelscope/DiffSynth-Studio/tree/main/docs/en/Training/). diff --git a/docs/en/Model_Details/MiniMax-Music3.md b/docs/en/Model_Details/MiniMax-Music3.md new file mode 100644 index 0000000000000000000000000000000000000000..436c6180c3697eea0fc2caee52b59f381acf5916 --- /dev/null +++ b/docs/en/Model_Details/MiniMax-Music3.md @@ -0,0 +1,94 @@ +# MiniMax-Music3 + +MiniMax-Music3 is a music generation model built on a two-stage cascade of an autoregressive language model and a flow-matching acoustic model. Given a music description and lyrics, it generates a stereo song with vocals. + +## Installation + +Before performing model inference and training, please install DiffSynth-Studio first. + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +For more information on installation, please refer to [Setup Dependencies](../Pipeline_Usage/Setup.md). + +## Quick Start + +Running the following code will load the [MiniMax/MiniMax-Music3](https://www.modelscope.cn/models/MiniMax/MiniMax-Music3) model for inference. VRAM management is enabled, the framework automatically controls parameter loading based on available VRAM, requiring a minimum of 6GB VRAM. + +```python +from diffsynth.pipelines.minimax_music3 import MiniMaxMusic3Pipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio +import torch + +vram_config = { + "offload_dtype": "disk", + "offload_device": "disk", + "onload_dtype": torch.bfloat16, + "onload_device": "cpu", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} + +pipe = MiniMaxMusic3Pipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="MiniMax/MiniMax-Music3", origin_file_pattern="language_model/model*.safetensors", **vram_config), + ModelConfig(model_id="MiniMax/MiniMax-Music3", origin_file_pattern="rvq_depth_decoder/diffusion_pytorch_model.safetensors", **vram_config), + ModelConfig(model_id="MiniMax/MiniMax-Music3", origin_file_pattern="transformer/diffusion_pytorch_model*.safetensors", **vram_config), + ModelConfig(model_id="MiniMax/MiniMax-Music3", origin_file_pattern="condition_encoder/diffusion_pytorch_model.safetensors", **vram_config), + ModelConfig(model_id="MiniMax/MiniMax-Music3", origin_file_pattern="vocoder/diffusion_pytorch_model.safetensors", **vram_config), + ], + tokenizer_config=ModelConfig(model_id="MiniMax/MiniMax-Music3", origin_file_pattern="tokenizer/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) + +lyrics = ( + "[verse]\n" + "Morning light filtering through the pine\n" + "Every quiet street is yours and mine\n" + "[chorus]\n" + "Softly the world begins to breathe" +) +prompt = ( + "Genre: acoustic pop. BPM: 96. Key: C major. Warm and intimate, building gently into the chorus. " + "Vocals: soft female lead, close and breathy, light stacked harmonies in the chorus. " + "Arrangement: fingerpicked guitar and soft piano; brushed drums and upright bass enter in the chorus." +) +audio = pipe(prompt=prompt, lyrics=lyrics, max_audio_duration=60.0, num_inference_steps=30, cfg_scale=1.7, seed=7) +save_audio(audio, 44100, "MiniMax-Music3.wav") +``` + +## Model Overview + +|Model ID|Inference|Low VRAM Inference|Full Training|Full Training Validation|LoRA Training|LoRA Training Validation| +|-|-|-|-|-|-|-| +|[MiniMax/MiniMax-Music3](https://www.modelscope.cn/models/MiniMax/MiniMax-Music3)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_music3/model_inference/MiniMax-Music3.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_music3/model_inference_low_vram/MiniMax-Music3.py)|—|—|—|—| + +## Model Inference + +The model is loaded via `MiniMaxMusic3Pipeline.from_pretrained`, see [Loading Models](../Pipeline_Usage/Model_Inference.md#loading-models) for details. + +The input parameters for `MiniMaxMusic3Pipeline` inference include: + +* `prompt`: The music description, specifying genre, BPM, key, vocal characteristics and arrangement. +* `lyrics`: The lyrics. Structure tags such as `[verse]` and `[chorus]` must each be on their own line; text on the same line as a leading tag is dropped. Leave it empty to generate instrumental music. +* `max_audio_duration`: Upper bound on the generated audio length in seconds. The autoregressive stage may stop earlier, so the actual length can be shorter; the frame count is capped at 9000. +* `num_inference_steps`: Number of flow-matching steps per window. +* `cfg_scale`: Classifier-free guidance scale for the acoustic stage. +* `seed`: Random seed. +* `rand_device`: Device on which random numbers are drawn. Set it to `"cpu"` for results that reproduce independently of the compute device. +* `progress_bar_cmd`: Progress bar. One bar covering all steps is shown per window. + +Generation proceeds in two stages: the autoregressive language model emits a semantic token and residual RVQ codes frame by frame, and its per-frame hidden states condition a chunked flow-matching model that produces Flow-VAE latents, which the vocoder finally synthesizes into a 44.1kHz stereo waveform. The discrete sampling in the autoregressive stage is sensitive to numerical precision, so the parameters of that stage stay resident in VRAM and layer-wise VRAM management applies to the vocoder only. + +If you run out of VRAM, please refer to [VRAM Management](../Pipeline_Usage/Model_Inference.md#vram-management). + +## Model Training + +Training is not yet supported for MiniMax-Music3. diff --git a/docs/en/Model_Details/Qwen-Image.md b/docs/en/Model_Details/Qwen-Image.md new file mode 100644 index 0000000000000000000000000000000000000000..de8958404e4a25713b6c027401c69d519f0636e6 --- /dev/null +++ b/docs/en/Model_Details/Qwen-Image.md @@ -0,0 +1,180 @@ +# Qwen-Image + +![Image](https://github.com/user-attachments/assets/738078d8-8749-4a53-a046-571861541924) + +Qwen-Image is an image generation model trained and open-sourced by the Tongyi Lab Qwen Team of Alibaba. + +## Installation + +Before using this project for model inference and training, please install DiffSynth-Studio first. + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +For more information about installation, please refer to [Install Dependencies](../Pipeline_Usage/Setup.md). + +## Quick Start + +Run the following code to quickly load the [Qwen/Qwen-Image](https://www.modelscope.cn/models/Qwen/Qwen-Image) model and perform inference. VRAM management is enabled, and the framework will automatically control model parameter loading based on remaining VRAM. Minimum 8GB VRAM is required to run. + +```python +from diffsynth.pipelines.qwen_image import QwenImagePipeline, ModelConfig +import torch + +vram_config = { + "offload_dtype": "disk", + "offload_device": "disk", + "onload_dtype": torch.float8_e4m3fn, + "onload_device": "cpu", + "preparing_dtype": torch.float8_e4m3fn, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} +pipe = QwenImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="transformer/diffusion_pytorch_model*.safetensors", **vram_config), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="text_encoder/model*.safetensors", **vram_config), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="vae/diffusion_pytorch_model.safetensors", **vram_config), + ], + tokenizer_config=ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="tokenizer/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) +prompt = "精致肖像,水下少女,蓝裙飘逸,发丝轻扬,光影透澈,气泡环绕,面容恬静,细节精致,梦幻唯美。" +image = pipe(prompt, seed=0, num_inference_steps=40) +image.save("image.jpg") +``` + +## Model Overview + +| Model ID | Inference | Low VRAM Inference | Full Training | Validation After Full Training | LoRA Training | Validation After LoRA Training | +| - | - | - | - | - | - | - | +| [Qwen/Qwen-Image](https://www.modelscope.cn/models/Qwen/Qwen-Image) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/Qwen-Image.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/Qwen-Image.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/full/Qwen-Image.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_full/Qwen-Image.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/lora/Qwen-Image.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_lora/Qwen-Image.py) | +|[Qwen/Qwen-Image-2512](https://www.modelscope.cn/models/Qwen/Qwen-Image-2512)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/Qwen-Image-2512.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/Qwen-Image-2512.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/full/Qwen-Image-2512.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_full/Qwen-Image-2512.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/lora/Qwen-Image-2512.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_lora/Qwen-Image-2512.py)| +| [Qwen/Qwen-Image-Edit](https://www.modelscope.cn/models/Qwen/Qwen-Image-Edit) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/Qwen-Image-Edit.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/Qwen-Image-Edit.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/full/Qwen-Image-Edit.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_full/Qwen-Image-Edit.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/lora/Qwen-Image-Edit.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_lora/Qwen-Image-Edit.py) | +| [Qwen/Qwen-Image-Edit-2509](https://www.modelscope.cn/models/Qwen/Qwen-Image-Edit-2509) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/Qwen-Image-Edit-2509.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/Qwen-Image-Edit-2509.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/full/Qwen-Image-Edit-2509.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_full/Qwen-Image-Edit-2509.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/lora/Qwen-Image-Edit-2509.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_lora/Qwen-Image-Edit-2509.py) | +|[Qwen/Qwen-Image-Edit-2511](https://www.modelscope.cn/models/Qwen/Qwen-Image-Edit-2511)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/Qwen-Image-Edit-2511.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/Qwen-Image-Edit-2511.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/full/Qwen-Image-Edit-2511.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_full/Qwen-Image-Edit-2511.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/lora/Qwen-Image-Edit-2511.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_lora/Qwen-Image-Edit-2511.py)| +|[FireRedTeam/FireRed-Image-Edit-1.0](https://www.modelscope.cn/models/FireRedTeam/FireRed-Image-Edit-1.0)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/FireRed-Image-Edit-1.0.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/FireRed-Image-Edit-1.0.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/full/FireRed-Image-Edit-1.0.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_full/FireRed-Image-Edit-1.0.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/lora/FireRed-Image-Edit-1.0.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_lora/FireRed-Image-Edit-1.0.py)| +|[FireRedTeam/FireRed-Image-Edit-1.1](https://www.modelscope.cn/models/FireRedTeam/FireRed-Image-Edit-1.1)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/FireRed-Image-Edit-1.1.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/FireRed-Image-Edit-1.1.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/full/FireRed-Image-Edit-1.1.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_full/FireRed-Image-Edit-1.1.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/lora/FireRed-Image-Edit-1.1.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_lora/FireRed-Image-Edit-1.1.py)| +|[lightx2v/Qwen-Image-Edit-2511-Lightning](https://modelscope.cn/models/lightx2v/Qwen-Image-Edit-2511-Lightning)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/Qwen-Image-Edit-2511-Lightning.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/Qwen-Image-Edit-2511-Lightning.py)|-|-|-|-| +|[Qwen/Qwen-Image-Layered](https://www.modelscope.cn/models/Qwen/Qwen-Image-Layered)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/Qwen-Image-Layered.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/Qwen-Image-Layered.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/full/Qwen-Image-Layered.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_full/Qwen-Image-Layered.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/lora/Qwen-Image-Layered.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_lora/Qwen-Image-Layered.py)| +|[DiffSynth-Studio/Qwen-Image-Layered-Control](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Layered-Control)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/Qwen-Image-Layered-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/Qwen-Image-Layered-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/full/Qwen-Image-Layered-Control.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_full/Qwen-Image-Layered-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/lora/Qwen-Image-Layered-Control.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_lora/Qwen-Image-Layered-Control.py)| +|[DiffSynth-Studio/Qwen-Image-Layered-Control-V2](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Layered-Control-V2)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/Qwen-Image-Layered-Control-V2.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/Qwen-Image-Layered-Control-V2.py)|-|-|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/lora/Qwen-Image-Layered-Control-V2.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_lora/Qwen-Image-Layered-Control-V2.py)| +| [DiffSynth-Studio/Qwen-Image-EliGen](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-EliGen) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/Qwen-Image-EliGen.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/Qwen-Image-EliGen.py) | - | - | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/lora/Qwen-Image-EliGen.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_lora/Qwen-Image-EliGen.py) | +| [DiffSynth-Studio/Qwen-Image-EliGen-V2](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-EliGen-V2) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/Qwen-Image-EliGen-V2.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/Qwen-Image-EliGen-V2.py) | - | - | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/lora/Qwen-Image-EliGen.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_lora/Qwen-Image-EliGen.py) | +| [DiffSynth-Studio/Qwen-Image-EliGen-Poster](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-EliGen-Poster) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/Qwen-Image-EliGen-Poster.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/Qwen-Image-EliGen-Poster.py) | - | - | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/lora/Qwen-Image-EliGen-Poster.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_lora/Qwen-Image-EliGen-Poster.py) | +| [DiffSynth-Studio/Qwen-Image-Distill-Full](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Distill-Full) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/Qwen-Image-Distill-Full.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/Qwen-Image-Distill-Full.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/full/Qwen-Image-Distill-Full.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_full/Qwen-Image-Distill-Full.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/lora/Qwen-Image-Distill-Full.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_lora/Qwen-Image-Distill-Full.py) | +| [DiffSynth-Studio/Qwen-Image-Distill-LoRA](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Distill-LoRA) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/Qwen-Image-Distill-LoRA.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/Qwen-Image-Distill-LoRA.py) | - | - | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/lora/Qwen-Image-Distill-LoRA.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_lora/Qwen-Image-Distill-LoRA.py) | +| [DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Canny](https://modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Canny) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/Qwen-Image-Blockwise-ControlNet-Canny.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/Qwen-Image-Blockwise-ControlNet-Canny.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/full/Qwen-Image-Blockwise-ControlNet-Canny.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_full/Qwen-Image-Blockwise-ControlNet-Canny.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/lora/Qwen-Image-Blockwise-ControlNet-Canny.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_lora/Qwen-Image-Blockwise-ControlNet-Canny.py) | +| [DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Depth](https://modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Depth) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/Qwen-Image-Blockwise-ControlNet-Depth.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/Qwen-Image-Blockwise-ControlNet-Depth.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/full/Qwen-Image-Blockwise-ControlNet-Depth.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_full/Qwen-Image-Blockwise-ControlNet-Depth.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/lora/Qwen-Image-Blockwise-ControlNet-Depth.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_lora/Qwen-Image-Blockwise-ControlNet-Depth.py) | +| [DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Inpaint](https://modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Inpaint) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/Qwen-Image-Blockwise-ControlNet-Inpaint.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/Qwen-Image-Blockwise-ControlNet-Inpaint.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/full/Qwen-Image-Blockwise-ControlNet-Inpaint.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_full/Qwen-Image-Blockwise-ControlNet-Inpaint.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/lora/Qwen-Image-Blockwise-ControlNet-Inpaint.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_lora/Qwen-Image-Blockwise-ControlNet-Inpaint.py) | +| [DiffSynth-Studio/Qwen-Image-In-Context-Control-Union](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-In-Context-Control-Union) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/Qwen-Image-In-Context-Control-Union.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/Qwen-Image-In-Context-Control-Union.py) | - | - | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/lora/Qwen-Image-In-Context-Control-Union.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_lora/Qwen-Image-In-Context-Control-Union.py) | +| [DiffSynth-Studio/Qwen-Image-Edit-Lowres-Fix](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Edit-Lowres-Fix) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/Qwen-Image-Edit-Lowres-Fix.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/Qwen-Image-Edit-Lowres-Fix.py) | - | - | - | - | +|[DiffSynth-Studio/Qwen-Image-i2L](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-i2L)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/Qwen-Image-i2L.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/Qwen-Image-i2L.py)|-|-|-|-| + +Special Training Scripts: + +* Differential LoRA Training: [doc](../Training/Differential_LoRA.md), [code](https://github.com/modelscope/DiffSynth-Studio/tree/main/examples/qwen_image/model_training/special/differential_training/) +* FP8 Precision Training: [doc](../Training/FP8_Precision.md), [code](https://github.com/modelscope/DiffSynth-Studio/tree/main/examples/qwen_image/model_training/special/fp8_training/) +* Two-stage Split Training: [doc](../Training/Split_Training.md), [code](https://github.com/modelscope/DiffSynth-Studio/tree/main/examples/qwen_image/model_training/special/split_training/) +* End-to-end Direct Distillation: [doc](../Training/Direct_Distill.md), [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/lora/Qwen-Image-Distill-LoRA.sh) + +DeepSpeed ZeRO Stage 3 Training: The Qwen-Image series models support DeepSpeed ZeRO Stage 3 training, which partitions the model across multiple GPUs. Taking full parameter training of the Qwen-Image model as an example, the following modifications are required: + +* `--config_file examples/qwen_image/model_training/full/accelerate_config_zero3.yaml` +* `--initialize_model_on_cpu` + +## Model Inference + +Models are loaded via `QwenImagePipeline.from_pretrained`, see [Loading Models](../Pipeline_Usage/Model_Inference.md#loading-models). + +Input parameters for `QwenImagePipeline` inference include: + +* `prompt`: Prompt describing the content appearing in the image. +* `negative_prompt`: Negative prompt describing content that should not appear in the image, default value is `""`. +* `cfg_scale`: Classifier-free guidance parameter, default value is 4. When set to 1, it no longer takes effect. +* `input_image`: Input image for image-to-image generation, used in conjunction with `denoising_strength`. +* `denoising_strength`: Denoising strength, range is 0~1, default value is 1. When the value approaches 0, the generated image is similar to the input image; when the value approaches 1, the generated image differs more from the input image. When `input_image` parameter is not provided, do not set this to a non-1 value. +* `inpaint_mask`: Image inpainting mask image. +* `inpaint_blur_size`: Edge blur width for image inpainting. +* `inpaint_blur_sigma`: Edge blur strength for image inpainting. +* `height`: Image height, must be a multiple of 16. +* `width`: Image width, must be a multiple of 16. +* `seed`: Random seed. Default is `None`, meaning completely random. +* `rand_device`: Computing device for generating random Gaussian noise matrix, default is `"cpu"`. When set to `cuda`, different GPUs will produce different generation results. +* `num_inference_steps`: Number of inference steps, default value is 30. +* `exponential_shift_mu`: Fixed parameter used in sampling timesteps. Leave blank to sample based on image width and height. +* `blockwise_controlnet_inputs`: Blockwise ControlNet model inputs. +* `eligen_entity_prompts`: EliGen partition control prompts. +* `eligen_entity_masks`: EliGen partition control region mask images. +* `eligen_enable_on_negative`: Whether to enable EliGen partition control on the negative side of CFG. +* `edit_image`: Edit model images to be edited, supports multiple images. +* `edit_image_auto_resize`: Whether to automatically scale edit images. +* `edit_rope_interpolation`: Whether to enable ROPE interpolation on low-resolution edit images. +* `context_image`: In-Context Control input image. +* `tiled`: Whether to enable VAE tiling inference, default is `False`. Setting to `True` can significantly reduce VRAM usage during VAE encoding/decoding stages, producing slight errors and slightly longer inference time. +* `tile_size`: Tile size during VAE encoding/decoding stages, default is 128, only effective when `tiled=True`. +* `tile_stride`: Tile stride during VAE encoding/decoding stages, default is 64, only effective when `tiled=True`, must be less than or equal to `tile_size`. +* `progress_bar_cmd`: Progress bar, default is `tqdm.tqdm`. Can be disabled by setting to `lambda x:x`. + +If VRAM is insufficient, please enable [VRAM Management](../Pipeline_Usage/VRAM_management.md). We provide recommended low VRAM configurations for each model in the example code, see the table in the "Model Overview" section above. + +## Model Training + +Qwen-Image series models are uniformly trained through [`examples/qwen_image/model_training/train.py`](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/train.py), and the script parameters include: + +* General Training Parameters + * Dataset Basic Configuration + * `--dataset_base_path`: Root directory of the dataset. + * `--dataset_metadata_path`: Metadata file path of the dataset. + * `--dataset_repeat`: Number of times the dataset is repeated in each epoch. + * `--dataset_num_workers`: Number of processes for each DataLoader. + * `--data_file_keys`: Field names to be loaded from metadata, usually image or video file paths, separated by `,`. + * Model Loading Configuration + * `--model_paths`: Paths of models to be loaded. JSON format. + * `--model_id_with_origin_paths`: Model IDs with original paths, e.g., `"Qwen/Qwen-Image:transformer/diffusion_pytorch_model*.safetensors"`. Separated by commas. + * `--extra_inputs`: Extra input parameters required by the model Pipeline, e.g., extra parameters `edit_image` when training image editing model Qwen-Image-Edit, separated by `,`. + * `--fp8_models`: Models loaded in FP8 format, consistent with `--model_paths` or `--model_id_with_origin_paths` format. Currently only supports models whose parameters are not updated by gradients (no gradient backpropagation, or gradients only update their LoRA). + * `--quant_options`: Dynamically quantize loaded models. Semicolon-separated entries, each `:[/]`, where `` matches an entry in `--model_paths`/`--model_id_with_origin_paths`, `method` is a registered method (e.g. `bitsandbytes_nf4`), and `exclude_modules` optionally lists layers kept in full precision. + * Training Basic Configuration + * `--learning_rate`: Learning rate. + * `--num_epochs`: Number of epochs. + * `--trainable_models`: Trainable models, e.g., `dit`, `vae`, `text_encoder`. + * `--find_unused_parameters`: Whether there are unused parameters in DDP training. Some models contain redundant parameters that do not participate in gradient calculation, and this setting needs to be enabled to avoid errors in multi-GPU training. + * `--weight_decay`: Weight decay size, see [torch.optim.AdamW](https://docs.pytorch.org/docs/stable/generated/torch.optim.AdamW.html). + * `--task`: Training task, default is `sft`. Some models support more training modes, please refer to the documentation of each specific model. + * Output Configuration + * `--output_path`: Model saving path. + * `--remove_prefix_in_ckpt`: Remove prefix in the state dict of the model file. + * `--save_steps`: Interval of training steps to save the model. If this parameter is left blank, the model is saved once per epoch. + * LoRA Configuration + * `--lora_base_model`: Which model to add LoRA to. + * `--lora_target_modules`: Which layers to add LoRA to. + * `--lora_rank`: Rank of LoRA. + * `--lora_checkpoint`: Path of the LoRA checkpoint. If this path is provided, LoRA will be loaded from this checkpoint. + * `--preset_lora_path`: Preset LoRA checkpoint path. If this path is provided, this LoRA will be loaded in the form of being merged into the base model. This parameter is used for LoRA differential training. + * `--preset_lora_model`: Model that the preset LoRA is merged into, e.g., `dit`. + * Gradient Configuration + * `--use_gradient_checkpointing`: Whether to enable gradient checkpointing. + * `--use_gradient_checkpointing_offload`: Whether to offload gradient checkpointing to memory. + * `--gradient_accumulation_steps`: Number of gradient accumulation steps. + * Image Width/Height Configuration (Applicable to Image Generation and Video Generation Models) + * `--height`: Height of image or video. Leave `height` and `width` blank to enable dynamic resolution. + * `--width`: Width of image or video. Leave `height` and `width` blank to enable dynamic resolution. + * `--max_pixels`: Maximum pixel area of image or video frames. When dynamic resolution is enabled, images with resolution larger than this value will be downscaled, and images with resolution smaller than this value will remain unchanged. +* Qwen-Image Specific Parameters + * `--tokenizer_path`: Path of the tokenizer, applicable to text-to-image models, leave blank to automatically download from remote. + * `--processor_path`: Path of the processor, applicable to image editing models, leave blank to automatically download from remote. + +We have built a sample image dataset for your testing. You can download this dataset with the following command: + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --local_dir ./data/diffsynth_example_dataset +``` + +We have written recommended training scripts for each model, please refer to the table in the "Model Overview" section above. For how to write model training scripts, please refer to [Model Training](../Pipeline_Usage/Model_Training.md); for more advanced training algorithms, please refer to [Training Framework Detailed Explanation](https://github.com/modelscope/DiffSynth-Studio/tree/main/docs/en/Training/). diff --git a/docs/en/Model_Details/Qwen-Video-Edit.md b/docs/en/Model_Details/Qwen-Video-Edit.md new file mode 100644 index 0000000000000000000000000000000000000000..4a8bf171d1a4898acfc65482c4e9347855baca36 --- /dev/null +++ b/docs/en/Model_Details/Qwen-Video-Edit.md @@ -0,0 +1,146 @@ +# Qwen-Video-Edit + +Qwen-Video-Edit is a video editing model based on the Qwen-Image architecture developed by user [yunpeng1998](https://github.com/yunpeng1998). The model takes an input video and a text prompt, and generates an edited video that matches the prompt description. It uses QwenImageDiT as the core DiT backbone, combined with Wan2.1 VAE for video encoding/decoding, and a QwenVideoEditAdapter to project video features into the DiT feature space. + +## Installation + +Before using this project for model inference and training, please install DiffSynth-Studio first. + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +For more information about installation, please refer to [Install Dependencies](../Pipeline_Usage/Setup.md). + +## Quick Start + +Run the following code to quickly load the [yunpeng1998/Qwen-Video-Edit](https://www.modelscope.cn/models/yunpeng1998/Qwen-Video-Edit) model and perform inference. VRAM management is enabled, and the framework will automatically control model parameter loading based on remaining VRAM. + +```python +import torch +from modelscope import dataset_snapshot_download +from diffsynth.core import ModelConfig +from diffsynth.pipelines.qwen_video_edit import QwenVideoEditPipeline +from diffsynth.utils.data import VideoData, save_video + +vram_config = { + "offload_dtype": torch.bfloat16, + "offload_device": "cpu", + "onload_dtype": torch.bfloat16, + "onload_device": "cpu", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} + +dataset_snapshot_download( + "DiffSynth-Studio/diffsynth_example_dataset", + local_dir="data/diffsynth_example_dataset", + allow_file_pattern="qwen_video_edit/Qwen-Video-Edit/*" +) + +edit_video = VideoData("data/diffsynth_example_dataset/qwen_video_edit/Qwen-Video-Edit/source.mp4") +prompts = [ + "Transform the video into Japanese anime style", +] +pipe = QwenVideoEditPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="yunpeng1998/Qwen-Video-Edit", origin_file_pattern="360P/step-30000.safetensors", **vram_config), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="text_encoder/model*.safetensors", **vram_config), + ModelConfig(model_id="Wan-AI/Wan2.1-T2V-1.3B", origin_file_pattern="Wan2.1_VAE.pth", **vram_config), + ], + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) +video = pipe(edit_video=edit_video, prompts=prompts, height=640, width=384, num_frames=45, cfg_scale=4.0, num_inference_steps=40, seed=0) +save_video(video, "video_Qwen-Video-Edit.mp4", fps=16) +``` + +## Model Overview + +| Model ID | Inference | Low VRAM Inference | Full Training | Validation After Full Training | LoRA Training | Validation After LoRA Training | +| - | - | - | - | - | - | - | +| [yunpeng1998/Qwen-Video-Edit](https://www.modelscope.cn/models/yunpeng1998/Qwen-Video-Edit) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_video_edit/model_inference/Qwen-Video-Edit.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_video_edit/model_inference_low_vram/Qwen-Video-Edit.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_video_edit/model_training/full/Qwen-Video-Edit.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_video_edit/model_training/validate_full/Qwen-Video-Edit.py) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_video_edit/model_training/lora/Qwen-Video-Edit.sh) | [code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_video_edit/model_training/validate_lora/Qwen-Video-Edit.py) | + +## Model Inference + +Models are loaded via `QwenVideoEditPipeline.from_pretrained`, see [Loading Models](../Pipeline_Usage/Model_Inference.md#loading-models). + +Input parameters for `QwenVideoEditPipeline` inference include: + +* `edit_video`: Input video, i.e., the source video to be edited. Type is `list[PIL.Image.Image]`, loaded via `VideoData`. +* `num_frames`: Number of video frames, default is 45. The model processes video in 45-frame chunks, each chunk corresponds to one prompt in the `prompts` list. +* `height`: Video height, must be a multiple of 16. +* `width`: Video width, must be a multiple of 16. +* `tiled`: Whether to enable VAE tiling inference, default is `False`. Setting to `True` can significantly reduce VRAM usage during VAE encoding/decoding stages, producing slight errors and slightly longer inference time. +* `tile_size`: Tile size during VAE encoding/decoding stages, default is `(30, 52)`, only effective when `tiled=True`. +* `tile_stride`: Tile stride during VAE encoding/decoding stages, default is `(15, 26)`, only effective when `tiled=True`, must be less than or equal to `tile_size`. +* `prompts`: List of prompts, each element corresponds to the editing instruction for one chunk. +* `negative_prompt`: Negative prompt describing content that should not appear in the video, default value is `" "`. +* `cfg_scale`: Classifier-free guidance parameter, default value is 4. When set to 1, it no longer takes effect. +* `seed`: Random seed. Default is `None`, meaning completely random. +* `rand_device`: Computing device for generating random Gaussian noise matrix, default is `"cpu"`. When set to `cuda`, different GPUs will produce different generation results. +* `num_inference_steps`: Number of inference steps, default value is 40. +* `zero_cond_t`: Whether to zero out condition features at timestep t=0. +* `progress_bar_cmd`: Progress bar, default is `tqdm.tqdm`. Can be disabled by setting to `lambda x:x`. + +## Model Training + +Qwen-Video-Edit is trained through [`examples/qwen_video_edit/model_training/train.py`](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_video_edit/model_training/train.py), and the script parameters include: + +* General Training Parameters + * Dataset Basic Configuration + * `--dataset_base_path`: Root directory of the dataset. + * `--dataset_metadata_path`: Metadata file path of the dataset. + * `--dataset_repeat`: Number of times the dataset is repeated in each epoch. + * `--dataset_num_workers`: Number of processes for each DataLoader. + * `--data_file_keys`: Field names to be loaded from metadata, separated by `,`. For Qwen-Video-Edit, set to `"input_video,video"`, where `input_video` is the condition video (source video), and `video` is the target video. + * Model Loading Configuration + * `--model_paths`: Paths of models to be loaded. JSON format. + * `--model_id_with_origin_paths`: Model IDs with original paths, e.g., `"yunpeng1998/Qwen-Video-Edit:360P/step-30000.safetensors"`. Separated by commas. + * `--extra_inputs`: Extra input parameters required by the model Pipeline, separated by `,`. + * `--fp8_models`: Models loaded in FP8 format, consistent with `--model_paths` or `--model_id_with_origin_paths` format. Currently only supports models whose parameters are not updated by gradients. + * `--quant_options`: Dynamically quantize loaded models. Semicolon-separated entries, each `:[/]`. + * Training Basic Configuration + * `--learning_rate`: Learning rate. + * `--num_epochs`: Number of epochs. + * `--trainable_models`: Trainable models, e.g., `dit`, `adapter`. + * `--find_unused_parameters`: Whether there are unused parameters in DDP training, needs to be enabled to avoid errors in multi-GPU training. + * `--weight_decay`: Weight decay size, see [torch.optim.AdamW](https://docs.pytorch.org/docs/stable/generated/torch.optim.AdamW.html). + * `--task`: Training task, default is `sft`. + * Output Configuration + * `--output_path`: Model saving path. + * `--remove_prefix_in_ckpt`: Remove prefix in the state dict of the model file. + * `--save_steps`: Interval of training steps to save the model. If this parameter is left blank, the model is saved once per epoch. + * LoRA Configuration + * `--lora_base_model`: Which model to add LoRA to. + * `--lora_target_modules`: Which layers to add LoRA to. + * `--lora_rank`: Rank of LoRA. + * `--lora_checkpoint`: Path of the LoRA checkpoint. If this path is provided, LoRA will be loaded from this checkpoint. + * `--preset_lora_path`: Preset LoRA checkpoint path. If this path is provided, this LoRA will be loaded in the form of being merged into the base model. + * `--preset_lora_model`: Model that the preset LoRA is merged into, e.g., `dit`. + * Gradient Configuration + * `--use_gradient_checkpointing`: Whether to enable gradient checkpointing. + * `--use_gradient_checkpointing_offload`: Whether to offload gradient checkpointing to memory. + * `--gradient_accumulation_steps`: Number of gradient accumulation steps. + * Video Width/Height Configuration + * `--height`: Height of the video. + * `--width`: Width of the video. + * `--num_frames`: Number of video frames, default is 45. + * `--max_pixels`: Maximum pixel area of video frames. +* Qwen-Video-Edit Specific Parameters + * `--tokenizer_path`: Path of the tokenizer, leave blank to automatically download from remote. + * `--processor_path`: Path of the processor, leave blank to automatically download from remote. + * `--zero_cond_t`: Whether to zero out condition features at timestep t=0. + +We have built a sample video dataset for your testing. You can download this dataset with the following command: + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "qwen_video_edit/Qwen-Video-Edit/*" --local_dir ./data/diffsynth_example_dataset +``` + +We have written recommended training scripts for the model, please refer to the table in the "Model Overview" section above. For how to write model training scripts, please refer to [Model Training](../Pipeline_Usage/Model_Training.md); for more advanced training algorithms, please refer to [Training Framework Detailed Explanation](https://github.com/modelscope/DiffSynth-Studio/tree/main/docs/en/Training/). diff --git a/docs/en/Model_Details/Stable-Diffusion-XL.md b/docs/en/Model_Details/Stable-Diffusion-XL.md new file mode 100644 index 0000000000000000000000000000000000000000..17ad75aaf03ed1dc4cddcc9ddd548c7a3238c148 --- /dev/null +++ b/docs/en/Model_Details/Stable-Diffusion-XL.md @@ -0,0 +1,142 @@ +# Stable Diffusion XL + +Stable Diffusion XL (SDXL) is an open-source diffusion-based text-to-image generation model developed by Stability AI, supporting 1024x1024 resolution high-quality text-to-image generation with a dual text encoder (CLIP-L + CLIP-bigG) architecture. + +## Installation + +Before performing model inference and training, please install DiffSynth-Studio first. + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +For more information on installation, please refer to [Setup Dependencies](../Pipeline_Usage/Setup.md). + +## Quick Start + +Running the following code will quickly load the [stabilityai/stable-diffusion-xl-base-1.0](https://www.modelscope.cn/models/stabilityai/stable-diffusion-xl-base-1.0) model for inference. VRAM management is enabled, the framework automatically controls parameter loading based on available VRAM, requiring a minimum of 6GB VRAM. + +```python +import torch +from diffsynth.core import ModelConfig +from diffsynth.pipelines.stable_diffusion_xl import StableDiffusionXLPipeline + +vram_config = { + "offload_dtype": torch.float32, + "offload_device": "cpu", + "onload_dtype": torch.float32, + "onload_device": "cpu", + "preparing_dtype": torch.float32, + "preparing_device": "cuda", + "computation_dtype": torch.float32, + "computation_device": "cuda", +} +pipe = StableDiffusionXLPipeline.from_pretrained( + torch_dtype=torch.float32, + model_configs=[ + ModelConfig(model_id="stabilityai/stable-diffusion-xl-base-1.0", origin_file_pattern="text_encoder/model.safetensors", **vram_config), + ModelConfig(model_id="stabilityai/stable-diffusion-xl-base-1.0", origin_file_pattern="text_encoder_2/model.safetensors", **vram_config), + ModelConfig(model_id="stabilityai/stable-diffusion-xl-base-1.0", origin_file_pattern="unet/diffusion_pytorch_model.safetensors", **vram_config), + ModelConfig(model_id="stabilityai/stable-diffusion-xl-base-1.0", origin_file_pattern="vae/diffusion_pytorch_model.safetensors", **vram_config), + ], + tokenizer_config=ModelConfig(model_id="stabilityai/stable-diffusion-xl-base-1.0", origin_file_pattern="tokenizer/"), + tokenizer_2_config=ModelConfig(model_id="stabilityai/stable-diffusion-xl-base-1.0", origin_file_pattern="tokenizer_2/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) + +image = pipe( + prompt="a photo of an astronaut riding a horse on mars", + negative_prompt="", + cfg_scale=5.0, + height=1024, + width=1024, + seed=42, + num_inference_steps=50, +) +image.save("image.jpg") +``` + +## Model Overview + +|Model ID|Inference|Low VRAM Inference|Full Training|Full Training Validation|LoRA Training|LoRA Training Validation| +|-|-|-|-|-|-|-| +|[stabilityai/stable-diffusion-xl-base-1.0](https://www.modelscope.cn/models/stabilityai/stable-diffusion-xl-base-1.0)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/stable_diffusion_xl/model_inference/stable-diffusion-xl-base-1.0.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/stable_diffusion_xl/model_inference_low_vram/stable-diffusion-xl-base-1.0.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/stable_diffusion_xl/model_training/full/stable-diffusion-xl-base-1.0.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/stable_diffusion_xl/model_training/validate_full/stable-diffusion-xl-base-1.0.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/stable_diffusion_xl/model_training/lora/stable-diffusion-xl-base-1.0.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/stable_diffusion_xl/model_training/validate_lora/stable-diffusion-xl-base-1.0.py)| + +## Model Inference + +The model is loaded via `StableDiffusionXLPipeline.from_pretrained`, see [Loading Models](../Pipeline_Usage/Model_Inference.md#loading-models) for details. + +The input parameters for `StableDiffusionXLPipeline` inference include: + +* `prompt`: Text prompt. +* `negative_prompt`: Negative prompt, defaults to an empty string. +* `cfg_scale`: Classifier-Free Guidance scale factor, default 5.0. +* `height`: Output image height, default 1024. +* `width`: Output image width, default 1024. +* `seed`: Random seed, defaults to a random value if not set. +* `rand_device`: Noise generation device, defaults to "cpu". +* `num_inference_steps`: Number of inference steps, default 50. +* `guidance_rescale`: Guidance rescale factor, default 0.0. +* `progress_bar_cmd`: Progress bar callback function. + +> `StableDiffusionXLPipeline` requires dual tokenizer configurations (`tokenizer_config` and `tokenizer_2_config`), corresponding to the CLIP-L and CLIP-bigG text encoders. + +## Model Training + +Models in the stable_diffusion_xl series are trained via `examples/stable_diffusion_xl/model_training/train.py`. The script parameters include: + +* General Training Parameters + * Dataset Configuration + * `--dataset_base_path`: Root directory of the dataset. + * `--dataset_metadata_path`: Path to the dataset metadata file. + * `--dataset_repeat`: Number of dataset repeats per epoch. + * `--dataset_num_workers`: Number of processes per DataLoader. + * `--data_file_keys`: Field names to load from metadata, typically paths to image or video files, separated by `,`. + * Model Loading Configuration + * `--model_paths`: Paths to load models from, in JSON format. + * `--model_id_with_origin_paths`: Model IDs with original paths, separated by commas. + * `--extra_inputs`: Additional input parameters required by the model Pipeline, separated by `,`. + * `--fp8_models`: Models to load in FP8 format, currently only supported for models whose parameters are not updated by gradients. + * `--quant_options`: Dynamically quantize loaded models. Semicolon-separated entries, each `:[/]`, where `` matches an entry in `--model_paths`/`--model_id_with_origin_paths`, `method` is a registered method (e.g. `bitsandbytes_nf4`), and `exclude_modules` optionally lists layers kept in full precision. + * Basic Training Configuration + * `--learning_rate`: Learning rate. + * `--num_epochs`: Number of epochs. + * `--trainable_models`: Trainable models, e.g., `dit`, `vae`, `text_encoder`. + * `--find_unused_parameters`: Whether unused parameters exist in DDP training. + * `--weight_decay`: Weight decay magnitude. + * `--task`: Training task, defaults to `sft`. + * Output Configuration + * `--output_path`: Path to save the model. + * `--remove_prefix_in_ckpt`: Remove prefix in the model's state dict. + * `--save_steps`: Interval in training steps to save the model. + * LoRA Configuration + * `--lora_base_model`: Which model to add LoRA to. + * `--lora_target_modules`: Which layers to add LoRA to. + * `--lora_rank`: Rank of LoRA. + * `--lora_checkpoint`: Path to LoRA checkpoint. + * `--preset_lora_path`: Path to preset LoRA checkpoint for LoRA differential training. + * `--preset_lora_model`: Which model to integrate preset LoRA into, e.g., `dit`. + * Gradient Configuration + * `--use_gradient_checkpointing`: Whether to enable gradient checkpointing. + * `--use_gradient_checkpointing_offload`: Whether to offload gradient checkpointing to CPU memory. + * `--gradient_accumulation_steps`: Number of gradient accumulation steps. + * Resolution Configuration + * `--height`: Height of the image/video. Leave empty to enable dynamic resolution. + * `--width`: Width of the image/video. Leave empty to enable dynamic resolution. + * `--max_pixels`: Maximum pixel area, images larger than this will be scaled down during dynamic resolution. + * `--num_frames`: Number of frames for video (video generation models only). +* Stable Diffusion XL Specific Parameters + * `--tokenizer_path`: Path to the first tokenizer. + * `--tokenizer_2_path`: Path to the second tokenizer, defaults to `stabilityai/stable-diffusion-xl-base-1.0:tokenizer_2/`. + +Example dataset download: + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "stable_diffusion_xl/*" --local_dir ./data/diffsynth_example_dataset +``` + +[stable-diffusion-xl-base-1.0 training scripts](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/stable_diffusion_xl/model_training/lora/stable-diffusion-xl-base-1.0.sh) + +We provide recommended training scripts for each model, please refer to the table in "Model Overview" above. For guidance on writing model training scripts, see [Model Training](../Pipeline_Usage/Model_Training.md); for more advanced training algorithms, see [Training Framework Overview](https://github.com/modelscope/DiffSynth-Studio/tree/main/docs/en/Training/). diff --git a/docs/en/Model_Details/Stable-Diffusion.md b/docs/en/Model_Details/Stable-Diffusion.md new file mode 100644 index 0000000000000000000000000000000000000000..85437954f383a2d05efae58ff33c5b63f6d66b12 --- /dev/null +++ b/docs/en/Model_Details/Stable-Diffusion.md @@ -0,0 +1,139 @@ +# Stable Diffusion + +Stable Diffusion is an open-source diffusion-based text-to-image generation model developed by Stability AI, supporting 512x512 resolution text-to-image generation. + +## Installation + +Before performing model inference and training, please install DiffSynth-Studio first. + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +For more information on installation, please refer to [Setup Dependencies](../Pipeline_Usage/Setup.md). + +## Quick Start + +Running the following code will quickly load the [AI-ModelScope/stable-diffusion-v1-5](https://www.modelscope.cn/models/AI-ModelScope/stable-diffusion-v1-5) model for inference. VRAM management is enabled, the framework automatically controls parameter loading based on available VRAM, requiring a minimum of 2GB VRAM. + +```python +import torch +from diffsynth.core import ModelConfig +from diffsynth.pipelines.stable_diffusion import StableDiffusionPipeline + +vram_config = { + "offload_dtype": torch.float32, + "offload_device": "cpu", + "onload_dtype": torch.float32, + "onload_device": "cpu", + "preparing_dtype": torch.float32, + "preparing_device": "cuda", + "computation_dtype": torch.float32, + "computation_device": "cuda", +} +pipe = StableDiffusionPipeline.from_pretrained( + torch_dtype=torch.float32, + model_configs=[ + ModelConfig(model_id="AI-ModelScope/stable-diffusion-v1-5", origin_file_pattern="text_encoder/model.safetensors", **vram_config), + ModelConfig(model_id="AI-ModelScope/stable-diffusion-v1-5", origin_file_pattern="unet/diffusion_pytorch_model.safetensors", **vram_config), + ModelConfig(model_id="AI-ModelScope/stable-diffusion-v1-5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors", **vram_config), + ], + tokenizer_config=ModelConfig(model_id="AI-ModelScope/stable-diffusion-v1-5", origin_file_pattern="tokenizer/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) + +image = pipe( + prompt="a photo of an astronaut riding a horse on mars, high quality, detailed", + negative_prompt="blurry, low quality, deformed", + cfg_scale=7.5, + height=512, + width=512, + seed=42, + rand_device="cuda", + num_inference_steps=50, +) +image.save("image.jpg") +``` + +## Model Overview + +|Model ID|Inference|Low VRAM Inference|Full Training|Full Training Validation|LoRA Training|LoRA Training Validation| +|-|-|-|-|-|-|-| +|[AI-ModelScope/stable-diffusion-v1-5](https://www.modelscope.cn/models/AI-ModelScope/stable-diffusion-v1-5)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/stable_diffusion/model_inference/stable-diffusion-v1-5.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/stable_diffusion/model_inference_low_vram/stable-diffusion-v1-5.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/stable_diffusion/model_training/full/stable-diffusion-v1-5.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/stable_diffusion/model_training/validate_full/stable-diffusion-v1-5.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/stable_diffusion/model_training/lora/stable-diffusion-v1-5.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/stable_diffusion/model_training/validate_lora/stable-diffusion-v1-5.py)| + +## Model Inference + +The model is loaded via `StableDiffusionPipeline.from_pretrained`, see [Loading Models](../Pipeline_Usage/Model_Inference.md#loading-models) for details. + +The input parameters for `StableDiffusionPipeline` inference include: + +* `prompt`: Text prompt. +* `negative_prompt`: Negative prompt, defaults to an empty string. +* `cfg_scale`: Classifier-Free Guidance scale factor, default 7.5. +* `height`: Output image height, default 512. +* `width`: Output image width, default 512. +* `seed`: Random seed, defaults to a random value if not set. +* `rand_device`: Noise generation device, defaults to "cpu". +* `num_inference_steps`: Number of inference steps, default 50. +* `eta`: DDIM scheduler eta parameter, default 0.0. +* `guidance_rescale`: Guidance rescale factor, default 0.0. +* `progress_bar_cmd`: Progress bar callback function. + +## Model Training + +Models in the stable_diffusion series are trained via `examples/stable_diffusion/model_training/train.py`. The script parameters include: + +* General Training Parameters + * Dataset Configuration + * `--dataset_base_path`: Root directory of the dataset. + * `--dataset_metadata_path`: Path to the dataset metadata file. + * `--dataset_repeat`: Number of dataset repeats per epoch. + * `--dataset_num_workers`: Number of processes per DataLoader. + * `--data_file_keys`: Field names to load from metadata, typically paths to image or video files, separated by `,`. + * Model Loading Configuration + * `--model_paths`: Paths to load models from, in JSON format. + * `--model_id_with_origin_paths`: Model IDs with original paths, separated by commas. + * `--extra_inputs`: Additional input parameters required by the model Pipeline, separated by `,`. + * `--fp8_models`: Models to load in FP8 format, currently only supported for models whose parameters are not updated by gradients. + * `--quant_options`: Dynamically quantize loaded models. Semicolon-separated entries, each `:[/]`, where `` matches an entry in `--model_paths`/`--model_id_with_origin_paths`, `method` is a registered method (e.g. `bitsandbytes_nf4`), and `exclude_modules` optionally lists layers kept in full precision. + * Basic Training Configuration + * `--learning_rate`: Learning rate. + * `--num_epochs`: Number of epochs. + * `--trainable_models`: Trainable models, e.g., `dit`, `vae`, `text_encoder`. + * `--find_unused_parameters`: Whether unused parameters exist in DDP training. + * `--weight_decay`: Weight decay magnitude. + * `--task`: Training task, defaults to `sft`. + * Output Configuration + * `--output_path`: Path to save the model. + * `--remove_prefix_in_ckpt`: Remove prefix in the model's state dict. + * `--save_steps`: Interval in training steps to save the model. + * LoRA Configuration + * `--lora_base_model`: Which model to add LoRA to. + * `--lora_target_modules`: Which layers to add LoRA to. + * `--lora_rank`: Rank of LoRA. + * `--lora_checkpoint`: Path to LoRA checkpoint. + * `--preset_lora_path`: Path to preset LoRA checkpoint for LoRA differential training. + * `--preset_lora_model`: Which model to integrate preset LoRA into, e.g., `dit`. + * Gradient Configuration + * `--use_gradient_checkpointing`: Whether to enable gradient checkpointing. + * `--use_gradient_checkpointing_offload`: Whether to offload gradient checkpointing to CPU memory. + * `--gradient_accumulation_steps`: Number of gradient accumulation steps. + * Resolution Configuration + * `--height`: Height of the image/video. Leave empty to enable dynamic resolution. + * `--width`: Width of the image/video. Leave empty to enable dynamic resolution. + * `--max_pixels`: Maximum pixel area, images larger than this will be scaled down during dynamic resolution. + * `--num_frames`: Number of frames for video (video generation models only). +* Stable Diffusion Specific Parameters + * `--tokenizer_path`: Tokenizer path, defaults to `AI-ModelScope/stable-diffusion-v1-5:tokenizer/`. + +Example dataset download: + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "stable_diffusion/*" --local_dir ./data/diffsynth_example_dataset +``` + +[stable-diffusion-v1-5 training scripts](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/stable_diffusion/model_training/lora/stable-diffusion-v1-5.sh) + +We provide recommended training scripts for each model, please refer to the table in "Model Overview" above. For guidance on writing model training scripts, see [Model Training](../Pipeline_Usage/Model_Training.md); for more advanced training algorithms, see [Training Framework Overview](https://github.com/modelscope/DiffSynth-Studio/tree/main/docs/en/Training/). diff --git a/docs/en/Model_Details/Wan.md b/docs/en/Model_Details/Wan.md new file mode 100644 index 0000000000000000000000000000000000000000..52c35b4a3da8afd7387ee5a22a60fb1c9b2adc66 --- /dev/null +++ b/docs/en/Model_Details/Wan.md @@ -0,0 +1,267 @@ +# Wan + +https://github.com/user-attachments/assets/1d66ae74-3b02-40a9-acc3-ea95fc039314 + +Wan is a video generation model series developed by the Tongyi Wanxiang Team of Alibaba Tongyi Lab. + +## Installation + +Before using this project for model inference and training, please install DiffSynth-Studio first. + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +For more information about installation, please refer to [Install Dependencies](../Pipeline_Usage/Setup.md). + +## Quick Start + +Run the following code to quickly load the [Wan-AI/Wan2.1-T2V-1.3B](https://modelscope.cn/models/Wan-AI/Wan2.1-T2V-1.3B) model and perform inference. VRAM management is enabled, and the framework will automatically control model parameter loading based on remaining VRAM. Minimum 8GB VRAM is required to run. + +```python +import torch +from diffsynth.utils.data import save_video, VideoData +from diffsynth.pipelines.wan_video import WanVideoPipeline, ModelConfig + +vram_config = { + "offload_dtype": "disk", + "offload_device": "disk", + "onload_dtype": torch.bfloat16, + "onload_device": "cpu", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} +pipe = WanVideoPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Wan-AI/Wan2.1-T2V-1.3B", origin_file_pattern="diffusion_pytorch_model*.safetensors", **vram_config), + ModelConfig(model_id="Wan-AI/Wan2.1-T2V-1.3B", origin_file_pattern="models_t5_umt5-xxl-enc-bf16.pth", **vram_config), + ModelConfig(model_id="Wan-AI/Wan2.1-T2V-1.3B", origin_file_pattern="Wan2.1_VAE.pth", **vram_config), + ], + tokenizer_config=ModelConfig(model_id="Wan-AI/Wan2.1-T2V-1.3B", origin_file_pattern="google/umt5-xxl/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 2, +) + +video = pipe( + prompt="纪实摄影风格画面,一只活泼的小狗在绿茵茵的草地上迅速奔跑。小狗毛色棕黄,两只耳朵立起,神情专注而欢快。阳光洒在它身上,使得毛发看上去格外柔软而闪亮。背景是一片开阔的草地,偶尔点缀着几朵野花,远处隐约可见蓝天和几片白云。透视感鲜明,捕捉小狗奔跑时的动感和四周草地的生机。中景侧面移动视角。", + negative_prompt="色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走", + seed=0, tiled=True, +) +save_video(video, "video.mp4", fps=15, quality=5) +``` + +## Model Overview + +| Model ID | Extra Inputs | Inference | Low VRAM Inference | Full Training | Validation After Full Training | LoRA Training | Validation After LoRA Training | +|-|-|-|-|-|-|-|-| +|[Wan-AI/Wan2.1-T2V-1.3B](https://modelscope.cn/models/Wan-AI/Wan2.1-T2V-1.3B)||[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.1-T2V-1.3B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.1-T2V-1.3B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.1-T2V-1.3B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.1-T2V-1.3B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.1-T2V-1.3B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.1-T2V-1.3B.py)| +|[Wan-AI/Wan2.1-T2V-14B](https://modelscope.cn/models/Wan-AI/Wan2.1-T2V-14B)||[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.1-T2V-14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.1-T2V-14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.1-T2V-14B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.1-T2V-14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.1-T2V-14B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.1-T2V-14B.py)| +|[Wan-AI/Wan2.1-I2V-14B-480P](https://modelscope.cn/models/Wan-AI/Wan2.1-I2V-14B-480P)|`input_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.1-I2V-14B-480P.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.1-I2V-14B-480P.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.1-I2V-14B-480P.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.1-I2V-14B-480P.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.1-I2V-14B-480P.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.1-I2V-14B-480P.py)| +|[Wan-AI/Wan2.1-I2V-14B-720P](https://modelscope.cn/models/Wan-AI/Wan2.1-I2V-14B-720P)|`input_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.1-I2V-14B-720P.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.1-I2V-14B-720P.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.1-I2V-14B-720P.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.1-I2V-14B-720P.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.1-I2V-14B-720P.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.1-I2V-14B-720P.py)| +|[Wan-AI/Wan2.1-FLF2V-14B-720P](https://modelscope.cn/models/Wan-AI/Wan2.1-FLF2V-14B-720P)|`input_image`, `end_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.1-FLF2V-14B-720P.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.1-FLF2V-14B-720P.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.1-FLF2V-14B-720P.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.1-FLF2V-14B-720P.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.1-FLF2V-14B-720P.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.1-FLF2V-14B-720P.py)| +|[iic/VACE-Wan2.1-1.3B-Preview](https://modelscope.cn/models/iic/VACE-Wan2.1-1.3B-Preview)|`vace_control_video`, `vace_reference_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.1-VACE-1.3B-Preview.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.1-VACE-1.3B-Preview.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.1-VACE-1.3B-Preview.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.1-VACE-1.3B-Preview.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.1-VACE-1.3B-Preview.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.1-VACE-1.3B-Preview.py)| +|[Wan-AI/Wan2.1-VACE-1.3B](https://modelscope.cn/models/Wan-AI/Wan2.1-VACE-1.3B)|`vace_control_video`, `vace_reference_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.1-VACE-1.3B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.1-VACE-1.3B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.1-VACE-1.3B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.1-VACE-1.3B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.1-VACE-1.3B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.1-VACE-1.3B.py)| +|[Wan-AI/Wan2.1-VACE-14B](https://modelscope.cn/models/Wan-AI/Wan2.1-VACE-14B)|`vace_control_video`, `vace_reference_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.1-VACE-14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.1-VACE-14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.1-VACE-14B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.1-VACE-14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.1-VACE-14B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.1-VACE-14B.py)| +|[PAI/Wan2.1-Fun-1.3B-InP](https://modelscope.cn/models/PAI/Wan2.1-Fun-1.3B-InP)|`input_image`, `end_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.1-Fun-1.3B-InP.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.1-Fun-1.3B-InP.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.1-Fun-1.3B-InP.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.1-Fun-1.3B-InP.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.1-Fun-1.3B-InP.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.1-Fun-1.3B-InP.py)| +|[PAI/Wan2.1-Fun-1.3B-Control](https://modelscope.cn/models/PAI/Wan2.1-Fun-1.3B-Control)|`control_video`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.1-Fun-1.3B-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.1-Fun-1.3B-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.1-Fun-1.3B-Control.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.1-Fun-1.3B-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.1-Fun-1.3B-Control.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.1-Fun-1.3B-Control.py)| +|[PAI/Wan2.1-Fun-14B-InP](https://modelscope.cn/models/PAI/Wan2.1-Fun-14B-InP)|`input_image`, `end_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.1-Fun-14B-InP.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.1-Fun-14B-InP.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.1-Fun-14B-InP.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.1-Fun-14B-InP.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.1-Fun-14B-InP.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.1-Fun-14B-InP.py)| +|[PAI/Wan2.1-Fun-14B-Control](https://modelscope.cn/models/PAI/Wan2.1-Fun-14B-Control)|`control_video`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.1-Fun-14B-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.1-Fun-14B-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.1-Fun-14B-Control.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.1-Fun-14B-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.1-Fun-14B-Control.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.1-Fun-14B-Control.py)| +|[PAI/Wan2.1-Fun-V1.1-1.3B-Control](https://modelscope.cn/models/PAI/Wan2.1-Fun-V1.1-1.3B-Control)|`control_video`, `reference_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.1-Fun-V1.1-1.3B-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.1-Fun-V1.1-1.3B-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.1-Fun-V1.1-1.3B-Control.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.1-Fun-V1.1-1.3B-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.1-Fun-V1.1-1.3B-Control.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.1-Fun-V1.1-1.3B-Control.py)| +|[PAI/Wan2.1-Fun-V1.1-14B-Control](https://modelscope.cn/models/PAI/Wan2.1-Fun-V1.1-14B-Control)|`control_video`, `reference_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.1-Fun-V1.1-14B-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.1-Fun-V1.1-14B-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.1-Fun-V1.1-14B-Control.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.1-Fun-V1.1-14B-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.1-Fun-V1.1-14B-Control.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.1-Fun-V1.1-14B-Control.py)| +|[PAI/Wan2.1-Fun-V1.1-1.3B-InP](https://modelscope.cn/models/PAI/Wan2.1-Fun-V1.1-1.3B-InP)|`input_image`, `end_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.1-Fun-V1.1-1.3B-InP.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.1-Fun-V1.1-1.3B-InP.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.1-Fun-V1.1-1.3B-InP.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.1-Fun-V1.1-1.3B-InP.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.1-Fun-V1.1-1.3B-InP.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.1-Fun-V1.1-1.3B-InP.py)| +|[PAI/Wan2.1-Fun-V1.1-14B-InP](https://modelscope.cn/models/PAI/Wan2.1-Fun-V1.1-14B-InP)|`input_image`, `end_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.1-Fun-V1.1-14B-InP.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.1-Fun-V1.1-14B-InP.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.1-Fun-V1.1-14B-InP.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.1-Fun-V1.1-14B-InP.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.1-Fun-V1.1-14B-InP.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.1-Fun-V1.1-14B-InP.py)| +|[PAI/Wan2.1-Fun-V1.1-1.3B-Control-Camera](https://modelscope.cn/models/PAI/Wan2.1-Fun-V1.1-1.3B-Control-Camera)|`control_camera_video`, `input_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.1-Fun-V1.1-1.3B-Control-Camera.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.1-Fun-V1.1-1.3B-Control-Camera.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.1-Fun-V1.1-1.3B-Control-Camera.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.1-Fun-V1.1-1.3B-Control-Camera.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.1-Fun-V1.1-1.3B-Control-Camera.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.1-Fun-V1.1-1.3B-Control-Camera.py)| +|[PAI/Wan2.1-Fun-V1.1-14B-Control-Camera](https://modelscope.cn/models/PAI/Wan2.1-Fun-V1.1-14B-Control-Camera)|`control_camera_video`, `input_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.1-Fun-V1.1-14B-Control-Camera.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.1-Fun-V1.1-14B-Control-Camera.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.1-Fun-V1.1-14B-Control-Camera.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.1-Fun-V1.1-14B-Control-Camera.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.1-Fun-V1.1-14B-Control-Camera.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.1-Fun-V1.1-14B-Control-Camera.py)| +|[DiffSynth-Studio/Wan2.1-1.3b-speedcontrol-v1](https://modelscope.cn/models/DiffSynth-Studio/Wan2.1-1.3b-speedcontrol-v1)|`motion_bucket_id`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.1-1.3b-speedcontrol-v1.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.1-1.3b-speedcontrol-v1.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.1-1.3b-speedcontrol-v1.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.1-1.3b-speedcontrol-v1.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.1-1.3b-speedcontrol-v1.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.1-1.3b-speedcontrol-v1.py)| +|[krea/krea-realtime-video](https://www.modelscope.cn/models/krea/krea-realtime-video)||[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/krea-realtime-video.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/krea-realtime-video.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/krea-realtime-video.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/krea-realtime-video.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/krea-realtime-video.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/krea-realtime-video.py)| +|[meituan-longcat/LongCat-Video](https://www.modelscope.cn/models/meituan-longcat/LongCat-Video)|`longcat_video`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/LongCat-Video.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/LongCat-Video.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/LongCat-Video.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/LongCat-Video.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/LongCat-Video.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/LongCat-Video.py)| +|[ByteDance/Video-As-Prompt-Wan2.1-14B](https://modelscope.cn/models/ByteDance/Video-As-Prompt-Wan2.1-14B)|`vap_video`, `vap_prompt`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Video-As-Prompt-Wan2.1-14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Video-As-Prompt-Wan2.1-14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Video-As-Prompt-Wan2.1-14B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Video-As-Prompt-Wan2.1-14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Video-As-Prompt-Wan2.1-14B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Video-As-Prompt-Wan2.1-14B.py)| +|[Wan-AI/Wan2.2-T2V-A14B](https://modelscope.cn/models/Wan-AI/Wan2.2-T2V-A14B)||[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.2-T2V-A14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.2-T2V-A14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.2-T2V-A14B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.2-T2V-A14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.2-T2V-A14B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.2-T2V-A14B.py)| +|[Wan-AI/Wan2.2-I2V-A14B](https://modelscope.cn/models/Wan-AI/Wan2.2-I2V-A14B)|`input_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.2-I2V-A14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.2-I2V-A14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.2-I2V-A14B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.2-I2V-A14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.2-I2V-A14B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.2-I2V-A14B.py)| +|[Wan-AI/Wan2.2-TI2V-5B](https://modelscope.cn/models/Wan-AI/Wan2.2-TI2V-5B)|`input_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.2-TI2V-5B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.2-TI2V-5B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.2-TI2V-5B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.2-TI2V-5B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.2-TI2V-5B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.2-TI2V-5B.py)| +|[Wan-AI/Wan2.2-Animate-14B](https://www.modelscope.cn/models/Wan-AI/Wan2.2-Animate-14B)|`input_image`, `animate_pose_video`, `animate_face_video`, `animate_inpaint_video`, `animate_mask_video`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.2-Animate-14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.2-Animate-14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.2-Animate-14B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.2-Animate-14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.2-Animate-14B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.2-Animate-14B.py)| +|[Wan-AI/Wan2.2-Animate-2-14B](https://www.modelscope.cn/models/Wan-AI/Wan2.2-Animate-2-14B)|`animate2_reference_image`, `animate2_reference_video`, `animate2_prompt_ref`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.2-Animate-2-14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.2-Animate-2-14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.2-Animate-2-14B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.2-Animate-2-14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.2-Animate-2-14B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.2-Animate-2-14B.py)| +|[Wan-AI/Wan2.2-Animate-2-14B: Distilled](https://www.modelscope.cn/models/Wan-AI/Wan2.2-Animate-2-14B)|`animate2_reference_image`, `animate2_reference_video`, `animate2_prompt_ref`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.2-Animate-2-14B-Distilled.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.2-Animate-2-14B-Distilled.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.2-Animate-2-14B-Distilled.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.2-Animate-2-14B-Distilled.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.2-Animate-2-14B-Distilled.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.2-Animate-2-14B-Distilled.py)| +|[Wan-AI/Wan2.2-S2V-14B](https://www.modelscope.cn/models/Wan-AI/Wan2.2-S2V-14B)|`input_image`, `input_audio`, `audio_sample_rate`, `s2v_pose_video`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.2-S2V-14B_multi_clips.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.2-S2V-14B_multi_clips.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.2-S2V-14B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.2-S2V-14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.2-S2V-14B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.2-S2V-14B.py)| +|[PAI/Wan2.2-VACE-Fun-A14B](https://www.modelscope.cn/models/PAI/Wan2.2-VACE-Fun-A14B)|`vace_control_video`, `vace_reference_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.2-VACE-Fun-A14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.2-VACE-Fun-A14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.2-VACE-Fun-A14B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.2-VACE-Fun-A14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.2-VACE-Fun-A14B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.2-VACE-Fun-A14B.py)| +|[PAI/Wan2.2-Fun-A14B-InP](https://modelscope.cn/models/PAI/Wan2.2-Fun-A14B-InP)|`input_image`, `end_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.2-Fun-A14B-InP.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.2-Fun-A14B-InP.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.2-Fun-A14B-InP.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.2-Fun-A14B-InP.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.2-Fun-A14B-InP.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.2-Fun-A14B-InP.py)| +|[PAI/Wan2.2-Fun-A14B-Control](https://modelscope.cn/models/PAI/Wan2.2-Fun-A14B-Control)|`control_video`, `reference_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.2-Fun-A14B-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.2-Fun-A14B-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.2-Fun-A14B-Control.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.2-Fun-A14B-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.2-Fun-A14B-Control.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.2-Fun-A14B-Control.py)| +|[PAI/Wan2.2-Fun-A14B-Control-Camera](https://modelscope.cn/models/PAI/Wan2.2-Fun-A14B-Control-Camera)|`control_camera_video`, `input_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.2-Fun-A14B-Control-Camera.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.2-Fun-A14B-Control-Camera.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.2-Fun-A14B-Control-Camera.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.2-Fun-A14B-Control-Camera.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.2-Fun-A14B-Control-Camera.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.2-Fun-A14B-Control-Camera.py)| +|[openmoss/MOVA-360p](https://modelscope.cn/models/openmoss/MOVA-360p)|`input_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/mova/model_inference/MOVA-360p-I2AV.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/mova/model_inference_low_vram/MOVA-360p-I2AV.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/mova/model_training/full/MOVA-360P-I2AV.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/mova/model_training/validate_full/MOVA-360p-I2AV.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/mova/model_training/lora/MOVA-360P-I2AV.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/mova/model_training/validate_lora/MOVA-360p-I2AV.py)| +|[openmoss/MOVA-720p](https://modelscope.cn/models/openmoss/MOVA-720p)|`input_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/mova/model_inference/MOVA-720p-I2AV.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/mova/model_inference_low_vram/MOVA-720p-I2AV.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/mova/model_training/full/MOVA-720P-I2AV.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/mova/model_training/validate_full/MOVA-720p-I2AV.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/mova/model_training/lora/MOVA-720P-I2AV.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/mova/model_training/validate_lora/MOVA-720p-I2AV.py)| +|[Wan-AI/Wan-Dancer-14B (global model)](https://modelscope.cn/models/Wan-AI/Wan-Dancer-14B)|`wantodance_music_path`, `wantodance_reference_image`, `wantodance_fps`, `wantodance_keyframes`, `wantodance_keyframes_mask`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan-Dancer-14B-global.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan-Dancer-14B-global.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan-Dancer-14B-global.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan-Dancer-14B-global.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan-Dancer-14B-global.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan-Dancer-14B-global.py)| +|[Wan-AI/Wan-Dancer-14B (local model)](https://modelscope.cn/models/Wan-AI/Wan-Dancer-14B)|`wantodance_music_path`, `wantodance_reference_image`, `wantodance_fps`, `wantodance_keyframes`, `wantodance_keyframes_mask`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan-Dancer-14B-local.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan-Dancer-14B-local.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan-Dancer-14B-local.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan-Dancer-14B-local.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan-Dancer-14B-local.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan-Dancer-14B-local.py)| + +* FP8 Precision Training: [doc](../Training/FP8_Precision.md), [code](https://github.com/modelscope/DiffSynth-Studio/tree/main/examples/wanvideo/model_training/special/fp8_training/) +* Two-stage Split Training: [doc](../Training/Split_Training.md), [code](https://github.com/modelscope/DiffSynth-Studio/tree/main/examples/wanvideo/model_training/special/split_training/) +* End-to-end Direct Distillation: [doc](../Training/Direct_Distill.md), [code](https://github.com/modelscope/DiffSynth-Studio/tree/main/examples/wanvideo/model_training/special/direct_distill/) + +DeepSpeed ZeRO Stage 3 Training: The Wan series models support DeepSpeed ZeRO Stage 3 training, which partitions the model across multiple GPUs. Taking full parameter training of the Wan2.1-T2V-14B model as an example, the following modifications are required: + +* `--config_file examples/wanvideo/model_training/full/accelerate_config_zero3.yaml` +* `--initialize_model_on_cpu` + +## Model Inference + +Models are loaded via `WanVideoPipeline.from_pretrained`, see [Loading Models](../Pipeline_Usage/Model_Inference.md#loading-models). + +Input parameters for `WanVideoPipeline` inference include: + +* `prompt`: Prompt describing the content appearing in the video. +* `negative_prompt`: Negative prompt describing content that should not appear in the video, default value is `""`. +* `cfg_scale`: Classifier-free guidance parameter, default value is 5. When set to 1, it no longer takes effect. +* `input_image`: Input image for image-to-video generation, used in conjunction with `denoising_strength`. +* `end_image`: End image for first-and-last frame video generation. +* `input_video`: Input video for video-to-video generation, used in conjunction with `denoising_strength`. +* `denoising_strength`: Denoising strength, range is 0~1, default value is 1. When the value approaches 0, the generated video is similar to the input video; when the value approaches 1, the generated video differs more from the input video. +* `control_video`: Control video for controlling the video generation process. +* `reference_image`: Reference image for maintaining consistency of certain features in the generated video. +* `camera_control_direction`: Camera control direction, optional values are `"Left"`, `"Right"`, `"Up"`, `"Down"`, `"LeftUp"`, `"LeftDown"`, `"RightUp"`, `"RightDown"`. +* `camera_control_speed`: Camera control speed, default value is 1/54. +* `vace_video`: VACE control video. +* `vace_video_mask`: VACE control video mask. +* `vace_reference_image`: VACE reference image. +* `vace_scale`: VACE control strength, default value is 1.0. +* `animate_pose_video`: `animate` model pose video. +* `animate_face_video`: `animate` model face video. +* `animate_inpaint_video`: `animate` model local editing video. +* `animate_mask_video`: `animate` model mask video. +* `vap_video`: `video-as-prompt` input video. +* `vap_prompt`: `video-as-prompt` text description. +* `negative_vap_prompt`: `video-as-prompt` negative text description. +* `input_audio`: Input audio for speech-to-video generation. +* `audio_embeds`: Audio embedding vectors. +* `audio_sample_rate`: Audio sampling rate, default value is 16000. +* `s2v_pose_video`: S2V model pose video. +* `motion_video`: S2V model motion video. +* `animate2_reference_image`: Wan-Animate-2 reference image, providing the character identity. +* `animate2_reference_video`: Wan-Animate-2 driving video, providing the motion. +* `animate2_prompt_ref`: Wan-Animate-2 reference prompt for the driving video, describing its content. +* `animate2_refert_images`: Wan-Animate-2 reference frame images for temporal continuation, used in long video chunked generation. +* `animate2_offload_kv`: Whether Wan-Animate-2 offloads the reference video KV cache to memory, default value is `False`. +* `animate2_log_scale`: Wan-Animate-2 guidance log scale, default value is 0.0, recommended to set to -1.3 for the distilled model. +* `height`: Video height, must be a multiple of 16. +* `width`: Video width, must be a multiple of 16. +* `num_frames`: Number of video frames, default value is 81, must be a multiple of 4 + 1. +* `seed`: Random seed. Default is `None`, meaning completely random. +* `rand_device`: Computing device for generating random Gaussian noise matrix, default is `"cpu"`. When set to `cuda`, different GPUs will produce different generation results. +* `num_inference_steps`: Number of inference steps, default value is 50. +* `motion_bucket_id`: Motion control parameter, the larger the value, the greater the motion amplitude. +* `longcat_video`: LongCat input video. +* `tiled`: Whether to enable VAE tiling inference, default is `True`. Setting to `True` can significantly reduce VRAM usage during VAE encoding/decoding stages, producing slight errors and slightly longer inference time. +* `tile_size`: Tile size during VAE encoding/decoding stages, default is `(30, 52)`, only effective when `tiled=True`. +* `tile_stride`: Tile stride during VAE encoding/decoding stages, default is `(15, 26)`, only effective when `tiled=True`, must be less than or equal to `tile_size`. +* `switch_DiT_boundary`: Time boundary for switching DiT models, default value is 0.875. +* `sigma_shift`: Timestep offset parameter, default value is 5.0. +* `sliding_window_size`: Sliding window size. +* `sliding_window_stride`: Sliding window stride. +* `tea_cache_l1_thresh`: L1 threshold for TeaCache. +* `tea_cache_model_id`: Model ID used by TeaCache. +* `progress_bar_cmd`: Progress bar, default is `tqdm.tqdm`. Can be disabled by setting to `lambda x:x`. + +If VRAM is insufficient, please enable [VRAM Management](../Pipeline_Usage/VRAM_management.md). We provide recommended low VRAM configurations for each model in the example code, see the table in the "Model Overview" section above. + +### Multi-GPU Parallel Acceleration + +To enable multi-GPU parallel acceleration, please install `flash_attn` and `xfuser`: + +```shell +pip install flash-attn --no-build-isolation +pip install xfuser +``` + +Please modify your code as follows ([example code](https://github.com/modelscope/DiffSynth-Studio/tree/main/examples/wanvideo/acceleration/unified_sequence_parallel.py)): + +```diff +import torch +from PIL import Image +from diffsynth.utils.data import save_video, VideoData +from diffsynth.pipelines.wan_video import WanVideoPipeline, ModelConfig ++ import torch.distributed as dist + +pipe = WanVideoPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", ++ use_usp=True, + model_configs=[ + ModelConfig(model_id="Wan-AI/Wan2.1-T2V-14B", origin_file_pattern="diffusion_pytorch_model*.safetensors"), + ModelConfig(model_id="Wan-AI/Wan2.1-T2V-14B", origin_file_pattern="models_t5_umt5-xxl-enc-bf16.pth"), + ModelConfig(model_id="Wan-AI/Wan2.1-T2V-14B", origin_file_pattern="Wan2.1_VAE.pth"), + ], + tokenizer_config=ModelConfig(model_id="Wan-AI/Wan2.1-T2V-1.3B", origin_file_pattern="google/umt5-xxl/"), +) +video = pipe( + prompt="An astronaut in a spacesuit rides a mechanical horse across the Martian surface, facing the camera. The red, desolate terrain stretches into the distance, dotted with massive craters and unusual rock formations. The mechanical horse moves with steady strides, kicking up faint dust, embodying a perfect fusion of futuristic technology and primal exploration. The astronaut holds a control device, with a determined gaze, as if pioneering new frontiers for humanity. Against a backdrop of the deep cosmos and the blue Earth, the scene is both sci-fi and hopeful, evoking imagination about future interstellar life.", + negative_prompt="oversaturated colors, overexposed, static, blurry details, subtitles, style, artwork, painting, still image, overall gray tone, worst quality, low quality, JPEG compression artifacts, ugly, malformed, extra fingers, poorly drawn hands, poorly drawn face, deformed, disfigured, malformed limbs, fused fingers, frozen frame, cluttered background, three legs, crowd in background, walking backwards", + seed=0, tiled=True, +) ++ if dist.get_rank() == 0: ++ save_video(video, "video1.mp4", fps=15, quality=5) +``` + +When running multi-GPU parallel inference, please use `torchrun`, where `--nproc_per_node` specifies the number of GPUs: + +```shell +torchrun --nproc_per_node=8 examples/wanvideo/acceleration/unified_sequence_parallel.py +``` + +## Model Training + +Wan series models are uniformly trained through [`examples/wanvideo/model_training/train.py`](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/train.py), and the script parameters include: + +* General Training Parameters + * Dataset Basic Configuration + * `--dataset_base_path`: Root directory of the dataset. + * `--dataset_metadata_path`: Metadata file path of the dataset. + * `--dataset_repeat`: Number of times the dataset is repeated in each epoch. + * `--dataset_num_workers`: Number of processes for each DataLoader. + * `--data_file_keys`: Field names to be loaded from metadata, usually image or video file paths, separated by `,`. + * Model Loading Configuration + * `--model_paths`: Paths of models to be loaded. JSON format. + * `--model_id_with_origin_paths`: Model IDs with original paths, e.g., `"Wan-AI/Wan2.1-T2V-1.3B:diffusion_pytorch_model*.safetensors"`. Separated by commas. + * `--extra_inputs`: Extra input parameters required by the model Pipeline, e.g., extra parameters when training image editing models, separated by `,`. + * `--fp8_models`: Models loaded in FP8 format, consistent with `--model_paths` or `--model_id_with_origin_paths` format. Currently only supports models whose parameters are not updated by gradients (no gradient backpropagation, or gradients only update their LoRA). + * `--quant_options`: Dynamically quantize loaded models. Semicolon-separated entries, each `:[/]`, where `` matches an entry in `--model_paths`/`--model_id_with_origin_paths`, `method` is a registered method (e.g. `bitsandbytes_nf4`), and `exclude_modules` optionally lists layers kept in full precision. + * Training Basic Configuration + * `--learning_rate`: Learning rate. + * `--num_epochs`: Number of epochs. + * `--trainable_models`: Trainable models, e.g., `dit`, `vae`, `text_encoder`. + * `--find_unused_parameters`: Whether there are unused parameters in DDP training. Some models contain redundant parameters that do not participate in gradient calculation, and this setting needs to be enabled to avoid errors in multi-GPU training. + * `--weight_decay`: Weight decay size, see [torch.optim.AdamW](https://docs.pytorch.org/docs/stable/generated/torch.optim.AdamW.html). + * `--task`: Training task, default is `sft`. Some models support more training modes, please refer to the documentation of each specific model. + * Output Configuration + * `--output_path`: Model saving path. + * `--remove_prefix_in_ckpt`: Remove prefix in the state dict of the model file. + * `--save_steps`: Interval of training steps to save the model. If this parameter is left blank, the model is saved once per epoch. + * LoRA Configuration + * `--lora_base_model`: Which model to add LoRA to. + * `--lora_target_modules`: Which layers to add LoRA to. + * `--lora_rank`: Rank of LoRA. + * `--lora_checkpoint`: Path of the LoRA checkpoint. If this path is provided, LoRA will be loaded from this checkpoint. + * `--preset_lora_path`: Preset LoRA checkpoint path. If this path is provided, this LoRA will be loaded in the form of being merged into the base model. This parameter is used for LoRA differential training. + * `--preset_lora_model`: Model that the preset LoRA is merged into, e.g., `dit`. + * Gradient Configuration + * `--use_gradient_checkpointing`: Whether to enable gradient checkpointing. + * `--use_gradient_checkpointing_offload`: Whether to offload gradient checkpointing to memory. + * `--gradient_accumulation_steps`: Number of gradient accumulation steps. + * Video Width/Height Configuration + * `--height`: Height of the video. Leave `height` and `width` blank to enable dynamic resolution. + * `--width`: Width of the video. Leave `height` and `width` blank to enable dynamic resolution. + * `--max_pixels`: Maximum pixel area of video frames. When dynamic resolution is enabled, video frames with resolution larger than this value will be downscaled, and video frames with resolution smaller than this value will remain unchanged. + * `--num_frames`: Number of frames in the video. +* Wan Series Specific Parameters + * `--tokenizer_path`: Path of the tokenizer, applicable to text-to-video models, leave blank to automatically download from remote. + * `--audio_processor_path`: Path of the audio processor, applicable to speech-to-video models, leave blank to automatically download from remote. + +We have built a sample video dataset for your testing. You can download this dataset with the following command: + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --local_dir ./data/diffsynth_example_dataset +``` + +We have written recommended training scripts for each model, please refer to the table in the "Model Overview" section above. For how to write model training scripts, please refer to [Model Training](../Pipeline_Usage/Model_Training.md); for more advanced training algorithms, please refer to [Training Framework Detailed Explanation](https://github.com/modelscope/DiffSynth-Studio/tree/main/docs/en/Training/). diff --git a/docs/en/Model_Details/Z-Image.md b/docs/en/Model_Details/Z-Image.md new file mode 100644 index 0000000000000000000000000000000000000000..cc42bb37888d1798c9ed9f8ecf8f9dcb067e0126 --- /dev/null +++ b/docs/en/Model_Details/Z-Image.md @@ -0,0 +1,151 @@ +# Z-Image + +Z-Image is an image generation model trained and open-sourced by the Multimodal Interaction Team of Alibaba Tongyi Lab. + +## Installation + +Before using this project for model inference and training, please install DiffSynth-Studio first. + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +For more information about installation, please refer to [Install Dependencies](../Pipeline_Usage/Setup.md). + +## Quick Start + +Run the following code to quickly load the [Tongyi-MAI/Z-Image-Turbo](https://www.modelscope.cn/models/Tongyi-MAI/Z-Image-Turbo) model and perform inference. FP8 precision quantization causes noticeable image quality degradation, so it is not recommended to enable any quantization on the Z-Image Turbo model. Only CPU Offload is recommended, minimum 8GB VRAM is required to run. + +```python +from diffsynth.pipelines.z_image import ZImagePipeline, ModelConfig +import torch + +vram_config = { + "offload_dtype": torch.bfloat16, + "offload_device": "cpu", + "onload_dtype": torch.bfloat16, + "onload_device": "cpu", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} +pipe = ZImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Tongyi-MAI/Z-Image-Turbo", origin_file_pattern="transformer/*.safetensors", **vram_config), + ModelConfig(model_id="Tongyi-MAI/Z-Image-Turbo", origin_file_pattern="text_encoder/*.safetensors", **vram_config), + ModelConfig(model_id="Tongyi-MAI/Z-Image-Turbo", origin_file_pattern="vae/diffusion_pytorch_model.safetensors", **vram_config), + ], + tokenizer_config=ModelConfig(model_id="Tongyi-MAI/Z-Image-Turbo", origin_file_pattern="tokenizer/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) +prompt = "Young Chinese woman in red Hanfu, intricate embroidery. Impeccable makeup, red floral forehead pattern. Elaborate high bun, golden phoenix headdress, red flowers, beads. Holds round folding fan with lady, trees, bird. Neon lightning-bolt lamp (⚡️), bright yellow glow, above extended left palm. Soft-lit outdoor night background, silhouetted tiered pagoda (西安大雁塔), blurred colorful distant lights." +image = pipe(prompt=prompt, seed=42, rand_device="cuda") +image.save("image.jpg") +``` + +## Model Overview + +|Model ID|Inference|Low VRAM Inference|Full Training|Validation After Full Training|LoRA Training|Validation After LoRA Training| +|-|-|-|-|-|-|-| +|[Tongyi-MAI/Z-Image](https://www.modelscope.cn/models/Tongyi-MAI/Z-Image)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_inference/Z-Image.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_inference_low_vram/Z-Image.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/full/Z-Image.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/validate_full/Z-Image.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/lora/Z-Image.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/validate_lora/Z-Image.py)| +|[DiffSynth-Studio/Z-Image-i2L](https://www.modelscope.cn/models/DiffSynth-Studio/Z-Image-i2L)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_inference/Z-Image-i2L.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_inference_low_vram/Z-Image-i2L.py)|-|-|-|-| +|[Tongyi-MAI/Z-Image-Turbo](https://www.modelscope.cn/models/Tongyi-MAI/Z-Image-Turbo)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_inference/Z-Image-Turbo.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_inference_low_vram/Z-Image-Turbo.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/full/Z-Image-Turbo.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/validate_full/Z-Image-Turbo.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/lora/Z-Image-Turbo.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/validate_lora/Z-Image-Turbo.py)| +|[PAI/Z-Image-Turbo-Fun-Controlnet-Union-2.1](https://www.modelscope.cn/models/PAI/Z-Image-Turbo-Fun-Controlnet-Union-2.1)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_inference/Z-Image-Turbo-Fun-Controlnet-Union-2.1.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_inference_low_vram/Z-Image-Turbo-Fun-Controlnet-Union-2.1.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/full/Z-Image-Turbo-Fun-Controlnet-Union-2.1.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/validate_full/Z-Image-Turbo-Fun-Controlnet-Union-2.1.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/lora/Z-Image-Turbo-Fun-Controlnet-Union-2.1.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/validate_lora/Z-Image-Turbo-Fun-Controlnet-Union-2.1.py)| +|[PAI/Z-Image-Turbo-Fun-Controlnet-Union-2.1-8steps](https://www.modelscope.cn/models/PAI/Z-Image-Turbo-Fun-Controlnet-Union-2.1)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_inference/Z-Image-Turbo-Fun-Controlnet-Union-2.1-8steps.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_inference_low_vram/Z-Image-Turbo-Fun-Controlnet-Union-2.1-8steps.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/full/Z-Image-Turbo-Fun-Controlnet-Union-2.1-8steps.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/validate_full/Z-Image-Turbo-Fun-Controlnet-Union-2.1-8steps.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/lora/Z-Image-Turbo-Fun-Controlnet-Union-2.1-8steps.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/validate_lora/Z-Image-Turbo-Fun-Controlnet-Union-2.1-8steps.py)| +|[PAI/Z-Image-Turbo-Fun-Controlnet-Tile-2.1-8steps](https://www.modelscope.cn/models/PAI/Z-Image-Turbo-Fun-Controlnet-Union-2.1)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_inference/Z-Image-Turbo-Fun-Controlnet-Tile-2.1-8steps.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_inference_low_vram/Z-Image-Turbo-Fun-Controlnet-Tile-2.1-8steps.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/full/Z-Image-Turbo-Fun-Controlnet-Tile-2.1-8steps.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/validate_full/Z-Image-Turbo-Fun-Controlnet-Tile-2.1-8steps.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/lora/Z-Image-Turbo-Fun-Controlnet-Tile-2.1-8steps.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/validate_lora/Z-Image-Turbo-Fun-Controlnet-Tile-2.1-8steps.py)| +|[DiffSynth-Studio/ZImage-i2L-v2](https://www.modelscope.cn/models/DiffSynth-Studio/ZImage-i2L-v2)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_inference/ZImage-i2L-v2.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_inference_low_vram/ZImage-i2L-v2.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/full/ZImage-i2L-v2.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/validate_full/ZImage-i2L-v2.py)|-|-| + +Special Training Scripts: + +* Differential LoRA Training: [doc](../Training/Differential_LoRA.md), [code](https://github.com/modelscope/DiffSynth-Studio/tree/main/examples/z_image/model_training/special/differential_training/) +* Trajectory Imitation Distillation Training (Experimental Feature): [code](https://github.com/modelscope/DiffSynth-Studio/tree/main/examples/z_image/model_training/special/trajectory_imitation/) + +## Model Inference + +Models are loaded via `ZImagePipeline.from_pretrained`, see [Loading Models](../Pipeline_Usage/Model_Inference.md#loading-models). + +Input parameters for `ZImagePipeline` inference include: + +* `prompt`: Prompt describing the content appearing in the image. +* `negative_prompt`: Negative prompt describing content that should not appear in the image, default value is `""`. +* `cfg_scale`: Classifier-free guidance parameter, default value is 1. +* `input_image`: Input image for image-to-image generation, used in conjunction with `denoising_strength`. +* `denoising_strength`: Denoising strength, range is 0~1, default value is 1. When the value approaches 0, the generated image is similar to the input image; when the value approaches 1, the generated image differs more from the input image. When `input_image` parameter is not provided, do not set this to a non-1 value. +* `height`: Image height, must be a multiple of 16. +* `width`: Image width, must be a multiple of 16. +* `seed`: Random seed. Default is `None`, meaning completely random. +* `rand_device`: Computing device for generating random Gaussian noise matrix, default is `"cpu"`. When set to `cuda`, different GPUs will produce different generation results. +* `num_inference_steps`: Number of inference steps, default value is 8. +* `controlnet_inputs`: Inputs for ControlNet models. +* `edit_image`: Edit images for image editing models, supporting multiple images. +* `positive_only_lora`: LoRA weights used only in positive prompts. + +If VRAM is insufficient, please enable [VRAM Management](../Pipeline_Usage/VRAM_management.md). We provide recommended low VRAM configurations for each model in the example code, see the table in the "Model Overview" section above. + +## Model Training + +Z-Image series models are uniformly trained through [`examples/z_image/model_training/train.py`](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/train.py), and the script parameters include: + +* General Training Parameters + * Dataset Basic Configuration + * `--dataset_base_path`: Root directory of the dataset. + * `--dataset_metadata_path`: Metadata file path of the dataset. + * `--dataset_repeat`: Number of times the dataset is repeated in each epoch. + * `--dataset_num_workers`: Number of processes for each DataLoader. + * `--data_file_keys`: Field names to be loaded from metadata, usually image or video file paths, separated by `,`. + * Model Loading Configuration + * `--model_paths`: Paths of models to be loaded. JSON format. + * `--model_id_with_origin_paths`: Model IDs with original paths, e.g., `"Tongyi-MAI/Z-Image-Turbo:transformer/*.safetensors"`. Separated by commas. + * `--extra_inputs`: Extra input parameters required by the model Pipeline, e.g., extra parameters when training image editing models, separated by `,`. + * `--fp8_models`: Models loaded in FP8 format, consistent with `--model_paths` or `--model_id_with_origin_paths` format. Currently only supports models whose parameters are not updated by gradients (no gradient backpropagation, or gradients only update their LoRA). + * `--quant_options`: Dynamically quantize loaded models. Semicolon-separated entries, each `:[/]`, where `` matches an entry in `--model_paths`/`--model_id_with_origin_paths`, `method` is a registered method (e.g. `bitsandbytes_nf4`), and `exclude_modules` optionally lists layers kept in full precision. + * Training Basic Configuration + * `--learning_rate`: Learning rate. + * `--num_epochs`: Number of epochs. + * `--trainable_models`: Trainable models, e.g., `dit`, `vae`, `text_encoder`. + * `--find_unused_parameters`: Whether there are unused parameters in DDP training. Some models contain redundant parameters that do not participate in gradient calculation, and this setting needs to be enabled to avoid errors in multi-GPU training. + * `--weight_decay`: Weight decay size, see [torch.optim.AdamW](https://docs.pytorch.org/docs/stable/generated/torch.optim.AdamW.html). + * `--task`: Training task, default is `sft`. Some models support more training modes, please refer to the documentation of each specific model. + * Output Configuration + * `--output_path`: Model saving path. + * `--remove_prefix_in_ckpt`: Remove prefix in the state dict of the model file. + * `--save_steps`: Interval of training steps to save the model. If this parameter is left blank, the model is saved once per epoch. + * LoRA Configuration + * `--lora_base_model`: Which model to add LoRA to. + * `--lora_target_modules`: Which layers to add LoRA to. + * `--lora_rank`: Rank of LoRA. + * `--lora_checkpoint`: Path of the LoRA checkpoint. If this path is provided, LoRA will be loaded from this checkpoint. + * `--preset_lora_path`: Preset LoRA checkpoint path. If this path is provided, this LoRA will be loaded in the form of being merged into the base model. This parameter is used for LoRA differential training. + * `--preset_lora_model`: Model that the preset LoRA is merged into, e.g., `dit`. + * Gradient Configuration + * `--use_gradient_checkpointing`: Whether to enable gradient checkpointing. + * `--use_gradient_checkpointing_offload`: Whether to offload gradient checkpointing to memory. + * `--gradient_accumulation_steps`: Number of gradient accumulation steps. + * Image Width/Height Configuration (Applicable to Image Generation and Video Generation Models) + * `--height`: Height of image or video. Leave `height` and `width` blank to enable dynamic resolution. + * `--width`: Width of image or video. Leave `height` and `width` blank to enable dynamic resolution. + * `--max_pixels`: Maximum pixel area of image or video frames. When dynamic resolution is enabled, images with resolution larger than this value will be downscaled, and images with resolution smaller than this value will remain unchanged. +* Z-Image Specific Parameters + * `--tokenizer_path`: Path of the tokenizer, applicable to text-to-image models, leave blank to automatically download from remote. + +We have built a sample image dataset for your testing. You can download this dataset with the following command: + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --local_dir ./data/diffsynth_example_dataset +``` + +We have written recommended training scripts for each model, please refer to the table in the "Model Overview" section above. For how to write model training scripts, please refer to [Model Training](../Pipeline_Usage/Model_Training.md); for more advanced training algorithms, please refer to [Training Framework Detailed Explanation](https://github.com/modelscope/DiffSynth-Studio/tree/main/docs/en/Training/). + +Training Tips: + +* [Tongyi-MAI/Z-Image-Turbo](https://www.modelscope.cn/models/Tongyi-MAI/Z-Image-Turbo) is a distilled acceleration model. Therefore, direct training will quickly cause the model to lose its acceleration capability. The effect of inference with "acceleration configuration" (`num_inference_steps=8`, `cfg_scale=1`) becomes worse, while the effect of inference with "no acceleration configuration" (`num_inference_steps=30`, `cfg_scale=2`) becomes better. The following training and inference schemes can be adopted: + * Standard SFT Training ([code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/lora/Z-Image-Turbo.sh)) + No Acceleration Configuration Inference + * Differential LoRA Training ([code](https://github.com/modelscope/DiffSynth-Studio/tree/main/examples/z_image/model_training/special/differential_training/)) + Acceleration Configuration Inference + * An additional LoRA needs to be loaded in differential LoRA training, e.g., [ostris/zimage_turbo_training_adapter](https://www.modelscope.cn/models/ostris/zimage_turbo_training_adapter) + * Standard SFT Training ([code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/lora/Z-Image-Turbo.sh)) + Trajectory Imitation Distillation Training ([code](https://github.com/modelscope/DiffSynth-Studio/tree/main/examples/z_image/model_training/special/trajectory_imitation/)) + Acceleration Configuration Inference + * Standard SFT Training ([code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/lora/Z-Image-Turbo.sh)) + Load Distillation Acceleration LoRA During Inference ([model](https://www.modelscope.cn/models/DiffSynth-Studio/Z-Image-Turbo-DistillPatch)) + Acceleration Configuration Inference diff --git a/docs/en/Pipeline_Usage/Accelerated_Inference.md b/docs/en/Pipeline_Usage/Accelerated_Inference.md new file mode 100644 index 0000000000000000000000000000000000000000..57dd9f480bcfd76b3820f7526fd64f30231d6a43 --- /dev/null +++ b/docs/en/Pipeline_Usage/Accelerated_Inference.md @@ -0,0 +1,94 @@ +# Inference Acceleration + +The denoising process of diffusion models is typically time-consuming. To improve inference speed, various acceleration techniques can be applied, including lossless acceleration solutions such as multi-GPU parallel inference and computation graph compilation, as well as lossy acceleration solutions like Cache and quantization. + +Currently, most diffusion models are built on [Diffusion Transformer (DiT)](https://arxiv.org/abs/2212.09748), and efficient attention mechanisms are also a common acceleration method. DiffSynth-Studio currently supports certain lossless acceleration inference features. This section focuses on introducing acceleration methods from two dimensions: multi-GPU parallel inference and computation graph compilation. + +## Efficient Attention Mechanisms + +For details on the acceleration of attention mechanisms, please refer to [Attention Mechanism Implementation](../API_Reference/core/attention.md). + +## Multi-GPU Parallel Inference + +DiffSynth-Studio adopts a multi-GPU inference solution using Unified Sequence Parallel (USP). It splits the token sequence in the DiT across multiple GPUs for parallel processing. The underlying implementation is based on [xDiT](https://github.com/xdit-project/xDiT). Please note that unified sequence parallelism introduces additional communication overhead, so the actual speedup ratio is usually lower than the number of GPUs. + +Currently, DiffSynth-Studio supports unified sequence parallel acceleration for the [Wan](../Model_Details/Wan.md) and [MOVA](../Model_Details/Wan.md) models. + +First, install the `xDiT` dependency. + +```bash +pip install "xfuser[flash-attn]>=0.4.3" +``` + +Then, use `torchrun` to launch multi-GPU inference. + +```bash +torchrun --standalone --nproc_per_node=8 examples/wanvideo/acceleration/unified_sequence_parallel.py +``` + +When building the pipeline, simply configure `use_usp=True` to enable USP parallel inference. A code example is shown below. + +```python +import torch +from PIL import Image +from diffsynth.utils.data import save_video +from diffsynth.pipelines.wan_video import WanVideoPipeline, ModelConfig +import torch.distributed as dist + +pipe = WanVideoPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + use_usp=True, + model_configs=[ + ModelConfig(model_id="Wan-AI/Wan2.1-T2V-14B", origin_file_pattern="diffusion_pytorch_model*.safetensors"), + ModelConfig(model_id="Wan-AI/Wan2.1-T2V-14B", origin_file_pattern="models_t5_umt5-xxl-enc-bf16.pth"), + ModelConfig(model_id="Wan-AI/Wan2.1-T2V-14B", origin_file_pattern="Wan2.1_VAE.pth"), + ], + tokenizer_config=ModelConfig(model_id="Wan-AI/Wan2.1-T2V-1.3B", origin_file_pattern="google/umt5-xxl/"), +) + +# Text-to-video +video = pipe( + prompt="一名宇航员身穿太空服,面朝镜头骑着一匹机械马在火星表面驰骋。红色的荒凉地表延伸至远方,点缀着巨大的陨石坑和奇特的岩石结构。机械马的步伐稳健,扬起微弱的尘埃,展现出未来科技与原始探索的完美结合。宇航员手持操控装置,目光坚定,仿佛正在开辟人类的新疆域。背景是深邃的宇宙和蔚蓝的地球,画面既科幻又充满希望,让人不禁畅想未来的星际生活。", + negative_prompt="色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走", + seed=0, tiled=True, +) +if dist.get_rank() == 0: + save_video(video, "video1.mp4", fps=15, quality=5) +``` + +## Computation Graph Compilation + +PyTorch 2.0 provides an automatic computation graph compilation interface, [torch.compile](https://docs.pytorch.org/tutorials/intermediate/torch_compile_tutorial.html), which can just-in-time (JIT) compile PyTorch code into optimized kernels, thereby improving execution speed. Since the inference time of diffusion models is concentrated in the multi-step denoising phase of the DiT, and the DiT is primarily stacked with basic blocks, DiffSynth's compile feature uses a [regional compilation](https://docs.pytorch.org/tutorials/recipes/regional_compilation.html) strategy targeting only the basic Transformer blocks to reduce compilation time. + +### Compile Usage Example + +Compared to standard inference, you simply need to execute `pipe.compile_pipeline()` before calling the pipeline to enable compilation acceleration. For the specific function definition, please refer to the [source code](https://github.com/modelscope/DiffSynth-Studio/blob/166e6d2d38764209f66a74dd0fe468226536ad0f/diffsynth/diffusion/base_pipeline.py#L342). + +The input parameters for `compile_pipeline` consist mainly of two types. + +The first type is the compiled model parameters, `compile_models`. Taking the Qwen-Image Pipeline as an example, if you only want to compile the DiT model, you can keep this parameter empty. If you need to additionally compile models like the VAE, you can pass `compile_models=["vae", "dit"]`. Aside from DiT, all other models use a full-graph compilation strategy, meaning the model's forward function is completely compiled into a computation graph. + +The second type is the compilation strategy parameters. This covers `mode`, `dynamic`, `fullgraph`, and other custom options. These parameters are directly passed to the `torch.compile` interface. If you are not deeply familiar with the specific mechanics of these parameters, it is recommended to keep the default settings. + + * `mode` specifies the compilation mode, including `"default"`, `"reduce-overhead"`, `"max-autotune"`, and `"max-autotune-no-cudagraphs"`. Because cudagraph has stricter requirements on computation graphs (for example, it might need to be used in conjunction with `torch.compiler.cudagraph_mark_step_begin()`), the `"reduce-overhead"` and `"max-autotune"` modes might fail to compile. + * `dynamic` determines whether to enable dynamic shapes. For most generative models, modifying the prompt, enabling CFG, or adjusting the resolution will change the shape of the input tensors to the computation graph. Setting `dynamic=True` will increase the compilation time of the first run, but it supports dynamic shapes, meaning no recompilation is needed when shapes change. When set to `dynamic=False`, the first compilation is faster, but any operation that alters the input shape will trigger a recompilation. For most scenarios, setting it to `dynamic=True` is recommended. + * `fullgraph`, when set to `True`, makes the underlying system attempt to compile the target model into a single computation graph, throwing an error if it fails. When set to `False`, the underlying system will set breakpoints where connections cannot be made, compiling the model into multiple independent computation graphs. Developers can set it to `True` to optimize compilation performance, but regular users are advised to only use `False`. + * For other parameter configurations, please consult the [PyTorch API documentation](https://docs.pytorch.org/docs/stable/generated/torch.compile.html). + +### Compile Feature Developer Documentation + +If you need to provide compile support for a newly integrated pipeline, you should configure the `compilable_models` attribute in the pipeline to specify the default models to compile. For the DiT model class of that pipeline, you also need to configure `_repeated_blocks` to specify the types of basic blocks that will participate in regional compilation. + +Taking Qwen-Image as an example, its pipeline configuration is as follows: + +```python +self.compilable_models = ["dit"] +``` + +Its DiT configuration is as follows: + +```python +class QwenImageDiT(torch.nn.Module): + _repeated_blocks = ["QwenImageTransformerBlock"] +``` diff --git a/docs/en/Pipeline_Usage/Environment_Variables.md b/docs/en/Pipeline_Usage/Environment_Variables.md new file mode 100644 index 0000000000000000000000000000000000000000..281018b14dec994181c92426270348acbe5ff24e --- /dev/null +++ b/docs/en/Pipeline_Usage/Environment_Variables.md @@ -0,0 +1,39 @@ +# Environment Variables + +`DiffSynth-Studio` can control some settings through environment variables. + +In `Python` code, you can set environment variables using `os.environ`. Please note that environment variables must be set before `import diffsynth`. + +```python +import os +os.environ["DIFFSYNTH_MODEL_BASE_PATH"] = "./path_to_my_models" +import diffsynth +``` + +On Linux operating systems, you can also temporarily set environment variables from the command line: + +```shell +DIFFSYNTH_MODEL_BASE_PATH="./path_to_my_models" python xxx.py +``` + +Below are the environment variables supported by `DiffSynth-Studio`. + +## `DIFFSYNTH_SKIP_DOWNLOAD` + +Whether to skip model downloads. Can be set to `True`, `true`, `False`, `false`. If `skip_download` is not set in `ModelConfig`, this environment variable will determine whether to skip model downloads. + +## `DIFFSYNTH_MODEL_BASE_PATH` + +Model download root directory. Can be set to any local path. If `local_model_path` is not set in `ModelConfig`, model files will be downloaded to the path pointed to by this environment variable. If neither is set, model files will be downloaded to `./models`. + +## `DIFFSYNTH_ATTENTION_IMPLEMENTATION` + +Attention mechanism implementation method. Can be set to `flash_attention_3`, `flash_attention_2`, `sage_attention`, `xformers`, or `torch`. See [`./core/attention.md`](../API_Reference/core/attention.md) for details. + +## `DIFFSYNTH_DISK_MAP_BUFFER_SIZE` + +Buffer size in disk mapping. Default is 1B (1000000000). Larger values occupy more memory but result in faster speeds. + +## `DIFFSYNTH_DOWNLOAD_SOURCE` + +Remote model download source. Can be set to `modelscope` or `huggingface` to control the source of model downloads. Default value is `modelscope`. \ No newline at end of file diff --git a/docs/en/Pipeline_Usage/GPU_support.md b/docs/en/Pipeline_Usage/GPU_support.md new file mode 100644 index 0000000000000000000000000000000000000000..d4a8f1493e768c2148c3e37f54bc36ea3ea5afcf --- /dev/null +++ b/docs/en/Pipeline_Usage/GPU_support.md @@ -0,0 +1,98 @@ +# GPU/NPU Support + +`DiffSynth-Studio` supports various GPUs and NPUs. This document explains how to run model inference and training on these devices. + +Before you begin, please follow the [Installation Guide](../Pipeline_Usage/Setup.md) to install the required GPU/NPU dependencies. + +## NVIDIA GPU + +All sample code provided by this project supports NVIDIA GPUs by default, requiring no additional modifications. + +## AMD GPU + +AMD provides PyTorch packages based on ROCm, so most models can run without code changes. A small number of models may not be compatible due to their reliance on CUDA-specific instructions. + +### Apple Silicon + +On Apple Silicon devices, since VRAM and memory are unified, replace all `"cuda"` in the code with `"mps"` or `"cpu"`. + +## Ascend NPU +### Inference +When using Ascend NPU, you need to replace `"cuda"` with `"npu"` in your code. + +For example, here is the inference code for **Wan2.1-T2V-1.3B**, modified for Ascend NPU: + +```diff +import torch +from diffsynth.utils.data import save_video, VideoData +from diffsynth.pipelines.wan_video import WanVideoPipeline, ModelConfig +from diffsynth.core.device.npu_compatible_device import get_device_name + +vram_config = { + "offload_dtype": "disk", + "offload_device": "disk", + "onload_dtype": torch.bfloat16, + "onload_device": "cpu", + "preparing_dtype": torch.bfloat16, +- "preparing_device": "cuda", ++ "preparing_device": "npu", + "computation_dtype": torch.bfloat16, +- "computation_device": "cuda", ++ "computation_device": "npu", +} +pipe = WanVideoPipeline.from_pretrained( + torch_dtype=torch.bfloat16, +- device="cuda", ++ device="npu", + model_configs=[ + ModelConfig(model_id="Wan-AI/Wan2.1-T2V-1.3B", origin_file_pattern="diffusion_pytorch_model*.safetensors", **vram_config), + ModelConfig(model_id="Wan-AI/Wan2.1-T2V-1.3B", origin_file_pattern="models_t5_umt5-xxl-enc-bf16.pth", **vram_config), + ModelConfig(model_id="Wan-AI/Wan2.1-T2V-1.3B", origin_file_pattern="Wan2.1_VAE.pth", **vram_config), + ], + tokenizer_config=ModelConfig(model_id="Wan-AI/Wan2.1-T2V-1.3B", origin_file_pattern="google/umt5-xxl/"), +- vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 2, ++ vram_limit=torch.npu.mem_get_info(get_device_name())[1] / (1024 ** 3) - 2, +) + +video = pipe( + prompt="Documentary-style photography: a lively puppy running swiftly across lush green grass. The puppy has brownish-yellow fur, upright ears, and an alert, joyful expression. Sunlight bathes its body, making the fur appear exceptionally soft and shiny. The background is an open field with occasional wildflowers, and faint blue sky with scattered white clouds in the distance. Strong perspective captures the motion of the running puppy and the vitality of the surrounding grass. Mid-shot, side-moving viewpoint.", + negative_prompt="Overly vibrant colors, overexposed, static, blurry details, subtitles, artistic style, painting, still image, overall grayish tone, worst quality, low quality, JPEG artifacts, ugly, distorted, extra fingers, poorly drawn hands, poorly drawn faces, deformed, disfigured, fused fingers, motionless scene, cluttered background, three legs, many people in background, walking backward", + seed=0, tiled=True, +) +save_video(video, "video.mp4", fps=15, quality=5) +``` + +#### USP(Unified Sequence Parallel) +If you want to use this feature on NPU, please install additional third-party libraries as follows: +```shell +pip install git+https://github.com/feifeibear/long-context-attention.git +pip install git+https://github.com/xdit-project/xDiT.git +``` + + +### Training +NPU startup script samples have been added for each type of model,the scripts are stored in the `examples/xxx/special/npu_training`, for example `examples/wanvideo/model_training/special/npu_training/Wan2.2-T2V-A14B-NPU.sh`. + +In the NPU training scripts, NPU specific environment variables that can optimize performance have been added, and relevant parameters have been enabled for specific models. + +#### Environment variables +```shell +export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True +``` +`expandable_segments:`: Enable the memory pool expansion segment function, which is the virtual memory feature. + +```shell +export CPU_AFFINITY_CONF=1 +``` +Set 0 or not set: indicates not enabling the binding function + +1: Indicates enabling coarse-grained kernel binding + +2: Indicates enabling fine-grained kernel binding + +#### Parameters for specific models +| Model | Parameter | Note | +|----------------|---------------------------|-------------------| +| Wan 14B series | --initialize_model_on_cpu | The 14B model needs to be initialized on the CPU | +| Qwen-Image series | --initialize_model_on_cpu | The model needs to be initialized on the CPU | +| Z-Image series | --enable_npu_patch | Using NPU fusion operator to replace the corresponding operator in Z-image model to improve the performance of the model on NPU | \ No newline at end of file diff --git a/docs/en/Pipeline_Usage/Inference_WebUI.md b/docs/en/Pipeline_Usage/Inference_WebUI.md new file mode 100644 index 0000000000000000000000000000000000000000..c2c3be9384e841c7754d209ad37348d70bc4b628 --- /dev/null +++ b/docs/en/Pipeline_Usage/Inference_WebUI.md @@ -0,0 +1,54 @@ +# Inference WebUI + +DiffSynth-Studio provides an Inference WebUI to help developers quickly validate model performance. + +> The current Inference WebUI is not fully developed yet; we will optimize the interaction logic in the future. + +> The Inference WebUI is a debugging tool designed for developers, not a creation tool for end-users. For a richer feature set and more user-friendly interactive experience, we recommend using the [AIGC Zone](https://modelscope.cn/aigc/home) on ModelScope (for users in China) or the [Civision Zone](https://modelscope.ai/civision/home) (for users outside China). + +## Launching the Inference WebUI + +The Inference WebUI is built on [`Streamlit`](https://streamlit.io/). In addition to DiffSynth-Studio, you also need to install `Streamlit`: + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +pip install streamlit +``` + +Launch command: + +```shell +streamlit run examples/dev_tools/webui.py --server.fileWatcherType none +``` + +## How It Works + +As a standalone tool, the Inference WebUI dynamically generates corresponding UI controls by parsing the type annotations of parameters in the Pipeline's `from_pretrained` and `__call__` methods. Therefore, the interface interaction logic is fully consistent with the code invocation logic, serving as a visual entry point for DiffSynth-Studio code. + +Taking `ZImagePipeline.__call__` in `diffsynth.pipelines.z_image` as an example: + +```python +@torch.no_grad() +def __call__( + self, + # Prompt + prompt: str = "", + negative_prompt: str = "", + cfg_scale: float = 1.0, + # Image + input_image: Image.Image = None, + denoising_strength: float = 1.0, + ... +) +``` + +After parsing, the WebUI will automatically render the following interface: + +![](https://github.com/user-attachments/assets/55795022-7a9b-4383-b048-7feabdfcdddf) + +## Usage Tips + +- Supports automatic loading of model information such as `model_id` and `origin_file_pattern` from sample code in `./examples`, simplifying the configuration process; +- Parameters such as `vram_limit`, `tokenizer_config`, and `lora` cannot be retrieved through code parsing and need to be filled in manually. diff --git a/docs/en/Pipeline_Usage/Model_Inference.md b/docs/en/Pipeline_Usage/Model_Inference.md new file mode 100644 index 0000000000000000000000000000000000000000..dea4291b51a6487deb5d114a3833438b7d4ab29e --- /dev/null +++ b/docs/en/Pipeline_Usage/Model_Inference.md @@ -0,0 +1,168 @@ +# Model Inference + +This document uses the Qwen-Image model as an example to introduce how to use `DiffSynth-Studio` for model inference. + +## Loading Models + +Models are loaded through `from_pretrained`: + +```python +from diffsynth.pipelines.qwen_image import QwenImagePipeline, ModelConfig +import torch + +pipe = QwenImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="transformer/diffusion_pytorch_model*.safetensors"), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="text_encoder/model*.safetensors"), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + tokenizer_config=ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="tokenizer/"), +) +``` + +Where `torch_dtype` and `device` are computation precision and computation device (not model precision and device). `model_configs` can be configured in multiple ways for model paths. For how models are loaded internally in this project, please refer to [`diffsynth.core.loader`](../API_Reference/core/loader.md). + +
+ +Download and load models from remote sources + +> `DiffSynth-Studio` downloads and loads models from [ModelScope](https://www.modelscope.cn/) by default. You need to fill in `model_id` and `origin_file_pattern`, for example: +> +> ```python +> ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="transformer/diffusion_pytorch_model*.safetensors"), +> ``` +> +> Model files are downloaded to the `./models` path by default, which can be modified through [environment variable DIFFSYNTH_MODEL_BASE_PATH](../Pipeline_Usage/Environment_Variables.md#diffsynth_model_base_path). + +
+ +
+ +Load models from local file paths + +> Fill in `path`, for example: +> +> ```python +> ModelConfig(path="models/xxx.safetensors") +> ``` +> +> For models loaded from multiple files, use a list, for example: +> +> ```python +> ModelConfig(path=[ +> "models/Qwen/Qwen-Image/text_encoder/model-00001-of-00004.safetensors", +> "models/Qwen/Qwen-Image/text_encoder/model-00002-of-00004.safetensors", +> "models/Qwen/Qwen-Image/text_encoder/model-00003-of-00004.safetensors", +> "models/Qwen/Qwen-Image/text_encoder/model-00004-of-00004.safetensors", +> ]) +> ``` + +
+ +By default, even after models have been downloaded, the program will still query remotely for missing files. To completely disable remote requests, set [environment variable DIFFSYNTH_SKIP_DOWNLOAD](../Pipeline_Usage/Environment_Variables.md#diffsynth_skip_download) to `True`. + +```shell +import os +os.environ["DIFFSYNTH_SKIP_DOWNLOAD"] = "True" +import diffsynth +``` + +To download models from [HuggingFace](https://huggingface.co/), set [environment variable DIFFSYNTH_DOWNLOAD_SOURCE](../Pipeline_Usage/Environment_Variables.md#diffsynth_download_source) to `huggingface`. + +```shell +import os +os.environ["DIFFSYNTH_DOWNLOAD_SOURCE"] = "huggingface" +import diffsynth +``` + +## Starting Inference + +Input a prompt to start the inference process and generate an image. + +```python +from diffsynth.pipelines.qwen_image import QwenImagePipeline, ModelConfig +import torch + +pipe = QwenImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="transformer/diffusion_pytorch_model*.safetensors"), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="text_encoder/model*.safetensors"), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + tokenizer_config=ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="tokenizer/"), +) +prompt = "Exquisite portrait, underwater girl, blue dress flowing, hair floating, translucent light, bubbles surrounding, peaceful face, intricate details, dreamy and ethereal." +image = pipe(prompt, seed=0, num_inference_steps=40) +image.save("image.jpg") +``` + +Each model `Pipeline` has different input parameters. Please refer to the documentation for each model. + +If the model parameters are too large, causing insufficient VRAM, please enable [VRAM management](../Pipeline_Usage/VRAM_management.md). + +## Loading LoRA + +LoRA is a lightweight model training method that produces a small number of parameters to extend model capabilities. DiffSynth-Studio supports two ways to load LoRA: cold loading and hot loading. + +* Cold loading: When the base model does not have [VRAM management](../Pipeline_Usage/VRAM_management.md) enabled, LoRA will be fused into the base model weights. In this case, inference speed remains unchanged, but LoRA cannot be unloaded after loading. + +```python +from diffsynth.pipelines.qwen_image import QwenImagePipeline, ModelConfig +import torch + +pipe = QwenImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="transformer/diffusion_pytorch_model*.safetensors"), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="text_encoder/model*.safetensors"), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + tokenizer_config=ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="tokenizer/"), +) +lora = ModelConfig(model_id="DiffSynth-Studio/Qwen-Image-LoRA-ArtAug-v1", origin_file_pattern="model.safetensors") +pipe.load_lora(pipe.dit, lora, alpha=1) +prompt = "Exquisite portrait, underwater girl, blue dress flowing, hair floating, translucent light, bubbles surrounding, peaceful face, intricate details, dreamy and ethereal." +image = pipe(prompt, seed=0, num_inference_steps=40) +image.save("image.jpg") +``` + +* Hot loading: When the base model has [VRAM management](../Pipeline_Usage/VRAM_management.md) enabled, LoRA will not be fused into the base model weights. In this case, inference speed will be slower, but LoRA can be unloaded through `pipe.clear_lora()` after loading. + +If you do not want to enable VRAM management, you can enable LoRA hot loading separately via `pipe.enable_lora_hotloading(pipe.dit)`. + +```python +from diffsynth.pipelines.qwen_image import QwenImagePipeline, ModelConfig +import torch + +vram_config = { + "offload_dtype": torch.bfloat16, + "offload_device": "cuda", + "onload_dtype": torch.bfloat16, + "onload_device": "cuda", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} +pipe = QwenImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="transformer/diffusion_pytorch_model*.safetensors", **vram_config), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="text_encoder/model*.safetensors"), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + tokenizer_config=ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="tokenizer/"), +) +lora = ModelConfig(model_id="DiffSynth-Studio/Qwen-Image-LoRA-ArtAug-v1", origin_file_pattern="model.safetensors") +pipe.load_lora(pipe.dit, lora, alpha=1) +prompt = "Exquisite portrait, underwater girl, blue dress flowing, hair floating, translucent light, bubbles surrounding, peaceful face, intricate details, dreamy and ethereal." +image = pipe(prompt, seed=0, num_inference_steps=40) +image.save("image.jpg") +pipe.clear_lora() +``` diff --git a/docs/en/Pipeline_Usage/Model_Training.md b/docs/en/Pipeline_Usage/Model_Training.md new file mode 100644 index 0000000000000000000000000000000000000000..2d89fa9f6a564231e697252d394e0b7fc46c1a6a --- /dev/null +++ b/docs/en/Pipeline_Usage/Model_Training.md @@ -0,0 +1,272 @@ +# Model Training + +This document introduces how to use `DiffSynth-Studio` for model training. + +`DiffSynth-Studio` provides a training framework for Diffusion models. The training code for each model architecture is written as a standalone `train.py` in [`examples`](https://github.com/modelscope/DiffSynth-Studio/tree/main/examples), and we provide `.sh` scripts for model training for each model. Taking Z-Image as an example, the file structure is as follows: + +```shell +diffsynth/diffusion/ # Basic training framework +examples/z_image/ +├── model_inference +├── model_inference_low_vram +└── model_training + ├── train.py # Model training code for the Z-Image architecture + ├── full + │ └── Z-Image.sh # Launch full training + ├── validate_full + │ └── Z-Image.py # After full training, run this script to load the model and validate the results + ├── lora + │ └── Z-Image.sh # Launch LoRA training + └── validate_lora + └── Z-Image.py # After LoRA training, run this script to load the model and validate the results +``` + +## Script Parameters + +Training scripts typically include the following parameters: + +* Dataset base configuration + * `--dataset_base_path`: Root directory of the dataset. + * `--dataset_metadata_path`: Metadata file path of the dataset. + * `--dataset_repeat`: Number of times the dataset is repeated in each epoch. + * `--dataset_num_workers`: Number of processes for each Dataloader. + * `--data_file_keys`: Field names that need to be loaded from metadata, usually image or video file paths, separated by `,`. +* Model loading configuration + * `--model_paths`: Paths of models to be loaded. JSON format. + * `--model_id_with_origin_paths`: Model IDs with original paths, for example `"Qwen/Qwen-Image:transformer/diffusion_pytorch_model*.safetensors"`. Separated by commas. + * `--extra_inputs`: Extra input parameters required by the model Pipeline, for example, training image editing model Qwen-Image-Edit requires extra parameter `edit_image`, separated by `,`. + * `--fp8_models`: Models loaded in FP8 format, consistent with the format of `--model_paths` or `--model_id_with_origin_paths`. Currently only supports models whose parameters are not updated by gradients (no gradient backpropagation, or gradients only update their LoRA). + * `--quant_options`: Dynamically quantize loaded models. Semicolon-separated entries, each `:[/]`, where `` matches an entry in `--model_paths`/`--model_id_with_origin_paths`, `method` is a registered method (e.g. `bitsandbytes_nf4`), and `exclude_modules` optionally lists layers kept in full precision. + * `--resume_from_checkpoint`: Load model weights from a checkpoint file and resume training. Currently only supports single model loading without LoRA. +* Training base configuration + * `--learning_rate`: Learning rate. + * `--num_epochs`: Number of epochs. + * `--trainable_models`: Trainable models, for example `dit`, `vae`, `text_encoder`. + * `--find_unused_parameters`: Whether there are unused parameters in DDP training. Some models contain redundant parameters that do not participate in gradient calculation, and this setting needs to be enabled to avoid errors in multi-GPU training. + * `--weight_decay`: Weight decay size. See [torch.optim.AdamW](https://docs.pytorch.org/docs/stable/generated/torch.optim.AdamW.html) for details. + * `--task`: Training task, default is `sft`. Some models support more training modes. Please refer to the documentation for each specific model. +* Output configuration + * `--output_path`: Model save path. + * `--remove_prefix_in_ckpt`: Remove prefixes in the state dict of model files. + * `--save_steps`: Interval of training steps for saving models. If this parameter is left blank, the model will be saved once per epoch. +* LoRA configuration + * `--lora_base_model`: Which model LoRA is added to. + * `--lora_target_modules`: Which layers LoRA is added to. + * `--lora_rank`: Rank of LoRA. + * `--lora_checkpoint`: Path of LoRA checkpoint. If this path is provided, LoRA will be loaded from this checkpoint. + * `--preset_lora_path`: Preset LoRA checkpoint path. If this path is provided, this LoRA will be loaded in the form of being merged into the base model. This parameter is used for LoRA differential training. + * `--preset_lora_model`: Model that preset LoRA is merged into, for example `dit`. +* Gradient configuration + * `--use_gradient_checkpointing`: Whether to enable gradient checkpointing. + * `--use_gradient_checkpointing_offload`: Whether to offload gradient checkpointing to memory. + * `--gradient_accumulation_steps`: Number of gradient accumulation steps. +* CPU Offload training configuration + * `--cpu_offload`: Enable CPU offload training. Weights are kept on CPU and loaded to GPU one layer at a time. + * `--optimize_on_cpu`: When `--cpu_offload` is enabled, run optimizer on CPU. All params are offloaded to CPU. Default is False (trainable params stay on GPU, optimizer on GPU). + * `--param_size_threshold`: (Experimental) When `--cpu_offload` is enabled, modules with total params above this threshold (in MB) are recursively split into children. None means offload every leaf module directly. Default: None. +* Image dimension configuration (applicable to image generation models and video generation models) + * `--height`: Height of images or videos. Leave `height` and `width` blank to enable dynamic resolution. + * `--width`: Width of images or videos. Leave `height` and `width` blank to enable dynamic resolution. + * `--max_pixels`: Maximum pixel area of images or video frames. When dynamic resolution is enabled, images with resolution larger than this value will be scaled down, and images with resolution smaller than this value will remain unchanged. + +Some models' training scripts also contain additional parameters. See [the documentation for each model](../README.md#section-2-model-details), or run `python xxx/train.py -h` to view the supported script parameters. + +## Preparing Datasets + +`DiffSynth-Studio` adopts a universal dataset format. The dataset contains a series of data files (images, videos, etc.) and annotated metadata files. We recommend organizing dataset files as follows: + +``` +data/example_image_dataset/ +├── metadata.csv +├── image_1.jpg +└── image_2.jpg +``` + +Where `image_1.jpg`, `image_2.jpg` are training image data, and `metadata.csv` is the metadata list, for example: + +``` +image,prompt +image_1.jpg,"a dog" +image_2.jpg,"a cat" +``` + +We have built sample datasets for your testing. To understand how the universal dataset architecture is implemented, please refer to [`diffsynth.core.data`](../API_Reference/core/data.md). + +
+ +Sample Dataset + +> ```shell +> modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --local_dir ./data/diffsynth_example_dataset +> ``` + +
+ +## Loading Models + +Similar to [model loading during inference](../Pipeline_Usage/Model_Inference.md#loading-models), we support multiple ways to configure model paths, and the two methods can be mixed. + +
+ +Download and load models from remote sources + +> If we load models during inference through the following settings: +> +> ```python +> model_configs=[ +> ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="transformer/diffusion_pytorch_model*.safetensors"), +> ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="text_encoder/model*.safetensors"), +> ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), +> ] +> ``` +> +> Then during training, fill in the following parameters to load the corresponding models: +> +> ```shell +> --model_id_with_origin_paths "Qwen/Qwen-Image:transformer/diffusion_pytorch_model*.safetensors,Qwen/Qwen-Image:text_encoder/model*.safetensors,Qwen/Qwen-Image:vae/diffusion_pytorch_model.safetensors" +> ``` +> +> Model files are downloaded to the `./models` path by default, which can be modified through [environment variable DIFFSYNTH_MODEL_BASE_PATH](../Pipeline_Usage/Environment_Variables.md#diffsynth_model_base_path). +> +> By default, even after models have been downloaded, the program will still query remotely for missing files. To completely disable remote requests, set [environment variable DIFFSYNTH_SKIP_DOWNLOAD](../Pipeline_Usage/Environment_Variables.md#diffsynth_skip_download) to `True`. + +
+ +
+ + +Load models from local file paths + +> If loading models from local files during inference, for example: +> +> ```python +> model_configs=[ +> ModelConfig([ +> "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model-00001-of-00009.safetensors", +> "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model-00002-of-00009.safetensors", +> "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model-00003-of-00009.safetensors", +> "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model-00004-of-00009.safetensors", +> "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model-00005-of-00009.safetensors", +> "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model-00006-of-00009.safetensors", +> "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model-00007-of-00009.safetensors", +> "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model-00008-of-00009.safetensors", +> "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model-00009-of-00009.safetensors" +> ]), +> ModelConfig([ +> "models/Qwen/Qwen-Image/text_encoder/model-00001-of-00004.safetensors", +> "models/Qwen/Qwen-Image/text_encoder/model-00002-of-00004.safetensors", +> "models/Qwen/Qwen-Image/text_encoder/model-00003-of-00004.safetensors", +> "models/Qwen/Qwen-Image/text_encoder/model-00004-of-00004.safetensors" +> ]), +> ModelConfig("models/Qwen/Qwen-Image/vae/diffusion_pytorch_model.safetensors") +> ] +> ``` +> +> Then during training, set to: +> +> ```shell +> --model_paths '[ +> [ +> "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model-00001-of-00009.safetensors", +> "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model-00002-of-00009.safetensors", +> "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model-00003-of-00009.safetensors", +> "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model-00004-of-00009.safetensors", +> "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model-00005-of-00009.safetensors", +> "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model-00006-of-00009.safetensors", +> "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model-00007-of-00009.safetensors", +> "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model-00008-of-00009.safetensors", +> "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model-00009-of-00009.safetensors" +> ], +> [ +> "models/Qwen/Qwen-Image/text_encoder/model-00001-of-00004.safetensors", +> "models/Qwen/Qwen-Image/text_encoder/model-00002-of-00004.safetensors", +> "models/Qwen/Qwen-Image/text_encoder/model-00003-of-00004.safetensors", +> "models/Qwen/Qwen-Image/text_encoder/model-00004-of-00004.safetensors" +> ], +> "models/Qwen/Qwen-Image/vae/diffusion_pytorch_model.safetensors" +> ]' \ +> ``` +> +> Note that `--model_paths` is in JSON format, and extra `,` cannot appear in it, otherwise it cannot be parsed normally. + +
+ +## Setting Trainable Modules + +The training framework supports training of any model. Taking Qwen-Image as an example, to fully train the DiT model, set to: + +```shell +--trainable_models "dit" +``` + +To train LoRA of the DiT model, set to: + +```shell +--lora_base_model dit --lora_target_modules "to_q,to_k,to_v" --lora_rank 32 +``` + +We hope to leave enough room for technical exploration, so the framework supports training any number of modules simultaneously. For example, to train the text encoder, controlnet, and LoRA of the DiT simultaneously: + +```shell +--trainable_models "text_encoder,controlnet" --lora_base_model dit --lora_target_modules "to_q,to_k,to_v" --lora_rank 32 +``` + +Additionally, since the training script loads multiple modules (text encoder, dit, vae, etc.), prefixes need to be removed when saving model files. For example, when fully training the DiT part or training the LoRA model of the DiT part, please set `--remove_prefix_in_ckpt pipe.dit.`. If multiple modules are trained simultaneously, developers need to write code to split the state dict in the model file after training is completed. + +## Starting the Training Program + +The training framework is built on [`accelerate`](https://huggingface.co/docs/accelerate/index). Training commands are written in the following format: + +```shell +accelerate launch xxx/train.py \ + --xxx yyy \ + --xxxx yyyy +``` + +We have written preset training scripts for each model. See the documentation for each model for details. + +By default, `accelerate` will train according to the configuration in `~/.cache/huggingface/accelerate/default_config.yaml`. Use `accelerate config` to configure interactively in the terminal, including multi-GPU training, [`DeepSpeed`](https://www.deepspeed.ai/), etc. + +We provide recommended `accelerate` configuration files for some models, which can be set through `--config_file`. For example, full training of the Qwen-Image model: + +```shell +accelerate launch --config_file examples/qwen_image/model_training/full/accelerate_config_zero2offload.yaml examples/qwen_image/model_training/train.py \ + --dataset_base_path data/example_image_dataset \ + --dataset_metadata_path data/example_image_dataset/metadata.csv \ + --max_pixels 1048576 \ + --dataset_repeat 50 \ + --model_id_with_origin_paths "Qwen/Qwen-Image:transformer/diffusion_pytorch_model*.safetensors,Qwen/Qwen-Image:text_encoder/model*.safetensors,Qwen/Qwen-Image:vae/diffusion_pytorch_model.safetensors" \ + --learning_rate 1e-5 \ + --num_epochs 2 \ + --remove_prefix_in_ckpt "pipe.dit." \ + --output_path "./models/train/Qwen-Image_full" \ + --trainable_models "dit" \ + --use_gradient_checkpointing \ + --find_unused_parameters +``` + +## Training Considerations + +* In addition to the `csv` format, dataset metadata also supports `json` and `jsonl` formats. For how to choose the best metadata format, please refer to [../API_Reference/core/data.md#metadata](../API_Reference/core/data.md#metadata) +* Training effectiveness is usually strongly correlated with training steps and weakly correlated with epoch count. Therefore, we recommend using the `--save_steps` parameter to save model files at training step intervals. +* When data volume * `dataset_repeat` exceeds $10^9$, we observed that the dataset speed becomes significantly slower, which seems to be a `PyTorch` bug. We are not sure if newer versions of `PyTorch` have fixed this issue. +* For learning rate `--learning_rate`, it is recommended to set to `1e-4` in LoRA training and `1e-5` in full training. +* The training framework does not support batch size > 1. The reasons are complex. See [Q&A: Why doesn't the training framework support batch size > 1?](../QA.md#why-doesnt-the-training-framework-support-batch-size--1) +* Some models contain redundant parameters. For example, the text encoding part of the last layer of Qwen-Image's DiT part. When training these models, `--find_unused_parameters` needs to be set to avoid errors in multi-GPU training. For compatibility with community models, we do not intend to remove these redundant parameters. +* The loss function value of Diffusion models has little relationship with actual effects. Therefore, we do not record loss function values during training. We recommend setting `--num_epochs` to a sufficiently large value, testing while training, and manually closing the training program after the effect converges. +* `--use_gradient_checkpointing` is usually enabled unless GPU VRAM is sufficient; `--use_gradient_checkpointing_offload` is enabled as needed. See [`diffsynth.core.gradient`](../API_Reference/core/gradient.md) for details. +* To load a previously trained model checkpoint and resume training, use `--lora_checkpoint` to load a LoRA checkpoint, or use `--resume_from_checkpoint` to load a base model checkpoint. Currently only supports single model loading. + +## Low VRAM Training + +The framework supports multiple methods to reduce VRAM usage during training: + +|Name|How to Enable|Technical Principle|Effect|When to Enable|Reference| +|-|-|-|-|-|-| +|Gradient Checkpointing|Enable via `--use_gradient_checkpointing`|Does not retain gradient-related parameters during forward pass; recomputes them during backward pass|Significantly reduces VRAM usage, increases computation time|Recommended in most cases|[Docs](../API_Reference/core/gradient.md)| +|Gradient Checkpointing Offload|Enable via `--use_gradient_checkpointing_offload`|On top of Gradient Checkpointing, moves checkpointed parameters from VRAM to RAM|Further reduces VRAM usage and increases computation time, also increases RAM usage|Only recommended for video generation model training|[Docs](../API_Reference/core/gradient.md)| +|DeepSpeed|Configure interactively via `accelerate config`|DeepSpeed supports sharding gradients, optimizer states, etc. across multiple GPUs|Reduces VRAM usage, increases communication cost between GPUs and machines, increases computation time|Only recommended for multi-GPU and multi-node cluster training|[Docs](../Training/DeepSpeed.md)| +|FP8 Training|Set which model components to switch to FP8 mode via `--fp8_models`|Stores model parameters in FP8 precision in VRAM, temporarily converts to higher precision during inference; only supports models that don't require gradient updates|Reduces VRAM usage, slightly increases computation time, introduces minor training error|Only recommended for non-training modules like `text_encoder` and `vae`; can also be enabled for `dit` during LoRA training|[Docs](../Training/FP8_Precision.md)| +|Custom Quantization Precision|Set the quantization configuration of each model component via `--quant_options`|An advanced version of FP8 training, storing model parameters in VRAM at arbitrary quantization precision|Reduces VRAM usage, slightly increases computation time, introduces minor training error|Only recommended for non-training modules like `text_encoder` and `vae`; can also be enabled for `dit` during LoRA training|[Docs](./Quantization.md)| +|Two-Stage Split Training|Complex setup, please refer to the [docs](../Training/Split_Training.md)|Splits training into two stages: first stage performs gradient-free computation and saves intermediate results to disk; second stage computes gradients and updates model parameters.|Reduces VRAM usage, increases computation speed, uses additional disk space|Some models' two-stage training has not been verified, use with caution|[Docs](../Training/Split_Training.md)| +|CPU Offload|Enable via `--enable_model_cpu_offload`|Keeps model in RAM during training, moves layers to VRAM one by one for forward and backward passes|Reduces VRAM usage, increases computation time, increases RAM usage|Only recommended for single GPU with extremely limited VRAM|[Docs](../Training/Offload_Training.md)| diff --git a/docs/en/Pipeline_Usage/Quantization.md b/docs/en/Pipeline_Usage/Quantization.md new file mode 100644 index 0000000000000000000000000000000000000000..89b2b3a48aab9cf88d942d7dba542e76b2dc947a --- /dev/null +++ b/docs/en/Pipeline_Usage/Quantization.md @@ -0,0 +1,426 @@ +# Model Quantization + +Quantization reduces VRAM usage by lowering the numerical precision of model weights, allowing large models to run on smaller GPUs. `DiffSynth-Studio` provides a unified quantization entry point `QuantizeConfig`, supporting multiple quantization backends such as bitsandbytes, torchao, and comfy-kitchen, as well as online quantization, loading pre-quantized weights, mixed quantization, and quantization + LoRA training. + +This document uses `Z-Image` as an example. If you want to use `diffsynth.core.quant` in your own codebase, refer to the [`diffsynth.core.quant` API documentation](../API_Reference/core/quant.md). + +> **Difference between quantization and FP8 in VRAM management** +> +> The FP8 in [VRAM management](./VRAM_management.md) controls the storage precision of weights in VRAM through parameters such as `offload_dtype` / `onload_dtype`. It applies to all parameters and requires no third-party libraries, but only supports simple FP8 conversion. +> +> The quantization in this document (`QuantizeConfig`) is a dedicated scheme for `nn.Linear` layers, supporting finer formats such as NF4, INT8, INT4, MXFP4, and NVFP4. It can save/load quantized weights and supports activation quantization and quantization + LoRA training. The two can be combined. + +## Installation + +Different quantization backends require the corresponding third-party libraries: + +| Backend | Install Command | Project Page | +| --- | --- | --- | +| bitsandbytes | `pip install bitsandbytes` | [bitsandbytes](https://github.com/bitsandbytes-foundation/bitsandbytes) | +| torchao | `pip install torchao>=0.16` | [torchao](https://github.com/pytorch/ao) | +| comfy-kitchen | `pip install comfy-kitchen` | [comfy-kitchen](https://github.com/Comfy-Org/comfy-kitchen) | + +Install all at once: `pip install "diffsynth[quant]"` + +## Quick Start + +Pass `quantize` to any `ModelConfig` to enable online quantization for that model. The following code loads Z-Image's DiT with NF4 quantization: + +```python +from diffsynth.pipelines.z_image import ZImagePipeline, ModelConfig +from diffsynth.core.quant import QuantizeConfig +import torch + +pipe = ZImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig( + model_id="Tongyi-MAI/Z-Image", origin_file_pattern="transformer/*.safetensors", + quantize=QuantizeConfig(method="bitsandbytes_nf4"), + ), + ModelConfig(model_id="Tongyi-MAI/Z-Image-Turbo", origin_file_pattern="text_encoder/*.safetensors"), + ModelConfig(model_id="Tongyi-MAI/Z-Image-Turbo", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + tokenizer_config=ModelConfig(model_id="Tongyi-MAI/Z-Image-Turbo", origin_file_pattern="tokenizer/"), +) +prompt = "A delicate portrait of an underwater girl, blue dress flowing, hair gently drifting, light and shadow clear, surrounded by bubbles, serene expression, exquisite details, dreamlike and beautiful." +image = pipe(prompt=prompt, seed=42, num_inference_steps=50, cfg_scale=4) +image.save("image_z_image_nf4.jpg") +``` + +## Supported Quantization Methods + +The following are all built-in quantization methods. `method` is the name passed to `QuantizeConfig`. The naming follows the `WA` convention: `w8a16` means only the weights are quantized (weight-only), while `w8a8` means both weights and activations are quantized. + +| method | Backend | Weight / Activation | Serializable | LoRA Training | +| --- | --- | --- | --- | --- | +| `bitsandbytes_nf4` | bitsandbytes | NF4 / none | ✅ | ✅ | +| `bitsandbytes_fp4` | bitsandbytes | FP4 / none | ✅ | ✅ | +| `torchao_int8_w8a16` | torchao | INT8 / none | ✅ | ✅ | +| `torchao_fp8_w8a16` | torchao | FP8 / none | ✅ | ✅ | +| `torchao_int4_w4a16` | torchao | INT4 / none | ✅ | ❌ | +| `torchao_nvfp4_w4a16` | torchao | NVFP4 / none | ✅ | ✅ | +| `torchao_int8_w8a8` | torchao | INT8 / INT8 dynamic | ✅ | ❌ | +| `torchao_fp8_w8a8` | torchao | FP8 / FP8 dynamic | ✅ | ❌ | +| `torchao_int4_w4a8` | torchao | INT4 / FP8 dynamic | ✅ | ❌ | +| `torchao_mxfp8_w8a8` | torchao | MXFP8 / MXFP8 | ✅ | ❌ | +| `torchao_mxfp4_w4a4` | torchao | MXFP4 / MXFP4 | ✅ | ❌ | +| `torchao_nvfp4_w4a4` | torchao | NVFP4 / NVFP4 | ✅ | ❌ | +| `comfy_kitchen_int8_w8a8` | comfy_kitchen | INT8 / INT8 dynamic | ✅ | ✅ | +| `comfy_kitchen_fp8_w8a8` | comfy_kitchen | FP8 E4M3 / FP8 | ✅ | ✅ | + +Some notes: + +- **Activation quantization** (`w8a8` / `w4a4`) quantizes activations in addition to compressing weights. On hardware that supports the corresponding low-precision matrix multiplication, this can deliver real speedups, while weight-only schemes typically only save VRAM. +- **LoRA training**: only methods marked ✅ in the "LoRA Training" column can be used for quantization + LoRA training. +- `comfy_kitchen_*` methods read and write ComfyUI's quantized weight format, interoperable with the ComfyUI ecosystem. comfy-kitchen requires CUDA 13.0 or later. +- Formats such as MXFP8 / MXFP4 / NVFP4 have compute hardware requirements; see the [torchao](https://github.com/pytorch/ao) documentation for compatibility details. + +You can query all available methods and their parameters in code: + +```python +from diffsynth.core.quant import describe_quant_method, QUANT_METHODS, backends + +backends.load_all_backends() +print(sorted(QUANT_METHODS)) # all registered method names + +describe_quant_method("bitsandbytes_nf4") +``` + +The output is as follows. `backend_config_kwargs (user-tunable)` lists the adjustable parameters of the method and their default values; these parameters determine the quantization behavior, and you can modify them as needed. For the torchao backend, some parameters are passed directly to torchao's own config (e.g. `Int8WeightOnlyConfig`): + +> Unless you know what these parameters mean, we recommend keeping the default values. + +``` +method: bitsandbytes_nf4 +backend: bitsandbytes +detail: 4bit, nf4, weight-only +backend config: diffsynth.core.quant.backends.bitsandbytes.BitsAndBytesNF4Config +backend_config_kwargs (user-tunable): + compress_statistics = True + blocksize = None + quant_storage = torch.uint8 +pinned by method (not overridable): + quant_type = 'nf4' +``` + +## QuantizeConfig in Detail + +`QuantizeConfig` describes "which method to use, which layers to quantize, and how to run after quantization": + +- **`method`**: the quantization method name, see the table above. Required. +- **`mode`**: how quantized layers run. + - `"dynamic"` (default): keeps the quantized Linears, dequantizing on demand at forward time, with low VRAM usage. + - `"dequant_once"`: after quantization, restores all quantized layers to plain fp `nn.Linear` once (keeping the quantization error). Suitable for scenarios that need standard `nn.Linear`; no longer saves VRAM. +- **`target_modules` / `exclude_modules`**: filter the `nn.Linear` layers to quantize by layer name, given as lists. A layer matches if its full dotted name equals an entry, or ends with `"." + entry` (e.g. `"img_mod.1"` matches `transformer_blocks.0.img_mod.1`). +- **`backend_config_kwargs`**: a dict of parameters passed to the backend config, determining the quantization behavior (for the torchao backend, some parameters are passed directly to torchao's own config). Use `describe_quant_method(method)` to query the available parameters. +- **`load_prequantized`**: set to `True` when the checkpoint already holds quantized weights, so they are loaded directly (see below). + +Example: exclude quantization-sensitive layers and adjust NF4 backend parameters: + +```python +from diffsynth.core.quant import QuantizeConfig + +quantize = QuantizeConfig( + method="bitsandbytes_nf4", + mode="dynamic", + exclude_modules=["time_embedder.proj_in", "time_embedder.proj_out", "proj_out"], + backend_config_kwargs={"compress_statistics": False}, +) +``` + +Activation quantization methods are used in exactly the same way, just with a different `method`: + +```python +quantize = QuantizeConfig(method="comfy_kitchen_int8_w8a8", backend_config_kwargs={"convrot_groupsize": 128}) +``` + +## Loading Pre-quantized Weights + +Besides online quantization, you can also load checkpoints that are already quantized, avoiding the quantization overhead on every load. + +For officially released quantized models (e.g. `ideogram-ai/ideogram-4-nf4`), the quantization info is already written in the config, so you can load them like ordinary models: + +```python +ModelConfig(model_id="ideogram-ai/ideogram-4-nf4", origin_file_pattern="transformer/diffusion_pytorch_model.safetensors") +``` + +For checkpoints you saved yourself (see the next section), pass `quantize` explicitly with `load_prequantized=True` when loading. The `method` and `exclude_modules` must match those used when saving: + +```python +from diffsynth.core.quant import QuantizeConfig + +ModelConfig( + path="models/z-image-nf4/transformer.safetensors", + quantize=QuantizeConfig(method="bitsandbytes_nf4", load_prequantized=True), +) +``` + +## Saving a Quantized Model + +To save the result of an online quantization for reuse, use `save_quantized_model`: + +```python +from diffsynth.core.loader import ModelConfig +from diffsynth.core.quant import QuantizeConfig +from diffsynth.utils.quant.serialization import save_quantized_model + +model_config = ModelConfig( + model_id="Tongyi-MAI/Z-Image", + origin_file_pattern="transformer/*.safetensors", + quantize=QuantizeConfig(method="bitsandbytes_nf4"), +) +save_quantized_model(model_config, "models/z-image-nf4/transformer.safetensors") +``` + +It downloads and loads the original fp weights, performs the quantization, and saves the quantized state dict as `.safetensors`. After saving, you can load it as described in the previous section. + +## Mixed Quantization + +Different layers have different sensitivity to quantization. `MixedQuantizeConfig` allows applying different methods to different layer sets. For example, use INT8 for precision-sensitive modulation layers and NF4 for the rest: + +```python +from diffsynth.core.quant import QuantizeConfig, MixedQuantizeConfig + +mod_layers = ["img_mod.1", "txt_mod.1", "norm_out.linear", "img_in", "txt_in", "proj_out"] +quantize = MixedQuantizeConfig(configs=[ + QuantizeConfig(method="bitsandbytes_nf4", exclude_modules=mod_layers), + QuantizeConfig(method="torchao_int8_w8a16", target_modules=mod_layers), +]) +``` + +The layer sets matched by the sub-configs must not overlap. All sub-configs must share the same `mode`. `MixedQuantizeConfig` exposes the same interface as `QuantizeConfig`, and can be passed directly to `ModelConfig(quantize=...)` or `save_quantized_model`. + +> When loading a pre-quantized mixed checkpoint, set `load_prequantized=True` on the `MixedQuantizeConfig` itself, not on the sub-configs. + +## Quantization + LoRA Training + +In most cases, a quantized model does not support training, but it does support LoRA training with the base model frozen, enabling training of large models with very little VRAM. + +Methods usable for quantization + LoRA training are listed in the last column of the [methods table](#supported-quantization-methods). There are two ways to do it. + +### Approach 1: Train with a pre-quantized base model + +The training script points `--model_id_with_origin_paths` at the pre-quantized model: + +```bash +accelerate launch examples/.../train.py \ + --model_id_with_origin_paths "DiffSynth-Studio/MiniMax-H3-NF4:minimax-h3-fl2va-nf4.safetensors,..." \ + --lora_base_model "dit" \ + --lora_target_modules "attn.qkv_proj,attn.out_proj,mlp.fc1,mlp.fc2" \ + --lora_rank 32 \ + --output_path "./models/train/xxx-nf4" +``` + +### Approach 2: Online quantization with `--quant_options` + +If no pre-quantized weights are available, use `--quant_options` to quantize the loaded models online at training startup. The value is a semicolon-separated list of entries, each formatted as `:[/]`: + +- ``: the model to quantize; must match the entry in `--model_paths` / `--model_id_with_origin_paths` exactly. +- ``: the quantization method name, see the [methods table](#supported-quantization-methods). +- ``: optional, a comma-separated list of layer names kept in full precision. + +Here is quantized LoRA training for Z-Image-Turbo (full script at `examples/z_image/model_training/special/quant_training/Z-Image-Turbo-bitsandbytes_nf4.sh`): + +```bash +accelerate launch examples/z_image/model_training/train.py \ + --model_id_with_origin_paths "Tongyi-MAI/Z-Image-Turbo:transformer/*.safetensors,Tongyi-MAI/Z-Image-Turbo:text_encoder/*.safetensors,Tongyi-MAI/Z-Image-Turbo:vae/diffusion_pytorch_model.safetensors" \ + --quant_options "Tongyi-MAI/Z-Image-Turbo:transformer/*.safetensors:bitsandbytes_nf4;Tongyi-MAI/Z-Image-Turbo:text_encoder/*.safetensors:bitsandbytes_nf4" \ + --lora_base_model "dit" \ + --lora_target_modules "to_q,to_k,to_v,to_out.0,w1,w2,w3" \ + --lora_rank 32 \ + --use_gradient_checkpointing \ + --output_path "./models/train/Z-Image-Turbo_quant_lora" +``` + +Above, NF4 quantization is enabled for both the DiT and the text encoder. Modules that do not participate in training, such as `text_encoder` and `vae`, can be quantized freely; the trained `dit` can only be quantized under LoRA training, and the method must support LoRA training — specifying a non-differentiable method makes training fail immediately with an error. + +When training from local weights, use `--model_paths` (JSON) instead, and make `` correspond to its entries. A model made of several files is a JSON list in `--model_paths`, and that list must be written out **as a whole** in `--quant_options`: + +```bash +accelerate launch examples/z_image/model_training/train.py \ + --model_paths '[["models/Tongyi-MAI/Z-Image-Turbo/transformer/diffusion_pytorch_model-00001-of-00003.safetensors", "models/Tongyi-MAI/Z-Image-Turbo/transformer/diffusion_pytorch_model-00002-of-00003.safetensors", "models/Tongyi-MAI/Z-Image-Turbo/transformer/diffusion_pytorch_model-00003-of-00003.safetensors"], ["models/Tongyi-MAI/Z-Image-Turbo/text_encoder/model-00001-of-00003.safetensors", "models/Tongyi-MAI/Z-Image-Turbo/text_encoder/model-00002-of-00003.safetensors", "models/Tongyi-MAI/Z-Image-Turbo/text_encoder/model-00003-of-00003.safetensors"], "models/Tongyi-MAI/Z-Image-Turbo/vae/diffusion_pytorch_model.safetensors"]' \ + --tokenizer_path "models/Tongyi-MAI/Z-Image-Turbo/tokenizer/" \ + --quant_options '["models/Tongyi-MAI/Z-Image-Turbo/transformer/diffusion_pytorch_model-00001-of-00003.safetensors", "models/Tongyi-MAI/Z-Image-Turbo/transformer/diffusion_pytorch_model-00002-of-00003.safetensors", "models/Tongyi-MAI/Z-Image-Turbo/transformer/diffusion_pytorch_model-00003-of-00003.safetensors"]:bitsandbytes_nf4;["models/Tongyi-MAI/Z-Image-Turbo/text_encoder/model-00001-of-00003.safetensors", "models/Tongyi-MAI/Z-Image-Turbo/text_encoder/model-00002-of-00003.safetensors", "models/Tongyi-MAI/Z-Image-Turbo/text_encoder/model-00003-of-00003.safetensors"]:bitsandbytes_nf4' \ + --lora_base_model "dit" \ + --lora_target_modules "to_q,to_k,to_v,to_out.0,w1,w2,w3" \ + --lora_rank 32 \ + --use_gradient_checkpointing \ + --output_path "./models/train/Z-Image-Turbo_quant_lora" +``` + +Naming only one file of the list, or changing the file order, will not match. If `No quant option matches ...` is printed at startup, that model matched no quant option and is loaded at its original precision; compare your model string against the parsed options printed alongside it. + +With `exclude_modules` to keep quantization-sensitive layers in full precision: + +```bash + --quant_options "MiniMaxAI/MiniMax-H3:FL2VA/transformer/model*.safetensors:bitsandbytes_nf4/time_embedder.proj_in,time_embedder.proj_out,video_patch_proj,audio_patch_proj" +``` + +> `--quant_options` always uses `mode="dynamic"` and does not expose advanced options such as `backend_config_kwargs` or mixed quantization. For those, use Approach 1: save quantized weights with `save_quantized_model` first, then train with the pre-quantized base model. + +### Shared notes + +- During training, the quantized base model stays frozen; only the LoRA branches are updated, so what gets saved is fp-precision LoRA weights. +- For inference, load as "quantized base model + LoRA": first load the quantized base model as described in [Loading Pre-quantized Weights](#loading-pre-quantized-weights), then `pipe.load_lora(pipe.dit, "epoch-x.safetensors")`. +- Prefer Approach 1 for large models: online quantization has to load the full fp weights first, which makes startup slow and peak memory high. + +## Custom Quantization Backends + +If the built-in methods don't meet your needs, you can implement your own quantization backend. See [Integrating a Quantization Backend](../Developer_Guide/Integrating_Quantization_Backend.md) for the full walkthrough with a runnable toy INT9 example, and the [`diffsynth.core.quant` API documentation](../API_Reference/core/quant.md#extension-interface-custom-backends) for the full interface signatures and contracts. + +## Combining Quantization with VRAM Management + +Quantization and [VRAM management](./VRAM_management.md) address different levels of the problem and can be enabled together: + +- Quantization reduces **the storage size of each layer**, e.g. NF4 is about 1/4 of bf16. +- VRAM management decides **which layers stay in VRAM right now**, loading the rest from RAM/disk on demand. + +Combining both can further reduce the VRAM required for inference: first compress weights to 4bit/8bit, then use `vram_limit` to split the compressed model between VRAM and RAM. + +```python +from diffsynth.pipelines.z_image import ZImagePipeline, ModelConfig +from diffsynth.core.quant import QuantizeConfig +import torch + +vram_config = { + "offload_dtype": torch.bfloat16, + "offload_device": "cpu", + "onload_dtype": torch.bfloat16, + "onload_device": "cpu", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} +pipe = ZImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig( + model_id="Tongyi-MAI/Z-Image", origin_file_pattern="transformer/*.safetensors", + quantize=QuantizeConfig(method="bitsandbytes_nf4"), **vram_config, + ), + ModelConfig(model_id="Tongyi-MAI/Z-Image-Turbo", origin_file_pattern="text_encoder/*.safetensors", **vram_config), + ModelConfig(model_id="Tongyi-MAI/Z-Image-Turbo", origin_file_pattern="vae/diffusion_pytorch_model.safetensors", **vram_config), + ], + tokenizer_config=ModelConfig(model_id="Tongyi-MAI/Z-Image-Turbo", origin_file_pattern="tokenizer/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) +``` + +Two notes: + +- Parameters such as `offload_dtype` / `onload_dtype` in `vram_config` apply to unquantized parameters; the storage precision of quantized layers is determined by the quantization method and is unaffected by these parameters. +- **Disk Offload is incompatible with online quantization.** Disk Offload reads parameters from disk layer by layer, requiring that the quantized parameters are already saved on disk, so you cannot run Disk Offload first and then quantize online. To combine quantization with Disk Offload, first save the quantized weights following the [Best Practices](#best-practices) workflow, then load the pre-quantized checkpoint. + +## Best Practices + +Taking MiniMax-H3 as an example, this section shows the complete workflow from saving quantized weights to loading for inference. + +### Step 1: Save the Quantized Weights + +The MiniMax-H3 FL2VA base model is about 66G (bf16), and online NF4 quantization would be very slow. We recommend quantizing and saving once, then loading repeatedly. `save_quantized_model` returns the hash of the saved file: + +```python +from diffsynth.core.loader import ModelConfig +from diffsynth.core.quant import QuantizeConfig +from diffsynth.utils.quant.serialization import save_quantized_model + +quantize = QuantizeConfig( + method="bitsandbytes_nf4", + mode="dynamic", + exclude_modules=[ + "time_embedder.proj_in", "time_embedder.proj_out", + "video_patch_proj", "audio_patch_proj", "condition_proj", + "final_layer.video_out", "final_layer.audio_out", + ], +) +model_config = ModelConfig( + model_id="MiniMaxAI/MiniMax-H3", + origin_file_pattern="FL2VA/transformer/model*.safetensors", + quantize=quantize, +) +model_hash = save_quantized_model(model_config, "models/MiniMax-H3-NF4/minimax-h3-fl2va-nf4.safetensors") +print(model_hash) +``` + +`exclude_modules` lists the layers sensitive to quantization (timestep embeddings, input/output projections), kept in bf16 to preserve quality. + +### Step 2: Register the Hash in the Model Config + +The framework identifies the model type and quantization config by file hash. The registration entry is as follows; `quant_config` must match the `QuantizeConfig` used when saving, plus `load_prequantized: True`: + +```python +config_entry = { + # Example: ModelConfig(model_id="...", origin_file_pattern="minimax-h3-fl2va-nf4.safetensors") + "model_hash": model_hash, + "model_name": "minimax_h3_dit", + "model_class": "diffsynth.models.minimax_h3_dit.MiniMaxH3DiT", + "quant_config": {"method": "bitsandbytes_nf4", "load_prequantized": True, "exclude_modules": ["time_embedder.proj_in", "time_embedder.proj_out", "video_patch_proj", "audio_patch_proj", "condition_proj", "final_layer.video_out", "final_layer.audio_out"]}, +} +``` + +There are two ways to register: + +**Option 1: register dynamically in Python code (recommended, plug-and-play).** No framework changes needed — add the entry to `MODEL_CONFIGS` before loading the model, effective for the current process: + +```python +from diffsynth.configs import MODEL_CONFIGS + +MODEL_CONFIGS.append(config_entry) +``` + +**Option 2: write it into the config file (permanent).** Add the entry above to the `MODEL_CONFIGS` list in `diffsynth/configs/model_configs.py`, so you no longer need to register it manually. If your quantized weights are publicly released, you are also welcome to submit the entry to us as a PR, so other users can load them directly. + +### Step 3: Load for Inference + +Once registered, loading your own quantized weights works just like loading an ordinary model, without passing `quantize`: + +```python +import torch +from diffsynth.pipelines.minimax_h3_audio_video import MiniMaxH3Pipeline, ModelConfig +from diffsynth.utils.data.audio_video import write_video_audio + +vram_config = { + "offload_dtype": torch.bfloat16, + "offload_device": "cpu", + "onload_dtype": torch.bfloat16, + "onload_device": "cpu", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} +pipe = MiniMaxH3Pipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(path="models/MiniMax-H3-NF4/minimax-h3-fl2va-nf4.safetensors", **vram_config), + ModelConfig(model_id="MiniMax/MiniMax-H3", origin_file_pattern="FL2VA/text_encoder/model*.safetensors", **vram_config), + ModelConfig(model_id="MiniMax/MiniMax-H3", origin_file_pattern="FL2VA/video_vae/source/model.safetensors", **vram_config), + ModelConfig(model_id="MiniMax/MiniMax-H3", origin_file_pattern="FL2VA/audio_vae/model.safetensors", **vram_config), + ], + processor_config=ModelConfig(model_id="MiniMax/MiniMax-H3", origin_file_pattern="FL2VA/processor/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 2, +) +prompt = "A girl is very happy, she is speaking in english: 'I enjoy working with Diffsynth-Studio, it's a perfect framework.'" +video, audio = pipe(prompt=prompt, height=480, width=832, num_frames=124, num_inference_steps=50, seed=0) +write_video_audio(video=video, audio=audio, output_path="t2va.mp4", fps=24, audio_sample_rate=32000) +``` + +We have uploaded the NF4 quantized weights of MiniMax-H3 to ModelScope ([DiffSynth-Studio/MiniMax-H3-NF4](https://modelscope.cn/models/DiffSynth-Studio/MiniMax-H3-NF4)), so you can use them directly without quantizing yourself. If you want to upload your own saved quantized weights to ModelScope, you can use the modelscope SDK: + +```python +from modelscope.hub.api import HubApi + +api = HubApi() +api.login("your_access_token") +api.create_model("your-username/MiniMax-H3-NF4", visibility=1) +api.upload_folder( + repo_id="your-username/MiniMax-H3-NF4", + folder_path="models/MiniMax-H3-NF4", + repo_type="model", +) +``` diff --git a/docs/en/Pipeline_Usage/Setup.md b/docs/en/Pipeline_Usage/Setup.md new file mode 100644 index 0000000000000000000000000000000000000000..23e2e53dafb188ca4bc4427e269be959a7a38664 --- /dev/null +++ b/docs/en/Pipeline_Usage/Setup.md @@ -0,0 +1,73 @@ +# Installing Dependencies + +Install from source (recommended): + +``` +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +Install from PyPI (there may be delays in version updates; for latest features, install from source): + +``` +pip install diffsynth +``` + +To keep the framework lightweight, the base installation only installs the necessary dependencies. We provide some additional installation options: + +* `[audio]`: Support for audio models, e.g., ACE-Step, MiniMax-Music3, etc. +* `[quant]`: For parameter quantization, enabling precisions such as NF4, INT8, NVFP4. +* `[training]`: For distributed large-scale pretraining. +* `[logger]`: To enable training loggers such as TensorBoard, SwanLab, etc. +* `[npu]`: For Ascend NPU devices with x86 architecture. +* `[npu_aarch64]`: For Ascend NPU devices with aarch64/ARM architecture. +* Dependencies of specific models + * `[infiniteyou]`: https://arxiv.org/abs/2503.16418 + * `[ses]`: https://arxiv.org/abs/2602.03208 + * `[nexusgen]`: https://arxiv.org/pdf/2504.21356 +* `[all]`: Includes all dependencies except the "dependencies of specific models" above. + +You can install multiple sets of dependencies with `pip install -e ".[audio,quant]"` or `pip install diffsynth[audio,quant]`. + +## GPU/NPU Support + +### NVIDIA GPU + +Install as described above. + +### AMD GPU + +You need to install the `torch` package with ROCm support. Taking ROCm 6.4 (as of the article update date: December 15, 2025) on Linux as an example, run the following command: + +```shell +pip install torch torchvision --index-url https://download.pytorch.org/whl/rocm6.4 +``` + +### Apple Silicon + +On Apple Silicon devices, no changes to the installation steps are needed. However, since VRAM and memory are unified, replace all `"cuda"` in the code with `"mps"` or `"cpu"`. + +### Ascend NPU + +1. Install [CANN](https://www.hiascend.com/document/detail/zh/canncommercial/83RC1/softwareinst/instg/instg_quick.html?Mode=PmIns&InstallType=local&OS=openEuler&Software=cannToolKit) through official documentation. + +2. Install from source + ```shell + git clone https://github.com/modelscope/DiffSynth-Studio.git + cd DiffSynth-Studio + # aarch64/ARM + pip install -e .[npu_aarch64] + # x86 + pip install -e .[npu] --extra-index-url "https://download.pytorch.org/whl/cpu" + ``` +When using Ascend NPU, please replace `"cuda"` with `"npu"` in your Python code. For details, see [NPU Support](../Pipeline_Usage/GPU_support.md#ascend-npu). + +## Other Installation Issues + +If you encounter issues during installation, they may be caused by upstream dependencies. Please refer to the documentation for these packages: + +* [torch](https://pytorch.org/get-started/locally/) +* [Ascend/pytorch](https://github.com/Ascend/pytorch) +* [sentencepiece](https://github.com/google/sentencepiece) +* [cmake](https://cmake.org) diff --git a/docs/en/Pipeline_Usage/VRAM_management.md b/docs/en/Pipeline_Usage/VRAM_management.md new file mode 100644 index 0000000000000000000000000000000000000000..641e0e30cae97747d95042681c4bb042a8b33fb2 --- /dev/null +++ b/docs/en/Pipeline_Usage/VRAM_management.md @@ -0,0 +1,214 @@ +# VRAM Management + +VRAM management is a distinctive feature of `DiffSynth-Studio` that enables GPUs with low VRAM to run inference with large parameter models. This document uses Qwen-Image as an example to introduce how to use the VRAM management solution. + +## Basic Inference + +The following code does not enable any VRAM management, occupying 56G VRAM as a reference. + +```python +from diffsynth.pipelines.qwen_image import QwenImagePipeline, ModelConfig +import torch + +pipe = QwenImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="transformer/diffusion_pytorch_model*.safetensors"), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="text_encoder/model*.safetensors"), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + tokenizer_config=ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="tokenizer/"), +) +prompt = "Exquisite portrait, underwater girl, blue dress flowing, hair floating, translucent light, bubbles surrounding, peaceful face, intricate details, dreamy and ethereal." +image = pipe(prompt, seed=0, num_inference_steps=40) +image.save("image.jpg") +``` + +## CPU Offload + +Since the model `Pipeline` consists of multiple components that are not called simultaneously, we can move some components to memory when they are not needed for computation, reducing VRAM usage. The following code implements this logic, occupying 40G VRAM. + +```python +from diffsynth.pipelines.qwen_image import QwenImagePipeline, ModelConfig +import torch + +vram_config = { + "offload_dtype": torch.bfloat16, + "offload_device": "cpu", + "onload_dtype": torch.bfloat16, + "onload_device": "cuda", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} +pipe = QwenImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="transformer/diffusion_pytorch_model*.safetensors", **vram_config), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="text_encoder/model*.safetensors", **vram_config), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="vae/diffusion_pytorch_model.safetensors", **vram_config), + ], + tokenizer_config=ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="tokenizer/"), +) +prompt = "Exquisite portrait, underwater girl, blue dress flowing, hair floating, translucent light, bubbles surrounding, peaceful face, intricate details, dreamy and ethereal." +image = pipe(prompt, seed=0, num_inference_steps=40) +image.save("image.jpg") +``` + +## FP8 Quantization + +Building upon CPU Offload, we further enable FP8 quantization to reduce VRAM requirements. The following code allows model parameters to be stored in VRAM with FP8 precision and temporarily converted to BF16 precision for computation during inference, occupying 21G VRAM. However, this quantization scheme has minor image quality degradation issues. + +```python +from diffsynth.pipelines.qwen_image import QwenImagePipeline, ModelConfig +import torch + +vram_config = { + "offload_dtype": torch.float8_e4m3fn, + "offload_device": "cpu", + "onload_dtype": torch.float8_e4m3fn, + "onload_device": "cuda", + "preparing_dtype": torch.float8_e4m3fn, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} +pipe = QwenImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="transformer/diffusion_pytorch_model*.safetensors", **vram_config), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="text_encoder/model*.safetensors", **vram_config), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="vae/diffusion_pytorch_model.safetensors", **vram_config), + ], + tokenizer_config=ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="tokenizer/"), +) +prompt = "Exquisite portrait, underwater girl, blue dress flowing, hair floating, translucent light, bubbles surrounding, peaceful face, intricate details, dreamy and ethereal." +image = pipe(prompt, seed=0, num_inference_steps=40) +image.save("image.jpg") +``` + +> Q: Why temporarily convert to BF16 precision during inference instead of computing with FP8 precision? +> +> A: Native FP8 computation is only supported on Hopper architecture GPUs (such as H20) and has significant computational errors. We currently do not enable FP8 precision computation. The current FP8 quantization only reduces VRAM usage but does not improve computation speed. + +## Dynamic VRAM Management + +In CPU Offload, we control model components. In fact, we support Layer-level Offload, splitting a model into multiple Layers, keeping some resident in VRAM and storing others in memory for on-demand transfer to VRAM for computation. This feature requires model developers to provide detailed VRAM management solutions for each model. Related configurations are in `diffsynth/configs/vram_management_module_maps.py`. + +By adding the `vram_limit` parameter to the `Pipeline`, the framework can automatically sense the remaining VRAM of the device and decide how to split the model between VRAM and memory. The smaller the `vram_limit`, the less VRAM occupied, but slower the speed. +* When `vram_limit=None`, the default state, the framework assumes unlimited VRAM and dynamic VRAM management is disabled +* When `vram_limit=10`, the framework will limit the model after VRAM usage exceeds 10G, moving the excess parts to memory storage +* When `vram_limit=0`, the framework will do its best to reduce VRAM usage, storing all model parameters in memory and transferring them to VRAM for computation only when necessary + +When VRAM is insufficient to run model inference, the framework will attempt to exceed the `vram_limit` restriction to keep the model inference running. Therefore, the VRAM management framework cannot always guarantee that VRAM usage will be less than `vram_limit`. We recommend setting it to slightly less than the actual available VRAM. For example, when GPU VRAM is 16G, set it to `vram_limit=15.5`. In `PyTorch`, you can use `torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3)` to get the GPU's VRAM. + +```python +from diffsynth.pipelines.qwen_image import QwenImagePipeline, ModelConfig +import torch + +vram_config = { + "offload_dtype": torch.float8_e4m3fn, + "offload_device": "cpu", + "onload_dtype": torch.float8_e4m3fn, + "onload_device": "cpu", + "preparing_dtype": torch.float8_e4m3fn, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} +pipe = QwenImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="transformer/diffusion_pytorch_model*.safetensors", **vram_config), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="text_encoder/model*.safetensors", **vram_config), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="vae/diffusion_pytorch_model.safetensors", **vram_config), + ], + tokenizer_config=ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="tokenizer/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) +prompt = "Exquisite portrait, underwater girl, blue dress flowing, hair floating, translucent light, bubbles surrounding, peaceful face, intricate details, dreamy and ethereal." +image = pipe(prompt, seed=0, num_inference_steps=40) +image.save("image.jpg") +``` + +## Disk Offload + +In more extreme cases, when memory is also insufficient to store the entire model, the Disk Offload feature allows lazy loading of model parameters, meaning each Layer of the model only reads the corresponding parameters from disk when the forward function is called. When enabling this feature, we recommend using high-speed SSD drives. + +Disk Offload is a very special VRAM management solution that only supports `.safetensors` format files, not `.bin`, `.pth`, `.ckpt`, or other binary files, and does not support [state dict converter](../Developer_Guide/Integrating_Your_Model.md#step-2-model-file-format-conversion) with Tensor reshape. + +```python +from diffsynth.pipelines.qwen_image import QwenImagePipeline, ModelConfig +import torch + +vram_config = { + "offload_dtype": "disk", + "offload_device": "disk", + "onload_dtype": "disk", + "onload_device": "disk", + "preparing_dtype": torch.float8_e4m3fn, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} +pipe = QwenImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="transformer/diffusion_pytorch_model*.safetensors", **vram_config), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="text_encoder/model*.safetensors", **vram_config), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="vae/diffusion_pytorch_model.safetensors", **vram_config), + ], + tokenizer_config=ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="tokenizer/"), + vram_limit=10, +) +prompt = "Exquisite portrait, underwater girl, blue dress flowing, hair floating, translucent light, bubbles surrounding, peaceful face, intricate details, dreamy and ethereal." +image = pipe(prompt, seed=0, num_inference_steps=40) +image.save("image.jpg") +``` + +## More Usage Methods + +Information in `vram_config` can be filled in manually, for example, Disk Offload without FP8 quantization: + +```python +vram_config = { + "offload_dtype": "disk", + "offload_device": "disk", + "onload_dtype": "disk", + "onload_device": "disk", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} +``` + +Specifically, the VRAM management module divides model Layers into the following four states: + +* Offload: This model will not be called in the short term. This state is controlled by switching `Pipeline` +* Onload: This model will be called at any time soon. This state is controlled by switching `Pipeline` +* Preparing: Intermediate state between Onload and Computation. A temporary storage state when VRAM allows. This state is controlled by the VRAM management mechanism and enters this state if and only if [vram_limit is set to unlimited] or [vram_limit is set and there is spare VRAM] +* Computation: The model is being computed. This state is controlled by the VRAM management mechanism and is temporarily entered only during `forward` + +If you are a model developer and want to control the VRAM management granularity of a specific model, please refer to [Enabling VRAM Management](../Developer_Guide/Enabling_VRAM_management.md). + +VRAM management can be combined with model quantization. Quantization introduces precision loss, but it allows more model parameters to reside in VRAM, thereby avoiding the speed loss caused by offloading to RAM and disk. Please refer to [Model Quantization](./Quantization.md). + +## Choosing the Best Inference Solution + +```mermaid +graph TD; + A[Is VRAM sufficient?] -->|Yes| B[Use Basic Inference] + A -->|No| C[Is precision loss acceptable?] + C -->|Yes| D[Use Model Quantization] + C -->|No| E[Is RAM sufficient?] + D --> E + E -->|Yes| F[Use Dynamic VRAM Management] + E -->|No| G[Use Disk Offload] +``` \ No newline at end of file diff --git a/docs/en/QA.md b/docs/en/QA.md new file mode 100644 index 0000000000000000000000000000000000000000..7d3ff89ab982eb868acd1c6ca9ecaaad0efd415b --- /dev/null +++ b/docs/en/QA.md @@ -0,0 +1,39 @@ +# Frequently Asked Questions + +## Why doesn't the training framework support batch size > 1? + +* **Larger batch sizes no longer achieve significant acceleration**: Due to acceleration technologies such as flash attention that have fully improved GPU utilization, larger batch sizes will only bring greater VRAM usage without significant acceleration. The experience with small models like Stable Diffusion 1.5 is no longer applicable to the latest large models. +* **Larger batch sizes can be achieved through other solutions**: Multi-GPU training and Gradient Accumulation can both mathematically equivalently achieve larger batch sizes. +* **Larger batch sizes contradict the framework's general design**: We hope to build a general training framework. Many models cannot accommodate larger batch sizes, such as text encodings of different lengths and images of different resolutions, which cannot be merged into larger batches. + +## Why aren't redundant parameters removed from certain models? + +In some models, redundant parameters exist. For example, in Qwen-Image's DiT model, the text portion of the last layer does not participate in any calculations. This is a minor bug left by the model developers. Setting it as trainable directly will also cause errors in multi-GPU training. + +To maintain compatibility with other models in the open-source community, we have decided to retain these parameters. These redundant parameters can avoid errors in multi-GPU training through the `--find_unused_parameters` parameter. + +## Why does FP8 quantization show no acceleration effect? + +Native FP8 computation relies on Hopper architecture GPUs and has significant precision errors. It is currently immature technology, so this project does not support native FP8 computation. + +FP8 computation in VRAM management refers to storing model parameters in memory or VRAM with FP8 precision and temporarily converting them to other precisions when needed for computation. Therefore, it can only reduce VRAM usage without acceleration effects. + +## Why doesn't the training framework support native FP8 precision training? + +Even with suitable hardware conditions, we currently have no plans to support native FP8 precision training. + +* The main challenge of native FP8 precision training is precision overflow caused by gradient explosion. To ensure training stability, the model structure needs to be redesigned accordingly. However, no model developers are willing to do so at present. +* Additionally, models trained with native FP8 precision can only be computed with BF16 precision during inference without Hopper architecture GPUs, theoretically resulting in generation quality inferior to FP8. + +Therefore, native FP8 precision training technology is extremely immature. We will observe the technological developments in the open-source community. + +## How to dynamically load LoRA models during inference? + +We support two loading methods for LoRA models. See [LoRA Loading](./Pipeline_Usage/Model_Inference.md#loading-lora) for details: + +* Cold Loading: When [VRAM Management](./Pipeline_Usage/VRAM_management.md) is not enabled for the base model, LoRA will be fused into the base model weights. In this case, inference speed remains unchanged, and LoRA cannot be unloaded after loading. +* Hot Loading: When [VRAM Management](./Pipeline_Usage/VRAM_management.md) is enabled for the base model, LoRA will not be fused into the base model weights. In this case, inference speed will slow down, and LoRA can be unloaded after loading via `pipe.clear_lora()`. + +## How to reduce VRAM usage during training? + +The framework supports multiple methods to reduce VRAM usage during training, including Gradient Checkpointing, DeepSpeed, FP8, Two-Stage Split Training, and CPU Offload. Please refer to [Low VRAM Training](./Pipeline_Usage/Model_Training.md#low-vram-training). diff --git a/docs/en/README.md b/docs/en/README.md new file mode 100644 index 0000000000000000000000000000000000000000..dbd41fcaab703209577df81ebaa1b7d8ad426e76 --- /dev/null +++ b/docs/en/README.md @@ -0,0 +1,124 @@ +# DiffSynth-Studio Documentation + +Welcome to the magical world of Diffusion models! `DiffSynth-Studio` is an open-source Diffusion model engine developed and maintained by the [ModelScope Community](https://www.modelscope.cn/). We aim to build a universal Diffusion model framework that fosters technological innovation through framework construction, aggregates the power of the open-source community, and explores the boundaries of generative model technology! + +
+ +Documentation Reading Guide + +```mermaid +graph LR; + use["I want to use models for inference and training"]-->sec1["Section 1: Getting Started"]; + use["I want to use models for inference and training"]-->sec2["Section 2: Model Details"]; + use["I want to use models for inference and training"]-->sec3["Section 3: Training Framework"]; + develop["I want to develop based on this framework"]-->sec3["Section 3: Training Framework"]; + develop["I want to develop based on this framework"]-->sec4["Section 4: Model Integration"]; + develop["I want to develop based on this framework"]-->sec5["Section 5: API Reference"]; + explore["I want to explore new technologies based on this project"]-->sec4["Section 4: Model Integration"]; + explore["I want to explore new technologies based on this project"]-->sec5["Section 5: API Reference"]; + explore["I want to explore new technologies based on this project"]-->sec6["Section 6: Diffusion Templates"]; + explore["I want to explore new technologies based on this project"]-->sec7["Section 7: Research Guide"]; + problem["I encountered a problem"]-->sec8["Section 8: Frequently Asked Questions"]; +``` + +
+ +## Section 1: Getting Started + +This section introduces the basic usage of `DiffSynth-Studio`, including how to enable VRAM management for inference on GPUs with extremely low VRAM, and how to train various base models, LoRAs, ControlNets, and other models. + +* [Installation Dependencies](./Pipeline_Usage/Setup.md) +* [Model Inference](./Pipeline_Usage/Model_Inference.md) +* [Accelerated Inference](./Pipeline_Usage/Accelerated_Inference.md) +* [VRAM Management](./Pipeline_Usage/VRAM_management.md) +* [Model Quantization](./Pipeline_Usage/Quantization.md) +* [Model Training](./Pipeline_Usage/Model_Training.md) +* [Environment Variables](./Pipeline_Usage/Environment_Variables.md) +* [GPU/NPU Support](./Pipeline_Usage/GPU_support.md) +* [Inference WebUI](./Pipeline_Usage/Inference_WebUI.md) + +## Section 2: Model Details + +This section introduces the Diffusion models supported by `DiffSynth-Studio`. Some model pipelines feature special functionalities such as controllable generation and parallel acceleration. + +* [FLUX.1](./Model_Details/FLUX.md) +* [Wan](./Model_Details/Wan.md) +* [Qwen-Image](./Model_Details/Qwen-Image.md) +* [Qwen-Video-Edit](./Model_Details/Qwen-Video-Edit.md) +* [FLUX.2](./Model_Details/FLUX2.md) +* [Z-Image](./Model_Details/Z-Image.md) +* [Anima](./Model_Details/Anima.md) +* [LTX-2](./Model_Details/LTX-2.md) +* [ERNIE-Image](./Model_Details/ERNIE-Image.md) +* [JoyAI-Image](./Model_Details/JoyAI-Image.md) +* [ACE-Step](./Model_Details/ACE-Step.md) +* [HiDream-O1-Image](./Model_Details/HiDream-O1-Image.md) +* [Stable Diffusion](./Model_Details/Stable-Diffusion.md) +* [Stable Diffusion XL](./Model_Details/Stable-Diffusion-XL.md) +* [Image Quality Metrics](./Model_Details/Image-Quality-Metrics.md) +* [Ideogram 4](./Model_Details/Ideogram-4.md) +* [Krea-2](./Model_Details/Krea-2.md) +* [Boogu-Image](./Model_Details/Boogu-Image.md) +* [LingBot-Video](./Model_Details/LingBot-Video.md) +* [MiniMax-H3](./Model_Details/MiniMax-H3.md) +* [MiniMax-Music3](./Model_Details/MiniMax-Music3.md) + +## Section 3: Training Framework + +This section introduces the design philosophy of the training framework in `DiffSynth-Studio`, helping developers understand the principles of Diffusion model training algorithms. + +* [Basic Principles of Diffusion Models](./Training/Understanding_Diffusion_models.md) +* [Standard Supervised Training](./Training/Supervised_Fine_Tuning.md) +* [Enabling FP8 Precision in Training](./Training/FP8_Precision.md) +* [End-to-End Distillation Accelerated Training](./Training/Direct_Distill.md) +* [Two-Stage Split Training](./Training/Split_Training.md) +* [Differential LoRA Training](./Training/Differential_LoRA.md) +* [Enabling DeepSpeed](./Training/DeepSpeed.md) +* [Offload Training](./Training/Offload_Training.md) + +## Section 4: Model Integration + +This section introduces how to integrate models into `DiffSynth-Studio` to utilize the framework's basic functions, helping developers provide support for new models in this project or perform inference and training of private models. + +* [Integrating Model Architecture](./Developer_Guide/Integrating_Your_Model.md) +* [Building a Pipeline](./Developer_Guide/Building_a_Pipeline.md) +* [Enabling Fine-Grained VRAM Management](./Developer_Guide/Enabling_VRAM_management.md) +* [Model Training Integration](./Developer_Guide/Training_Diffusion_Models.md) +* [Integrating a Quantization Backend](./Developer_Guide/Integrating_Quantization_Backend.md) + +> We have open-sourced [**DiffSynth-Studio Model Integration Skills**](https://www.modelscope.cn/collections/DiffSynth-Studio/DiffSynth-Studio-Model-Integration-Skills). This is a composable collection of Agent Skills that automates the entire workflow of integrating external diffusion models (image / video / audio) into DiffSynth-Studio. It distills and defines the model integration standards of DiffSynth-Studio, consolidating best practices such as codebase analysis, model code integration, Pipeline design, low-VRAM management, and training support into reusable standard procedures. Following these standards can significantly lower the integration barrier, reduce repetitive debugging, and greatly improve the efficiency of integrating new models. We recommend starting from the [`diffsynth-integrator`](https://www.modelscope.cn/skills/DiffSynth-Studio/diffsynth-integrator) [example](https://www.modelscope.cn/skills/DiffSynth-Studio/diffsynth-integrator/file/view/master/example.md?status=1) to get started quickly and accelerate model integration. + +## Section 5: API Reference + +This section introduces the independent core module `diffsynth.core` in `DiffSynth-Studio`, explaining how internal functions are designed and operate. Developers can use these functional modules in other codebase developments if needed. + +* [`diffsynth.core.attention`](./API_Reference/core/attention.md): Attention mechanism implementation +* [`diffsynth.core.data`](./API_Reference/core/data.md): Data processing operators and general datasets +* [`diffsynth.core.gradient`](./API_Reference/core/gradient.md): Gradient checkpointing +* [`diffsynth.core.loader`](./API_Reference/core/loader.md): Model download and loading +* [`diffsynth.core.quant`](./API_Reference/core/quant.md): Model quantization +* [`diffsynth.core.vram`](./API_Reference/core/vram.md): VRAM management + +## Section 6: Diffusion Templates + +This section introduces the controllable generation plugin framework for Diffusion models, explaining the framework's operation mechanism and how to use Template models for inference and training. + +* [Introducing Diffusion Templates](./Diffusion_Templates/Introducing_Diffusion_Templates.md) +* [Diffusion Templates Architecture Details](./Diffusion_Templates/Understanding_Diffusion_Templates.md) +* [Template Model Inference](./Diffusion_Templates/Template_Model_Inference.md) +* [Template Model Training](./Diffusion_Templates/Template_Model_Training.md) + +## Section 7: Research Guide + +This section introduces how to use `DiffSynth-Studio` to train new models, helping researchers explore new model technologies. + +* [Training models from scratch](./Research_Tutorial/train_from_scratch.md) +* [Inference improvement techniques](./Research_Tutorial/inference_time_scaling.md) +* [Designing controllable generation models](./Research_Tutorial/controllable_models.md) +* Creating new training paradigms 【coming soon】 + +## Section 8: Frequently Asked Questions + +This section summarizes common developer questions. If you encounter issues during usage or development, please refer to this section. If you still cannot resolve the problem, please submit an issue on GitHub. + +* [Frequently Asked Questions](./QA.md) diff --git a/docs/en/Research_Tutorial/controllable_models.ipynb b/docs/en/Research_Tutorial/controllable_models.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..67352465b3f5338c16c6903aea443a7bd5200693 --- /dev/null +++ b/docs/en/Research_Tutorial/controllable_models.ipynb @@ -0,0 +1,926 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "a205ddd9", + "metadata": {}, + "source": [ + "# ModelScope AIGC Series Course - Controllable Generation Technology\n", + "\n", + "This experiment uses **Diffusion-Templates** as the framework to systematically introduce various controllable generation techniques for image generation models, and demonstrate how to train a controllable generation module from scratch.\n", + "\n", + "Related Resources:\n", + "\n", + "* 开源代码:[DiffSynth-Studio](https://github.com/modelscope/DiffSynth-Studio)\n", + "* 技术报告:[arXiv](https://arxiv.org/abs/2604.24351)\n", + "* 项目主页:[GitHub](https://modelscope.github.io/diffusion-templates-web/)\n", + "* 文档参考:[English Version](https://diffsynth-studio-doc.readthedocs.io/en/latest/Diffusion_Templates/Introducing_Diffusion_Templates.html)、[中文版](https://diffsynth-studio-doc.readthedocs.io/zh-cn/latest/Diffusion_Templates/Introducing_Diffusion_Templates.html)\n", + "* 在线体验:[魔搭社区创空间](https://modelscope.cn/studios/DiffSynth-Studio/Diffusion-Templates)\n", + "* 模型集:[ModelScope](https://modelscope.cn/collections/DiffSynth-Studio/KleinBase4B-Templates)、[ModelScope 国际站](https://modelscope.ai/collections/DiffSynth-Studio/KleinBase4B-Templates)、[HuggingFace](https://huggingface.co/collections/DiffSynth-Studio/kleinbase4b-templates)\n", + "* 数据集:[ModelScope](https://modelscope.cn/collections/DiffSynth-Studio/ImagePulseV2)、[ModelScope 国际站](https://modelscope.cn/collections/DiffSynth-Studio/ImagePulseV2)、[HuggingFace](https://huggingface.co/collections/DiffSynth-Studio/imagepulsev2)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c556f6de", + "metadata": {}, + "outputs": [], + "source": [ + "!pip install diffsynth==2.0.15 transformers==5.8.1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "acbd35c0", + "metadata": {}, + "outputs": [], + "source": [ + "from diffsynth.diffusion.template import TemplatePipeline\n", + "from diffsynth.pipelines.flux2_image import Flux2ImagePipeline, ModelConfig\n", + "import torch\n", + "from modelscope import dataset_snapshot_download, snapshot_download\n", + "from PIL import Image\n", + "import numpy as np\n", + "\n", + "vram_config = {\n", + " \"offload_dtype\": \"disk\",\n", + " \"offload_device\": \"disk\",\n", + " \"onload_dtype\": torch.float8_e4m3fn,\n", + " \"onload_device\": \"cpu\",\n", + " \"preparing_dtype\": torch.float8_e4m3fn,\n", + " \"preparing_device\": \"cuda\",\n", + " \"computation_dtype\": torch.bfloat16,\n", + " \"computation_device\": \"cuda\",\n", + "}\n", + "\n", + "def show_images(images, resolution):\n", + " images = [i.resize((resolution, resolution)).convert(\"RGB\") for i in images]\n", + " images = [np.array(i) for i in images]\n", + " images = np.concat(images, axis=1)\n", + " images = Image.fromarray(images)\n", + " return images" + ] + }, + { + "cell_type": "markdown", + "id": "d58a54f2", + "metadata": {}, + "source": [ + "First, load the base model [black-forest-labs/FLUX.2-klein-base-4B](https://modelscope.cn/models/black-forest-labs/FLUX.2-klein-base-4B). This is a 4B-parameter image generation model, and all controllable generation modules in this experiment will be mounted on top of this base model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9bb3f260", + "metadata": {}, + "outputs": [], + "source": [ + "pipe = Flux2ImagePipeline.from_pretrained(\n", + " torch_dtype=torch.bfloat16,\n", + " device=\"cuda\",\n", + " model_configs=[\n", + " ModelConfig(model_id=\"black-forest-labs/FLUX.2-klein-base-4B\", origin_file_pattern=\"transformer/*.safetensors\", **vram_config),\n", + " ModelConfig(model_id=\"black-forest-labs/FLUX.2-klein-4B\", origin_file_pattern=\"text_encoder/*.safetensors\", **vram_config),\n", + " ModelConfig(model_id=\"black-forest-labs/FLUX.2-klein-4B\", origin_file_pattern=\"vae/diffusion_pytorch_model.safetensors\"),\n", + " ],\n", + " tokenizer_config=ModelConfig(model_id=\"black-forest-labs/FLUX.2-klein-4B\", origin_file_pattern=\"tokenizer/\"),\n", + " vram_limit=torch.cuda.mem_get_info(\"cuda\")[1] / (1024 ** 3) - 0.5,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "2b0ed288", + "metadata": {}, + "source": [ + "## Image Structure Control\n", + "\n", + "[ControlNet](https://arxiv.org/abs/2302.05543) 是最早的一批 Diffusion 可控生成技术,可用**深度图、边缘图、姿态图**等结构性条件对生成画面进行**逐像素级**的控制。\n", + "\n", + "以 Template 格式加载 [DiffSynth-Studio/Template-KleinBase4B-ControlNet](https://modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-ControlNet),即可在保留输入结构的前提下,用不同的提示词生成不同风格的画面。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "96c1225f", + "metadata": {}, + "outputs": [], + "source": [ + "template = TemplatePipeline.from_pretrained(\n", + " torch_dtype=torch.bfloat16,\n", + " device=\"cuda\",\n", + " model_configs=[ModelConfig(model_id=\"DiffSynth-Studio/Template-KleinBase4B-ControlNet\")],\n", + " lazy_loading=True,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b906f029", + "metadata": {}, + "outputs": [], + "source": [ + "dataset_snapshot_download(\n", + " \"DiffSynth-Studio/examples_in_diffsynth\",\n", + " allow_file_pattern=[\"templates/*\"],\n", + " local_dir=\"data/examples\",\n", + ")\n", + "image = template(\n", + " pipe,\n", + " prompt=\"A cat is sitting on a stone, bathed in bright sunshine.\",\n", + " seed=0, cfg_scale=4, num_inference_steps=50,\n", + " template_inputs = [{\n", + " \"image\": Image.open(\"data/examples/templates/image_depth.jpg\"),\n", + " \"prompt\": \"A cat is sitting on a stone, bathed in bright sunshine.\",\n", + " }],\n", + " negative_template_inputs = [{\n", + " \"image\": Image.open(\"data/examples/templates/image_depth.jpg\"),\n", + " \"prompt\": \"\",\n", + " }],\n", + ")\n", + "image.save(\"image_ControlNet_sunshine.jpg\")\n", + "image = template(\n", + " pipe,\n", + " prompt=\"A cat is sitting on a stone, surrounded by colorful magical particles.\",\n", + " seed=0, cfg_scale=4, num_inference_steps=50,\n", + " template_inputs = [{\n", + " \"image\": Image.open(\"data/examples/templates/image_depth.jpg\"),\n", + " \"prompt\": \"A cat is sitting on a stone, surrounded by colorful magical particles.\",\n", + " }],\n", + " negative_template_inputs = [{\n", + " \"image\": Image.open(\"data/examples/templates/image_depth.jpg\"),\n", + " \"prompt\": \"\",\n", + " }],\n", + ")\n", + "image.save(\"image_ControlNet_magic.jpg\")" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "af45ce68", + "metadata": {}, + "outputs": [ + { + "data": { + "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAEAAwADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDwijNHaigBacDTKUUAPzS02loAWkzS0lABmjNFFABSGjNBoAbSUppKAFpwplKDQBJmlzTM0ZoAkBpwNRg04GgCUGnA0wUtAD80uaZTxQAtOptLQA8UopopaAHilzTM0uaAH5pRTM04GgD6U/tZwm1cfWs+4nDKxY5JpjSxLDgMMVmTOxyecV4qTZpcc77jxWlp9xFEuHGDWNHKN/NTySqF4Iq6kOZcoJmtdCKRhKMAjpTbbVUiJVqwWu5CNu7iq5k561Kw6ceVjudQ7Q3kodsYHSrGyCJQVxXJpduvRjirg1AeXy3NZTw0lonoK/c3mMe4NUr3kZi2riuUbU5cbc8VJ9rIj4bHvWTwje4+YtTxIszPnk1VN0qzbWORWbLeyOTlqrtJ3B5rsVL3bMg07xIpV3ACqqakka+WR04zVCS5kxjccVUd+9CoaWYGnKscjGQNg/WmuZJI9pkOKyDMw70C8ccbqapW3EzVjsIHg+clmPfPSsY2u64ZFYEAnmnNcuqkB2APXmq32tonyvWqZJYmg+zoMnIPet7w4ttGsrybd7DILVzoklvnVcfQVb+xTxRnIbZ7VDlroCG+I5rf7aRblenz7ema5+Ngkh96sX8ZjfOetZ5cqc10RV0SyS6Uy42jpWe8JU4IwauC5weRxUM9wrsMDgVcb3sIqlChDdwc1rJq5a18sLhsYzWU8gIqTT4xcXSxk4BoqwhJXn0BNmlaWtxOhlVGKZ6+tT/ZxcqY1A3e9dPbQpaaciDnaMACsSCC4XUZJDEQrtwPSuZ1IVNU9EPlsZ8FnJby+U460s9nJDIJADiuons0KpJxlear3U0b2+0L81YVK7jblVw5TAicGTkAmobycJIu3gVpJYp5LSNw1ZYg3TksCVBrSNZNNPoQ0TvKdvFZ0pyTmpmm+Xiqjtk17ohQAalTAIqJakGR0zVWYGxYSJGQxxWo9/EE7Vy6swHBp24nqTU+zGpWJb6cTSHb0qqF9ql2g08ruYscZPPAxVqNiWRDrUg6UeXUipxTsIRVGacY+OlOAFPq0Fim8dR5xgY6VcdKhaPAzwc/pUspAnNS44qAAg1Og3cU0r6CYmdqOoVSGxyRyPp6VDirU0Dx43qRkZGaqtwaJxcHZgpJrQRsU+KGSXfsXdsUu2OwHemdT6D3owRUXKQx+lVnqw+ahK0CIinXkECk24qXAA6c+tNfAPByMdaYyIripIyMVGzURnmgCVyCKjSFri4SKMDdIwVQTgZJ9T0qdkJiEhdTk7dueRgenpUZUk5PJpDtYa0LQTPE+NyMVbBBGR7jrThxRspp4pNiaJw4IpjcGmp1qRgMVnOowSOcopBThUGwtLSClxQAopRQKWgAooxRigBMUGlpMUAJRRikoAKSlNNoAKKKBQAtLSgUYoABTxTQKeBQA4GnCm4pwoAcKcKaKdQA6lpgNOzQA7NLmmZpc0AOzS5pm6jNAEmaXNR0uaAPaxOvmZzxU8kyGPgjNYvmEdaXzq8v2ZZbY80eYQOtVfNo8zNapAWC2aYTUaln+6M0wvjg9aYx5ekMmBURcUxmzQBI0nvUZmOMZqNs1EWpWDQkL00y0wtxUTGgRIzg1Gwz0qPdzUgkULyaBNlaQYNQO2KluJMniqbsaCSxEPMOCaSe2AIINVRMY2yDSPdu5wTWcoyb0EdFpGmXDx+aq/Jngk8muxiltRp4Dso2r82a43SvEBgtBC8ZZlGAQao31/dTFwXwrnJApWsNMqao8clzKUPyFjt9hWLItWrksvU1nySkVvDYkeIyRUbKBmhLj1pR/pM6RKQC5wCa0eiuydblKT7xA6UkTSRSB0JDCuvHw91SUxtE6Or9TjpVXUvCGp6VuaVAUUZzWEcXh56KSKlCS6Fa08RXUTKJRuQV2ug6tbXALFMEjrXmkjgVLZanJZyZQnHpmnOhG3uaEqTO71y82XLNHxHjgetcrLqkhnA2kgHpTLvV5LpQcEn3rNjnxKWfvURoK+oN3Nq51jNt5SKQ3vVCHVAuVkHPrVK5nErDZnjvUlnpd3fhmgj3Y96t0o21Fd30LGzrjOKb5XNTDpThivXViRqR1KI6QHFTI4B5GRXp4SFOb5ZEO5CUxTcVoXaWxVWtnYjaNwfAIPf6is8mljMMqT02Ks4uzFBwakBGKg707d6V547EuRShqiHOOakWgY8E1IhU53EjjjA700CnBKAFwDR5QPXNSxR7mArqY/DLLojajKQIxwB61lUqxp25nuS32OKaPBqRPl7c1ZnQbyAOKi21rGVtUC1FlkecfMSxUYz1wKqNHzVknAxUTHNE5ubuwSSWg6K1aS3llDIFjIyCwBOfQd6Y2Wxu5wMClz8ud3PpTdxAqbhG+tyCRKhK1ZbGDkc9qrucUFjCvFEUqQSM0kCTAoyhXJABIwDweo60bs0yTaxG0Ecc5OcmqSuNOzuQOjAgMCMjIz6Uig+lWFhJ5IODkZxUq2xxkiuqlhJT2IlJIhXKgHg5H5UufbNPYBelMD8+tOdBR0bFzNiMRk4zj3qJmGe9TzMj7Sq4OORjioNnXrntXLUgouydxxd0IWAY7c47Zo3mlCE0vl1g43KMEU8Co1NSCszUdilApRSigAxS4paKAExRinUlADTSEU6kxQA2kp2KQigBppKU0lACUooooA9s8FfDnRNU8DW8+pWrPdXoMvnK5DRjJC7e3QZ/GvP/ABl4JvfCF+qSHz7KUnyLgDG7/Zb0YV7x4HKv4H0Qr0+xxj9K0dd0Gz8RaNPpl6pMUo4YdUbsw9xQB8oAU4Cu3ufhJ4shv5IIbOKeIH5J1mVVYeuCcj6VFL8LvF0Of+JUZAP+ecyH+tAHH7aliheaVY4kZ3c4VVGST6AVuxeCPFE0/kroV6Gzgl49oH4nivXfA/w/g8NwLeXqpNqrjlhysI9F9/U0AcBZ/CjWZtMkurqeG1lEZdLdgWY8ZwSOB+tcFz3r6mvpFtrK4nc4WOJnJ9gCa+XGOST6nNADaKDRQAuaKBSigAApaBS0AFAopaAPY7+3BkynT2qqbSQJuqVL5XIGa0d8bQdR0rxueVNJFGD827HetCytWdgXXioGCLLu962LWdBBVVajUdBovW9hBs4ABrG1DTJPPZkGFFWotQ2THJxz0q5JfQyR4yMmuRTqU5X3K0ORkDRttbrTd3vWlfWqtukFYzNg4r0ac1NEssFgRVd+Kb5lMaTirJFL1Gz0xn96jZ6Bj2bmomf3pjye9Ql+aCSRjmomNODioZnwKYjtLHwfZ3fhuO7ff9okXcWDHjPIAHTpiuK1Cxl065McnI/hb1r1nw/cJJ4Zs8/daBR9CBj+lcf4nt4irmXhCeSP4fcVx0asnN32uelXw0VTi472RyEdxs6HBp5uznJOamtfDOr30wS2gSReP3glULj6k1al8G+IYUJbTywH9yRG/Hg128nNqjzGmtzDuLjeaqBJLiZIYY2kkc7VRRksfQCtOPQNWurkW8On3DSk7duwjmvQfDvh218MqyTMkmsuuJXGCtuO8an+96n8B7xKagjSnSlN2OLm8DanbabJdTvGsiqW8hTkj2J6Z9q5VJCrq/oQa9s1e+jg02WM44QsfYAZrw4Z20sPUnUvzm2JpRp25T1vwf4tuL2aOztreWaRRkgLwo+tO8bXeqXqtH5YgQcMT1rE+Gfi/TvDklxBeQsXnYFXVck+1dN4mu5dYgmu1KxRtyq+g9687EUKFCsqltWZ88pKzPJJrcxSGN+oqEx7TxUk6XAlZ5MkZ+9TVl8t1cjO05xXsra5ytamroujT6tOYVPlcdWFQatotzpl+LYjzmPQoOteneFk0vXNMEkZEUyjGQcEGtsRaNp0DPcujSJ/G3U14M82lCrJcu3Q6/YwcdH8zwaRGicpIhRh1BGK7TwTp17NmWBozGTyrVtxaPo/iu/uZ1UbF+VWHFb2j6FZaBZssE+CMkln6mta2OdaDpw92fmZxp2d+h5YU4qJhirBkUioXINfQ8zRlYiL4pDLg4zRKhViGBBHY1Aa3hUa2JaJzMeOc/0oYlWZSPmBxwciq45OKlQc1v7SU92NIfz0NPAqSFA52AKD1yx4pdntzT9m7XG0ujBRkdKmMezGSDkA8HNMC475+lSAZ6fhmmqZm2OUY4qXAB+Xp70sUW7H9KsG2cLntW0cLUaukZutFOzYyA7ZAav3GpzyReR5jeWP4c8Vn4Knmn4ya5Z0lf3kPd3GMpJOc5pjJxVoJnk9fWkdOKTVjRFmPw6k2nreFpfNI7NwO+MVizQNDIVb869G0vZLosKFcgoB9DgVyGv24tnaRvujrj09a8ihiZ+0lzbXaPUxGFiqcXHeyZiYGKa5Ock5JqzFbvP/AKpo2X13gCkksZhnhSfZwa9Ra6o8t6blB2qIq8sixopd2OFVRkkntV5NOvLmVY4raRmJwABXWaVolvpQeKSRG1MqRIwORD6op9fU/gO+cqlVQXma06bm/I5GbRLu3hLv5ZcDmMNnH49M+1UY03HpXY6lIsQ8gLz1J9hXNW0O51Hqa3yxTxFRxkXiIRp2saGl6ULpxvfYuCQSKinPkynADYPcZFdBaXsNratGsZLuAufRPT8eP1qncaJfTRPdpayJAxOCAcY9K+ynF0YckEcMpRj783a+xzkkauPlHJGcDtVRo8GtVrWTPPUcYqpIgV8EcDrXl4unJw5pKxaVtSqI6d5ddNoeg2uqQXUkt7Hb+TGXUSHl/asOUFC0Yb5c5x614ko21Ip4iE5uEd0QrGMUGPinjI4IxS9qyOg45TUgNQg1IprnNScGnCogaeDQBIKUU0U8UAFIaU0UANxSU6kNACU00uaSgBppKdRigBtAFOxSgd6APpv4bN53w+0ZvSEr+TEf0rrwlYPgfTP7K8GaRac7ltlds/3m+Y/qa6RV4oAi8v2o8urG2k2+1AFVo81CyYq8y1A60AcZ8QbhrPwPqkittZ4xGD/vMAf0Jr52Ne9/Fzcvgh9vRrmMH6c14IelADDSUpoxQAU6m0ooAdS03NANADqKAaUUAer6tapYygLx9KrQzsy/fOPrWrrcRljLpy7dqxl0u8ji3bT+FePSnHkXM9SmtRZpTn71WrbURFHtY1jTSPExWQEH3qHz+etbypxkhG55pnn3A8U6e5MCjms20mKnOaZeTln60vZ6hcuSaizpg5qg0mSTmq5kppkB71ailsMsF+KYZPeod9ML1QExeoWkxTDJUbNmgQ5pM1EXxTGPNMYE0CH+bTHYsKQIc1NtAXmmhXPQdLuWtfBekFIpJZ5w8cUaDqFYkk/QmsTXLe6nixfN9nR+oAyQK2Y9MntLDwvqDXAitLS2eR48nLtISQPxzWf4ks5orc6hIX8s/NvboPbiuKLip6dT05VJSpqL6I4qW6utDSVoLmSWdEEcWB8i4Odx7HAz17VCniS7GqTuWkMTqZFiL8dN2M9M4/Wpr6CW7vmso8B47X7RwOHVRuA/pWe8ccl9MbYBneMRxDsC7bV/JT+lelTdkcMr3Oy8O+JLW30hZI57iLVmiKvI+WCNn7yqf4iOPbORV2zuLm3tvNnk84n5iykk5NcnYIls+owOcmyOx5T9cE+1bFlqJtolY7TA/HA7HuK5ZwSehtCb6kmvamr6JcPFIZDIfKP+xnsfwzXDYGK0725P2S8twgCfagQ2c5GDWauDW1OPKjDEVOaRe0CwW+1NIice9ezw6NZDRlt3f5tvc815p4Slsv7Qt4JnEZd8ZNezXHg+zktRPDdTrJj+/kH8K5MbTnOL5Ai1ynlHibw6YrdjZKWxyQOc1wcqPGSsilWHYivosaDBZQM8hLcfxc1wVz4dgv8AxKk08IWEdFIxn3rkw+YuLcJrSK3JnTbsZ3hbw+fsS3MGoPGzjJUHiu/j8K2ctkklw5kYDJJbOaRvDNqyR/ZSIgvXbWpJEDafZPM2tjGe9eVUxdWfvpX5tNtjWMEtGZVrFpeiiREKqjHkgcVSa0hu7oSQgsmeeeKbdaGzk25mZlPOSea3LJLawjjhQAYwAAK2qTjGjKM3eaXzEteh4CtyfWpFuM9TVIo20sAcDqaVXKng+1fZqxzIvmUucsSSe5NNbHY5qur08PVpATKvGami3YIU9eCKijPymtCzh8xsrXpYXDKrJRRPNZkkNqQAx9MjjrVhLGRhnYceuK17KJVeJmzj7ko/z26V6FpekaRcaY8stwFm6qD0q8xq0sG1poe3Qy+Dhzzb+SPLX05UAbc+Oo+Wq5ixnGcD1FdtqkCRK3ljG3lW7/SuVnKgu3HPA9/WphXpVIc0VYMbl8KKui1otp9ouVTjk9661NPjlg8uSFFzkKwHP41xVleNayh0bBFb8nieR0+6ofH3gK76eJj7NKJ8hiME6tdSl8P4/L1MO9iEU7IP4SRVdRxmnzymWQse/NRgE+teXiailNtHfShyxSJlYd6HGVzxTFypBwDg5waU5IJx0rBO6NbG5FdPa6ZYCKKSW6n3JFGnTap5ZvxJrO12yuZId19IIlYcqnJH4VLLY3lvd6RqHmhILaBsJnkliTj8zU2r2M0WknUHjkmdvmFfPyaVR8vVs9dzcqaT6I88u45NMWR43klkVdsTAYCjOcn179agXULqO9dWUtuXIQ+4zXSPp51PXLPSZeIJ7YzMw4O3BIH4GuclLi+VM7rkRGDdj+PcYwfyxXdTqNK1zhnHW5q6NraW8Mc6+ct8EIMuSQp9VU/xY4B9617KS5igMiS+f/EQCd2TWJBZCz1G/sf4LSPfvbk4wM1YtZZIrVbyMsi5wccVlJK90aRk9mX7i8E0bMu4uzbHDdU4qOzTMg/Gsy1uZJru7VuVZ9wYnJNbFqyI+TuyOn1r6PI4qL5n3MMR77NKyh/fBmXcoPI+nauysIme2+03M77yv7sZ447Y/pWHYyxRBZYkWVXxuiJwwI9KZdaokG7yYGhP/TR84+lfS1k6j908/H4X6xTio7lbWRBBcXJiQKjMcewzziuQmO6Qn1NaF7eNMTycVnN15FeZmGIjyqmnexvSi4wUG9hVkdBgEilKcsGYZA7c5qMDmnAgEZ6d8V8/KRoopChR3p/lio2fHAJ29s0ebWE5pFHEinimCnCsyyVTUgqEGpAaAJRTwaiBp+aAH5pM0lITQAuaaTSE03NADs0maSigBacBSCngUAAFWtPs2vdQtrVBl5pVjAHuQKgArvfhf4audW8T21+Y2FlZP5ryEcFx91R755oA+iIUEUaxr0UBR9BVhagSploAkFLikFOoAjaoXFTNUTGgDjPiVaLdeBNTDDmJVlX2KsP6Zr5wavpT4jM48CatsUsTEAQPTcMmvmo0ANNIKU0lAC0A0hpM0AOJoBpKXFADgacDUdOBoA94nezSEOzDd7mo5dVt1tTjBGKwJbQ3oBSU7frUNzIlmipI2RXzUcMna7uXzGTqN2Lq7ZkXaueKq9O9Xbya3MXylSfaqOQy169P4bENk0U5Udaa8u4kk1XPtUpsbsW/n+U3l+tOTit2CGmSm+ZUIbPenAjFVYZJ5hpheonk54qMyUrCJGkpvmmowc0NgCiwrimTmnLIO9VWJJ4pMtTA0Q67eKhZy8iovVjjio4ycda2/DHh6417V4kjVhDGwaWTHCj/ABqW7K7FFXdker669ppuixvPE0iWcSJCijJeQjC4Heudm8RSa1Z22j3GmrbI0TMTK2WYqQMDHTrnrXVappFmbua+1LVdltaYdYXIUISOGz34zivJdUS4sLt/IlW4tWbfC2/KkHoVYcg/SuCEVt1PSm9DYk0+BLn7QyCO++wsir2aMEbhjsRmsO20y2F5E0MKhw6eWMdCDxWfc6o0Or2d8GuTL5bxzid9yqp4wvA61dXVPsbG6AUYwV9sdK3VOcVuZ3TOhGj2bveQwKJftVwzTytyN6jGAAegNYWqTKdPhWWweO1XcplhO5RhiM+oHGaz9MvJ4tI3RTXLSTSOZ42kxGpJ9uefqK2tOtJb6KRL24WMOnlJFwoIPACrQr0/idxfFsc3qcSrpsg6kMpB9Tnr+VUNJ099RvFt1JGepFamrafd6dB9jnZZAhADJ6ds+9bXhWSwtoVkYoswPJNaTrOFJyWpy1PisVT4GvlnAVjsxkHvXX+FdK1izbzLi8mlUHCo7E4FMufGMcVygRA6dCRWiniRGhDRHG7tXkVcTiakXGpD3WNKKd0zcGsxC8RLxgE9Go1JrTV5ESycKyn7wGK58aTcahqMV5KXWLHA7GtO802WMp/Z4P2jtg1xRrqko0GtXuVq9TUsrSayYCSTeCOtUNdmt7QpcIxEue1O0uTVbeVxqnPow6Via+pvLsJC4Jz0zXVZ0dmrduwm9CC410vcRugbPQnHFb+2C5s1kjkBlxkHPes2z0cXcDJMuzYMDBxWRYzx2888Jn+dHKqfWqlTjK9VWbaITa3PLWAxUJPanF8imd6+sSMixlWYlE2Ke2c4pwWmIBtBBye4x0qdVzW8Y3E2OQVdtZ5LeQOhwwqBIianSMgZ/Su6lGpBqUSHKL0ZqW98yndubcevpW3a6xPFEP35VcdFXNcxGzIfSrsciyxsJZdm0ZXIzk+lddvbq1TX1PWwuYOirXNG/wBXefILHHpnJ/E1kSTFzkkcdBUMkxZVUn5Vzj2pm7J4JP1ryqjs7R0RnisbOu9SdXqQOaiRm8zzBgNnIwOBVy0RJZ1EhwpPJqYptnFa7shikkitex057pfkXJqtd2kUN26QSiWNejKOtaWm38lkFaIkSDpx2qZp29zU6KEYRnaqV7i0a3crtwR61VaIEKqg7jwa1pZGuiztyx70WenG5uVHIVTlzjoK2VNxpuc9LDqwi5e5sX9cu/Iggt7e3W4uSuyFC2AABy5PoOlZzanqV5Hb6Vd3C28fkM6i04LsCBgs2eg54xW3JZaJpkl9e6hfYlY+S4kblFPQL/OvOtQgl0+7YW0izWxbdEd+VPoQQcg/lXzcUr6HTK9jVitJhf2sc0zC8lt5Ps7vjeuACyn1Fc/9gT7YHCfvCcgH1znP50l3etDqNhqEC3C3cefOeWQuAvT5c/U1oX13FAFuEwDs7dvStOVx6kbl02ZlmultnJkMqw3MqgFmIHv0AzVS+h1BtPubZBBPDBNsDH5G6A9RwcE4rH027lFtc3CtcfbJpmaXbKVQg9DgVYg/f4N3crFFGcBcgAfQdc00nHqTe5VsJVkfIUrngg9Qw61roIsMWcg7cqMZyfSqcljFBfebbz+Yrje6ryo7D6VdaKAWAmFwPO348nac49c17uArclO6OSrUUJWaGtdylFUuSqDCjPSozOrI275mPTk/L7+9EN4sV6k80Edwi9Ynyqtxjnbiq8gA2srA7hkqM/Lz0Ndf16rJ8o99WRu2WOTx6ijYxiMvG0Nt6jOfp1olG6RnCBATkKM4HtzUeDXNV5m9RJAxxULORV+HT5rgZRCRVe6s5YThwRisXQla5s8NUUea2hW82lLYxkjpnrURFAHBycY/WuWUTA5nFLRiloLCng0ylFAEoNPBqIU4GgCXNITTc0hNABmkpKKAHUopop6igBwFSAUKtdDofg3XNeUSWVi5h/57SHYn4E9fwoAxra2lubiOCBGeWRgiKoyST0FfUnhvRotB0Gz06JQPKjG8/wB5zyx/PNcf4M+GlvoF1BqV7Obi/jBKqoxHGSO3cn3r0ZBQBKtSrUYFPFAEoNOzUQNO3UAI1QueKkY8VA5oA5nxvqh0rwrfXKjL7Ni/U8V81yyGWVnYAEnJwMV9VXsMVxC0U0aSROMMjrkEe4ryjxr4A0m2tJNQsJRYsOTE2TG307r/ACoA8nNIae6lWIOOPQ0w0AJSUppKAHClpoozQAtLTc0tAHuyaCLCw2h/mA7muH1a2uftDGR9wHStC48T315dsY+EPABqu9vqd/KFSIyO3oOleDhKVeGtV3bHKSexhBSTjHNTrG4XpV6XSrqxlAuYihPrTpU2p8telczuS6HYW15cFLggfjXocFhZz2n2JWXGMZrzK3sruadfLVgCfvCu70nSvsoVmuHDkdzXk46MedSlLTsa035HJ+K/DlvoZBilJLcjJ61ypY16ZrfhP7fci4a5eRvRjmuP1bQZbObbHExHfFd1CvFxV+opJo59mJpueKsNAVJUjBFMMWK6dCHIiUmkd8VJsxUUqE0xXBGBNSMwAqBUIFWYLC7u8CGB2ycA4wD+NAtyASsXCqCSTgAd6908H20eg+DIZpU2XM6GUq3X9a5Dwn8PY/7ThbVXLzJ+8NvGeEA/vH19hXceIbhRYwXOyNYo2aJt4zgdRgf/AFqxrrSx1UI2d2Z/i6y/tvRbLUoUjcqoSYNyvtn1rK0nR/tdq8Rt4nZUJUBOh9uKqxeKvs8zGJWaCUYaOVvlAzjIUdAe3UnsK6jTdbsf3csDpFj74zjbxnFc3sb6s6faWVjh4PDX9qz3FrcosTMPlba3B98gVUt/B1zfXz6XMNhg5nf+Hb22nHOf0r0ye/0W9nMltIsMrDO7Hyn/AAqGDTvIuJLlrsHfjOTkH6VDqyi2rlRtbY5DTNI8jVjbfZE+zLwd2fmGPpipdS0u1Z/mtoCVPybQFK++etdgZbeEs0Sgsf4iKybhEaXzpiHYH5VPGKyb57O472POfElslisEQVw75kJLHPP1rAAP+RXTeMbhm1FJVYhGj6DkcHup4Nc55iMBuUIT0ZOVP4dv88V6dNWikeVWlebNPSYIZDmRuScdeldXpFjazXsUHmAKW5ya5HTtOubpi0MbOB1K0txNNaSgozxyKeo6isqtPnVrkxlY931C6s7DS0TuwwtYUV//AGchu5PnXH4155o9/qmqXAVp2mKjkuegrob2C5/s5llkIYAkjsK83E0asqilG2hsp6HVxeJtO1S3be6ITxtJrivEULaW63tpNuXdkqa46SOdZDJGGCg8EHpUFzqV5cKIZpmdB2NQsHPmUlLTr5kSqXWp6FpfiIXkIZhx/EKytXurSa7R7UjzFJ3EDFcnZXU0TlEdkB9O9LdNcW7bhkKf4q6YYeMI8kVoS5No5sAgKWyFYZB9aF5PNb3/AAityP4j+VI3hu6BB4/AV9KkJsyY6uQqSR1q0NCuU6j9KnisJ4TnBHvXZh43krmVRu2hNbWkj4PQepNaMWmeY2CyD3Josrdzt+Xcx4AbtXQ/ZPsYQTvhmHCADNfT06dOMEeDXxFSM+VbswrnR5IIyzJkdmHSsqWIocV3D3i2gAdQykcgjGawdWS1kYS23APVfSsMRRjOLstTow9bE0qip4iDV+pgY2uGGGxzyOKQLgg56/pVqNzC5+VWB6hhwaluVszFAbbzRIVPnB8YBzxt9sV8/OklrfU95RTje5NZeSLdhIhbI+8OCp/wpiITLtjBY54AHJqugIq7bxOW3KWBHO5e1bVJ+1goxWqM12J4EbAPIB4z61dEJUDFRQwOgGQcEVPLeQxKEdsuOAoHNb0qCjFuehnOTVrEiO0J4GSRW1ZSJa2C7hiaYFgO5A4rGjY3FwkRy0mMnn7oHrWhctstbK6ZFxGzRln7DrXlZrWUqahB6XO3CuX2iPxTpQ1O2tdTiWPeECyFsEZHqO9R+H9IGoCSGcRu2wkYQ8Eemaqvr4tZn3b2t5OHWRuBzjgDt6dc+lamnatapPFJayrGBywzgjvj/P8A+vwo076s63Oxh2mkR3F/Pa3yfu34yqMpX8xWVN4bnudYl0lpBsUb/OHC+X2wP73bFegXN/oWpTExTLa3LDIfHysff0rK/shYLx7p70EkAFtwIIp6xGncwINLEOrxwQwgQJhMsG+YflipdRs1WVgDEFHAUKM/nW+txBC5aMBm7MRWZMnmXHmS4cZ4z1H4/wCfrUWuF7HNXFmljECsZjLkn3NUGcnrWxrU2ZFkQkIRjjn8xWIzqeo2+hXoa9yhaNNI8+q7yZIVVYg25WLZBXnK+/41Y0+GOe9RH4Qnn6VRUEkD1p6SNGdynBruoVYxmm1oTHTzOo1bTrS2slKvmTJDL2Hpg1y6gb+asNd3F3iMuW9B0qpIQmBk7gTkEdK6sXWjUUWtbdTV1YyndRt5HpfhCDTLiRI7yRUixk1i+NobCC/lWyffCDhT61ycOpTQj5HIx6Gq91ey3By7kn3rzbWq+05vke1PMabpW1va1uhVkbJ+nSmbxTSxBJBwcVEzEkk1hLVngt3dzFxSYp1FYlDaUUYooAcKdmmilFAC0tFFACYpcUU4CgAAqaKJpHVEUszEAKBkk0xRzXrvww8D5MPiDUU4+9aREf8Aj5/p+dAFzwX8LoLeGO/1+LzbhsMlqT8qf73qfbpXqMcSxoqIoVVGAoGABSotTKtACouKnUUxRUqigBwp1IKWgBaCaSkNACE1C5qRjULmgCtMawvEFrY3uj3MGo4Fsy/M2cFPRgfatmdsV5d8TvFEllBLokKkPcxKxkH9wk5H6UAeX6tY/wBnX8kCzJPEDmOaM5V17H/61UM0u44xnikoAQ0UUUAFFFFABSikpaAPfo/A9vE48ldzH1rYtNPGlSYli7dVqeS6uIHEkWCT/Cagur+6I82VB04AFfLU8RUlTTb941cUmc/4qmF2Vigt2yDksRXKzW88Ue6SFlX1Irrvtk1xfAvbnYPWtTUFtrqxMaoNxFdMcXONlNEez5rtM43SdQWNTmPOKr3+t3DXg6og9DWtFozxKQozn0qG00FZZy11zz3q26XM3JEWlY19G+3XtsJDKAnbIyah1jU7a0QwyJunPAwOtaPmJptqIbZ1ye3pVRdBW9ukuJn3sDmuOdSnJ3lsjX3mrI4G9srkOZ5ISqsc/SqRiB7V6/qNpafZPLIXIFeaanaql95cQ6nHFduFxiq6NWMKlNxMcwe1Ma2yeldkfCZGnCcSfNjNbXg7wdG8Lazqah4IwxjgI4cjufbNdFPEQqX5XsJU5NpHF2Xh12AM0fzsNyr7YzmtjSzDYXi3NzwqnECk/MT6kf410GpF7LR7nVJsKJsIiZztXPQeled+KtT3XaxaeXKeSFGRk/MOR9cUQnOpK3Q9DkhTjoen+HbxlvjHu/eSASOzHkL1OPwP8qv6nYyX/hi+i/ijk3jPQL3/AK1zHg/TLia1OpXiyQtGiRqSRjYF7enGK7fxDqKaRpMEyjMe3LD1U+1XPWWhK0R44J4ZYXn3fOGKx7h1YcZ/z0AIrKlu57TbGrMu2Ljd/EzHLHPr0rS8QaYupgTWD+XNCSBGDjnv+tc2NUlgb7NqVuQBwSRV2utCb23Oo0XWojtSZ9rqOjZwO3FdtZ3ERiUrKGHsa8mjOmSONl/JCO6k5FbWk6zp9qwjW/ds9OOP0rjq4a7ukbxq9D0mS4RF3AgH3rndU1qMuLdJC0jf3ap3Oq2jQbGu2jVujZrCbUtK092njmN1c5wOM81NOjboEpol8Sr+6gdmO7JXOehxmudjbB6DHRl7fUVtanBcnSLeS6VlluHaXaew7VjFCCD7c12qVlY82r8bOs8O6zFp8ZiZGYMcgqOtad7p8M6PeTIBvOcelcNDcmCQP6VsL4gNy0cLMdmRmuaupyaS2JT0NfTHTTroSQj5SeeK1NV1GWaMKqsVfrgda2r7VvD48PpbxGHznUBEUfMD61ztxLLaRo+FZB+lcdVVYSXs9S1ojnbuee2Zo3hAU/d9qxZGXdnIyK1dauZLqfcQFUDj3rnpdzZINddDm5ff3IkjXthDNCWLYZe+elVLvVGnRYSgAzyfWsZmZT941csYmuJ1U46V0uNlcV9LHsBa1PQLTGS2J6CvNV1a9HPnGrKa9eL1bNeqizuZYoD0AqjNDGOQBXOR+IZT94GrQ1hZAOetdNCpaRE43Rt6Z5KXSlwMLzj19qqahcTXV+zgkuW4qrDcn5ZQw69M80S5klYqM55FfVRTlTTe54aoOGJdQdNqFzcRLb8sOwHWs8FiuQSecHjp6VJ5srR/Z1PyswOMd+nWo57W4tbh7eeNkljOGVhgg14VfEv2lrnuXnUjeZJdWxRUYyK7MMkDqv1qO3ULKrFVYKc7W6H2p5WQKofI4+XI61LbRgsM5zmm3GtUXKRCNSC993ZNHYu0YkG3DfwjrWla2vl7SWAz146V1GkaRG1ksihS5JznsO1R3FtBCZpJArCJCxjrqqToYaDb3RzQquvVdOKt5nH6nqEhJtbZcOBy+Owrn4LhYp/tFwSeSIwTyT6mte7MsWmXF/JwZjtUHnA9q5jV2InjFsHMYQKSRnGev418zVxtSvU956Hqxoxpw0O10MkAlmO5wGJ7/QfnXRXdi93ol1Eo/eRMHQH7oHeuc8O2U01qJ5leMRKoQnptxXW6jeDTbaKcf6rZk/Ssq75ti6asjz2e4t722ZznzI2Krv6s2OT+X5Diuf8APnsXbczK5Xv/AHm56/RV/M1u+JNNXUAlzpziORCSYwccnk/j/hXMPqbgtBqEBxkDJH1rKK7FN9zT0/UEYqJX2sAOG6DHFdLaumxSJcj2Oa4NU02RxsvpYh/dPIrS06+0+Bti3cjE9OOP0rCpSvqaRqHbF1Ubg2DWXqesRRxmIOTIeBtqjLqFk0Wx7uRAeh3Gs1r3SrJjLG7XVxnjPPNKFMJSNC6Rk0+EyEiRjk89CayicZ4+oq9Klz/ZUc10rLJcOXCnsvaqB9fUV6tH4EcVT4mSRgbhzwa0NSs7a2WA292lwXjDPtBGw/3Tms1SQcCnOzIdr8Hrg11wmkrNAmlFpoaHaP7pI5zUUjEnOSfc1auJYnRNihWx82KbdCaKzto2njeJgZURGBKEnBz6HgcfSprPkfKndELXUqbl2nIO7t6VG7UNULmshgWXJ3Zxjt61H1FNzzUiDNIDGopcUYrEsbRS0UAKKWkFLQAtFFLQAoFOApBT1oA6rwF4aHiTxFHDMD9kgHmz47gdF/E/1r6LhjWNFRFCooAVQMAD0rivhp4eGi+GkuJUxd3uJZMjlV/hX8ufxruUFAEqipVFMUVMooAcop4FIBThQA6lpKKACmGnGmk0AMY1C5qRjUDmgDlPHOuvoHh6a7iK+exCRBvU+3fivAdX1i81q7FzfS+ZKq7AcYwP8mu5+MF6k3iC0tkl3GCD51B4Uk5/PFebMaAEJopKUUAGaWkpaADtRRRQAClFApwoA+lYjLIyFlxkZx6VcKgD58EVELmTzGE0JiKdAe4pUna9UbYiiDua+EWNjTklJWfXyOi1xJFhJwqgmoWtEZt6jGKvrbbEyFJ98VDLFND8zROqnviuj2s5y5rAlYz1X98V28Ul/pzPaM0Zw+OMVcljxGWjGWxTLSVlhInPPvSq1ZXumLTY4ubT9RmBSJWZ16nPSkbVbrRrUCVyX6c10kxnd5FtmC7z96s680WK9kAumBYV0qvGTSqLQzcbK8dzGa61C8jWVJCQx5qxZrb21wPtOGJ5ya3rPS4NPsSikH0rBm0sXl+XBZSBVRqxm3FaIlprVm1plhPq1+I0mdbHBL46gCul1G7RNJv4rXPlxokUaqOKj0GxWx0CRCczzoceoQVYs1R9FeWOIIJGBCsOCO1d1GnyQ9TopqyuefeNHV4LLTPMYKIg8jY/SuGElrpYE5iwAQB6HnqR3rvvEyG88RkNDxDEu4qOgHPAry/xRKdxGcjOc13UorlsTOTvc+hr2/srTS4k3KYTbqQQAN4YD5vTvXEfEXXYp5bextpF2tCrbgf4f8/yrkdN8R3V/pkMFy4cW9m8QB7gfdz68cfhWZJcNq11HJM2JIkEYPQgD096caXK9SZVLrQt2lxPHcZLZDZLetbLCy1BQkyRSPyOnJrDjtZlbeoMqLyAcEgVftBF5m9CsbsfmAwOffP+NY1+6NaZXk8MaO8jE2z7852hqv2ehaRG64slXB43DJqYqDJ+6jLzR/NsY/MPcetT2ckd0Z9sDiWPiRFOGTvnHoRnpXK6k7bm3LEvf2DZXRaCW2VoZBuVsYx6iksPCWhWV0Hjtgz7uNxzg1qafdpJaQvC/ngAlcdSPxqddsA8xkbfJ2P8P1qoyb0IkranDeL5vM1pxn5EAUAdOlY1tZm+mESnaSOtTas73uqzyRoTljnAq9oV3BC/76I7lGA2K3Z53xT1MO4sfs12YZDkDvVW9gji2mM4Jre1kQyyvInBY9652e32uDuJz71cUrCe5Fb3T21ysvLY9TWuNa1LVbiGzto2cuwVYwMljWe1sixZzzXWeFtQ0/Rng1Qxh5IgcgdR24omlHcIJyKviDR9Q0i3jOowGJnHy4ORXJmQgEE12fjnxwnimWBLeBobaAEjf95mPeuBmlJY+lOKuD8jc1rSdPtLK1ltLzzpZFy4zn8fas+NbvTJYpJomRZFyue4plw5DQKOmzmrkzXOoWqiWQuYVwuewqltqDsSJjFPY7jk4yfQYqj55jYqTyOvOad9qDHJPJr0blloYzUiHmqYlzj36VPExJGM1pT3Gkb+l20ly6qoJycDHU120Pg67a3Em3aRzjIJH4Vj+CJYVuxvKhiuFJ7H/OK9asWtIbBWckSr97Ne7VxM8NTioamWIilFeZ4tqWmz2t60O0l15wvapNOE13eGaVy8gB3PJ8xP1zWv4rvI21aSSBsdRlTWPp84tp2STgEYbHOK5cRGMqqcluRKc/q96fxGm1jBNHg7iq8B85xWd5S21z5c4YoucbetbaXEEdoVWcFSclR61lTu07swAC5HzY5FU4xekdPQ5KdVqpzRu49b33+ZraNey4ZBNIsSKWbaeQBWdJqLXNtqjKzs8pUKB3Har+nwxJpkyE/v50JwOuwVDptso06a5ij2h5BtBHBFeVj8Q6kmn0PXgtmkZs9hFey2thLIwiVA8jAc/Sq+qvpun2hCQBMEIgA4P1Hetm1UXGtzSNEcxRgMV6L9K8+8Y37Nf8tvUPnr1Ga8ZRcpWOlytG569JLb21tHBIVEQhA4GN2e9cx4u1aE7LKNl+aMEMOmKo2urPqiW8krB0W1YEDsQM8/niuaubsareCRjsaMbAehAHp711xp2WphKdyVLm4hn3A5Rs59cVYee0vQFbypW54xzWaIp1cuoMqDoDzgU+D7MZCyFY5GPIGBz+NY1FcumwbSNNd23Wrb85xurQtdO01WH+hqgB4yuTUAVvMxCu+VPm2OefqPUVYs5BcrNugZJkGJI1PKHrnHcEZrBubW5qlE0xpFhLI0UlsrxSDcpx09aW28P6NaXAeO3VnzxnmrFlcRNZQvC5nABKbepFS71tzudG8yXgL/AHfrRBSegSstTC8Qv5l+eflUAADpWZb2wuJljyQTn0q1qB868coCTnkAVWhuntm3xkrIOjDtXv0qSsk3Y4E/eu1oQTJ5MjRtnjt3qCYoGHllsYH3vXv+tTTSPNIzMSzdSarMVIHHPfNXKC+zsS9XcdBMsU6vJEsyDrGxIB/Ec0wZdsAE1LLb+XAkm5TvzwDyPrTYrl7S5E1tMyOoyrqMHJHI/UipnRcJWkQpc0bxH3CWy2kLRyu07bvNQpgL6YOec1nOeKmYk1A+aUoPew4xaWoNCFt0l82MlmK+WD8y4xyR6HP6Gmq2KTFPaV2iSNmykedox0z1rIvQysUhp1JWBY2ilxRQAUtFAoAKcKTFOAoAUCug8GaSus+K9Ps5E3RGTfKPVV5P8sfjWCor1P4PaSXu73VnHEaiCP6nk/oB+dAHr8YwBgYFWUFQxirCCgCVRUoqNakFADxTxTBThQA8UGm5oJoAQmmE0pNMY0AMY1XkbAzUrtXIfEHXm0LwtPLGu6a4P2eM5xtLA8/gM0AeGeKrtb7xTqdwknmI9y+1vUA4FYpp7VGaAEJpc02loAXNKKaKdQA6kpM0tAC04U2nCgD6P0Fbu9FxBeXMc9zDxtfgkVLPFfw3MTmNY7dmEfl5wQfWvOdTvbvRvEMmZj9oglw0sbZH516BYeJH1FoZ3nWWK3Id1KgE+9fI1I0eSKrKz7rb/gBCbeh0d/LHpGmDzZ5HklIULGmcf4VkPf3JDQ3MpaLI2VJ4l8XaSbOM29x50rfwKvT61T0T/TNNVmfKE7sMOQfSrx1ZQqpqXuJWsuppBp6LcuW0sTuQTx703VYEMP7s4J9K0bDQjM3nbV2HuT/SoL1Pst8IyAyDqR2pckoU1Pl0kPfQoW1qsdqTg78Z5pY4hNY5MWyQnnNaL2c2opvs2XCdcnGaiSyupoTsdFZTgqTzXPOhWUrxV+xUWkrMbFY28UOZCGz1zVNre0NwEhA8xzgD3q3aafLcSlGclgeQTwKi1CE6dcNIoVjCpckHGKVCi6tVTjdK9n69R3W1jTRYYZjBuzOYChI52AdqwxqEcGjpZQMRIwyCTnkH0HQfjVC41NtOu7G8luCILpCrEn+LuD/KuKuNfTSdbcWqZIfbGFYkkNjkE9K+mjSbBzSOy8RW8MNubtrhJLqZArqBgKvcj/69eJ+J3DysQMLuwB6V6XqHiNb/AEdRFIolYfvuclPYH1615n4jAePzFOcjPHatKas9SJO6IrC6jixBuYPIu3IPHtWva2bvEN0n77HykHBIrmdNkhkObhsbCMHOKkkuLuS7kTTnlmU45Aya3krmcTfsre/guCs9wEjY52k/55racWabY0EMjMM/vDn8znisjR9C8yMzazM4lb7qK/Kj3962ovCMc0qNBIfII5TPI/xrz6043s2dVNO1y5b2LrCGiQnJ3eRK+5Mn+63UVo2li73dvfRsyPE2xg/V4j2Pup/l71NawOrrEq/KnBGP5GtIw4YsvLMu3HTvn/GuS7ZsS2totvIZshYwSduOlSahOi2UrgnJXAx7028gkuVjtkOFzlz6+1SSaVGtusKndjliTzmm5qknKXQyqvTQ4EBLG8SST5lduQau3VnHM32i22qq8sMYzRqNkDfGP+70ps9ndySxwWiO7PgbV70e157cr3OJStozmrtWe8cknHYVUntJlQSMjhW6MRwa6fVPDuo2SmeeDZxyCaivrya70uC3KKOg4FdKnaxk1vc5QxyuMZ4qxa2rxnnO0106+HzZW32m7XMZXj2rNMyMQIxwpyKqNaNRe67hrE6zwl8NGb/iZatGjW7DKRE8/U1yvj/w5Y6ZrKDThtjcfMg6A10MXj7WfISzxE0KDGAME/U1lautxqw+3SMoVONork5akcX7RN8tu/6G3NFwslqYuneHZdZ1BLaJ1j2x7mduigU9bM6ddyW8pDKR8rjo2O4qwJ7nTbguiMm9Np3DGQai1jzT9mbcSuzKj0rr53dLoZ+7y+ZyQBFOXNPpVxmvYC5JGCSqrkseMe9W45pNiRl2KISVUngZ61HKkAZBA7uCgLFlxhu469PetKy0i6vEZ4ImkCDJKr0quZR1YKdy1YXrQMNpOK6JfEd20IjNxKVxjG6uXktZLdVeQqdwzwwJ69/SnrO6ShwArAg4A6elelDGVIwS3FJXNWW486T52IBp8JTy1VNwY/fOeCO1VJJrjUbiW4djJKSXdgMfjV22ikdBISGK9Qx7Cs1z1Zcz3NKXuq1jrtG0aC8sZG3AOq5JZv5VhSxf6asCMTubGKIrqYKVBKqT0BwBU0UZhu5Z1ZZFhXcGB/xonSlBSqp6HTWxNCpFU4rU05rVbSK6uBIN6wFDjnaPSsvTrrPh9Io8hicg5zznPTtUU12bMKk858i6TDEt39K51tUTRg8VuQzE/IQ2TgnqK8eUW73MlJJ6HdRpaxWU8z3HmXMq8ovAArx3xPJ5l85Awu7AHpXp2mX/ANr0B3idA5BMpJyV/H1rzPxKgZvNU5B5rnpq0zSTvEuaTqotrV7NMl5oyoIPQ9qZb2dw6YdykvbsSKy9IuYoJBcy/wDLEggZxmn3Wr3V7qEptQ7hzwMfN/8AWrrn5GCLlvaXsUu2S4CITnGetaL/AGVSIlEMhIyfM7fj2qhZ6S8mZdUmeNj90K3I+taEOgySMirKJrc8jnDL9fUVx1JRvudEE7FmK0YRL5SZ53eRK2Uyf7rdRV62tWa5gvUZleJwjbjy0Z7H3B/l71NbWzgrEEAVeCAP5Vde35OCSzgDHTvn/GsbtmhYtrZbb99kJEpOFx05qa4liEDvyTjIPSm3sM0scVvFt9WJrPv4ksIltwxkduXZj3rpw1PmqJGVWXu6GQUjM+6UvsOc7etVZrQmMSRsrLkKcsAQxzxz9OvSta0sJrycIinP0rN1C3KXTRJyc4HNe1KOl0cMcRDn9k9zKkyHI4/OoCxAx2qw6MjZK9PUUx5i8JRkQtkYfHzAAYx9Kh3NFZkRc4o2jfgEEeoqexntrednu7X7TGY2UJvKYYjhsj0POKqh8Gqptcy5h2SVzr9G8L/2jpt3eCWFVtU3ssjYLD2Heuc1S3ihm/ddPSnxapJHFszxVK4naZiT0r28XXwzo2hby02Jp8y5lJ3vt5FbilpCD1xxTSTXzkgM+kpaK5zQSilpcUAJilApcUuKAACnAUgFPUUAKo5r374Y2Bs/Bdq7Lhrh3mPuCcD9AK8a8M6K+v69a6crbRI2Xb+6g5J/KvpS1gjtreKCJQscahEUdgBgUAWUWpkFMQVMooAetOFNFLQA8U4UwGlzQA7NNLU0mmk0AOLVGx4pC1Rs1ADJHxXkHxivZjLp1nkeRhpSPVun8q9ZmbANeG/FW8E/iaOAHPkQAH6nn/CgDg2plK1JmgAopKWgBaKKWgBtKKXFJQAtOBplLmgD1GfWbWLS5luIUNxO+fu9PpUNprdkYIVjDRSxv+8Kj7yViabqsct3a5tYpXiPzLMdwkJ9q25PE6xXksU2jadBEqkMIoMMDXzn1GEYO+5gpam7D9g1rVHP3VROGQYH411vhS5s0ebT57pF56HuPY143pep+Rcz71bypFIUZI+ldzpN1by2TC804Q4ABnz8ynsa4p03hZqVrrszSEkz0f7PKtxIthdvJaqfuh8gVWmSaVjAkLGQHnNUbDTbrTtIS6ivTIZCC8an5iT0rTOuXVhZIXhiLScF2bBB9xWzdO96qcevdW8uxsmV7bRdUhlY287RL1cbuDSTy6fFcRAzMlzjklu9V31C7u7cW5vPLSU8PGaqX+m/anigBDshDNKfauWrWpci9k9O73Xp2Gk0acST2M00sUzSF+eOaZZ3QMd217HuEmI1HOcep9OTToS6Swqkq7XYJtXrV3WbmGysHaSBpChBVFHL45612ZfCf8Zv0Xa5pGKbOKutLsktLmO5uHaO3ZpltiBkfT2rzvxHDpJjmNpMftESK+7GOe44/rXY+INectfy6jZC3ja2Cw8jcXJ4UnvXlkl8T9o8wOx/vOOOew/X8q9uipt3bFUcVokFlfhI2j3EK3BB9ag1mXdAhUkqw71n/wCrLBXJjb7r+hpJpw9kBt+ZeDXW43dzBMpAN5ZIHHrU1pfT2RbyGIdhjIpqFmTaWVFHc1bhMQmh+zoBg/ffufWm7AjRt7nX7NUuDHM6nkB+RivQvDWrDULMkoY3/i4xVXw7d7gqXLCTrnoQK2rWOFZWaBFVWORgYrza/vbo6qenU1LYqkaqDyeQfWrG5QyyuwEaDJJqoZI4EV2YBVHesLUtajukFujhYVPJz1rGNPqW5GidW1DUNREGmW+VL4MrdMd62v8ASoZi2Swz82areD5ree5WKFw7KpJIPSuruYozMY0AJPWuTGc1lFIxlqznL7TortBLGP3vsKz7CS80rUMrbea7cKAOa7+K1tLS3BGCT1PrTdPn07+0HkOwOBxmpgnGootoycepzdw8+s3fkX8Bjjx93FPsPBNpc3pMbKIk9eea0r+/F5qrC3jAixt3461Fpy3Nq8yiU7T0NZ1ZxhWu3ddSkrnNeMpILOM6cGEiqcErXDw6ck87tDlUHUGvUZtFt7pgxQMSSW3d6o2XhsLcSsyARZwKVLERpU24R0IlBtnBw2URn2RoWlJwFXkk1NcaPqOnwN9utJoYi25dwxkV6tonh7StNl+3Koe5BOCT0+lM1uJ9dfbcBUt042Dqfqa7J14Rp+0kxezexxGqWUPiPTI5dPZUS2j3Fn6scdKq6T4M1HWTZGVFgSPlvN4yPau7TQ7K80rybYCGCIYJz941AmpHT1VdSL7s+XD5a9a5qmLUEr3d9jTkUtWfOQanqcGri6axFDWRSvrrHNdEUWTkgEgcn2rrPD/iu40W0nghSMrMMEuudp9R781y4hINWrd4o4JkeDfK+3y5NxHl4PPHfPTmoqU4zXLJXGtyzPKzyknvzwc0sak0traTSRTzREbIly53AcE46Hr1q7YGVY5ljZAHjIfdjlQQcDPfp05rpjBpIz54667FuztzLG0jOEAGMdNx9ABXSWmk+d5YiZy5XL7gMA1g6eALiJZWxHnkj5q9J0OyhkjijB42+Y3vXo0ZJRbObGYmVFRp01rLRXMV9FnggZFCOwOQBg/rWfbTfZkuYJYcmTCYweK7jUNyxKy7VU8DaK5e+uUgheaWEu4fcFUYLAe9c+PxPLRUerN8Jgq1GbdRqz+85M6dEIpxdTsVhJfyCOaw9UsNKeGQW0mZUQMG6YPpW7qupvKLyW+tfJVogI8dSx6Ak9a5C1v1iW4EilvdlGMnjj36/lXgrnk7tnoPlWiLGhaslpZzWZcrv7N3P0rI119yoyklWHeqkw8qaQxOTGfuSdCD+FRzXAlswNmGXg1vyq9zLm6FUKfIyF79auWNpd7TNb/e6AKeTVUbsAM6oAO9W7e7khliW2JVAepPU+tVISLi3er2BDzxyMv+3yK63RbuK8hLKNhPXjH0qPR7rzMJdYlHOenFadtBCspMChUY5GBiuOor7o6IOxegCxoq5yTyD61ZjQPKkjHCLzzUIRU2EnAFUNQ1OMwiCNwqg4JzSUbDchb/AFW8muvI02Ayy5wGPQVlXtxL9rPmvukHDH3rUsb6KK3kaFg0gXhs9656WYm6L5O7OcnmvQwcd2c9WWpt2+uPbwvs4ZhgkVkyXBklLlcsTkVYmjsl06B4pnN0xPmoVwqjtg96NMazh1EC8YNCp5K8g166pXajJ6HJhqFOdRzSs29WyDVL251i+NxcBPNYBfkQKOBgcCoho0rnaHjHGSSeBV3Ubu0k1WSazi8q33fIhOSBU8mqL9iMIXJwQpwOM9frXXRpYaEfe1/DQ7FQjdx5rWOVmj2MRnOKhPWr8ow24AZB7jIqvHbvK4VR1NePWkuZ8uxm0QAEnAGaUwyDkoa6rTdHjVQXHzd6uXOnxFcADNc0qqjuHKzhWZtoUk4HQE9Ks2+nz3OCgwPU10Z8Oo43sKtW6xWSbWXp7VzzxKS0Go9zzWlpcUYrQYUuKMU4CgBMU6jFKBQAAU8UgFOAoA9F+ENusniG7mI+aK2wvtlh/hXtcdeMfCCdE1u+hY/PJbgr74bn+dezpQBYSplqFKmFADxSUUUALmlzTM0uaAAmomanMagdqAHF6YzUzdQTQBDMeK+c/Glwbjxdqbk9Jio+g4/pX0TcOERmY4Cgk18yatcNeapd3DHJlmZ/zNAFA0lOIoxQA2lFLilAoAMUuKcBS4oAYRSU8ikxQAwikpxFJigD0Wy8MwawlpfaPGo8tx5o8wAgj2Nan9hGZdR1DxTDcwjAFu0OMMe2cfhXPT2SaPrck+kGWe3BIgkZT83H61s2vhXWIdKjudT1e0trS8/eJDJc/MT1HHavBdKppOD0t131/Iyi0t0ZDPYWDz2LqeglilkGGU9cGtT+3dP1mbT7a5n+xDeBNKfuYHrVA+H01dpjBerNfoSojJ+V1H91uhxUOm+GSs7JqySLHGpMqofmUdmHrWUo0L81R3kugne+i0PQLSbUbbUlu01AyaeQUtpQowfTIqLV9Ul8m4iuEFxMOTdL0+mK5rUJIIdNs4Y9VkkAyBGFIG0dCfeuk8M+DtY1jQy/nRxWs6l4pGfcW9iO1TSwdR6vVdrbf11L576IZosRYxxOZIlVdxDHIJ9BW5/aMt1L9ktg0Yh5PfrWZFHJ4VWW3vb63nulBLIjbtg7Zp+m6mq2zlYoYw7bvNByW9q8+rRqRqShbb7nc0i1Y6nRI4hqUPmRt52CVdeh45z6VB4j8QQadqlvaGPcZ2IZgeenX3x6Vnal4gtbS2gvLYAOgztJ6+tc544JvdCg1CykcqVJZl+9k/w/getezl6Tp8vZ9DVOyujnPGWpiaGaC8kDeVIxtmABOB3Huc15qQdwmDkhjwGYE4q/dy+esSSFyyrsZjyfz/z2qvDbvDId4GOoY9cV7ELRRm7sgxJIu+MhlJ5XPQ0zyg2VDYz1Bq2FDnhMIO2KZIhKq237v8Xfn1p8wrFMQRhwZrhAmeQDk/lSzvCjbbYkrnuKnjFgMpdq6sTxInpWhHZabYETmfze6BhwaHKwWKUR1ZIw8UFxtwfmCnkV6dpV+U0m2kmb5hEC596j8K3k1yUAhUo46d8Via5fmC4uYIlGzcV4rBvndmjRabC+IvFytG0UJzjpg1ytqNY1ifbaxu+T16AfjV2w0GO7YTTuWBOdorudLjFlbosEasF6qvX8qU5qC91DjFvc0fhl4a1PSbm9utSdR5kQRNr5xzz/ACrvIrWZHLJIWz3Jqj4WL6lYyyRho8vsORjpWxIsVlMLRp90hG7jrXi42MqlRy6C0RUuJzZyrBNljJUC2YtJmkaTO/kD0pl7ZTS3yXTl2C8AGtUT6b9mRpGXzicbe9csoKcZRvawlvqZkFyRdmLy/l65xV5cLMMH5T1qwZYGARYwMdxUii3nkFvb8h/4j61yqLlLlcr/AKl7Iq3MElu6y718tv4QaRi8yr5MihM8jvUF1C0N2tofmQdSTVeO3+yyykbmXrgHgGtZNq6p6W+YvUtXVy1oGMSl2I4AFN09b6/XBtpFJHzkjAFSJclLZJWgy54Geta+n3szwFjhEQ/OO9aQpwqNc7fyF6GffS2+kRQaeNolnByxPI/Csu3kaO+CuY7uFjtVD96Os2fytVluZ71GjYys0Lbvn2jpio/DWnq2qm4iNyzsCS0vAxWMpN1W4rbpb+tyeY8rW7i21Xnuoz0qD7Kx6ZpfsTGvvNTCwLKGqdEVj8zYGPTPNRR2bBgB1qykJHUGrgu4mhVUjp+lWVOBhQNuMZ281Zt1jjtmyqO7jGCDlOeoqSGxaSNnVowB13MAfwFd0MPKVuUzhJybVh9ns3ISTxyc/Wu70bVRDGiSNsKjG4ehrhYoyhC4BOeBitKG8bYFJC49v5V0Ukqd1MirQp4hJN2a2Z6CbuBzlZi3BO1Tn9K4/VfESQ6hHarFhZCQzZ5+v/1qr/2p9nTzABlQfmz1qvr2mLeaJBe2bEts+cj7xJ7fhXmY9p1F2sdNFSjGzlcydcv4ZrR0uWGFY+SQATgd/qa4J02Os+/O9shWbkD3q5dFj5cUhbcPlJ6kVBDA0UhEqjHUMeuK4dFsaaspt5s37xDuUscjPemFBkgNjPXNXSqyN8seEHSoZYyVUlfu9/rRzILMrmKPIZ7hSM8jnNDukZ/ctkZ7ipUFoFMdwGVs8OvPFXoLSztGEzzCTuoYcGm3YRVSTUQgdIpsYPIU9K9A0a4J0y3klPzbAWNL4fup5nRRAhRx+OKztUvhaTTxRKAoYjA7Vlfm3NLW2LGteIooIGCsCe2K4+O41PVZyltG7knt0q3aaQdSm86eQlSc7RXYWMK2FuqwRqcdQo5pTmorQcYt7mHp+h6xYBrm/AEBQgAPk7jSIZIpRJGxDA8Gurvrkz6dHzjOeBWNJa7QqExnjdleevY12UHeKuZSWuhm7mCFSBz69RTCGDcg/jWi0G9tzZJPUk0/7EBCsm9PmJG0HkY9a6HU00M1GzMxc1Jzirpth2FI1sufkJIwOo796ydRmiTKE0TJIUbBIODtII/MVYto1Qg4qT7Nz0qRYdtYylcEi2LxokwnWrNp50p8ySqUKjeCRWwsyJD26VzzhzPUor3V+YyIlABPemRMkgy5BNZ9zmWUsD34p9tC4O4k1yu6lsI4DFGKdiivQEIBTgKAKcBQAAU7bW3ofhm+1r95EBHbg4Mr9Pw9a66D4f6eifvrieRsdRhRQB5vtNOCV6KfAFjtIF1cBuxIHFVj4BUD5b4594//AK9AFT4bSGHxrZD++rp/46f8K97SvKvB3g+TTvEdveNcq6xBjgKR1BH9a9VSgCwpqUGoFNSA0AS5oJpmaM0AOzRmmZozQA41WkPNT5qtL980ANBp3ao160+gDn/EuofZ7V7aMZlljIz6A8V47J4QuHkO2ZAD6g16x4ij83UfogFZS2vtQB58vgaY4zdoP+AGn/8ACCS9rxfxj/8Ar16GLUelSLbe1AHm3/CBXWeLuLH+6aa3gO/H3biBvzH9K9OFt7U77N7UAeXf8INqWP8AWW//AH0f8KafBOq9hAf+B/8A1q9T+z+1KLf2oA8nHgrWS2PKiHuZBSS+CtZTpBG/+7IP61619n9qX7PQB43L4U1qKMubByB12kE/kDWY9ncR53wSrjrlCMV7wLf2p32fPBGRQBy6eL9a0TXIBPIuobwR9ml2pyPYD5TWM+v2HiLWXuLzS4rWOUhPJgY8erA9zW9Yaj4Zu4jd33hyZLl0kkN6kpMsrDGSFPAznpXIz6Zf2bo8Vm6W7Ss0EswAbCnrXkKXNHk5tf16mLIbyB7XUZodIuHltVfdGzHa6H0+tdDo9rMNH1GXVbK4uLgxlrecXGBH65Gea4m5lliuxdiZZWd/mZfXvVlNSELTllkkt5EI8sSlfm9TQqcklazfVsWh1Gk2+l6lYW+bqWS7ST99AIjtiT+8W6Yq/ealDY6hBHpFzdQWARlkRs8E/wAQI6g1meFStppFzJ5W6SbCh0bjH90juPaq9xrkcdwbW1s0QSuFEZPyhjxxnoKzlCrVnJRWn9alxhoXLSG307VYLi7zPZy/OsudxJ966HSvFFpHqA8jTI/KRiSSMgjtkVn2XhpTqrWjJPcXMaB2jhICRE+ueorXs/B32jXGjsLjYsfzT5BADdlpSwlS/O9Xbf8A4HcpRktiTxBbrq7yTJHDDKV+cKOAuOwPevOrnUtT0id7Gcv13BXGCuQRkH6Yr0iSHUftsplKOm4/MOgx71neL9OsvE3htdWSVhfWI8ubZH94dhtH4c1eAjUhzRqm/K0rnmaR2sjkvmN88Z6E1c/sXzVBRtxxg45x9K5yS78thy5bGNy8Gr2m6q1vMJA8oUno2MGu+UZdATRdm0ma2JbnGeOOPxqlNb7Wb5cZ4x1xXd2xi1K0ViRu25OKyb7TVViQK5lWkpWZ0ezUldHHw2ySXiLPGPLPykE9Pep20l0vAo0+SWPPysZOMVJqloQuD+Bq1pslzHEtrcuzwsuYpR1A9M+1dcZtq6OeUbM39Ct4LfV7bzHn81iCI0OFFUvE0CRavc44O45U0ti1tpl/58Re4ux93cxb/wDVV7xLAX1VnYcyKrEDpkjmspO2pUVdnPaerCRWedo4wc4B613FkymBWBCsRlWxWHFpQaxWXy9yIw3ccc1qLNapsiuztjdgqk/dz257VF+eKKas2en+E7a/udFS4ikgILnlTgHFah8PXD3DXMk0Pmn05yKXwlaxQ+GbdLc4T5mAxnqTWnCshkzJGjNnCkKc4/Gs54anP4r6mdjIl0iWRgftR2g4IMZAqy+hW9wqMki5H8Wzir7xpul3E5k6rgflVG4ttTuZRFCiQwAcOHG7HptIxUrC0lpYdiq+gjzRuvo0AHQU600mSJ0kgnR1BIBYEZrYWzhEASdwWH3iVGDTvs1vAvmF9iL82QQABWay6gndR/ELmBJodzNcGSeaHeGzgMabcaJfeZGLeS3GWyys/NdDGbS43eWgywJ3bgc/lVZrRvtClI8sRkuMHH50/qFFbX+8NzEOiaibrzJBFtQd5MAVNdWs72xbToi823a6l8KfpmtaVJJPklmDKGyVC/pwap3UVvbxEpcvCrKBuOCFPtnvULAUYxcVcLHLxaDqXnxXN9pBkdQQrI4+X8M1Z0ieaC3uLSV2hRw5aYocr6Ae9bxsizJJNq1xHGnSIAKDx3xyaurHLMg8tleIAYHmHd+PFEcFGDThLYnlPmwgRjDLj6io965rq5rGyvLUOeOODms1vDrCEyq/y9s19FzHOpdzI4OMYqRAnOQTxxg96idDHIVPanIQM7snjjB71UZlWLCKdpYAlV6nHAqZWwAQ3PcDtVYkxw+YenYetZsutmOURpFyTgZNbRryjsyXBHRqy+VtKAkkHf3+lSfJkbc4x39aj023mvLn7OsTvIFy3l/wfXNaFppM95fvBayKRF96RxgA+hq3iO4RilsULgGRGjOACO3pWAmr6jpU7IGYqTnYw6cEZ/Kuma2uJbuRGAJydzg/LnvVLWBp95pJuLkv9ogby28sYOO3H6Zrmr1FUe+ppy8u2xzim1uJCZP3chPGe5qWTR2dcq27tx2rnbmWFJQYnkOQOe9X9L1RreYMzybCejdDXDOD6FxkupZk06W3+bnGeOOPxqrNDgt8uM8euK7IJHeWyuCMFc1k3VioJIGK5PatOzOnkTV0cvHbq94qzJhD8pB7VN/ZUkdyFFq8qZ+Vi/AFSanakLg/gatadLcxhbedi0bLmOTvXXGd1dHPKNmbekwxQ6jAJGnMhIIVDgCq/iKFY9SnxkHPKmkt3hsLsXClpbgfdBJb/wDVVvxHEZL/AHkcyKrEDpkioempUdTH0nIfDSFEBzXYwMDbhxgN1BxWDaaZm3WQplQwzWs08KNHHMSqswCk9M/0qH7yRW1zfTQ73XLKO5tfJKj5SS2MmlTwPqeNzy2oP90vmup8O2yrocRiYKCWYDGe9Xo4J/N3yKjHtgGupTklYxsnqcWfA9wEDfbYSB1+U8VKPArOgKajHyOpQ4rsJY+XUvIC38Has+5g1KZlih8uFB/Exzx9KXtJD5Ucx/whE4Yh7+3Cjvg1H/whV6RuhngkU8A5IzXcx2qiAJPKC46kLgU820EC+YXOwc5DYAFHNINDz8+DNS3EGS3BHbfUTeDtVzjNvk9B5lejxtaXORHGuSpO8tnP5VVNs7XAVApbHJBzihtgcDH4P1oEl4Y1UfxGQYqKXw5q+0mO38xR3RgQa9CkmdlMEsgKg8gLmqlx5MKfJctGpXHThajQLHnr6Bq8KebJYShPUDNVy0ixn924A4JKnivQ3t2Yo82qyIi9I9uAauR25uItsflyRD+EHn+VFkKx830YopwrYkciliABknoB3rf07wfrl+8ZXTLlYWYZkdNoA9ea9F+Ffhm2h0hdbuYA13OxELOM7IxxkehJzzXpPk7+vNAHGQ2cdpBHbxRhI4wFVQOgpxSutfTkfqgqF9Kj/uUAcsUpNldI2lJ/cqI6WnoaAKmix4uGb0FdCtUbSzFuxK55q8KAJQacDUQNOBoAmzRmowacDQAuaUGmmlWgB1QzDnNT0yRdy0AVh1p4qMHmpRQBh6ras135gUkMo5xVEW/tXWbQaz7m1UTZRcA88UAY4t/aniD2rSFqfSni1PpQBmiD2pfI9q0xbH0pwtT6UAZXke1KIPatYWh9KcLP2oAyRb+1OFt7VsCz9qkWy9qAMUW/tS/Zvat0WQ/u077EPSgDhnur5dVtrdClvbSRmRzHCFxhTknjIGRkVia5o+r3brBJfPJaxWaRsynersW5YjqOOc12d8bB5P3z3SGWKW3/AHrjc2OvP54rGu49qWRsY2DXbLHPIrElUiBAyR1r4j6zKM7qV/63+65bjocTF4a0x9Uhi0i5nN7ABMGIDROmcMfqD2qHUfCHibxNqazweHZIJCfLmYJ5cUhBx5mTgDNeu6DDaaNp6anfx28EyRkGSRRujiHU8dckVsP4l05oIrlrw28LxmRTKmBs/vEngdR+Yr6HCqUoKbldMj2aPOPE+l3PhzStOEVrvkhQeakK7h75AGPxrym4ur6HxBHfWlneFFkDcwsOM9OlfVkMjTxrMso8rsxUgt784/wp/mZBAZmbsD0P5V2xfKaWurHi+i+OrQf2kLqG4ivLlAEmMeCuO2B0A65rutF02yXQUXTLsFrhf30rH5nz3PeujeGK5bFxZwEEc7wrge3rVFvD+gw3f2iOzWO47yW+YyPToRWc2+hUTO1vSbeKxjS0YKqLtZI+SfrXH+IrObw94Cnk5S4vWCOQuSsfPB+vyivQ7bRbC31KK8drslMhVnlJTJ788k1yPxbSW40crnMYZSgXoOOc1hTXLK7NZPmjyo+fJpJZCWDZYk9MAflVJnC4EhLOOwNWboiJ2y4JHHHSqkMLzyYXGfU9q9FdzlOj8N6s9rKYizsGPzdworrJdRt5sZYbjXFW1lFCFWWXarHHHc1oRW7Q6itu5JjkGVcdM+n5VzVIRm7m0JuKLWqqrRZ6g9CKTTJPMs/LO3chOCfSqt8ptbeSMsxCZkBPdc9PqKp6dfRvdLHEeSpBzV06dkTOdzZgnkgvA00ytjkRwRE5+p7VpeIb9YTa3E+AXhBxjFYDh3j85pJfJV9rBX2heepxVrU9NfUrQQyArJbQs8Dbs7gOSDRJRbsJNrU0rbx/bjw9c6Q9iqeY6us4OTwwOKct95tu6jyyOuJDwR+RrzdZDlSOCOcmtWG/kmRNwDY4PvVOmkhc1z6X+HmqQ33hWO3LRK0LFCElBGDyOvPeuwCGJcISMc7V6V8t6Vdyx3Sok0iLj1A2kY9PrXrOn/Ee30jTbS31BrkuUzvjVWBHbOTms+Vt6Id0lqz0txN5iEACPuFbB/8Ar1DLHdgsYCoU45LEH9ciuPt/iVoEzbjqU0ef+etuSP0zW1aeKdHuyoh12xYD5vKUhM/ng0mpLdMFJdGaKR3E5YNdROygblReSfQn0/Cl33/mCJ7QGNhy4uFOPwxTfOjYvNA3B5aRGDBh7ZNJ9rkkLAooi/hJkUbv8O/5Vn7SK3Ls2XIvmRcwbOufmwB/Kqb3FjEJNi75CcN5L5Zj6Z70LJcLCissTStnITLBfQZPUU1Jr9YtsqByBgC3+QfgSetHtE9BcoywjEo+2CC5t94OBI25gO+RnANRwi1dyBsVUY4DJjPPJB7mrEczzu65lbHGOG9yM5qzFBg713ox6qUzz+tS7S2K2Mu6S3mvI2ay85o/mWRoyxHuD/hUnkXMmUgiMYPPyKqkH68mrk11LkBbebcf4sgD+tIpdLjeqxopXLsc7yfTAFTy67hfQ+fntJFcKpY+wNTq10cQtIyp6VuXSWdlOPnycc81nXMizsGhGB61rWxUaT5WzJWl0KsmjxsNyklqbB4a1K5cCKwmIP8AEV2j8zXZeH5LTTbN7+9aNDzhpP4UHVgPrx+FbD6zZvBHdG7aCFo/MXzVwNn9454HUfnXXTnpuS0eYeKLG50tbUPDzGPmVBkfpXnt1dFNTWaINgNnkYr6WjdrmNJVcGI8hmjILfgcUx4oHDAwRyN2DIMH9K05xWPMvDniGzFtcxOGWeZcLIByPyrq9M021+w7bOchpQfMdjgtmtNtIsLh/wB9o9opPVgqtj8uajHh3R4J98MU0UncwyFAP1xWM5SexpBJFDVNKtrWzVYGVcLhgh6n3rjr2yaDQL25KnfMyxg7c/IOT+fH5V3n9iWAu455Z7x1U42zP8h/MZNZfj6zY6Y0cG0R4Xy1U8KMc59axotxk+ZmlS0o2R4jO8zE4wTk8gADFVgwyPNJYjsKt3sRgkYSNyPyNU4o3d8ou5vX0rqvcwsdV4f1BIMwPIzZPI6ha3ZpYZMEEEn0rjLKzAaNbiRkjZsAL6+9bsVjJHetaMSpK745Ox9RXLUhGTN4TaRHqcI8rnkHoaZpjebaGP5d0ZOCfSnak/2O3TzM+W5Iwf4TWfpt3EbwpEQdymtKcLIicrs0I3lhug086vjkJFETn61ravdRxwWlxcHbuj6YxWPLG0kXnM83kq+1gjbdvucVZ1DTH1Cx8l1dXtomeE7s7h1INNuLdhJNamnbeMdPfQZ9PFt5Uu9GEhOdw3CoJbkTwOmI2HXEvSuAilwQd2COea1o76S5KMUVgOB71TjYXNc938FXwuvDMcIKgxMUOyXd79+a6Pa8Iwrv0ztByPzNeEaZdTLdIqzSKvORn7pGP8a9DXxnHp1rbRXM8ysyA5VQwP1zzSTb2QOy3O2Y3HmYMYEeOqsOKhlivRuMG0oe+7kfnxXLReNdMZ932+RcjrJDkfpmtKHxLZSBAmr2jKOfLRdmfxOKHzLdME10ZoCO4uSyNdQu6j5lReSfTNJIb9SsJssqw5YXCn9MVWfUoWMksL4Xq0iMHBHtzxUC6x5+5UV2jGNu5dm4/U4rB4qlF2k7FcrZswoXhAFsEfGCfMwB9TWe81jbLJn55gfmEEmWJ9B61D9uuBAqPHEztn5VO4KOwJ7im211qHlASRKxXhRbEKB+JPWlDF0qj5Y6g4SQ7TbcTB7sQXEAbO3c25sd8joKpwx20kj/ADCNYycb0xu56g96u+fcXLso85yOMLtb6jO6rUMD/f2ujf3WQHn9acowk72BXRh3N4A/lJavPnnd5ZY49j/hRAL+XKW9rKmeyqAR+PJrakvJV4W0myTwQBgfzqJJGjn8wRrGNpLvj5yfTAHNc06F5X53YtS02Pm2nVHmnA16xzn0r4QA/wCES0jAAH2SPp/uiumhXNcx4NBXwho4PX7JH/KuohoAnCUvlA04VItAEBtwe1NNoPSroFO20AZptPamm2I7Vq7BSiMHtQBkeQfSjyG7A1siFfQUvkj0oAxfIk/umneS/pWx5I9KTyR6UAZHkv6ULC4P3TWx5Q9KPKFAGUI39KUxtjpWr5Q9KPKX0FAGH9kbPApwtZPQ1uiFfQU4Qj0oAxFtn9Kd9jLdRW2IR6U8QD0oAxBZe1SLZe1bQgHpTxCPSgDFFiP7tOFgPStoRD0p3lj0oAxPsHtThY+1bPlik2CgDKWy9qkFn7VpbRRgUAUBae1O+yj0q5gUcUAeT2M9mbK1a7ZJJcCRhMuRG7emeT0qa2l1BbG3FtpySIZX812GREN3BHbNct4huVu4rY2LxSWobDPu/eq3cN+PbtWkuq3Fte2cDXL3MsoBjVjtSLjHK/hmvhuSz5vWyX9fM1SexB46vJUik063zNLqXlvK4yfLhBAAAHTlTn61U0u6Oq63qsGopLdaLo4klitFJVQYwAikD+EbT17k5rq9VjWFy4jjM32dYI3UEMQWBY56dxjjsaw/DOgXurHWL2cm1gvbgcIcfaVwzEKfT5hX1GF/gxv2X5CluYt18TdUvru3a3drdrh18xCAyJGCQQOPTv7V2mneMo5LuOJ9DFtBcymKKYr5eUC5Unuf8K8m1VLC31K/j09yIYWaKEvglsZBI/I/nTLLUnm1uyc753hVdse8kM4AwP0Ga6nZEq57ja+KNInKeVqVvkozMiRkcr1IJwSODjjnFact/wDZ4bd5DIfPG5EW2Ytt46jt1FeBWV+NHfUpfsQm1JW8sCUZWNWBDZHc9BzxXU3Gvy22nnUb7Ur1tQvIpGtbWKU7IM/LkjscAn+XPNTZFXPWIbqW4HmrDcqhH/LSFl+hA/X1qVnKLtlKNnJKyLksPYd68q8Paknhrw4mrXt3d3c+oZWG0E5wqqfmZj1656c/nWpY/EuW8vp4EtbVrhzHFZwAE+Y5OGJc9h+FDgCkbmp+CvC+vPO+paLFFt6TwRGNz+XX9a5C++CmlTOh0q5u1V+f3kIwv4/Kf0r1a1vor8JJbOsiBijvGhwXHBAPsQc0+S6sPMZZLuNCjbCDMBluuPrjtTi5LYGk9zxG8+BeqDb9n1G3c+hZl2/mCKrTfC7xaZbeNGsZHj+ZdsoycDGTz717obq1Ur5U8JLHCqJlG7HYDPNRy67pNvHM1zqFunl4DqsgLKT0HBJz14pqcmLlSPAb74S+M5t7yQLICuCsMi9OvrWK3w28S2Ewc6PeKyHJxGXH/jtfRE3jjw3bxKzXhIbkARMWP6VDH4+0G6YDzJ1TaWLNAcce4q1Ka3RNl3PnyTSNYthdRyWLRecPmDxuMds9KdJNdlkRniQgEY5z0I6H619B23jvQrq+FpayNllJMzoEQADOckg4qC61rwheRlr19Mu2X7xMGTjOM5IpqXeJLT7nzmuhwf8ALQZ+gph0OCFlKy7AeT97j9K9v1O++HGZlGnh2j4JtY2X8cggEVzl1beCmtjJZ32pmX73leWrBc9Mk9vxrdSi90ZtSXU81hs0WQqZpx2yCcH8cVoIdwBedgMY/eOG/rWpP9kil2SOdrDcr5wpWq89vp0CCZIVkjOCc5zz+netEorqjNuT6FdLO4cho2icD0PJH4UrxXCOFVYvUh8g/wCFTlYourQ20TDGc8r7/jVQWttNdiP7QZJFOQ/Xee464P0q7roTr1LVg1/p0rzW91fRMR0R9g+mRWza+KNehYNHf3TOvUSYkA/MHNU50ubWESywk5yAEXk/h3qol1drZGSNFj2khsxYP0xSlCk/iQKU+h2Nt8RPEEK5uIbS4j774mX+RrWtvi7aZIu7G33gcGGcfyP+NeUXV1cvEJBcQ+UcK2Y8fr1qK0sLGaRjcxkKABlScbvQ1hKlSbtGJrGdRK7Z7YPih4bkSONrh7Ofj/WQBv8A0E5retPFugXbxtDrFr8+Sf3oRh9Vbmvnmez0dHRmSYBlY/Mx2jHp+tVX1C0jZYo4gUA+8eo9qxeHp33saKrPsfUYeG6jR4le6TJYM5DBf89sCqja9oUF7LazXsAvLcbiqKS68emDzjsK+ftG1xbaVXsrw2cobKlS31559qm8R+INTuNkdzN5kU+GWYKu4MPQgZ9+tT9XS1uUqreljWRVYFZz8/ua1tKs1mhbGOtcPc6r58m9X5PWtLTdXm2iON2BPB9K86EFKq5S26GrjdWRs+JGkjs00+2UyzXwVXbk7IwcYGPcGmW0r32u6pHqBludJ0pXkjtFYqmUA2KQOwwa6CGB/wCz7dwu6Z4NiEA7gC2WOfxGPpVK20a6vrvVpsmCC5lVSVOPtAwSQp9MkV2olow5viLqV3NBtRImmcbwUDKsfTA4rprLxNaPdJH/AGT9linkMaTlQgKgcE964C/j09b+7FgzCKLKR78EsRwSPbg1BHdfadctFAaVokXCbj8zgdP0Ga1bsSj1i31vTLiQLBqcBbYWMaxkHjr6Z6Ht2q/NLLbRQvJ5xEo3Kq25Y49x2rxy3um0ia+kW2El6rFCJRwqkEHjvziuil1Oe208ahfajeG8vI5Gt7aOU7Yj0yRniloVdnoMVzPMvm/Z7pUx1kgK/QgUk4guIil1bRyDByJYwSR7VxGm6nJ4a8PQ3zyzXd1qJIjgklYrGinljzkkn0rVtvHqy3clo1vavdHYkKoDh3P3vm54FDig5irdfDzwzqzyzPZ3diQc7owQG+g5rGl+EcOVOn391huQXiwAPfJH8q9RhuI79lNtKCoJVnRTgsOMA+xpkjWkwwbtQQ+zPncM3pTV+gtDy5/hhrVsQI720m4wA6n5frxTLnwj4p863CRWbyRjHyueeMZPpXqjJDEFBljTJ4zMBn8M81XfXNJgZ1n1C1BB+7G+5v0zU8sr6Md0ePX/AMPvE90v+kpGVHJWNh65/rWUvgfWrC4EgsZ8p1wpYEfhXt83ivQLZQZrtVDDcB5ZJ/lUKeMNHuSALi4WMKSW8o7cUJVVvZr0/wCCJ8p4+1tfwi5jNosfnYyG3ccY6YqR7u9LgZjQ7GXbyTyMV60ni3SJLn7PZjDOD++cKqjA6+pFVZL/AEW7RnvTpVwY/vuI2BxnHBIqldbxF8zxkaJD0df0pV0dISCjuoPpn/CvS9S1vwZCJ0t9L+0SoQAU3Iv1yD0rON54US2UlL2a4I3MIyFRM9snORWyae6IafRnFQ2ZVipnnHvk4NXQ5YAyTtwMfvHzVm6vbcSsqjYp+ZWJyNv41XlvLFMMsAccZBHP+FUnFEO7JI7aZsMjRsPbvTjHOpAVYx/vZo+0oiD/AFUEbDrnlfeqKpHcXaxLcMzAghyfveorTnXQnlfU0bYXds7ujPGSOPLYqT9TVgT3TsD512HHfzScVFcSXdvF5jockkAKOvpxVEX96bbfuZWXOSVA/DFDdPZoSUujN2PUtUhw32uYqOcOxI/EGrsfje6i4aWxcgdSuP5GuGuridojItwPLbAYMpHPrVOC1jlctO7hAAPk/velZS5L+7BFpS6s9O/4WBAiosqW6yjqUYircfxB0gyL5hlXceTG6k/rXmQtNNWJDM06swPJOFH0qDzNNV1j8vKj+MnkfWs3CPVJfeUpS6HsDeM9HaMbFvLjkkB1Bx+tSL4y8PRS/v8AzBKoyrJAc/qOD9K8stbmxyrQyRRvn5c5P9aq32pSSZjYFVc8MOxHpVOlTte4Kc72MKlHIpdtKvBz6c0iz6h0iEW2l2cAGBHAiY+iitmE9KyrGQTWlvKvR41YfiBWnEaALampVNQKalU0ATing1EDTgaAJBTxUQNPBoAmFOFRqaeDQA6ikozQAhopM0ZoAWlpuaM0ASA04Gos04NQBODTgagDU4NQBYBp4NVw1OD0AT5o3VDvo30ASlqaXqIvTC9AE2+k31AZKTzPegCffSF6g30hegD5k1PUZ9QuZLWwdjFagvIqRBecDc5xz+f9a6KTWrT+yRaaNDMtzaKJZZZ8GV1HJYegB/hH1rD1iWxj0m6W2P2aKVlF5e2iYt7iYZKoqt823jqCBnnHSsC+mvbTyXur2JWijzbtA6uZVbOcsp/MHnmvFeHcoJR0N4yR7je6k0Gl2c14Y2WKBbqYgY+UYAj56kknntivOL7xxf6hc2c9qxtLO3DwrbQ4CovIGPXK8fhW34oZvEl7omj6TC5na2SV3U/JsK5wf1P41zuseHP+Eeuzb3MsTTlIpHii5SNWz1PsQB+Oa7FF2shXs9Tn2s5Gug0A5yCiqOAM4/rUiwz2DfbkZopEl/clD0Yd/Y1pXSxwmLyGDO67gOcrgj9OKzrq4uWW3tFbL72Zwg5GT3q12ZPoSWdzIZNQlLtI88IYNtySwZTRqBnu5LXe8rMIgHZ+AnJyOO3P61WtGeyuftDszIu5TxjjB4rXiitpbdr8ylYQ2NzHGD2Hv3qo6uwpbC3erQHw3p1lAQJlmlAY4+SMnoc9OcmodFjl+2G8glMQicPG/dT1JFU7uwWOJo1kCpI27cGyMc8fjir+ozpA0MEKbIRj5gPQYz/Oq0i/eFvsdxbeItTv7HVo7NTAoiWa2aNsAQh9rLx06kk+tcVe3Fze3kjPdtJKSAvmHIHbOa7bweVl0nUdEt7dsyQPKZB9+TgbVz6ZPT61yV3pNwn2mOWDyMZDZ6oQOQB9acI82wTdtynbOGvfILjKnaCrcofY+5rYuoFsfKAMZTI8wE4I9/frWXpNpJHGryQKV+7/APXzV95yRJZxBFuGIO8rwoHTOc0Tk4qwRim7ld9Jh1DUldrz9zERhQcFvXmrU2pQxSNFboImikxvPRlHBOc4NT3NhFBpQ807JtoLHIw30FQW2nW8bxSLbsYZIz8hY4574rByS3NbN7EEqMfJMRVQVyW27gBn0696049BSbTHmunZCcOyBuB/nrWhBpVg0sTxQ8rGAzK5/I1DdXfk3DRXDRxRbgC8gG1s9h3oU+sQ5e5hXEcemqrox3gFcbdxY47/AEGKrqkMpFxx5bxkPtOcn0Irc1/SDqZVLTAkjTIck7Tnt+Vc/o8dwLqaJCLaURkyRlOhH93Pr9eafPNbE8seo3UIDbRo6SAyIhKo45Ydxz0Ge1Z5Nxd2LfJs2DMeF24PcVqarcRtZpCYRNd4BBx0AzwSe4zWHDJISbV7g7JFzHhsjPofTNae1dtdSOTXQha2a4t0SbzF2EAOx4GQf8P0rTtYIIoGMqxztwTt4wB0wfWtDSIk1aTybhNjqowyjgkDH496oNp13YajJFEQ0KfMygfw/wCRR7TsPk7m3pdrJqEET+awaM/I8o3cZOc+/wCVRWdlfReJ7hzH59qFJEh6ZParekmLVI5LYthFxn5sED8O9bdxPbWMaL50cQVGwrsBnA/lRGba3BxSZ57dq0FxcWLRHytvIA5LseoxWdPcXFg88ZAIYBS7DvweldJ9oSSAanMQlxvB3KTtK7hnB+lY2vT22qG4mg+RkfIwPvDjnH6flRFvuJ27GY1xeXQ2uTIhj3Y/uj19qga2jt42aQkMceWD/FmrcUotrS4tJZMEsFAVcP6kZ7dqrmOWVcRJ50aNwp6Af/Wwaq7YCJAokjaQ4ds9Dj2Brd1K2byoYpX2QRptT1JAB49c0gh062miuJCJYzGPKVz37k+1a9rcLKJLQOlxIBvRgQ3y56/WhSE0cVEklxdLFCDk9faupby7W1WO3T96o+Y+lXrZ9K0+0kupFRbibgD39KoBUdXb7QpLc4BrKUZyiuXRstOx6cNQTTtCtproqyw2wlfbgcAABeepJzXmGpeMNQ1S/guYHa3tYMxx28fCovP55H8q6bxJbnXp9I0vTo388Qq7yKTs2beQf1P41g6z4ej0Py45pEN08UckkcY+SNTkZz+A/Om7vRAc7BbSNdxvERkEYAHTnHP51etY5LG9N7E5SRWJhKHOCM81PHb7biIREFphlRzlef8A61U9Ree3e3gjlAlG7zBGORz396pabi3NW1LOmpStI0rzwrIG25JYMDjp1yf0pt0r3k9oztKyxwgSvIMCM5O4cduayLHfbz/aZJHZFDDrjPBwP5VuafZxS6Fc6lLc+TbKSq7mIy/ZcDrnk/hQpag1oGrapazaXZx2mVYSPHGWxlIwf4vqTmqGnwSi5N3G5QIwZX/unrkVZtNKjm06WJpBEGcOHJyDjPygdycfzq34puLOyu0sLG3eKJNvmOTwxAxx7dfrTvbVhvsa1lrOo6la6hHaqVRQjRBOBsDYYcfUmucupbmW8cNdM5Q7Y1f7qjP6V13gifMclhBDhCrPIT1k4+UE+mTWX4n0qS3v7nfDHBG/IZDlRgchfxq6auKRzy3DNdGN2BA+UHdkqfY/WrV0PsuwRCPB4YdCPf3qpDDJCisY0YHgYP65pk13I2Yo9qvnOcdKuUuVEJXYk1hBczoTMzbCMgtyfXmr/nrCfLgXZtOMnoRULIsFoDMvzsM5yPm+lVvtgt3DJbkoy8KW4+tZ+0ity+VsmeCQFWBAGOTjIAqUwsdOeSViOQSufWooLt7hlKwru27SVY/rTGkm83ypyqgHJJHy4pc6fwhyvqVFj+z/AL0khxkAYyTUjzJIgwvDKcle59MVPqFr5+EhPzIvXsaradw7bHEMgU7lx6elF5IdkDxmBQVky4UkKw6+3PSolV5oGYx7XUfJhcVakeIqF2GWduRxVf5wDC8jKrDKc5FVzaEcpXMP2iBVlLKVIAJPAqaMQwxsGVZTx04wB/WlSYTttYAEDqB1qBQ8cjbcGNeqY5xRzroPlNGyRriMOsp8xT8pf5seuaY0txb3kjyEPDjJfHeqP2zzZPLhTbz1J6VNP/AJ5+x4YgD8qSnpZBy6mdJeOyvbqg8sjnI5ye9QG9uYN6fKcgAsRVuJovKMmdrhsgjoRntVO5dLhpHUYOc/WhN9w0GvcXVzhZXZ1xnHYUxrZYwS5xn7vvmnglUaJmA5wOOfenLHIyAKPMVT0Pp/kUwGpbhWQucE56HFaN5EQIw74iC4X68UjLAhSTZuTb8hc1JG+5GhaQSfxKdwOPemnYTM8xUnlcVoGCk8nParA+iNAbfoOnMBjNtHwf8AdFbcVY+hMH0SwYDANvHx/wABFbUYoAnWpFpiipBQA8GnA0ylFAEgNPBqMU4UASqalFQrUy0AOoNLSUANopcUmKAEooooAM0uabiloAcDTgaZSigCQGng1GKeKAFJpM0GmmgAJqMtTmNRE0AKWpN1NJpuaAJN1JupgNLmgD5X8R+GL6DVbp3jjFm03EsJzCu7JGNpOOh6dMVjHTHt4n3uFkQjMbKclSMhs46f417dNeQ6foy+TZXKtcyFrmaKNWeMscABATk85I57Vl6TJpN612dRVEtUQ+TM2lqkkaIfmWQlSpbnt71xwrabG7p6mxpF3d6fb6JHbaazTXWnLGxCYwu0cs3qMkgVwPiie/n8XX1xNHIsGFh2sm0PGowMDv06+1eia3rllp+mxz3WS9vM7QIxwSQcJ/46c49B7Vw3xE1tL7xNOkQjNv5KNvAwWyOR16c1NKSb1CcWlochc6uY7gyR7SzBkZG54J/WprWdWvjOhbzAcEkYyc56flWA2YbmMgjJIPToD6frWlZ21wkss1xlNhYNz3zW3s77GfN3Or1mzWaRBkRxSp5mRwCMdCKdLawzaSsEG77OioSuBznJ3friq2rXAaxtyHDSrFzngEYI49+9ZemFgoXzG/fEpjPJ/wD1UpNgrF+4VJLZfJiddgVC+Omf7vsfWnX5isV8mZ96Ls2jHJP+FWJpShjtrS3QqkYZiRyW5HP4ZquyRarpDcA3KOfNbd175/KnzIVjpfCOsw2EVxcO8zie2aORYX2nIPGD+H5GqV3fyv5cCx4AVmVicgKSSMnuaydCu91tdDYF8s5GOjD/ACP1pmHhl3zKtzL5mfIZsfIB29qmV7abFJo2/MkjVHMaoZOpb7oOOPwzzS2kaSlLiMrLvXa7q3GQazZLqWYxxuN8bAF0U5zjpgYp1s8Nlp0nlAIJiR+8fhe1JyjshpPqVruc3l3IpkyIXwMAYAzjNdBoNqRDJI0kkhUYaPORx6Vxmnyomou5j8yJmOEX5QR1BHtWlrGszwWPkW0JgaQDLBuSnOeP61m4q5XM7HV6VrumtLOIiqk5dsdQB6/jmqepXllPp5vJ/JmcMZYlibBxnjPf61xEBk0YTRTwwzCRA6Medvvx7dqdqKypaQEo7RuPkZ2CgDuMD+VXZrYV0dda+MLJrZobjiQg/Nj5Sew/AViXvieO6vh5CSQkrtZlPXr2rEXSb14/OWOV23DdtHAXrnFIXhtbyVvLV0xkMD90eh9aGnYSsS3VzK8bQfIoU/NL1IHpSacjiTbDGZJlVtrtwRn2/CodOntRMJr5HlRn3bQMZ9yf6VavL+2VTNbeYrF8hTjoOn8u/rRytD5kxdK1a4t9WEKSPArDDq2Wwx7jFbuqakPslwst2sXmPhGz26gYPIFYejywTCS4dhHJtIJZd2Rg8n2rCupHkmM07/KG2qFHb1FUo30JbNCTW5LSDZZEqHb/AFp+8QOlO08PfasrXUshjf77k5PPUEntVu4s9Ml8Nx3I2QyyKQPnyxwT2p2naUH0RpoLjEjbgUkPBOfl6dPpWvsXsiPaLqXddu7W5gSwtE24IfcnQADgD+tcpfbrS7aISrIgAAKZHT1/KrlpaS6drcw2Le/Zl3tjpuxx+RpbrWYru9KT20a2+MMkQx8w6Gq5LbiuUrZS0hMnJPBO7AxUsOqrYo6Rxhg/8QPGfSmagsqR+cIvKtpXPlA+g7fQ5/Ss4lCHycEfdA6VLhfcpSJoxJcSPKzZAOWODgf59KuTgWUkL2cjeaybiRkFT6CqcU9xDbSRxuyRvgso/i9DTjcMVVWYjI53dxjj6f8A16rlQrs7LU/Dk1xdqqDcG6bDwKZbaDcWwYvIF2nGG610FhdWFnpLrDBdu27E1yx3FSf7g70zS76KQ3P227kEKZKMbTBUA87ie/TpUcxty9ToYby500afDFZM0lxa7GIXgLgck/jxXF+ILm7u/E81xIji0jRYNpXbvjH8/Xn0rq9b1u0s9OjmuwzSQszQq3BLDAU/kc49q43xjrgn1y5WHZ5DojggYJyOR16c1nGSvqTJdjDutaktNRd4dhkUshVvmBGeD71Es4ed51ZjKTySOp61iu2y4Vs85z06CtG0tZVMks2UAzkE85q3HQlM3ZSZ1SNsRxuN+Rxnjoa6q702HUPDdtY6YX8qFomdcD59yljIeeOuOfQVyd2VFvDtYM4TnPA6EcUmnGW3cIsrj7VmJgp5YcH9KltoasdrdRQCwiW0tHiG2OA3BT+8BwgPZu5+tYni+KCx1TyHlMiKiYJ6sQMZ9hXRrcXriGw0rT7dobe3SVnkHzl8bRk54OMniuNCprNvcyzyB72NiZOfv85J9uKOYbR0/hW6/suynvopC7OnzqD8uQTgH1zgVna9qs2sXMMTQpGyR7lWM/KAeevrTvC+prJpmoxmIDyYy4AHEgGOo79OvvWTZr9lU3swSaYy8QOf4AP5U7voLQbh4yCwxu49hxUSxKAJeG3Dkg8dahnvS0u1huU8lR/SoHlUW2I/kVzzuPSrc4vYnlaElDXMrHeSFOB6CrtnZKytuZmYDBGc9KzbJ1WUkRl1JOFBxU19fOI9iQmIkYJLdqytHdl3Zp2VzZQyPsZemeDyPwqK5liZftL7GOSVVTzisUH7AHRljl3DcrdcUkyTeVGxBKsPlLNgAVXM1sKxp/2lFKhiK4J53D17VSa9haf5Q6HuwPX8Kp+fBDy7s0u7nHTFMe+tkkZkVWz0JPT60nzMFZFiS4bBRMKFPLnr9KIZpcbIkMjgHDHtVK3vLVZd1xucZyQBjNSTalCDuhEgOe/p2oUZDuh1vdMlzsLMi/xA5PNWrm5It3DyhEJ4x/nNZ0dy8rbwoXjBLdxVSRmkk3SnAHAAqlG+5LZO9/sTbAuAT989abA7PPukDFT1OeanENrLZg7RE397fkn8KfFZn7K7QyZzxtbj6f8A6q05exN+4t1dRzR+VFF5fOeD047VnSOY3KBgR6ikdPs12UbDlDz6ZqTzEaU7olxjkL607WFcInAyW5Prmni+aEFYwBn0NV7iIo27BCt92owq4PPNHKO44yNIxZiTS9CNiknFNBZFIBIB6j1pyyFQcuQD1Bp2C5//2Q==", + "image/png": "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", + "text/plain": [ + "" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "show_images([\n", + " Image.open(\"data/examples/templates/image_depth.jpg\"),\n", + " Image.open(\"image_ControlNet_sunshine.jpg\"),\n", + " Image.open(\"image_ControlNet_magic.jpg\"),\n", + "], resolution=256)" + ] + }, + { + "cell_type": "markdown", + "id": "1bb8d720", + "metadata": {}, + "source": [ + "## Attribute Value Control\n", + "\n", + "[AttriCtrl](https://arxiv.org/abs/2508.02151) is a type of controllable generation model capable of injecting continuous value attributes as control conditions into the generation process.\n", + "\n", + "Run the following code to load [DiffSynth-Studio/Template-KleinBase4B-SoftRGB](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-SoftRGB)and precisely control the overall color tone of the image by inputting R/G/B values." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3352ae2f", + "metadata": {}, + "outputs": [], + "source": [ + "template = TemplatePipeline.from_pretrained(\n", + " torch_dtype=torch.bfloat16,\n", + " device=\"cuda\",\n", + " model_configs=[ModelConfig(model_id=\"DiffSynth-Studio/Template-KleinBase4B-SoftRGB\")],\n", + " lazy_loading=True,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3b6a871c", + "metadata": {}, + "outputs": [], + "source": [ + "image = template(\n", + " pipe,\n", + " prompt=\"A cat is sitting on a stone.\",\n", + " seed=0, cfg_scale=4, num_inference_steps=50,\n", + " template_inputs = [{\"R\": 128/255, \"G\": 128/255, \"B\": 128/255}],\n", + ")\n", + "image.save(\"image_rgb_normal.jpg\")\n", + "image = template(\n", + " pipe,\n", + " prompt=\"A cat is sitting on a stone.\",\n", + " seed=0, cfg_scale=4, num_inference_steps=50,\n", + " template_inputs = [{\"R\": 208/255, \"G\": 185/255, \"B\": 138/255}],\n", + ")\n", + "image.save(\"image_rgb_warm.jpg\")\n", + "image = template(\n", + " pipe,\n", + " prompt=\"A cat is sitting on a stone.\",\n", + " seed=0, cfg_scale=4, num_inference_steps=50,\n", + " template_inputs = [{\"R\": 94/255, \"G\": 163/255, \"B\": 174/255}],\n", + ")\n", + "image.save(\"image_rgb_cold.jpg\")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "00f4174f", + "metadata": {}, + "outputs": [ + { + "data": { + "image/jpeg": "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", + "image/png": "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", + "text/plain": [ + "" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "show_images([\n", + " Image.open(\"image_rgb_normal.jpg\"),\n", + " Image.open(\"image_rgb_warm.jpg\"),\n", + " Image.open(\"image_rgb_cold.jpg\"),\n", + "], resolution=256)" + ] + }, + { + "cell_type": "markdown", + "id": "ebf205dd", + "metadata": {}, + "source": [ + "## Image Editing\n", + "\n", + "图像编辑模型is a type of **highly versatile** controllable generation model: given an original image and an editing instruction, the model can make partial or overall modifications to the original image.\n", + "\n", + "Run the following code to load [DiffSynth-Studio/Template-KleinBase4B-Edit](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Edit)。This model uses **KV-Cache** to reuse the attention key-value pairs of the input image, enabling fast editing with quick inference speed." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "730bb8bf", + "metadata": {}, + "outputs": [], + "source": [ + "template = TemplatePipeline.from_pretrained(\n", + " torch_dtype=torch.bfloat16,\n", + " device=\"cuda\",\n", + " model_configs=[ModelConfig(model_id=\"DiffSynth-Studio/Template-KleinBase4B-Edit\")],\n", + " lazy_loading=True,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2f8da7ab", + "metadata": {}, + "outputs": [], + "source": [ + "dataset_snapshot_download(\n", + " \"DiffSynth-Studio/examples_in_diffsynth\",\n", + " allow_file_pattern=[\"templates/*\"],\n", + " local_dir=\"data/examples\",\n", + ")\n", + "image = template(\n", + " pipe,\n", + " prompt=\"Put a hat on this cat.\",\n", + " seed=0, cfg_scale=4, num_inference_steps=50,\n", + " template_inputs = [{\n", + " \"image\": Image.open(\"data/examples/templates/image_reference.jpg\"),\n", + " \"prompt\": \"Put a hat on this cat.\",\n", + " }],\n", + " negative_template_inputs = [{\n", + " \"image\": Image.open(\"data/examples/templates/image_reference.jpg\"),\n", + " \"prompt\": \"\",\n", + " }],\n", + ")\n", + "image.save(\"image_Edit_hat.jpg\")\n", + "image = template(\n", + " pipe,\n", + " prompt=\"Make the cat turn its head to look to the right.\",\n", + " seed=0, cfg_scale=4, num_inference_steps=50,\n", + " template_inputs = [{\n", + " \"image\": Image.open(\"data/examples/templates/image_reference.jpg\"),\n", + " \"prompt\": \"Make the cat turn its head to look to the right.\",\n", + " }],\n", + " negative_template_inputs = [{\n", + " \"image\": Image.open(\"data/examples/templates/image_reference.jpg\"),\n", + " \"prompt\": \"\",\n", + " }],\n", + ")\n", + "image.save(\"image_Edit_head.jpg\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "16fa68bb", + "metadata": {}, + "outputs": [ + { + "data": { + "image/jpeg": "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", + "image/png": "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", + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "show_images([\n", + " Image.open(\"data/examples/templates/image_reference.jpg\"),\n", + " Image.open(\"image_Edit_hat.jpg\"),\n", + " Image.open(\"image_Edit_head.jpg\"),\n", + "], resolution=256)" + ] + }, + { + "cell_type": "markdown", + "id": "8cd453b9", + "metadata": {}, + "source": [ + "## Style Control\n", + "\n", + "The most straightforward way to achieve image style control is to train a style [LoRA](https://arxiv.org/abs/2106.09685) — however, each style requires separate training, which is costly.To address this, we trained a special [Image-to-LoRA](https://arxiv.org/abs/2606.13809) model that can **generate LoRA weights on-demand from input reference images**, eliminating the traditional style training process.\n", + "\n", + "Run the following code to load [DiffSynth-Studio/KleinBase4B-i2L-v2](https://www.modelscope.cn/models/DiffSynth-Studio/KleinBase4B-i2L-v2)and dynamically generate LoRA from reference images to control the image style." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "51ae1734", + "metadata": {}, + "outputs": [], + "source": [ + "from modelscope import snapshot_download\n", + "\n", + "template = TemplatePipeline.from_pretrained(\n", + " torch_dtype=torch.bfloat16,\n", + " device=\"cuda\",\n", + " model_configs=[ModelConfig(model_id=\"DiffSynth-Studio/KleinBase4B-i2L-v2\")],\n", + " lazy_loading=True,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5fcc038d", + "metadata": {}, + "outputs": [], + "source": [ + "snapshot_download(\"DiffSynth-Studio/KleinBase4B-i2L-v2\", allow_file_pattern=\"assets/*\", local_dir=\"data\")\n", + "images = [Image.open(f\"data/assets/image_1_{i}.jpg\") for i in range(4)]\n", + "image = template(\n", + " pipe,\n", + " prompt=\"A cat is sitting on a stone\",\n", + " seed=42, cfg_scale=4, num_inference_steps=50,\n", + " template_inputs = [{\"image\": images}],\n", + " negative_template_inputs = [{\"image\": [Image.fromarray(np.zeros_like(np.array(i)) + 128) for i in images]}],\n", + ")\n", + "image.save(\"image_KleinBase4B-i2L-v2_1.jpg\")\n", + "images = [Image.open(f\"data/assets/image_3_{i}.jpg\") for i in range(4)]\n", + "image = template(\n", + " pipe,\n", + " prompt=\"A cat is sitting on a stone\",\n", + " seed=42, cfg_scale=4, num_inference_steps=50,\n", + " template_inputs = [{\"image\": images}],\n", + " negative_template_inputs = [{\"image\": [Image.fromarray(np.zeros_like(np.array(i)) + 128) for i in images]}],\n", + ")\n", + "image.save(\"image_KleinBase4B-i2L-v2_2.jpg\")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "b4a6609b", + "metadata": {}, + "outputs": [ + { + "data": { + "image/jpeg": "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", + "image/png": "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", + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "show_images([\n", + " Image.open(\"data/assets/image_1_2.jpg\"),\n", + " Image.open(\"image_KleinBase4B-i2L-v2_1.jpg\"),\n", + " Image.open(\"data/assets/image_3_0.jpg\"),\n", + " Image.open(\"image_KleinBase4B-i2L-v2_2.jpg\"),\n", + "], resolution=256)" + ] + }, + { + "cell_type": "markdown", + "id": "7918117f", + "metadata": {}, + "source": [ + "## Training Controllable Generation Models\n", + "\n", + "**The Diffusion-Templates framework allows developers to train controllable generation models of any structure** — as long as you provide the model definition, data processing logic, and dataset, you can integrate into a unified training workflow. Below, we train a **brightness control model** from scratch, allowing images to be generated with specified brightness values.\n", + "\n", + "Step 1: Write the model structure code (including the numerical encoder, KV-Cache generation backbone, and data annotator):" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c25c94f0", + "metadata": {}, + "outputs": [], + "source": [ + "code = \"\"\"\n", + "import torch, math, os\n", + "from PIL import Image\n", + "import numpy as np\n", + "\n", + "\n", + "class SingleValueEncoder(torch.nn.Module):\n", + " def __init__(self, dim_in=256, dim_out=4096, length=32):\n", + " super().__init__()\n", + " self.length = length\n", + " self.prefer_value_embedder = torch.nn.Sequential(torch.nn.Linear(dim_in, dim_out), torch.nn.SiLU(), torch.nn.Linear(dim_out, dim_out))\n", + " self.positional_embedding = torch.nn.Parameter(torch.randn(self.length, dim_out))\n", + "\n", + " def get_timestep_embedding(self, timesteps, embedding_dim, max_period=10000):\n", + " half_dim = embedding_dim // 2\n", + " exponent = -math.log(max_period) * torch.arange(0, half_dim, dtype=torch.float32, device=timesteps.device) / half_dim\n", + " emb = timesteps[:, None].float() * torch.exp(exponent)[None, :]\n", + " emb = torch.cat([torch.cos(emb), torch.sin(emb)], dim=-1)\n", + " return emb\n", + "\n", + " def forward(self, value, dtype):\n", + " emb = self.get_timestep_embedding(value * 1000, 256).to(dtype)\n", + " emb = self.prefer_value_embedder(emb).squeeze(0)\n", + " base_embeddings = emb.expand(self.length, -1)\n", + " positional_embedding = self.positional_embedding.to(dtype=base_embeddings.dtype, device=base_embeddings.device)\n", + " learned_embeddings = base_embeddings + positional_embedding\n", + " return learned_embeddings\n", + "\n", + "\n", + "# 主干模型结构(将输入的数值转换为 KV-Cache 向量)\n", + "class ValueFormatModel(torch.nn.Module):\n", + " def __init__(self, num_double_blocks=5, num_single_blocks=20, dim=3072, num_heads=24, length=512):\n", + " super().__init__()\n", + " self.block_names = [f\"double_{i}\" for i in range(num_double_blocks)] + [f\"single_{i}\" for i in range(num_single_blocks)]\n", + " self.proj_k = torch.nn.ModuleDict({block_name: SingleValueEncoder(dim_out=dim, length=length) for block_name in self.block_names})\n", + " self.proj_v = torch.nn.ModuleDict({block_name: SingleValueEncoder(dim_out=dim, length=length) for block_name in self.block_names})\n", + " self.num_heads = num_heads\n", + " self.length = length\n", + "\n", + " @torch.no_grad()\n", + " def process_inputs(self, pipe, scale, **kwargs):\n", + " return {\"value\": torch.Tensor([scale]).to(dtype=pipe.torch_dtype, device=pipe.device)}\n", + "\n", + " def forward(self, value, **kwargs):\n", + " kv_cache = {}\n", + " for block_name in self.block_names:\n", + " k = self.proj_k[block_name](value, value.dtype)\n", + " k = k.view(1, self.length, self.num_heads, -1)\n", + " v = self.proj_v[block_name](value, value.dtype)\n", + " v = v.view(1, self.length, self.num_heads, -1)\n", + " kv_cache[block_name] = (k, v)\n", + " return {\"kv_cache\": kv_cache}\n", + "\n", + "\n", + "# 将图像数据转换为模型输入(根据图像中的 RGB 数值计算亮度)\n", + "class DataAnnotator(torch.nn.Module):\n", + " def __init__(self):\n", + " pass\n", + "\n", + " def __call__(self, image, **kwargs):\n", + " image = Image.open(image)\n", + " image = np.array(image)\n", + " return {\"scale\": image.astype(np.float32).mean() / 255}\n", + "\n", + "\n", + "TEMPLATE_MODEL = ValueFormatModel\n", + "TEMPLATE_MODEL_PATH = \"model.safetensors\" if \"model.safetensors\" in os.listdir(os.path.dirname(__file__)) else None\n", + "TEMPLATE_DATA_PROCESSOR = DataAnnotator\n", + "\"\"\"\n", + "\n", + "import os\n", + "\n", + "os.makedirs(\"models/template_brightness\", exist_ok=True)\n", + "with open(\"models/template_brightness/model.py\", \"w\", encoding=\"utf-8\") as f:\n", + " f.write(code.strip())" + ] + }, + { + "cell_type": "markdown", + "id": "9105dffc", + "metadata": {}, + "source": [ + "Step 2: Download and preprocess the dataset, while generating the metadata required for training:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "94557ebb", + "metadata": {}, + "outputs": [], + "source": [ + "import json, os\n", + "from modelscope import dataset_snapshot_download\n", + "\n", + "# 下载数据集\n", + "dataset_snapshot_download(\n", + " \"DiffSynth-Studio/ImagePulseV2-TextImage\",\n", + " local_dir=\"data/ImagePulseV2-TextImage\",\n", + " allow_file_pattern=\"data/1770381050168240056.tar.gz\"\n", + ")\n", + "\n", + "# 解压数据集\n", + "os.makedirs(\"data/dataset\", exist_ok=True)\n", + "os.system(\"tar zxvf data/ImagePulseV2-TextImage/data/1770381050168240056.tar.gz -C data/dataset\")\n", + "\n", + "# 生成数据集 metadata\n", + "dataset_path = \"data/dataset/1770381050168240056\"\n", + "metadata = []\n", + "for file_name in os.listdir(dataset_path):\n", + " if file_name.endswith(\".json\"):\n", + " with open(os.path.join(dataset_path, file_name), \"r\") as f:\n", + " data = json.load(f)\n", + " data[\"template_inputs\"] = {\"image\": os.path.join(dataset_path, data[\"image\"])}\n", + " metadata.append(data)\n", + "with open(\"data/dataset/metadata.json\", \"w\") as f:\n", + " json.dump(metadata, f, indent=4, ensure_ascii=False)" + ] + }, + { + "cell_type": "markdown", + "id": "d48dd079", + "metadata": {}, + "source": [ + "Step 3: Start training:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "49c3d4fb", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "# 训练脚本\n", + "code = \"\"\"\n", + "import torch, os, argparse, accelerate\n", + "from diffsynth.core import UnifiedDataset\n", + "from diffsynth.pipelines.flux2_image import Flux2ImagePipeline, ModelConfig\n", + "from diffsynth.diffusion import *\n", + "os.environ[\"TOKENIZERS_PARALLELISM\"] = \"false\"\n", + "\n", + "\n", + "class Flux2ImageTrainingModule(DiffusionTrainingModule):\n", + " def __init__(\n", + " self,\n", + " model_paths=None, model_id_with_origin_paths=None,\n", + " tokenizer_path=None,\n", + " trainable_models=None,\n", + " lora_base_model=None, lora_target_modules=\"\", lora_rank=32, lora_checkpoint=None,\n", + " preset_lora_path=None, preset_lora_model=None,\n", + " use_gradient_checkpointing=True,\n", + " use_gradient_checkpointing_offload=False,\n", + " extra_inputs=None,\n", + " fp8_models=None,\n", + " offload_models=None,\n", + " template_model_id_or_path=None,\n", + " resume_from_checkpoint=None, remove_prefix_in_ckpt=None,\n", + " enable_lora_hot_loading=False,\n", + " device=\"cpu\",\n", + " task=\"sft\",\n", + " ):\n", + " super().__init__()\n", + " # Load models\n", + " model_configs = self.parse_model_configs(model_paths, model_id_with_origin_paths, fp8_models=fp8_models, offload_models=offload_models, device=device)\n", + " tokenizer_config = self.parse_path_or_model_id(tokenizer_path, default_value=ModelConfig(model_id=\"black-forest-labs/FLUX.2-dev\", origin_file_pattern=\"tokenizer/\"))\n", + " self.pipe = Flux2ImagePipeline.from_pretrained(torch_dtype=torch.bfloat16, device=device, model_configs=model_configs, tokenizer_config=tokenizer_config)\n", + " self.pipe = self.load_training_template_model(self.pipe, template_model_id_or_path, use_gradient_checkpointing, use_gradient_checkpointing_offload)\n", + " self.pipe = self.split_pipeline_units(task, self.pipe, trainable_models, lora_base_model, remove_unnecessary_params=True)\n", + " self.resume_from_checkpoint(resume_from_checkpoint, remove_prefix_in_ckpt)\n", + " if enable_lora_hot_loading: self.pipe.dit = self.pipe.enable_lora_hot_loading(self.pipe.dit)\n", + "\n", + " # Training mode\n", + " self.switch_pipe_to_training_mode(\n", + " self.pipe, trainable_models,\n", + " lora_base_model, lora_target_modules, lora_rank, lora_checkpoint,\n", + " preset_lora_path, preset_lora_model,\n", + " task=task,\n", + " )\n", + "\n", + " # Other configs\n", + " self.use_gradient_checkpointing = use_gradient_checkpointing\n", + " self.use_gradient_checkpointing_offload = use_gradient_checkpointing_offload\n", + " self.extra_inputs = extra_inputs.split(\",\") if extra_inputs is not None else []\n", + " self.fp8_models = fp8_models\n", + " self.task = task\n", + " self.task_to_loss = {\n", + " \"sft:data_process\": lambda pipe, *args: args,\n", + " \"direct_distill:data_process\": lambda pipe, *args: args,\n", + " \"sft\": lambda pipe, inputs_shared, inputs_posi, inputs_nega: FlowMatchSFTLoss(pipe, **inputs_shared, **inputs_posi),\n", + " \"sft:train\": lambda pipe, inputs_shared, inputs_posi, inputs_nega: FlowMatchSFTLoss(pipe, **inputs_shared, **inputs_posi),\n", + " \"direct_distill\": lambda pipe, inputs_shared, inputs_posi, inputs_nega: DirectDistillLoss(pipe, **inputs_shared, **inputs_posi),\n", + " \"direct_distill:train\": lambda pipe, inputs_shared, inputs_posi, inputs_nega: DirectDistillLoss(pipe, **inputs_shared, **inputs_posi),\n", + " }\n", + "\n", + " def get_pipeline_inputs(self, data):\n", + " inputs_posi = {\"prompt\": data[\"prompt\"]}\n", + " inputs_nega = {\"negative_prompt\": \"\"}\n", + " inputs_shared = {\n", + " # Assume you are using this pipeline for inference,\n", + " # please fill in the input parameters.\n", + " \"input_image\": data[\"image\"],\n", + " \"height\": data[\"image\"].size[1],\n", + " \"width\": data[\"image\"].size[0],\n", + " # Please do not modify the following parameters\n", + " # unless you clearly know what this will cause.\n", + " \"embedded_guidance\": 1.0,\n", + " \"cfg_scale\": 1,\n", + " \"rand_device\": self.pipe.device,\n", + " \"use_gradient_checkpointing\": self.use_gradient_checkpointing,\n", + " \"use_gradient_checkpointing_offload\": self.use_gradient_checkpointing_offload,\n", + " }\n", + " inputs_shared = self.parse_extra_inputs(data, self.extra_inputs, inputs_shared)\n", + " return inputs_shared, inputs_posi, inputs_nega\n", + "\n", + " def forward(self, data, inputs=None):\n", + " if inputs is None: inputs = self.get_pipeline_inputs(data)\n", + " inputs = self.transfer_data_to_device(inputs, self.pipe.device, self.pipe.torch_dtype)\n", + " for unit in self.pipe.units:\n", + " inputs = self.pipe.unit_runner(unit, self.pipe, *inputs)\n", + " loss = self.task_to_loss[self.task](self.pipe, *inputs)\n", + " return loss\n", + "\n", + "\n", + "def flux2_parser():\n", + " parser = argparse.ArgumentParser(description=\"Simple example of a training script.\")\n", + " parser = add_general_config(parser)\n", + " parser = add_image_size_config(parser)\n", + " parser.add_argument(\"--tokenizer_path\", type=str, default=None, help=\"Path to tokenizer.\")\n", + " parser.add_argument(\"--initialize_model_on_cpu\", default=False, action=\"store_true\", help=\"Whether to initialize models on CPU.\")\n", + " return parser\n", + "\n", + "\n", + "if __name__ == \"__main__\":\n", + " parser = flux2_parser()\n", + " args = parser.parse_args()\n", + "\n", + " accelerator = accelerate.Accelerator(\n", + " gradient_accumulation_steps=args.gradient_accumulation_steps,\n", + " kwargs_handlers=[accelerate.DistributedDataParallelKwargs(find_unused_parameters=args.find_unused_parameters)],\n", + " )\n", + " dataset = UnifiedDataset(\n", + " base_path=args.dataset_base_path,\n", + " metadata_path=args.dataset_metadata_path,\n", + " repeat=args.dataset_repeat,\n", + " data_file_keys=args.data_file_keys.split(\",\"),\n", + " main_data_operator=UnifiedDataset.default_image_operator(\n", + " base_path=args.dataset_base_path,\n", + " max_pixels=args.max_pixels,\n", + " height=args.height,\n", + " width=args.width,\n", + " height_division_factor=16,\n", + " width_division_factor=16,\n", + " )\n", + " )\n", + " model = Flux2ImageTrainingModule(\n", + " model_paths=args.model_paths,\n", + " model_id_with_origin_paths=args.model_id_with_origin_paths,\n", + " tokenizer_path=args.tokenizer_path,\n", + " trainable_models=args.trainable_models,\n", + " lora_base_model=args.lora_base_model,\n", + " lora_target_modules=args.lora_target_modules,\n", + " lora_rank=args.lora_rank,\n", + " lora_checkpoint=args.lora_checkpoint,\n", + " preset_lora_path=args.preset_lora_path,\n", + " preset_lora_model=args.preset_lora_model,\n", + " use_gradient_checkpointing=args.use_gradient_checkpointing,\n", + " use_gradient_checkpointing_offload=args.use_gradient_checkpointing_offload,\n", + " extra_inputs=args.extra_inputs,\n", + " fp8_models=args.fp8_models,\n", + " offload_models=args.offload_models,\n", + " template_model_id_or_path=args.template_model_id_or_path,\n", + " resume_from_checkpoint=args.resume_from_checkpoint,\n", + " remove_prefix_in_ckpt=args.remove_prefix_in_ckpt,\n", + " enable_lora_hot_loading=args.enable_lora_hot_loading,\n", + " task=args.task,\n", + " device=\"cpu\" if (args.initialize_model_on_cpu or args.enable_model_cpu_offload) else accelerator.device,\n", + " )\n", + " model_logger = ModelLogger(\n", + " args.output_path,\n", + " remove_prefix_in_ckpt=args.remove_prefix_in_ckpt,\n", + " enable_tensorboard_log=args.enable_tensorboard_log,\n", + " enable_swanlab_log=args.enable_swanlab_log,\n", + " swanlab_project=args.swanlab_project,\n", + " enable_wandb_log=args.enable_wandb_log,\n", + " wandb_project=args.wandb_project,\n", + " )\n", + " launcher_map = {\n", + " \"sft:data_process\": launch_data_process_task,\n", + " \"direct_distill:data_process\": launch_data_process_task,\n", + " \"sft\": launch_training_task,\n", + " \"sft:train\": launch_training_task,\n", + " \"direct_distill\": launch_training_task,\n", + " \"direct_distill:train\": launch_training_task,\n", + " }\n", + " launcher_map[args.task](accelerator, dataset, model, model_logger, args=args)\n", + "\"\"\".strip()\n", + "with open(\"train.py\", \"w\", encoding=\"utf-8\") as f:\n", + " f.write(code)\n", + "\n", + "# 启动训练任务\n", + "cmd = \"\"\"\n", + "accelerate launch train.py \\\n", + " --dataset_base_path data/dataset/1770381050168240056 \\\n", + " --dataset_metadata_path data/dataset/metadata.json \\\n", + " --extra_inputs \"template_inputs\" \\\n", + " --max_pixels 1048576 \\\n", + " --dataset_repeat 1 \\\n", + " --model_id_with_origin_paths \"black-forest-labs/FLUX.2-klein-4B:text_encoder/*.safetensors,black-forest-labs/FLUX.2-klein-base-4B:transformer/*.safetensors,black-forest-labs/FLUX.2-klein-4B:vae/diffusion_pytorch_model.safetensors\" \\\n", + " --template_model_id_or_path \"DiffSynth-Studio/Template-KleinBase4B-Brightness:\" \\\n", + " --tokenizer_path \"black-forest-labs/FLUX.2-klein-4B:tokenizer/\" \\\n", + " --learning_rate 1e-4 \\\n", + " --num_epochs 1 \\\n", + " --remove_prefix_in_ckpt \"pipe.template_model.\" \\\n", + " --output_path \"models/template_brightness_training\" \\\n", + " --trainable_models \"template_model\" \\\n", + " --use_gradient_checkpointing \\\n", + " --find_unused_parameters \\\n", + " --fp8_models \"black-forest-labs/FLUX.2-klein-4B:text_encoder/*.safetensors,black-forest-labs/FLUX.2-klein-base-4B:transformer/*.safetensors\"\n", + "\"\"\"\n", + "os.system(cmd)" + ] + }, + { + "cell_type": "markdown", + "id": "0e91a608", + "metadata": {}, + "source": [ + "After training is complete, package the obtained weights together with the model definition written earlier into `models/template_brightness` to form a complete Template model:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c3dd83dc", + "metadata": {}, + "outputs": [], + "source": [ + "import shutil\n", + "\n", + "shutil.copy(\n", + " \"models/template_brightness_training/epoch-0.safetensors\",\n", + " \"models/template_brightness/model.safetensors\",\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "1619f72c", + "metadata": {}, + "source": [ + "Load the trained model and generate images with different `scale` values to generate images with different brightness:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5acc60f9", + "metadata": {}, + "outputs": [], + "source": [ + "template = TemplatePipeline.from_pretrained(\n", + " torch_dtype=torch.bfloat16,\n", + " device=\"cuda\",\n", + " model_configs=[ModelConfig(\"models/template_brightness\")],\n", + " lazy_loading=True,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "427b288d", + "metadata": {}, + "outputs": [], + "source": [ + "image = template(\n", + " pipe,\n", + " prompt=\"A cat is sitting on a stone.\",\n", + " seed=0, cfg_scale=4, num_inference_steps=50,\n", + " template_inputs = [{\"scale\": 0.7}],\n", + " negative_template_inputs = [{\"scale\": 0.5}]\n", + ")\n", + "image.save(\"image_Brightness_light.jpg\")\n", + "image = template(\n", + " pipe,\n", + " prompt=\"A cat is sitting on a stone.\",\n", + " seed=0, cfg_scale=4, num_inference_steps=50,\n", + " template_inputs = [{\"scale\": 0.3}],\n", + " negative_template_inputs = [{\"scale\": 0.5}]\n", + ")\n", + "image.save(\"image_Brightness_dark.jpg\")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "603a288e", + "metadata": {}, + "outputs": [ + { + "data": { + "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAEAAgADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD0JpAB2qISAmqck7AdaiW45615smwNIFSaduArPFxxTDcnPWoswNXcuM0xpU71ni4bGM01pGPerV2gNEMhOaUstZiSPnrU4ZiKLMC1vXNLww6VTw+asxHjk80JdwHCFSelK0KgdBT9yqCxPAGaiS5jnHyMQ2PuupVvyNXyodiNlVTxSCZRxRJkmoPLYHPUUrDsWeG6Gnqh9aqKStTpKRQnYRK0QxURTntTml45qEzgGhzsFx7R57U5FA600TbqUyY4yM+lClcY5kUmongU0FjShyOvNO4iFrMMKhNhz0q6Jcdad5oNNSGZUun8dKhFlgcCtxnUrio1CE0+ZAYM9lMwO2s59Kkduc5rtPLUjjFMNsCc7RRe4HGLZPCcEVIEeMg11MlkrdqqvYDsKOYVjJjuCOtRzXuw9a0JNNOCcVmz6c7N0pubsS0eHuMR8CqDctVqScFMCqZb5q0iiLEgQGn7BUatT8ntQ7isSBEAyaYzrmgAng0vkg0eocpAcE5ozU/2cU4W/tTuHKyvxT+oxipRbnPSp1txikHIymsfNOaLjpVwQgGgoKepSgZjxnNM2H0rTaMelMMQ9KpM0UTP8pjUkcBJ5q3sA7U8YFF2OxWNvgdaj8o5q454qsz4NK7Exnl1PCNvNQmXNHmHsKd2BNKc1Uk61IWZqaYy1CAiHWrca/LUIgIOanB2rTuBFOuBS2gxSTPkUtqQDzTAtTS4TFZzfM1XpAG6VXMZDZxQBLbLheaSQbXqWMYWoZDlqAJIuTUU5AJp6HYOarTSbiaBH1g9mp7VWNphuK0fMHekLKTxiuJNMoqraAjkUGzC1a34pGmHfFaqw7FM23tTxaHFWDIpHGKYJwKVkFiMQYNSBQo5p/mKRnNRSMW6UmgsISueKXcKgZWHJNKjVFmFiZpDGjuvVVJH1AqGfRvLsY7m2kZZ8biSc7j71YVPMRlH8SkfpVvTplvLJBy2F2lAMkGsal/aRR2YeKdOTMzTb6O/DxuNlzFxJGf5j2q80IA4rm9ftZ9PuxqFqpimiOcE8OO6n2Na1lrthe2lvP8AaEiM+QEdgCGHVfqK3s1ocs421RYaEE03ycHinvcwLcCAzxCTG7aXAOKf5sQGTNFj/fFNU59jLmIWjO2qzwHPetBJIjGJBImwnAOeprO1zVhpvk2lttOoXAyucful/vH39B+NS4tbotK4ksotSYlUSXPdT92P3b39vzrNiknGtwfaHjkMgYBggBXjOBgVYjga108u3zt1Mn3jn1Pf8azNMkkvNdgzjC72OPpj+ZqKilFo66dODpyZ1GwNTGi9GqXZt70jHFapo5ERrbt65pGjZT0qzE4I5p7bW4o0AosDjFR7JAeKutHzQqkdRSsgKyeap5GRUwkbHQ1IzqOtRiZTxTEJ5hHWk80ZocBulRGLvUO4MsgqwxUTW6k9qagINSjI70wPmE2YqE2eDxWnkYoJWulMVkUEtOORUwtwB0qxuAoLrTK5UV/JHpS+XgVLuWo2YetFg5UMyAetO3ADrUbDmo2BPSiwcpLvGaXePWoApHWnrmkkCRLupRg96YBxWnYaDqGoQG4gWIQ5KjzJNpYjrgflzQ2luUk3oilsBoMXFST2k9pOYbiNo5B2b/PNHAHWk5IlytoVmj5pBGafI2DxTFkPpS5mTzMUwkioXtc1bU8UjNijmYuYqraVKLdcVsQ6Dey2YuJJI7ZXGYxKCWYeuAOB7msiRZYnaOT76Eq2PUU1JM0s7XaGG3U0fZvQ0hkIpv2nbVgP+zkVVmG3NWRdbhiqs75zQJlRm5qSLPSoj1qaAfMKoRYUMpyelWIwr84prkbKhWbYaAHzfITiqZkJerEsnmVX8vmgRMxBjqm2cmrWDtxUZQUID6sbeBzSDd61LLMpHFRK+T2rzG2nYAaRulKhLdelTFBtzULOE46Vq5NId7EnlqelRtbndkVF9pG7rUqXHrWftGmF2NKMDipooz3NKJUal81R3rRVLhzFny0KcioDbhegpoufenfaBjrVuWgXJolKkH0rDk1V9Gd7iIeVZSyMN8gG7IPbPb3rYSdc9a898ZSJeeKLDSxcvG7RoqnqAO52/nWTvJprodmFqRjzKXU2tT1L+0mMMKyTMwHPPGehx2riJ7a5tbfULC4tWKyzLIm84WF/7+fQjIOK7u71W2s5Bp+lxK9yiBZJ8AlhWVdabI8cs93cHIiJLY+73xk9PWrvdmc5X2OUXU7ayvpLBtQa48u2eV5CuTFgZCg9+en1pi63bPbX94zT28dojAxO3zs/AHP40aRotjea3ez3ERFvIY4i/QEGQ4f/AL6RVz6moF0qMaNrN1csWdN8QhHJeeTCqoB/iGCfwrvjWkla5yuCbudVok3lTw6xPqI1CAIrJbxfwkLkLg984Bx61Vt57xteudU1JXaS4bcu4dB6D0HpVfQLEPaQkLHlIgQG+XBPTOODgYP5dK37fUV0+MQX0Zurbfku7A8+o9vx4rlk3zXZrFqxoSeKbaK3EKyASSAhVdOD7ZFM8KlFv7zzQRc7ASnaNSen4/0rkfGllCfst5p1yBZyEsxGMhv/ANVdj4N/f6at1I++QxLEXPcAsRk9+v8AKlVd0jXmSptLqb0lyAcCmBzJ0NSG1RzViG3RBgCsYps5kVMyLUivxyamlAAPFZ083lNUzunoDNFCT3oZ6z49RXpnmla4Lc5pczFdl/YriojEF6VVS4bdyana4BHNVzO2ox6qpNSiHPfNV0kVqnWdVGM04yuO44RhTzSmMN0qNrgGlSUZ61XMB8vB3ApQ7etSEptqPjPFamWoFmNOQE9adgYpPMA4p3aK5mh/lg00wnPFHm8UCalzMXMw8g09YOaQTA96d54Heq5yucf5K7aiaILTvtA9aaZQRRzD5xMAV6Z4VgjXR7NmAwYyefdif615luX1r0HQbgt4WtnRiDGzxkjsQc/yIrKunKOh34BxdWz7Gj4n0CKeDcVJ4yrAcr7ivNLm3ltZ2hl6joR0I9RXsjX8N5pih3XcFwfmBJ/AV5/qNvBPetbONxIZocHb8w5259D/ADqrKLRFanzNvqcrsz3pwjFa2nXGn3JXytOVsAlvNdjgDPUZqMXizQyMlhalogWkTGCO1dKp+Zx3XYzjgDg10Xh7Qkby7+8jDbzm2hYcNj+Nh/dHYdz7Dmfw9p+lag81xfWuyKzhNxNGrkAj+FT9SQPxrW0y/wDtcz3U5Xcx4VcAKB0AHYAcVi7OXKjaEFbmY/VQsUGGYtI+SSe5rzvUGAv5/wDervdUmFzdZDHy1GTkAY9a4OdfPmkkPV2LUuTlkXWleCM93qEhmPArR+yKTzUohjjXtVpnOk2ZioV5NRTVcmYHIWqEpwcU1uNkarubFTD92aZEQG5p0pzVPcRN54IwajcjHFVxnNT4+Wm9BDBJinLIGYCm+XupVjKnNLQC4EBWq0sZ6ipkkOMGpBgjmlcZ9Jq4LYLVagh3cg1BPYuG3Iamg3xj5q5NOo9y+sJxyeKhnt8jApPteBg1G10SeGqnawFf+z2JLZpfJZRjrVsXSheSKVHVzuyKh8rFcpm2kC5BqECUPhulbO+Pbzioj5TNkYqkorYehAkGUzTWib0q+u3bRlKbcR6FKKNs4NY2q+EE1HXrDWzOy3FsNkUYGA7Z43H05rpQVB4rK1zX10Oza7ZBJLCmIYz/ABSEkKKn0Kglcl0Lw3teYFF3QAgyDks571gxaXLDb+IrK6vYpbm7hYRRtOrMDg44zmknt9XXQdU8/X5r7UWjSd7KLEYVcgsoA5PGR1rkdS0m3vb3+2oZ4IbNYS4liARkbOeo6YxjFHMoK4SfQ2zYr/wgei2saZ1N7E28qr1BZ1YZ+hGavxaJcWfiDTkv40FsJWutwH/LQIVGfcZJzV7wPEuu2uka2RmR4mWfA4ZlOM4/Wun8U2i3sECklFSTczDggAc11QjL2Um9zKUkppI8w8PWl+NE8SXv2Zmvbq9eG0DfdRAfvD26flWlp+k6knhxpr+EmZPvggfOvfHbP0rlbg3Xiu3jubaRntPtOxLZZCqxoG5JAPLEc8+tdHpUOq2qavZaRdq1rBAmYrty8YlbOVDdRxislUUtHuV10Ob1vS5J9PubKOXBkZZbYlvlB5yP5j8q73wPA1v4TtoHBEkeQ+fXNeeXGr3V5DJZXtulrqFmQHWNsrJGTww+h/Q16b4RRv8AhHIJHOWkJbPtmie1hF+SVk6daclzJjrVjy0b71L5CEcYrH0AashbrUUtokmc1HNJ5DURXyMcGp5mtxalb+y8OSpNWY7DC8nmr0UqNjmpjtPIxV6NDuZbWTKPlqGS2lAz1rYZQBmo1ZSSDRowTMqNCD1I9qtLEWq08CMcigJtoUUh2SIFtz3p/wBmzyM0/eQcE08TqOMik2rAfK4ib1qVLZjURlYHhTViKZsZKmukmyHfZnI61G1m+eDU/wBqAGDQLrJ60yrIga1cLUf2dunNXvPUjkihcMc5pXQm0UxbMBnmozE+e9aw2Y5NIRGaLofumelsxHenG2atBQuOKMrRdBaJQWBhXeeFWWHwfqEsg3+TcBVTOAC6jk/981x7MO1aOkrqV1aajZ2CM4eISMq+qn5ce/JFZ1LNG2GqKnVTSOn0Bb/VY28uFbe2UkNMBkn8TS6ppVkhA81muBkbt3U1e0KO+j0m102Rdku3fLz0JNWNbtI9JS3EsbkyMA21eBk9z6VjKd3Y6Zu92eb3FnKmo2dnBCFeTemVHJGM4J/WqFt9quTcxIoMixOw2jkFVIPvnvXb3to517UoImZLrS7Q3IkB4cYB2H1BHFczGyjUroWu6Iz4VHBOVEjjOPoua64OyscMlqWrG4a4gikcMFmjUSbThWAA6j8K2Le3tLyACJXtZD0yetQWsCR6pqmlKm2DTojIGYkllHIz65yPypscDXVh9rjR0YHOW6n8ayas7o0i3sUoJbkT3un3Um5BG5DE52kDI5/CufLVbvRdz6jLcbxtZQsi55//AFVCIMmtV3FKVyq8rDoaiZ5JBjJrTFop64pwtU7UuZGfMjKW3bvTXtAx71pOioaECtS5mibsx/shDcVYSyyOa1BAhINSeQopuYORhyWBH3ab9ndRzW60QxVYqN2CKFK4J3M1YhU6wBqstCD0FCoV6A0yrWIltV71ILRSOKcSaPNKjrSchNo+jWvotvJwajW9R+ARiqslj533SRTktfIwCcivPjCT6kIfJLvfC0oO0fNirtvBEVyQCalksY2XOcV1paGtzGn3NypxUUdxLEPvGtZ7QYwMVC1uB1ArNxTFZMzmv5jnANNivpw4DKfwFa0NrCDk4q0beHbwBVKKsOxViuXKjJqZZge/NRtsHAwKj2gnArCWjIZcWQHuKjuND02+mi1C/uCn2cEAfwf/AK/emxIAfvZPoK3NPsxeW09tIpUOnBY8g9uK2heWiKi0mebeL30+9mt9V03VoTdxqA0cMoVuO45/Sm+HNGbWZ2k1HSbW5ZjkGSLazHsTjAP4itz/AIRWG11FhKLdJWbny1wH+qniu903SrbToFlijVHcDOFrShFt2ZdR21Rn+C/Cz+HdPuIZpA5klZ0VeiA9hSeK7Ke60W7tLJsXEsTLGc9yKv69rEum6cZ7dBJzhz/cHrisDQNautauGlkt9tunSU8Bj7etdsJJS5WZulJ0/annVx4Xj8NadbqljIlyUHnSxzvGsh9wvU1jxTX2rOmmQyGC1jYs1vbkRAerMxJJ+pya9v1nTo9VsnidSCOQw6ivK9U8OWKRvDOCI8nAld9v6cfhXNiVybdQpPm3MLxF4Xu31K31fSZ4ZYtggZmkG0qOK9W0yCK00m2t4mBWOMKK890Xw9DBKJLdrh7WAGRmdiYhjso9a2tM8Q29vbxrcPtSRjtcHIFTCnKcAk0pHS3LyLnbTLW4lL7ZBgVGNStym/zEdR/dbNWILm1uR+6dSR271lODp6tBzImmgWdcGqq6ZhuDVguVbFSG4VUznBqHNWDmIltWTo1KXePqciqE2rMsu0Dj1p7Xu+PjvWLk30JNFLpGOCaezRtyCM1zkvnb96Eimrc3RkCAEmqjewK50gkCnrTzcLt6is2BZ9uXpXU1XvRG9CzIwf7p5qDyWz96mJ5mfarcQ3dTzRa4kfNBaLb05pomTGBQbPcODT/saJH15rdLzMkV2AduDTTHt71ZitgTnJqdrRMd62Wx0rYy33djSpM6Dqa0DbDHSmGBR1FJpMTimUzdSdgaRZ5iehrQS3j71KUjUdBRyoXIitG8hHJNTc+tRmZUOKYZ9xwBWTvcyk2mPLc9a7TwBdG3GpBeGdUBbuBz0riQpPJrp/By3Ul9PBZyRRzPESDKCV+XnoPbNKavGxtRklNM9Bi1yytNRt7QWtxd3m1XkS3TKxA9NxJwKyvGviXUbqe7ighih+ySiNYjD5hYYByTkY6+lL/Y9tpCS2Z1yB9WuyZJZFlCFm6qB2HpXPT6hey6ksV9FKL1cIZ4vldlHQOpBVsdj+tZQsnodlS7RpaTcXeoXGqSPAiamLREmC9JYsnBA7H1q1qHhUabpEN6iL54QEqO2OlaXhzwxd2XiW1vLb7RPHewOl3LcYyM/dGBx2rsPEenbYfKLAoqc13UKPMm31OarJqx4pqN3d2mpX8dpj7YYU+1TbNzHjIUDpV7S7zVmt57Rtl0gt/O2yKI3XnGNw4//VRJoEy3Oo6vffaoLh7g+WYWADp26gjtWFcahI6yWwc2kLHMruxLP/vN39gMCsZRcfdGnd3KN5qSz3IKRNFImYpEZgcfjTsgCm3VjZSsl9ZXqkHAePHJA7+1OCKyghqd0kZydnqQyTMOBTUkkLc9KmMI65pMAUnJdCHOPQRkL9TTVhKnrSmTBxRJMAnHWjnD2hKq470x5Snesx7yUPgZxQbhyvNS4yepm02ai3CnGTSmSNj1FYbvITkE0RtMzADJNUoPuEYyOg+QYIpjzIBVSBJ8ZbOKdKm4YNJ3Q5XQkkit0NQmLIzupwgJ5FPWBmHWlsSnY+jEJVcGoW3SN97gdqxpr+5Mx2KdvSpYjfyMCo69q56cZpe8bJGuryR/dNSLqDDhzzVa3WbfiUEGn3dmzJ8hIJrblYywt+pOSwqRJY5jjIrBNhclsZJHrV22sZLc5Mh59aw5ZRd2S7ouzwfMNrU3yp0Gd+RUnkyDDbs47VYU7l5ArVStuNNrcyZfOzlRT4WfHz5H0rQIXpgUx40C8CpkoyK0Y2KV/uxAJ/eb/wCvXRaCipKHyzFuMmucRACCRwOgrpbKZLWOASNtZ/mI9v8AGtqMbE2NK7gXzN4UZ9QOaqXF3GYRCXAYdGPNa0qh4T7iuX1OBwxwOK6W2ldCMrVBqG1kWJWVgcHPBBqnpst5aQRwNbqFUYBTpVl7q7jUxhtwHYjNVftN1KcHAX0ArB1JXui9OWxuRXZ8sg4BI9c1WOmR3T5liSVf9peRTLSLkM3X3rRuLhLO0aU4woya6IJz+IxbUdjmfF7rbaZ9ls5ESU4/dhtpxXmmoypc6Q8MgCSox2OBjkY6j1rc8R6muq6l+6k4UZic8lW6gH1B6isHVNi6cY5woZkznrtJXPUdfWtG0nZCWquzO0fxJcwj7PI+1k4+dsA+xratdfdWeTzCk6EDaOn1zXn8MrxXQWUAmPvjO5f610sccqaYZoJDJ8wKg4Ugf/Xq5MSPR/D3i6K8lFteELKfuse9dRPGrjgcV4hch4ljuomZJTjKk/dr0bwb4nGq24tLlwLhBgE/xCuOtRSXNE0i+jOiWyj74zSizjDjFXRFhc5yazbpzuO0kH2rnTTNEy8beMpggUkVrHEdxAqlbvcOwG7NaBRtnJz60mDFe6iAxkVRlnTdkEVDdWkrksmayTBciXac1g4zuQ0zprcoy5JzTpJETuKwEkuoOM/LVpHdxluatN2J1PnpJJjUoV5By1VHnYN8q8U+I3Mh+UGutJhZltFZTwamE2OpqoI51PzZqGdZD0JpWbH7zNZJEI5IqMhHfANZCR3BIGTV+O1kRdzMc0mmiHzRZJNDt6Gq5jf1qcK5PJyKsrBuXNNStuUptbmQ6HNTQx4IJq60IzjFMMe3ihtMJNSE2FhxgD1NdX8OoAfGVllywyQygcbSMHNcykZIz0Hqa734dW0cT32oHd+4UICTjlv/ANVStApxvJI1tb8H29jq0kE1kJIy2YZxGSQD2JPWt3QPCNpdSxybRmEZHYfiK7O5t4tZ0GGfAZwgINYtleNpbMrZ2EYPatYUYxdzplVlJWNrzorK3O3bI6DIVSMn6V5fqnjufVNUNlBaP50r7BEVIZeTnPoOK2dU1O/kmcWTGQ9Qu45H61w/l6pBrc9+0ERmkUKxz82B71vKrqrMVNJJ3Vzv7qKG6shaSeXjaAckYBrzfVvDsNvNIhi87B6KASf1rdh1mYv8/wB4ehNXI0+2PvkGR1Jz/kUVZRrbGMbwZ51qWkNY6RLePF5ckpCJFsxhRyf5Vz9vdJMgMX7uTsv8LV2niu8E+qLbwt+6hQjHUA+46j615/CAZWVlGR19fqCOtRyJaDvzas1orkSqezDgg9qXdk81nZeOQn7zoM5/vrWpAEljWReQRWEoqLM7JMYICxyKc1oSOhq0rKlTCVCOopqUTRSiZgsFHUUosk3VqfLszkVmXLkMdtNSuNST2HNZR7elEdvHE2SKgjllZsA5qwySleRSbZEm0TGeLbjiqE7gklahnjlByAahVpCdpBrPlZi4s0bUoy5NTmSIDgisYmWNsAkCn7ZSuc0+Vk8sj6f/ALLgYAIFzT/IW2YbgMVgreX9vhk59qbcavfOMyQlayvJrzOvU6CSWJsBcZpS+yPLLx61y0N3eCcNtJT3rWm1ZGt9gzvx0oTn1CzLyXkTEjjNUrvz5JB5eAKygJfM8xXqeC+lEuJFyBRr1FZmjHPcmLaU6d6oSajLFL5Zzmrp1KMJtXGTVUWYnm8wnJ60pRUity3HNJtDMKsLcp3IqOX5ItoHOKyX3GXHIrNpp6E2aN6J0dwcitrUIwllZ3eVHlNgswzjNc3ZqkZXLV2kEcV3oxjlXfGwIINdFCV0wT1L1rIJ7RGBzkdapX0A2nPJPSqNgbrS5QjnzbVsBTnlPbFT6xqlrZrmSQDPFd0HcmSsZElpycDrUKWOCeOc0xvEml7juuowQcdfbNUL/wAbaRZhf9IQkruGD2rT2S3M3Jm2Vitoi8hCgDOTXA674jk1W4ls7HhEByxHyt26/XFYOueN11NCk14sNvuK7Iz8x+vpWZZjUNelWCxjNpYj787r1/Dv/LiplNRVkNQb1ZPokQlughAkaGMtK7A7Y8E4x6ngVja04O5TIdyM7J7qeoyPrx+NdnLFb2kA0q0ysZXMsp/iA9favPNaLby6kqrMfK9Nq8k8dcmsE9SzPVFUxnoxXaCc4U46c9q6nTFEvh+5hlL7o03hlP5cVz1jtnjETAlc5yxIxXW6JDj7aNpkRU2n5ByfQVtcmxWvrZTpttOSyiYBG57/AE+vpWLbXE+h6zHJHISc7iQa35bZx4cYqHI875SSO39Kq39ikN7GXGBIoKkHGMjpTTA9V0vU21GwinibcrrWksGVy65zXm3w/wBXNteTWEzZQncg9K9JN/GMc8V51VckrFp6D1URNnHFTPOhXAqGS6ieLAIyaz5DLG4IIxXNOU4v3dRXNFW5+YDFOaOJ+QBmqBaUrnOBT495Xlq1jN9Sk9CWSBH4Iqu9sR9ypo3wfmNXECuAOK1TTKTufOg06JsBcGpfs6WxG4cVjQ3F1b/NkmpJL26nHzritbSItO5pyyQtwvWkFuAm4gEVip9oEm4ZIq5LfymHYFINK0hWmXFlhU4wM1VuXllbEfSs7ZcF92TzWtZKFGZDk0OLQuVrUijS42fcPFRfaplfZjBq5caqkKlETNZPnySy79tFnIdnLc1UL8FhU2VPpWebyQKBtpY5Gdh1FQ4tGbhJGkqhuWPy+1ej+DE8vwle3GVUC4UdOgxXnMCooBY1658PoYdQ8LahayDKu+NvpxS3TRph3+8R3Xha6W40nyt2SB+YrL1yz2s3vXK6Xqd94K1lI7/dJpsuFWbqF9vau6v7m1v7dZ7eVJEccEGuug+eNjarHllc86uYJ1lLRsytnqD0rNltruV23SMa7KeCMElsZJxVOSOGP5iQMVbw9yPaHPW2l7TuYVBq2sQ6ZbPGjgSkYAHY0uv+IIbSFo4ZFVjxuz0rzO81CbUrryYN0kjHBY80tIaRJs5astWdwbq8mkdiXUFmJ/h+nqK55CBdHnDKxyB0+orp5LZNOsPs27NxKv7xvQd65NWP2rrg5yPxqIu9xvQ15oxtjmHUfK30NNtXMErQsflYbkNWoAHt1VslSec54qpeRFLdZR96JypOO1KUeaNiZK6Ljc9DTkTP8VZwWZgCoJBqxGZU+9muZxcTJwaLZ3qcA1IlqXGWFVRcgHJNTrqSDABpXJ5mthxhWBs44pz3abdqjmmz3STR4GM1TSOXfjFJtk8ze5KZAW+YYFLtiYZGM1DcW8wG7tUcMTMvJrSL01NoyTWo6VFf61GN6jG3IqeNFU/Ma0YljZACvNWnoaJpqyPdBC+F3KBn9Ktm2BjGcGqH9pozZLDAqwupQOv3wPxrz/rST2K5xZEjjGNozVQxwSNkqBirEmJYy6sCe1Z6wSSZIDD1IrphJvVlRJ1hTd8mKlOm+Yu4Hmo0tHWP5Wy3vVi1aWFf3jZFTVqWWgSZmvpkjy7c1oLGLO3yzdB3pXv0RyeKqy6hb3L+WzgViq7crWI5iNbt7l8RtkVbCqi/OBQjWNpFlCgJ9KiVFvH3ByqjtWl7vQTkKYt3zK5X6Gux0Nz/AGQyhy7A9T3NcbJIiN5QbJrqfDsmYHjXAJGRWlGXvWDmuacBHnKRgx9WJ7GsPxLqtiljLNPArBTsQEdSa2LO7iuJZY9u2VeHHTFcZ41sm8tiRujVhIeew5A9s1vUuoXRpH4jO8QaVpeosYgI4CFOGTjORgk/nXFT+EtJedVlvGdwgwFOMrntWvBHekNLdyrJJNGFRW/hyMkf0/CmsVllVnMavGpTcB8w9h7/AONZKcujLaRStPDVjbTAx2sbqwyXm5OfXn8a2G1GC28uGF45rgAqiRDAH/1xWWLeS5DMsMzqvI81849wKdbMkUpKmGGR25MeOvvmri29yGVtUEkSS+cRJdSdUBPHtx3rj/ETrcLM2xo0iXbGpHP+0K7DUhFa75h+8uF+cF+SPoO9cbrMwitLvegLyxchDwrE5rdIyKOmriZQoYrJh1YHA685rudIEX2e7Df6tgcnrz+Vee6TMUFuAQ7IxG3pkdetdzpsq2elzTOGCSAqcH7pPrWgmXXjEPh8RsSf3gwBzk+npiodd8o6jpyo37zaAVB7YqxfqkmnWhAUsm0yJt5+vWjU0STUrF8BdiYDY5+gpiMCOZdI8QCVFIVXB2n0NekO5uUR4mwpGa8y1FVmvr1lJaUMDtIr0bQrdrnSrWZXyrxjiscRBOzZUNS5DMIHBY5PuasfbnupQkcZwKtNosbRbi3zVGm2yIJXp1IricOVlON9guLs20fzRtmo7W885gucA1NNdwXa4GDWfJIkB3YAFF0yUbMkK7MhsGmxTvCeTkVii/aZgEfIqz5kp6ZOKd+wru+h4a8MgUErjNWYLVnQdKbJeq7/AOzTo79E78Vo6z6IbraaDpYVt1y2M1V82FznAp9yzXKl1as4W8jAsM47mtYNtamsW7al0Mpb5cVZSxllXcDVGK3cAFTk1rWkrQx/Mc1M522JqTstDOazzLtfrV02cMMG4gVDdXIMuRUf2yKUiOR8Cs/aN7GTqt7D4fIlbaMGnzQpEOKd5lhax5RlLH0qOKB7592/alF3cz9o73ZXO887zivWvhNOU0nUV3EsJEYfka8qnVIm8sNkivQ/hTMRe3duuR5sWRnpkfyqr30N6c7yR2OuTvZjzmtvtmmScygLuMZ78elZ+ma14YkhDW8htW3bUTdj9K6ayuBJLNDJCysB847fUViaz4a0maXzp7OPBO7zU+Uj8qlaanZe+gzxJdRRzRxR3aLlMg+ue9edazLqc7BbfUoMbfXHFX9e04Tao8f21miEexOeneual0CFpA32+UFRjg1Uar/mJlHyMu5025kkzqGoxhD12mtCwFraRFrRAiDrM3VvpUa6RaQtvCSTsOcyNn9KUsWYFmC4+6B0WnzcxFrFLUpWKyZyXbg884/xrnrggXJbBADY5rfvAqKz5yV+Yse3+Nc7cH72R8xOeOxreCMXudBZHdGFGTkgg/jUs8avaTjnbkn9apaS+Vi/iIJGPatDISznds4Ib8KpIljNPmRbQI/VDio7m4jZto61XtyRcNGR/CGxWgFhBVjHz9K55x94VmzOEW5ucgH1pJ7UIoKvzWu3l3KmNVw30rNk0yUS4MhNCQct9ynFI0UoPJxVxb2aaQLHFzV2TSfItN4ILYqla3P2OQPIv1pNXJdO+xYlvJEi2SxEGqsMu6QAnANWbvUortDsHNZI8zdubhaSVyFHQ1JkQMNjZPtTo5pIsZPFZyzEkCL8TUuyWQ53EkCnZguZbHtA0m+iVh5m/HSoH0zUPNQn5VJwRmuknkW0m2sTnNXYpY5mVsggc1y80PtI6LqxlNBNZ26hpSQeMYq1HfJbxBXGPetK/aKWEKm0mqq6fbyQgy4yPWrlOPNZMFISG+hKklgD71FPcbzwwwfSoH0gXFwPLb5R1onja0nVNgKjvTlDS6G43LRtopbc+pFZP9j+WpZTyT3qzcXbHBjB461LDK9xEDvAPoaxTa6CjoV0s44Yyz9fWoC7FykUpXPpWxBDHOdshH50y7tI0bEQWiDUveQ+ZPQzY7M24MruS3cmt7QNRRbhVDd/XisaaJpF8oyYBp9rbpp7iSJsydjmqhdT5iWtTuLxrZL7zMmOZhkdgwqDVYYtQsN+AwHBFVdUv9vhyO6kwVU7XbPK++ar6JqcN7afu3DI68DPSvQTv7rH5nM3tjb28gAjeeYk4UHCr7muev47kAGWcxn+GOBQHYfU9BXcXVuY71SegPSsHWLFsStbhw7fe8vAdvbceg+lckotG0Xc4Nba9W+ZZr428ErZEbH+vXrWhcW+h6Y4Xzo5Hdd26R8j888VmXWmq98y314bduogtWLMP95upNaV74Fg1zT4XtJnimRR8rtnIqqclezYprS5DePB9mNxFIbpQdyRs4IUntXB6zcm6AuV3KiyeWA3fGT+lXNS0LVdGvEtofMcHpjP86xNWt7m0ZIp2LAjcOMYJrtSMA0pibxWJHlqcsD3FeivIsWlQQAMWnZW4OMj6VwWh2LzSR4jDbmyc+g7V26vHDqFna4EqoMSBieCeh96oTNbVgVewDSEiRsBccgY65FT3bpJq8aLL+8iQHcw4B+n9aoW841LxAwQfubVcAkYxVc3ginvb4OoWX5EIPf0ppE3MpT9p1jUXJAOGK16T4DczeF4geCjMvP1rzWOKe00u4vCiqZD19c13Hw7klfQ3AYYEp4rHFaQuOD1OzLXP3QwxTWtGnGGyKmD+WAWxirA1GAgKpBNccZp7mykVItIWI7iar3WmRu3Wr813kHBXFUUaeaQtkBe2Kl6S0EPt9HhVBxg1dgs4kyOKrtO0SEbqpPqTo/XH1olUt0Jkz5+eynjBAO7FRCznLx5QjccYrZkjW2m2O2TnnmrkEsTXUTcbUPetFVS3I51Yo3lkdOtk3yZZv4QKi85Vh8ndtU8mui117e6ijERV2rPXSbN7IyzOVk9M0Ooua1xRqXWpFaG1RPncfjRNcWm7COD9KyzYyT3Kxx/c9c9qY8Bs73aRlV6mqcQlSvrc3HtrWa0LDG4iudbT2Xcc96vT3W4Dy8jHapbe3ku4srIoPoTzURk0Km+TczE059u4GnIl0nyrKwHtW/Y2XmP5THvzS6vDFbMIYAGPcirVRS2NFOMnaxixQsGGSSx716Z4SsZdGsU1AAiZmBXngj6VyGgWDXd/CrEBC3Oa9J1P/RdOVoUAZRhAp4x0zWlNX1Y4rW50MGqQOkMl+ps76XlAeFYex9/SrmoeXcaY0ijKd1/umsPUtSh1LwZbkSRpcBMEMcnjuDVfwjrBvtNa3mYNIoK4PpSVnJwZ0O6SkjidXWKDUdpDkknGDxWVLIdgJO0Y+UDhmrqtf00jUEcZCh+lYc2n/O+wkc8nufbPauflaZrzXOcdbmSUq03lIx+6OP/AK9LNp0EGDvRyRnMjZH/ANam6qkkF0sELGIEZYpyxP1qxD4cbVLZfNuZgQM7WbNaQdnZszktNDIvYpAgd5FlGfkiTG0GsC4OZR1wOBmrl19p069e2Uk7DgDrVGYSFgZOp7eldkVY5jW0pigMhPyoORWlM4XTUi53SsPbjNZtlETBHEACWOW+npVyZwbqG3XDBfvZ7Gq6ksjuSba6iuASQ5I2+wrchktpY43DAg1iOVuNQZFyYoIyM+lGmea6mJOeNwrKtHS6HGXQ3h5YkJTGaa2CGJ4aqzQ3MS7yADUIS5lO4tgdxXLZ7tha+rYkwupvl8z5faof7KeXGS2K0ioiUZPB71YN7D5QRWGatTRcZxKUPh9YgHY8HtTbnRUDAq/HpUsl7I5wZBtHSoYTdXEnDfJ2xS5nzCu76kiaNGF3Dg96sQWdvAW39+9NMrRoyM/I7VWN8wARwMds1Eqj6Gc56aI9bn1eXBNxb/MT1xUkOpRttCqynucVsWjWGpsFxGSvWpZ7W3gcqioqj2rJxjKJV0ygLrDBgM/SpbfUra4mMEjBT78VRnnuIZGZLYtFjqBRaW8FyrSTwhC3QnjFc3IlPmYlubEduYHZ4JSy+mc1A73Fy5CwHjqSKlt9Pltod0cu5fTNXXuXjtTgKGxzmuzm/mK5jOGnTXI6BQOpqu1hFA5AlIb60suo3rYhhZU3HG8c4qW4sFkjjUyZOcsxrKVmvdYN2Mu5hu42/wBGm596baT30bFZh5hPcVe1RobS3URyfOeBioLG/lgtzJJHvbPAA61pCm4jUWNFjcXU5bc0ajqDTWEEE/lPLuPvWqupgQNLcwmLcOKhs7O1nJlIyW9at8vUZ1Vja2t94YmtpFDROvIbvXnEOfDGpFIWLW7E4BP3a726Etj4Wu5bZiPLTdx1x3r5/wBW8dma5YSQEYyGBPP1ros9HEE1sz3FLqPUtPS5Qgms+4IKMO5rgfCXjmJYhbySLgjpmurl1KKZVliYMh7ipn3HE4bxLqE9jqBs9ItN9y3zFsZwO5NYseoeKysyCJ0VVJZxxx7GvSUt7Gx829ndTNP3JHAFULzxBpaQbElj3SL/AHRk9sUU4tdByaPJx4s1EyRCaUyeW38Q/n61Hr18mqXFs8RJUjGDwQav6nothcTtLZTxgZyyA9M9MZrNlWCG3i+Vd8b4yD976iutIwuakTrptshjHmSdEUdz9PwpbS/mt5JLnepuZiAFJB4PXispLiWaZnjfdKFyhPG33pJJhDM0cCiWU8NKR0/3fQUwsdM2ox2Nt9nFyQ8mTIwByQewOKdBexLGIBaCcAgxlScnnvxg1U0PRmMLXd1xGjfMy8lx6ZzWtZX1nJeSf62GJeEiiBAUj6cH68GmmS0SS/atRlPnKqxEhGiIxj8q6PwbtsZLvTopVADb1Oc5FYy3TT3jm1hISXh9wG9B357/AMxVrw9bGDxPFbh2aIhgGPXHvUV4qUGmEdzsxqkZYwyMGxxUkVksxM0UhVfSrZ0OFlMiDnuCKrWkU1s7/wAUYPSvN5bLQ35bbDkjBcxk5PpVgRXFtGSBkdhVy3EFwm9QBIPzqZmYId4GBQ3y6sG7GSQrR+axw3oaiks/tYADAVqT2MV9BlW21HBaJbY3scDpSco2HeNj53N453M6biTT1u48qApBHWrmmWn2+RRtQIvUk9amvI47OeQKI/LQY4XnNW4qxyXi9CvHcJ5pJyPStCwubOe58i5kAB7GsffcD/SWtGaEDqVwKLVYptzTQeWD/H6Vk6aTuyTakskhuJJLZ9yA4HOapPa3NxPtS2dm6niporG5gtBLDNuQn7oPNaEmuX8doY40jiwMO2PmNac1n7xSqMxF0y5mdkELZXrgdKTyY4HADFZBwfarn9vXZthawOsfmHDSLyamubO1EMMKOWcnMkzUna2jG2Z3mXcRItzknvS287xZW4jZ3bv1qbU5NOsrdRbXJec8YQ9KpwanNFb+a6B23cAitIwaRcYO10dT4NtjJrPmEsAoJCkV1N1IksVzZyNkhdy7jg//AFqyPAd4b/U2M8PlnZhccDPuf6Vs30X2K6kdsnDfekGRz6e9bx0WpvBPqaV74ai1n4cRpHIYriHJVx6+hrzLw3qd/wCGtbFvfEsjnAftXo1vq0+j6RfPPvk0uSJWjfGdjcg9PwryfU/E1hezY8pl5+8e1J8yldF6Wsz17UTFqFgl1HgkjORXPSRDnHesXw54sjW2FpLKrADAOe1bbXMbEFSCKckm7ii7aHJeJZo9NKzCPfKflQVkRajrWoAw20JhUjl8YwK6e6+xPqizXbp+7HyBj3pb7V7G2ty6yRgEcYHNQlZ6Ibd1qzzlrxoZHjmy8qucuaZOyXM0Zj5UDnPFS3aWNzO8kU4j3EkqagjZIgQvOD1PeukwNAzC1jBT5n6KBUUcrwZZSGuZOMHtmq6SOz5U7peoJ4C09BhysI3yH70h6D6UxWLP+pj+zB/nfmRvb0qexnaDUAYl3DbtXHcCo4bcrHtU8A5kl67vYGrui+XJqrsRiONcADoKmfwsIq7LM1zc3koVRt7EVfh00lcG4Ucc81AVM124jG1T3xVI2FyJpFWdiD1IrlstjWVO6siW6u7OLdC0wk29cGqsdrb3CmeNmVPTNOGgoFEmSf72aZCktkXIw8SnoKLWXuk+zcVoMKQNJsQNn0qdPtNqhKrhV7d6u2stvdJ5iKFmHar6BWgZpowzA4IpSlyq7HJ8qu0YLTGWNpgMMPWojFJdBSx28Vo3uni6jRrRGVScMM1La6NHG6fartsHjywOc/Wlzwte4nKna7PWrG00uTZdWchjdBkrux+lW7rxLp8VnI8vDjjmuc1K0gTUHurKRkQjC56GqMHhu7mjd7mRSj8gZ5rJ0pXvEFHubkHjW3uUeFkVQOh9aJ9QtdRt1Hm+UueSDisK38EC4VyjSxyL0DdDWvp/heWKExXS7kXsDyKjkjzXbu0JpdC5ZpeqpkW+f7MPu5pt1dTJDIxn8w46itXULO3Szgs0lMYx9OKjs/ChWB2S43q44BrdRTY009znba/mcL+6dGHfHBrTg1aW8zCUK7eprRTT49IhIuZUdz0UdhVT7Qz5EUEaRk/eA5qLR5rD5VI0ba1tHQF1Bb1PNXYYbeMiKOMEnvVO4iggtVmQ/Nj7oPWpbC2vZIVlRWBPONpoc5J3S0FqkW57RDC32gLt6LWbNd2miRKzNudvur1Naz2V/dIiGMKR3JpD4bnkl3XBhIx16mi0pNPlC99zV8P3kWqabKMqyuhBGf6V5R4q+HWj395N5I8iUk/MpxzXrNhZQ2cZC5CAY+UYrzbxDo+rvqjsL4pFHkoccnPc10SdknsXFXPINR8C67pFyTboZ0U8Oh5/Kur0Ealp+kMLyMl35CHnHpXb6Pd3N/PHpl/alLsnaHAysg/vA1tatoaQXULBBtVhxipnOTsXGKR4re6D4w1MG6ntpEjJIRXbHy/Ssy58L6utm1zcEYiGSqnJzXtHivxVb6dcLbNFsOPuuMEj1rzy6+IttbzusVqk0DHDEjr+FbxlJ7bGLseepfSQTZlj3Y6ZGDTwJ7qcYj+eQ5UHsPeuo1LV9F1ZWNnprG5IyDsART71VhtZLaCMIA07n5nx0JHFW523Fy32M0WskKpAMeZJxK3XHOMf41o6dorRyrJI+IgN5ZT1Gelbem6O6xLIqlm24YZ5J/zirUGlSuDBwIy+4P0yowCp98qDU899huNjGvJnVlsoSTCxBXPUHHBHsavWulzRAklFhcBmd8jb3wB2+tWpNPkt5zKiN5q4G6XGBkj+X+NVidOZn+23xlcts2xMcr9a1RkzTjultIvItVWe4DhjtXkKev1q1oM8UXiq1XOVAO8kYOcVmtdNHCYYbJ0tyOZ0OWxjgn36Vq+D7CHV9WkETsY4Yg29hyWPH9Kiq7xaHGOp6FNqUasEVgyn0NTwCLG5WXB6isVjp2lP5E0qn6npUtnc2ZDtDN5ncKDnFcChOKNloaMrfZSXjTLHoFp9vM03yzDYT1Bpn2mVbbzTblmx8o71lg393L5jjy1U8jvUSi207g43NS5JRvKicLnvUdtcSLLsmKuOn0rMaLflpJyDnjnmrdkse4Eglu7GovZmV1szyTTobC4WGa1kMZjGWTdjNSzatppt5p57cicn5GIyo/Csm7WzEkt3aS+T8u0Z6Mfasy30u9mgMj4+ztzvZ8D8zXRyuT5kc6XcvzeIJ53a1edGt8AjauPwNU57m3u1WFpvKTPLVTTTo5w6QO3mqep+6foalg0aQA/aVYov3hHyR/jTcYc129UVZbk1lLPCslx9qfyEO2LP8RpkspkjkkecySHliDWldR6RbxQxSyyvtX5YguMe5pll4aedGuI3DW8n3QDyKpWepSa6mRHcqqgorKw7npWpa6mt+BbzkqF6labNo8VgTHdzbnJ4RT0HvVRY0VisCLGv94nk0/dbsaqEZbG3Ppemrbq8cgaTPSn29tG7RwqgI7mo4dMlMaSxBpCR/q0BJNbtj4R1t4Vljt3jZuf3ny1DlK+g7yitNTQ8Nk6ZqMcjsqqG4JGcfh6132vactzGl3GNwkAIyenrXE2nhW/Do91exqVPSP5jXpml2zPo32aR97oODjnFWlKUTSlJp3kZWkaT/amkTwyuklqUeOWI988gj0ryHXPAFiLiRbKZonBOAxyPxr2O0F7Z3DJaqfKDfvUAyWXoSPccVwOv2V+uqSMtzsAbKqyD9ay9pJJO50uCu0eWf8I9qtjqUURhblwN6HIxXVi4uLMFTkgVqzXrwhGuItsinnHIPuKzbm7t55FC/eYgAVrKbZEYJGU/hPWtYmlv5isETH91vPJH07Vn3nh25tbcyXk4ZEH3Y+TXpmt3FzYW0SxRB1VAGVfvDiuEufFsSTMiWpmJODnjmqhOUnpsZzjFHJi3eNDK0TCPOFZxjJp8FvJKwCryTxmtTUJbjUbtFnjWPYP9UvRSex96uW0GxUUKM1o6liIwbKEWnkBVP8X3z1q+mnCJFLttjHPy9/8AGtmx09mCtjORzVDVriK2zCJVVs5GBlvpj60RbkEkomReXGweVGNsR6F+PxAq/pMf2WyM7H/Wcgd6wZvnmBczjLYLOO2a9bXxL4D+yRWs8cL7UCApEwbgUVYuUeVGaVzmIL5Ps7eZGAexqKKZGnG04XuTW5qN34MnjP2Vb6Lb18td3H41zsmoaRfXK6fp8kuxhxJKm05rmVGotATcS9eqkMQ/fIwfsDVKGO2ibdv+U9RVC4a00y4a1uJNxHfqKmtfsoiZg5lB5AWm4SjoXHbctb4LeUui5Y9Aoq9bNKJAZYiAw5zVDfIIUmjsiW6At/hUUUt7dzbrqVooY2+fHUiocW9WyakXJbmnITDmNAqO+SWDZOPYVFa6mTLGLmGKQ/dDZwy+5FYzxB8zNMyIWJQk/PiltGtvtiPGZZJiD8zdKi1rmHkz6HLadpYigjhjmlYEhXIz9az4NRjv5P8ASrNYhuwvOB9azbbX9IuURtRhCv8AdScdTWisQvLYEogtlbKzTNtzTTc0tdTdS7jL6W9eXZp7RPCnHB5zS6fYai4lnvrpYQO+7t9KxLs3UWpxyWF3DLEzgOYxwo71a11jcAR2XlsuMyM0mMn0xTp01F3sUkWr7XtEUxRTXIuLiMjBUcD61W1DW9QW/hjtY2W2YfeQbs/TFTaN4J+1aeXMFu0j8Et0Ht713mmaXbaRZpbWtvGgUAGRu5/GtVS53qDSRz+n6NeXjAz2+YyMiWQ8/lW5Botrbsqsm5uvAwK0DKwcrzJjsvanbWYgL8meuetaRoxWpNiH7Lbp8yQRKR3K1MrNx1HtimqZEJDKpUd85p/mK0ZLSZIHZcVorIBMFctgA9qjMc2csQf909Kje+igwXk+97VPGylTIAcHpu70txkyKI7eQyktHtORjtXCa5Khv2YoyBkBCE5wOgrvYdpJBbqOmeK801y0js9YJeRpHkJYfNk9emPQVnVV0XT0ZteDYXudTlkmt9ggXCHOQc96642aTXqvIoZU+bmsLwZESLmVpAMbQRW/qdzHZ6ZPOWJG0gEUoJezuOb988m+IWmafrurOksUnmoPvocGuTX4f+HktPtF3cGMgZkDS4x75q54nm1WK5mvdNxdHGARywHowrE0bwzqmpRyalrLSJDnKWoY4Y+47CqjpHch6soT2Onfbo7fS0ZbKPksesh9a6C207z445DGNwPyjHQVb03w+XnJ2detdpp+gLjMnA9KxtOexqnGO5zljYGFxsXJzk471bubCO1t5JZ2VcndgjqO4rslsra2idwg+UZzXkvijVbq/vSgDLGjYVkXJwa6adFxV5GNSrzOyMfVbyC7LNvubmPcPlVNoyOvP4U+GZZU3Q6fbW7gY3yHPtyD/OsySYoJE868ffyUVMDjt+NUCt87kW+nEoP+erZyK1uRY07q4lLETzxROqjEcZwrf/Xr0XwVompWXhSTUbe2LSXnzAA5O3txXmEckF/NbW97ALVo5VD7Rxtzz/Wvek8aeH9OsYhDOWgjAVQi4AHaoUW2VzJHnWm6dca7rctvdJIHR/nB42fWtbWfDg0aNZbG8AmznaGq3rPiyPU7uT+z7eO0leMnzRgmQD1Irzu71q81OKceYPtEIySDnOK6FF21M3JHofh7xTLNHIt2haWLh/YetdDDqNvqK+babh2IcYFeU/DzUDqGrSrc7ihXDgDOa9J1LTikIWyujCjjoBXnVoxjJpG0NUWJbVZZRJPBlV5DKarwa1ZSvJZIREAD8xoniC6dDb3WoG3I6/7QqeHSo5Yd9qkEqgdVPNYKNtg5UeUPq+laTGkC2iXl22SRKPu/4VhTas2rMBdWsaoThEB2qg9RViDUtCmjB1Kxk8xsj7SjEs59cdqq/wBmrdxgxgLa7zslunCZArotornMl3KtzDeNPtspI5IE+6IyOKmsdKvWlae8vPssS8s5fnH0rOut1te4tJo5VyMvECB+tdBpvha/8Qx74LYW9pkGS9uHKoB3A/vfhVKNjVR0K95c6OZIxNcNdyqQAyLgAe/rUptdaurtY9MhmeDHHlIcfnXpOieC/D+g2m6Fory9JwZ50BH0UHgV0vm3MMLeWIYISAEBwOfpVezVxqmjiNE+HM8savrUqoCN2xPmf6E9K6GHwt4f024jCaWHkIJDSksv1NaaPPK7JG7XBUZ/dnG0/j1pEjnlbygwiYjncSGB+vNNJItQSEDiNSII4oF77EAGPapo55mYMzPnsrL+tVkM8Od8asFJ+YEHn1q19ohuIsz3TllHRE280XLsM8oxEylU3McDjGTVywlube4QnAXuA2axJ9UgtZkd70hXwM4Gc+gp8LfMZka42sx27sDdWfPqXyncqIoJPtuf3e078eleZ+KXR9ZZ0GFcBgOox2r1PT7WGy0+KG4ffPOuDuPcjoK8s8U6ctnrJzIXJORzk/5FTXiiqUjnNRtmnjHGNvasnRNMafxJaI6/Ir7j+HNT+JLya0miMT4BTJrQ8Fz/AGue7upCCbeHj6nis1HS5s5LYk8RXQa+YFnUj+70rnRqWlRb3jRHulBJULk5HcmrOtfbZLt5LQJKTxhj+hrOn0+GwsVTykjnnO6Tac8enPvWsI2ic0neRlW0TzXBlfJZjk11WnaY1wVO3pVPTIIBgkg11NrqFlbJguo5xVwouT1CVVRWhnavcx6NZgRjMh4wK83ur555pH8yNMn0yTW/4vu0ursssjqgPysOlck7nePMVX9x3rfRaIw1erJJS5AfzTKpPXHeta6iju4I5UQLIAM7elZUSqA2wnDDlT2q3H9rmwkarGDwCx7UxF21iB3O5VQFxjJwao6XhNcQogwCeOtX4dOnkQxS3SopOCQmRT4vDyQyLKl8QAfvrgYqkne5LaMvXX3ao+4Yx75qG7uAjRrbvt2jOV4Oa6c+FrW+uGH211lKlt8jAg4+lY1x4U1OO4MUKx3PfMLZpu4Jot6RrkzxyJP+9dRkFmxxWnarBd7LiGViTw0cpwp/GsCHR7nTZ1l1KF4ISCASu4E+laN1BGqArflY2QcFMbR6AVxVIJOy0OiCTiTzwwz30f2m1lkUdHgYAYHv6UReILQxyafY2kVnC6sJLhl8x/wqSS3shpogbUpbTccFZEyH+mOQKiGhTPHusFiukC/et5svj3XGazjZLUh0lseoaj4ajudWtrbbJEWjDlFX5cjrn0p2q6FqN4fLOoKtnGgTyYDuCj1I612FxdabbXLmS7ljnljMSmSQZwOvPrXMXd7CZk+wWzTvcfK1xbszOu31OAKydWN7DTTMrTfDlpPqklpaXN4HhQN5gb92Qf6iup0HQZdR1JY53LW1rxKxX5ZcdOfWtDSzbX9zHbSHbOF3OqjBVfcjrXYsI4Y0SLMcar8qqvGK6aS5vQcnYicLAqiJ44xGPur0A+lMd2eLMTyM394Lx+tPVC+HDhVB6lME/nUm9wp2sXbsDW9jMhknMKEOku5uN6pnH5ULbsy5V3ORgl+M0CW4ZwphKE9wwIH5c1GYmS4Zjc3Dk9VU4UUmMJLWzhIkdtuOu0n9anjaIxZi3c99ueKaJHhG+UKFHC+Zxk/WkP2pnYMY/LP3ecY9j60hj/mdNyNk/kKYACpM6p8vZTSG1difMcNx93+E/pU+n2WZGLKmz0UcUtWBHYxCOeaXzXZVXO0jIFcDrRi/teSRAZJXPzMQQB7AV6hcraR25jk+RG/unB/SuK1rw1DHctdWt2WZhkxSHn86mUHbQcZK+plabrMGlWEzm4UGSQJjPHA6frXR+Krgx+Fof3qgum5nPv3rkNN8Kabq2lJZXMTxyT3zT/N97cOPwroPHLobaLT4PK2xpt+d8bcDilFWVhyd3c4fTDfLdyCdY3LJmOeMZSQehHaui020mh0mWbUZIzK7EqqLhUXsKyNGt7uMBZlSOFBkY/Pt0rg9Z8Wa3LrskbJItnHIQoHQL6/WtLK+pmj0yzljhcnAAJrctrhJFIDCvKtL1261y+W1sIWaQDOD0UerGu9tPD+roMvcxhyuMKDxW9NaaGc2dAJFljaLI5HNeW+O45LJjFZusOBktjg12j6Lq1u4ZLzcR1BFY+uadcXlu0d7CSCMFgMg05uyJjueQS3GoSSE3LuUx/rLZh/LvVYw3I3SWtxJPEccqxDKfUip9f0KXRLgzW8zCFj19PrVG3vZnKDciyRncu0Y3DuDWa1NDYh+0ajBP5jI08CbiQOT6jP0qZLia0uRaNGfKnjzgNn8qsWTqfPbYEDpud15yPSq8LXGoXpNtayOkY2x7htyfrWsXYiWpPos7z2twmWVo9wDbsbfqayNJIf7aAryzSEqqxnJNdlo3g++mtjDfOY1lJJRB09AT6V2ej+GI9LRVhtYiUHATCn8z1q9WRcy/hb4Vl021lubhWjmm7nnaPQiusBuo9RaGVUCIcqwHBHqK0LUSbinkMcYGBg/1rWS0Eke8N5bj+FhmuWvQjP3luawm1ucibxzrpha0M8J/iKZIqeUz3Mps9GSKEnO8qcMDVOXxPdSzzQRae0MxJVZnwFXFM0qwaDURc2+pQb9pa4ZTlyfTFeXKlapzXOh23Z4ndWkbahFask8DMgbaq8e5I6gcVHfxXsrYVwbRVCKsZ3Ko+nWuw1VdGgupbmS/vDcTRmINKwyQOGP8wK5p2tHcmxiuJJHG3zIyxZQPyFdSqLoQnF62G+GdBg1/wAQwWKNMsanfM68qEB5/Ht+Ne9m4trm4FlAqbYU27TAfLwOOCRiuM+GNuk0l1PMPnRkQnbzjk9QOeR+leh31yFn2/vUCqcLsyMetdEHcqSsZVwk3mptkhDxjJwcgD3HrVVvOKMIZ53YHBdYsrz6Z6j6GroYMVnJVUUn5imGb8DStfKUIVpHboAeAf8ACm7CVytLcC3hYzJcbmGN6R7cfTFRLEWU7YJPLYYZ5CeR74qRbmVmAaN4yepDhgPbjmmSKI7jcLq5djglVOAKhlohltLCJhMp8vjDCMk9PXJqwgia33xvJvPH+rz8vvSLcPbsJLkpHHjbH5qcsT7k80ItxLIyyTIsTfdIB+X2I5z9agoAHnjyjbyD04Qe1RiMbQbmJP3eCwjkyCamexZi26dHG3GMEAjv2qXSdMzfwwbE8t2G4jkY/HnNS02yk0XdEi1i/wDEC3s85OnwIWCtH/FtwAG7+tc94ulWXV87TuzjpxXqd9f2+mWZJwqRrhVFctrdzpN5LGk9nFLNs3GQcEEj1FayoyktGRGok9UeHeKNLvdXlBsSXW3G2VU6jPIrX8Fae+l+EL24k+WW5lIy391eP5k1T1a/vbfxkdI0aVI1u5I1cmNWO48DJ9hXs9p4R0wadFZP5jRwJyQ2MnufxPNJUp8vKDnG/MeP2xdrti4Uk9GXkH8KzFsv7Z8XXMc7YtbRFBXpk4zXq974S0lDugeeLHI+YMDXkPiq2vfDvjG7azk8xLiMSANx1GPzGDWsaUo6y2MnNPRHodnotna6f50kCKDyqgevQfWnXuiWCWxedY0GMknjFcXJ4+u5LC1WOyPnwOrNvcbTgYNZev67feIJUM6+TAowsKvlSfU+tdLlTSMGpNj9cuNCi8yG3Jnb0j5A/GuIe0lklJjiKqegNbn2fy1Vx9wk4AAzUuEjXyw7xE43Hblax0uXczbTS5UbdKGCgcle3+NaaWzqrOm/yuBuHGD6kGmFJYyWWZmXGA2P6VoL5jWyJ9rhYjkRqm0kfWmiXcrxq05Ki5jZgOijkn0rRCTxwiF7ZwxAIeOYEflVVlCSsJNyI3JKYbj29KXzY2yhlJizkBgA2fendIVjStoxNGAInEwBBfzAqj6062SLBgmOMNzJC43N+PeqkcpaERB3bdnAC8L6DJ7Vdge/2oMbvL+6IyFx9DmqTQrGtY2IuLaZX85oJgV/eYkIHuD0+vWuRG6O9ljdYQlu20FlxxnqPU10Nrc3NxdlMyZXt8rcd+9c5qmpMNVkeJ1jWQ5aIjILDjjNc2IipK63NKbcSzb3G/W1gEC3Fs+SHkgDOwx2NNmmu5bj7FoOnrbKSSzREeaT3yeo+lUotelBcRIYJf8AllJuwE9e3er2h2tql/DPFqUalFZrqUBi+cZxt759RXE4KMuZm/NHds9G0vSnWzgN1BBcb1Ezm6JzC7ZOPXgD861tP1AJYypp2lHzEkAmOCV9NwJ4FUL+e/1a5dLGS0vbOXMcrxv5ckTZ4HTt6VnxWt1YeIbawW/vdS1G5cKis+2KD3YD061lBc0mTy3PSrMyRw7k8r7VcruDlfux54HAratBvjZzPM+HOFB2hQO2B2+tVbtDDAbaL5jsCDbwfc5qpE2otq5lVhDYwgAhQP8ASTgnAPpzXoQXLoSzQmuZ2fBjZCTwRGXyPy4p0W5Y3lWGNN3VjEUJH6k1NBqltdAmOQKclQGwMkdcetPkVHky7g47LnP6VroIpx3Tl8Bt3HOISoz9T1/KpXmeKNXlYgHkDysnFSvaqxZghL/7Rx+FRmwVsmaWQ5GPLSQ7RSGRpdm4TzhFKI+oaSIjPoQKWS9hjwHkiRzzhx8xHsOppzWlvbxpF5rxqRxGCWJH481EJLHzy63NsxUYwCCaVmAYhuYpDdg+ST/dYA1cju4bS1faGVAm4MQcAAVF5iXDqYnDL0LKMj6UMsUmVZ2AHH3+G9sClsByWo+N9GniydTtg20jHmjhh1Fc5qfxF0ya3VrEvd3DjCxxDJB9/QV1+o+E9Gu5GZLKGOXOSykD9O9ZEfhAGZwpg2Lz8nXFVzpoVmjR8AaHfTRQ65qkhSR8mKBcYAPcnGa6HWfCulasS84ZJs58xTg1dt7uG0sraE/JthyFPXjis46ot1GjLIMMN2QacKVyZTaOf1Hw4NEtZ7y1lWVI42LoowTgeleM6rPFOTtb5zyVC4IPfivaNW121/4Rq4aGZGllRo0UMOWPH6V5nHos1wmZYonK/ekXIOPrRUpbJBCp3LnwolsLaW+M2xbjdnnrsA6/rXq8d5HHarM5GZCMD3boK8Sn8LRC4eS3upredRtLxuRwev1FacNjrrW8cB8RTMsbq42xKTx0z6itab5Y2ZnNczuj1e+vLXTrJ7m9mVEHJY/yFcNf/ECwdWFtZTSj+82FH61magbu7ZI9RvTME+ZXYbUx9PX61ReytYH3QIJUPsc/4VUpdiUjn/Edvq/iU7oLe2gQc7Q+4kVzMXg/V4Z14gBHPLH/AAr05dOKA+YYLdGXHJOV9/rRBpkDXCokolIIbfnlj3A55+lRyl8xz3h/wpcaeTPeTMW28KBhefU12NppsJdWETCZBjcvzKP8atmykUmaaBiCcYUfNx04q3AskNrmGPaVyPmQA/THc1olYzbbFt7eSJSzqSPXBYD861IWiOf38XmKP4SOKob52AVfKRGwCHjK/rVuLTrZSJJkHGMsmeT71TfYSRaa+tVKRG/ijnJ4VkBJ/Clv782UcJeTcszY3qMYqRrewSLzmVyAMgHp9BXO3+prq8j2MaMUjw3T7vsffFZTZpES708Xsx25kgZmfPXYfTHvTS2gWF0RIssd6i5xADub8PWqtpfQRWVzLDKsckfzgNk5xzz+VLPd2WsW3lNCqecAyyY+YMP7vr+FefVjadzaM18LPMf7IhsIo7d5ba9uFG6SVz+7gY84B/iwP1NW7a+tf7O2WFg01wr/AL2SQkoPdeij9azLt73UbiXyDZS28h2M0bhDGegXnnjGMYPFVUSaG+it4pJr2+LYQbsRRkd8Dr61EU5N3ZqoX6nq+jarcafo9sYHha7vHMokdCVEYYL0HsD+ZrpktYdRZr8X9/MN7ERJMY0THbavb65NYV/bvaWMNlCw3pAsKlRg5GNxH49KdZtrMmowSpMlpp9uqtII1H+lscsQp9MmumGmhMkbMsxmk+eMq56fu9wxUcULFWljiijZuC3k7SR2Hcmn23jHSb5pP3xgVWKKZFADkdSp74q3NNaSygibfjtESTn3xWjsJXMllkEm1jvfbk7YSBn68Z/KnCKRVQyO8W7kBkzx+daMsAcsY0k83I++SMVWbSWKlrmWSTdx5UbHbn86lx7FXIVdpYBcsplj6gupAI7ECnrdBxtWCFGHJDDkjrx6086dFFbqiz+QuMCLBYgD6mqTeTHM5XVIHKjgKeTSaaGmmK1ra3sEw1BZEtiTyMjd7DBzV2He3lNaebsOMNjAA/GoI5Gu5E8uZnT7pdF+U+2aW4KSLsEki7DtLb+GPpxU2VhlfX4/Et5In2W8sZCybXilVht/4EOD+IrjrrTfGczRQPPaRsvRoXBJH4n+ldmksKSYZvLVTkjzM/p3q7a3VpcPIm4MByTGpzj61Sm3sxOJ5naeC9YsdRj1EKJLpJRNuZ924g55rutS8fLY2ctrd2k9tM0YyShILHrgjrWyqQ7CJMop+ZQ3BNVDELpxHuZYQpLkoSD+NEZzT1Bxj0ONvvHtuVYWUM07gELhSFPYZJridWupNZ1Q3t4/lyMoURL/AAgdvevXbrQdMvIn+yIIJccvH8oH4dxXLz+BLiVicx3BTrIQVOPrWzquSsY8lnc4aCG1Eg84Nt+n5U6SP7OwMdzbNG+cq0ZOB+Vb17oEti0kbJIGGATk7fzrOTT/ACZQs87yr1JiAOP0pJiaMkFZpvLkZU7qV3batR2qsN0twsaejHcKs3VtbBnVJJEPUOw+Uj05qsqWkQBXMh9sjP8ASi9twJ4tInuP3sS20yr12tgkfSo3tY1kVFkEZ7hw2R/MVaEcRGyR4IFYYLAklff8ajWwsvPCpOZXU7hIBnce496v0JK1rYxRGV3mnBPAG3H9eatDR7WYK8ZmeQdQUyo/Lk1pS2dxgPNbmTnAMaAMfTilh+2QwDyRJGqgjDRAfhx1p2WzQrvoQxae8MSu5VIf9rcQPwNWY/JZ2EcqPIo4ZCMAVUuZFARpruJUJAw0WOf51B9shQtvQRx4AynUt6E+hFHNbYVi7qOqWFlFHFJdBL/IIQxdvXPvXD608C6grjLRSjcCOCM8mtPUYoJ0W4bf5zqwUkfKqj0/XFYOrDMEK84j4JPUe36VnJ8zsy1HQb5Ykj2By6AllI6j2IrTtL3T7RgZYpUuUA2NbHk+5DA4P0rDtPK3DMxibP3tuf8A9VXLq28qQZYbXG4MBnn6f4Vk49GUpKLsz0fULDVtX1may0/UUtreDb58SsE28DdIVA789cnOPWu98LW0OnakIbWJ18iF3eSY7pn6c8fd5JG31PU4rP0vU9FsrLUdQezi01p3j825xlZJeyx7uD6kjp+RLfDOoXdz411CW5u4DDcQhII0kBZwWHOf1P1FckZSly2Vu5tFqx6L/aRh0z7XOqHEbSOEPQDoue5zxmvItc8dazdagk9s6xWQynkRkbQv1x3/AKV2/jJZJ2sNI0pZfNjYO7oMoFOQQ315P41iX/ge2s1jEgUSugMiRr8i/wD6v610tN6GZl6PJfarfxXVjcHei4S3wRHEuecnP610cXinUdM+131zMXgMpjtYQdy8dc4xj8ansvC66ZZeRG8bzyJu8vJ+Vc57VyWuW19Ebe0trsGWN3kkSIcrk/xDuaaTQHoei+Jp9ajd5xJCpxskjjYAn0HHNbcVlfq6gX0zJnLbyvHtwK8QsfEGu6fctNLfzTRYKMqnG0Y6DHArtvDeqQWWiz62+pMY3chDO5zuH8J/z0pp6geh/Z2R2Jnds8cIvA9CTQtmiyF8xqOuQoBridO8c3d9Koee3ghLZ3gBiR6Y9T2roZvFGni/WynVhORn7h2j8cVegjWaFmG2MoyN13en4VB9hiEhfLSMOAhb5V+lWImiVMRxbcjOHOM05kdgRhFB64OaVrjK6QwhyVWAEcZHJBqSdCieXE8Keu7j+VMRpyMJbIqA4GW/WpBB5alURN7clmOf55osFzJ1bw1Y6zFF5txLHJEcxyQSlCPXoefxrlf+EAWzBEOqXjQq5IBuWx7969D8tRGQwVeOTwc/hTduMNHGu0jgFiP0oV47CdpbnB23gKKzCi2jSMEZLBNw/wAc1or4MjWB2mnIBOSmRgV1RUeYrBQWxglXP5VDmRnYTCONM9WIwfanzMOVHMv4fSHYUYM2CMBNxNNPh75iw2EMvPcn2xXXNHG7hAoyo6kcVEpDSOsQWJ1GeFo5pIOVHGT6JPAmFyWA4UryR+PSqx06UxnFupwPl3JtOfqK7vAkGGjWSTHpVeaBEBRlPzcAAkgH+lWqnch0+xxA0hLiLbcwsm0jaXbIH51MNMt0z+6jlPGdq4wPY+tdadLWb7y4bHpVP+zDA7KsiqoGTx2rRSTM3FoxrKxV8FQVZTw0nzjFT7LqO/8A3VpHKhHMp65+hrQaO1lHly3EeR6Pz+lRXOq2lsBHFOqPhsCTuAPTrindWFYSO3aIE3ZVEx/COST9OagvdZisnkjaPMar/rXOBnGcYrLu9Ye8s/tBIhlhIO9D8rDPO0kelZursniDS5jECkkbbiB/EPXH9fpWbm+haj3Lj69dXDeWkizQmINIoGNuehFUHjj0VjceZIJGIMIx13Hvis2OXybKWze4HlbwnyLhwcZK5HStu5Jn09HgiSZYn2hHwBsI5A+mKi7e5WxS8Qwwppkt58iXF1GY/l+UbugP681zCXT26x295cNb20B2xHGCSOfl65BrV1y/0zVD/Z4kKQ2qrKJG+YAnI5x2GOtUtHSdlntjc2l3cRpvtZhOJPlPU4xnP1FZz1Zk5K+9rHCXEF3qeovY20oVlwZIwQiJx8zAdgOSSefWtry4tMjjsdOJNyhWaaRxiRowwzgdhnnHpyfSoUNtbJcSXEAsVBR7y4twcSnOVhQH82K8ce3NGG6ubjxJ/aUtzEN0oMUcZB84Mdu0+2Dg56Cps2jvi0eyX2qpYWDXc6pKUjaVlU446Bc98nv7V47q3ivWdVvluEna3hQbIoIDhEX0x3/H0rsPFUi6hPaaRY+a1xABukT7hUjBB/U/jWDfeHYtLnjtrl0Fx5SvKiDKoDnBJ/z1o16GctzM04ajqV/C9uTujwqxAEIozj1469a66LXL/SGm1A3bNbeYUgt1fKZHBJAximwaGdOslWJ4nuJwWWMElkGQe3WuM1i7u7eaG2juvulmdYhjDFudw6E015iPStL8Z3ep+fLcK6hsGN4Ym4IwNo4OT711EYv5/Kia/cFhmTe6jy89uOa8BXVdXgk81L64AA2Hy3KcenFdl4VmhtdO/te41MRIkjBBK5DF8dDjrmmtWVzaHqbW4st0IvJpXcnny1wB6EmmRWozI6hFXg7gBn6jgDFcDD441Pb5UWpwxQs+TIAGOPTp1OOK0tY+JMumzRQPpscgGGdgNoH09frTaEpHTzSXABjhjZgxyCTwB+FRi0nnOXuA5AwI26D/AArF0z4i2tyDHHpjxbuS0z8H8RW4NdhlgaWW1jt7Ygky7uuB2+tJU29SnNIkhtIYp2Kx24YfLuByVPsfrV66VoUWKHyFQj5gePxOOtZGm+KLS9j2w2biNSQWYAqPfOeKsf8ACSaFn7PFqMSzscuWBOPzzT5LIXMrkjaRDNPE8twsqIwIUOQT+tW2EAlZYQkeGxuJ4I796eZtNSyEr3cSK4yGdlAb6A1Wk1XSLZFlNxbrCynALkZ98YqeSw+e4k0NxHt+zldpHLbdwx9Mg5pwtLo2haa4O0nLJuAxUkGr6LcbXt7yCRtoDGKUnHsfSqr61p6u6XF9bRJuxmQjDewGc0+R7oFNFg2wiVW3FmwRt2bs8VUudKsrlCXiCllOSnUn0wKLzxLo9u4ijcSyIueM7fpWJaePoLi6kS3tY7QxAltwJJ9h0p8slsxc0OpLN4Tnij/0K6Yttz5bp1/MYFZE/hm6RWaexZzj5WVQv8v/AK9al98RozCsVnarNdkDgrwPbPrXLXnjTxArywveNCTwqp8wB7DPatE2t9TJpN6E/wDYKSrtmgmiwRhpW4H50j2thbq27yrh16hVwAB7+tU28Ry35H2yRvOwNzKOCcelZVxqyWJZo5lKKfmhCnd+Z+lXzRIszf05bORGl8sBg3ysxLLjnNUr3WLi1vJZ3GLZUzv689MDJrAXXG1OcQxwiEE4DluAPfHBNWNYQXMNraC4O9txYyEDIAyOB260ubTQOXXUwZdSnmYoq/uuoyOSx706TVbsK8UiqWIwXYdOnar0SRx2ieZhJYSMOp4bnsfpUOppFe2zSwptkRst/tA98VnqXdDUvp5odsknm5QlsjG30x6VQ1P91bxICQxbcCepFTxE+UbcuoTdjIGGz3FZ99P510Ni7o4ztVT0xQtwGLEHijdgAzFgSOOmP8atun7tBNK0aRcDcMEjrxVu3ggks4ZDGYsglcHcAc4zz9KZDbylnQyRT3CjdGxfIx649frUuV2ZupFv0PQPFfhbV7jWCCI7m3ulDuEkIitjnjqcKOOxqPR9Jbwzf+e2r2gMLAbpT98fLjbwWIHP14q/FqNzNpd2rSSyKjZnuZgp8ticFY1Gdzc88kVhaa2l6hPdGVWiigUmGY6eqsiqeQxwQDz1HftXPFS5bPQ6kurPYodYe3vLKL7M8s16py4Tbheu49+AeOlcyJ9ZPiSe9M8z2aPgpJgKyDsB7AcfSsK58R3MelW73KPHc2cjtAk7gu5HHBGOoOcEDAHTpSaj4xjvb2a3miiWymAdZk75/hY59+1XGS6kzVjRuviIZLS4lggH2iUlHRzgpzwf9r2rLsTF9slvo5XExOHJXG49cYP4VnGGO2SNrFonum+aMnpg/wCTTodI1K4Zri53JIchlUnk57D/AD0rRJ3IbOkSzOru8RK28Lru3qNuR6YP8/rXR3vhu1vdCtrOyYyQxKgCR4wc8lz/APX9Kz4tBks9MgEcm+8aPJRgRngjA9CMk1W0rSLvRpmkkuX8y4bYI0bJPr+XND3BGtHoVrYWKxpaGFgVQzFck5x9wZ6e9Lqus6P4cl3XM73ExUbEKYLY4yT2FWrzUbq3vIbHTbCBlVA8jSA7wTx+BxXJ31pY+I3nmTyzcIxEoEmRj2NO99g2HLra6jO18NVuMnLNGkpGPQAdCK018Ua3bRRR2ccaR4JDYByO2Se9ccluohlNtGEEXAOOG9z60yGO8tp47iT/AEl1ORDIcADtinqK56jp3jS4Mam9EaO3BZlwoOPUVdk8eWFvErArdM33miOFH515Le60UISaPzSRlkTt9OKrWoF5b7II/JWZuTK+ce1HN2DU9ktvGGj6i5YeYir1YoMD8a2bPU9OuGYW90ZyPvDPAryXS47axhZ8faC2cRR8A49zVDUtQliXaEFkDwcMc49wKHbcd2ezQ69pBkcRXVsOMsQ4yPrSvd6VOouJrm2k2ncpDdK8ZiR9Mt5I2WCdWAdZOpye9R6lFf8AlRbEdy4GHZgoA7jFHQVz2NvFWjKzR+fuI6tt4zWcPiFor3rQL5wIGN+3ivK0S6s9lxLFcTzbgGC/dVfXFW3u4Y7iSRLKJ9yZ8wH7o9xQ2FzutW8aXMaH+zIIliT/AFk8q5P4LWXD481OcGCGOOafaf3gXbg9uKwNMnjhIlvgXEhztHQ+hNMvLm2Mxmto7hWL8gAYx2x/9ejbUL3JrLxzqba0bS+knAIGQWJAb1wO1dPdahJLYyx3V8yQucK5bgA9AQa5/T1srkrOsmwsMMJo+Tx39qz5Wlhnnmupd1ujbYkVeo7EDvTTshMNT1X+z4449OxOGbPnkcgA9s0xZYZdcFzPKytIoBzjr3B9K2hDYXOlYnRIQ8Z5YgM3Oen5flWNcaA8rvcW0rFJeAkjfkPb6UnF9AujfuBFqltJbxRqikBwU6AAcYrGuL6fStTiRNrwABDt/iUYzms+1sX0TV5A0j3PljcVJ+XcOcfhWvLrNlcSOlwke0Kc+X0VsZ5p77iJLq2tbFJXVC8U7ZUK+AAf/wBdYTeLUshPbmDbBsLo6HgFR0/EcE+9UtV1W7u9NN1DHu0+KU9G+ZwvQY7Ak/pXG3N4dRldpptqRFT5Sj5Rj+HPfp+NJu70CNmEE93p+oyatNcrGzkCSLZv3lhu246AfUitojSo7y0ubC7m0+5lG5CYj+6c9QD6fgRTPsFxPZ6hFtMbqftKAD94wP8AEM9iMjt0A71Ta6v4/skV2FkGwlHm+aOdCODkj5SPXj3oauS4vdFbVLPUJL2VbzzZgQHfB+WInoMdPwH9Km0u3h065hklnjHlzq0meS6Aggrxkjr+lR2169zCQ01w8MeS0s6qQhJ7Lzk/jUVrcRSvK6oyooJik+zICoHXJ6Zx3qVe1mditudhourSWd1HaywyNcXET4kaPbkH5h154DcZxVDS7K7k1ia+d5ZbdM+Z5v8Ay0Qc4GevTjPpUT6ws2jWv2+Bt8LsF3OBIGGMEEDjg8DGODxTLvVmEckOI5rWQbmZRh+R0IB/lSQprqivq3i2aSeSSBiGlDLJE38Jzwc98dqyrC2WSXzy5G05YkdT1xioRFGjo0JR5d25cnjFTmGXEktxIEk5Uop6/gKZmaUwS9uUiQLFCw3blGBj0wa1Nc0+J9Ls49Nlke1jjUNGqgqxIyX9fz9KyVtFtrCJklDzFclWyOxGB71npBPBOsgmbMjYCqeT60AaUNpbRqq/Z5rc8Bp2TK8+g/rT9Svra0uPLkuGuoxjGVwWxxnnoKZcX8qolnp9rGVUbnZl+cn168Vmxxw3sTSSIWlQ/vW8ztQIvW1/bxnz7a7ljkJJaMNwPQYPBqC6n1G7nVpppSoHyYbCBfwqoluZlkkt0CqnT0I/rUZjuYZ4zOBMw58pj2o1A6a2uJ7WBRIwjEnUn7o44yf1ot5Y7JvtDbbgOv3lfjOfzFc3JfyvKEmXzV7ovb6U1X89CkQ8iIn5i75qrhY1tRuH1a4Msc8mxeFXjCirWl2DyORc3ErxqDvXJYYHNUdMS3R94Uy9cRKdoPHqaTV7mVlCiD7KMDOHPI9xU+YHRWOvaNb3LraReShXlx149QetR3NzYzk3900UsmcxrGcED3Fcp5bWCOjRwTbxuV+pWori1uPKjkZHIk+6zMBx9KvnexPKjqW8TWAiMZh3PyS+Op7CqM3ie3uJfkjkgJGGZTkGsOO1dVJMUsjg846BfWnbYkkfZCrDqG3Z2j39aTm+o+VEsl9cFWW1+RFPzS4+Y0sOo3kabFjE8nOJDncP6VZ0+GCNRLdozITkKON3uar3dzbq26HzBluhAxjt/k0tQKVveTLdBHkkVCfmBY8n8K3HjSS2/wBJuNkO7Ac9AOwweay7eW3J37trNx+8TIP1x2qNcNmS4k/dIdqKo6+4FMGiWe8jhXy7BMpu4mYfNiks5Al+Xmkb5hyT1OeoJrQD2z6ayvGkCsMb2b53Gc9O3b8qpDTmktDNC2S2RtZh+H/6qduwrmpezw3MRSOMIgw4K9hjjFZEt08VyoGDHjAx/EvvVGSJra5MTP5jDqueM+lSrcB38lyoXsyDhD/hTeorWLN0UjDR2w+Z/RuFWqKOtuNqJ5hbjeOhPoKnNlP5LSNt2DJJLZJA7+lQBogSRIxdRxjgD2zQVFp7EyPNaSmSWdVJ4MQG7PtjoKnkEIeKe3kaF3HGVPB9M1WVc+aqptON4wOT7jPtn8qYs08TrmRnUjID/MCPb0pNEuHU/9k=", + "image/png": "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", + "text/plain": [ + "" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "show_images([\n", + " Image.open(\"image_Brightness_light.jpg\"),\n", + " Image.open(\"image_Brightness_dark.jpg\"),\n", + "], resolution=256)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "08d3ff52", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "class", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.20" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file diff --git a/docs/en/Research_Tutorial/controllable_models.md b/docs/en/Research_Tutorial/controllable_models.md new file mode 100644 index 0000000000000000000000000000000000000000..da2c1e034b4bcf444df65f6359d9f8575fbf8861 --- /dev/null +++ b/docs/en/Research_Tutorial/controllable_models.md @@ -0,0 +1,634 @@ +# ModelScope AIGC Series Course - Controllable Generation Technology + +This experiment uses **Diffusion-Templates** as the framework to systematically introduce various controllable generation techniques for image generation models, and demonstrate how to train a controllable generation module from scratch. + +Related Resources: + +* Open Source Code: [DiffSynth-Studio](https://github.com/modelscope/DiffSynth-Studio) +* Technical Report: [arXiv](https://arxiv.org/abs/2604.24351) +* Project Homepage: [GitHub](https://modelscope.github.io/diffusion-templates-web/) +* Documentation: [English Version](https://diffsynth-studio-doc.readthedocs.io/en/latest/Diffusion_Templates/Introducing_Diffusion_Templates.html)、[中文版](https://diffsynth-studio-doc.readthedocs.io/zh-cn/latest/Diffusion_Templates/Introducing_Diffusion_Templates.html) +* Online Demo: [ModelScope Studio](https://modelscope.cn/studios/DiffSynth-Studio/Diffusion-Templates) +* Model Collection: [ModelScope](https://modelscope.cn/collections/DiffSynth-Studio/KleinBase4B-Templates)、[ModelScope International](https://modelscope.ai/collections/DiffSynth-Studio/KleinBase4B-Templates)、[HuggingFace](https://huggingface.co/collections/DiffSynth-Studio/kleinbase4b-templates) +* Dataset: [ModelScope](https://modelscope.cn/collections/DiffSynth-Studio/ImagePulseV2)、[ModelScope International](https://modelscope.ai/collections/DiffSynth-Studio/ImagePulseV2)、[HuggingFace](https://huggingface.co/collections/DiffSynth-Studio/imagepulsev2) + +```python +!pip install diffsynth==2.0.15 transformers==5.8.1 +``` + +```python +from diffsynth.diffusion.template import TemplatePipeline +from diffsynth.pipelines.flux2_image import Flux2ImagePipeline, ModelConfig +import torch +from modelscope import dataset_snapshot_download, snapshot_download +from PIL import Image +import numpy as np + +vram_config = { + "offload_dtype": "disk", + "offload_device": "disk", + "onload_dtype": torch.float8_e4m3fn, + "onload_device": "cpu", + "preparing_dtype": torch.float8_e4m3fn, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} + +def show_images(images, resolution): + images = [i.resize((resolution, resolution)).convert("RGB") for i in images] + images = [np.array(i) for i in images] + images = np.concat(images, axis=1) + images = Image.fromarray(images) + return images +``` + +## Image Structure Control + +First, load the base model [black-forest-labs/FLUX.2-klein-base-4B](https://modelscope.cn/models/black-forest-labs/FLUX.2-klein-base-4B). This is a 4B-parameter image generation model, and all controllable generation modules in this experiment will be mounted on top of this base model. + +```python +pipe = Flux2ImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="black-forest-labs/FLUX.2-klein-base-4B", origin_file_pattern="transformer/*.safetensors", **vram_config), + ModelConfig(model_id="black-forest-labs/FLUX.2-klein-4B", origin_file_pattern="text_encoder/*.safetensors", **vram_config), + ModelConfig(model_id="black-forest-labs/FLUX.2-klein-4B", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + tokenizer_config=ModelConfig(model_id="black-forest-labs/FLUX.2-klein-4B", origin_file_pattern="tokenizer/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) +``` + +[ControlNet](https://arxiv.org/abs/2302.05543) is one of the earliest controllable generation techniques for Diffusion models. It uses structural conditions such as **depth maps, edge maps, and pose maps** to achieve **pixel-level** control over the generated image. + +By loading [DiffSynth-Studio/Template-KleinBase4B-ControlNet](https://modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-ControlNet) in Template format, you can generate images with different styles using different prompts while preserving the input structure. + +```python +template = TemplatePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ModelConfig(model_id="DiffSynth-Studio/Template-KleinBase4B-ControlNet")], + lazy_loading=True, +) +``` + +```python +dataset_snapshot_download( + "DiffSynth-Studio/examples_in_diffsynth", + allow_file_pattern=["templates/*"], + local_dir="data/examples", +) +image = template( + pipe, + prompt="A cat is sitting on a stone, bathed in bright sunshine.", + seed=0, cfg_scale=4, num_inference_steps=50, + template_inputs = [{ + "image": Image.open("data/examples/templates/image_depth.jpg"), + "prompt": "A cat is sitting on a stone, bathed in bright sunshine.", + }], + negative_template_inputs = [{ + "image": Image.open("data/examples/templates/image_depth.jpg"), + "prompt": "", + }], +) +image.save("image_ControlNet_sunshine.jpg") +image = template( + pipe, + prompt="A cat is sitting on a stone, surrounded by colorful magical particles.", + seed=0, cfg_scale=4, num_inference_steps=50, + template_inputs = [{ + "image": Image.open("data/examples/templates/image_depth.jpg"), + "prompt": "A cat is sitting on a stone, surrounded by colorful magical particles.", + }], + negative_template_inputs = [{ + "image": Image.open("data/examples/templates/image_depth.jpg"), + "prompt": "", + }], +) +image.save("image_ControlNet_magic.jpg") +``` + +```python +show_images([ + Image.open("data/examples/templates/image_depth.jpg"), + Image.open("image_ControlNet_sunshine.jpg"), + Image.open("image_ControlNet_magic.jpg"), +], resolution=256) +``` +![Image](https://github.com/user-attachments/assets/048ee1d4-6f84-4edc-beb7-49bb5ec2d53d) + +## Attribute Value Control + +[AttriCtrl](https://arxiv.org/abs/2508.02151) is a type of controllable generation model capable of injecting continuous value attributes as control conditions into the generation process. + +Run the following code to load [DiffSynth-Studio/Template-KleinBase4B-SoftRGB](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-SoftRGB) and precisely control the overall color tone of the image by inputting R/G/B values. + +```python +template = TemplatePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ModelConfig(model_id="DiffSynth-Studio/Template-KleinBase4B-SoftRGB")], + lazy_loading=True, +) +``` + +```python +image = template( + pipe, + prompt="A cat is sitting on a stone.", + seed=0, cfg_scale=4, num_inference_steps=50, + template_inputs = [{"R": 128/255, "G": 128/255, "B": 128/255}], +) +image.save("image_rgb_normal.jpg") +image = template( + pipe, + prompt="A cat is sitting on a stone.", + seed=0, cfg_scale=4, num_inference_steps=50, + template_inputs = [{"R": 208/255, "G": 185/255, "B": 138/255}], +) +image.save("image_rgb_warm.jpg") +image = template( + pipe, + prompt="A cat is sitting on a stone.", + seed=0, cfg_scale=4, num_inference_steps=50, + template_inputs = [{"R": 94/255, "G": 163/255, "B": 174/255}], +) +image.save("image_rgb_cold.jpg") +``` + +```python +show_images([ + Image.open("image_rgb_normal.jpg"), + Image.open("image_rgb_warm.jpg"), + Image.open("image_rgb_cold.jpg"), +], resolution=256) +``` +![Image](https://github.com/user-attachments/assets/025ce94d-fe43-4166-8967-2acfbc76ada3) + +## Image Editing + +Image editing models are a type of **highly versatile** controllable generation model: given an original image and an editing instruction, the model can make partial or overall modifications to the original image. + +Run the following code to load [DiffSynth-Studio/Template-KleinBase4B-Edit](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Edit). This model uses **KV-Cache** to reuse the attention key-value pairs of the input image, enabling fast editing with quick inference speed. + +```python +template = TemplatePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ModelConfig(model_id="DiffSynth-Studio/Template-KleinBase4B-Edit")], + lazy_loading=True, +) +``` + +```python +dataset_snapshot_download( + "DiffSynth-Studio/examples_in_diffsynth", + allow_file_pattern=["templates/*"], + local_dir="data/examples", +) +image = template( + pipe, + prompt="Put a hat on this cat.", + seed=0, cfg_scale=4, num_inference_steps=50, + template_inputs = [{ + "image": Image.open("data/examples/templates/image_reference.jpg"), + "prompt": "Put a hat on this cat.", + }], + negative_template_inputs = [{ + "image": Image.open("data/examples/templates/image_reference.jpg"), + "prompt": "", + }], +) +image.save("image_Edit_hat.jpg") +image = template( + pipe, + prompt="Make the cat turn its head to look to the right.", + seed=0, cfg_scale=4, num_inference_steps=50, + template_inputs = [{ + "image": Image.open("data/examples/templates/image_reference.jpg"), + "prompt": "Make the cat turn its head to look to the right.", + }], + negative_template_inputs = [{ + "image": Image.open("data/examples/templates/image_reference.jpg"), + "prompt": "", + }], +) +image.save("image_Edit_head.jpg") +``` + +```python +show_images([ + Image.open("data/examples/templates/image_reference.jpg"), + Image.open("image_Edit_hat.jpg"), + Image.open("image_Edit_head.jpg"), +], resolution=256) +``` +![Image](https://github.com/user-attachments/assets/5cc0d8c3-6b4e-4fec-a36f-e58b6b00fe1a) + +## Style Control + +The most straightforward way to achieve image style control is to train a style [LoRA](https://arxiv.org/abs/2106.09685) — however, each style requires separate training, which is costly. To address this, we trained a special [Image-to-LoRA](https://arxiv.org/abs/2606.13809) model that can **generate LoRA weights on-demand from input reference images**, eliminating the traditional style training process. + +Run the following code to load [DiffSynth-Studio/KleinBase4B-i2L-v2](https://www.modelscope.cn/models/DiffSynth-Studio/KleinBase4B-i2L-v2) and dynamically generate LoRA from reference images to control the image style. + +```python +from modelscope import snapshot_download + +template = TemplatePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ModelConfig(model_id="DiffSynth-Studio/KleinBase4B-i2L-v2")], + lazy_loading=True, +) +``` + +```python +snapshot_download("DiffSynth-Studio/KleinBase4B-i2L-v2", allow_file_pattern="assets/*", local_dir="data") +images = [Image.open(f"data/assets/image_1_{i}.jpg") for i in range(4)] +image = template( + pipe, + prompt="A cat is sitting on a stone", + seed=42, cfg_scale=4, num_inference_steps=50, + template_inputs = [{"image": images}], + negative_template_inputs = [{"image": [Image.fromarray(np.zeros_like(np.array(i)) + 128) for i in images]}], +) +image.save("image_KleinBase4B-i2L-v2_1.jpg") +images = [Image.open(f"data/assets/image_3_{i}.jpg") for i in range(4)] +image = template( + pipe, + prompt="A cat is sitting on a stone", + seed=42, cfg_scale=4, num_inference_steps=50, + template_inputs = [{"image": images}], + negative_template_inputs = [{"image": [Image.fromarray(np.zeros_like(np.array(i)) + 128) for i in images]}], +) +image.save("image_KleinBase4B-i2L-v2_2.jpg") +``` + +```python +show_images([ + Image.open("data/assets/image_1_2.jpg"), + Image.open("image_KleinBase4B-i2L-v2_1.jpg"), + Image.open("data/assets/image_3_0.jpg"), + Image.open("image_KleinBase4B-i2L-v2_2.jpg"), +], resolution=256) +``` +![Image](https://github.com/user-attachments/assets/2eb8abf6-4b7c-4f59-9f7e-69b4c3d3ce3a) + +## Training Controllable Generation Models + +**The Diffusion-Templates framework allows developers to train controllable generation models of any structure** — as long as you provide the model definition, data processing logic, and dataset, you can integrate into a unified training workflow. Below, we train a **brightness control model** from scratch, allowing images to be generated with specified brightness values. + +Step 1: Write the model structure code (including the numerical encoder, KV-Cache generation backbone, and data annotator): + +```python +code = """ +import torch, math, os +from PIL import Image +import numpy as np + + +class SingleValueEncoder(torch.nn.Module): + def __init__(self, dim_in=256, dim_out=4096, length=32): + super().__init__() + self.length = length + self.prefer_value_embedder = torch.nn.Sequential(torch.nn.Linear(dim_in, dim_out), torch.nn.SiLU(), torch.nn.Linear(dim_out, dim_out)) + self.positional_embedding = torch.nn.Parameter(torch.randn(self.length, dim_out)) + + def get_timestep_embedding(self, timesteps, embedding_dim, max_period=10000): + half_dim = embedding_dim // 2 + exponent = -math.log(max_period) * torch.arange(0, half_dim, dtype=torch.float32, device=timesteps.device) / half_dim + emb = timesteps[:, None].float() * torch.exp(exponent)[None, :] + emb = torch.cat([torch.cos(emb), torch.sin(emb)], dim=-1) + return emb + + def forward(self, value, dtype): + emb = self.get_timestep_embedding(value * 1000, 256).to(dtype) + emb = self.prefer_value_embedder(emb).squeeze(0) + base_embeddings = emb.expand(self.length, -1) + positional_embedding = self.positional_embedding.to(dtype=base_embeddings.dtype, device=base_embeddings.device) + learned_embeddings = base_embeddings + positional_embedding + return learned_embeddings + + +# Backbone model structure (converts input values into KV-Cache vectors) +class ValueFormatModel(torch.nn.Module): + def __init__(self, num_double_blocks=5, num_single_blocks=20, dim=3072, num_heads=24, length=512): + super().__init__() + self.block_names = [f"double_{i}" for i in range(num_double_blocks)] + [f"single_{i}" for i in range(num_single_blocks)] + self.proj_k = torch.nn.ModuleDict({block_name: SingleValueEncoder(dim_out=dim, length=length) for block_name in self.block_names}) + self.proj_v = torch.nn.ModuleDict({block_name: SingleValueEncoder(dim_out=dim, length=length) for block_name in self.block_names}) + self.num_heads = num_heads + self.length = length + + @torch.no_grad() + def process_inputs(self, pipe, scale, **kwargs): + return {"value": torch.Tensor([scale]).to(dtype=pipe.torch_dtype, device=pipe.device)} + + def forward(self, value, **kwargs): + kv_cache = {} + for block_name in self.block_names: + k = self.proj_k[block_name](value, value.dtype) + k = k.view(1, self.length, self.num_heads, -1) + v = self.proj_v[block_name](value, value.dtype) + v = v.view(1, self.length, self.num_heads, -1) + kv_cache[block_name] = (k, v) + return {"kv_cache": kv_cache} + + +# Converts image data to model input (calculates brightness from RGB values in the image) +class DataAnnotator(torch.nn.Module): + def __init__(self): + pass + + def __call__(self, image, **kwargs): + image = Image.open(image) + image = np.array(image) + return {"scale": image.astype(np.float32).mean() / 255} + + +TEMPLATE_MODEL = ValueFormatModel +TEMPLATE_MODEL_PATH = "model.safetensors" if "model.safetensors" in os.listdir(os.path.dirname(__file__)) else None +TEMPLATE_DATA_PROCESSOR = DataAnnotator +""" + +import os + +os.makedirs("models/template_brightness", exist_ok=True) +with open("models/template_brightness/model.py", "w", encoding="utf-8") as f: + f.write(code.strip()) +``` + +Step 2: Download and preprocess the dataset, while generating the metadata required for training: + +```python +import json, os +from modelscope import dataset_snapshot_download + +# Download dataset +dataset_snapshot_download( + "DiffSynth-Studio/ImagePulseV2-TextImage", + local_dir="data/ImagePulseV2-TextImage", + allow_file_pattern="data/1770381050168240056.tar.gz" +) + +# Extract dataset +os.makedirs("data/dataset", exist_ok=True) +os.system("tar zxvf data/ImagePulseV2-TextImage/data/1770381050168240056.tar.gz -C data/dataset") + +# Generate dataset metadata +dataset_path = "data/dataset/1770381050168240056" +metadata = [] +for file_name in os.listdir(dataset_path): + if file_name.endswith(".json"): + with open(os.path.join(dataset_path, file_name), "r") as f: + data = json.load(f) + data["template_inputs"] = {"image": os.path.join(dataset_path, data["image"])} + metadata.append(data) +with open("data/dataset/metadata.json", "w") as f: + json.dump(metadata, f, indent=4, ensure_ascii=False) +``` + +Step 3: Start training: + +```python +import os + +# Training script +code = """ +import torch, os, argparse, accelerate +from diffsynth.core import UnifiedDataset +from diffsynth.pipelines.flux2_image import Flux2ImagePipeline, ModelConfig +from diffsynth.diffusion import * +os.environ["TOKENIZERS_PARALLELISM"] = "false" + + +class Flux2ImageTrainingModule(DiffusionTrainingModule): + def __init__( + self, + model_paths=None, model_id_with_origin_paths=None, + tokenizer_path=None, + trainable_models=None, + lora_base_model=None, lora_target_modules="", lora_rank=32, lora_checkpoint=None, + preset_lora_path=None, preset_lora_model=None, + use_gradient_checkpointing=True, + use_gradient_checkpointing_offload=False, + extra_inputs=None, + fp8_models=None, + offload_models=None, + template_model_id_or_path=None, + resume_from_checkpoint=None, remove_prefix_in_ckpt=None, + enable_lora_hot_loading=False, + device="cpu", + task="sft", + ): + super().__init__() + # Load models + model_configs = self.parse_model_configs(model_paths, model_id_with_origin_paths, fp8_models=fp8_models, offload_models=offload_models, device=device) + tokenizer_config = self.parse_path_or_model_id(tokenizer_path, default_value=ModelConfig(model_id="black-forest-labs/FLUX.2-dev", origin_file_pattern="tokenizer/")) + self.pipe = Flux2ImagePipeline.from_pretrained(torch_dtype=torch.bfloat16, device=device, model_configs=model_configs, tokenizer_config=tokenizer_config) + self.pipe = self.load_training_template_model(self.pipe, template_model_id_or_path, use_gradient_checkpointing, use_gradient_checkpointing_offload) + self.pipe = self.split_pipeline_units(task, self.pipe, trainable_models, lora_base_model, remove_unnecessary_params=True) + self.resume_from_checkpoint(resume_from_checkpoint, remove_prefix_in_ckpt) + if enable_lora_hot_loading: self.pipe.dit = self.pipe.enable_lora_hot_loading(self.pipe.dit) + + # Training mode + self.switch_pipe_to_training_mode( + self.pipe, trainable_models, + lora_base_model, lora_target_modules, lora_rank, lora_checkpoint, + preset_lora_path, preset_lora_model, + task=task, + ) + + # Other configs + self.use_gradient_checkpointing = use_gradient_checkpointing + self.use_gradient_checkpointing_offload = use_gradient_checkpointing_offload + self.extra_inputs = extra_inputs.split(",") if extra_inputs is not None else [] + self.fp8_models = fp8_models + self.task = task + self.task_to_loss = { + "sft:data_process": lambda pipe, *args: args, + "direct_distill:data_process": lambda pipe, *args: args, + "sft": lambda pipe, inputs_shared, inputs_posi, inputs_nega: FlowMatchSFTLoss(pipe, **inputs_shared, **inputs_posi), + "sft:train": lambda pipe, inputs_shared, inputs_posi, inputs_nega: FlowMatchSFTLoss(pipe, **inputs_shared, **inputs_posi), + "direct_distill": lambda pipe, inputs_shared, inputs_posi, inputs_nega: DirectDistillLoss(pipe, **inputs_shared, **inputs_posi), + "direct_distill:train": lambda pipe, inputs_shared, inputs_posi, inputs_nega: DirectDistillLoss(pipe, **inputs_shared, **inputs_posi), + } + + def get_pipeline_inputs(self, data): + inputs_posi = {"prompt": data["prompt"]} + inputs_nega = {"negative_prompt": ""} + inputs_shared = { + # Assume you are using this pipeline for inference, + # please fill in the input parameters. + "input_image": data["image"], + "height": data["image"].size[1], + "width": data["image"].size[0], + # Please do not modify the following parameters + # unless you clearly know what this will cause. + "embedded_guidance": 1.0, + "cfg_scale": 1, + "rand_device": self.pipe.device, + "use_gradient_checkpointing": self.use_gradient_checkpointing, + "use_gradient_checkpointing_offload": self.use_gradient_checkpointing_offload, + } + inputs_shared = self.parse_extra_inputs(data, self.extra_inputs, inputs_shared) + return inputs_shared, inputs_posi, inputs_nega + + def forward(self, data, inputs=None): + if inputs is None: inputs = self.get_pipeline_inputs(data) + inputs = self.transfer_data_to_device(inputs, self.pipe.device, self.pipe.torch_dtype) + for unit in self.pipe.units: + inputs = self.pipe.unit_runner(unit, self.pipe, *inputs) + loss = self.task_to_loss[self.task](self.pipe, *inputs) + return loss + + +def flux2_parser(): + parser = argparse.ArgumentParser(description="Simple example of a training script.") + parser = add_general_config(parser) + parser = add_image_size_config(parser) + parser.add_argument("--tokenizer_path", type=str, default=None, help="Path to tokenizer.") + parser.add_argument("--initialize_model_on_cpu", default=False, action="store_true", help="Whether to initialize models on CPU.") + return parser + + +if __name__ == "__main__": + parser = flux2_parser() + args = parser.parse_args() + + accelerator = accelerate.Accelerator( + gradient_accumulation_steps=args.gradient_accumulation_steps, + kwargs_handlers=[accelerate.DistributedDataParallelKwargs(find_unused_parameters=args.find_unused_parameters)], + ) + dataset = UnifiedDataset( + base_path=args.dataset_base_path, + metadata_path=args.dataset_metadata_path, + repeat=args.dataset_repeat, + data_file_keys=args.data_file_keys.split(","), + main_data_operator=UnifiedDataset.default_image_operator( + base_path=args.dataset_base_path, + max_pixels=args.max_pixels, + height=args.height, + width=args.width, + height_division_factor=16, + width_division_factor=16, + ) + ) + model = Flux2ImageTrainingModule( + model_paths=args.model_paths, + model_id_with_origin_paths=args.model_id_with_origin_paths, + tokenizer_path=args.tokenizer_path, + trainable_models=args.trainable_models, + lora_base_model=args.lora_base_model, + lora_target_modules=args.lora_target_modules, + lora_rank=args.lora_rank, + lora_checkpoint=args.lora_checkpoint, + preset_lora_path=args.preset_lora_path, + preset_lora_model=args.preset_lora_model, + use_gradient_checkpointing=args.use_gradient_checkpointing, + use_gradient_checkpointing_offload=args.use_gradient_checkpointing_offload, + extra_inputs=args.extra_inputs, + fp8_models=args.fp8_models, + offload_models=args.offload_models, + template_model_id_or_path=args.template_model_id_or_path, + resume_from_checkpoint=args.resume_from_checkpoint, + remove_prefix_in_ckpt=args.remove_prefix_in_ckpt, + enable_lora_hot_loading=args.enable_lora_hot_loading, + task=args.task, + device="cpu" if (args.initialize_model_on_cpu or args.enable_model_cpu_offload) else accelerator.device, + ) + model_logger = ModelLogger( + args.output_path, + remove_prefix_in_ckpt=args.remove_prefix_in_ckpt, + enable_tensorboard_log=args.enable_tensorboard_log, + enable_swanlab_log=args.enable_swanlab_log, + swanlab_project=args.swanlab_project, + enable_wandb_log=args.enable_wandb_log, + wandb_project=args.wandb_project, + ) + launcher_map = { + "sft:data_process": launch_data_process_task, + "direct_distill:data_process": launch_data_process_task, + "sft": launch_training_task, + "sft:train": launch_training_task, + "direct_distill": launch_training_task, + "direct_distill:train": launch_training_task, + } + launcher_map[args.task](accelerator, dataset, model, model_logger, args=args) +""".strip() +with open("train.py", "w", encoding="utf-8") as f: + f.write(code) + +# Start training task +cmd = """ +accelerate launch train.py \ + --dataset_base_path data/dataset/1770381050168240056 \ + --dataset_metadata_path data/dataset/metadata.json \ + --extra_inputs "template_inputs" \ + --max_pixels 1048576 \ + --dataset_repeat 1 \ + --model_id_with_origin_paths "black-forest-labs/FLUX.2-klein-4B:text_encoder/*.safetensors,black-forest-labs/FLUX.2-klein-base-4B:transformer/*.safetensors,black-forest-labs/FLUX.2-klein-4B:vae/diffusion_pytorch_model.safetensors" \ + --template_model_id_or_path "DiffSynth-Studio/Template-KleinBase4B-Brightness:" \ + --tokenizer_path "black-forest-labs/FLUX.2-klein-4B:tokenizer/" \ + --learning_rate 1e-4 \ + --num_epochs 1 \ + --remove_prefix_in_ckpt "pipe.template_model." \ + --output_path "models/template_brightness_training" \ + --trainable_models "template_model" \ + --use_gradient_checkpointing \ + --find_unused_parameters \ + --fp8_models "black-forest-labs/FLUX.2-klein-4B:text_encoder/*.safetensors,black-forest-labs/FLUX.2-klein-base-4B:transformer/*.safetensors" +""" +os.system(cmd) +``` + +After training is complete, package the obtained weights together with the model definition written earlier into the `models/template_brightness` directory to form a complete Template model: + +```python +import shutil + +shutil.copy( + "models/template_brightness_training/epoch-0.safetensors", + "models/template_brightness/model.safetensors", +) +``` + +Load the trained model and generate images with different brightness by passing different `scale` values: + +```python +template = TemplatePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ModelConfig("models/template_brightness")], + lazy_loading=True, +) +``` + +```python +image = template( + pipe, + prompt="A cat is sitting on a stone.", + seed=0, cfg_scale=4, num_inference_steps=50, + template_inputs = [{"scale": 0.7}], + negative_template_inputs = [{"scale": 0.5}] +) +image.save("image_Brightness_light.jpg") +image = template( + pipe, + prompt="A cat is sitting on a stone.", + seed=0, cfg_scale=4, num_inference_steps=50, + template_inputs = [{"scale": 0.3}], + negative_template_inputs = [{"scale": 0.5}] +) +image.save("image_Brightness_dark.jpg") +``` + +```python +show_images([ + Image.open("image_Brightness_light.jpg"), + Image.open("image_Brightness_dark.jpg"), +], resolution=256) +``` +![Image](https://github.com/user-attachments/assets/ef15b73b-3c7a-4bb8-9b8e-1c4c37d9f3a1) diff --git a/docs/en/Research_Tutorial/inference_time_scaling.ipynb b/docs/en/Research_Tutorial/inference_time_scaling.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..8a6e20d9059454b5af2482630ad00867502515c0 --- /dev/null +++ b/docs/en/Research_Tutorial/inference_time_scaling.ipynb @@ -0,0 +1,236 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "8db54992", + "metadata": {}, + "source": [ + "# Inference Optimization Techniques\n", + "\n", + "DiffSynth-Studio aims to drive technological innovation through its foundational framework. This article demonstrates how to build a training-free image generation enhancement solution using DiffSynth-Studio, taking Inference-time scaling as an example." + ] + }, + { + "cell_type": "markdown", + "id": "0911cad4", + "metadata": {}, + "source": [ + "## 1. Image Quality Quantification\n", + "\n", + "First, we need to find an indicator to quantify image quality from generation models. Manual scoring is the most straightforward solution but too costly for large-scale applications. However, after collecting manual scores, training an image classification model to predict human scoring is completely feasible. PickScore [[1]](https://arxiv.org/abs/2305.01569) is such a model. Running the following code will automatically download and load the [PickScore model](https://modelscope.cn/models/AI-ModelScope/PickScore_v1)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4faca4ca", + "metadata": {}, + "outputs": [], + "source": [ + "from modelscope import AutoProcessor, AutoModel\n", + "import torch\n", + "\n", + "class PickScore(torch.nn.Module):\n", + " def __init__(self):\n", + " super().__init__()\n", + " self.processor = AutoProcessor.from_pretrained(\"laion/CLIP-ViT-H-14-laion2B-s32B-b79K\")\n", + " self.model = AutoModel.from_pretrained(\"AI-ModelScope/PickScore_v1\").eval().to(\"cuda\")\n", + "\n", + " def forward(self, image, prompt):\n", + " image_inputs = self.processor(images=image, padding=True, truncation=True, max_length=77, return_tensors=\"pt\").to(\"cuda\")\n", + " text_inputs = self.processor(text=prompt, padding=True, truncation=True, max_length=77, return_tensors=\"pt\").to(\"cuda\")\n", + " with torch.inference_mode():\n", + " image_embs = self.model.get_image_features(**image_inputs).pooler_output\n", + " image_embs = image_embs / torch.norm(image_embs, dim=-1, keepdim=True)\n", + " text_embs = self.model.get_text_features(**text_inputs).pooler_output\n", + " text_embs = text_embs / torch.norm(text_embs, dim=-1, keepdim=True)\n", + " score = (text_embs @ image_embs.T).flatten().item()\n", + " return score\n", + "\n", + "reward_model = PickScore()" + ] + }, + { + "cell_type": "markdown", + "id": "5f807cec", + "metadata": {}, + "source": [ + "## 2. Inference-time Scaling Techniques\n", + "\n", + "Inference-time Scaling [[2]](https://arxiv.org/abs/2504.00294) is an interesting technique aiming to improve generation quality by increasing computational costs during inference. For example, in language models, models like [Qwen/Qwen3.5-27B](https://modelscope.cn/models/Qwen/Qwen3.5-27B) and [deepseek-ai/DeepSeek-R1](deepseek-ai/DeepSeek-R1) use \"thinking mode\" to guide the model to spend more time considering results more carefully, producing more accurate answers. Next, we'll use the [black-forest-labs/FLUX.2-klein-4B](https://modelscope.cn/models/black-forest-labs/FLUX.2-klein-4B) model as an example to explore how to design Inference-time Scaling solutions for image generation models.\n", + "\n", + "> Before starting, we slightly modified the `Flux2ImagePipeline` code to allow initialization with specific Gaussian noise matrices for result reproducibility. See `Flux2Unit_NoiseInitializer` in [diffsynth/pipelines/flux2_image.py](https://github.com/modelscope/DiffSynth-Studio/blob/main/diffsynth/pipelines/flux2_image.py).\n", + "\n", + "Run the following code to load the [black-forest-labs/FLUX.2-klein-4B](https://modelscope.cn/models/black-forest-labs/FLUX.2-klein-4B) model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c5818a87", + "metadata": {}, + "outputs": [], + "source": [ + "from diffsynth.pipelines.flux2_image import Flux2ImagePipeline, ModelConfig\n", + "\n", + "pipe = Flux2ImagePipeline.from_pretrained(\n", + " torch_dtype=torch.bfloat16,\n", + " device=\"cuda\",\n", + " model_configs=[\n", + " ModelConfig(model_id=\"black-forest-labs/FLUX.2-klein-4B\", origin_file_pattern=\"text_encoder/*.safetensors\"),\n", + " ModelConfig(model_id=\"black-forest-labs/FLUX.2-klein-4B\", origin_file_pattern=\"transformer/*.safetensors\"),\n", + " ModelConfig(model_id=\"black-forest-labs/FLUX.2-klein-4B\", origin_file_pattern=\"vae/diffusion_pytorch_model.safetensors\"),\n", + " ],\n", + " tokenizer_config=ModelConfig(model_id=\"black-forest-labs/FLUX.2-klein-4B\", origin_file_pattern=\"tokenizer/\"),\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "f58e9945", + "metadata": {}, + "source": [ + "Generate a sketch cat image using the prompt `\"sketch, a cat\"` and score it with the PickScore model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6ea2d258", + "metadata": {}, + "outputs": [], + "source": [ + "def evaluate_noise(noise, pipe, reward_model, prompt):\n", + " # Generate an image and compute the score.\n", + " image = pipe(\n", + " prompt=prompt,\n", + " num_inference_steps=4,\n", + " initial_noise=noise,\n", + " progress_bar_cmd=lambda x: x,\n", + " )\n", + " score = reward_model(image, prompt)\n", + " return score\n", + "\n", + "torch.manual_seed(1)\n", + "prompt = \"sketch, a cat\"\n", + "noise = pipe.generate_noise((1, 128, 64, 64), rand_device=\"cuda\", rand_torch_dtype=pipe.torch_dtype)\n", + "\n", + "image_1 = pipe(prompt, num_inference_steps=4, initial_noise=noise)\n", + "print(\"Score:\", reward_model(image_1, prompt))\n", + "image_1" + ] + }, + { + "cell_type": "markdown", + "id": "5e11694e", + "metadata": {}, + "source": [ + "### 2.1 Best-of-N Random Search\n", + "\n", + "Model generation results have inherent randomness. Different random seeds produce different images - sometimes high quality, sometimes low. This leads to a simple Inference-time scaling solution: generate images using multiple random seeds, score them with PickScore, and retain only the highest-scoring image." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "241f10d2", + "metadata": {}, + "outputs": [], + "source": [ + "from tqdm import tqdm\n", + "\n", + "def random_search(base_latents, objective_reward_fn, total_eval_budget):\n", + " # Search for the noise randomly.\n", + " best_noise = base_latents\n", + " best_score = objective_reward_fn(base_latents)\n", + " for it in tqdm(range(total_eval_budget - 1)):\n", + " noise = pipe.generate_noise((1, 128, 64, 64), seed=None)\n", + " score = objective_reward_fn(noise)\n", + " if score > best_score:\n", + " best_score, best_noise = score, noise\n", + " return best_noise\n", + "\n", + "best_noise = random_search(\n", + " base_latents=noise,\n", + " objective_reward_fn=lambda noise: evaluate_noise(noise, pipe, reward_model, prompt),\n", + " total_eval_budget=50,\n", + ")\n", + "image_2 = pipe(prompt, num_inference_steps=4, initial_noise=best_noise)\n", + "print(\"Score:\", reward_model(image_2, prompt))\n", + "image_2" + ] + }, + { + "cell_type": "markdown", + "id": "8e9bf966", + "metadata": {}, + "source": [ + "We can clearly see that after multiple random searches, the final selected cat image shows richer fur details and significantly improved PickScore. However, this brute-force random search is extremely inefficient - generation time multiplies while easily hitting quality limits. Therefore, we need a more efficient search method that achieves higher scores within the same computational budget." + ] + }, + { + "cell_type": "markdown", + "id": "c9578349", + "metadata": {}, + "source": [ + "### 2.2 SES Search\n", + "\n", + "To overcome random search limitations, we introduce the Spectral Evolution Search (SES) algorithm [[3]](https://arxiv.org/abs/2602.03208). Detailed code is available at [diffsynth/utils/ses](https://github.com/modelscope/DiffSynth-Studio/blob/main/diffsynth/utils/ses).\n", + "\n", + "Image generation in diffusion models is largely determined by low-frequency components in the initial noise. The SES algorithm decomposes Gaussian noise through wavelet transforms, fixes high-frequency details, and applies an evolution search using the cross-entropy method specifically on low-frequency components to find optimal initial noise with higher efficiency.\n", + "\n", + "Run the following code to perform efficient best Gaussian noise matrix search using SES." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "adeed2aa", + "metadata": {}, + "outputs": [], + "source": [ + "from diffsynth.utils.ses import ses_search\n", + "\n", + "best_noise = ses_search(\n", + " base_latents=noise,\n", + " objective_reward_fn=lambda noise: evaluate_noise(noise, pipe, reward_model, prompt),\n", + " total_eval_budget=50,\n", + ")\n", + "image_3 = pipe(prompt, num_inference_steps=4, initial_noise=best_noise)\n", + "print(\"Score:\", reward_model(image_3, prompt))\n", + "image_3" + ] + }, + { + "cell_type": "markdown", + "id": "940a97f1", + "metadata": {}, + "source": [ + "Observing the results, under the same computational budget, SES achieves significantly higher PickScore compared to random search. The \"sketch cat\" demonstrates more refined overall composition and more layered contrast between light and shadow.\n", + "\n", + "Inference-time scaling can achieve higher image quality at the cost of longer inference time. The generated image data can then be used to train the model itself through methods like DPO [[4]](https://arxiv.org/abs/2311.12908) or differential training [[5]](https://arxiv.org/abs/2412.12888), opening another interesting research direction." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "dzj8", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.19" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/en/Research_Tutorial/inference_time_scaling.md b/docs/en/Research_Tutorial/inference_time_scaling.md new file mode 100644 index 0000000000000000000000000000000000000000..1ca62b6bddaf3035e8716fd7bdd19a3663a6fa36 --- /dev/null +++ b/docs/en/Research_Tutorial/inference_time_scaling.md @@ -0,0 +1,140 @@ +# Inference Optimization Techniques + +DiffSynth-Studio aims to drive technological innovation through its foundational framework. This article demonstrates how to build a training-free image generation enhancement solution using DiffSynth-Studio, taking Inference-time scaling as an example. + +Notebook: https://github.com/modelscope/DiffSynth-Studio/blob/main/docs/en/Research_Tutorial/inference_time_scaling.ipynb + +## 1. Image Quality Quantification + +First, we need to find an indicator to quantify image quality from generation models. Manual scoring is the most straightforward solution but too costly for large-scale applications. However, after collecting manual scores, training an image classification model to predict human scoring is completely feasible. PickScore [[1]](https://arxiv.org/abs/2305.01569) is such a model. Running the following code will automatically download and load the [PickScore model](https://modelscope.cn/models/AI-ModelScope/PickScore_v1). + +```python +from modelscope import AutoProcessor, AutoModel +import torch + +class PickScore(torch.nn.Module): + def __init__(self): + super().__init__() + self.processor = AutoProcessor.from_pretrained("laion/CLIP-ViT-H-14-laion2B-s32B-b79K") + self.model = AutoModel.from_pretrained("AI-ModelScope/PickScore_v1").eval().to("cuda") + + def forward(self, image, prompt): + image_inputs = self.processor(images=image, padding=True, truncation=True, max_length=77, return_tensors="pt").to("cuda") + text_inputs = self.processor(text=prompt, padding=True, truncation=True, max_length=77, return_tensors="pt").to("cuda") + with torch.inference_mode(): + image_embs = self.model.get_image_features(**image_inputs).pooler_output + image_embs = image_embs / torch.norm(image_embs, dim=-1, keepdim=True) + text_embs = self.model.get_text_features(**text_inputs).pooler_output + text_embs = text_embs / torch.norm(text_embs, dim=-1, keepdim=True) + score = (text_embs @ image_embs.T).flatten().item() + return score + +reward_model = PickScore() +``` + +## 2. Inference-time Scaling Techniques + +Inference-time Scaling [[2]](https://arxiv.org/abs/2504.00294) is an interesting technique aiming to improve generation quality by increasing computational costs during inference. For example, in language models, models like [Qwen/Qwen3.5-27B](https://modelscope.cn/models/Qwen/Qwen3.5-27B) and [deepseek-ai/DeepSeek-R1](deepseek-ai/DeepSeek-R1) use "thinking mode" to guide the model to spend more time considering results more carefully, producing more accurate answers. Next, we'll use the [black-forest-labs/FLUX.2-klein-4B](https://modelscope.cn/models/black-forest-labs/FLUX.2-klein-4B) model as an example to explore how to design Inference-time Scaling solutions for image generation models. + +> Before starting, we slightly modified the `Flux2ImagePipeline` code to allow initialization with specific Gaussian noise matrices for result reproducibility. See `Flux2Unit_NoiseInitializer` in [diffsynth/pipelines/flux2_image.py](https://github.com/modelscope/DiffSynth-Studio/blob/main/diffsynth/pipelines/flux2_image.py). + +Run the following code to load the [black-forest-labs/FLUX.2-klein-4B](https://modelscope.cn/models/black-forest-labs/FLUX.2-klein-4B) model. + +```python +from diffsynth.pipelines.flux2_image import Flux2ImagePipeline, ModelConfig + +pipe = Flux2ImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="black-forest-labs/FLUX.2-klein-4B", origin_file_pattern="text_encoder/*.safetensors"), + ModelConfig(model_id="black-forest-labs/FLUX.2-klein-4B", origin_file_pattern="transformer/*.safetensors"), + ModelConfig(model_id="black-forest-labs/FLUX.2-klein-4B", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + tokenizer_config=ModelConfig(model_id="black-forest-labs/FLUX.2-klein-4B", origin_file_pattern="tokenizer/"), +) +``` + +Generate a sketch cat image using the prompt `"sketch, a cat"` and score it with the PickScore model. + +```python +def evaluate_noise(noise, pipe, reward_model, prompt): + # Generate an image and compute the score. + image = pipe( + prompt=prompt, + num_inference_steps=4, + initial_noise=noise, + progress_bar_cmd=lambda x: x, + ) + score = reward_model(image, prompt) + return score + +torch.manual_seed(1) +prompt = "sketch, a cat" +noise = pipe.generate_noise((1, 128, 64, 64), rand_device="cuda", rand_torch_dtype=pipe.torch_dtype) + +image_1 = pipe(prompt, num_inference_steps=4, initial_noise=noise) +print("Score:", reward_model(image_1, prompt)) +image_1 +``` + +![Image](https://github.com/user-attachments/assets/b6546c6d-b368-4463-b703-d561a9134ba0) + +### 2.1 Best-of-N Random Search + +Model generation results have inherent randomness. Different random seeds produce different images - sometimes high quality, sometimes low. This leads to a simple Inference-time scaling solution: generate images using multiple random seeds, score them with PickScore, and retain only the highest-scoring image. + +```python +from tqdm import tqdm + +def random_search(base_latents, objective_reward_fn, total_eval_budget): + # Search for the noise randomly. + best_noise = base_latents + best_score = objective_reward_fn(base_latents) + for it in tqdm(range(total_eval_budget - 1)): + noise = pipe.generate_noise((1, 128, 64, 64), seed=None) + score = objective_reward_fn(noise) + if score > best_score: + best_score, best_noise = score, noise + return best_noise + +best_noise = random_search( + base_latents=noise, + objective_reward_fn=lambda noise: evaluate_noise(noise, pipe, reward_model, prompt), + total_eval_budget=50, +) +image_2 = pipe(prompt, num_inference_steps=4, initial_noise=best_noise) +print("Score:", reward_model(image_2, prompt)) +image_2 +``` + +![Image](https://github.com/user-attachments/assets/b8dba70a-daa8-4368-8f32-a6c150daecb5) + +We can clearly see that after multiple random searches, the final selected cat image shows richer fur details and significantly improved PickScore. However, this brute-force random search is extremely inefficient - generation time multiplies while easily hitting quality limits. Therefore, we need a more efficient search method that achieves higher scores within the same computational budget. + +### 2.2 SES Search + +To overcome random search limitations, we introduce the Spectral Evolution Search (SES) algorithm [[3]](https://arxiv.org/abs/2602.03208). Detailed code is available at [diffsynth/utils/ses](https://github.com/modelscope/DiffSynth-Studio/blob/main/diffsynth/utils/ses). + +Image generation in diffusion models is largely determined by low-frequency components in the initial noise. The SES algorithm decomposes Gaussian noise through wavelet transforms, fixes high-frequency details, and applies an evolution search using the cross-entropy method specifically on low-frequency components to find optimal initial noise with higher efficiency. + +Run the following code to perform efficient best Gaussian noise matrix search using SES. + +```python +from diffsynth.utils.ses import ses_search + +best_noise = ses_search( + base_latents=noise, + objective_reward_fn=lambda noise: evaluate_noise(noise, pipe, reward_model, prompt), + total_eval_budget=50, +) +image_3 = pipe(prompt, num_inference_steps=4, initial_noise=best_noise) +print("Score:", reward_model(image_3, prompt)) +image_3 +``` + +![Image](https://github.com/user-attachments/assets/9a3f7598-3812-46d2-b333-cd65e49886ab) + +Observing the results, under the same computational budget, SES achieves significantly higher PickScore compared to random search. The "sketch cat" demonstrates more refined overall composition and more layered contrast between light and shadow. + +Inference-time scaling can achieve higher image quality at the cost of longer inference time. The generated image data can then be used to train the model itself through methods like DPO [[4]](https://arxiv.org/abs/2311.12908) or differential training [[5]](https://arxiv.org/abs/2412.12888), opening another interesting research direction. diff --git a/docs/en/Research_Tutorial/train_from_scratch.md b/docs/en/Research_Tutorial/train_from_scratch.md new file mode 100644 index 0000000000000000000000000000000000000000..527664c000d0eef3b53a29fceda4f4eb28435595 --- /dev/null +++ b/docs/en/Research_Tutorial/train_from_scratch.md @@ -0,0 +1,476 @@ +# Training Models from Scratch + +DiffSynth-Studio's training engine supports training foundation models from scratch. This article introduces how to train a small text-to-image model with only 0.1B parameters from scratch. + +## 1. Building Model Architecture + +### 1.1 Diffusion Model + +From UNet [[1]](https://arxiv.org/abs/1505.04597) [[2]](https://arxiv.org/abs/2112.10752) to DiT [[3]](https://arxiv.org/abs/2212.09748) [[4]](https://arxiv.org/abs/2403.03206), the mainstream model architectures of Diffusion have undergone multiple evolutions. Typically, a Diffusion model's inputs include: + +* Image tensor (`latents`): The encoding of images, generated by the VAE model, containing partial noise +* Text tensor (`prompt_embeds`): The encoding of text, generated by the text encoder +* Timestep (`timestep`): A scalar used to mark which stage of the Diffusion process we are currently at + +The model's output is a tensor with the same shape as the image tensor, representing the denoising direction predicted by the model. For details about Diffusion model theory, please refer to [Basic Principles of Diffusion Models](../Training/Understanding_Diffusion_models.md). In this article, we build a DiT model with only 0.1B parameters: `AAADiT`. + +
+Model Architecture Code + +```python +import torch, accelerate +from PIL import Image +from typing import Union +from tqdm import tqdm +from einops import rearrange, repeat + +from transformers import AutoProcessor, AutoTokenizer +from diffsynth.core import ModelConfig, gradient_checkpoint_forward, attention_forward, UnifiedDataset, load_model +from diffsynth.diffusion import FlowMatchScheduler, DiffusionTrainingModule, FlowMatchSFTLoss, ModelLogger, launch_training_task +from diffsynth.diffusion.base_pipeline import BasePipeline, PipelineUnit +from diffsynth.models.general_modules import TimestepEmbeddings +from diffsynth.models.z_image_text_encoder import ZImageTextEncoder +from diffsynth.models.flux2_vae import Flux2VAE + + +class AAAPositionalEmbedding(torch.nn.Module): + def __init__(self, height=16, width=16, dim=1024): + super().__init__() + self.image_emb = torch.nn.Parameter(torch.randn((1, dim, height, width))) + self.text_emb = torch.nn.Parameter(torch.randn((dim,))) + + def forward(self, image, text): + height, width = image.shape[-2:] + image_emb = self.image_emb.to(device=image.device, dtype=image.dtype) + image_emb = torch.nn.functional.interpolate(image_emb, size=(height, width), mode="bilinear") + image_emb = rearrange(image_emb, "B C H W -> B (H W) C") + text_emb = self.text_emb.to(device=text.device, dtype=text.dtype) + text_emb = repeat(text_emb, "C -> B L C", B=text.shape[0], L=text.shape[1]) + emb = torch.concat([image_emb, text_emb], dim=1) + return emb + + +class AAABlock(torch.nn.Module): + def __init__(self, dim=1024, num_heads=32): + super().__init__() + self.norm_attn = torch.nn.RMSNorm(dim, elementwise_affine=False) + self.to_q = torch.nn.Linear(dim, dim) + self.to_k = torch.nn.Linear(dim, dim) + self.to_v = torch.nn.Linear(dim, dim) + self.to_out = torch.nn.Linear(dim, dim) + self.norm_mlp = torch.nn.RMSNorm(dim, elementwise_affine=False) + self.ff = torch.nn.Sequential( + torch.nn.Linear(dim, dim*3), + torch.nn.SiLU(), + torch.nn.Linear(dim*3, dim), + ) + self.to_gate = torch.nn.Linear(dim, dim * 2) + self.num_heads = num_heads + + def attention(self, emb, pos_emb): + emb = self.norm_attn(emb + pos_emb) + q, k, v = self.to_q(emb), self.to_k(emb), self.to_v(emb) + emb = attention_forward( + q, k, v, + q_pattern="b s (n d)", k_pattern="b s (n d)", v_pattern="b s (n d)", out_pattern="b s (n d)", + dims={"n": self.num_heads}, + ) + emb = self.to_out(emb) + return emb + + def feed_forward(self, emb, pos_emb): + emb = self.norm_mlp(emb + pos_emb) + emb = self.ff(emb) + return emb + + def forward(self, emb, pos_emb, t_emb): + gate_attn, gate_mlp = self.to_gate(t_emb).chunk(2, dim=-1) + emb = emb + self.attention(emb, pos_emb) * (1 + gate_attn) + emb = emb + self.feed_forward(emb, pos_emb) * (1 + gate_mlp) + return emb + + +class AAADiT(torch.nn.Module): + def __init__(self, dim=1024): + super().__init__() + self.pos_embedder = AAAPositionalEmbedding(dim=dim) + self.timestep_embedder = TimestepEmbeddings(256, dim) + self.image_embedder = torch.nn.Sequential(torch.nn.Linear(128, dim), torch.nn.LayerNorm(dim)) + self.text_embedder = torch.nn.Sequential(torch.nn.Linear(1024, dim), torch.nn.LayerNorm(dim)) + self.blocks = torch.nn.ModuleList([AAABlock(dim) for _ in range(10)]) + self.proj_out = torch.nn.Linear(dim, 128) + + def forward( + self, + latents, + prompt_embeds, + timestep, + use_gradient_checkpointing=False, + use_gradient_checkpointing_offload=False, + ): + pos_emb = self.pos_embedder(latents, prompt_embeds) + t_emb = self.timestep_embedder(timestep, dtype=latents.dtype).view(1, 1, -1) + image = self.image_embedder(rearrange(latents, "B C H W -> B (H W) C")) + text = self.text_embedder(prompt_embeds) + emb = torch.concat([image, text], dim=1) + for block_id, block in enumerate(self.blocks): + emb = gradient_checkpoint_forward( + block, + use_gradient_checkpointing=use_gradient_checkpointing, + use_gradient_checkpointing_offload=use_gradient_checkpointing_offload, + emb=emb, + pos_emb=pos_emb, + t_emb=t_emb, + ) + emb = emb[:, :latents.shape[-1] * latents.shape[-2]] + emb = self.proj_out(emb) + emb = rearrange(emb, "B (H W) C -> B C H W", W=latents.shape[-1]) + return emb +``` + +
+ +### 1.2 Encoder-Decoder Models + +Besides the Diffusion model used for denoising, we also need two other models: + +* Text Encoder: Used to encode text into tensors. We adopt the [Qwen/Qwen3-0.6B](https://modelscope.cn/models/Qwen/Qwen3-0.6B) model. +* VAE Encoder-Decoder: The encoder part is used to encode images into tensors, and the decoder part is used to decode image tensors into images. We adopt the VAE model from [black-forest-labs/FLUX.2-klein-4B](https://modelscope.cn/models/black-forest-labs/FLUX.2-klein-4B). + +The architectures of these two models are already integrated in DiffSynth-Studio, located at [/diffsynth/models/z_image_text_encoder.py](https://github.com/modelscope/DiffSynth-Studio/blob/main/diffsynth/models/z_image_text_encoder.py) and [/diffsynth/models/flux2_vae.py](https://github.com/modelscope/DiffSynth-Studio/blob/main/diffsynth/models/flux2_vae.py), so we don't need to modify any code. + +## 2. Building Pipeline + +We introduced how to build a model Pipeline in the document [Integrating Pipeline](../Developer_Guide/Building_a_Pipeline.md). For the model in this article, we also need to build a Pipeline to connect the text encoder, Diffusion model, and VAE encoder-decoder. + +
+Pipeline Code + +```python +class AAAImagePipeline(BasePipeline): + def __init__(self, device="cuda", torch_dtype=torch.bfloat16): + super().__init__( + device=device, torch_dtype=torch_dtype, + height_division_factor=16, width_division_factor=16, + ) + self.scheduler = FlowMatchScheduler("FLUX.2") + self.text_encoder: ZImageTextEncoder = None + self.dit: AAADiT = None + self.vae: Flux2VAE = None + self.tokenizer: AutoProcessor = None + self.in_iteration_models = ("dit",) + self.units = [ + AAAUnit_PromptEmbedder(), + AAAUnit_NoiseInitializer(), + AAAUnit_InputImageEmbedder(), + ] + self.model_fn = model_fn_aaa + + @staticmethod + def from_pretrained( + torch_dtype: torch.dtype = torch.bfloat16, + device: Union[str, torch.device] = "cuda", + model_configs: list[ModelConfig] = [], + tokenizer_config: ModelConfig = None, + vram_limit: float = None, + ): + # Initialize pipeline + pipe = AAAImagePipeline(device=device, torch_dtype=torch_dtype) + model_pool = pipe.download_and_load_models(model_configs, vram_limit) + + # Fetch models + pipe.text_encoder = model_pool.fetch_model("z_image_text_encoder") + pipe.dit = model_pool.fetch_model("aaa_dit") + pipe.vae = model_pool.fetch_model("flux2_vae") + if tokenizer_config is not None: + tokenizer_config.download_if_necessary() + pipe.tokenizer = AutoTokenizer.from_pretrained(tokenizer_config.path) + + # VRAM Management + pipe.vram_management_enabled = pipe.check_vram_management_state() + return pipe + + @torch.no_grad() + def __call__( + self, + # Prompt + prompt: str, + negative_prompt: str = "", + cfg_scale: float = 1.0, + # Image + input_image: Image.Image = None, + denoising_strength: float = 1.0, + # Shape + height: int = 1024, + width: int = 1024, + # Randomness + seed: int = None, + rand_device: str = "cpu", + # Steps + num_inference_steps: int = 30, + # Progress bar + progress_bar_cmd = tqdm, + ): + self.scheduler.set_timesteps(num_inference_steps, denoising_strength=denoising_strength, dynamic_shift_len=height//16*width//16) + + # Parameters + inputs_posi = {"prompt": prompt} + inputs_nega = {"negative_prompt": negative_prompt} + inputs_shared = { + "cfg_scale": cfg_scale, + "input_image": input_image, "denoising_strength": denoising_strength, + "height": height, "width": width, + "seed": seed, "rand_device": rand_device, + "num_inference_steps": num_inference_steps, + } + for unit in self.units: + inputs_shared, inputs_posi, inputs_nega = self.unit_runner(unit, self, inputs_shared, inputs_posi, inputs_nega) + + # Denoise + self.load_models_to_device(self.in_iteration_models) + models = {name: getattr(self, name) for name in self.in_iteration_models} + for progress_id, timestep in enumerate(progress_bar_cmd(self.scheduler.timesteps)): + timestep = timestep.unsqueeze(0).to(dtype=self.torch_dtype, device=self.device) + noise_pred = self.cfg_guided_model_fn( + self.model_fn, cfg_scale, + inputs_shared, inputs_posi, inputs_nega, + **models, timestep=timestep, progress_id=progress_id + ) + inputs_shared["latents"] = self.step(self.scheduler, progress_id=progress_id, noise_pred=noise_pred, **inputs_shared) + + # Decode + self.load_models_to_device(['vae']) + image = self.vae.decode(inputs_shared["latents"]) + image = self.vae_output_to_image(image) + self.load_models_to_device([]) + + return image + + +class AAAUnit_PromptEmbedder(PipelineUnit): + def __init__(self): + super().__init__( + seperate_cfg=True, + input_params_posi={"prompt": "prompt"}, + input_params_nega={"prompt": "negative_prompt"}, + output_params=("prompt_embeds",), + onload_model_names=("text_encoder",) + ) + self.hidden_states_layers = (-1,) + + def process(self, pipe: AAAImagePipeline, prompt): + pipe.load_models_to_device(self.onload_model_names) + text = pipe.tokenizer.apply_chat_template( + [{"role": "user", "content": prompt}], + tokenize=False, + add_generation_prompt=True, + enable_thinking=False, + ) + inputs = pipe.tokenizer(text, return_tensors="pt", padding="max_length", truncation=True, max_length=128).to(pipe.device) + output = pipe.text_encoder(**inputs, output_hidden_states=True, use_cache=False) + prompt_embeds = torch.concat([output.hidden_states[k] for k in self.hidden_states_layers], dim=-1) + return {"prompt_embeds": prompt_embeds} + + +class AAAUnit_NoiseInitializer(PipelineUnit): + def __init__(self): + super().__init__( + input_params=("height", "width", "seed", "rand_device"), + output_params=("noise",), + ) + + def process(self, pipe: AAAImagePipeline, height, width, seed, rand_device): + noise = pipe.generate_noise((1, 128, height//16, width//16), seed=seed, rand_device=rand_device, rand_torch_dtype=pipe.torch_dtype) + return {"noise": noise} + + +class AAAUnit_InputImageEmbedder(PipelineUnit): + def __init__(self): + super().__init__( + input_params=("input_image", "noise"), + output_params=("latents", "input_latents"), + onload_model_names=("vae",) + ) + + def process(self, pipe: AAAImagePipeline, input_image, noise): + if input_image is None: + return {"latents": noise, "input_latents": None} + pipe.load_models_to_device(['vae']) + image = pipe.preprocess_image(input_image) + input_latents = pipe.vae.encode(image) + if pipe.scheduler.training: + return {"latents": noise, "input_latents": input_latents} + else: + latents = pipe.scheduler.add_noise(input_latents, noise, timestep=pipe.scheduler.timesteps[0]) + return {"latents": latents, "input_latents": input_latents} + + +def model_fn_aaa( + dit: AAADiT, + latents=None, + prompt_embeds=None, + timestep=None, + use_gradient_checkpointing=False, + use_gradient_checkpointing_offload=False, + **kwargs, +): + model_output = dit( + latents, + prompt_embeds, + timestep, + use_gradient_checkpointing=use_gradient_checkpointing, + use_gradient_checkpointing_offload=use_gradient_checkpointing_offload, + ) + return model_output +``` + +
+ +## 3. Preparing Dataset + +To quickly verify training effectiveness, we use the dataset [Pokemon-First Generation](https://modelscope.cn/datasets/DiffSynth-Studio/pokemon-gen1), which is reproduced from the open-source project [pokemon-dataset-zh](https://github.com/42arch/pokemon-dataset-zh), containing 151 first-generation Pokemon from Bulbasaur to Mew. If you want to use other datasets, please refer to the document [Preparing Datasets](../Pipeline_Usage/Model_Training.md#preparing-datasets) and [`diffsynth.core.data`](../API_Reference/core/data.md). + +```shell +modelscope download --dataset DiffSynth-Studio/pokemon-gen1 --local_dir ./data +``` + +### 4. Start Training + +The training process can be quickly implemented using Pipeline. We have placed the complete code at [../Research_Tutorial/train_from_scratch.py](https://github.com/modelscope/DiffSynth-Studio/blob/main/docs/en/Research_Tutorial/train_from_scratch.py), which can be directly started with `python docs/en/Research_Tutorial/train_from_scratch.py` for single GPU training. + +To enable multi-GPU parallel training, please run `accelerate config` to set relevant parameters, then use the command `accelerate launch docs/en/Research_Tutorial/train_from_scratch.py` to start training. + +This training script has no stopping condition, please manually close it when needed. The model converges after training approximately 60,000 steps, requiring 10-20 hours for single GPU training. + +
+Training Code + +```python +class AAATrainingModule(DiffusionTrainingModule): + def __init__(self, device): + super().__init__() + self.pipe = AAAImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device=device, + model_configs=[ + ModelConfig(model_id="Qwen/Qwen3-0.6B", origin_file_pattern="model.safetensors"), + ModelConfig(model_id="black-forest-labs/FLUX.2-klein-4B", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + tokenizer_config=ModelConfig(model_id="Qwen/Qwen3-0.6B", origin_file_pattern="./"), + ) + self.pipe.dit = AAADiT().to(dtype=torch.bfloat16, device=device) + self.pipe.freeze_except(["dit"]) + self.pipe.scheduler.set_timesteps(1000, training=True) + + def forward(self, data): + inputs_posi = {"prompt": data["prompt"]} + inputs_nega = {"negative_prompt": ""} + inputs_shared = { + "input_image": data["image"], + "height": data["image"].size[1], + "width": data["image"].size[0], + "cfg_scale": 1, + "use_gradient_checkpointing": False, + "use_gradient_checkpointing_offload": False, + } + for unit in self.pipe.units: + inputs_shared, inputs_posi, inputs_nega = self.pipe.unit_runner(unit, self.pipe, inputs_shared, inputs_posi, inputs_nega) + loss = FlowMatchSFTLoss(self.pipe, **inputs_shared, **inputs_posi) + return loss + + +if __name__ == "__main__": + accelerator = accelerate.Accelerator(gradient_accumulation_steps=1) + dataset = UnifiedDataset( + base_path="data/images", + metadata_path="data/metadata_merged.csv", + max_data_items=10000000, + data_file_keys=("image",), + main_data_operator=UnifiedDataset.default_image_operator(base_path="data/images", height=256, width=256) + ) + model = AAATrainingModule(device=accelerator.device) + model_logger = ModelLogger( + "models/AAA/v1", + remove_prefix_in_ckpt="pipe.dit.", + ) + launch_training_task( + accelerator, dataset, model, model_logger, + learning_rate=2e-4, + num_workers=4, + save_steps=50000, + num_epochs=999999, + ) +``` + +
+ +## 5. Verifying Training Results + +If you don't want to wait for the model training to complete, you can directly download [our pre-trained model](https://modelscope.cn/models/DiffSynth-Studio/AAAMyModel). + +```shell +modelscope download --model DiffSynth-Studio/AAAMyModel step-600000.safetensors --local_dir models/DiffSynth-Studio/AAAMyModel +``` + +Loading the model + +```python +from diffsynth import load_model + +pipe = AAAImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Qwen/Qwen3-0.6B", origin_file_pattern="model.safetensors"), + ModelConfig(model_id="black-forest-labs/FLUX.2-klein-4B", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + tokenizer_config=ModelConfig(model_id="Qwen/Qwen3-0.6B", origin_file_pattern="./"), +) +pipe.dit = load_model(AAADiT, "models/DiffSynth-Studio/AAAMyModel/step-600000.safetensors", torch_dtype=torch.bfloat16, device="cuda") +``` + +Model inference, generating the first-generation Pokemon "starter trio". At this point, the images generated by the model basically match the training data. + +```python +for seed, prompt in enumerate([ + "green, lizard, plant, Grass, Poison, seed on back, red eyes, smiling expression, short stout limbs, sharp claws", + "orange, cream, lizard, Fire, flame on tail tip, large eyes, smiling expression, cream-colored belly patch, sharp claws", + "blue, beige, brown, turtle, water type, shell, big eyes, short limbs, curled tail", +]): + image = pipe( + prompt=prompt, + negative_prompt=" ", + num_inference_steps=30, + cfg_scale=10, + seed=seed, + height=256, width=256, + ) + image.save(f"image_{seed}.jpg") +``` + +|![Image](https://github.com/user-attachments/assets/3c620fbf-5d28-4a1a-b887-519d85ac7d1c)|![Image](https://github.com/user-attachments/assets/909efd4c-9e61-4b33-9321-39da0e499b00)|![Image](https://github.com/user-attachments/assets/f3474bcd-b474-4a90-a1ea-579f67e161e3)| +|-|-|-| + +Model inference, generating Pokemon with "sharp claws". At this point, different random seeds can produce different image results. + +```python +for seed, prompt in enumerate([ + "sharp claws", + "sharp claws", + "sharp claws", +]): + image = pipe( + prompt=prompt, + negative_prompt=" ", + num_inference_steps=30, + cfg_scale=10, + seed=seed+4, + height=256, width=256, + ) + image.save(f"image_sharp_claws_{seed}.jpg") +``` + +|![Image](https://github.com/user-attachments/assets/94862edd-96ae-4276-a38f-795249f11a13)|![Image](https://github.com/user-attachments/assets/b2291f23-20ba-42de-8bfd-76cb4afc6eea)|![Image](https://github.com/user-attachments/assets/f2aab9a4-85ec-498e-8039-648b1289796e)| +|-|-|-| + +Now, we have obtained a 0.1B small text-to-image model. This model can already generate 151 Pokemon, but cannot generate other image content. If you increase the amount of data, model parameters, and number of GPUs based on this, you can train a more powerful text-to-image model! \ No newline at end of file diff --git a/docs/en/Research_Tutorial/train_from_scratch.py b/docs/en/Research_Tutorial/train_from_scratch.py new file mode 100644 index 0000000000000000000000000000000000000000..328c24d021c8230e05a05faa6cbad7ff1c82584d --- /dev/null +++ b/docs/en/Research_Tutorial/train_from_scratch.py @@ -0,0 +1,341 @@ +import torch, accelerate +from PIL import Image +from typing import Union +from tqdm import tqdm +from einops import rearrange, repeat + +from transformers import AutoProcessor, AutoTokenizer +from diffsynth.core import ModelConfig, gradient_checkpoint_forward, attention_forward, UnifiedDataset, load_model +from diffsynth.diffusion import FlowMatchScheduler, DiffusionTrainingModule, FlowMatchSFTLoss, ModelLogger, launch_training_task +from diffsynth.diffusion.base_pipeline import BasePipeline, PipelineUnit +from diffsynth.models.general_modules import TimestepEmbeddings +from diffsynth.models.z_image_text_encoder import ZImageTextEncoder +from diffsynth.models.flux2_vae import Flux2VAE + + +class AAAPositionalEmbedding(torch.nn.Module): + def __init__(self, height=16, width=16, dim=1024): + super().__init__() + self.image_emb = torch.nn.Parameter(torch.randn((1, dim, height, width))) + self.text_emb = torch.nn.Parameter(torch.randn((dim,))) + + def forward(self, image, text): + height, width = image.shape[-2:] + image_emb = self.image_emb.to(device=image.device, dtype=image.dtype) + image_emb = torch.nn.functional.interpolate(image_emb, size=(height, width), mode="bilinear") + image_emb = rearrange(image_emb, "B C H W -> B (H W) C") + text_emb = self.text_emb.to(device=text.device, dtype=text.dtype) + text_emb = repeat(text_emb, "C -> B L C", B=text.shape[0], L=text.shape[1]) + emb = torch.concat([image_emb, text_emb], dim=1) + return emb + + +class AAABlock(torch.nn.Module): + def __init__(self, dim=1024, num_heads=32): + super().__init__() + self.norm_attn = torch.nn.RMSNorm(dim, elementwise_affine=False) + self.to_q = torch.nn.Linear(dim, dim) + self.to_k = torch.nn.Linear(dim, dim) + self.to_v = torch.nn.Linear(dim, dim) + self.to_out = torch.nn.Linear(dim, dim) + self.norm_mlp = torch.nn.RMSNorm(dim, elementwise_affine=False) + self.ff = torch.nn.Sequential( + torch.nn.Linear(dim, dim*3), + torch.nn.SiLU(), + torch.nn.Linear(dim*3, dim), + ) + self.to_gate = torch.nn.Linear(dim, dim * 2) + self.num_heads = num_heads + + def attention(self, emb, pos_emb): + emb = self.norm_attn(emb + pos_emb) + q, k, v = self.to_q(emb), self.to_k(emb), self.to_v(emb) + emb = attention_forward( + q, k, v, + q_pattern="b s (n d)", k_pattern="b s (n d)", v_pattern="b s (n d)", out_pattern="b s (n d)", + dims={"n": self.num_heads}, + ) + emb = self.to_out(emb) + return emb + + def feed_forward(self, emb, pos_emb): + emb = self.norm_mlp(emb + pos_emb) + emb = self.ff(emb) + return emb + + def forward(self, emb, pos_emb, t_emb): + gate_attn, gate_mlp = self.to_gate(t_emb).chunk(2, dim=-1) + emb = emb + self.attention(emb, pos_emb) * (1 + gate_attn) + emb = emb + self.feed_forward(emb, pos_emb) * (1 + gate_mlp) + return emb + + +class AAADiT(torch.nn.Module): + def __init__(self, dim=1024): + super().__init__() + self.pos_embedder = AAAPositionalEmbedding(dim=dim) + self.timestep_embedder = TimestepEmbeddings(256, dim) + self.image_embedder = torch.nn.Sequential(torch.nn.Linear(128, dim), torch.nn.LayerNorm(dim)) + self.text_embedder = torch.nn.Sequential(torch.nn.Linear(1024, dim), torch.nn.LayerNorm(dim)) + self.blocks = torch.nn.ModuleList([AAABlock(dim) for _ in range(10)]) + self.proj_out = torch.nn.Linear(dim, 128) + + def forward( + self, + latents, + prompt_embeds, + timestep, + use_gradient_checkpointing=False, + use_gradient_checkpointing_offload=False, + ): + pos_emb = self.pos_embedder(latents, prompt_embeds) + t_emb = self.timestep_embedder(timestep, dtype=latents.dtype).view(1, 1, -1) + image = self.image_embedder(rearrange(latents, "B C H W -> B (H W) C")) + text = self.text_embedder(prompt_embeds) + emb = torch.concat([image, text], dim=1) + for block_id, block in enumerate(self.blocks): + emb = gradient_checkpoint_forward( + block, + use_gradient_checkpointing=use_gradient_checkpointing, + use_gradient_checkpointing_offload=use_gradient_checkpointing_offload, + emb=emb, + pos_emb=pos_emb, + t_emb=t_emb, + ) + emb = emb[:, :latents.shape[-1] * latents.shape[-2]] + emb = self.proj_out(emb) + emb = rearrange(emb, "B (H W) C -> B C H W", W=latents.shape[-1]) + return emb + + +class AAAImagePipeline(BasePipeline): + def __init__(self, device="cuda", torch_dtype=torch.bfloat16): + super().__init__( + device=device, torch_dtype=torch_dtype, + height_division_factor=16, width_division_factor=16, + ) + self.scheduler = FlowMatchScheduler("FLUX.2") + self.text_encoder: ZImageTextEncoder = None + self.dit: AAADiT = None + self.vae: Flux2VAE = None + self.tokenizer: AutoProcessor = None + self.in_iteration_models = ("dit",) + self.units = [ + AAAUnit_PromptEmbedder(), + AAAUnit_NoiseInitializer(), + AAAUnit_InputImageEmbedder(), + ] + self.model_fn = model_fn_aaa + + @staticmethod + def from_pretrained( + torch_dtype: torch.dtype = torch.bfloat16, + device: Union[str, torch.device] = "cuda", + model_configs: list[ModelConfig] = [], + tokenizer_config: ModelConfig = None, + vram_limit: float = None, + ): + # Initialize pipeline + pipe = AAAImagePipeline(device=device, torch_dtype=torch_dtype) + model_pool = pipe.download_and_load_models(model_configs, vram_limit) + + # Fetch models + pipe.text_encoder = model_pool.fetch_model("z_image_text_encoder") + pipe.dit = model_pool.fetch_model("aaa_dit") + pipe.vae = model_pool.fetch_model("flux2_vae") + if tokenizer_config is not None: + tokenizer_config.download_if_necessary() + pipe.tokenizer = AutoTokenizer.from_pretrained(tokenizer_config.path) + + # VRAM Management + pipe.vram_management_enabled = pipe.check_vram_management_state() + return pipe + + @torch.no_grad() + def __call__( + self, + # Prompt + prompt: str, + negative_prompt: str = "", + cfg_scale: float = 1.0, + # Image + input_image: Image.Image = None, + denoising_strength: float = 1.0, + # Shape + height: int = 1024, + width: int = 1024, + # Randomness + seed: int = None, + rand_device: str = "cpu", + # Steps + num_inference_steps: int = 30, + # Progress bar + progress_bar_cmd = tqdm, + ): + self.scheduler.set_timesteps(num_inference_steps, denoising_strength=denoising_strength, dynamic_shift_len=height//16*width//16) + + # Parameters + inputs_posi = {"prompt": prompt} + inputs_nega = {"negative_prompt": negative_prompt} + inputs_shared = { + "cfg_scale": cfg_scale, + "input_image": input_image, "denoising_strength": denoising_strength, + "height": height, "width": width, + "seed": seed, "rand_device": rand_device, + "num_inference_steps": num_inference_steps, + } + for unit in self.units: + inputs_shared, inputs_posi, inputs_nega = self.unit_runner(unit, self, inputs_shared, inputs_posi, inputs_nega) + + # Denoise + self.load_models_to_device(self.in_iteration_models) + models = {name: getattr(self, name) for name in self.in_iteration_models} + for progress_id, timestep in enumerate(progress_bar_cmd(self.scheduler.timesteps)): + timestep = timestep.unsqueeze(0).to(dtype=self.torch_dtype, device=self.device) + noise_pred = self.cfg_guided_model_fn( + self.model_fn, cfg_scale, + inputs_shared, inputs_posi, inputs_nega, + **models, timestep=timestep, progress_id=progress_id + ) + inputs_shared["latents"] = self.step(self.scheduler, progress_id=progress_id, noise_pred=noise_pred, **inputs_shared) + + # Decode + self.load_models_to_device(['vae']) + image = self.vae.decode(inputs_shared["latents"]) + image = self.vae_output_to_image(image) + self.load_models_to_device([]) + + return image + + +class AAAUnit_PromptEmbedder(PipelineUnit): + def __init__(self): + super().__init__( + seperate_cfg=True, + input_params_posi={"prompt": "prompt"}, + input_params_nega={"prompt": "negative_prompt"}, + output_params=("prompt_embeds",), + onload_model_names=("text_encoder",) + ) + self.hidden_states_layers = (-1,) + + def process(self, pipe: AAAImagePipeline, prompt): + pipe.load_models_to_device(self.onload_model_names) + text = pipe.tokenizer.apply_chat_template( + [{"role": "user", "content": prompt}], + tokenize=False, + add_generation_prompt=True, + enable_thinking=False, + ) + inputs = pipe.tokenizer(text, return_tensors="pt", padding="max_length", truncation=True, max_length=128).to(pipe.device) + output = pipe.text_encoder(**inputs, output_hidden_states=True, use_cache=False) + prompt_embeds = torch.concat([output.hidden_states[k] for k in self.hidden_states_layers], dim=-1) + return {"prompt_embeds": prompt_embeds} + + +class AAAUnit_NoiseInitializer(PipelineUnit): + def __init__(self): + super().__init__( + input_params=("height", "width", "seed", "rand_device"), + output_params=("noise",), + ) + + def process(self, pipe: AAAImagePipeline, height, width, seed, rand_device): + noise = pipe.generate_noise((1, 128, height//16, width//16), seed=seed, rand_device=rand_device, rand_torch_dtype=pipe.torch_dtype) + return {"noise": noise} + + +class AAAUnit_InputImageEmbedder(PipelineUnit): + def __init__(self): + super().__init__( + input_params=("input_image", "noise"), + output_params=("latents", "input_latents"), + onload_model_names=("vae",) + ) + + def process(self, pipe: AAAImagePipeline, input_image, noise): + if input_image is None: + return {"latents": noise, "input_latents": None} + pipe.load_models_to_device(['vae']) + image = pipe.preprocess_image(input_image) + input_latents = pipe.vae.encode(image) + if pipe.scheduler.training: + return {"latents": noise, "input_latents": input_latents} + else: + latents = pipe.scheduler.add_noise(input_latents, noise, timestep=pipe.scheduler.timesteps[0]) + return {"latents": latents, "input_latents": input_latents} + + +def model_fn_aaa( + dit: AAADiT, + latents=None, + prompt_embeds=None, + timestep=None, + use_gradient_checkpointing=False, + use_gradient_checkpointing_offload=False, + **kwargs, +): + model_output = dit( + latents, + prompt_embeds, + timestep, + use_gradient_checkpointing=use_gradient_checkpointing, + use_gradient_checkpointing_offload=use_gradient_checkpointing_offload, + ) + return model_output + + +class AAATrainingModule(DiffusionTrainingModule): + def __init__(self, device): + super().__init__() + self.pipe = AAAImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device=device, + model_configs=[ + ModelConfig(model_id="Qwen/Qwen3-0.6B", origin_file_pattern="model.safetensors"), + ModelConfig(model_id="black-forest-labs/FLUX.2-klein-4B", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + tokenizer_config=ModelConfig(model_id="Qwen/Qwen3-0.6B", origin_file_pattern="./"), + ) + self.pipe.dit = AAADiT().to(dtype=torch.bfloat16, device=device) + self.pipe.freeze_except(["dit"]) + self.pipe.scheduler.set_timesteps(1000, training=True) + + def forward(self, data): + inputs_posi = {"prompt": data["prompt"]} + inputs_nega = {"negative_prompt": ""} + inputs_shared = { + "input_image": data["image"], + "height": data["image"].size[1], + "width": data["image"].size[0], + "cfg_scale": 1, + "use_gradient_checkpointing": False, + "use_gradient_checkpointing_offload": False, + } + for unit in self.pipe.units: + inputs_shared, inputs_posi, inputs_nega = self.pipe.unit_runner(unit, self.pipe, inputs_shared, inputs_posi, inputs_nega) + loss = FlowMatchSFTLoss(self.pipe, **inputs_shared, **inputs_posi) + return loss + + +if __name__ == "__main__": + accelerator = accelerate.Accelerator(gradient_accumulation_steps=1) + dataset = UnifiedDataset( + base_path="data/images", + metadata_path="data/metadata_merged.csv", + max_data_items=10000000, + data_file_keys=("image",), + main_data_operator=UnifiedDataset.default_image_operator(base_path="data/images", height=256, width=256) + ) + model = AAATrainingModule(device=accelerator.device) + model_logger = ModelLogger( + "models/AAA/v1", + remove_prefix_in_ckpt="pipe.dit.", + ) + launch_training_task( + accelerator, dataset, model, model_logger, + learning_rate=2e-4, + num_workers=4, + save_steps=50000, + num_epochs=999999, + ) \ No newline at end of file diff --git a/docs/en/Training/DeepSpeed.md b/docs/en/Training/DeepSpeed.md new file mode 100644 index 0000000000000000000000000000000000000000..a2937b358d5346f3d5a8d9042b489e26cfa4b310 --- /dev/null +++ b/docs/en/Training/DeepSpeed.md @@ -0,0 +1,128 @@ +# Enabling DeepSpeed + +The training framework is built on `accelerate` and `deepspeed`, thus natively supporting DeepSpeed training features. + +## Configuring Training Parameters + +DeepSpeed parameters can be configured interactively in the terminal via `accelerate config`. + +* DeepSpeed ZeRO Stage 1: Shards optimizer states, providing memory optimization while maintaining speed consistent with DDP (Distributed Data Parallel). +* DeepSpeed ZeRO Stage 2: Shards optimizer states and gradients, providing more significant memory optimization while maintaining speed consistent with DDP. +* DeepSpeed ZeRO Stage 2 Offload: Offloads optimizer states and gradients to CPU. Increases distributed communication and GPU-CPU data transfer overhead, but provides substantial memory savings. +* DeepSpeed ZeRO Stage 3: Shards optimizer states, gradients, and model parameters (optionally including activations). Increases distributed communication but provides stronger memory optimization. +* DeepSpeed ZeRO Stage 3 Offload: Offloads optimizer states, gradients, and model parameters (optionally including activations) entirely to CPU. Significantly increases distributed communication and GPU-CPU data transfer overhead, but achieves more extreme memory savings. + +## DeepSpeed ZeRO Stage 3 + +DeepSpeed ZeRO Stage 3 is a training mode with lower VRAM usage in multi-GPU training, but requires modifying some configuration files. We provide examples for some models, primarily by specifying the `deepspeed` configuration via `--config_file`. + +Please note that the `deepspeed_zero3_offload` mode is incompatible with PyTorch's native gradient checkpointing mechanism. To address this, we have adapted the `checkpointing` interface of `deepspeed`. Users need to fill the `activation_checkpointing` field in the `deepspeed` configuration to enable gradient checkpointing. + +Below is the script for low VRAM model training for the Qwen-Image model, with two-stage split training also enabled: + +```shell +accelerate launch examples/qwen_image/model_training/train.py \ + --dataset_base_path data/example_image_dataset \ + --dataset_metadata_path data/example_image_dataset/metadata.csv \ + --max_pixels 1048576 \ + --dataset_repeat 1 \ + --model_id_with_origin_paths "Qwen/Qwen-Image:text_encoder/model*.safetensors,Qwen/Qwen-Image:vae/diffusion_pytorch_model.safetensors" \ + --learning_rate 1e-4 \ + --num_epochs 5 \ + --remove_prefix_in_ckpt "pipe.dit." \ + --output_path "./models/train/Qwen-Image_lora-splited-cache" \ + --lora_base_model "dit" \ + --lora_target_modules "to_q,to_k,to_v,add_q_proj,add_k_proj,add_v_proj,to_out.0,to_add_out,img_mlp.net.2,img_mod.1,txt_mlp.net.2,txt_mod.1" \ + --lora_rank 32 \ + --task "sft:data_process" \ + --use_gradient_checkpointing \ + --dataset_num_workers 8 \ + --find_unused_parameters + +accelerate launch --config_file examples/qwen_image/model_training/special/low_vram_training/deepspeed_zero3_cpuoffload.yaml examples/qwen_image/model_training/train.py \ + --dataset_base_path "./models/train/Qwen-Image_lora-splited-cache" \ + --max_pixels 1048576 \ + --dataset_repeat 50 \ + --model_id_with_origin_paths "Qwen/Qwen-Image:transformer/diffusion_pytorch_model*.safetensors" \ + --learning_rate 1e-4 \ + --num_epochs 5 \ + --remove_prefix_in_ckpt "pipe.dit." \ + --output_path "./models/train/Qwen-Image_lora" \ + --lora_base_model "dit" \ + --lora_target_modules "to_q,to_k,to_v,add_q_proj,add_k_proj,add_v_proj,to_out.0,to_add_out,img_mlp.net.2,img_mod.1,txt_mlp.net.2,txt_mod.1" \ + --lora_rank 32 \ + --task "sft:train" \ + --use_gradient_checkpointing \ + --dataset_num_workers 8 \ + --find_unused_parameters \ + --initialize_model_on_cpu +``` + +The configurations for `accelerate` and `deepspeed` are as follows: + +```yaml +compute_environment: LOCAL_MACHINE +debug: true +deepspeed_config: + deepspeed_config_file: examples/qwen_image/model_training/special/low_vram_training/ds_z3_cpuoffload.json + zero3_init_flag: true +distributed_type: DEEPSPEED +downcast_bf16: 'no' +enable_cpu_affinity: false +machine_rank: 0 +main_training_function: main +num_machines: 1 +num_processes: 1 +rdzv_backend: static +same_network: true +tpu_env: [] +tpu_use_cluster: false +tpu_use_sudo: false +use_cpu: false +``` + +```json +{ + "fp16": { + "enabled": "auto", + "loss_scale": 0, + "loss_scale_window": 1000, + "initial_scale_power": 16, + "hysteresis": 2, + "min_loss_scale": 1 + }, + "bf16": { + "enabled": "auto" + }, + "zero_optimization": { + "stage": 3, + "offload_optimizer": { + "device": "cpu", + "pin_memory": true + }, + "offload_param": { + "device": "cpu", + "pin_memory": true + }, + "overlap_comm": false, + "contiguous_gradients": true, + "sub_group_size": 1e9, + "reduce_bucket_size": 5e7, + "stage3_prefetch_bucket_size": 5e7, + "stage3_param_persistence_threshold": 1e5, + "stage3_max_live_parameters": 1e8, + "stage3_max_reuse_distance": 1e8, + "stage3_gather_16bit_weights_on_model_save": true + }, + "activation_checkpointing": { + "partition_activations": false, + "cpu_checkpointing": false, + "contiguous_memory_optimization": false + }, + "gradient_accumulation_steps": "auto", + "gradient_clipping": "auto", + "train_batch_size": "auto", + "train_micro_batch_size_per_gpu": "auto", + "wall_clock_breakdown": false +} +``` \ No newline at end of file diff --git a/docs/en/Training/Differential_LoRA.md b/docs/en/Training/Differential_LoRA.md new file mode 100644 index 0000000000000000000000000000000000000000..75662bbaaf96040cbffe2f596235098fca02a1e2 --- /dev/null +++ b/docs/en/Training/Differential_LoRA.md @@ -0,0 +1,46 @@ +# Differential LoRA Training + +Differential LoRA training is a special form of LoRA training designed to enable models to learn differences between images. + +## Training Approach + +We were unable to identify the original proposer of differential LoRA training, as this technique has been circulating in the open-source community for a long time. + +Assume we have two similar-content images: Image 1 and Image 2. For example, both images contain a car, but Image 1 has fewer details while Image 2 has more details. In differential LoRA training, we perform two-step training: + +* Train LoRA 1 using Image 1 as training data with [standard supervised training](../Training/Supervised_Fine_Tuning.md) +* Train LoRA 2 using Image 2 as training data, after integrating LoRA 1 into the base model, with [standard supervised training](../Training/Supervised_Fine_Tuning.md) + +In the first training step, since there is only one training image, the LoRA model easily overfits. Therefore, after training, LoRA 1 will cause the model to generate Image 1 without hesitation, regardless of the random seed. In the second training step, the LoRA model overfits again. Thus, after training, with the combined effect of LoRA 1 and LoRA 2, the model will generate Image 2 without hesitation. In short: + +* LoRA 1 = Generate Image 1 +* LoRA 1 + LoRA 2 = Generate Image 2 + +At this point, discarding LoRA 1 and using only LoRA 2, the model will understand the difference between Image 1 and Image 2, making the generated content tend toward "less like Image 1, more like Image 2." + +Single training data can ensure the model overfits to the training data, but lacks stability. To improve stability, we can train with multiple image pairs and average the trained LoRA 2 models to obtain a more stable LoRA. + +Using this training approach, some functionally unique LoRA models can be trained. For example, using ugly and beautiful image pairs to train LoRAs that enhance image aesthetics; using low-detail and high-detail image pairs to train LoRAs that increase image detail. + +## Model Effects + +### Aesthetic Enhancement + +We have trained several aesthetic enhancement LoRAs using differential LoRA training techniques. You can visit the corresponding model pages to view the generation effects. + +* [DiffSynth-Studio/Qwen-Image-LoRA-ArtAug-v1](https://modelscope.cn/models/DiffSynth-Studio/Qwen-Image-LoRA-ArtAug-v1) +* [DiffSynth-Studio/ArtAug-lora-FLUX.1dev-v1](https://modelscope.cn/models/DiffSynth-Studio/ArtAug-lora-FLUX.1dev-v1) + +### Training LoRA on Distillation-Accelerated Models + +Some models (e.g., [Z-Image-Turbo](https://modelscope.cn/models/Tongyi-MAI/Z-Image-Turbo)) have undergone distillation-based acceleration training. They perform normally under the distillation-accelerated configuration (CFG disabled, 8 steps), but their output degrades under the standard configuration (CFG enabled, 30 steps). When training a LoRA on such a base model, the resulting LoRA will cause degraded output under the distillation-accelerated configuration while performing normally under the standard configuration. + +One solution is to first train a LoRA (e.g., [ostris/zimage_turbo_training_adapter](https://modelscope.cn/models/ostris/zimage_turbo_training_adapter)) that degenerates the model's distillation acceleration capability (degraded output under the distillation-accelerated configuration, normal output under the standard configuration), and then train a new LoRA on top of this LoRA. Note, however, that differential training prevents the LoRA model from being optimized end-to-end, so its effectiveness carries significant uncertainty. + +## Using Differential LoRA Training in the Training Framework + +The first step of training is identical to ordinary LoRA training. In the second step's training command, fill in the path of the first step's LoRA model file through the `--preset_lora_path` parameter, and set `--preset_lora_model` to the same parameters as `lora_base_model` to load LoRA 1 into the base model. + +## Framework Design Concept + +In the training framework, the model pointed to by `--preset_lora_path` is loaded in the `switch_pipe_to_training_mode` of `DiffusionTrainingModule`. \ No newline at end of file diff --git a/docs/en/Training/Direct_Distill.md b/docs/en/Training/Direct_Distill.md new file mode 100644 index 0000000000000000000000000000000000000000..e989c42fb5f067e0a67a33e93a0bebda0e813bc7 --- /dev/null +++ b/docs/en/Training/Direct_Distill.md @@ -0,0 +1,97 @@ +# End-to-End Distillation Accelerated Training + +## Distillation Accelerated Training + +The inference process of Diffusion models typically requires multi-step iterations, which improves generation quality but also makes the generation process slow. Through distillation accelerated training, the number of steps required to generate clear content can be reduced. The essence of distillation accelerated training technology is to align the generation effects of a small number of steps with those of a large number of steps. + +There are diverse methods for distillation accelerated training, such as: + +* Adversarial training ADD (Adversarial Diffusion Distillation) + * Paper: https://arxiv.org/abs/2311.17042 + * Model: [stabilityai/sdxl-turbo](https://modelscope.cn/models/stabilityai/sdxl-turbo) +* Progressive training Hyper-SD + * Paper: https://arxiv.org/abs/2404.13686 + * Model: [ByteDance/Hyper-SD](https://www.modelscope.cn/models/ByteDance/Hyper-SD) + +## Direct Distillation + +At the framework level, supporting these distillation accelerated training schemes is extremely difficult. In the design of the training framework, we need to ensure that the training scheme meets the following conditions: + +* Generality: The training scheme applies to most Diffusion models supported within the framework, rather than only working for a specific model, which is a basic requirement for code framework construction. +* Stability: The training scheme must ensure stable training effects without requiring manual fine-tuning of parameters. Adversarial training in ADD cannot guarantee stability. +* Simplicity: The training scheme does not introduce additional complex modules. According to Occam's Razor principle, complex solutions may introduce potential risks. The Human Feedback Learning in Hyper-SD makes the training process overly complex. + +Therefore, in the training framework of `DiffSynth-Studio`, we designed an end-to-end distillation accelerated training scheme, which we call Direct Distillation. The pseudocode for the training process is as follows: + +``` +seed = xxx +with torch.no_grad(): + image_1 = pipe(prompt, steps=50, seed=seed, cfg=4) +image_2 = pipe(prompt, steps=4, seed=seed, cfg=1) +loss = torch.nn.functional.mse_loss(image_1, image_2) +``` + +Yes, it's a very end-to-end training scheme that produces immediate results with minimal training. + +## Models Trained with Direct Distillation + +We trained two models based on Qwen-Image using this scheme: + +* [DiffSynth-Studio/Qwen-Image-Distill-Full](https://modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Distill-Full): Full distillation training +* [DiffSynth-Studio/Qwen-Image-Distill-LoRA](https://modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Distill-LoRA): LoRA distillation training + +Click on the model links to go to the model pages and view the model effects. + +## Using Distillation Accelerated Training in the Training Framework + +First, you need to generate training data. Please refer to the [Model Inference](../Pipeline_Usage/Model_Inference.md) section to write inference code and generate training data with a sufficient number of inference steps. + +Taking Qwen-Image as an example, the following code can generate an image: + +```python +from diffsynth.pipelines.qwen_image import QwenImagePipeline, ModelConfig +import torch + +pipe = QwenImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="transformer/diffusion_pytorch_model*.safetensors"), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="text_encoder/model*.safetensors"), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + tokenizer_config=ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="tokenizer/"), +) +prompt = "精致肖像,水下少女,蓝裙飘逸,发丝轻扬,光影透澈,气泡环绕,面容恬静,细节精致,梦幻唯美。" +image = pipe(prompt, seed=0, num_inference_steps=40) +image.save("image.jpg") +``` + +Then, we compile the necessary information into [metadata files](../API_Reference/core/data.md#metadata): + +```csv +image,prompt,seed,rand_device,num_inference_steps,cfg_scale +distill_qwen/image.jpg,"精致肖像,水下少女,蓝裙飘逸,发丝轻扬,光影透澈,气泡环绕,面容恬静,细节精致,梦幻唯美。",0,cpu,4,1 +``` + +This sample dataset can be downloaded directly: + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --local_dir ./data/diffsynth_example_dataset +``` + +Then start LoRA distillation accelerated training: + +```shell +bash examples/qwen_image/model_training/lora/Qwen-Image-Distill-LoRA.sh +``` + +Please note that in the [training script parameters](../Pipeline_Usage/Model_Training.md#script-parameters), the image resolution setting for the dataset should avoid triggering scaling processing. When setting `--height` and `--width` to enable fixed resolution, all training data must be generated with exactly the same width and height. When setting `--max_pixels` to enable dynamic resolution, the value of `--max_pixels` must be greater than or equal to the pixel area of any training image. + +## Framework Design Concept + +Compared to [Standard Supervised Training](../Training/Supervised_Fine_Tuning.md), Direct Distillation only differs in the training loss function. The loss function for Direct Distillation is `DirectDistillLoss` in `diffsynth.diffusion.loss`. + +## Future Work + +Direct Distillation is a highly general acceleration scheme, but it may not be the best-performing scheme. Therefore, we have not yet published this technology in paper form. We hope to leave this problem to the academic and open-source communities to solve together, and we look forward to developers providing more complete general training schemes. \ No newline at end of file diff --git a/docs/en/Training/FP8_Precision.md b/docs/en/Training/FP8_Precision.md new file mode 100644 index 0000000000000000000000000000000000000000..b7913b750652ba7944f5d9647b0b949c01d346a5 --- /dev/null +++ b/docs/en/Training/FP8_Precision.md @@ -0,0 +1,20 @@ +# Enabling FP8 Precision in Training + +Although `DiffSynth-Studio` supports [VRAM management](../Pipeline_Usage/VRAM_management.md) in model inference, most of the techniques for reducing VRAM usage are not suitable for training. Offloading would cause extremely slow training processes. + +FP8 precision is the only VRAM management strategy that can be enabled during training. However, this framework currently does not support native FP8 precision training. For reasons, see [Q&A: Why doesn't the training framework support native FP8 precision training?](../QA.md#why-doesnt-the-training-framework-support-native-fp8-precision-training). It only supports storing models whose parameters are not updated by gradients (models that do not require gradient backpropagation, or whose gradients only update their LoRA) in FP8 precision. + +## Enabling FP8 + +In our provided training scripts, you can quickly set models to be stored in FP8 precision through the `--fp8_models` parameter. Taking Qwen-Image LoRA training as an example, we provide a script for enabling FP8 training located at [`/examples/qwen_image/model_training/special/fp8_training/Qwen-Image-LoRA.sh`](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/special/fp8_training/Qwen-Image-LoRA.sh). After training is completed, you can verify the training results with the script [`/examples/qwen_image/model_training/special/fp8_training/validate.py`](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/special/fp8_training/validate.py). + +Please note that this FP8 VRAM management strategy does not support gradient updates. When a model is set to be trainable, FP8 precision cannot be enabled for that model. Models that support FP8 include two types: + +* Parameters are not trainable, such as VAE models +* Gradients do not update their parameters, such as DiT models in LoRA training + +Experimental verification shows that LoRA training with FP8 enabled does not cause significant image quality degradation. However, theoretical errors do exist. If you encounter training results inferior to BF16 precision training when using this feature, please provide feedback through GitHub issues. + +## Training Framework Design Concept + +The training framework completely reuses the inference VRAM management, and only parses VRAM management configurations through `parse_model_configs` in `DiffusionTrainingModule` during training. \ No newline at end of file diff --git a/docs/en/Training/Offload_Training.md b/docs/en/Training/Offload_Training.md new file mode 100644 index 0000000000000000000000000000000000000000..ce979d2890c8acab907077f0559f6c9e23637c67 --- /dev/null +++ b/docs/en/Training/Offload_Training.md @@ -0,0 +1,214 @@ +# Offload Training + +This document introduces the Offload Training feature in DiffSynth-Studio, which significantly reduces GPU memory usage during training by moving model weights layer-by-layer between CPU and GPU. + +> **Note**: Offload Training currently supports single-GPU training only and is not compatible with multi-GPU (DDP) setups. + +## What is Offload Training + +When training large-scale models (e.g., Qwen-Image with 60 layers, Wan2.1-14B with 40 layers), all layer weights must reside on the GPU simultaneously, consuming tens of GB of memory for weights alone. The core idea of Offload Training is: **at any given moment, only load the weights of the currently computing module onto the GPU, and immediately offload them back to CPU after computation**, reducing memory usage from O(N × params_per_layer) to O(1 × params_per_layer). + +This feature is implemented via PyTorch's Module Hook mechanism and requires no modifications to model code. + +## How It Works + +### Core Mechanism + +`OffloadTrainingManager` scans the model and registers 4 hooks for each managed module: + +``` +forward_pre_hook → Load module weights from CPU to GPU (onload) +module.forward() → Normal forward computation +forward_hook → Offload module weights from GPU back to CPU (offload) + +backward_pre_hook → Reload module weights from CPU to GPU (onload) +module.backward() → Compute gradients +backward_hook → Offload module weights back to CPU (offload) +``` + +### Parameter and Buffer Classification + +Different offload strategies are applied depending on whether parameters are trainable and for buffer types: + +| Type | Offloader Class | Behavior | +|---------------|----------------|----------| +| Non-trainable (`requires_grad=False`) | `StaticParamOffloader` | Copies weights to pre-allocated pinned memory at init, maintaining a permanent CPU copy, and replaces `param.data` with an empty GPU placeholder (freeing GPU memory); onload asynchronously copies from CPU to GPU, offload reassigns `param.data` to the placeholder (no PCIe transfer back) | +| Trainable + `enable_optimizer_cpu_offload=True` | `TrainableParamOffloader` | Weights change during training, so no static copy is kept; onload/offload via `param.data.to(device)` with actual data transfer; also moves `param.grad` to CPU after backward | +| Trainable + `enable_optimizer_cpu_offload=False` | `AlwaysOnGPUParamOffloader` | Moves parameters to GPU at init and never offloads; suitable for LoRA training (small number of trainable params) | +| Module Buffers (e.g., BatchNorm's `running_mean`/`running_var`) | `BufferOffloader` | Similar to `StaticParamOffloader`: copies buffer to pinned memory at init; onload asynchronously copies from CPU to GPU, offload reassigns `module._buffers[name]` back to the CPU copy | + +### Pinned Memory Pool + +`StaticParamOffloader` and `BufferOffloader` need to allocate a pinned memory copy on CPU for each non-trainable parameter/buffer (pinned memory enables asynchronous non-blocking CPU→GPU transfers, much faster than regular pageable memory). + +**Problem**: PyTorch's `pin_memory()` allocates memory through `CachingHostAllocator`, which rounds up each allocation size to the next power of two. For example, a 17MB tensor actually allocates 32MB. Large models have thousands of parameter tensors, and allocating each independently via `pin_memory()` leads to massive memory waste (measured inflation of 50%~100%). + +**Solution**: `PinnedArenaPool` pre-allocates a few large blocks of pinned memory (i.e., arenas — large pre-allocated memory regions from which all small objects are carved out), then uses bump-pointer allocation to compactly carve out space for each tensor, avoiding the per-tensor rounding waste: + +- `from_model()` scans all non-trainable parameters and buffers in the model, computing total size +- Decomposes total size into several power-of-two sized chunks (each chunk is a `PinnedBuffer`) +- Allocation sequentially probes chunks for remaining space; bump-pointer advances to complete allocation (only 64-byte alignment, no rounding waste) +- Automatically grows new chunks when space is insufficient +- Falls back to per-tensor `pin_memory()` on exceptions + +### Gradient Checkpointing Compatibility + +Gradient Checkpointing re-executes forward during backward (recomputing activations), which re-triggers `forward_hook`. This is solved via the `_in_recompute` set: + +- First forward: normal offload, module added to `_in_recompute` +- Recomputed forward (during backward): detects module in `_in_recompute`, skips offload, keeps weights on GPU for backward +- When `after_backward()` is called: clears `_in_recompute`, preparing for the next step + +### Hook Registration Granularity + +`OffloadTrainingManager` registers hooks at leaf module granularity by default (`nn.Linear`, `nn.LayerNorm`, etc.), meaning each leaf module is independently onloaded/offloaded. Additionally, "orphan parameters" and "orphan buffers" not managed by any leaf module are automatically collected and hooked. + +**Experimental**: The `cpu_offload_split_threshold` parameter (unit: MB) allows adjusting hook registration granularity. When set, modules with total parameters exceeding the threshold are recursively split into children, while modules below the threshold are hooked as a whole. This feature may not be compatible with all model architectures in the current version and is disabled by default. + +### Training Loop Integration + +Execution flow in `runner.py`: + +```python +# When enable_model_cpu_offload=True: +# 1. Model does NOT call model.to(device), stays on CPU +# 2. Only prepare optimizer, dataloader, scheduler (model is NOT prepared) +# 3. Create OffloadTrainingManager, which auto-registers hooks on the model + +# Training loop: +loss = model(data) +accelerator.backward(loss) +offload_manager.after_backward() # Clear recompute marks + move gradients to CPU +optimizer.step() +optimizer.zero_grad() +``` + +## Usage + +### Parameters + +| Parameter | Default | Description | +|-----------|---------|-------------| +| `--enable_model_cpu_offload` | False | Enable layer-wise offload training | +| `--enable_optimizer_cpu_offload` | False | Used with `--enable_model_cpu_offload`; moves trainable params and optimizer to CPU | +| `--cpu_offload_split_threshold` | None | Experimental (unit: MB); modules above this threshold are recursively split | + +### Parameter Combinations + +| Scenario | `--enable_model_cpu_offload` | `--enable_optimizer_cpu_offload` | Effect | +|----------|:---------------:|:-------------------:|--------| +| Default training | ❌ | ❌ | All weights and optimizer on GPU | +| Offload non-trainable params | ✅ | ❌ | Non-trainable params offloaded layer-by-layer; trainable params and optimizer stay on GPU | +| Offload all params | ✅ | ✅ | All params offloaded layer-by-layer; gradients and optimizer run on CPU | + +### Example + +Simply add `--enable_model_cpu_offload` to your existing training command. Example with Qwen-Image LoRA training: + +```bash +accelerate launch examples/qwen_image/model_training/train.py \ + --dataset_base_path data/example_dataset \ + --dataset_metadata_path data/example_dataset/metadata.json \ + --max_pixels 1048576 \ + --dataset_repeat 50 \ + --model_id_with_origin_paths "Qwen/Qwen-Image:transformer/diffusion_pytorch_model*.safetensors,Qwen/Qwen-Image:text_encoder/model*.safetensors,Qwen/Qwen-Image:vae/diffusion_pytorch_model.safetensors" \ + --learning_rate 1e-4 \ + --num_epochs 5 \ + --remove_prefix_in_ckpt "pipe.dit." \ + --output_path "./models/train/Qwen-Image_lora" \ + --lora_base_model "dit" \ + --lora_target_modules "to_q,to_k,to_v,add_q_proj,add_k_proj,add_v_proj,to_out.0,to_add_out,img_mlp.net.2,img_mod.1,txt_mlp.net.2,txt_mod.1" \ + --lora_rank 32 \ + --use_gradient_checkpointing \ + --dataset_num_workers 8 \ + --find_unused_parameters \ + --enable_model_cpu_offload +``` + +For full offload (optimizer also on CPU), add `--enable_optimizer_cpu_offload`: + +```bash + --enable_model_cpu_offload \ + --enable_optimizer_cpu_offload +``` + +### Compatibility + +| Feature | Compatible | Notes | +|---------|:----------:|-------| +| Gradient Checkpointing | ✅ | `_in_recompute` mechanism handles recomputation | +| Accelerate DDP (multi-GPU) | ⚠️ | In enable_model_cpu_offload mode, model is not wrapped by DDP (no `accelerator.prepare(model)`), so **gradient allreduce is not performed**. Multi-GPU training compatibility is not guaranteed; each GPU trains independently without gradient synchronization | +| Split Training | ✅ | `launch_data_process_task` also supports `--enable_model_cpu_offload` | +| DeepSpeed | ❌ | ZeRO's parameter gathering conflicts with hooks | + +### Notes + +- With `--enable_model_cpu_offload` enabled, the model never calls `model.to(device)`; weights are managed entirely by hooks +- Training speed decreases due to CPU↔GPU transfers (typically 2-10x slower); larger models see greater slowdown; suitable for memory-constrained scenarios +- Recommended to use with `--use_gradient_checkpointing` to further reduce activation memory +- `--enable_optimizer_cpu_offload` only supports gradient accumulation steps of 1 (`--gradient_accumulation_steps 1`) + +## Integrating Offload Training Module in Other Codebases + +The Offload Training module is relatively independent, so developers can integrate it into other codebases. Below is a code example with 4GB VRAM usage. + +```python +import torch +from tqdm import tqdm + +class ToyModel(torch.nn.Module): + def __init__(self): + super().__init__() + self.layers = torch.nn.ModuleList(torch.nn.Linear(4096, 4096) for _ in range(10)) + + def forward(self, x): + for layer in self.layers: + x = x + layer(torch.nn.functional.layer_norm(x, (4096,))) + return x + +model = ToyModel().to("cuda") +optimizer = torch.optim.AdamW(model.parameters(), lr=1e-4) +pbar = tqdm(range(100)) +for i in pbar: + x = torch.randn((512, 4096), device="cuda") + y = x + 1 + y_pred = model(x) + loss = torch.nn.functional.mse_loss(y_pred, y) + loss.backward() + optimizer.step() + optimizer.zero_grad() + pbar.set_postfix(loss=f"{loss.item():.4f}") +``` + +With Offload Training enabled, VRAM usage drops to 1.4GB: + +```python +import torch +from tqdm import tqdm +from diffsynth.core import OffloadTrainingManager + +class ToyModel(torch.nn.Module): + def __init__(self): + super().__init__() + self.layers = torch.nn.ModuleList(torch.nn.Linear(4096, 4096) for _ in range(10)) + + def forward(self, x): + for layer in self.layers: + x = x + layer(torch.nn.functional.layer_norm(x, (4096,))) + return x + +model = ToyModel().to("cpu") +optimizer = torch.optim.AdamW(model.parameters(), lr=1e-4) +offload_manager = OffloadTrainingManager(model, target_device="cuda", enable_optimizer_cpu_offload=True) +pbar = tqdm(range(100)) +for i in pbar: + x = torch.randn((512, 4096), device="cuda") + y = x + 1 + y_pred = model(x) + loss = torch.nn.functional.mse_loss(y_pred, y) + loss.backward() + offload_manager.after_backward() + optimizer.step() + optimizer.zero_grad() + pbar.set_postfix(loss=f"{loss.item():.4f}") +``` diff --git a/docs/en/Training/Split_Training.md b/docs/en/Training/Split_Training.md new file mode 100644 index 0000000000000000000000000000000000000000..daeb89b81822db1e0521b7eafca292e811d843fe --- /dev/null +++ b/docs/en/Training/Split_Training.md @@ -0,0 +1,269 @@ +# Two-Stage Split Training + +This document introduces split training, which can automatically divide the training process into two stages, reducing VRAM usage while accelerating training speed. + +(Split training is an experimental feature that has not yet undergone large-scale validation. If you encounter any issues while using it, please submit an issue on GitHub.) + +## Split Training + +In the training process of most models, a large amount of computation occurs in "preprocessing," i.e., "computations unrelated to the denoising model," including VAE encoding, text encoding, etc. When the corresponding model parameters are fixed, the results of these computations are repetitive. For each data sample, the computational results are identical across multiple epochs. Therefore, we provide a "split training" feature that can automatically analyze and split the training process. + +For standard supervised training of ordinary text-to-image models, the splitting process is straightforward. It only requires splitting the computation of all [`Pipeline Units`](../Developer_Guide/Building_a_Pipeline.md#units) into the first stage, storing the computational results to disk, and then reading these results from disk in the second stage for subsequent computations. However, if gradient backpropagation is required during preprocessing, the situation becomes extremely complex. To address this, we introduced a computational graph splitting algorithm to analyze how to split the computation. + +## Enabling Split Training + +Split training already supports [Standard Supervised Training](../Training/Supervised_Fine_Tuning.md) and [Direct Distillation Training](../Training/Direct_Distill.md). The `--task` parameter in the training command controls this. Taking LoRA training of the Qwen-Image model as an example, the pre-split training command is: + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "qwen_image/Qwen-Image/*" --local_dir ./data/diffsynth_example_dataset + +accelerate launch examples/qwen_image/model_training/train.py \ + --dataset_base_path data/diffsynth_example_dataset/qwen_image/Qwen-Image \ + --dataset_metadata_path data/diffsynth_example_dataset/qwen_image/Qwen-Image/metadata.csv \ + --max_pixels 1048576 \ + --dataset_repeat 50 \ + --model_id_with_origin_paths "Qwen/Qwen-Image:transformer/diffusion_pytorch_model*.safetensors,Qwen/Qwen-Image:text_encoder/model*.safetensors,Qwen/Qwen-Image:vae/diffusion_pytorch_model.safetensors" \ + --learning_rate 1e-4 \ + --num_epochs 5 \ + --remove_prefix_in_ckpt "pipe.dit." \ + --output_path "./models/train/Qwen-Image_lora" \ + --lora_base_model "dit" \ + --lora_target_modules "to_q,to_k,to_v,add_q_proj,add_k_proj,add_v_proj,to_out.0,to_add_out,img_mlp.net.2,img_mod.1,txt_mlp.net.2,txt_mod.1" \ + --lora_rank 32 \ + --use_gradient_checkpointing \ + --dataset_num_workers 8 \ + --find_unused_parameters +``` + +After splitting, in the first stage, make the following modifications: + +* Change `--dataset_repeat` to 1 to avoid redundant computation +* Change `--output_path` to the path where the first-stage computation results are saved +* Add the additional parameter `--task "sft:data_process"` +* Fill in `offload_models` with the models that do not require forward computation, in the same format as `model_id_with_origin_paths` + * Alternatively, you can directly remove from `--model_id_with_origin_paths` the models that do not require forward computation. However, you must ensure that the corresponding models are not indirectly invoked in the pipeline, which means you need to understand the internal details of the Pipeline. + +```shell +accelerate launch examples/qwen_image/model_training/train.py \ + --dataset_base_path data/diffsynth_example_dataset/qwen_image/Qwen-Image \ + --dataset_metadata_path data/diffsynth_example_dataset/qwen_image/Qwen-Image/metadata.csv \ + --max_pixels 1048576 \ + --dataset_repeat 1 \ + --model_id_with_origin_paths "Qwen/Qwen-Image:text_encoder/model*.safetensors,Qwen/Qwen-Image:vae/diffusion_pytorch_model.safetensors,Qwen/Qwen-Image:transformer/diffusion_pytorch_model*.safetensors" \ + --offload_models "Qwen/Qwen-Image:transformer/diffusion_pytorch_model*.safetensors" \ + --learning_rate 1e-4 \ + --num_epochs 5 \ + --remove_prefix_in_ckpt "pipe.dit." \ + --output_path "./models/train/Qwen-Image-LoRA-splited-cache" \ + --lora_base_model "dit" \ + --lora_target_modules "to_q,to_k,to_v,add_q_proj,add_k_proj,add_v_proj,to_out.0,to_add_out,img_mlp.net.2,img_mod.1,txt_mlp.net.2,txt_mod.1" \ + --lora_rank 32 \ + --use_gradient_checkpointing \ + --dataset_num_workers 8 \ + --find_unused_parameters \ + --task "sft:data_process" +``` + +In the second stage, make the following modifications: + +* Change `--dataset_base_path` to the `--output_path` of the first stage +* Remove `--dataset_metadata_path` +* Add the additional parameter `--task "sft:train"` +* Fill in `offload_models` with the models that do not require forward computation, in the same format as `model_id_with_origin_paths` + * Alternatively, you can directly remove from `--model_id_with_origin_paths` the models that do not require forward computation. However, you must ensure that the corresponding models are not indirectly invoked in the pipeline, which means you need to understand the internal details of the Pipeline. + +```shell +accelerate launch examples/qwen_image/model_training/train.py \ + --dataset_base_path "./models/train/Qwen-Image-LoRA-splited-cache" \ + --max_pixels 1048576 \ + --dataset_repeat 50 \ + --model_id_with_origin_paths "Qwen/Qwen-Image:text_encoder/model*.safetensors,Qwen/Qwen-Image:vae/diffusion_pytorch_model.safetensors,Qwen/Qwen-Image:transformer/diffusion_pytorch_model*.safetensors" \ + --offload_models "Qwen/Qwen-Image:text_encoder/model*.safetensors,Qwen/Qwen-Image:vae/diffusion_pytorch_model.safetensors" \ + --learning_rate 1e-4 \ + --num_epochs 5 \ + --remove_prefix_in_ckpt "pipe.dit." \ + --output_path "./models/train/Qwen-Image-LoRA-splited" \ + --lora_base_model "dit" \ + --lora_target_modules "to_q,to_k,to_v,add_q_proj,add_k_proj,add_v_proj,to_out.0,to_add_out,img_mlp.net.2,img_mod.1,txt_mlp.net.2,txt_mod.1" \ + --lora_rank 32 \ + --use_gradient_checkpointing \ + --dataset_num_workers 8 \ + --find_unused_parameters \ + --task "sft:train" +``` + +We provide sample training scripts and validation scripts located at `examples/qwen_image/model_training/special/split_training`. + +## Principles of the Computational Graph Splitting Algorithm + +The training framework splits the computational units in the `Pipeline` through the `split_pipeline_units` method of `DiffusionTrainingModule`. The following describes the detailed principles of the computational graph splitting algorithm. + +### Problem Definition + +To precisely characterize the splitting process, we first formalize the computation pipeline. Suppose the pipeline consists of $n$ computational units ([`Pipeline Unit`](../Developer_Guide/Building_a_Pipeline.md#units)), and let the set of units be $V=\{u_1,u_2,\dots,u_n\}$. Each unit $u\in V$ has the following properties: + +* Input parameter set $\operatorname{in}(u)$: declared by `input_params`, `input_params_posi` and `input_params_nega`, representing the data items that must be read before the computation of $u$; +* Output parameter set $\operatorname{out}(u)$: declared by `output_params`, representing the data items produced and written into the data cache after the computation of $u$; +* Associated model set $\mathcal{M}(u)$: declared by `onload_model_names`, representing the models that the computation of $u$ depends on. + +All parameters constitute the parameter space $\mathcal{P}=\bigcup_{u\in V}\left(\operatorname{in}(u)\cup\operatorname{out}(u)\right)$. + +**Definition 1 (Data Dependency Edge)** Let $p\in\mathcal{P}$ be a parameter. If there exist units $u_i,u_j\in V$ such that $p\in\operatorname{out}(u_i)\cap\operatorname{in}(u_j)$, and $u_i$ is the most recent producer of $p$ (i.e., the unit with the latest execution order among all units that produce $p$), then there exists a data dependency edge $(u_i,u_j)$ between $u_i$ and $u_j$, whose semantics is that the computation of $u_j$ must occur after the computation of $u_i$ completes. + +Accordingly, the computation pipeline is abstracted as a directed acyclic graph $G=(V,E)$, where $E$ is the set of all data dependency edges. + +**Definition 2 (Directly Related Unit)** Given a set of models $\mathcal{W}$ that require gradient backpropagation (specified by `trainable_models` and `lora_base_model`, which are respectively the model components being trained and the model components being trained with LoRA). If a unit $u\in V$ satisfies $\mathcal{M}(u)\cap\mathcal{W}\neq\varnothing$, then $u$ is called a directly related unit, whose computation involves the invocation of trainable models. + +**Definition 3 (Computational Graph Splitting Problem)** Given a graph $G=(V,E)$ and a model set $\mathcal{W}$, find a bipartition $(V_1,V_2)$ of $V$ such that $V_1$ is the minimal set that contains all directly related units and satisfies the following closure conditions, with $V_2=V\setminus V_1$: + +(C1) Forward closure: if $u\in V_1$ and $(u,v)\in E$, then $v\in V_1$; that is, $V_2$ contains no unit that depends on the outputs of $V_1$; + +(C2) Updating-chain closure: for any parameter $p\in\mathcal{P}$, let its updating chain $\mathbf{c}(p)=(u^{(1)},u^{(2)},\dots,u^{(k)})$ be the sequence of all units that produce $p$ in execution order. If $p$ is first consumed at $u^{(i)}$ within $V_1$ and $i\sigma_{T-1}>\sigma_{T-2}>\cdots>x_0$, the noise content gradually decreases during iteration +* $\sigma_0=0$, corresponding to $x_0$ as a data sample without any noise + +As for the intermediate values $\sigma_{T-1}$, $\sigma_{T-2}$, $\cdots$, $\sigma_1$, they are not fixed and only need to satisfy the decreasing condition. + +At an intermediate step, we can directly synthesize noisy data samples $x_t=(1-\sigma_t)x_0+\sigma_t x_T$. + +![Image](https://github.com/user-attachments/assets/e25a2f71-123c-4e18-8b34-3a066af15667) + +## How is the iterative denoising computation performed? + +Before understanding the iterative denoising computation, we need to clarify what the input and output of the denoising model are. We abstract the model as a symbol $\hat \epsilon$, whose input typically consists of three parts: + +* Time step $t$, the model needs to understand which stage of the denoising process it is currently in +* Noisy data sample $x_t$, the model needs to understand what data to denoise +* Guidance condition $c$, the model needs to understand what kind of data sample to generate through denoising + +Among these, the guidance condition $c$ is a newly introduced parameter that is input by the user. It can be text describing the image content or a sketch outlining the image structure. + +The model's output $\hat \epsilon(x_t,c,t)$ approximately equals $x_T-x_0$, which is the direction of the entire diffusion process (the reverse process of denoising). + +Next, we analyze the computation occurring in one iteration. At time step $t$, after the model computes an approximation of $x_T-x_0$, we calculate the next $x_{t-1}$: + +$$ +\begin{aligned} +x_{t-1}&=x_t + (\sigma_{t-1} - \sigma_t) \cdot \hat \epsilon(x_t,c,t)\\ +&\approx x_t + (\sigma_{t-1} - \sigma_t) \cdot (x_T-x_0)\\ +&=(1-\sigma_t)x_0+\sigma_t x_T + (\sigma_{t-1} - \sigma_t) \cdot (x_T-x_0)\\ +&=(1-\sigma_{t-1})x_0+\sigma_{t-1}x_T +\end{aligned} +$$ + +Perfect! It perfectly matches the noise content definition at time step $t-1$. + +> (This part might be a bit difficult to understand. Don't worry; it's recommended to skip this part on first reading without affecting the rest of the document.) +> +> After completing this somewhat complex formula derivation, let's consider a question: why should the model's output approximately equal $x_T-x_0$? Can it be set to other values? +> +> Actually, Diffusion models rely on two definitions to form a complete theory. From the above formulas, we can extract these two definitions and derive the iterative formula: +> +> * Data definition: $x_t=(1-\sigma_t)x_0+\sigma_t x_T$ +> * Model definition: $\hat \epsilon(x_t,c,t)=x_T-x_0$ +> * Derived iterative formula: $x_{t-1}=x_t + (\sigma_{t-1} - \sigma_t) \cdot \hat \epsilon(x_t,c,t)$ +> +> These three mathematical formulas are complete. For example, in the previous derivation, substituting the data definition and model definition into the iterative formula yields $x_{t-1}$ that matches the data definition. +> +> These are two definitions built on Flow Matching theory, but Diffusion models can also be implemented with other definitions. For example, early models based on DDPM (Denoising Diffusion Probabilistic Models) have their two definitions and derived iterative formulas as: +> +> * Data definition: $x_t=\sqrt{\alpha_t}x_0+\sqrt{1-\alpha_t}x_T$ +> * Model definition: $\hat \epsilon(x_t,c,t)=x_T$ +> * Derived iterative formula: $x_{t-1}=\sqrt{\alpha_{t-1}}\left(\frac{x_t-\sqrt{1-\alpha_t}\hat \epsilon(x_t,c,t)}{\sqrt{\sigma_t}}\right)+\sqrt{1-\alpha_{t-1}}\hat \epsilon(x_t,c,t)$ +> +> More generally, we describe the derivation process of the iterative formula using matrices. For any data definition and model definition: +> +> * Data definition: $x_t=C_T(x_0,x_T)^T$ +> * Model definition: $\hat \epsilon(x_t,c,t)=C_T^{[\epsilon]}(x_0,x_T)^T$ +> * Derived iterative formula: $x_{t-1}=C_{t-1}(C_t,C_t^{[\epsilon]})^{-T}(x_t,\hat \epsilon(x_t,c,t))^T$ +> +> Where $C_t$ and $C_t^{[\epsilon]}$ are $1\times 2$ coefficient matrices. It's not difficult to see that when constructing the two definitions, the matrix $(C_t,C_t^{[\epsilon]})^T$ must be invertible. +> +> Although Flow Matching and DDPM have been widely verified by numerous pre-trained models, this doesn't mean they are optimal solutions. We encourage developers to design new Diffusion model theories for better training results. + +## How to train such Diffusion models? + +After understanding the iterative denoising process, we next consider how to train such Diffusion models. + +The training process differs from the generation process. If we retain multi-step iterations during training, the gradient would need to backpropagate through multiple steps, bringing catastrophic time and space complexity. To improve computational efficiency, we randomly select a time step $t$ for training. + +The following is pseudocode for the training process: + +> Obtain data sample $x_0$ and guidance condition $c$ from the dataset +> +> Randomly sample time step $t\in(0,T]$ +> +> Randomly sample Gaussian noise $x_T\in \mathcal N(O,I)$ +> +> $x_t=(1-\sigma_t)x_0+\sigma_t x_T$ +> +> $\hat \epsilon(x_t,c,t)$ +> +> Loss function $\mathcal L=||\hat \epsilon(x_t,c,t)-(x_T-x_0)||_2^2$ +> +> Backpropagate gradients and update model parameters + +## What is the architecture of modern Diffusion models? + +From theory to practice, more details need to be filled in. Modern Diffusion model architectures have matured, with mainstream architectures following the "three-stage" architecture proposed by Latent Diffusion, including data encoder-decoder, guidance condition encoder, and denoising model. + +![Image](https://github.com/user-attachments/assets/43855430-6427-4aca-83a0-f684e01438b1) + +### Data Encoder-Decoder + +In the previous text, we consistently referred to $x_0$ as a "data sample" rather than an image or video because modern Diffusion models typically don't process images or videos directly. Instead, they use an Encoder-Decoder architecture model, usually a VAE (Variational Auto-Encoders) model, to encode images or videos into Embedding tensors, obtaining $x_0$. + +After data is encoded by the encoder and then decoded by the decoder, the reconstructed content is approximately consistent with the original, with minor errors. So why process on the encoded Embedding tensor instead of directly on images or videos? The main reasons are twofold: + +* Encoding compresses the data simultaneously, reducing computational load during processing. +* Encoded data distribution is more similar to Gaussian distribution, making it easier for denoising models to model the data. + +During generation, the encoder part doesn't participate in computation. After iteration completes, the decoder part decodes $x_0$ to obtain clear images or videos. During training, the decoder part doesn't participate in computation; only the encoder is used to compute $x_0$. + +### Guidance Condition Encoder + +User-input guidance conditions $c$ can be complex and diverse, requiring specialized encoder models to process them into Embedding tensors. According to the type of guidance condition, we classify guidance condition encoders into the following categories: + +* Text type, such as CLIP, Qwen-VL +* Image type, such as ControlNet, IP-Adapter +* Video type, such as VAE + +> The model $\hat \epsilon$ mentioned in the previous text refers to the entirety of all guidance condition encoders and the denoising model. We list guidance condition encoders separately because these models are typically frozen during Diffusion training, and their output values are independent of time step $t$, allowing guidance condition encoder computations to be performed offline. + +### Denoising Model + +The denoising model is the true essence of Diffusion models, with diverse model structures such as UNet and DiT. Model developers can freely innovate on these structures. + +## How does this project encapsulate and implement model training? + +Please read the next document: [Standard Supervised Training](../Training/Supervised_Fine_Tuning.md) \ No newline at end of file diff --git a/docs/en/conf.py b/docs/en/conf.py new file mode 100644 index 0000000000000000000000000000000000000000..fb9341910be25e3150acf207fd70561bcfc30aa7 --- /dev/null +++ b/docs/en/conf.py @@ -0,0 +1,147 @@ +# Configuration file for the Sphinx documentation builder. +# +# This file only contains a selection of the most common options. For a full +# list see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +import os +import sys + +# import sphinx_book_theme + +sys.path.insert(0, os.path.abspath('../../')) +# -- Project information ----------------------------------------------------- + +project = 'diffsynth' +copyright = '2022-2025, Alibaba ModelScope' +author = 'ModelScope Authors' +version_file = '../../diffsynth/version.py' +html_theme = 'sphinx_rtd_theme' +language = 'en' + + +def get_version(): + with open(version_file, 'r', encoding='utf-8') as f: + exec(compile(f.read(), version_file, 'exec')) + return locals()['__version__'] + + +# The full version, including alpha/beta/rc tags +version = get_version() +release = version + +# -- General configuration --------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + 'sphinx.ext.napoleon', + 'sphinx.ext.autosummary', + 'sphinx.ext.autodoc', + 'sphinx.ext.viewcode', + 'sphinx_markdown_tables', + 'sphinx_copybutton', + "sphinx_rtd_theme", + 'sphinx.ext.mathjax', + 'myst_parser', + 'sphinxcontrib.mermaid', +] +# build the templated autosummary files +autosummary_generate = True +numpydoc_show_class_members = False + +# Enable overriding of function signatures in the first line of the docstring. +autodoc_docstring_signature = True + +# Disable docstring inheritance +autodoc_inherit_docstrings = False + +# Show type hints in the description +autodoc_typehints = 'description' + +# Add parameter types if the parameter is documented in the docstring +autodoc_typehints_description_target = 'documented_params' + +autodoc_default_options = { + 'member-order': 'bysource', +} + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +source_suffix = ['.rst', '.md'] + +# The master toctree document. +root_doc = 'index' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = ['build'] +# A list of glob-style patterns [1] that are used to find source files. +# They are matched against the source file names relative to the source directory, +# using slashes as directory separators on all platforms. +# The default is **, meaning that all files are recursively included from the source directory. +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +# html_theme = 'sphinx_book_theme' +# html_theme_path = [sphinx_book_theme.get_html_theme_path()] +# html_theme_options = {} + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] +# html_css_files = ['css/readthedocs.css'] + +# -- Options for HTMLHelp output --------------------------------------------- +# Output file base name for HTML help builder. + +# -- Extension configuration ------------------------------------------------- +# Ignore >>> when copying code +copybutton_prompt_text = r'>>> |\.\.\. ' +copybutton_prompt_is_regexp = True + +# Example configuration for intersphinx: refer to the Python standard library. +intersphinx_mapping = {'https://docs.python.org/': None} + +myst_enable_extensions = [ + 'amsmath', + 'dollarmath', + 'colon_fence', +] + +myst_fence_as_directive = ['mermaid'] + +mermaid_version = '11.12.1' + + +def setup(app): + old_cdn = 'cdn.jsdelivr.net/npm/mermaid@' + new_cdn = 'fastly.jsdelivr.net/npm/mermaid@' + + def _use_china_cdn(app_, pagename, templatename, context, doctree): + for item in context.get('script_files') or []: + state = vars(item) if hasattr(item, '__dict__') else {} + attributes = state.get('attributes') or {} + body = attributes.get('body') or '' + filename = str(state.get('filename') or '') + if old_cdn in body: + attributes['body'] = body.replace(old_cdn, new_cdn) + if old_cdn in filename: + item.filename = filename.replace(old_cdn, new_cdn) + + app.connect('html-page-context', _use_china_cdn) diff --git a/docs/en/index.rst b/docs/en/index.rst new file mode 100644 index 0000000000000000000000000000000000000000..032b1b4888e80fbb43ccc42d7ee43a0c31b4a960 --- /dev/null +++ b/docs/en/index.rst @@ -0,0 +1,111 @@ +Welcome to DiffSynth-Studio's Documentation +========================================== + +.. toctree:: + :maxdepth: 2 + :caption: Documentation Introduction + + README + +.. toctree:: + :maxdepth: 2 + :caption: Getting Started + + Pipeline_Usage/Setup + Pipeline_Usage/Model_Inference + Pipeline_Usage/Accelerated_Inference + Pipeline_Usage/VRAM_management + Pipeline_Usage/Quantization + Pipeline_Usage/Model_Training + Pipeline_Usage/Environment_Variables + Pipeline_Usage/GPU_support + Pipeline_Usage/Inference_WebUI + +.. toctree:: + :maxdepth: 2 + :caption: Model Details + + Model_Details/FLUX + Model_Details/Wan + Model_Details/Qwen-Image + Model_Details/Qwen-Video-Edit + Model_Details/FLUX2 + Model_Details/Z-Image + Model_Details/Anima + Model_Details/LTX-2 + Model_Details/ERNIE-Image + Model_Details/JoyAI-Image + Model_Details/ACE-Step + Model_Details/HiDream-O1-Image + Model_Details/Stable-Diffusion + Model_Details/Stable-Diffusion-XL + Model_Details/Image-Quality-Metrics + Model_Details/Ideogram-4 + Model_Details/Krea-2 + Model_Details/Boogu-Image + Model_Details/LingBot-Video + Model_Details/MiniMax-H3 + Model_Details/MiniMax-Music3 + +.. toctree:: + :maxdepth: 2 + :caption: Training Framework + + Training/Understanding_Diffusion_models + Training/Supervised_Fine_Tuning + Training/FP8_Precision + Training/Direct_Distill + Training/Split_Training + Training/Differential_LoRA + Training/DeepSpeed + Training/Offload_Training + +.. toctree:: + :maxdepth: 2 + :caption: Model Integration + + Developer_Guide/Integrating_Your_Model + Developer_Guide/Building_a_Pipeline + Developer_Guide/Enabling_VRAM_management + Developer_Guide/Training_Diffusion_Models + Developer_Guide/Integrating_Quantization_Backend + +.. toctree:: + :maxdepth: 2 + :caption: API Reference + + API_Reference/core/attention + API_Reference/core/data + API_Reference/core/gradient + API_Reference/core/loader + API_Reference/core/quant + API_Reference/core/vram + +.. toctree:: + :maxdepth: 2 + :caption: Diffusion Templates + + Diffusion_Templates/Introducing_Diffusion_Templates.md + Diffusion_Templates/Understanding_Diffusion_Templates.md + Diffusion_Templates/Template_Model_Inference.md + Diffusion_Templates/Template_Model_Training.md + +.. toctree:: + :maxdepth: 2 + :caption: Research Guide + + Research_Tutorial/train_from_scratch + Research_Tutorial/inference_time_scaling + Research_Tutorial/controllable_models + +.. toctree:: + :maxdepth: 2 + :caption: FAQ + + QA + +Indices and tables +================== +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/docs/requirements.txt b/docs/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..e0022097b126faf858e0c8c472cf44a04aae02e0 --- /dev/null +++ b/docs/requirements.txt @@ -0,0 +1,11 @@ +docutils>=0.16.0 +myst_parser +recommonmark +sphinx>=5.3.0 +sphinx-book-theme +sphinx-copybutton +sphinx-autobuild +sphinx-rtd-theme +sphinx_markdown_tables +sphinxcontrib-mermaid +pymdown-extensions \ No newline at end of file diff --git a/docs/zh/.readthedocs.yaml b/docs/zh/.readthedocs.yaml new file mode 100644 index 0000000000000000000000000000000000000000..0b1ab71819d538f50daf552bd164ac920c5ac7a3 --- /dev/null +++ b/docs/zh/.readthedocs.yaml @@ -0,0 +1,28 @@ +# .readthedocs.yaml +# Read the Docs configuration file +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details + +# Required +version: 2 + +# Set the OS, Python version and other tools you might need +build: + os: ubuntu-22.04 + tools: + python: "3.10" + +# Build documentation in the "docs/" directory with Sphinx +sphinx: + configuration: docs/zh/conf.py + +# Optionally build your docs in additional formats such as PDF and ePub +# formats: +# - pdf +# - epub + +# Optional but recommended, declare the Python requirements required +# to build your documentation +# See https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html +python: + install: + - requirements: docs/requirements.txt diff --git a/docs/zh/API_Reference/core/attention.md b/docs/zh/API_Reference/core/attention.md new file mode 100644 index 0000000000000000000000000000000000000000..010eb77cc2a57a93b68069585c5cb0e722a40e04 --- /dev/null +++ b/docs/zh/API_Reference/core/attention.md @@ -0,0 +1,80 @@ +# `diffsynth.core.attention`: 注意力机制实现 + +`diffsynth.core.attention` 提供了注意力机制实现的路由机制,根据 `Python` 环境中的可用包和[环境变量](../../Pipeline_Usage/Environment_Variables.md#diffsynth_attention_implementation)自动选择高效的注意力机制实现。 + +## 注意力机制 + +注意力机制是在论文[《Attention Is All You Need》](https://arxiv.org/abs/1706.03762)中提出的模型结构,在原论文中,注意力机制按照如下公式实现: + +$$ +\text{Attention}(Q, K, V) = \text{Softmax}\left( + \frac{QK^T}{\sqrt{d_k}} +\right) +V. +$$ + +在 `PyTorch` 中,可以用如下代码实现: +```python +import torch + +def attention(query, key, value): + scale_factor = 1 / query.size(-1)**0.5 + attn_weight = query @ key.transpose(-2, -1) * scale_factor + attn_weight = torch.softmax(attn_weight, dim=-1) + return attn_weight @ value + +query = torch.rand(32, 8, 128, 64, dtype=torch.bfloat16, device="cuda") +key = torch.rand(32, 8, 128, 64, dtype=torch.bfloat16, device="cuda") +value = torch.rand(32, 8, 128, 64, dtype=torch.bfloat16, device="cuda") +output_1 = attention(query, key, value) +``` + +其中 `query`、`key`、`value` 的维度是 $(b, n, s, d)$: +* $b$:Batch size +* $n$: Attention head 的数量 +* $s$: 序列长度 +* $d$: 每个 Attention head 的维数 + +这部分计算是不包含任何可训练参数的,现代 transformer 架构的模型会在进行这一计算前后经过 Linear 层,本文讨论的“注意力机制”不包含这些计算,仅包含以上代码的计算。 + +## 更高效的实现 + +注意到,注意力机制中 Attention Score(公式中的 $\text{Softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)$,代码中的 `attn_weight`)的维度为 $(b, n, s, s)$,其中序列长度 $s$ 通常非常大,这导致计算的时间和空间复杂度达到平方级。以图像生成模型为例,图像的宽度和高度每增加到 2 倍,序列长度增加到 4 倍,计算量和显存需求增加到 16 倍。为了避免高昂的计算成本,需采用更高效的注意力机制实现,包括 +* Flash Attention 4: [GitHub](https://github.com/Dao-AILab/flash-attention)、[论文](https://arxiv.org/abs/2603.05451) +* Flash Attention 3:[GitHub](https://github.com/Dao-AILab/flash-attention)、[论文](https://arxiv.org/abs/2407.08608) +* Flash Attention 2:[GitHub](https://github.com/Dao-AILab/flash-attention)、[论文](https://arxiv.org/abs/2307.08691) +* Sage Attention:[GitHub](https://github.com/thu-ml/SageAttention)、[论文](https://arxiv.org/abs/2505.11594) +* xFormers:[GitHub](https://github.com/facebookresearch/xformers)、[文档](https://facebookresearch.github.io/xformers/components/ops.html#module-xformers.ops) +* PyTorch:[GitHub](https://github.com/pytorch/pytorch)、[文档](https://docs.pytorch.org/docs/stable/generated/torch.nn.functional.scaled_dot_product_attention.html) + +如需调用除 `PyTorch` 外的其他注意力实现,请按照其 GitHub 页面的指引安装对应的包。`DiffSynth-Studio` 会自动根据 Python 环境中的可用包路由到对应的实现上,也可通过[环境变量](../../Pipeline_Usage/Environment_Variables.md#diffsynth_attention_implementation)控制。 + +```python +from diffsynth.core.attention import attention_forward +import torch + +def attention(query, key, value): + scale_factor = 1 / query.size(-1)**0.5 + attn_weight = query @ key.transpose(-2, -1) * scale_factor + attn_weight = torch.softmax(attn_weight, dim=-1) + return attn_weight @ value + +query = torch.rand(32, 8, 128, 64, dtype=torch.bfloat16, device="cuda") +key = torch.rand(32, 8, 128, 64, dtype=torch.bfloat16, device="cuda") +value = torch.rand(32, 8, 128, 64, dtype=torch.bfloat16, device="cuda") +output_1 = attention(query, key, value) +output_2 = attention_forward(query, key, value) +print((output_1 - output_2).abs().mean()) +``` + +请注意,加速的同时会引入误差,但在大多数情况下误差是可以忽略不计的。 + +## 开发者导引 + +在为 `DiffSynth-Studio` 接入新模型时,开发者可自行决定是否调用 `diffsynth.core.attention` 中的 `attention_forward`,但我们期望模型能够尽可能优先调用这一模块,以便让新的注意力机制实现能够在这些模型上直接生效。 + +## 最佳实践 + +**在大多数情况下,我们建议直接使用 `PyTorch` 原生的实现,无需安装任何额外的包。** 虽然其他注意力机制实现可以加速,但加速效果是较为有限的,在少数情况下会出现兼容性和精度不足的问题。 + +此外,高效的注意力机制实现会逐步集成到 `PyTorch` 中,`PyTorch` 的 `2.9.0` 版本中的 `scaled_dot_product_attention` 已经集成了 Flash Attention 2。我们仍在 `DiffSynth-Studio` 提供这一接口,是为了让一些激进的加速方案能够快速走向应用,尽管它们在稳定性上还需要时间验证。 diff --git a/docs/zh/API_Reference/core/data.md b/docs/zh/API_Reference/core/data.md new file mode 100644 index 0000000000000000000000000000000000000000..60500a736ef2ba0e57bbc2284c6b5b33f9b928ab --- /dev/null +++ b/docs/zh/API_Reference/core/data.md @@ -0,0 +1,151 @@ +# `diffsynth.core.data`: 数据处理算子与通用数据集 + +## 数据处理算子 + +### 可用数据处理算子 + +`diffsynth.core.data` 提供了一系列数据处理算子,用于进行数据处理,包括: + +* 数据格式转换算子 + * `ToInt`: 转换为 int 格式 + * `ToFloat`: 转换为 float 格式 + * `ToStr`: 转换为 str 格式 + * `ToList`: 转换为列表格式,以列表包裹此数据 + * `ToAbsolutePath`: 将相对路径转换为绝对路径 +* 文件加载算子 + * `LoadImage`: 读取图片文件 + * `LoadVideo`: 读取视频文件 + * `LoadAudio`: 读取音频文件 + * `LoadGIF`: 读取 GIF 文件 + * `LoadTorchPickle`: 读取由 [`torch.save`](https://docs.pytorch.org/docs/stable/generated/torch.save.html) 保存的二进制文件【该算子可能导致二进制文件中的代码注入攻击,请谨慎使用!】 +* 媒体文件处理算子 + * `ImageCropAndResize`: 对图像进行裁剪和拉伸 +* Meta 算子 + * `SequencialProcess`: 将序列中的每个数据路由到一个算子 + * `RouteByExtensionName`: 按照文件扩展名路由到特定算子 + * `RouteByType`: 按照数据类型路由到特定算子 + +### 算子使用 + +数据算子之间以 `>>` 符号连接形成数据处理流水线,例如: + +```python +from diffsynth.core.data.operators import * + +data = "image.jpg" +data_pipeline = ToAbsolutePath(base_path="/data") >> LoadImage() >> ImageCropAndResize(max_pixels=512*512) +data = data_pipeline(data) +``` + +在经过每个算子后,数据被依次处理 + +* `ToAbsolutePath(base_path="/data")`: `"/data/image.jpg"` +* `LoadImage()`: `` +* `ImageCropAndResize(max_pixels=512*512)`: `` + +我们可以组合出功能完备的数据流水线,例如通用数据集的默认视频数据算子为 + +```python +RouteByType(operator_map=[ + (str, ToAbsolutePath(base_path) >> RouteByExtensionName(operator_map=[ + (("jpg", "jpeg", "png", "webp"), LoadImage() >> ImageCropAndResize(height, width, max_pixels, height_division_factor, width_division_factor) >> ToList()), + (("gif",), LoadGIF( + num_frames, time_division_factor, time_division_remainder, + frame_processor=ImageCropAndResize(height, width, max_pixels, height_division_factor, width_division_factor), + )), + (("mp4", "avi", "mov", "wmv", "mkv", "flv", "webm"), LoadVideo( + num_frames, time_division_factor, time_division_remainder, + frame_processor=ImageCropAndResize(height, width, max_pixels, height_division_factor, width_division_factor), + )), + ])), +]) +``` + +它包含如下逻辑: + +* 如果是 `str` 类型的数据 + * 如果是 `"jpg", "jpeg", "png", "webp"` 类型文件 + * 加载这张图片 + * 裁剪并缩放到特定分辨率 + * 打包进列表,视为单帧视频 + * 如果是 `"gif"` 类型文件 + * 加载 gif 文件内容 + * 将每一帧裁剪和缩放到特定分辨率 + * 如果是 `"mp4", "avi", "mov", "wmv", "mkv", "flv", "webm"` 类型文件 + * 加载 gif 文件内容 + * 将每一帧裁剪和缩放到特定分辨率 +* 如果不是 `str` 类型的数据,报错 + +## 通用数据集 + +`diffsynth.core.data` 提供了统一的数据集实现,数据集需输入以下参数: + +* `base_path`: 根目录,若数据集中包含图片文件的相对路径,则需填入此字段用于加载这些路径指向的文件 +* `metadata_path`: 元数据目录,记录所有元数据的文件路径,支持 `csv`、`json`、`jsonl` 格式 +* `repeat`: 数据重复次数,默认为 1,该参数影响一个 epoch 的训练步数 +* `data_file_keys`: 需进行加载的数据字段名,例如 `(image, edit_image)` +* `main_data_operator`: 主加载算子,需通过数据处理算子组装好数据处理流水线 +* `special_operator_map`: 特殊算子映射,对需要特殊处理的字段构建的算子映射 + +### 元数据 + +数据集的 `metadata_path` 指向元数据文件,支持 `csv`、`json`、`jsonl` 格式,以下提供了样例 + +* `csv` 格式:可读性高、不支持列表数据、内存占用小 + +```csv +image,prompt +image_1.jpg,"a dog" +image_2.jpg,"a cat" +``` + +* `json` 格式:可读性高、支持列表数据、内存占用大 + +```json +[ + { + "image": "image_1.jpg", + "prompt": "a dog" + }, + { + "image": "image_2.jpg", + "prompt": "a cat" + } +] +``` + +* `jsonl` 格式:可读性低、支持列表数据、内存占用小 + +```json +{"image": "image_1.jpg", "prompt": "a dog"} +{"image": "image_2.jpg", "prompt": "a cat"} +``` + +如何选择最佳的元数据格式? + +* 如果数据量大,达到千万级的数据量,由于 `json` 文件解析时需要额外内存,此时不可用,请使用 `csv` 或 `jsonl` 格式 +* 如果数据集中包含列表数据,例如编辑模型需输入多张图,由于 `csv` 格式无法存储列表格式数据,此时不可用,请使用 `json` 或 `jsonl` 格式 + +### 数据加载逻辑 + +在没有进行额外设置时,数据集默认输出元数据集中的数据,图片和视频文件的路径会以字符串的格式输出,若要加载这些文件,则需要设置 `data_file_keys`、`main_data_operator`、`special_operator_map`。 + +在数据处理流程中,按如下逻辑进行处理: +* 如果字段位于 `special_operator_map`,则调用 `special_operator_map` 中的对应算子进行处理 +* 如果字段不位于 `special_operator_map` + * 如果字段位于 `data_file_keys`,则调用 `main_data_operator` 算子进行处理 + * 如果字段不位于 `data_file_keys`,则不进行处理 + +`special_operator_map` 可用于实现特殊的数据处理,例如模型 [Wan-AI/Wan2.2-Animate-14B](https://www.modelscope.cn/models/Wan-AI/Wan2.2-Animate-14B) 中输入的人物面部视频 `animate_face_video` 是以固定分辨率处理的,与输出视频不一致,因此这一字段由专门的算子处理: + +```python +special_operator_map={ + "animate_face_video": ToAbsolutePath(args.dataset_base_path) >> LoadVideo(args.num_frames, 4, 1, frame_processor=ImageCropAndResize(512, 512, None, 16, 16)), +} +``` + +### 其他注意事项 + +当数据量过少时,可适当增加 `repeat`,延长单个 epoch 的训练时间,避免频繁保存模型产生较多耗时。 + +当数据量 * `repeat` 超过 $10^9$ 时,我们观测到数据集的速度明显变慢,这似乎是 `PyTorch` 的 bug,我们尚不确定新版本的 `PyTorch` 是否已经修复了这一问题。 diff --git a/docs/zh/API_Reference/core/gradient.md b/docs/zh/API_Reference/core/gradient.md new file mode 100644 index 0000000000000000000000000000000000000000..f92f6e8c855b832a473273d1bcf02eb606f5925d --- /dev/null +++ b/docs/zh/API_Reference/core/gradient.md @@ -0,0 +1,69 @@ +# `diffsynth.core.gradient`: 梯度检查点及其 Offload + +`diffsynth.core.gradient` 中提供了封装好的梯度检查点及其 Offload 版本,用于模型训练。 + +## 梯度检查点 + +梯度检查点是用于减少训练时显存占用的技术。我们提供一个例子来帮助你理解这一技术,以下是一个简单的模型结构 + +```python +import torch + +class ToyModel(torch.nn.Module): + def __init__(self): + super().__init__() + self.activation = torch.nn.Sigmoid() + + def forward(self, x): + return self.activation(x) + +model = ToyModel() +x = torch.randn((2, 3)) +y = model(x) +``` + +在这个模型结构中,输入的参数 $x$ 经过 Sigmoid 激活函数得到输出值 $y=\frac{1}{1+e^{-x}}$。 + +在训练过程中,假定我们的损失函数值为 $\mathcal L$,在梯度反响传播时,我们得到 $\frac{\partial \mathcal L}{\partial y}$,此时我们需计算 $\frac{\partial \mathcal L}{\partial x}$,不难发现 $\frac{\partial y}{\partial x}=y(1-y)$,进而有 $\frac{\partial \mathcal L}{\partial x}=\frac{\partial \mathcal L}{\partial y}\frac{\partial y}{\partial x}=\frac{\partial \mathcal L}{\partial y}y(1-y)$。如果在模型前向传播时保存 $y$ 的数值,并在梯度反向传播时直接计算 $y(1-y)$,这将避免复杂的 exp 计算,加快计算速度,但这会导致我们需要额外的显存来存储中间变量 $y$。 + +不启用梯度检查点时,训练框架会默认存储所有辅助梯度计算的中间变量,从而达到最佳的计算速度。开启梯度检查点时,中间变量则不会存储,但输入参数 $x$ 仍会存储,减少显存占用,在梯度反向传播时需重新计算这些变量,减慢计算速度。 + +## 启用梯度检查点及其 Offload + +`diffsynth.core.gradient` 中的 `gradient_checkpoint_forward` 实现了梯度检查点及其 Offload,可参考以下代码调用: + +```python +import torch +from diffsynth.core.gradient import gradient_checkpoint_forward + +class ToyModel(torch.nn.Module): + def __init__(self): + super().__init__() + self.activation = torch.nn.Sigmoid() + + def forward(self, x): + return self.activation(x) + +model = ToyModel() +x = torch.randn((2, 3)) +y = gradient_checkpoint_forward( + model, + use_gradient_checkpointing=True, + use_gradient_checkpointing_offload=False, + x=x, +) +``` + +* 当 `use_gradient_checkpointing=False` 且 `use_gradient_checkpointing_offload=False` 时,计算过程与原始计算完全相同,不影响模型的推理和训练,你可以直接将其集成到代码中。 +* 当 `use_gradient_checkpointing=True` 且 `use_gradient_checkpointing_offload=False` 时,启用梯度检查点。 +* 当 `use_gradient_checkpointing_offload=True` 时,启用梯度检查点,所有梯度检查点的输入参数存储在内存中,进一步降低显存占用和减慢计算速度。 + +## 最佳实践 + +> Q: 应当在何处启用梯度检查点? +> +> A: 对整个模型启用梯度检查点时,计算效率和显存占用并不是最优的,我们需要设置细粒度的梯度检查点,但同时不希望为框架增加过多繁杂的代码。因此我们建议在 `Pipeline` 的 `model_fn` 中实现,例如 `diffsynth/pipelines/qwen_image.py` 中的 `model_fn_qwen_image`,在 Block 层级启用梯度检查点,不需要修改模型结构的任何代码。 + +> Q: 什么情况下需要启用梯度检查点? +> +> A: 随着模型参数量越来越大,梯度检查点已成为必要的训练技术,梯度检查点通常是需要启用的。梯度检查点的 Offload 则仅需在激活值占用显存过大的模型(例如视频生成模型)中启用。 diff --git a/docs/zh/API_Reference/core/loader.md b/docs/zh/API_Reference/core/loader.md new file mode 100644 index 0000000000000000000000000000000000000000..e30ef9c0ca936ae52ea692a8d41812d423c042d2 --- /dev/null +++ b/docs/zh/API_Reference/core/loader.md @@ -0,0 +1,141 @@ +# `diffsynth.core.loader`: 模型下载与加载 + +本文档介绍 `diffsynth.core.loader` 中模型下载与加载相关的功能。 + +## ModelConfig + +`diffsynth.core.loader` 中的 `ModelConfig` 用于标注模型下载来源、本地路径、显存管理配置等信息。 + +### 从远程下载并加载模型 + +以模型[DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Canny](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Canny) 为例,在 `ModelConfig` 中填写 `model_id` 和 `origin_file_pattern` 后即可自动下载模型。默认下载到 `./models` 路径,该路径可通过[环境变量 DIFFSYNTH_MODEL_BASE_PATH](../../Pipeline_Usage/Environment_Variables.md#diffsynth_model_base_path) 修改。 + +默认情况下,即使模型已经下载完毕,程序仍会向远程查询是否有遗漏文件,如果要完全关闭远程请求,请将[环境变量 DIFFSYNTH_SKIP_DOWNLOAD](../../Pipeline_Usage/Environment_Variables.md#diffsynth_skip_download) 设置为 `True`。 + +```python +from diffsynth.core import ModelConfig + +config = ModelConfig( + model_id="DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Canny", + origin_file_pattern="model.safetensors", +) +# Download models +config.download_if_necessary() +print(config.path) +``` + +调用 `download_if_necessary` 后,模型会自动下载,并将路径返回到 `config.path` 中。 + +### 从本地路径加载模型 + +如果从本地路径加载模型,则需要填入 `path`: + +```python +from diffsynth.core import ModelConfig + +config = ModelConfig(path="models/DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Canny/model.safetensors") +``` + +如果模型包含多个分片文件,以列表的形式输入即可: + +```python +from diffsynth.core import ModelConfig + +config = ModelConfig(path=[ + "models/Qwen/Qwen-Image/text_encoder/model-00001-of-00004.safetensors", + "models/Qwen/Qwen-Image/text_encoder/model-00002-of-00004.safetensors", + "models/Qwen/Qwen-Image/text_encoder/model-00003-of-00004.safetensors", + "models/Qwen/Qwen-Image/text_encoder/model-00004-of-00004.safetensors" +]) +``` + +### 显存管理配置 + +`ModelConfig` 也包含了显存管理配置信息,详见[显存管理](../../Pipeline_Usage/VRAM_management.md#更多使用方式)。 + +## 模型文件加载 + +`diffsynth.core.loader` 提供了统一的 `load_state_dict`,用于加载模型文件中的 state dict。 + +加载单个模型文件: + +```python +from diffsynth.core import load_state_dict + +state_dict = load_state_dict("models/DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Canny/model.safetensors") +``` + +加载多个模型文件(合并为一个 state dict): + +```python +from diffsynth.core import load_state_dict + +state_dict = load_state_dict([ + "models/Qwen/Qwen-Image/text_encoder/model-00001-of-00004.safetensors", + "models/Qwen/Qwen-Image/text_encoder/model-00002-of-00004.safetensors", + "models/Qwen/Qwen-Image/text_encoder/model-00003-of-00004.safetensors", + "models/Qwen/Qwen-Image/text_encoder/model-00004-of-00004.safetensors" +]) +``` + +## 模型哈希 + +模型哈希是用于判断模型类型的,哈希值可通过 `hash_model_file` 获取: + +```python +from diffsynth.core import hash_model_file + +print(hash_model_file("models/DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Canny/model.safetensors")) +``` + +也可计算多个模型文件的哈希值,等价于合并 state dict 后计算模型哈希值: + +```python +from diffsynth.core import hash_model_file + +print(hash_model_file([ + "models/Qwen/Qwen-Image/text_encoder/model-00001-of-00004.safetensors", + "models/Qwen/Qwen-Image/text_encoder/model-00002-of-00004.safetensors", + "models/Qwen/Qwen-Image/text_encoder/model-00003-of-00004.safetensors", + "models/Qwen/Qwen-Image/text_encoder/model-00004-of-00004.safetensors" +])) +``` + +模型哈希值只与模型文件中 state dict 的 keys 和 tensor shape 有关,与模型参数的数值、文件保存时间等信息无关。在计算 `.safetensors` 格式文件的模型哈希值时,`hash_model_file` 是几乎瞬间完成的,无需读取模型的参数;但在计算 `.bin`、`.pth`、`.ckpt` 等二进制文件的模型哈希值时,则需要读取全部模型参数,因此**我们不建议开发者继续使用这些格式的文件。** + +通过[编写模型 Config](../../Developer_Guide/Integrating_Your_Model.md#step-3-编写模型-config)并将模型哈希值等信息填入 `diffsynth/configs/model_configs.py`,开发者可以让 `DiffSynth-Studio` 自动识别模型类型并加载。 + +## 模型加载 + +`load_model` 是 `diffsynth.core.loader` 中加载模型的外部入口,它会调用 [skip_model_initialization](../../API_Reference/core/vram.md#跳过模型参数初始化) 跳过模型参数初始化。如果启用了 [Disk Offload](../../Pipeline_Usage/VRAM_management.md#disk-offload),则调用 [DiskMap](../../API_Reference/core/vram.md#state-dict-硬盘映射) 进行惰性加载;如果没有启用 Disk Offload,则调用 [load_state_dict](#模型文件加载) 加载模型参数。如果需要的话,还会调用 [state dict converter](../../Developer_Guide/Integrating_Your_Model.md#step-2-模型文件格式转换) 进行模型格式转换。最后调用 `model.eval()` 将其切换到推理模式。 + +以下是一个启用了 Disk Offload 的使用案例: + +```python +from diffsynth.core import load_model, enable_vram_management, AutoWrappedLinear, AutoWrappedModule +from diffsynth.models.qwen_image_dit import QwenImageDiT, RMSNorm +import torch + +prefix = "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model" +model_path = [prefix + f"-0000{i}-of-00009.safetensors" for i in range(1, 10)] + +model = load_model( + QwenImageDiT, + model_path, + module_map={ + torch.nn.Linear: AutoWrappedLinear, + RMSNorm: AutoWrappedModule, + }, + vram_config={ + "offload_dtype": "disk", + "offload_device": "disk", + "onload_dtype": "disk", + "onload_device": "disk", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", + }, + vram_limit=0, +) +``` diff --git a/docs/zh/API_Reference/core/quant.md b/docs/zh/API_Reference/core/quant.md new file mode 100644 index 0000000000000000000000000000000000000000..d4eaabef07a33fe01c8a78fe3a4f3cd1aefc913b --- /dev/null +++ b/docs/zh/API_Reference/core/quant.md @@ -0,0 +1,295 @@ +# `diffsynth.core.quant`: 模型量化 + +本文档介绍 `diffsynth.core.quant` 中的量化底层接口,如果你希望将这些功能用于其他的代码库中,可参考本文档。若只想在 `Pipeline` 中启用量化,请参考[模型量化](../../Pipeline_Usage/Quantization.md)。 + +模块通过 `diffsynth.core.quant` 导出以下接口,分为三类: + +| 分类 | 接口 | +| --- | --- | +| 用户接口 | `QuantizeConfig`、`MixedQuantizeConfig`、`describe_quant_method`、`QUANT_METHODS` | +| 扩展接口 | `QuantBackend`、`BackendConfig`、`register_quant_backend`、`register_quant_method`、`QuantMethodSpec`、`QUANT_BACKENDS` | +| 验证工具 | `check_differentiable`、`check_backend_contract` | + +量化的作用对象是模型中的 `nn.Linear`:框架遍历模型、把命中的 `nn.Linear` 替换成后端提供的量化 Linear(它们都是 `nn.Linear` 的子类,因此 LoRA 注入、显存管理等机制无需改动即可识别)。后端只负责单层的量化,模型级的遍历与替换由 `QuantizeConfig` 完成。 + +## 用户接口 + +### QuantizeConfig + +`QuantizeConfig` 既是量化配置,也是作用于任意 `nn.Module` 的操作入口。 + +字段: + +| 字段 | 类型 | 说明 | +| --- | --- | --- | +| `method` | `str` | 量化方法名,取自 `QUANT_METHODS`,决定后端、量化方案与后端配置。必填 | +| `mode` | `str` | `"dynamic"`(默认)保留后端原生量化 Linear,每次 forward 反量化;`"dequant_once"` 在权重量化或加载后立刻还原为普通 fp `nn.Linear` | +| `target_modules` | `list` | 只量化命中的层;`None` 表示不限制 | +| `exclude_modules` | `list` | 排除命中的层 | +| `backend_config_kwargs` | `dict` | 传给该方法后端配置工厂的参数,决定量化行为,例如 nf4 的 `blocksize` | +| `load_prequantized` | `bool` | checkpoint 中已是量化权重,直接加载而不在线量化 | + +`target_modules` / `exclude_modules` 的匹配规则:层的完整点分名称与列表项相等,或以 `"." + 列表项` 结尾。例如 `"img_mod.1"` 能匹配 `transformer_blocks.0.img_mod.1`。 + +构造 `QuantizeConfig` 时会校验后端依赖与参数,不满足时立即报错(含安装指引),不会推迟到推理时才失败。 + +主要方法: + +#### `quantize_model(model, compute_device=None, model_device=None)` + +原地量化 `model` 中命中的 `nn.Linear`,保持每层原有的 dtype。必须在 `load_state_dict` **之后**调用。`load_prequantized=True` 时该方法什么都不做(这种 checkpoint 本来就是量化的)。 + +- `compute_device`:量化计算发生的设备;`None` 表示就地量化。 +- `model_device`:量化完成后每层的存放设备;`None` 表示留在 `compute_device` 上。 + +fp 模型放在 CPU、配合 `compute_device="cuda", model_device="cpu"`,可以逐层流式量化,加速器上同时只驻留一层: + +```python +import torch +from diffsynth.core.quant import QuantizeConfig + +cfg = QuantizeConfig(method="bitsandbytes_nf4") +model.load_state_dict(fp_state_dict) +cfg.quantize_model(model, compute_device="cuda", model_device="cpu") +``` + +#### `prepare_for_prequantized_load(model, compute_dtype=torch.bfloat16)` + +把命中的 `nn.Linear` 换成与预量化 checkpoint 结构一致的空量化层("空壳")。必须在 `load_state_dict(assign=True)` **之前**调用。`compute_dtype` 是量化层在 forward 时反量化到的 dtype。 + +#### `unflatten_state_dict(state_dict, metadata)` / `flatten_state_dict(state_dict)` + +量化权重往往是"打包张量 + 量化状态"的复合结构,而 `.safetensors` 只能存普通张量,这两个方法负责在两种形态间转换。 + +- `unflatten_state_dict(state_dict, metadata)`:把从 checkpoint 读出的扁平张量重建为复合量化张量,结果可交给 `load_state_dict(assign=True)`。 +- `flatten_state_dict(state_dict)`:把量化模型的 state dict 摊平为普通张量与纯字符串 metadata,返回 `(tensors, metadata)`,可直接交给 `safetensors.torch.save_file(tensors, path, metadata=metadata)`。后端未声明 `is_serializable` 时抛出 `NotImplementedError`。 + +加载预量化 checkpoint 的完整流程: + +```python +import torch +from diffsynth.core.quant import QuantizeConfig + +cfg = QuantizeConfig(method="bitsandbytes_nf4", load_prequantized=True) +cfg.prepare_for_prequantized_load(model, compute_dtype=torch.bfloat16) +state_dict = cfg.unflatten_state_dict(state_dict, metadata) +model.load_state_dict(state_dict, assign=True) +``` + +#### `dequantize_model(model, compute_dtype=torch.bfloat16, compute_device=None, model_device=None)` + +把模型中所有量化 Linear 换回普通 fp `nn.Linear`,还原出的权重带有量化误差。**仅当 `mode="dequant_once"` 时生效**,否则直接返回。可在上面两种流程之后调用: + +```python +cfg.dequantize_model(model, compute_dtype=torch.bfloat16) +``` + +#### `is_quantized_linear(module)` + +判断 `module` 是否为本配置后端产出的量化 Linear。 + +#### `build_quantized_shell(module, compute_dtype)` + +构建与 `module` 形状、bias 一致的空量化 Linear。用于在保持层可路由的前提下释放其权重,以及在计算设备上暂存一份副本,是显存管理的配套接口。 + +### MixedQuantizeConfig + +把多个 `QuantizeConfig` 组合成一次混合量化,每个子配置负责一组互不重叠的层,对外暴露与单个 `QuantizeConfig` 相同的接口(`quantize_model`、`prepare_for_prequantized_load`、`dequantize_model`、`flatten_state_dict`、`unflatten_state_dict`、`is_quantized_linear`、`build_quantized_shell`,以及 `method` / `mode` 两个只读属性)。 + +```python +from diffsynth.core.quant import QuantizeConfig, MixedQuantizeConfig + +mod_layers = ["img_mod.1", "txt_mod.1", "norm_out.linear", "img_in", "txt_in", "proj_out"] +cfg = MixedQuantizeConfig(configs=[ + QuantizeConfig(method="bitsandbytes_nf4", exclude_modules=mod_layers), + QuantizeConfig(method="torchao_int8_w8a16", target_modules=mod_layers), +]) +cfg.quantize_model(model, compute_device="cuda") +``` + +字段与约束: + +- `configs`:`QuantizeConfig` 列表,按顺序执行。所有子配置必须共享同一个 `mode`,且它们的 `load_prequantized` 必须为 `False`。 +- `load_prequantized`:加载混合量化 checkpoint 时设置在本包装类上,而非子配置上。 +- 子配置匹配到的层集合必须两两不相交。`quantize_model` 与 `prepare_for_prequantized_load` 会在改动模型之前校验,冲突时报错并指出重叠的层名。 + +`build_quantized_shell(module, compute_dtype, layer_name=None)` 在这里多了 `layer_name` 参数:当多个子配置共用同一后端时,它们产出的量化 Linear 是同一个类,只能靠层名判断归属。 + +### describe_quant_method 与 QUANT_METHODS + +`QUANT_METHODS` 是 `{方法名: QuantMethodSpec}` 的注册表。`QuantMethodSpec` 有三个字段:`backend`(后端名)、`config_factory`(把 `backend_config_kwargs` 转成后端配置的可调用对象)、`label`(人类可读的说明)。 + +列举全部方法前需先调用 `backends.load_all_backends()`: + +```python +from diffsynth.core.quant import QUANT_METHODS, backends + +backends.load_all_backends() +print(sorted(QUANT_METHODS)) +``` + +`describe_quant_method(name)` 打印某个方法的后端、说明,以及它接受的 `backend_config_kwargs` 及默认值(内部会自动加载后端): + +```python +from diffsynth.core.quant import describe_quant_method + +describe_quant_method("comfy_kitchen_int8_w8a8") +``` + +``` +method: comfy_kitchen_int8_w8a8 +backend: comfy_kitchen +detail: W8A8, int8 weight + int8 dynamic activation (ComfyUI int8_tensorwise) +backend config: diffsynth.core.quant.backends.comfy_kitchen.ComfyKitchenInt8Config +backend_config_kwargs (user-tunable): + per_channel = True + convrot = True + convrot_groupsize = 256 + orig_dtype = torch.bfloat16 +pinned by method (not overridable): + format = 'int8_tensorwise' +``` + +其中 `user-tunable` 是可以通过 `backend_config_kwargs` 修改的参数,`pinned by method` 是该方法固定、不可修改的部分(例如 `comfy_kitchen_int8_w8a8` 与 `comfy_kitchen_fp8_w8a8` 共用一个后端,靠 `format` 区分)。传入未被接受的键会直接报错并列出可用键。 + +## 扩展接口:自定义后端 + +### QuantBackend 契约 + +`QuantBackend` 是框架与具体量化库(bitsandbytes / torchao / 自定义)之间的适配层。子类通过 `register_quant_backend` 注册到 `QUANT_BACKENDS`,由 `QuantizeConfig` 实例化并注入方法对应的后端配置。 + +后端产出的量化 Linear 必须满足以下四条契约: + +- **(a)** 是 `nn.Linear` 的即插即用替代:`forward(x)` 内部完成反量化 + 矩阵乘。 +- **(b)** `.to(...)` 只移动设备,绝不改变打包权重 / 量化状态的类型:`.to(dtype)`、`.half()`、`.float()` 等 dtype 转换必须让它们的存储格式与数值保持原样。 +- **(c)** `state_dict()` 与 `load_state_dict(assign=True)` 可往返(必要时借助 `flatten_state_dict` / `unflatten_state_dict`)。 +- **(d)**(仅训练场景)`forward` 对输入可微,梯度能穿过冻结的量化层到达 LoRA 分支。静态上由 `capabilities()["is_differentiable"]` 声明,运行时可用 `check_differentiable` 验证。 + +契约 (b) 之所以必要,是因为显存管理会对模型做 dtype/device 转换,若打包权重被误转成 bf16,量化状态就被破坏了。可参考 `diffsynth/models/ideogram4_dit.py` 中 `Fp8Linear._apply` 的写法:把需要保护的张量名登记下来,在 `_apply` 里把会改变其 dtype 的转换降级为纯设备迁移。 + +需要实现或覆盖的成员: + +| 成员 | 说明 | +| --- | --- | +| `name` | 由 `register_quant_backend` 自动设置 | +| `project_url` | 后端所属库的项目地址,`announce_environment()` 会打印它,把硬件兼容性问题指向上游 | +| `capabilities()` | 返回 `is_serializable` / `is_differentiable` / `is_compileable` / `requires_calibration` 四个布尔标志,默认全为 `False` | +| `validate_environment()` | 检查依赖库与硬件,缺失时抛出带安装指引的异常。在 `QuantizeConfig` 构造时调用 | +| `quantized_linear_classes()` | 声明本后端产出的 Linear 类,必须都是 `torch.nn.Linear` 的子类。`is_quantized_linear` 默认基于它做 `isinstance` 判断 | +| `create_quantized_linear(linear, compute_device, model_device)` | 在线量化:把一个 fp `nn.Linear` 转成量化 Linear。不实现则该后端不支持在线量化 | +| `create_quantized_linear_shell(linear, compute_dtype)` | 构建空壳,用于加载预量化 checkpoint。不实现则该后端不支持预量化加载 | +| `dequantize_to_linear(module, compute_dtype, compute_device, model_device)` | 还原成普通 `nn.Linear`。不实现则 `mode="dequant_once"` 不可用 | +| `flatten_state_dict` / `unflatten_state_dict` | 量化 state dict 与扁平张量之间的转换,`is_serializable=True` 时需要实现 | + +基类对未实现的方法给出了明确的报错信息,因此只支持部分能力的后端可以只实现自己需要的那几个。 + +### BackendConfig + +`BackendConfig` 是后端类型化配置的基类。用户可调的参数写成普通 dataclass 字段,方法固定的值用 `field(init=False, default=...)` 声明,这样它们既能被 `describe_quant_method` 区分展示,也无法通过 `backend_config_kwargs` 修改。 + +类方法 `from_kwargs(kwargs)` 会校验传入的键:出现未声明的键时抛出 `ValueError` 并列出全部可接受的键。它通常直接作为 `register_quant_method` 的 `config_factory`。 + +bitsandbytes 后端的写法就是这个模式的典型示例——共享的 4bit 参数放在基类,`quant_type` 由每个方法的子类钉死: + +```python +from dataclasses import dataclass, field +import torch +from diffsynth.core.quant import BackendConfig, register_quant_method + + +@dataclass +class BitsAndBytes4bitConfig(BackendConfig): + compress_statistics: bool = True + blocksize: int = None + quant_storage: torch.dtype = torch.uint8 + + +@dataclass +class BitsAndBytesNF4Config(BitsAndBytes4bitConfig): + quant_type: str = field(init=False, default="nf4") + + +register_quant_method("bitsandbytes_nf4", "bitsandbytes", BitsAndBytesNF4Config.from_kwargs, label="4bit, nf4, weight-only") +``` + +`config_factory` 不强制返回 `BackendConfig`:若后端直接消费第三方库的配置对象,也可以传入任意把 `dict` 转成该对象的函数(torchao 后端就是这样直接构建 `Int8WeightOnlyConfig` 等)。 + +### register_quant_backend 与 register_quant_method + +- `register_quant_backend(name)`:类装饰器,把后端类注册到 `QUANT_BACKENDS` 并设置其 `name`。 +- `register_quant_method(name, backend, config_factory, label="")`:注册一个方法名到 `QUANT_METHODS`,指明它使用哪个后端、如何构建后端配置。一个后端可以注册多个方法,用固定字段区分量化方案。 + +一个最小后端的完整骨架: + +```python +import torch +from diffsynth.core.quant import QuantBackend, register_quant_backend, register_quant_method + + +class MyQuantLinear(torch.nn.Linear): + """自定义量化 Linear,需满足契约 (a)-(d)。""" + + +@register_quant_backend("my_backend") +class MyQuantBackend(QuantBackend): + project_url = "https://example.com/my-quant-lib" + + def capabilities(self): + return {**super().capabilities(), "is_serializable": True, "is_differentiable": True} + + def validate_environment(self): + ... # 依赖缺失时抛出 ImportError + + def quantized_linear_classes(self): + return (MyQuantLinear,) + + def create_quantized_linear(self, linear, compute_device=None, model_device=None): + ... + + def create_quantized_linear_shell(self, linear, compute_dtype): + ... + + def dequantize_to_linear(self, module, compute_dtype, compute_device=None, model_device=None): + ... + + +register_quant_method("my_method", "my_backend", lambda kwargs: dict(kwargs), label="my custom method") +``` + +注册后即可像内置方法一样使用:`QuantizeConfig(method="my_method")`。若后端定义在 `diffsynth/core/quant/backends/` 之外(例如与某个模型放在一起),只要该模块在构造 `QuantizeConfig` 之前被导入过即可。 + +## 验证工具 + +### check_differentiable + +```python +check_differentiable(module, example_input=None, verbose=True) -> bool +``` + +检查梯度能否穿过 `module` 到达其输入:从输出真实反向一次(`torch.autograd.grad`),并确认输入端收到了有限的梯度。这正是 LoRA 训练对冻结(量化)层的要求。模块会被原地转为 bfloat16 并用 bfloat16 输入探测;`example_input` 为 `None` 时会为暴露了 `in_features` 的模块自动构造随机输入。 + +```python +import torch +from diffsynth.core.quant import check_differentiable +from torchao.quantization import quantize_, Int8WeightOnlyConfig + +linear = torch.nn.Linear(1024, 1024, dtype=torch.bfloat16, device="cuda") +quantize_(linear, Int8WeightOnlyConfig(version=2)) +check_differentiable(linear) +``` + +### check_backend_contract + +```python +check_backend_contract(backend, in_features=512, out_features=512, + compute_dtype=torch.bfloat16, compute_device="cuda", verbose=True) -> bool +``` + +新后端的准入自检:验证它声明了自己的 Linear 类、两个工厂方法都返回这些类的实例、每个声明的类都是 `torch.nn.Linear` 的子类(否则 LoRA 目标探测与显存管理都看不见它),并检查后端实际写出的 checkpoint 键是否都落在层名之下——键名模式漏掉某个 scale 会让 Disk Offload 静默加载出损坏的层。不支持的工厂方法会被跳过而不算失败。 + +```python +from diffsynth.core.quant import QUANT_BACKENDS, QUANT_METHODS, check_backend_contract + +spec = QUANT_METHODS["bitsandbytes_nf4"] +check_backend_contract(QUANT_BACKENDS[spec.backend](spec.config_factory({}))) +``` diff --git a/docs/zh/API_Reference/core/vram.md b/docs/zh/API_Reference/core/vram.md new file mode 100644 index 0000000000000000000000000000000000000000..d97a516d7de7a76cbc80e8c0f46d79d3dd5afdb0 --- /dev/null +++ b/docs/zh/API_Reference/core/vram.md @@ -0,0 +1,66 @@ +# `diffsynth.core.vram`: 显存管理 + +本文档介绍 `diffsynth.core.vram` 中的显存管理底层功能,如果你希望将这些功能用于其他的代码库中,可参考本文档。 + +## 跳过模型参数初始化 + +在 `PyTorch` 中加载模型时,模型的参数默认会占用显存或内存并进行参数初始化,而这些参数会在加载预训练权重后被覆盖掉,这导致了冗余的计算。`PyTorch` 中没有提供接口来跳过这些冗余的计算,我们在 `diffsynth.core.vram` 中提供了 `skip_model_initialization` 用于跳过模型参数初始化。 + +默认的模型加载方式: + +```python +from diffsynth.core import load_state_dict +from diffsynth.models.qwen_image_controlnet import QwenImageBlockWiseControlNet + +model = QwenImageBlockWiseControlNet() # Slow +path = "models/DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Canny/model.safetensors" +state_dict = load_state_dict(path, device="cpu") +model.load_state_dict(state_dict, assign=True) +``` + +跳过参数初始化的模型加载方式: + +```python +from diffsynth.core import load_state_dict, skip_model_initialization +from diffsynth.models.qwen_image_controlnet import QwenImageBlockWiseControlNet + +with skip_model_initialization(): + model = QwenImageBlockWiseControlNet() # Fast +path = "models/DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Canny/model.safetensors" +state_dict = load_state_dict(path, device="cpu") +model.load_state_dict(state_dict, assign=True) +``` + +在 `DiffSynth-Studio` 中,所有预训练模型都遵循这一加载逻辑。开发者在[接入模型](../../Developer_Guide/Integrating_Your_Model.md)完毕后即可直接以这种方式快速加载模型。 + +## State Dict 硬盘映射 + +对于某个模型的预训练权重文件,如果我们只需要读取其中的一组参数,而非全部参数,State Dict 硬盘映射可以加速这一过程。我们在 `diffsynth.core.vram` 中提供了 `DiskMap` 用于按需加载模型参数。 + +默认的权重加载方式: + +```python +from diffsynth.core import load_state_dict + +path = "models/DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Canny/model.safetensors" +state_dict = load_state_dict(path, device="cpu") # Slow +print(state_dict["img_in.weight"]) +``` + +使用 `DiskMap` 只加载特定参数: + +```python +from diffsynth.core import DiskMap + +path = "models/DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Canny/model.safetensors" +state_dict = DiskMap(path, device="cpu") # Fast +print(state_dict["img_in.weight"]) +``` + +`DiskMap` 是 `DiffSynth-Studio` 中 Disk Offload 的基本组件,开发者在[配置细粒度显存管理方案](../../Developer_Guide/Enabling_VRAM_management.md)后即可直接启用 Disk Offload。 + +`DiskMap` 是利用 `.safetensors` 文件的特性实现的功能,因此在使用 `.bin`、`.pth`、`.ckpt` 等二进制文件时,模型的参数是全量加载的,这也导致 Disk Offload 不支持这些格式的文件。**我们不建议开发者继续使用这些格式的文件。** + +## 显存管理可替换模块 + +在启用 `DiffSynth-Studio` 的显存管理后,模型内部的模块会被替换为 `diffsynth.core.vram.layers` 中的可替换模块,其使用方式详见[细粒度显存管理方案](../../Developer_Guide/Enabling_VRAM_management.md#编写细粒度显存管理方案)。 diff --git a/docs/zh/Developer_Guide/Building_a_Pipeline.md b/docs/zh/Developer_Guide/Building_a_Pipeline.md new file mode 100644 index 0000000000000000000000000000000000000000..459902fd969bba09b9bbae51bdf7938712a02b0d --- /dev/null +++ b/docs/zh/Developer_Guide/Building_a_Pipeline.md @@ -0,0 +1,254 @@ +# 接入 Pipeline + +在[将 Pipeline 所需的模型接入](../Developer_Guide/Integrating_Your_Model.md)之后,还需构建 `Pipeline` 用于模型推理,本文档提供 `Pipeline` 构建的标准化流程,开发者也可参考现有的 `Pipeline` 进行构建。 + +`Pipeline` 的实现位于 `diffsynth/pipelines`,每个 `Pipeline` 包含以下必要的关键组件: + +* `__init__` +* `from_pretrained` +* `__call__` +* `units` +* `model_fn` + +## `__init__` + +在 `__init__` 中,`Pipeline` 进行初始化,以下是一个简易的实现: + +```python +import torch +from PIL import Image +from typing import Union +from tqdm import tqdm +from ..diffusion import FlowMatchScheduler +from ..core import ModelConfig +from ..diffusion.base_pipeline import BasePipeline, PipelineUnit +from ..models.new_models import XXX_Model, YYY_Model, ZZZ_Model + +class NewDiffSynthPipeline(BasePipeline): + + def __init__(self, device="cuda", torch_dtype=torch.bfloat16): + super().__init__(device=device, torch_dtype=torch_dtype) + self.scheduler = FlowMatchScheduler() + self.text_encoder: XXX_Model = None + self.dit: YYY_Model = None + self.vae: ZZZ_Model = None + self.in_iteration_models = ("dit",) + self.units = [ + NewDiffSynthPipelineUnit_xxx(), + ... + ] + self.model_fn = model_fn_new +``` + +其中包括以下几部分 + +* `scheduler`: 调度器,用于控制推理的迭代公式中的系数,控制每一步的噪声含量。 +* `text_encoder`、`dit`、`vae`: 模型,自 [Latent Diffusion](https://arxiv.org/abs/2112.10752) 被提出以来,这种三段式模型架构已成为主流的 Diffusion 模型架构,但这并不是一成不变的,`Pipeline` 中可添加任意多个模型。 +* `in_iteration_models`: 迭代中模型,这个元组标注了在迭代中会调用哪些模型。 +* `units`: 模型迭代的前处理单元,详见[`units`](#units)。 +* `model_fn`: 迭代中去噪模型的 `forward` 函数,详见[`model_fn`](#model_fn)。 + +> Q: 模型加载并不发生在 `__init__`,为什么这里仍要将每个模型初始化为 `None`? +> +> A: 在这里标注每个模型的类型后,代码编辑器就可以根据每个模型提供代码补全提示,便于后续的开发。 + +## `from_pretrained` + +`from_pretrained` 负责加载所需的模型,让 `Pipeline` 变成可调用的状态。以下是一个简易的实现: + +```python + @staticmethod + def from_pretrained( + torch_dtype: torch.dtype = torch.bfloat16, + device: Union[str, torch.device] = "cuda", + model_configs: list[ModelConfig] = [], + vram_limit: float = None, + ): + # Initialize pipeline + pipe = NewDiffSynthPipeline(device=device, torch_dtype=torch_dtype) + model_pool = pipe.download_and_load_models(model_configs, vram_limit) + + # Fetch models + pipe.text_encoder = model_pool.fetch_model("xxx_text_encoder") + pipe.dit = model_pool.fetch_model("yyy_dit") + pipe.vae = model_pool.fetch_model("zzz_vae") + # If necessary, load tokenizers here. + + # VRAM Management + pipe.vram_management_enabled = pipe.check_vram_management_state() + return pipe +``` + +开发者需要实现其中获取模型的逻辑,对应的模型名称即为[模型接入时填写的模型 Config](../Developer_Guide/Integrating_Your_Model.md#step-3-编写模型-config) 中的 `"model_name"`。 + +部分模型还需要加载 `tokenizer`,可根据需要在 `from_pretrained` 上添加额外的 `tokenizer_config` 参数并在获取模型后实现这部分。 + +## `__call__` + +`__call__` 实现了整个 Pipeline 的生成过程,以下是常见的生成过程模板,开发者可根据需要在此基础上修改。 + +```python + @torch.no_grad() + def __call__( + self, + prompt: str, + negative_prompt: str = "", + cfg_scale: float = 4.0, + input_image: Image.Image = None, + denoising_strength: float = 1.0, + height: int = 1328, + width: int = 1328, + seed: int = None, + rand_device: str = "cpu", + num_inference_steps: int = 30, + progress_bar_cmd = tqdm, + ): + # Scheduler + self.scheduler.set_timesteps( + num_inference_steps, + denoising_strength=denoising_strength + ) + + # Parameters + inputs_posi = { + "prompt": prompt, + } + inputs_nega = { + "negative_prompt": negative_prompt, + } + inputs_shared = { + "cfg_scale": cfg_scale, + "input_image": input_image, + "denoising_strength": denoising_strength, + "height": height, + "width": width, + "seed": seed, + "rand_device": rand_device, + "num_inference_steps": num_inference_steps, + } + for unit in self.units: + inputs_shared, inputs_posi, inputs_nega = self.unit_runner(unit, self, inputs_shared, inputs_posi, inputs_nega) + + # Denoise + self.load_models_to_device(self.in_iteration_models) + models = {name: getattr(self, name) for name in self.in_iteration_models} + for progress_id, timestep in enumerate(progress_bar_cmd(self.scheduler.timesteps)): + timestep = timestep.unsqueeze(0).to(dtype=self.torch_dtype, device=self.device) + + # Inference + noise_pred_posi = self.model_fn(**models, **inputs_shared, **inputs_posi, timestep=timestep, progress_id=progress_id) + if cfg_scale != 1.0: + noise_pred_nega = self.model_fn(**models, **inputs_shared, **inputs_nega, timestep=timestep, progress_id=progress_id) + noise_pred = noise_pred_nega + cfg_scale * (noise_pred_posi - noise_pred_nega) + else: + noise_pred = noise_pred_posi + + # Scheduler + inputs_shared["latents"] = self.step(self.scheduler, progress_id=progress_id, noise_pred=noise_pred, **inputs_shared) + + # Decode + self.load_models_to_device(['vae']) + image = self.vae.decode(inputs_shared["latents"], device=self.device) + image = self.vae_output_to_image(image) + self.load_models_to_device([]) + + return image +``` + +## `units` + +`units` 包含了所有的前处理过程,例如:宽高检查、提示词编码、初始噪声生成等。在整个模型前处理过程中,数据被抽象为了互斥的三部分,分别存储在对应的字典中: + +* `inputs_shard`: 共享输入,与 [Classifier-Free Guidance](https://arxiv.org/abs/2207.12598)(简称 CFG)无关的参数。 +* `inputs_posi`: Classifier-Free Guidance 的 Positive 侧输入,包含与正向提示词相关的内容。 +* `inputs_nega`: Classifier-Free Guidance 的 Negative 侧输入,包含与负向提示词相关的内容。 + +Pipeline Unit 的实现包括三种:直接模式、CFG 分离模式、接管模式。 + +如果某些计算与 CFG 无关,可采用直接模式,例如 Qwen-Image 的随机噪声初始化: + +```python +class QwenImageUnit_NoiseInitializer(PipelineUnit): + def __init__(self): + super().__init__( + input_params=("height", "width", "seed", "rand_device"), + output_params=("noise",), + ) + + def process(self, pipe: QwenImagePipeline, height, width, seed, rand_device): + noise = pipe.generate_noise((1, 16, height//8, width//8), seed=seed, rand_device=rand_device, rand_torch_dtype=pipe.torch_dtype) + return {"noise": noise} +``` + +如果某些计算与 CFG 有关,需分别处理正向和负向提示词,但两侧的输入参数是相同的,可采用 CFG 分离模式,例如 Qwen-image 的提示词编码: + +```python +class QwenImageUnit_PromptEmbedder(PipelineUnit): + def __init__(self): + super().__init__( + seperate_cfg=True, + input_params_posi={"prompt": "prompt"}, + input_params_nega={"prompt": "negative_prompt"}, + input_params=("edit_image",), + output_params=("prompt_emb", "prompt_emb_mask"), + onload_model_names=("text_encoder",) + ) + + def process(self, pipe: QwenImagePipeline, prompt, edit_image=None) -> dict: + pipe.load_models_to_device(self.onload_model_names) + # Do something + return {"prompt_emb": prompt_embeds, "prompt_emb_mask": encoder_attention_mask} +``` + +如果某些计算需要全局的信息,则需要接管模式,例如 Qwen-Image 的实体分区控制: + +```python +class QwenImageUnit_EntityControl(PipelineUnit): + def __init__(self): + super().__init__( + take_over=True, + input_params=("eligen_entity_prompts", "width", "height", "eligen_enable_on_negative", "cfg_scale"), + output_params=("entity_prompt_emb", "entity_masks", "entity_prompt_emb_mask"), + onload_model_names=("text_encoder",) + ) + + def process(self, pipe: QwenImagePipeline, inputs_shared, inputs_posi, inputs_nega): + # Do something + return inputs_shared, inputs_posi, inputs_nega +``` + +以下是 Pipeline Unit 所需的参数配置: + +* `seperate_cfg`: 是否启用 CFG 分离模式 +* `take_over`: 是否启用接管模式 +* `input_params`: 共享输入参数 +* `output_params`: 输出参数 +* `input_params_posi`: Positive 侧输入参数 +* `input_params_nega`: Negative 侧输入参数 +* `onload_model_names`: 需调用的模型组件名 + +在设计 `unit` 时请尽量按照以下原则进行: + +* 缺省兜底:可选功能的 `unit` 输入参数默认为 `None`,而不是 `False` 或其他数值,请对此默认值进行兜底处理。 +* 参数触发:部分 Adapter 模型可能是未被加载的,例如 ControlNet,对应的 `unit` 应当以参数输入是否为 `None` 来控制触发,而不是以模型是否被加载来控制触发。例如当用户输入了 `controlnet_image` 但没有加载 ControlNet 模型时,代码应当给出报错,而不是忽略这些输入参数继续执行。 +* 简洁优先:尽可能使用直接模式,仅当功能无法实现时,使用接管模式。 +* 显存高效:在 `unit` 中调用模型时,请使用 `pipe.load_models_to_device(self.onload_model_names)` 激活对应的模型,请不要调用 `onload_model_names` 之外的其他模型,`unit` 计算完成后,请不要使用 `pipe.load_models_to_device([])` 手动释放显存。 + +> Q: 部分参数并未在推理过程中调用,例如 `output_params`,是否仍有必要配置? +> +> A: 这些参数不会影响推理过程,但会影响一些实验性功能,因此我们建议将其配置好。例如“拆分训练”,我们可以将训练中的前处理离线完成,但部分需要梯度回传的模型计算无法拆分,这些参数用于构建计算图从而推断哪些计算是可以拆分的。 + +## `model_fn` + +`model_fn` 是迭代中的统一 `forward` 接口,对于开源模型生态尚未形成的模型,直接沿用去噪模型的 `forward` 即可,例如: + +```python +def model_fn_new(dit=None, latents=None, timestep=None, prompt_emb=None, **kwargs): + return dit(latents, prompt_emb, timestep) +``` + +对于开源生态丰富的模型,`model_fn` 通常包含复杂且混乱的跨模型推理,以 `diffsynth/pipelines/qwen_image.py` 为例,这个函数中实现的额外计算包括:实体分区控制、三种 ControlNet、Gradient Checkpointing 等,开发者在实现这一部分时要格外小心,避免模块功能之间的冲突。 + +## 编译加速 + +如需启用编译加速,请参考[推理加速](../Pipeline_Usage/Accelerated_Inference.md)。 diff --git a/docs/zh/Developer_Guide/Enabling_VRAM_management.md b/docs/zh/Developer_Guide/Enabling_VRAM_management.md new file mode 100644 index 0000000000000000000000000000000000000000..22ef752436bd2d31815afc900b8d96719087f3da --- /dev/null +++ b/docs/zh/Developer_Guide/Enabling_VRAM_management.md @@ -0,0 +1,228 @@ +# 细粒度显存管理方案 + +本文档介绍如何为模型编写合理的细粒度显存管理方案,以及如何将 `DiffSynth-Studio` 中的显存管理功能用于外部的其他代码库,在阅读本文档前,请先阅读文档[显存管理](../Pipeline_Usage/VRAM_management.md)。 + +## 20B 模型需要多少显存? + +以 Qwen-Image 的 DiT 模型为例,这一模型的参数量达到了 20B,以下代码会加载这一模型并进行推理,需要约 40G 显存,这个模型在显存较小的消费级 GPU 上显然是无法运行的。 + +```python +from diffsynth.core import load_model +from diffsynth.models.qwen_image_dit import QwenImageDiT +from modelscope import snapshot_download +import torch + +snapshot_download( + model_id="Qwen/Qwen-Image", + local_dir="models/Qwen/Qwen-Image", + allow_file_pattern="transformer/*" +) +prefix = "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model" +model_path = [prefix + f"-0000{i}-of-00009.safetensors" for i in range(1, 10)] +inputs = { + "latents": torch.randn((1, 16, 128, 128), dtype=torch.bfloat16, device="cuda"), + "timestep": torch.zeros((1,), dtype=torch.bfloat16, device="cuda"), + "prompt_emb": torch.randn((1, 5, 3584), dtype=torch.bfloat16, device="cuda"), + "prompt_emb_mask": torch.ones((1, 5), dtype=torch.int64, device="cuda"), + "height": 1024, + "width": 1024, +} + +model = load_model(QwenImageDiT, model_path, torch_dtype=torch.bfloat16, device="cuda") +with torch.no_grad(): + output = model(**inputs) +``` + +## 编写细粒度显存管理方案 + +为了编写细粒度的显存管理方案,我们需用 `print(model)` 观察和分析模型结构: + +``` +QwenImageDiT( + (pos_embed): QwenEmbedRope() + (time_text_embed): TimestepEmbeddings( + (time_proj): TemporalTimesteps() + (timestep_embedder): DiffusersCompatibleTimestepProj( + (linear_1): Linear(in_features=256, out_features=3072, bias=True) + (act): SiLU() + (linear_2): Linear(in_features=3072, out_features=3072, bias=True) + ) + ) + (txt_norm): RMSNorm() + (img_in): Linear(in_features=64, out_features=3072, bias=True) + (txt_in): Linear(in_features=3584, out_features=3072, bias=True) + (transformer_blocks): ModuleList( + (0-59): 60 x QwenImageTransformerBlock( + (img_mod): Sequential( + (0): SiLU() + (1): Linear(in_features=3072, out_features=18432, bias=True) + ) + (img_norm1): LayerNorm((3072,), eps=1e-06, elementwise_affine=False) + (attn): QwenDoubleStreamAttention( + (to_q): Linear(in_features=3072, out_features=3072, bias=True) + (to_k): Linear(in_features=3072, out_features=3072, bias=True) + (to_v): Linear(in_features=3072, out_features=3072, bias=True) + (norm_q): RMSNorm() + (norm_k): RMSNorm() + (add_q_proj): Linear(in_features=3072, out_features=3072, bias=True) + (add_k_proj): Linear(in_features=3072, out_features=3072, bias=True) + (add_v_proj): Linear(in_features=3072, out_features=3072, bias=True) + (norm_added_q): RMSNorm() + (norm_added_k): RMSNorm() + (to_out): Sequential( + (0): Linear(in_features=3072, out_features=3072, bias=True) + ) + (to_add_out): Linear(in_features=3072, out_features=3072, bias=True) + ) + (img_norm2): LayerNorm((3072,), eps=1e-06, elementwise_affine=False) + (img_mlp): QwenFeedForward( + (net): ModuleList( + (0): ApproximateGELU( + (proj): Linear(in_features=3072, out_features=12288, bias=True) + ) + (1): Dropout(p=0.0, inplace=False) + (2): Linear(in_features=12288, out_features=3072, bias=True) + ) + ) + (txt_mod): Sequential( + (0): SiLU() + (1): Linear(in_features=3072, out_features=18432, bias=True) + ) + (txt_norm1): LayerNorm((3072,), eps=1e-06, elementwise_affine=False) + (txt_norm2): LayerNorm((3072,), eps=1e-06, elementwise_affine=False) + (txt_mlp): QwenFeedForward( + (net): ModuleList( + (0): ApproximateGELU( + (proj): Linear(in_features=3072, out_features=12288, bias=True) + ) + (1): Dropout(p=0.0, inplace=False) + (2): Linear(in_features=12288, out_features=3072, bias=True) + ) + ) + ) + ) + (norm_out): AdaLayerNorm( + (linear): Linear(in_features=3072, out_features=6144, bias=True) + (norm): LayerNorm((3072,), eps=1e-06, elementwise_affine=False) + ) + (proj_out): Linear(in_features=3072, out_features=64, bias=True) +) +``` + +在显存管理中,我们只关心包含参数的 Layer。在这个模型结构中,`QwenEmbedRope`、`TemporalTimesteps`、`SiLU` 等 Layer 都是不包含参数的,`LayerNorm` 也因为设置了 `elementwise_affine=False` 不包含参数。包含参数的 Layer 只有 `Linear` 和 `RMSNorm`。 + +`diffsynth.core.vram` 中提供了两个用于替换的模块用于显存管理: +* `AutoWrappedLinear`: 用于替换 `Linear` 层 +* `AutoWrappedModule`: 用于替换其他任意层 + +编写一个 `module_map`,将模型中的 `Linear` 和 `RMSNorm` 映射到对应的模块上: + +```python +module_map={ + torch.nn.Linear: AutoWrappedLinear, + RMSNorm: AutoWrappedModule, +} +``` + +此外,还需要提供 `vram_config` 与 `vram_limit`,这两个参数在[显存管理](../Pipeline_Usage/VRAM_management.md#更多使用方式)中已有介绍。 + +调用 `enable_vram_management` 即可启用显存管理,注意此时模型加载时的 `device` 为 `cpu`,与 `offload_device` 一致: + +```python +from diffsynth.core import load_model, enable_vram_management, AutoWrappedLinear, AutoWrappedModule +from diffsynth.models.qwen_image_dit import QwenImageDiT, RMSNorm +import torch + +prefix = "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model" +model_path = [prefix + f"-0000{i}-of-00009.safetensors" for i in range(1, 10)] +inputs = { + "latents": torch.randn((1, 16, 128, 128), dtype=torch.bfloat16, device="cuda"), + "timestep": torch.zeros((1,), dtype=torch.bfloat16, device="cuda"), + "prompt_emb": torch.randn((1, 5, 3584), dtype=torch.bfloat16, device="cuda"), + "prompt_emb_mask": torch.ones((1, 5), dtype=torch.int64, device="cuda"), + "height": 1024, + "width": 1024, +} + +model = load_model(QwenImageDiT, model_path, torch_dtype=torch.bfloat16, device="cpu") +enable_vram_management( + model, + module_map={ + torch.nn.Linear: AutoWrappedLinear, + RMSNorm: AutoWrappedModule, + }, + vram_config = { + "offload_dtype": torch.bfloat16, + "offload_device": "cpu", + "onload_dtype": torch.bfloat16, + "onload_device": "cpu", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", + }, + vram_limit=0, +) +with torch.no_grad(): + output = model(**inputs) +``` + +以上代码只需要 2G 显存就可以运行 20B 模型的 `forward`。 + +## Disk Offload + +[Disk Offload](../Pipeline_Usage/VRAM_management.md#disk-offload) 是特殊的显存管理方案,需在模型加载过程中启用,而非模型加载完毕后。通常,在以上代码能够顺利运行的前提下,Disk Offload 可以直接启用: + +```python +from diffsynth.core import load_model, enable_vram_management, AutoWrappedLinear, AutoWrappedModule +from diffsynth.models.qwen_image_dit import QwenImageDiT, RMSNorm +import torch + +prefix = "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model" +model_path = [prefix + f"-0000{i}-of-00009.safetensors" for i in range(1, 10)] +inputs = { + "latents": torch.randn((1, 16, 128, 128), dtype=torch.bfloat16, device="cuda"), + "timestep": torch.zeros((1,), dtype=torch.bfloat16, device="cuda"), + "prompt_emb": torch.randn((1, 5, 3584), dtype=torch.bfloat16, device="cuda"), + "prompt_emb_mask": torch.ones((1, 5), dtype=torch.int64, device="cuda"), + "height": 1024, + "width": 1024, +} + +model = load_model( + QwenImageDiT, + model_path, + module_map={ + torch.nn.Linear: AutoWrappedLinear, + RMSNorm: AutoWrappedModule, + }, + vram_config={ + "offload_dtype": "disk", + "offload_device": "disk", + "onload_dtype": "disk", + "onload_device": "disk", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", + }, + vram_limit=0, +) +with torch.no_grad(): + output = model(**inputs) +``` + +Disk Offload 是极为特殊的显存管理方案,只支持 `.safetensors` 格式文件,不支持 `.bin`、`.pth`、`.ckpt` 等二进制文件,不支持带 Tensor reshape 的 [state dict converter](../Developer_Guide/Integrating_Your_Model.md#step-2-模型文件格式转换)。 + +如果出现非 Disk Offload 能正常运行但 Disk Offload 不能正常运行的情况,请在 GitHub 上给我们提 issue。 + +## 写入默认配置 + +为了让用户能够更方便地使用显存管理功能,我们将细粒度显存管理的配置写在 `diffsynth/configs/vram_management_module_maps.py` 中,上述模型的配置信息为: + +```python +"diffsynth.models.qwen_image_dit.QwenImageDiT": { + "diffsynth.models.qwen_image_dit.RMSNorm": "diffsynth.core.vram.layers.AutoWrappedModule", + "torch.nn.Linear": "diffsynth.core.vram.layers.AutoWrappedLinear", +} +``` diff --git a/docs/zh/Developer_Guide/Integrating_Quantization_Backend.md b/docs/zh/Developer_Guide/Integrating_Quantization_Backend.md new file mode 100644 index 0000000000000000000000000000000000000000..c948510c36d9e8a181837fef96dd646369998ba7 --- /dev/null +++ b/docs/zh/Developer_Guide/Integrating_Quantization_Backend.md @@ -0,0 +1,473 @@ +# 接入量化后端 + +`DiffSynth-Studio` 的量化框架由 `diffsynth.core.quant` 提供,内置了 bitsandbytes、torchao、comfy-kitchen 等后端(见[模型量化](../Pipeline_Usage/Quantization.md))。如果你有自研的量化算法或想接入新的量化库,只需实现一个 `QuantBackend`,框架的在线量化、预量化 checkpoint 保存/加载、混合量化、显存管理、量化 + LoRA 训练都能直接复用。 + +本文以一个玩具后端 **INT9**(9bit 对称权重量化,真实按 9bit 打包存储,每个输出通道一个 fp32 scale)为例,走完接入的全过程。INT9 在硬件上并不存在,这里只是为了让示例代码足够短、又能覆盖所有需要实现的接口。完整的接口签名与约定见 [`diffsynth.core.quant` API 文档](../API_Reference/core/quant.md#扩展接口自定义后端)。 + +## 框架结构 + +量化框架分成三层: + +- **`QuantizeConfig`**:面向用户的配置与入口,负责在模型中遍历、匹配并替换 `nn.Linear`。你不需要改动它。 +- **`QuantBackend`**:适配层,只处理**单个** `nn.Linear`:怎么量化、怎么造空壳、怎么反量化、怎么读写 state dict。这是你要实现的部分。 +- **量化 Linear**:实际承载量化权重并在 `forward` 中完成反量化 + 矩阵乘的模块。 + +量化 Linear 必须满足四条契约: + +- **(a)** 是 `nn.Linear` 的替代品,`forward(x)` 内部完成反量化 + 矩阵乘;且必须是 `torch.nn.Linear` 的子类,否则 LoRA 注入与显存管理无法识别它。 +- **(b)** `.to(...)` 只搬设备,不改打包权重与量化状态的 dtype。显存管理会对模型做 dtype 转换,若打包权重被转成 bf16,量化状态就损坏了。 +- **(c)** `state_dict()` 与 `load_state_dict(assign=True)` 可以往返,必要时通过 `flatten_state_dict` / `unflatten_state_dict` 转换。 +- **(d)**(仅训练需要)`forward` 对输入可微,梯度能穿过冻结的量化层到达 LoRA 分支。 + +## 第一步:编写量化 Linear + +INT9 的存储布局需要一点设计:9bit 没有对应的原生 dtype,如果直接把它塞进 int16 张量,每个权重仍然占 16bit,和 bf16 一样大,量化就白做了。因此这里把每个权重拆成两部分存放——低 8 位放进 uint8 的 `weight`,第 9 位(最高位)单独构成一个位平面,8 个权重打包进 1 个字节存进 `weight_msb`,再加上每个输出通道一个 fp32 的 `weight_scale`。这样每个权重实际占用 9bit,是 bf16 的 56%。 + +另外注意两个细节: + +- 删掉 `nn.Linear` 原有的 `weight` 参数,改为注册同名 buffer,这样 checkpoint 的键名依然是 `层名.weight`,磁盘 offload 与混合量化的键归属判断才能正常工作。 +- 通过重写 `_apply` 守护打包张量的 dtype,即契约 (b)。`.to()` / `.half()` / `.float()` 等所有转换都会走到 `_apply`,把会改变 dtype 的转换降级为纯搬设备即可。 + +```python +from dataclasses import dataclass, field + +import torch +import torch.nn.functional as F + +from diffsynth.core.quant import BackendConfig, QuantBackend, register_quant_backend, register_quant_method + + +def pack_msb(bits): + """把 0/1 位平面按 8 个权重 1 字节打包,每个权重只占 1bit。""" + flat = bits.reshape(-1) + padding = (-flat.numel()) % 8 + if padding: + flat = torch.cat([flat, flat.new_zeros(padding)]) + groups = flat.view(-1, 8) + packed = torch.zeros(groups.shape[0], dtype=torch.uint8, device=flat.device) + for index in range(8): + packed |= groups[:, index] << index + return packed + + +def unpack_msb(packed, numel): + bits = torch.stack([(packed >> index) & 1 for index in range(8)], dim=1) + return bits.reshape(-1)[:numel] + + +class Int9Linear(torch.nn.Linear): + """int9 权重:低 8 位存在 uint8 的 `weight` 中,第 9 位打包进 `weight_msb`, + 每个输出通道一个 fp32 scale。每个权重占 9bit,是 bf16 的 56%。""" + + dtype_guarded_tensor_names = ("weight", "weight_msb", "weight_scale") + + def __init__(self, in_features, out_features, bias, compute_dtype): + with torch.device("meta"): + super().__init__(in_features, out_features, bias=bias, dtype=compute_dtype) + del self.weight + self.register_buffer("weight", torch.empty(out_features, in_features, dtype=torch.uint8, device="meta")) + self.register_buffer("weight_msb", torch.empty((in_features * out_features + 7) // 8, dtype=torch.uint8, device="meta")) + self.register_buffer("weight_scale", torch.empty(out_features, dtype=torch.float32, device="meta")) + if self.bias is not None: + self.bias.requires_grad_(False) + + def _apply(self, fn, recurse=True): + protected = {id(tensor) for name in self.dtype_guarded_tensor_names + if (tensor := getattr(self, name, None)) is not None} + + def guard(tensor): + converted = fn(tensor) + if id(tensor) in protected and converted.dtype != tensor.dtype: + return tensor.to(device=converted.device) + return converted + + return super()._apply(guard, recurse) + + def dequantize_weight(self, dtype): + msb = unpack_msb(self.weight_msb, self.weight.numel()).view_as(self.weight) + codes = self.weight.to(torch.int16) | (msb.to(torch.int16) << 8) + return ((codes - 256).float() * self.weight_scale.unsqueeze(1)).to(dtype) + + def forward(self, x): + bias = self.bias.to(x.dtype) if self.bias is not None else None + return F.linear(x, self.dequantize_weight(x.dtype), bias) +``` + +`forward` 中的反量化用的是常规张量运算,梯度可以经 `F.linear` 传回输入 `x`,因此契约 (d) 自动满足。这里的解包是用 PyTorch 算子逐位拼出来的,只为示例简洁;真实后端通常把解包与矩阵乘融合进一个 kernel,避免每次 forward 都物化一份 fp 权重。 + +`dequantize_weight` 中有一个容易踩的坑:整数码的还原必须在 fp32 中做。bf16 只有 8bit 有效精度,超过 256 的整数无法精确表示,如果直接把码值转成 bf16 再乘 scale,第 9 位就被舍入掉了,精度收益会白白丢失(实测误差从 int8 的 2.25 倍优势退化到 1.15 倍)。凡是码值位宽超过计算精度的有效位数的量化格式,都要注意这一点。 + +## 第二步:编写后端 + +后端的每个方法只处理一层 `nn.Linear`: + +- `capabilities()`:声明能力,四个开关默认全为 `False`。`is_serializable=True` 才允许保存量化权重,`is_differentiable=True` 才允许量化 + LoRA 训练。 +- `quantized_linear_classes()`:声明本后端产出的 Linear 类,`is_quantized_linear` 默认用它做 `isinstance` 判断。 +- `create_quantized_linear()`:在线量化,把 fp 的 `nn.Linear` 变成量化 Linear。`compute_device` 是量化计算所在设备,`model_device` 是量化完成后存放的设备,两者配合可以逐层流式量化,显存里一次只放一层。 +- `create_quantized_linear_shell()`:造一个空壳,用于加载预量化 checkpoint 以及磁盘 offload。空壳会在每次 offload 时重建,所以要建在 `meta` 设备上,保持廉价。 +- `dequantize_to_linear()`:反量化回普通 `nn.Linear`,供 `mode="dequant_once"` 使用。 +- `flatten_state_dict` / `unflatten_state_dict`:state dict 与扁平张量之间的转换。INT9 的 state dict 本身就是普通张量,直接用基类实现即可,无需重写;只有像 bitsandbytes、torchao 那样含复合张量(张量子类、嵌套量化状态)的后端才需要重写。 + +未实现的方法会由基类抛出带说明的异常,因此只支持部分能力的后端只实现自己需要的即可。`self.config` 是框架注入的后端配置实例,即下一步要写的 `Int9WeightOnlyConfig`。 + +```python +@register_quant_backend("toy_int9") +class Int9QuantBackend(QuantBackend): + project_url = "https://example.com/toy-int9" + + def capabilities(self): + return {**super().capabilities(), "is_serializable": True, "is_differentiable": True} + + def quantized_linear_classes(self): + return (Int9Linear,) + + def create_quantized_linear(self, linear, compute_device=None, model_device=None): + weight = linear.weight.data + if compute_device is not None: + weight = weight.to(device=compute_device) + amax = weight.abs().amax(dim=1) if self.config.per_channel else weight.abs().amax().expand(weight.shape[0]) + scale = (amax.float() / 255).clamp(min=1e-8) + codes = (weight.float() / scale.unsqueeze(1)).round().clamp(-256, 255).to(torch.int16) + 256 + + quant_linear = Int9Linear(linear.in_features, linear.out_features, bias=linear.bias is not None, compute_dtype=weight.dtype) + quant_linear.weight = (codes & 0xFF).to(torch.uint8) + quant_linear.weight_msb = pack_msb((codes >> 8).to(torch.uint8)) + quant_linear.weight_scale = scale + if linear.bias is not None: + quant_linear.bias = torch.nn.Parameter(linear.bias.data.to(device=scale.device), requires_grad=False) + return quant_linear if model_device is None else quant_linear.to(device=model_device) + + def create_quantized_linear_shell(self, linear, compute_dtype): + return Int9Linear(linear.in_features, linear.out_features, bias=linear.bias is not None, compute_dtype=compute_dtype) + + def dequantize_to_linear(self, module, compute_dtype, compute_device=None, model_device=None): + if compute_device is not None: + module = module.to(device=compute_device) + fp_weight = module.dequantize_weight(compute_dtype) + linear = torch.nn.Linear(module.in_features, module.out_features, bias=module.bias is not None, device="meta") + linear.weight = torch.nn.Parameter(fp_weight, requires_grad=False) + if module.bias is not None: + linear.bias = torch.nn.Parameter(module.bias.data.to(dtype=compute_dtype, device=fp_weight.device), requires_grad=False) + return linear if model_device is None else linear.to(device=model_device) +``` + +## 第三步:编写后端配置 + +后端配置继承 `BackendConfig`:用户可调的参数写成普通 dataclass 字段,由方法固定、不允许用户覆盖的值用 `field(init=False, default=...)` 声明。`describe_quant_method` 会分别展示这两类参数,`from_kwargs` 则会在用户传入未知的 `backend_config_kwargs` 时报错。 + +```python +@dataclass +class Int9WeightOnlyConfig(BackendConfig): + per_channel: bool = True # 用户可调:per-channel 还是 per-tensor + bits: int = field(init=False, default=9) # 方法固定,不可覆盖 +``` + +## 第四步:注册量化方法 + +一个后端可以注册多个方法,通过配置中被固定的字段区分(例如 bitsandbytes 后端用 `quant_type` 区分 nf4 与 fp4)。方法名建议遵循 `<后端>_<格式>_w<权重位宽>a<激活位宽>` 的命名约定: + +```python +register_quant_method("toy_int9_w9a16", "toy_int9", Int9WeightOnlyConfig.from_kwargs, label="9bit, int9, weight-only (toy)") +``` + +注册后端和方法有两种方式: + +**方式一:写在自己的代码里(推荐,即插即用)**。把上面的代码放在任意模块中,只要在构造 `QuantizeConfig` 之前 import 过这个模块,方法就已经注册进 `QUANT_METHODS`,可以像内置方法一样使用,无需改动框架代码: + +```python +import my_project.toy_int9 # 触发 register_quant_backend / register_quant_method + +from diffsynth.core.quant import QuantizeConfig + +quantize = QuantizeConfig(method="toy_int9_w9a16", backend_config_kwargs={"per_channel": True}) +``` + +**方式二:作为内置后端(永久生效)**。把后端文件放到 `diffsynth/core/quant/backends/` 下,并在 `diffsynth/core/quant/backends/__init__.py` 的 `_LAZY_BACKENDS` 中登记,框架就会在需要时按需 import,用户无需手动 import: + +```python +_LAZY_BACKENDS = { + "bitsandbytes": ".bitsandbytes", + "torchao": ".torchao", + "comfy_kitchen": ".comfy_kitchen", + "toy_int9": ".toy_int9", +} +``` + +如果你的量化算法或量化库有通用价值,欢迎按方式二提 PR 给我们,让更多用户直接用上。需要第三方依赖的后端请在 `validate_environment()` 中检查依赖并给出安装提示,在 `project_url` 中填写上游项目地址。 + +## 第五步:自检 + +框架提供了两个自检工具,建议在接入后立刻跑一遍。`check_backend_contract` 会检查后端是否声明了 Linear 类、两个工厂方法是否返回声明的类、所有类是否都是 `nn.Linear` 的子类,以及后端实际写出的 checkpoint 键是否都落在层名之下(漏掉一个 scale 会让磁盘 offload 静默加载出损坏的层)。不支持的工厂方法会被跳过,不计为失败。 + +```python +from diffsynth.core.quant import QUANT_BACKENDS, QUANT_METHODS, check_backend_contract, check_differentiable, describe_quant_method + +describe_quant_method("toy_int9_w9a16") + +spec = QUANT_METHODS["toy_int9_w9a16"] +check_backend_contract(QUANT_BACKENDS[spec.backend](spec.config_factory({})), compute_device="cpu") +``` + +输出如下,`describe_quant_method` 同时验证了用户可调参数与固定参数的划分是否符合预期: + +``` +method: toy_int9_w9a16 +backend: toy_int9 +detail: 9bit, int9, weight-only (toy) +backend config: my_project.toy_int9.Int9WeightOnlyConfig +backend_config_kwargs (user-tunable): + per_channel = True +pinned by method (not overridable): + bits = 9 +check_backend_contract (toy_int9): + [PASS] quantized_linear_classes() is non-empty: ['Int9Linear'] + [PASS] Int9Linear subclasses torch.nn.Linear + [PASS] a plain nn.Linear is not reported as quantized + [PASS] create_quantized_linear_shell() returns a declared class, got Int9Linear + [PASS] the shell is recognized before load_state_dict (disk offload routing) + [PASS] create_quantized_linear() returns a declared class, got Int9Linear + [PASS] every stored key lives under the layer name; uncovered: [] + => OK +``` + +接着在一个小模型上验证数值误差、真实的显存收益、契约 (b) 的 dtype 守护、以及契约 (d) 的可微性: + +```python +import torch +from diffsynth.core.quant import QuantizeConfig, check_differentiable + + +class ToyModel(torch.nn.Module): + def __init__(self): + super().__init__() + self.fc1 = torch.nn.Linear(256, 512) + self.fc2 = torch.nn.Linear(512, 256, bias=False) + + def forward(self, x): + return self.fc2(torch.nn.functional.silu(self.fc1(x))) + + +def footprint(model): + return sum(t.numel() * t.element_size() for t in list(model.parameters()) + list(model.buffers())) + + +torch.manual_seed(0) +model = ToyModel().to(torch.bfloat16) +x = torch.randn(4, 256, dtype=torch.bfloat16) +reference = model(x) +fp_bytes = footprint(model) + +QuantizeConfig(method="toy_int9_w9a16").quantize_model(model, compute_device="cpu") +print("relative error:", ((model(x) - reference).norm() / reference.norm()).item()) +print(f"footprint: {fp_bytes} -> {footprint(model)} bytes ({footprint(model) / fp_bytes:.3f} of bf16)") + +model.to(torch.float32) # 契约 (b):打包权重的 dtype 不应改变 +print(model.fc1.weight.dtype, model.fc1.weight_msb.dtype, model.fc1.weight_scale.dtype, model.fc1.bias.dtype) + +check_differentiable(model.fc1) # 契约 (d) +``` + +``` +2 nn.Linear layers quantized (method: toy_int9_w9a16). +relative error: 0.004150390625 +footprint: 525312 -> 299008 bytes (0.569 of bf16) +torch.uint8 torch.uint8 torch.float32 torch.float32 +check_differentiable (Int9Linear): OK -- gradients pass through the module to its input +``` + +实测占用是 bf16 的 0.569,略高于 9/16 = 0.5625,差值来自 fp32 的 scale 和未量化的 bias。如果这个比例接近 1,说明打包格式没有真正压缩权重,需要回到第一步检查存储布局。 + +### 在真实模型上推理:Z-Image + +小模型验证通过后,就可以直接在真实模型上用了——自定义后端和内置方法的用法完全一致,只要在构造 `QuantizeConfig` 之前 import 过注册后端的模块,把它传给 `ModelConfig(quantize=...)` 即可: + +```python +import torch + +import my_project.toy_int9 # 注册 toy_int9 后端与 toy_int9_w9a16 方法 +from diffsynth.core.quant import QuantizeConfig +from diffsynth.pipelines.z_image import ModelConfig, ZImagePipeline + +pipe = ZImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig( + model_id="Tongyi-MAI/Z-Image-Turbo", + origin_file_pattern="transformer/*.safetensors", + quantize=QuantizeConfig(method="toy_int9_w9a16"), + ), + ModelConfig(model_id="Tongyi-MAI/Z-Image-Turbo", origin_file_pattern="text_encoder/*.safetensors"), + ModelConfig(model_id="Tongyi-MAI/Z-Image-Turbo", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + tokenizer_config=ModelConfig(model_id="Tongyi-MAI/Z-Image-Turbo", origin_file_pattern="tokenizer/"), +) + +dit_bytes = sum(t.numel() * t.element_size() for t in list(pipe.dit.parameters()) + list(pipe.dit.buffers())) +print(f"dit weights: {dit_bytes / 1024 ** 3:.3f} GiB") + +prompt = "A delicate portrait of an underwater girl, blue dress flowing, hair gently drifting, light and shadow clear, surrounded by bubbles, serene expression, exquisite details, dreamlike and beautiful." +image = pipe(prompt=prompt, seed=42, rand_device="cuda") +image.save("z_image_toy_int9.jpg") +``` + +实测 Z-Image Turbo 的 DiT 权重占用(8 步 Turbo 出图正常,画质与 bf16 无明显差异): + +| | DiT 权重 | +| --- | --- | +| bf16 | 11.464 GiB | +| `toy_int9_w9a16` | 6.456 GiB(0.563×) | + +需要注意峰值显存与权重占用不是一回事:这个 toy 的 forward 每次都会临时物化一份 fp 权重,所以峰值的节省会小于权重的节省。在一个 48 个 Linear 的合成模型上(权重全部常驻 GPU)实测: + +| | 权重 | forward 峰值 | +| --- | --- | --- | +| bf16 | 1.500 GiB | 1.527 GiB | +| `toy_int9_w9a16` | 0.845 GiB(0.563×) | 1.036 GiB(0.678×) | + +这份临时权重只与**最大的那一层**有关,不随层数增长,所以模型越深、收益越接近权重的比例;真实后端把解包与矩阵乘融进一个 kernel 后就不需要它了。想进一步压低峰值,可以叠加[显存管理](../Pipeline_Usage/VRAM_management.md)按层搬运权重(把 `vram_config` 传给上面的每个 `ModelConfig`,实测峰值可降到 2.1 GiB)。 + +### 精度对比:int9 vs int8 + +多出来的 1 bit 是否真的换来了精度?把同一个权重用**完全相同**的 per-channel 对称量化方案分别做 8bit 与 9bit,对比反量化后的权重误差与层输出误差即可。这也是给新后端做精度回归的通用做法:控制其他变量,只改位宽。 + +```python +import torch +from my_project.toy_int9 import Int9QuantBackend, Int9WeightOnlyConfig + + +def quantize_int8(linear): + """同样的 per-channel 对称方案,只少 1 bit:码值范围 [-128, 127]。""" + weight = linear.weight.data + scale = (weight.abs().amax(dim=1).float() / 127).clamp(min=1e-8) + codes = (weight.float() / scale.unsqueeze(1)).round().clamp(-128, 127) + return (codes * scale.unsqueeze(1)).to(weight.dtype) + + +def relative_error(reference, value): + return ((value.float() - reference.float()).norm() / reference.float().norm()).item() + + +torch.manual_seed(0) +backend = Int9QuantBackend(Int9WeightOnlyConfig()) +linear = torch.nn.Linear(2048, 2048, bias=False).to(torch.bfloat16) +fp_weight = linear.weight.data.clone() + +int9_weight = backend.create_quantized_linear(linear).dequantize_weight(torch.bfloat16) +int8_weight = quantize_int8(linear) +error8, error9 = relative_error(fp_weight, int8_weight), relative_error(fp_weight, int9_weight) +print(f"weight error: int8 {error8:.6f} | int9 {error9:.6f} ({error8 / error9:.2f}x lower)") + +x = torch.randn(64, 2048, dtype=torch.bfloat16) +reference = torch.nn.functional.linear(x, fp_weight) +out8 = relative_error(reference, torch.nn.functional.linear(x, int8_weight)) +out9 = relative_error(reference, torch.nn.functional.linear(x, int9_weight)) +print(f"output error: int8 {out8:.6f} | int9 {out9:.6f} ({out8 / out9:.2f}x lower)") +``` + +``` +weight error: int8 0.004353 | int9 0.001937 (2.25x lower) +output error: int8 0.004947 | int9 0.002816 (1.76x lower) +``` + +结论符合预期:码值范围从 255 级扩到 511 级,量化步长减半,权重误差随之降到约 1/2(实测 2.25 倍,均匀量化下误差与步长成正比)。端到端的层输出收益略小(1.76 倍),因为激活值本身是 bf16,矩阵乘自带的舍入噪声会占掉一部分收益——这也提示:位宽收益要放到实际计算精度下评估,而不是只看权重误差。 + +最后验证契约 (c):保存量化权重,再用空壳加载回来,两者的输出应完全一致。 + +```python +from safetensors.torch import load_file, save_file + +save_config = QuantizeConfig(method="toy_int9_w9a16") +tensors, metadata = save_config.flatten_state_dict(model.state_dict()) +save_file(tensors, "toy_int9.safetensors", metadata=metadata) + +loaded = ToyModel().to(torch.bfloat16) +load_config = QuantizeConfig(method="toy_int9_w9a16", load_prequantized=True) +load_config.prepare_for_prequantized_load(loaded, compute_dtype=torch.bfloat16) +loaded.load_state_dict(load_config.unflatten_state_dict(load_file("toy_int9.safetensors"), metadata), assign=True) +print("reload match:", torch.equal(loaded(x.float()), model(x.float()))) +``` + +``` +reload match: True +``` + +### 与 Disk Offload 组合验证 + +[显存管理](../Pipeline_Usage/VRAM_management.md)中的 Disk Offload 对量化后端的要求最严格:模型常驻内存中只保留 `meta` 空壳,每次 forward 时才按层把张量从磁盘流式读回来,用完即丢。它依赖两件事: + +- 只支持**预量化 checkpoint**,因此必须 `load_prequantized=True`,并先经 `prepare_for_prequantized_load` 把目标层换成空壳。 +- 某一层需要哪些张量,是用层的点分名做前缀扫描从 checkpoint 键里找出来的,然后以 `load_state_dict(assign=True)` 严格加载。因此后端只要满足「所有张量都在 `层名.` 之下」这一条(无论是 `层名.weight_scale` 这样的平级张量,还是 bnb 那样的嵌套量化状态),就能被正确切分;键少了或多了会直接报错,而不会静默加载出错误的层。 + +```python +import torch +from safetensors.torch import save_file + +from diffsynth.core.loader.model import load_metadata_from_safetensors +from diffsynth.core.quant import QuantizeConfig +from diffsynth.core.vram.disk_map import DiskMap +from diffsynth.core.vram.layers import AutoWrappedLinear, enable_vram_management_recursively + +resident = ToyModel().to(torch.bfloat16) +x = torch.randn(2, 256, dtype=torch.bfloat16, device="cuda") + +save_config = QuantizeConfig(method="toy_int9_w9a16") +save_config.quantize_model(resident, compute_device="cuda") +resident = resident.to("cuda") +reference = resident(x) + +tensors, metadata = save_config.flatten_state_dict(resident.state_dict()) +save_file({key: value.cpu() for key, value in tensors.items()}, "toy_int9.safetensors", metadata=metadata) + +fresh = ToyModel().to(torch.bfloat16) +load_config = QuantizeConfig(method="toy_int9_w9a16", load_prequantized=True) +load_config.prepare_for_prequantized_load(fresh, compute_dtype=torch.bfloat16) +enable_vram_management_recursively( + fresh, + module_map={torch.nn.Linear: AutoWrappedLinear}, + vram_config={ + "offload_dtype": "disk", "offload_device": "disk", + "onload_dtype": "disk", "onload_device": "disk", + "preparing_dtype": torch.bfloat16, "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, "computation_device": "cuda", + }, + disk_map=DiskMap(["toy_int9.safetensors"], "cuda", torch_dtype=None), + quantize=load_config, + metadata=load_metadata_from_safetensors("toy_int9.safetensors"), +) + +for name, module in fresh.named_modules(): + if getattr(module, "disk_offload", False): + print(f"{name}: {module._disk_required_keys()}") + +resident_bytes = sum(t.numel() * t.element_size() for t in list(resident.parameters()) + list(resident.buffers())) +offloaded_bytes = sum(t.numel() * t.element_size() for t in list(fresh.parameters()) + list(fresh.buffers()) if not t.is_meta) +print(f"resident {resident_bytes} bytes -> in memory after disk offload {offloaded_bytes} bytes") +print("output matches:", torch.equal(fresh(x), reference), "| repeatable:", torch.equal(fresh(x), reference)) +``` + +在前面那个 `ToyModel` 上实测(`DiskMap` 的 `torch_dtype=None` 很关键,它保证打包张量不会在读取时被转换精度): + +``` +2 nn.Linear layers replaced for loading the pre-quantized checkpoint (method: toy_int9_w9a16). +fc1: ['fc1.bias', 'fc1.weight', 'fc1.weight_msb', 'fc1.weight_scale'] +fc2: ['fc2.weight', 'fc2.weight_msb', 'fc2.weight_scale'] +resident 299008 bytes -> in memory after disk offload 0 bytes +output matches: True | repeatable: True +``` + +每层的 `weight` / `weight_msb` / `weight_scale` / `bias` 都被正确归到该层名下,常驻占用降到 0 字节(全部是 `meta` 空壳),输出与常驻量化模型逐位相同,且多次 forward 结果稳定——说明空壳的反复重建与流式加载没有副作用。 + +在真实模型上,则可以用[模型量化](../Pipeline_Usage/Quantization.md)中的通用流程做端到端验证:把 `QuantizeConfig(method="toy_int9_w9a16")` 传给 `ModelConfig(quantize=...)` 做在线量化推理,用 `save_quantized_model` 保存量化权重并注册 hash 后加载,以及在量化模型上注入 LoRA 训练。 + +## 接入检查清单 + +- 打包格式真的减小了权重体积:量化前后实测占用之比应接近理论位宽比,而不是接近 1。 +- 精度收益经过验证:与少 1 bit 的同方案对比,误差确实下降;否则说明反量化路径中丢失了精度。 +- 量化 Linear 是 `torch.nn.Linear` 的子类,`state_dict` 的键都在层名之下。 +- `_apply` 守护了所有打包张量与量化状态的 dtype。 +- `capabilities()` 与实际能力一致:声明 `is_serializable` 就要保证 state dict 能往返,声明 `is_differentiable` 就要能通过 `check_differentiable`。 +- `create_quantized_linear` 尊重 `compute_device` / `model_device`,以支持逐层流式量化。 +- 能与 Disk Offload 组合:空壳建在 `meta` 上且重建代价低,所有张量都在层名之下,且 `unflatten_state_dict` 能接受「单层子字典 + 整文件 metadata」的调用方式。 +- 依赖第三方库时,`validate_environment()` 给出明确的安装提示,`project_url` 指向上游项目。 +- `check_backend_contract` 全部通过。 diff --git a/docs/zh/Developer_Guide/Integrating_Your_Model.md b/docs/zh/Developer_Guide/Integrating_Your_Model.md new file mode 100644 index 0000000000000000000000000000000000000000..81c0975fd6d4853030816866efc0d6b1f39f2f6b --- /dev/null +++ b/docs/zh/Developer_Guide/Integrating_Your_Model.md @@ -0,0 +1,186 @@ +# 接入模型结构 + +本文档介绍如何将模型接入到 `DiffSynth-Studio` 框架中,供 `Pipeline` 等模块调用。 + +## Step 1: 集成模型结构代码 + +`DiffSynth-Studio` 中的所有模型结构实现统一在 `diffsynth/models` 中,每个 `.py` 代码文件分别实现一个模型结构,所有模型通过 `diffsynth/models/model_loader.py` 中的 `ModelPool` 来加载。在接入新的模型结构时,请在这个路径下建立新的 `.py` 文件。 + +```shell +diffsynth/models/ +├── general_modules.py +├── model_loader.py +├── qwen_image_controlnet.py +├── qwen_image_dit.py +├── qwen_image_text_encoder.py +├── qwen_image_vae.py +└── ... +``` + +在大多数情况下,我们建议用 `PyTorch` 原生代码的形式集成模型,让模型结构类直接继承 `torch.nn.Module`,例如: + +```python +import torch + +class NewDiffSynthModel(torch.nn.Module): + def __init__(self, dim=1024): + super().__init__() + self.linear = torch.nn.Linear(dim, dim) + self.activation = torch.nn.Sigmoid() + + def forward(self, x): + x = self.linear(x) + x = self.activation(x) + return x +``` + +如果模型结构的实现中包含额外的依赖,我们强烈建议将其删除,否则这会导致沉重的包依赖问题。在我们现有的模型中,Qwen-Image 的 Blockwise ControlNet 是以这种方式集成的,其代码很轻量,请参考 `diffsynth/models/qwen_image_controlnet.py`。 + +如果模型已被 Huggingface Library ([`transformers`](https://huggingface.co/docs/transformers/main/index)、[`diffusers`](https://huggingface.co/docs/diffusers/main/index) 等)集成,我们能够以更简单的方式集成模型: + +
+集成 Huggingface Library 风格模型结构代码 + +这类模型在 Huggingface Library 中的加载方式为: + +```python +from transformers import XXX_Model + +model = XXX_Model.from_pretrained("path_to_your_model") +``` + +`DiffSynth-Studio` 不支持通过 `from_pretrained` 加载模型,因为这与显存管理等功能是冲突的,请将模型结构改写成以下格式: + +```python +import torch + +class DiffSynth_XXX_Model(torch.nn.Module): + def __init__(self): + super().__init__() + from transformers import XXX_Config, XXX_Model + config = XXX_Config(**{ + "architectures": ["XXX_Model"], + "other_configs": "Please copy and paste the other configs here.", + }) + self.model = XXX_Model(config) + + def forward(self, x): + outputs = self.model(x) + return outputs +``` + +其中 `XXX_Config` 为模型对应的 Config 类,例如 `Qwen2_5_VLModel` 的 Config 类为 `Qwen2_5_VLConfig`,可通过查阅其源代码找到。Config 内部的内容通常可以在模型库中的 `config.json` 中找到,`DiffSynth-Studio` 不会读取 `config.json` 文件,因此需要将其中的内容复制粘贴到代码中。 + +在少数情况下,`transformers` 和 `diffusers` 的版本更新会导致部分的模型无法导入,因此如果可能的话,我们仍建议使用 Step 1.1 中的模型集成方式。 + +在我们现有的模型中,Qwen-Image 的 Text Encoder 是以这种方式集成的,其代码很轻量,请参考 `diffsynth/models/qwen_image_text_encoder.py`。 + +
+ +## Step 2: 模型文件格式转换 + +由于开源社区中开发者提供的模型文件格式多种多样,因此我们有时需对模型文件格式进行转换,从而形成格式正确的 [state dict](https://docs.pytorch.org/tutorials/recipes/recipes/what_is_state_dict.html),常见于以下几种情况: + +* 模型文件由不同代码库构建,例如 [Wan-AI/Wan2.1-T2V-1.3B](https://www.modelscope.cn/models/Wan-AI/Wan2.1-T2V-1.3B) 和 [Wan-AI/Wan2.1-T2V-1.3B-Diffusers](https://www.modelscope.cn/models/Wan-AI/Wan2.1-T2V-1.3B-Diffusers)。 +* 模型在接入中做了修改,例如 [Qwen/Qwen-Image](https://www.modelscope.cn/models/Qwen/Qwen-Image) 的 Text Encoder 在 `diffsynth/models/qwen_image_text_encoder.py` 中增加了 `model.` 前缀。 +* 模型文件包含多个模型,例如 [Wan-AI/Wan2.1-VACE-14B](https://www.modelscope.cn/models/Wan-AI/Wan2.1-VACE-14B) 的 VACE Adapter 和基础 DiT 模型混合存储在同一组模型文件中。 + +在我们的开发理念中,我们希望尽可能尊重模型原作者的意愿。如果对模型文件进行重新封装,例如 [Comfy-Org/Qwen-Image_ComfyUI](https://www.modelscope.cn/models/Comfy-Org/Qwen-Image_ComfyUI),虽然我们可以更方便地调用模型,但流量(模型页面浏览量和下载量等)会被引向他处,模型的原作者也会失去删除模型的权力。因此,我们在框架中增加了 `diffsynth/utils/state_dict_converters` 这一模块,用于在模型加载过程中进行文件格式转换。 + +这部分逻辑是非常简单的,以 Qwen-Image 的 Text Encoder 为例,只需要 10 行代码即可: + +```python +def QwenImageTextEncoderStateDictConverter(state_dict): + state_dict_ = {} + for k in state_dict: + v = state_dict[k] + if k.startswith("visual."): + k = "model." + k + elif k.startswith("model."): + k = k.replace("model.", "model.language_model.") + state_dict_[k] = v + return state_dict_ +``` + +## Step 3: 编写模型 Config + +模型 Config 位于 `diffsynth/configs/model_configs.py`,用于识别模型类型并进行加载。需填入以下字段: + +* `model_hash`:模型文件哈希值,可通过 `hash_model_file` 函数获取,此哈希值仅与模型文件中 state dict 的 keys 和张量 shape 有关,与文件中的其他信息无关。 +* `model_name`: 模型名称,用于给 `Pipeline` 识别所需模型。如果不同结构的模型在 `Pipeline` 中发挥的作用相同,则可以使用相同的 `model_name`。在接入新模型时,只需保证 `model_name` 与现有的其他功能模型不同即可。在 `Pipeline` 的 `from_pretrained` 中通过 `model_name` 获取对应的模型。 +* `model_class`: 模型结构导入路径,指向在 Step 1 中实现的模型结构类,例如 `diffsynth.models.qwen_image_text_encoder.QwenImageTextEncoder`。 +* `state_dict_converter`: 可选参数,如需进行模型文件格式转换,则需填入模型转换逻辑的导入路径,例如 `diffsynth.utils.state_dict_converters.qwen_image_text_encoder.QwenImageTextEncoderStateDictConverter`。 +* `extra_kwargs`: 可选参数,如果模型初始化时需传入额外参数,则需要填入这些参数,例如模型 [DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Canny](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Canny) 与 [DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Inpaint](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Inpaint) 都采用了 `diffsynth/models/qwen_image_controlnet.py` 中的 `QwenImageBlockWiseControlNet` 结构,但后者还需额外的配置 `additional_in_dim=4`,因此这部分配置信息需填入 `extra_kwargs` 字段。 + +我们提供了一份代码,以便快速理解模型是如何通过这些配置信息加载的: + +```python +from diffsynth.core import hash_model_file, load_state_dict, skip_model_initialization +from diffsynth.models.qwen_image_text_encoder import QwenImageTextEncoder +from diffsynth.utils.state_dict_converters.qwen_image_text_encoder import QwenImageTextEncoderStateDictConverter +import torch + +model_hash = "8004730443f55db63092006dd9f7110e" +model_name = "qwen_image_text_encoder" +model_class = QwenImageTextEncoder +state_dict_converter = QwenImageTextEncoderStateDictConverter +extra_kwargs = {} + +model_path = [ + "models/Qwen/Qwen-Image/text_encoder/model-00001-of-00004.safetensors", + "models/Qwen/Qwen-Image/text_encoder/model-00002-of-00004.safetensors", + "models/Qwen/Qwen-Image/text_encoder/model-00003-of-00004.safetensors", + "models/Qwen/Qwen-Image/text_encoder/model-00004-of-00004.safetensors", +] +if hash_model_file(model_path) == model_hash: + with skip_model_initialization(): + model = model_class(**extra_kwargs) + state_dict = load_state_dict(model_path, torch_dtype=torch.bfloat16, device="cuda") + state_dict = state_dict_converter(state_dict) + model.load_state_dict(state_dict, assign=True) + print("Done!") +``` + +> Q: 上述代码的逻辑看起来很简单,为什么 `DiffSynth-Studio` 中的这部分代码极为复杂? +> +> A: 因为我们提供了激进的显存管理功能,与模型加载逻辑耦合,这导致框架结构的复杂性,我们已尽可能简化暴露给开发者的接口。 + +`diffsynth/configs/model_configs.py` 中的 `model_hash` 不是唯一存在的,同一模型文件中可能存在多个模型。对于这种情况,请使用多个模型 Config 分别加载每个模型,编写相应的 `state_dict_converter` 分离每个模型所需的参数。 + +## Step 4: 检验模型是否能被识别和加载 + +模型接入之后,可通过以下代码验证模型是否能够被正确识别和加载,以下代码会试图将模型加载到内存中: + +```python +from diffsynth.models.model_loader import ModelPool + +model_pool = ModelPool() +model_pool.auto_load_model( + [ + "models/Qwen/Qwen-Image/text_encoder/model-00001-of-00004.safetensors", + "models/Qwen/Qwen-Image/text_encoder/model-00002-of-00004.safetensors", + "models/Qwen/Qwen-Image/text_encoder/model-00003-of-00004.safetensors", + "models/Qwen/Qwen-Image/text_encoder/model-00004-of-00004.safetensors", + ], +) +``` + +如果模型能够被识别和加载,则会看到以下输出内容: + +``` +Loading models from: [ + "models/Qwen/Qwen-Image/text_encoder/model-00001-of-00004.safetensors", + "models/Qwen/Qwen-Image/text_encoder/model-00002-of-00004.safetensors", + "models/Qwen/Qwen-Image/text_encoder/model-00003-of-00004.safetensors", + "models/Qwen/Qwen-Image/text_encoder/model-00004-of-00004.safetensors" +] +Loaded model: { + "model_name": "qwen_image_text_encoder", + "model_class": "diffsynth.models.qwen_image_text_encoder.QwenImageTextEncoder", + "extra_kwargs": null +} +``` + +## Step 5: 编写模型显存管理方案 + +`DiffSynth-Studio` 支持复杂的显存管理,详见[启用显存管理](../Developer_Guide/Enabling_VRAM_management.md)。 diff --git a/docs/zh/Developer_Guide/Training_Diffusion_Models.md b/docs/zh/Developer_Guide/Training_Diffusion_Models.md new file mode 100644 index 0000000000000000000000000000000000000000..38399a903cff28634ef7990882656d38a2453236 --- /dev/null +++ b/docs/zh/Developer_Guide/Training_Diffusion_Models.md @@ -0,0 +1,66 @@ +# 接入模型训练 + +在[接入模型](../Developer_Guide/Integrating_Your_Model.md)并[实现 Pipeline](../Developer_Guide/Building_a_Pipeline.md)后,接下来接入模型训练功能。 + +## 训推一致的 Pipeline 改造 + +为了保证训练和推理过程严格的一致性,我们会在训练过程中沿用大部分推理代码,但仍需作出少量改造。 + +首先,在推理过程中添加额外的逻辑,让图生图/视频生视频逻辑根据 `scheduler` 状态进行切换。以 Qwen-Image 为例: + +```python +class QwenImageUnit_InputImageEmbedder(PipelineUnit): + def __init__(self): + super().__init__( + input_params=("input_image", "noise", "tiled", "tile_size", "tile_stride"), + output_params=("latents", "input_latents"), + onload_model_names=("vae",) + ) + + def process(self, pipe: QwenImagePipeline, input_image, noise, tiled, tile_size, tile_stride): + if input_image is None: + return {"latents": noise, "input_latents": None} + pipe.load_models_to_device(['vae']) + image = pipe.preprocess_image(input_image).to(device=pipe.device, dtype=pipe.torch_dtype) + input_latents = pipe.vae.encode(image, tiled=tiled, tile_size=tile_size, tile_stride=tile_stride) + if pipe.scheduler.training: + return {"latents": noise, "input_latents": input_latents} + else: + latents = pipe.scheduler.add_noise(input_latents, noise, timestep=pipe.scheduler.timesteps[0]) + return {"latents": latents, "input_latents": input_latents} +``` + +然后,在 `model_fn` 中启用 Gradient Checkpointing,这将以计算速度为代价,大幅度减少训练所需的显存。这并不是必需的,但我们强烈建议这么做。 + +以 Qwen-Image 为例,修改前: + +```python +text, image = block( + image=image, + text=text, + temb=conditioning, + image_rotary_emb=image_rotary_emb, + attention_mask=attention_mask, +) +``` + +修改后: + +```python +from ..core import gradient_checkpoint_forward + +text, image = gradient_checkpoint_forward( + block, + use_gradient_checkpointing, + use_gradient_checkpointing_offload, + image=image, + text=text, + temb=conditioning, + image_rotary_emb=image_rotary_emb, + attention_mask=attention_mask, +) +``` + +## 编写训练脚本 + +`DiffSynth-Studio` 没有对训练框架做严格的封装,而是将脚本内容暴露给开发者,这种方式可以更方便地对训练脚本进行修改,实现额外的功能。开发者可参考现有的训练脚本,例如 `examples/qwen_image/model_training/train.py` 进行修改,从而适配新的模型训练。 diff --git a/docs/zh/Diffusion_Templates/Introducing_Diffusion_Templates.md b/docs/zh/Diffusion_Templates/Introducing_Diffusion_Templates.md new file mode 100644 index 0000000000000000000000000000000000000000..3d2221514441f7bab7c32e67dbbe0c0dce6c1ca0 --- /dev/null +++ b/docs/zh/Diffusion_Templates/Introducing_Diffusion_Templates.md @@ -0,0 +1,76 @@ +# Diffusion Templates + +Diffusion Templates 是 DiffSynth-Studio 中的 Diffusion 模型可控生成插件框架,可以为基础模型提供额外的可控生成能力。 + +* 开源代码:[DiffSynth-Studio](https://github.com/modelscope/DiffSynth-Studio) +* 技术报告:[arXiv](https://arxiv.org/abs/2604.24351) +* 项目主页:[GitHub](https://modelscope.github.io/diffusion-templates-web/) +* 文档参考 + * Diffusion Templates 简介:[English Version](https://diffsynth-studio-doc.readthedocs.io/en/latest/Diffusion_Templates/Introducing_Diffusion_Templates.html)、[中文版](https://diffsynth-studio-doc.readthedocs.io/zh-cn/latest/Diffusion_Templates/Introducing_Diffusion_Templates.html) + * Diffusion Templates 架构详解:[English Version](https://diffsynth-studio-doc.readthedocs.io/en/latest/Diffusion_Templates/Understanding_Diffusion_Templates.html)、[中文版](https://diffsynth-studio-doc.readthedocs.io/zh-cn/latest/Diffusion_Templates/Understanding_Diffusion_Templates.html) + * Template 模型推理:[English Version](https://diffsynth-studio-doc.readthedocs.io/en/latest/Diffusion_Templates/Template_Model_Inference.html)、[中文版](https://diffsynth-studio-doc.readthedocs.io/zh-cn/latest/Diffusion_Templates/Template_Model_Inference.html) + * Template 模型训练:[English Version](https://diffsynth-studio-doc.readthedocs.io/en/latest/Diffusion_Templates/Template_Model_Training.html)、[中文版](https://diffsynth-studio-doc.readthedocs.io/zh-cn/latest/Diffusion_Templates/Template_Model_Training.html) +* 在线体验:[魔搭社区创空间](https://modelscope.cn/studios/DiffSynth-Studio/Diffusion-Templates) +* 模型集:[ModelScope](https://modelscope.cn/collections/DiffSynth-Studio/KleinBase4B-Templates)、[ModelScope 国际站](https://modelscope.ai/collections/DiffSynth-Studio/KleinBase4B-Templates)、[HuggingFace](https://huggingface.co/collections/DiffSynth-Studio/kleinbase4b-templates) + +|模型名称|ModelScope|ModelScope 国际站|HuggingFace|推理代码|低显存推理代码|训练代码|训练效果验证代码| +|-|-|-|-|-|-|-|-| +|结构控制|[link](https://modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-ControlNet)|[link](https://modelscope.ai/models/DiffSynth-Studio/Template-KleinBase4B-ControlNet)|[link](https://huggingface.co/DiffSynth-Studio/Template-KleinBase4B-ControlNet)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-ControlNet.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-ControlNet.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-ControlNet.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-ControlNet.py)| +|亮度调节|[link](https://modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Brightness)|[link](https://modelscope.ai/models/DiffSynth-Studio/Template-KleinBase4B-Brightness)|[link](https://huggingface.co/DiffSynth-Studio/Template-KleinBase4B-Brightness)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-Brightness.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-Brightness.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-Brightness.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-Brightness.py)| +|色彩调节|[link](https://modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-SoftRGB)|[link](https://modelscope.ai/models/DiffSynth-Studio/Template-KleinBase4B-SoftRGB)|[link](https://huggingface.co/DiffSynth-Studio/Template-KleinBase4B-SoftRGB)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-SoftRGB.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-SoftRGB.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-SoftRGB.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-SoftRGB.py)| +|图像编辑|[link](https://modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Edit)|[link](https://modelscope.ai/models/DiffSynth-Studio/Template-KleinBase4B-Edit)|[link](https://huggingface.co/DiffSynth-Studio/Template-KleinBase4B-Edit)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-Edit.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-Edit.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-Edit.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-Edit.py)| +|超分辨率|[link](https://modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Upscaler)|[link](https://modelscope.ai/models/DiffSynth-Studio/Template-KleinBase4B-Upscaler)|[link](https://huggingface.co/DiffSynth-Studio/Template-KleinBase4B-Upscaler)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-Upscaler.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-Upscaler.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-Upscaler.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-Upscaler.py)| +|锐利激发|[link](https://modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Sharpness)|[link](https://modelscope.ai/models/DiffSynth-Studio/Template-KleinBase4B-Sharpness)|[link](https://huggingface.co/DiffSynth-Studio/Template-KleinBase4B-Sharpness)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-Sharpness.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-Sharpness.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-Sharpness.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-Sharpness.py)| +|美学对齐|[link](https://modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Aesthetic)|[link](https://modelscope.ai/models/DiffSynth-Studio/Template-KleinBase4B-Aesthetic)|[link](https://huggingface.co/DiffSynth-Studio/Template-KleinBase4B-Aesthetic)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-Aesthetic.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-Aesthetic.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-Aesthetic.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-Aesthetic.py)| +|局部重绘|[link](https://modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Inpaint)|[link](https://modelscope.ai/models/DiffSynth-Studio/Template-KleinBase4B-Inpaint)|[link](https://huggingface.co/DiffSynth-Studio/Template-KleinBase4B-Inpaint)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-Inpaint.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-Inpaint.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-Inpaint.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-Inpaint.py)| +|内容参考|[link](https://modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-ContentRef)|[link](https://modelscope.ai/models/DiffSynth-Studio/Template-KleinBase4B-ContentRef)|[link](https://huggingface.co/DiffSynth-Studio/Template-KleinBase4B-ContentRef)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-ContentRef.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-ContentRef.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-ContentRef.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-ContentRef.py)| +|年龄控制|[link](https://modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Age)|[link](https://modelscope.ai/models/DiffSynth-Studio/Template-KleinBase4B-Age)|[link](https://huggingface.co/DiffSynth-Studio/Template-KleinBase4B-Age)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-Age.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-Age.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-Age.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-Age.py)| +|魔性熊猫(彩蛋模型)|[link](https://modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-PandaMeme)|[link](https://modelscope.ai/models/DiffSynth-Studio/Template-KleinBase4B-PandaMeme)|[link](https://huggingface.co/DiffSynth-Studio/Template-KleinBase4B-PandaMeme)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-PandaMeme.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-PandaMeme.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-PandaMeme.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-PandaMeme.py)| + +* 数据集:[ModelScope](https://modelscope.cn/collections/DiffSynth-Studio/ImagePulseV2)、[ModelScope 国际站](https://modelscope.cn/collections/DiffSynth-Studio/ImagePulseV2)、[HuggingFace](https://huggingface.co/collections/DiffSynth-Studio/imagepulsev2) + +|数据集名称|ModelScope|ModelScope 国际站|HuggingFace| +|-|-|-|-| +|文生图|[link](https://modelscope.cn/datasets/DiffSynth-Studio/ImagePulseV2-TextImage)|[link](https://modelscope.ai/datasets/DiffSynth-Studio/ImagePulseV2-TextImage)|[link](https://huggingface.co/datasets/DiffSynth-Studio/ImagePulseV2-TextImage)| +|局部重绘|[link](https://modelscope.cn/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Inpaint)|[link](https://modelscope.ai/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Inpaint)|[link](https://huggingface.co/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Inpaint)| +|背景替换|[link](https://modelscope.cn/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Background)|[link](https://modelscope.ai/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Background)|[link](https://huggingface.co/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Background)| +|服装替换|[link](https://modelscope.cn/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Clothes)|[link](https://modelscope.ai/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Clothes)|[link](https://huggingface.co/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Clothes)| +|姿态调整|[link](https://modelscope.cn/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Pose)|[link](https://modelscope.ai/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Pose)|[link](https://huggingface.co/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Pose)| +|前景修改|[link](https://modelscope.cn/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Change)|[link](https://modelscope.ai/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Change)|[link](https://huggingface.co/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Change)| +|局部增删|[link](https://modelscope.cn/datasets/DiffSynth-Studio/ImagePulseV2-Edit-AddRemove)|[link](https://modelscope.ai/datasets/DiffSynth-Studio/ImagePulseV2-Edit-AddRemove)|[link](https://huggingface.co/datasets/DiffSynth-Studio/ImagePulseV2-Edit-AddRemove)| +|超分辨率|[link](https://modelscope.cn/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Upscale)|[link](https://modelscope.ai/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Upscale)|[link](https://huggingface.co/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Upscale)| +|人物特写|[link](https://modelscope.cn/datasets/DiffSynth-Studio/ImagePulseV2-TextImage-Human)|[link](https://modelscope.ai/datasets/DiffSynth-Studio/ImagePulseV2-TextImage-Human)|[link](https://huggingface.co/datasets/DiffSynth-Studio/ImagePulseV2-TextImage-Human)| +|随机缩放|[link](https://modelscope.cn/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Crop)|[link](https://modelscope.ai/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Crop)|[link](https://huggingface.co/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Crop)| +|光照调整|[link](https://modelscope.cn/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Light)|[link](https://modelscope.ai/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Light)|[link](https://huggingface.co/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Light)| +|画面结构|[link](https://modelscope.cn/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Structure)|[link](https://modelscope.ai/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Structure)|[link](https://huggingface.co/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Structure)| +|表情编辑|[link](https://modelscope.cn/datasets/DiffSynth-Studio/ImagePulseV2-Edit-HumanFace)|[link](https://modelscope.ai/datasets/DiffSynth-Studio/ImagePulseV2-Edit-HumanFace)|[link](https://huggingface.co/datasets/DiffSynth-Studio/ImagePulseV2-Edit-HumanFace)| +|视角调整|[link](https://modelscope.cn/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Angle)|[link](https://modelscope.ai/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Angle)|[link](https://huggingface.co/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Angle)| +|风格迁移|[link](https://modelscope.cn/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Style)|[link](https://modelscope.ai/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Style)|[link](https://huggingface.co/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Style)| +|多分辨率|[link](https://modelscope.cn/datasets/DiffSynth-Studio/ImagePulseV2-TextImage-MultiResolution)|[link](https://modelscope.ai/datasets/DiffSynth-Studio/ImagePulseV2-TextImage-MultiResolution)|[link](https://huggingface.co/datasets/DiffSynth-Studio/ImagePulseV2-TextImage-MultiResolution)| +|多图合并|[link](https://modelscope.cn/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Merge)|[link](https://modelscope.ai/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Merge)|[link](https://huggingface.co/datasets/DiffSynth-Studio/ImagePulseV2-Edit-Merge)| + +## 模型效果一览 + +* 超分辨率 + 锐利激发:生成清晰度极高的图像 + +|低清晰度输入|高清晰度输出| +|-|-| +|![](https://github.com/user-attachments/assets/53f378f7-0dc5-44cd-bc39-032d0b1d0208)|![](https://github.com/user-attachments/assets/135bab89-6d76-4d5c-ae5e-44b2826b5c50)| + +* 结构控制 + 美学对齐 + 锐利激发:全副武装的 ControlNet + +|结构控制图|输出图| +|-|-| +|![](https://github.com/user-attachments/assets/1feeb13f-f8a7-40df-958c-90463ef5eaf4)|![](https://github.com/user-attachments/assets/ea406387-9695-4efd-b0cb-980686474ab7)| + +* 结构控制 + 图像编辑 + 色彩调节:随心所欲的艺术风格创作 + +|结构控制图|编辑输入图|输出图| +|-|-|-| +|![](https://github.com/user-attachments/assets/1feeb13f-f8a7-40df-958c-90463ef5eaf4)|![](https://github.com/user-attachments/assets/4866e14b-0ac7-4099-aab5-86048a645cb7)|![](https://github.com/user-attachments/assets/0fd613a5-885b-44b0-83db-9dd08859cc24)| + +* 亮度控制 + 图像编辑 + 局部重绘:让图中的部分元素跨越次元 + +|参考图|重绘区域|输出图| +|-|-|-| +|![](https://github.com/user-attachments/assets/4866e14b-0ac7-4099-aab5-86048a645cb7)|![](https://github.com/user-attachments/assets/52148a91-7c03-4042-944a-4c3182abe889)|![](https://github.com/user-attachments/assets/3e4cbc26-f6b5-4cc7-a017-d0e0165703ca)| diff --git a/docs/zh/Diffusion_Templates/Template_Model_Inference.md b/docs/zh/Diffusion_Templates/Template_Model_Inference.md new file mode 100644 index 0000000000000000000000000000000000000000..2b46d6fb4e552b40fd63bdb50fcd71dc2771f0b6 --- /dev/null +++ b/docs/zh/Diffusion_Templates/Template_Model_Inference.md @@ -0,0 +1,333 @@ +# Template 模型推理 + +## 在基础模型 Pipeline 上启用 Template 模型 + +我们以基础模型 [black-forest-labs/FLUX.2-klein-base-4B](https://modelscope.cn/models/black-forest-labs/FLUX.2-klein-base-4B) 为例,当仅使用基础模型生成图像时 + +```python +from diffsynth.diffusion.template import TemplatePipeline +from diffsynth.pipelines.flux2_image import Flux2ImagePipeline, ModelConfig +import torch + +# Load base model +pipe = Flux2ImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="black-forest-labs/FLUX.2-klein-4B", origin_file_pattern="text_encoder/*.safetensors"), + ModelConfig(model_id="black-forest-labs/FLUX.2-klein-base-4B", origin_file_pattern="transformer/*.safetensors"), + ModelConfig(model_id="black-forest-labs/FLUX.2-klein-4B", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + tokenizer_config=ModelConfig(model_id="black-forest-labs/FLUX.2-klein-4B", origin_file_pattern="tokenizer/"), +) +# Generate an image +image = pipe( + prompt="a cat", + seed=0, cfg_scale=4, + height=1024, width=1024, +) +image.save("image.png") +``` + +Template 模型 [DiffSynth-Studio/Template-KleinBase4B-Brightness](https://modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Brightness) 可以控制模型生成图像的亮度。通过 `TemplatePipeline` 模型,可从魔搭模型库加载(`ModelConfig(model_id="xxx/xxx")`)或从本地路径加载(`ModelConfig(path="xxx")`)。输入 scale=0.8 提高图像的亮度。注意在代码中,需将 `pipe` 的输入参数转移到 `template_pipeline` 中,并添加 `template_inputs`。 + +```python +# Load Template model +template_pipeline = TemplatePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="DiffSynth-Studio/Template-KleinBase4B-Brightness") + ], +) +# Generate an image +image = template_pipeline( + pipe, + prompt="a cat", + seed=0, cfg_scale=4, + height=1024, width=1024, + template_inputs=[{"scale": 0.8}], +) +image.save("image_0.8.png") +``` + +## Template 模型的 CFG 增强 + +Template 模型可以开启 CFG(Classifier-Free Guidance),使其控制效果更明显。例如模型 [DiffSynth-Studio/Template-KleinBase4B-Brightness](https://modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Brightness),在 `TemplatePipeline` 的输入参数中添加 `negative_template_inputs` 并将其 scale 设置为 0.5,模型就会对比两侧的差异,生成亮度变化更明显的图像。 + +```python +# Generate an image with CFG +image = template_pipeline( + pipe, + prompt="a cat", + seed=0, cfg_scale=4, + height=1024, width=1024, + template_inputs=[{"scale": 0.8}], + negative_template_inputs=[{"scale": 0.5}], +) +image.save("image_0.8_cfg.png") +``` + +## 低显存支持 + +Template 模型暂不支持主框架的显存管理,但可以使用惰性加载,仅在需要推理时加载对应的 Template 模型,这在启用多个 Template 模型时可以显著降低显存需求,显存占用峰值为单个 Template 模型的显存占用量。添加参数 `lazy_loading=True` 即可。 + +```python +template_pipeline = TemplatePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="DiffSynth-Studio/Template-KleinBase4B-Brightness") + ], + lazy_loading=True, +) +``` + +基础模型的 Pipeline 与 Template Pipeline 完全独立,可按需开启显存管理。 + +当 Template 模型输出的 Template Cache 包含 LoRA 时,需对基础模型的 Pipeline 开启显存管理或开启 LoRA 热加载(使用以下代码),否则会导致 LoRA 权重叠加。 + +```python +pipe.dit = pipe.enable_lora_hot_loading(pipe.dit) +``` + +## 启用多个 Template 模型 + +`TemplatePipeline` 可以加载多个 Template 模型,推理时在 `template_inputs` 中使用 `model_id` 区分每个 Template 模型的输入。 + +对基础模型 Pipeline 存管理,对 Template Pipeline 开启惰性加载后,你可以加载任意多个 Template 模型。 + +```python +from diffsynth.diffusion.template import TemplatePipeline +from diffsynth.pipelines.flux2_image import Flux2ImagePipeline, ModelConfig +from modelscope import dataset_snapshot_download +import torch +from PIL import Image + +vram_config = { + "offload_dtype": "disk", + "offload_device": "disk", + "onload_dtype": torch.bfloat16, + "onload_device": "cuda", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} +pipe = Flux2ImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="black-forest-labs/FLUX.2-klein-base-4B", origin_file_pattern="transformer/*.safetensors", **vram_config), + ModelConfig(model_id="black-forest-labs/FLUX.2-klein-4B", origin_file_pattern="text_encoder/*.safetensors", **vram_config), + ModelConfig(model_id="black-forest-labs/FLUX.2-klein-4B", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + tokenizer_config=ModelConfig(model_id="black-forest-labs/FLUX.2-klein-4B", origin_file_pattern="tokenizer/"), +) +pipe.dit = pipe.enable_lora_hot_loading(pipe.dit) +template = TemplatePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + lazy_loading=True, + model_configs=[ + ModelConfig(model_id="DiffSynth-Studio/Template-KleinBase4B-Brightness"), + ModelConfig(model_id="DiffSynth-Studio/Template-KleinBase4B-ControlNet"), + ModelConfig(model_id="DiffSynth-Studio/Template-KleinBase4B-Edit"), + ModelConfig(model_id="DiffSynth-Studio/Template-KleinBase4B-Upscaler"), + ModelConfig(model_id="DiffSynth-Studio/Template-KleinBase4B-SoftRGB"), + ModelConfig(model_id="DiffSynth-Studio/Template-KleinBase4B-Sharpness"), + ModelConfig(model_id="DiffSynth-Studio/Template-KleinBase4B-Inpaint"), + ModelConfig(model_id="DiffSynth-Studio/Template-KleinBase4B-Aesthetic"), + ModelConfig(model_id="DiffSynth-Studio/Template-KleinBase4B-ContentRef"), + ModelConfig(model_id="DiffSynth-Studio/Template-KleinBase4B-Age"), + ModelConfig(model_id="DiffSynth-Studio/Template-KleinBase4B-PandaMeme"), + ], +) +``` + +### 超分辨率 + 锐利激发 + +组合 [DiffSynth-Studio/Template-KleinBase4B-Upscaler](https://modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Upscaler) 和 [DiffSynth-Studio/Template-KleinBase4B-Sharpness](https://modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Sharpness),可以将模糊图片高清化,同时提高细节部分的清晰度。 + +```python +image = template( + pipe, + prompt="A cat is sitting on a stone.", + seed=0, cfg_scale=4, num_inference_steps=50, + template_inputs = [ + { + "model_id": 3, + "image": Image.open("data/examples/templates/image_lowres_100.jpg"), + "prompt": "A cat is sitting on a stone.", + }, + { + "model_id": 5, + "scale": 1, + }, + ], + negative_template_inputs = [ + { + "model_id": 3, + "image": Image.open("data/examples/templates/image_lowres_100.jpg"), + "prompt": "", + }, + { + "model_id": 5, + "scale": 0, + }, + ], +) +image.save("image_Upscaler_Sharpness.png") +``` + +|低清晰度输入|高清晰度输出| +|-|-| +|![](https://github.com/user-attachments/assets/53f378f7-0dc5-44cd-bc39-032d0b1d0208)|![](https://github.com/user-attachments/assets/135bab89-6d76-4d5c-ae5e-44b2826b5c50)| + +### 结构控制 + 美学对齐 + 锐利激发 + +[DiffSynth-Studio/Template-KleinBase4B-ControlNet](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-ControlNet) 负责控制构图,[DiffSynth-Studio/Template-KleinBase4B-Aesthetic](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Aesthetic) 负责填充细节,[DiffSynth-Studio/Template-KleinBase4B-Sharpness](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Sharpness) 负责保证清晰度,融合三个 Template 模型可以获得精美的画面。 + +```python +image = template( + pipe, + prompt="A cat is sitting on a stone, bathed in bright sunshine.", + seed=0, cfg_scale=4, num_inference_steps=50, + template_inputs = [ + { + "model_id": 1, + "image": Image.open("data/examples/templates/image_depth.jpg"), + "prompt": "A cat is sitting on a stone, bathed in bright sunshine.", + }, + { + "model_id": 7, + "lora_ids": list(range(1, 180, 2)), + "lora_scales": 2.0, + "merge_type": "mean", + }, + { + "model_id": 5, + "scale": 0.8, + }, + ], + negative_template_inputs = [ + { + "model_id": 1, + "image": Image.open("data/examples/templates/image_depth.jpg"), + "prompt": "", + }, + { + "model_id": 7, + "lora_ids": list(range(1, 180, 2)), + "lora_scales": 2.0, + "merge_type": "mean", + }, + { + "model_id": 5, + "scale": 0, + }, + ], +) +image.save("image_Controlnet_Aesthetic_Sharpness.png") +``` + +|结构控制图|输出图| +|-|-| +|![](https://github.com/user-attachments/assets/1feeb13f-f8a7-40df-958c-90463ef5eaf4)|![Image](https://github.com/user-attachments/assets/ea406387-9695-4efd-b0cb-980686474ab7)| + +### 结构控制 + 图像编辑 + 色彩调节 + +[DiffSynth-Studio/Template-KleinBase4B-ControlNet](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-ControlNet) 负责控制构图,[DiffSynth-Studio/Template-KleinBase4B-Edit](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Edit) 负责保留原图的毛发纹理等细节,[DiffSynth-Studio/Template-KleinBase4B-SoftRGB](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-SoftRGB) 负责控制画面色调,一副极具艺术感的画作被渲染出来。 + +```python +image = template( + pipe, + prompt="A cat is sitting on a stone. Colored ink painting.", + seed=0, cfg_scale=4, num_inference_steps=50, + template_inputs = [ + { + "model_id": 1, + "image": Image.open("data/examples/templates/image_depth.jpg"), + "prompt": "A cat is sitting on a stone. Colored ink painting.", + }, + { + "model_id": 2, + "image": Image.open("data/examples/templates/image_reference.jpg"), + "prompt": "Convert the image style to colored ink painting.", + }, + { + "model_id": 4, + "R": 0.9, + "G": 0.5, + "B": 0.3, + }, + ], + negative_template_inputs = [ + { + "model_id": 1, + "image": Image.open("data/examples/templates/image_depth.jpg"), + "prompt": "", + }, + { + "model_id": 2, + "image": Image.open("data/examples/templates/image_reference.jpg"), + "prompt": "", + }, + ], +) +image.save("image_Controlnet_Edit_SoftRGB.png") +``` + +|结构控制图|编辑输入图|输出图| +|-|-|-| +|![](https://github.com/user-attachments/assets/1feeb13f-f8a7-40df-958c-90463ef5eaf4)|![](https://github.com/user-attachments/assets/4866e14b-0ac7-4099-aab5-86048a645cb7)|![](https://github.com/user-attachments/assets/0fd613a5-885b-44b0-83db-9dd08859cc24)| + +### 亮度控制 + 图像编辑 + 局部重绘 + +[DiffSynth-Studio/Template-KleinBase4B-Brightness](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Brightness) 负责生成明亮的画面,[DiffSynth-Studio/Template-KleinBase4B-Edit](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Edit) 负责参考原图布局,[DiffSynth-Studio/Template-KleinBase4B-Inpaint](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Inpaint) 负责控制背景不变,生成跨越二次元的画面内容。 + +```python +image = template( + pipe, + prompt="A cat is sitting on a stone. Flat anime style.", + seed=0, cfg_scale=4, num_inference_steps=50, + template_inputs = [ + { + "model_id": 0, + "scale": 0.6, + }, + { + "model_id": 2, + "image": Image.open("data/examples/templates/image_reference.jpg"), + "prompt": "Convert the image style to flat anime style.", + }, + { + "model_id": 6, + "image": Image.open("data/examples/templates/image_reference.jpg"), + "mask": Image.open("data/examples/templates/image_mask_1.jpg"), + "force_inpaint": True, + }, + ], + negative_template_inputs = [ + { + "model_id": 0, + "scale": 0.5, + }, + { + "model_id": 2, + "image": Image.open("data/examples/templates/image_reference.jpg"), + "prompt": "", + }, + { + "model_id": 6, + "image": Image.open("data/examples/templates/image_reference.jpg"), + "mask": Image.open("data/examples/templates/image_mask_1.jpg"), + }, + ], +) +image.save("image_Brightness_Edit_Inpaint.png") +``` + +|参考图|重绘区域|输出图| +|-|-|-| +|![](https://github.com/user-attachments/assets/4866e14b-0ac7-4099-aab5-86048a645cb7)|![](https://github.com/user-attachments/assets/52148a91-7c03-4042-944a-4c3182abe889)|![](https://github.com/user-attachments/assets/3e4cbc26-f6b5-4cc7-a017-d0e0165703ca)| diff --git a/docs/zh/Diffusion_Templates/Template_Model_Training.md b/docs/zh/Diffusion_Templates/Template_Model_Training.md new file mode 100644 index 0000000000000000000000000000000000000000..3f3200b28b37bbd522b42e32e8cbc3413ba31508 --- /dev/null +++ b/docs/zh/Diffusion_Templates/Template_Model_Training.md @@ -0,0 +1,364 @@ +# Template 模型训练 + +DiffSynth-Studio 目前已为 [black-forest-labs/FLUX.2-klein-base-4B](https://www.modelscope.cn/models/black-forest-labs/FLUX.2-klein-base-4B) 提供了全面的 Templates 训练支持,更多模型的适配敬请期待。 + +## 基于预训练 Template 模型继续训练 + +如需基于我们预训练好的模型进行继续训练,请参考[FLUX.2](../Model_Details/FLUX2.md#模型总览) 中的表格,找到对应的训练脚本。 + +## 构建新的 Template 模型 + +### Template 模型组件格式 + +一个 Template 模型与一个模型库(或一个本地文件夹)绑定,模型库中有代码文件 `model.py` 作为唯一入口。`model.py` 的模板如下: + +```python +import torch + +class CustomizedTemplateModel(torch.nn.Module): + def __init__(self): + super().__init__() + + @torch.no_grad() + def process_inputs(self, xxx, **kwargs): + yyy = xxx + return {"yyy": yyy} + + def forward(self, yyy, **kwargs): + zzz = yyy + return {"zzz": zzz} + +class DataProcessor: + def __call__(self, www, **kwargs): + xxx = www + return {"xxx": xxx} + +TEMPLATE_MODEL = CustomizedTemplateModel +TEMPLATE_MODEL_PATH = "model.safetensors" +TEMPLATE_DATA_PROCESSOR = DataProcessor +``` + +在 Template 模型推理时,Template Input 先后经过 `TEMPLATE_MODEL` 的 `process_inputs` 和 `forward` 得到 Template Cache。 + +```mermaid +flowchart LR; + i@{shape: text, label: "Template Input"}-->p[process_inputs]; + subgraph TEMPLATE_MODEL + p[process_inputs]-->f[forward] + end + f[forward]-->c@{shape: text, label: "Template Cache"}; +``` + +在 Template 模型训练时,Template Input 不再是用户的输入,而是从数据集中获取,由 `TEMPLATE_DATA_PROCESSOR` 进行计算得到。 + +```mermaid +flowchart LR; + d@{shape: text, label: "Dataset"}-->dp[TEMPLATE_DATA_PROCESSOR]-->p[process_inputs]; + subgraph TEMPLATE_MODEL + p[process_inputs]-->f[forward] + end + f[forward]-->c@{shape: text, label: "Template Cache"}; +``` + +#### `TEMPLATE_MODEL` + +`TEMPLATE_MODEL` 是 Template 模型的代码实现,需继承 `torch.nn.Module`,并编写 `process_inputs` 与 `forward` 两个函数。`process_inputs` 与 `forward` 构成完整的 Template 模型推理过程,我们将其拆分为两部分,是为了在训练中更容易适配[两阶段拆分训练](https://diffsynth-studio-doc.readthedocs.io/zh-cn/latest/Training/Split_Training.html)。 + +* `process_inputs` 需带有装饰器 `@torch.no_grad()`,进行不包含梯度的计算 +* `forward` 需包含训练模型所需的全部梯度计算过程,其输入与 `process_inputs` 的输出相同 + +`process_inputs` 与 `forward` 需包含 `**kwargs`,保证兼容性,此外,我们提供了以下预留的参数 + +* 如需在 `process_inputs` 与 `forward` 中和基础模型 Pipeline 进行交互,例如调用基础模型 Pipeline 中的文本编码器进行计算,可在 `process_inputs` 与 `forward` 的输入参数中增加字段 `pipe` +* 如需在训练中启用 Gradient Checkpointing,可在 `forward` 的输入参数中增加字段 `use_gradient_checkpointing` 与 `use_gradient_checkpointing_offload` +* 多个 Template 模型需通过 `model_id` 区分 Template Inputs,请不要在 `process_inputs` 与 `forward` 的输入参数中使用这个字段 + +#### `TEMPLATE_MODEL_PATH`(可选项) + +`TEMPLATE_MODEL_PATH` 是模型预训练权重文件的相对路径,例如 + +```python +TEMPLATE_MODEL_PATH = "model.safetensors" +``` + +如需从多个模型文件中加载,可使用列表 + +```python +TEMPLATE_MODEL_PATH = [ + "model-00001-of-00003.safetensors", + "model-00002-of-00003.safetensors", + "model-00003-of-00003.safetensors", +] +``` + +如果需要随机初始化模型参数(模型还未训练),或不需要初始化模型参数,可将其设置为 `None`,或不设置 + +```python +TEMPLATE_MODEL_PATH = None +``` + +#### `TEMPLATE_DATA_PROCESSOR`(可选项) + +如需使用 DiffSynth-Studio 训练 Template 模型,则需构建训练数据集,数据集中的 `metadata.json` 包含 `template_inputs` 字段。`metadata.json` 中的 `template_inputs` 并不是直接输入给 Template 模型 `process_inputs` 的参数,而是提供给 `TEMPLATE_DATA_PROCESSOR` 的输入参数,由 `TEMPLATE_DATA_PROCESSOR` 计算出输入给 Template 模型 `process_inputs` 的参数。 + +例如,[DiffSynth-Studio/Template-KleinBase4B-Brightness](https://modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Brightness) 这一亮度控制模型的输入参数是 `scale`,即图像的亮度数值。`scale` 可以直接写在 `metadata.json` 中,此时 `TEMPLATE_DATA_PROCESSOR` 只需要传递参数: + +```json +[ + { + "image": "images/image_1.jpg", + "prompt": "a cat", + "template_inputs": {"scale": 0.2} + }, + { + "image": "images/image_2.jpg", + "prompt": "a dog", + "template_inputs": {"scale": 0.6} + } +] +``` + +```python +class DataProcessor: + def __call__(self, scale, **kwargs): + return {"scale": scale} + +TEMPLATE_DATA_PROCESSOR = DataProcessor +``` + +也可在 `metadata.json` 中填写图像路径,直接在训练过程中计算 `scale`。 + +```json +[ + { + "image": "images/image_1.jpg", + "prompt": "a cat", + "template_inputs": {"image": "/path/to/your/dataset/images/image_1.jpg"} + }, + { + "image": "images/image_2.jpg", + "prompt": "a dog", + "template_inputs": {"image": "/path/to/your/dataset/images/image_1.jpg"} + } +] +``` + +```python +class DataProcessor: + def __call__(self, image, **kwargs): + image = Image.open(image) + image = np.array(image) + return {"scale": image.astype(np.float32).mean() / 255} + +TEMPLATE_DATA_PROCESSOR = DataProcessor +``` + +### 训练 Template 模型 + +Template 模型“可训练”的充分条件是:Template Cache 中的变量计算与基础模型 Pipeline 完全解耦,这些变量在推理过程中输入给基础模型 Pipeline 后,不会参与任何 Pipeline Unit 的计算,直达 `model_fn`。 + +如果 Template 模型是“可训练”的,那么可以使用 DiffSynth-Studio 进行训练,以基础模型 [black-forest-labs/FLUX.2-klein-base-4B](https://www.modelscope.cn/models/black-forest-labs/FLUX.2-klein-base-4B) 为例,在训练脚本中,填写字段: + +* `--extra_inputs`:额外输入,训练文生图模型的 Template 模型时只需填 `template_inputs`,训练图像编辑模型的 Template 模型时需填 `edit_image,template_inputs` +* `--template_model_id_or_path`:Template 模型的魔搭模型 ID 或本地路径,框架会优先匹配本地路径,若本地路径不存在则从魔搭模型库中下载该模型,填写模型 ID 时,以“:”结尾,例如 `"DiffSynth-Studio/Template-KleinBase4B-Brightness:"` +* `--remove_prefix_in_ckpt`:保存模型文件时,移除的 state dict 变量名前缀,填 `"pipe.template_model."` 即可 +* `--trainable_models`:可训练模型,填写 `template_model` 即可,若只需训练其中的某个组件,则需填写 `template_model.xxx,template_model.yyy`,以逗号分隔 + +以下是一个样例训练脚本,它会自动下载一个样例数据集,随机初始化模型权重后开始训练亮度控制模型: + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "flux2/Template-KleinBase4B-Brightness/*" --local_dir ./data/diffsynth_example_dataset + +accelerate launch examples/flux2/model_training/train.py \ + --dataset_base_path data/diffsynth_example_dataset/flux2/Template-KleinBase4B-Brightness \ + --dataset_metadata_path data/diffsynth_example_dataset/flux2/Template-KleinBase4B-Brightness/metadata.jsonl \ + --extra_inputs "template_inputs" \ + --max_pixels 1048576 \ + --dataset_repeat 50 \ + --model_id_with_origin_paths "black-forest-labs/FLUX.2-klein-4B:text_encoder/*.safetensors,black-forest-labs/FLUX.2-klein-base-4B:transformer/*.safetensors,black-forest-labs/FLUX.2-klein-4B:vae/diffusion_pytorch_model.safetensors" \ + --template_model_id_or_path "examples/flux2/model_training/scripts/brightness" \ + --tokenizer_path "black-forest-labs/FLUX.2-klein-4B:tokenizer/" \ + --learning_rate 1e-4 \ + --num_epochs 2 \ + --remove_prefix_in_ckpt "pipe.template_model." \ + --output_path "./models/train/Template-KleinBase4B-Brightness_example" \ + --trainable_models "template_model" \ + --use_gradient_checkpointing \ + --find_unused_parameters +``` + +### 与基础模型 Pipeline 组件交互 + +Diffusion Template 框架允许 Template 模型与基础模型 Pipeline 进行交互。例如,你可能需要使用基础模型 Pipeline 中的 text encoder 对文本进行编码,此时在 `process_inputs` 和 `forward` 中使用预留字段 `pipe` 即可。 + +```python +import torch + +class CustomizedTemplateModel(torch.nn.Module): + def __init__(self): + super().__init__() + self.xxx = xxx() + + @torch.no_grad() + def process_inputs(self, text, pipe, **kwargs): + input_ids = pipe.tokenizer(text) + text_emb = pipe.text_encoder(text_emb) + return {"text_emb": text_emb} + + def forward(self, text_emb, pipe, **kwargs): + kv_cache = self.xxx(text_emb) + return {"kv_cache": kv_cache} + +TEMPLATE_MODEL = CustomizedTemplateModel +``` + +### 使用非训练的模型组件 + +在设计 Template 模型时,如果需要使用预训练的模型且不希望在训练过程中更新这部分参数,例如 + +```python +import torch + +class CustomizedTemplateModel(torch.nn.Module): + def __init__(self): + super().__init__() + self.image_encoder = XXXEncoder.from_pretrained(xxx) + self.mlp = MLP() + + @torch.no_grad() + def process_inputs(self, image, **kwargs): + emb = self.image_encoder(image) + return {"emb": emb} + + def forward(self, emb, **kwargs): + kv_cache = self.mlp(emb) + return {"kv_cache": kv_cache} + +TEMPLATE_MODEL = CustomizedTemplateModel +``` + +此时需在训练命令中通过参数 `--trainable_models template_model.mlp` 设置为仅训练 `mlp` 部分。 + +### 在低显存的设备上训练 + +框架支持将 Template 模型的训练拆分为两阶段,第一阶段进行无梯度计算,第二阶段进行梯度更新,更多信息请参考文档:[两阶段拆分训练](https://diffsynth-studio-doc.readthedocs.io/zh-cn/latest/Training/Split_Training.html),以下是样例脚本: + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "flux2/Template-KleinBase4B-Brightness/*" --local_dir ./data/diffsynth_example_dataset + +accelerate launch examples/flux2/model_training/train.py \ + --dataset_base_path data/diffsynth_example_dataset/flux2/Template-KleinBase4B-Brightness \ + --dataset_metadata_path data/diffsynth_example_dataset/flux2/Template-KleinBase4B-Brightness/metadata.jsonl \ + --extra_inputs "template_inputs" \ + --max_pixels 1048576 \ + --dataset_repeat 1 \ + --model_id_with_origin_paths "black-forest-labs/FLUX.2-klein-4B:text_encoder/*.safetensors,black-forest-labs/FLUX.2-klein-4B:vae/diffusion_pytorch_model.safetensors" \ + --template_model_id_or_path "DiffSynth-Studio/Template-KleinBase4B-Brightness:" \ + --tokenizer_path "black-forest-labs/FLUX.2-klein-4B:tokenizer/" \ + --learning_rate 1e-4 \ + --num_epochs 2 \ + --remove_prefix_in_ckpt "pipe.template_model." \ + --output_path "./models/train/Template-KleinBase4B-Brightness_full_cache" \ + --trainable_models "template_model" \ + --use_gradient_checkpointing \ + --find_unused_parameters \ + --task "sft:data_process" + +accelerate launch examples/flux2/model_training/train.py \ + --dataset_base_path "./models/train/Template-KleinBase4B-Brightness_full_cache" \ + --extra_inputs "template_inputs" \ + --max_pixels 1048576 \ + --dataset_repeat 50 \ + --model_id_with_origin_paths "black-forest-labs/FLUX.2-klein-base-4B:transformer/*.safetensors" \ + --template_model_id_or_path "DiffSynth-Studio/Template-KleinBase4B-Brightness:" \ + --tokenizer_path "black-forest-labs/FLUX.2-klein-4B:tokenizer/" \ + --learning_rate 1e-4 \ + --num_epochs 2 \ + --remove_prefix_in_ckpt "pipe.template_model." \ + --output_path "./models/train/Template-KleinBase4B-Brightness_full" \ + --trainable_models "template_model" \ + --use_gradient_checkpointing \ + --find_unused_parameters \ + --task "sft:train" +``` + +两阶段拆分训练可以降低显存需求,提高训练速度,训练过程是无损精度的,但需要较大硬盘空间用于存储 Cache 文件。 + +如需进一步减少显存需求,可开启 fp8 精度,在两阶段训练中添加参数 `--fp8_models "black-forest-labs/FLUX.2-klein-4B:text_encoder/*.safetensors,black-forest-labs/FLUX.2-klein-4B:vae/diffusion_pytorch_model.safetensors"` 和 `--fp8_models "black-forest-labs/FLUX.2-klein-base-4B:transformer/*.safetensors"` 即可,fp8 精度只能在非训练模型组件上启用,且存在少量误差。 + +### 上传 Template 模型 + +完成训练后,按照以下步骤可上传 Template 模型到魔搭社区,供更多人下载使用。 + +Step 1:在 `model.py` 中填入训练好的模型文件名,例如 + +```python +TEMPLATE_MODEL_PATH = "model.safetensors" +``` + +Step 2:使用以下命令上传 `model.py`,其中 `--token ms-xxx` 在 https://modelscope.cn/my/access/token 获取 + +```shell +modelscope upload user_name/your_model_id /path/to/your/model.py model.py --token ms-xxx +``` + +Step 3:确认模型文件 + +确认要上传的模型文件,例如 `epoch-1.safetensors`、`step-2000.safetensors`。 + +注意,DiffSynth-Studio 保存的模型文件中只包含可训练的参数,如果模型中包括非训练参数,则需要重新将非训练的模型参数打包才能进行推理,你可以通过以下代码进行打包: + +```python +from diffsynth.diffusion.template import load_template_model, load_state_dict +from safetensors.torch import save_file +import torch + +model = load_template_model("path/to/your/template/model", torch_dtype=torch.bfloat16, device="cpu") +state_dict = load_state_dict("path/to/your/ckpt/epoch-1.safetensors", torch_dtype=torch.bfloat16, device="cpu") +state_dict.update(model.state_dict()) +save_file(state_dict, "model.safetensors") +``` + +Step 4:上传模型文件 + +```shell +modelscope upload user_name/your_model_id /path/to/your/model/epoch-1.safetensors model.safetensors --token ms-xxx +``` + +Step 5:验证模型推理效果 + +```python +from diffsynth.diffusion.template import TemplatePipeline +from diffsynth.pipelines.flux2_image import Flux2ImagePipeline, ModelConfig +import torch + +# Load base model +pipe = Flux2ImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="black-forest-labs/FLUX.2-klein-4B", origin_file_pattern="text_encoder/*.safetensors"), + ModelConfig(model_id="black-forest-labs/FLUX.2-klein-base-4B", origin_file_pattern="transformer/*.safetensors"), + ModelConfig(model_id="black-forest-labs/FLUX.2-klein-4B", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + tokenizer_config=ModelConfig(model_id="black-forest-labs/FLUX.2-klein-4B", origin_file_pattern="tokenizer/"), +) +# Load Template model +template_pipeline = TemplatePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="user_name/your_model_id") + ], +) +# Generate an image +image = template_pipeline( + pipe, + prompt="a cat", + seed=0, cfg_scale=4, + height=1024, width=1024, + template_inputs=[{xxx}], +) +image.save("image.png") +``` + diff --git a/docs/zh/Diffusion_Templates/Understanding_Diffusion_Templates.md b/docs/zh/Diffusion_Templates/Understanding_Diffusion_Templates.md new file mode 100644 index 0000000000000000000000000000000000000000..183a338058e08eae4a840fe453326907582edd9f --- /dev/null +++ b/docs/zh/Diffusion_Templates/Understanding_Diffusion_Templates.md @@ -0,0 +1,61 @@ +# Diffusion Templates 架构详解 + +## 框架结构 + +Diffusion Templates 框架的结构如下图所示: + +```mermaid +flowchart TD; + subgraph Template Pipeline + si@{shape: text, label: "Template Input"}-->i1@{shape: text, label: "Template Input 1"}; + si@{shape: text, label: "Template Input"}-->i2@{shape: text, label: "Template Input 2"}; + si@{shape: text, label: "Template Input"}-->i3@{shape: text, label: "Template Input 3"}; + i1@{shape: text, label: "Template Input 1"}-->m1[Template Model 1]-->c1@{shape: text, label: "Template Cache 1"}; + i2@{shape: text, label: "Template Input 2"}-->m2[Template Model 2]-->c2@{shape: text, label: "Template Cache 2"}; + i3@{shape: text, label: "Template Input 3"}-->m3[Template Model 3]-->c3@{shape: text, label: "Template Cache 3"}; + c1-->c@{shape: text, label: "Template Cache"}; + c2-->c; + c3-->c; + end + i@{shape: text, label: "Model Input"}-->m[Diffusion Pipeline]-->o@{shape: text, label: "Model Output"}; + c-->m; +``` + +框架包含以下模块设计: + +* Template Input: Template 模型的输入。其格式为 Python 字典,其中的字段由每个 Template 模型自身决定,例如 `{"scale": 0.8}` +* Template Model: Template 模型,可从魔搭模型库加载(`ModelConfig(model_id="xxx/xxx")`)或从本地路径加载(`ModelConfig(path="xxx")`) +* Template Cache: Template 模型的输出。其格式为 Python 字典,其中的字段仅支持对应基础模型 Pipeline 中的输入参数字段。 +* Template Pipeline: 用于调度多个 Template 模型的模块。该模块负责加载 Template 模型、整合多个 Template 模型的输出 + +当 Diffusion Templates 框架未启用时,基础模型组件(包括 Text Encoder、DiT、VAE 等)被加载到 Diffusion Pipeline 中,输入 Model Input(包括 prompt、height、width 等),输出 Model Output(例如图像)。 + +当 Diffusion Templates 框架启用后,若干个 Template 模型被加载到 Template Pipeline 中,Template Pipeline 输出 Template Cache(Diffusion Pipeline 输入参数的子集),并交由 Diffusion Pipeline 进行后续的进一步处理。Template Pipeline 通过接管一部分 Diffusion Pipeline 的输入参数来实现可控生成。 + +## 模型能力媒介 + +注意到,Template Cache 的格式被定义为 Diffusion Pipeline 输入参数的子集,这是框架通用性设计的基本保证,我们限制 Template 模型的输入只能是 Diffusion Pipeline 的输入参数。因此,我们需要为 Diffusion Pipeline 设计额外的输入参数作为模型能力媒介。其中,KV-Cache 是非常适合 Diffusion 的模型能力媒介 + +* 技术路线已经在 LLM Skills 上得到了验证,LLM 中输入的提示词也会被潜在地转化为 KV-Cache +* KV-Cache 具有 Diffusion 模型的“高权限”,在生图模型上能够直接影响甚至完全控制生图结果,这保证 Diffusion Template 模型具备足够高的能力上限 +* KV-Cache 可以直接在序列层面拼接,让多个 Template 模型同时生效 +* KV-Cache 在框架层面的开发量少,增加一个 Pipeline 的输入参数并穿透到模型内部即可,可以快速适配新的 Diffusion 基础模型 + +另外,还有以下媒介也可以用于 Template: + +* Residual:残差,在 ControlNet 中使用较多,适合做点对点的控制,和 KVCache 相比缺点是不能支持任意分辨率以及多个 Residual 融合时可能冲突 +* LoRA:不要把它当成模型的一部分,而是把它当成模型的输入参数,LoRA 本质上是一系列张量,也可以作为模型能力的媒介 + +**目前,我们仅在 FLUX.2 的 Pipeline 上提供了 KV-Cache 和 LoRA 作为 Template Cache 的支持,后续会考虑支持更多模型和更多模型能力媒介。** + +## Template 模型格式 + +一个 Template 模型的格式为: + +``` +Template_Model +├── model.py +└── model.safetensors +``` + +其中,`model.py` 是模型的入口,`model.safetensors` 是 Template 模型的权重文件。关于如何构建 Template 模型,请参考文档 [Template 模型训练](Template_Model_Training.md),或参考[现有的 Template 模型](https://modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Brightness)。 diff --git a/docs/zh/Makefile b/docs/zh/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..41c270bb329da10ec93643ce0524634cfa40331d --- /dev/null +++ b/docs/zh/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/docs/zh/Model_Details/ACE-Step.md b/docs/zh/Model_Details/ACE-Step.md new file mode 100644 index 0000000000000000000000000000000000000000..8f542dc1a92048de381e2d8bf78bd84688a5c961 --- /dev/null +++ b/docs/zh/Model_Details/ACE-Step.md @@ -0,0 +1,166 @@ +# ACE-Step + +ACE-Step 1.5 是一个开源音乐生成模型,基于 DiT 架构,支持文生音乐、音频翻唱、局部重绘等多种功能,可在消费级硬件上高效运行。 + +## 安装 + +在使用本项目进行模型推理和训练前,请先安装 DiffSynth-Studio。 + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +更多关于安装的信息,请参考[安装依赖](../Pipeline_Usage/Setup.md)。 + +## 快速开始 + +运行以下代码可以快速加载 [ACE-Step/Ace-Step1.5](https://www.modelscope.cn/models/ACE-Step/Ace-Step1.5) 模型并进行推理。显存管理已启动,框架会自动根据剩余显存控制模型参数的加载,最低 3G 显存即可运行。 + +```python +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio +import torch + + +vram_config = { + "offload_dtype": torch.bfloat16, + "offload_device": "cpu", + "onload_dtype": torch.bfloat16, + "onload_device": "cpu", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} + + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="acestep-v15-turbo/model.safetensors", **vram_config), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors", **vram_config), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors", **vram_config), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' +audio = pipe( + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=42, +) + +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-turbo.wav") +``` + +## 模型总览 + +|模型 ID|推理|低显存推理|全量训练|全量训练后验证|LoRA 训练|LoRA 训练后验证| +|-|-|-|-|-|-|-| +|[ACE-Step/Ace-Step1.5](https://www.modelscope.cn/models/ACE-Step/Ace-Step1.5)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference/Ace-Step1.5.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference_low_vram/Ace-Step1.5.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/full/Ace-Step1.5.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/validate_full/Ace-Step1.5.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/lora/Ace-Step1.5.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/validate_lora/Ace-Step1.5.py)| +|[ACE-Step/acestep-v15-turbo-shift1](https://www.modelscope.cn/models/ACE-Step/acestep-v15-turbo-shift1)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference/acestep-v15-turbo-shift1.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference_low_vram/acestep-v15-turbo-shift1.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/full/acestep-v15-turbo-shift1.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/validate_full/acestep-v15-turbo-shift1.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/lora/acestep-v15-turbo-shift1.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/validate_lora/acestep-v15-turbo-shift1.py)| +|[ACE-Step/acestep-v15-turbo-shift3](https://www.modelscope.cn/models/ACE-Step/acestep-v15-turbo-shift3)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference/acestep-v15-turbo-shift3.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference_low_vram/acestep-v15-turbo-shift3.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/full/acestep-v15-turbo-shift3.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/validate_full/acestep-v15-turbo-shift3.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/lora/acestep-v15-turbo-shift3.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/validate_lora/acestep-v15-turbo-shift3.py)| +|[ACE-Step/acestep-v15-turbo-continuous](https://www.modelscope.cn/models/ACE-Step/acestep-v15-turbo-continuous)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference/acestep-v15-turbo-continuous.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference_low_vram/acestep-v15-turbo-continuous.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/full/acestep-v15-turbo-continuous.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/validate_full/acestep-v15-turbo-continuous.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/lora/acestep-v15-turbo-continuous.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/validate_lora/acestep-v15-turbo-continuous.py)| +|[ACE-Step/acestep-v15-base](https://www.modelscope.cn/models/ACE-Step/acestep-v15-base)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference/acestep-v15-base.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference_low_vram/acestep-v15-base.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/full/acestep-v15-base.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/validate_full/acestep-v15-base.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/lora/acestep-v15-base.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/validate_lora/acestep-v15-base.py)| +|[ACE-Step/acestep-v15-base: CoverTask](https://www.modelscope.cn/models/ACE-Step/acestep-v15-base)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference/acestep-v15-base-CoverTask.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference_low_vram/acestep-v15-base-CoverTask.py)|—|—|—|—| +|[ACE-Step/acestep-v15-base: RepaintTask](https://www.modelscope.cn/models/ACE-Step/acestep-v15-base)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference/acestep-v15-base-RepaintTask.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference_low_vram/acestep-v15-base-RepaintTask.py)|—|—|—|—| +|[ACE-Step/acestep-v15-sft](https://www.modelscope.cn/models/ACE-Step/acestep-v15-sft)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference/acestep-v15-sft.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference_low_vram/acestep-v15-sft.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/full/acestep-v15-sft.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/validate_full/acestep-v15-sft.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/lora/acestep-v15-sft.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/validate_lora/acestep-v15-sft.py)| +|[ACE-Step/acestep-v15-xl-base](https://www.modelscope.cn/models/ACE-Step/acestep-v15-xl-base)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference/acestep-v15-xl-base.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference_low_vram/acestep-v15-xl-base.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/full/acestep-v15-xl-base.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/validate_full/acestep-v15-xl-base.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/lora/acestep-v15-xl-base.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/validate_lora/acestep-v15-xl-base.py)| +|[ACE-Step/acestep-v15-xl-sft](https://www.modelscope.cn/models/ACE-Step/acestep-v15-xl-sft)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference/acestep-v15-xl-sft.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference_low_vram/acestep-v15-xl-sft.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/full/acestep-v15-xl-sft.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/validate_full/acestep-v15-xl-sft.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/lora/acestep-v15-xl-sft.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/validate_lora/acestep-v15-xl-sft.py)| +|[ACE-Step/acestep-v15-xl-turbo](https://www.modelscope.cn/models/ACE-Step/acestep-v15-xl-turbo)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference/acestep-v15-xl-turbo.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference_low_vram/acestep-v15-xl-turbo.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/full/acestep-v15-xl-turbo.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/validate_full/acestep-v15-xl-turbo.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/lora/acestep-v15-xl-turbo.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/validate_lora/acestep-v15-xl-turbo.py)| +|[DiffSynth-Studio/acestep15xlsft-lora-music](https://www.modelscope.cn/models/DiffSynth-Studio/acestep15xlsft-lora-music)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference/acestep15xlsft-vocals2music.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_inference_low_vram/acestep15xlsft-vocals2music.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/full/acestep15xlsft-vocals2music.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ace_step/model_training/validate_full/acestep15xlsft-vocals2music.py)|-|-| + +## 模型推理 + +模型通过 `AceStepPipeline.from_pretrained` 加载,详见[加载模型](../Pipeline_Usage/Model_Inference.md#加载模型)。 + +`AceStepPipeline` 推理的输入参数包括: + +* `prompt`: 音乐文本描述。 +* `cfg_scale`: 分类器无条件引导比例,默认为 1.0。 +* `lyrics`: 歌词文本。 +* `task_type`: 任务类型,可选值包括 `"text2music"`(文生音乐)、`"cover"`(音频翻唱)、`"repaint"`(局部重绘),默认为 `"text2music"`。 +* `reference_audios`: 参考音频列表(Tensor 列表),用于提供音色参考。 +* `src_audio`: 源音频(Tensor),用于 cover 或 repaint 任务。 +* `denoising_strength`: 降噪强度,控制输出受源音频的影响程度,默认为 1.0。 +* `audio_cover_strength`: 音频翻唱步数比例,控制 cover 任务中前多少步使用翻唱条件,默认为 1.0。 +* `audio_code_string`: 输入音频码字符串,用于 cover 任务中直接传入离散音频码。 +* `repainting_ranges`: 重绘时间区间(浮点元组列表,单位为秒),用于 repaint 任务。 +* `repainting_strength`: 重绘强度,控制重绘区域的变化程度,默认为 1.0。 +* `duration`: 音频时长(秒),默认为 60。 +* `bpm`: 每分钟节拍数,默认为 100。 +* `keyscale`: 音阶调式,默认为 "B minor"。 +* `timesignature`: 拍号,默认为 "4"。 +* `vocal_language`: 演唱语言,默认为 "unknown"。 +* `seed`: 随机种子。 +* `rand_device`: 噪声生成设备,默认为 "cpu"。 +* `num_inference_steps`: 推理步数,默认为 8。 +* `shift`: 调度器时间偏移参数,默认为 3.0。 + +## 模型训练 + +ace_step 系列模型统一通过 `examples/ace_step/model_training/train.py` 进行训练,脚本的参数包括: + +* 通用训练参数 + * 数据集基础配置 + * `--dataset_base_path`: 数据集的根目录。 + * `--dataset_metadata_path`: 数据集的元数据文件路径。 + * `--dataset_repeat`: 每个 epoch 中数据集重复的次数。 + * `--dataset_num_workers`: 每个 Dataloader 的进程数量。 + * `--data_file_keys`: 元数据中需要加载的字段名称,通常是图像或视频文件的路径,以 `,` 分隔。 + * 模型加载配置 + * `--model_paths`: 要加载的模型路径。JSON 格式。 + * `--model_id_with_origin_paths`: 带原始路径的模型 ID。用逗号分隔。 + * `--extra_inputs`: 模型 Pipeline 所需的额外输入参数,以 `,` 分隔。 + * `--fp8_models`: 以 FP8 格式加载的模型,目前仅支持参数不被梯度更新的模型。 + * `--quant_options`:对加载的模型进行动态量化。以 `;` 分隔多个条目,每个为 `<模型字符串>:[/]`,`<模型字符串>` 需与 `--model_paths`/`--model_id_with_origin_paths` 中的一致,`method` 为已注册的量化方法(如 `bitsandbytes_nf4`),`exclude_modules` 为可选的保持全精度的层。 + * 训练基础配置 + * `--learning_rate`: 学习率。 + * `--num_epochs`: 轮数(Epoch)。 + * `--trainable_models`: 可训练的模型,例如 `dit`、`vae`、`text_encoder`。 + * `--find_unused_parameters`: DDP 训练中是否存在未使用的参数。 + * `--weight_decay`: 权重衰减大小。 + * `--task`: 训练任务,默认为 `sft`。 + * 输出配置 + * `--output_path`: 模型保存路径。 + * `--remove_prefix_in_ckpt`: 在模型文件的 state dict 中移除前缀。 + * `--save_steps`: 保存模型的训练步数间隔。 + * LoRA 配置 + * `--lora_base_model`: LoRA 添加到哪个模型上。 + * `--lora_target_modules`: LoRA 添加到哪些层上。 + * `--lora_rank`: LoRA 的秩(Rank)。 + * `--lora_checkpoint`: LoRA 检查点的路径。 + * `--preset_lora_path`: 预置 LoRA 检查点路径,用于 LoRA 差分训练。 + * `--preset_lora_model`: 预置 LoRA 融入的模型,例如 `dit`。 + * 梯度配置 + * `--use_gradient_checkpointing`: 是否启用 gradient checkpointing。 + * `--use_gradient_checkpointing_offload`: 是否将 gradient checkpointing 卸载到内存中。 + * `--gradient_accumulation_steps`: 梯度累积步数。 + * 分辨率配置 + * `--height`: 图像/视频的高度。留空启用动态分辨率。 + * `--width`: 图像/视频的宽度。留空启用动态分辨率。 + * `--max_pixels`: 最大像素面积,动态分辨率时大于此值的图片会被缩小。 + * `--num_frames`: 视频的帧数(仅视频生成模型)。 +* ACE-Step 专有参数 + * `--tokenizer_path`: Tokenizer 路径,格式为 model_id:origin_pattern。 + * `--silence_latent_path`: 静音隐变量路径,格式为 model_id:origin_pattern。 + * `--initialize_model_on_cpu`: 是否在 CPU 上初始化模型。 + +### 样例数据集 + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --local_dir ./data/diffsynth_example_dataset +``` + +我们为每个模型编写了推荐的训练脚本,请参考前文"模型总览"中的表格。关于如何编写模型训练脚本,请参考[模型训练](../Pipeline_Usage/Model_Training.md);更多高阶训练算法,请参考[训练框架详解](https://github.com/modelscope/DiffSynth-Studio/tree/main/docs/zh/Training/)。 diff --git a/docs/zh/Model_Details/Anima.md b/docs/zh/Model_Details/Anima.md new file mode 100644 index 0000000000000000000000000000000000000000..0873b792ed258d7a9a520626c4ad29180a0f36c1 --- /dev/null +++ b/docs/zh/Model_Details/Anima.md @@ -0,0 +1,140 @@ +# Anima + +Anima 是由 CircleStone Labs 与 Comfy Org 训练并开源的图像生成模型。 + +## 安装 + +在使用本项目进行模型推理和训练前,请先安装 DiffSynth-Studio。 + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +更多关于安装的信息,请参考[安装依赖](../Pipeline_Usage/Setup.md)。 + +## 快速开始 + +运行以下代码可以快速加载 [circlestone-labs/Anima](https://www.modelscope.cn/models/circlestone-labs/Anima) 模型并进行推理。显存管理已启动,框架会自动根据剩余显存控制模型参数的加载,最低 8G 显存即可运行。 + +```python +from diffsynth.pipelines.anima_image import AnimaImagePipeline, ModelConfig +import torch + +vram_config = { + "offload_dtype": "disk", + "offload_device": "disk", + "onload_dtype": "disk", + "onload_device": "disk", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} +pipe = AnimaImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="circlestone-labs/Anima", origin_file_pattern="split_files/diffusion_models/anima-preview.safetensors", **vram_config), + ModelConfig(model_id="circlestone-labs/Anima", origin_file_pattern="split_files/text_encoders/qwen_3_06b_base.safetensors", **vram_config), + ModelConfig(model_id="circlestone-labs/Anima", origin_file_pattern="split_files/vae/qwen_image_vae.safetensors", **vram_config), + ], + tokenizer_config=ModelConfig(model_id="Qwen/Qwen3-0.6B", origin_file_pattern="./"), + tokenizer_t5xxl_config=ModelConfig(model_id="stabilityai/stable-diffusion-3.5-large", origin_file_pattern="tokenizer_3/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) +prompt = "Masterpiece, best quality, solo, long hair, wavy hair, silver hair, blue eyes, blue dress, medium breasts, dress, underwater, air bubble, floating hair, refraction, portrait." +negative_prompt = "worst quality, low quality, monochrome, zombie, interlocked fingers, Aissist, cleavage, nsfw," +image = pipe(prompt, seed=0, num_inference_steps=50) +image.save("image.jpg") +``` + +## 模型总览 + +|模型 ID|推理|低显存推理|全量训练|全量训练后验证|LoRA 训练|LoRA 训练后验证| +|-|-|-|-|-|-|-| +|[circlestone-labs/Anima](https://www.modelscope.cn/models/circlestone-labs/Anima)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/anima/model_inference/anima-preview.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/anima/model_inference_low_vram/anima-preview.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/anima/model_training/full/anima-preview.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/anima/model_training/validate_full/anima-preview.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/anima/model_training/lora/anima-preview.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/anima/model_training/validate_lora/anima-preview.py)| + +特殊训练脚本: + +* 差分 LoRA 训练:[doc](../Training/Differential_LoRA.md) +* FP8 精度训练:[doc](../Training/FP8_Precision.md) +* 两阶段拆分训练:[doc](../Training/Split_Training.md) +* 端到端直接蒸馏:[doc](../Training/Direct_Distill.md) + +## 模型推理 + +模型通过 `AnimaImagePipeline.from_pretrained` 加载,详见[加载模型](../Pipeline_Usage/Model_Inference.md#加载模型)。 + +`AnimaImagePipeline` 推理的输入参数包括: + +* `prompt`: 提示词,描述画面中出现的内容。 +* `negative_prompt`: 负向提示词,描述画面中不应该出现的内容,默认值为 `""`。 +* `cfg_scale`: Classifier-free guidance 的参数,默认值为 4.0。 +* `input_image`: 输入图像,用于图像到图像的生成。默认为 `None`。 +* `denoising_strength`: 去噪强度,控制生成图像与输入图像的相似度,默认值为 1.0。 +* `height`: 图像高度,需保证高度为 16 的倍数,默认值为 1024。 +* `width`: 图像宽度,需保证宽度为 16 的倍数,默认值为 1024。 +* `seed`: 随机种子。默认为 `None`,即完全随机。 +* `rand_device`: 生成随机高斯噪声矩阵的计算设备,默认为 `"cpu"`。当设置为 `cuda` 时,在不同 GPU 上会导致不同的生成结果。 +* `num_inference_steps`: 推理次数,默认值为 30。 +* `sigma_shift`: 调度器的 sigma 偏移量,默认为 `None`。 +* `progress_bar_cmd`: 进度条,默认为 `tqdm.tqdm`。可通过设置为 `lambda x:x` 来屏蔽进度条。 + +如果显存不足,请开启[显存管理](../Pipeline_Usage/VRAM_management.md),我们在示例代码中提供了每个模型推荐的低显存配置,详见前文"模型总览"中的表格。 + +## 模型训练 + +Anima 系列模型统一通过 [`examples/anima/model_training/train.py`](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/anima/model_training/train.py) 进行训练,脚本的参数包括: + +* 通用训练参数 + * 数据集基础配置 + * `--dataset_base_path`: 数据集的根目录。 + * `--dataset_metadata_path`: 数据集的元数据文件路径。 + * `--dataset_repeat`: 每个 epoch 中数据集重复的次数。 + * `--dataset_num_workers`: 每个 Dataloder 的进程数量。 + * `--data_file_keys`: 元数据中需要加载的字段名称,通常是图像或视频文件的路径,以 `,` 分隔。 + * 模型加载配置 + * `--model_paths`: 要加载的模型路径。JSON 格式。 + * `--model_id_with_origin_paths`: 带原始路径的模型 ID,例如 `"anima-team/anima-1B:text_encoder/*.safetensors"`。用逗号分隔。 + * `--extra_inputs`: 模型 Pipeline 所需的额外输入参数,例如训练 ControlNet 模型时需要额外参数 `controlnet_inputs`,以 `,` 分隔。 + * `--fp8_models`:以 FP8 格式加载的模型,格式与 `--model_paths` 或 `--model_id_with_origin_paths` 一致,目前仅支持参数不被梯度更新的模型(不需要梯度回传,或梯度仅更新其 LoRA)。 + * `--quant_options`:对加载的模型进行动态量化。以 `;` 分隔多个条目,每个为 `<模型字符串>:[/]`,`<模型字符串>` 需与 `--model_paths`/`--model_id_with_origin_paths` 中的一致,`method` 为已注册的量化方法(如 `bitsandbytes_nf4`),`exclude_modules` 为可选的保持全精度的层。 + * 训练基础配置 + * `--learning_rate`: 学习率。 + * `--num_epochs`: 轮数(Epoch)。 + * `--trainable_models`: 可训练的模型,例如 `dit`、`vae`、`text_encoder`。 + * `--find_unused_parameters`: DDP 训练中是否存在未使用的参数,少数模型包含不参与梯度计算的冗余参数,需开启这一设置避免在多 GPU 训练中报错。 + * `--weight_decay`:权重衰减大小,详见 [torch.optim.AdamW](https://docs.pytorch.org/docs/stable/generated/torch.optim.AdamW.html)。 + * `--task`: 训练任务,默认为 `sft`,部分模型支持更多训练模式,请参考每个特定模型的文档。 + * 输出配置 + * `--output_path`: 模型保存路径。 + * `--remove_prefix_in_ckpt`: 在模型文件的 state dict 中移除前缀。 + * `--save_steps`: 保存模型的训练步数间隔,若此参数留空,则每个 epoch 保存一次。 + * LoRA 配置 + * `--lora_base_model`: LoRA 添加到哪个模型上。 + * `--lora_target_modules`: LoRA 添加到哪些层上。 + * `--lora_rank`: LoRA 的秩(Rank)。 + * `--lora_checkpoint`: LoRA 检查点的路径。如果提供此路径,LoRA 将从此检查点加载。 + * `--preset_lora_path`: 预置 LoRA 检查点路径,如果提供此路径,这一 LoRA 将会以融入基础模型的形式加载。此参数用于 LoRA 差分训练。 + * `--preset_lora_model`: 预置 LoRA 融入的模型,例如 `dit`。 + * 梯度配置 + * `--use_gradient_checkpointing`: 是否启用 gradient checkpointing。 + * `--use_gradient_checkpointing_offload`: 是否将 gradient checkpointing 卸载到内存中。 + * `--gradient_accumulation_steps`: 梯度累积步数。 + * 图像宽高配置(适用于图像生成模型和视频生成模型) + * `--height`: 图像或视频的高度。将 `height` 和 `width` 留空以启用动态分辨率。 + * `--width`: 图像或视频的宽度。将 `height` 和 `width` 留空以启用动态分辨率。 + * `--max_pixels`: 图像或视频帧的最大像素面积,当启用动态分辨率时,分辨率大于这个数值的图片都会被缩小,分辨率小于这个数值的图片保持不变。 +* Anima 专有参数 + * `--tokenizer_path`: tokenizer 的路径,适用于文生图模型,留空则自动从远程下载。 + * `--tokenizer_t5xxl_path`: T5-XXL tokenizer 的路径,适用于文生图模型,留空则自动从远程下载。 + +我们构建了一个样例图像数据集,以方便您进行测试,通过以下命令可以下载这个数据集: + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --local_dir ./data/diffsynth_example_dataset +``` + +我们为每个模型编写了推荐的训练脚本,请参考前文"模型总览"中的表格。关于如何编写模型训练脚本,请参考[模型训练](../Pipeline_Usage/Model_Training.md);更多高阶训练算法,请参考[训练框架详解](https://github.com/modelscope/DiffSynth-Studio/tree/main/docs/zh/Training/)。 diff --git a/docs/zh/Model_Details/Boogu-Image.md b/docs/zh/Model_Details/Boogu-Image.md new file mode 100644 index 0000000000000000000000000000000000000000..66a06de71be1eb964b1e2adfc27c71078a8520e7 --- /dev/null +++ b/docs/zh/Model_Details/Boogu-Image.md @@ -0,0 +1,148 @@ +# Boogu-Image + +Boogu-Image 支持文生图、图生图和指令引导的图像编辑。 + +## 安装 + +在使用本项目进行模型推理和训练前,请先安装 DiffSynth-Studio。 + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +更多关于安装的信息,请参考[安装依赖](../Pipeline_Usage/Setup.md)。 + +## 快速开始 + +运行以下代码可以快速加载 [Boogu/Boogu-Image-0.1-Base](https://modelscope.cn/models/Boogu/Boogu-Image-0.1-Base) 模型并进行推理。显存管理已启动,框架会自动根据剩余显存控制模型参数的加载,最低 8G 显存即可运行。 + +```python +from diffsynth.pipelines.boogu_image import BooguImagePipeline, ModelConfig +import torch + + +vram_config = { + "offload_dtype": torch.float8_e4m3fn, + "offload_device": "cpu", + "onload_dtype": torch.float8_e4m3fn, + "onload_device": "cpu", + "preparing_dtype": torch.float8_e4m3fn, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} + +pipe = BooguImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Boogu/Boogu-Image-0.1-Base", origin_file_pattern="transformer/*.safetensors", **vram_config), + ModelConfig(model_id="Boogu/Boogu-Image-0.1-Base", origin_file_pattern="mllm/*.safetensors", **vram_config), + ModelConfig(model_id="Boogu/Boogu-Image-0.1-Base", origin_file_pattern="vae/*.safetensors", **vram_config), + ], + processor_config=ModelConfig(model_id="Boogu/Boogu-Image-0.1-Base", origin_file_pattern="mllm/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) + +output = pipe( + prompt="a cat", + negative_prompt="", + height=1024, + width=1024, + seed=42, + num_inference_steps=50, + cfg_scale=4.0, +) +output.save("image_Boogu-Image-0.1-Base.jpg") +``` + +## 模型总览 + +|模型 ID|推理|低显存推理|全量训练|全量训练后验证|LoRA 训练|LoRA 训练后验证| +|-|-|-|-|-|-|-| +|[Boogu/Boogu-Image-0.1-Base](https://modelscope.cn/models/Boogu/Boogu-Image-0.1-Base)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/boogu_image/model_inference/Boogu-Image-0.1-Base.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/boogu_image/model_inference_low_vram/Boogu-Image-0.1-Base.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/boogu_image/model_training/full/Boogu-Image-0.1-Base.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/boogu_image/model_training/validate_full/Boogu-Image-0.1-Base.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/boogu_image/model_training/lora/Boogu-Image-0.1-Base.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/boogu_image/model_training/validate_lora/Boogu-Image-0.1-Base.py)| +|[Boogu/Boogu-Image-0.1-Turbo](https://modelscope.cn/models/Boogu/Boogu-Image-0.1-Turbo)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/boogu_image/model_inference/Boogu-Image-0.1-Turbo.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/boogu_image/model_inference_low_vram/Boogu-Image-0.1-Turbo.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/boogu_image/model_training/full/Boogu-Image-0.1-Turbo.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/boogu_image/model_training/validate_full/Boogu-Image-0.1-Turbo.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/boogu_image/model_training/lora/Boogu-Image-0.1-Turbo.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/boogu_image/model_training/validate_lora/Boogu-Image-0.1-Turbo.py)| +|[Boogu/Boogu-Image-0.1-Edit](https://modelscope.cn/models/Boogu/Boogu-Image-0.1-Edit)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/boogu_image/model_inference/Boogu-Image-0.1-Edit.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/boogu_image/model_inference_low_vram/Boogu-Image-0.1-Edit.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/boogu_image/model_training/full/Boogu-Image-0.1-Edit.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/boogu_image/model_training/validate_full/Boogu-Image-0.1-Edit.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/boogu_image/model_training/lora/Boogu-Image-0.1-Edit.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/boogu_image/model_training/validate_lora/Boogu-Image-0.1-Edit.py)| + +## 模型推理 + +模型通过 `BooguImagePipeline.from_pretrained` 加载,详见[加载模型](../Pipeline_Usage/Model_Inference.md#加载模型)。 + +`BooguImagePipeline` 推理的输入参数包括: + +* `prompt`: 文本提示词,用于描述期望的生成内容或编辑指令。 +* `negative_prompt`: 负向提示词,指定不希望出现在结果中的内容,默认为空字符串。 +* `cfg_scale`: 分类器自由引导的缩放系数,默认为 4.0。值越大,生成结果越贴近 prompt 描述。 +* `input_image`: 输入图像,用于图生图(img2img)。提供后会根据 `denoising_strength` 对输入图像加噪再去噪。 +* `edit_image`: 待编辑的图像,用于指令引导的图像编辑。提供后模型会根据 `prompt` 中的指令对图像进行修改。 +* `height`: 输出图像的高度,默认为 1024。需能被 16 整除。 +* `width`: 输出图像的宽度,默认为 1024。需能被 16 整除。 +* `seed`: 随机种子,用于控制生成的可复现性。设为 `None` 时使用随机种子。 +* `denoising_strength`: 降噪强度,控制输入图像被重绘的程度,默认为 1.0。仅在提供 `input_image` 时生效。 +* `sigmas`: 自定义 sigma 调度序列,用于覆盖默认的调度策略。Turbo 模型需要指定此参数。 +* `num_inference_steps`: 推理步数,默认为 20。步数越多,生成质量通常越好。 +* `max_sequence_length`: 文本编码器处理的最大序列长度,默认为 1280。 +* `max_input_image_pixels`: 输入图像的最大像素面积,默认为 4194304。超过此值的图像会被缩小。 +* `max_input_image_side_length`: 输入图像的最大边长,默认为 4096。 +* `max_vlm_input_pil_pixels`: VLM 输入图像的最大像素面积,默认为 147456。仅在图像编辑模式下生效。 +* `max_vlm_input_pil_side_length`: VLM 输入图像的最大边长,默认为 768。仅在图像编辑模式下生效。 +* `rand_device`: 生成初始噪声的设备,默认为 "cpu"。 +* `progress_bar_cmd`: 进度条显示方式,默认为 tqdm。 + +显存不足时,请参考[显存管理](../Pipeline_Usage/VRAM_management.md)启用显存管理功能。 + +## 模型训练 + +boogu_image 系列模型统一通过 `examples/boogu_image/model_training/train.py` 进行训练,脚本的参数包括: + +* 通用训练参数 + * 数据集基础配置 + * `--dataset_base_path`: 数据集的根目录。 + * `--dataset_metadata_path`: 数据集的元数据文件路径。 + * `--dataset_repeat`: 每个 epoch 中数据集重复的次数。 + * `--dataset_num_workers`: 每个 Dataloader 的进程数量。 + * `--data_file_keys`: 元数据中需要加载的字段名称,通常是图像或视频文件的路径,以 `,` 分隔。 + * 模型加载配置 + * `--model_paths`: 要加载的模型路径。JSON 格式。 + * `--model_id_with_origin_paths`: 带原始路径的模型 ID。用逗号分隔。 + * `--extra_inputs`: 模型 Pipeline 所需的额外输入参数,以 `,` 分隔。 + * `--fp8_models`: 以 FP8 格式加载的模型,目前仅支持参数不被梯度更新的模型。 + * `--quant_options`:对加载的模型进行动态量化。以 `;` 分隔多个条目,每个为 `<模型字符串>:[/]`,`<模型字符串>` 需与 `--model_paths`/`--model_id_with_origin_paths` 中的一致,`method` 为已注册的量化方法(如 `bitsandbytes_nf4`),`exclude_modules` 为可选的保持全精度的层。 + * 训练基础配置 + * `--learning_rate`: 学习率。 + * `--num_epochs`: 轮数(Epoch)。 + * `--trainable_models`: 可训练的模型,例如 `dit`、`vae`、`text_encoder`。 + * `--find_unused_parameters`: DDP 训练中是否存在未使用的参数。 + * `--weight_decay`: 权重衰减大小。 + * `--task`: 训练任务,默认为 `sft`。 + * 输出配置 + * `--output_path`: 模型保存路径。 + * `--remove_prefix_in_ckpt`: 在模型文件的 state dict 中移除前缀。 + * `--save_steps`: 保存模型的训练步数间隔。 + * LoRA 配置 + * `--lora_base_model`: LoRA 添加到哪个模型上。 + * `--lora_target_modules`: LoRA 添加到哪些层上。 + * `--lora_rank`: LoRA 的秩(Rank)。 + * `--lora_checkpoint`: LoRA 检查点的路径。 + * `--preset_lora_path`: 预置 LoRA 检查点路径,用于 LoRA 差分训练。 + * `--preset_lora_model`: 预置 LoRA 融入的模型,例如 `dit`。 + * 梯度配置 + * `--use_gradient_checkpointing`: 是否启用 gradient checkpointing。 + * `--use_gradient_checkpointing_offload`: 是否将 gradient checkpointing 卸载到内存中。 + * `--gradient_accumulation_steps`: 梯度累积步数。 + * 分辨率配置 + * `--height`: 图像/视频的高度。留空启用动态分辨率。 + * `--width`: 图像/视频的宽度。留空启用动态分辨率。 + * `--max_pixels`: 最大像素面积,动态分辨率时大于此值的图片会被缩小。 + * `--num_frames`: 视频的帧数(仅视频生成模型)。 +* Boogu-Image 专有参数 + * `--processor_path`: Processor 路径,用于处理文本和图像的编码器输入。 + * `--initialize_model_on_cpu`: 是否在 CPU 上初始化模型,默认在加速设备上初始化。 + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --local_dir ./data/diffsynth_example_dataset +``` + +我们为每个模型编写了推荐的训练脚本,请参考前文"模型总览"中的表格。关于如何编写模型训练脚本,请参考[模型训练](../Pipeline_Usage/Model_Training.md);更多高阶训练算法,请参考[训练框架详解](https://github.com/modelscope/DiffSynth-Studio/tree/main/docs/zh/Training/)。 diff --git a/docs/zh/Model_Details/ERNIE-Image.md b/docs/zh/Model_Details/ERNIE-Image.md new file mode 100644 index 0000000000000000000000000000000000000000..df0979efbd00bb8913ca950b94d3dc50756b6ca4 --- /dev/null +++ b/docs/zh/Model_Details/ERNIE-Image.md @@ -0,0 +1,135 @@ +# ERNIE-Image + +ERNIE-Image 是百度推出的拥有 8B 参数的图像生成模型,具有紧凑高效的架构和出色的指令跟随能力。基于 8B DiT 主干网络,其在某些场景下的性能可与 20B 以上的更大模型相媲美,同时保持了良好的参数效率。该模型在指令理解与执行、文本生成(如英文/中文/日文)以及整体稳定性方面提供了较为可靠的表现。 + +## 安装 + +在使用本项目进行模型推理和训练前,请先安装 DiffSynth-Studio。 + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +更多关于安装的信息,请参考[安装依赖](../Pipeline_Usage/Setup.md)。 + +## 快速开始 + +运行以下代码可以快速加载 [PaddlePaddle/ERNIE-Image](https://www.modelscope.cn/models/PaddlePaddle/ERNIE-Image) 模型并进行推理。显存管理已启动,框架会自动根据剩余显存控制模型参数的加载,最低 3G 显存即可运行。 + +```python +from diffsynth.pipelines.ernie_image import ErnieImagePipeline, ModelConfig +import torch + +vram_config = { + "offload_dtype": torch.bfloat16, + "offload_device": "cpu", + "onload_dtype": torch.bfloat16, + "onload_device": "cpu", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} +pipe = ErnieImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device='cuda', + model_configs=[ + ModelConfig(model_id="PaddlePaddle/ERNIE-Image", origin_file_pattern="transformer/diffusion_pytorch_model*.safetensors", **vram_config), + ModelConfig(model_id="PaddlePaddle/ERNIE-Image", origin_file_pattern="text_encoder/model.safetensors", **vram_config), + ModelConfig(model_id="PaddlePaddle/ERNIE-Image", origin_file_pattern="vae/diffusion_pytorch_model.safetensors", **vram_config), + ], + tokenizer_config=ModelConfig(model_id="PaddlePaddle/ERNIE-Image", origin_file_pattern="tokenizer/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) + +image = pipe( + prompt="一只黑白相间的中华田园犬", + negative_prompt="", + height=1024, + width=1024, + seed=42, + num_inference_steps=50, + cfg_scale=4.0, +) +image.save("output.jpg") +``` + +## 模型总览 + +|模型 ID|推理|低显存推理|全量训练|全量训练后验证|LoRA 训练|LoRA 训练后验证| +|-|-|-|-|-|-|-| +|[PaddlePaddle/ERNIE-Image](https://www.modelscope.cn/models/PaddlePaddle/ERNIE-Image)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ernie_image/model_inference/ERNIE-Image.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ernie_image/model_inference_low_vram/ERNIE-Image.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ernie_image/model_training/full/ERNIE-Image.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ernie_image/model_training/validate_full/ERNIE-Image.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ernie_image/model_training/lora/ERNIE-Image.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ernie_image/model_training/validate_lora/ERNIE-Image.py)| +|[PaddlePaddle/ERNIE-Image-Turbo](https://www.modelscope.cn/models/PaddlePaddle/ERNIE-Image-Turbo)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ernie_image/model_inference/ERNIE-Image-Turbo.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ernie_image/model_inference_low_vram/ERNIE-Image-Turbo.py)|—|—|—|—| + +## 模型推理 + +模型通过 `ErnieImagePipeline.from_pretrained` 加载,详见[加载模型](../Pipeline_Usage/Model_Inference.md#加载模型)。 + +`ErnieImagePipeline` 推理的输入参数包括: + +* `prompt`: 提示词,描述画面中出现的内容。 +* `negative_prompt`: 负向提示词,描述画面中不应该出现的内容,默认值为 `""`。 +* `cfg_scale`: Classifier-free guidance 的参数,默认值为 4.0。 +* `height`: 图像高度,需保证高度为 16 的倍数,默认值为 1024。 +* `width`: 图像宽度,需保证宽度为 16 的倍数,默认值为 1024。 +* `seed`: 随机种子。默认为 `None`,即完全随机。 +* `rand_device`: 生成随机高斯噪声矩阵的计算设备,默认为 `"cuda"`。当设置为 `cuda` 时,在不同 GPU 上会导致不同的生成结果。 +* `num_inference_steps`: 推理步数,默认值为 50。 + +如果显存不足,请开启[显存管理](../Pipeline_Usage/VRAM_management.md),我们在示例代码中提供了每个模型推荐的低显存配置,详见前文"模型总览"中的表格。 + +## 模型训练 + +ERNIE-Image 系列模型统一通过 [`examples/ernie_image/model_training/train.py`](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ernie_image/model_training/train.py) 进行训练,脚本的参数包括: + +* 通用训练参数 + * 数据集基础配置 + * `--dataset_base_path`: 数据集的根目录。 + * `--dataset_metadata_path`: 数据集的元数据文件路径。 + * `--dataset_repeat`: 每个 epoch 中数据集重复的次数。 + * `--dataset_num_workers`: 每个 Dataloader 的进程数量。 + * `--data_file_keys`: 元数据中需要加载的字段名称,通常是图像或视频文件的路径,以 `,` 分隔。 + * 模型加载配置 + * `--model_paths`: 要加载的模型路径。JSON 格式。 + * `--model_id_with_origin_paths`: 带原始路径的模型 ID,例如 `"PaddlePaddle/ERNIE-Image:transformer/diffusion_pytorch_model*.safetensors"`。用逗号分隔。 + * `--extra_inputs`: 模型 Pipeline 所需的额外输入参数,以 `,` 分隔。 + * `--fp8_models`:以 FP8 格式加载的模型,目前仅支持参数不被梯度更新的模型。 + * `--quant_options`:对加载的模型进行动态量化。以 `;` 分隔多个条目,每个为 `<模型字符串>:[/]`,`<模型字符串>` 需与 `--model_paths`/`--model_id_with_origin_paths` 中的一致,`method` 为已注册的量化方法(如 `bitsandbytes_nf4`),`exclude_modules` 为可选的保持全精度的层。 + * 训练基础配置 + * `--learning_rate`: 学习率。 + * `--num_epochs`: 轮数(Epoch)。 + * `--trainable_models`: 可训练的模型,例如 `dit`、`vae`、`text_encoder`。 + * `--find_unused_parameters`: DDP 训练中是否存在未使用的参数。 + * `--weight_decay`:权重衰减大小。 + * `--task`: 训练任务,默认为 `sft`。 + * 输出配置 + * `--output_path`: 模型保存路径。 + * `--remove_prefix_in_ckpt`: 在模型文件的 state dict 中移除前缀。 + * `--save_steps`: 保存模型的训练步数间隔。 + * LoRA 配置 + * `--lora_base_model`: LoRA 添加到哪个模型上。 + * `--lora_target_modules`: LoRA 添加到哪些层上。 + * `--lora_rank`: LoRA 的秩(Rank)。 + * `--lora_checkpoint`: LoRA 检查点的路径。 + * `--preset_lora_path`: 预置 LoRA 检查点路径,用于 LoRA 差分训练。 + * `--preset_lora_model`: 预置 LoRA 融入的模型,例如 `dit`。 + * 梯度配置 + * `--use_gradient_checkpointing`: 是否启用 gradient checkpointing。 + * `--use_gradient_checkpointing_offload`: 是否将 gradient checkpointing 卸载到内存中。 + * `--gradient_accumulation_steps`: 梯度累积步数。 + * 分辨率配置 + * `--height`: 图像的高度。留空启用动态分辨率。 + * `--width`: 图像的宽度。留空启用动态分辨率。 + * `--max_pixels`: 最大像素面积,动态分辨率时大于此值的图片会被缩小。 +* ERNIE-Image 专有参数 + * `--tokenizer_path`: tokenizer 的路径,留空则自动从远程下载。 + +我们构建了一个样例图像数据集,以方便您进行测试,通过以下命令可以下载这个数据集: + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --local_dir ./data/diffsynth_example_dataset +``` + +我们为每个模型编写了推荐的训练脚本,请参考前文"模型总览"中的表格。关于如何编写模型训练脚本,请参考[模型训练](../Pipeline_Usage/Model_Training.md);更多高阶训练算法,请参考[训练框架详解](https://github.com/modelscope/DiffSynth-Studio/tree/main/docs/zh/Training/)。 diff --git a/docs/zh/Model_Details/FLUX.md b/docs/zh/Model_Details/FLUX.md new file mode 100644 index 0000000000000000000000000000000000000000..8488b962e1439fde7baa519b0adfbf7c0dac066b --- /dev/null +++ b/docs/zh/Model_Details/FLUX.md @@ -0,0 +1,185 @@ +# FLUX + +![Image](https://github.com/user-attachments/assets/c01258e2-f251-441a-aa1e-ebb22f02594d) + +FLUX 是由 Black Forest Labs 开发并开源的图像生成模型系列。 + +## 安装 + +在使用本项目进行模型推理和训练前,请先安装 DiffSynth-Studio。 + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +更多关于安装的信息,请参考[安装依赖](../Pipeline_Usage/Setup.md)。 + +## 快速开始 + +运行以下代码可以快速加载 [black-forest-labs/FLUX.1-dev](https://www.modelscope.cn/models/black-forest-labs/FLUX.1-dev) 模型并进行推理。显存管理已启动,框架会自动根据剩余显存控制模型参数的加载,最低 8G 显存即可运行。 + +```python +import torch +from diffsynth.pipelines.flux_image import FluxImagePipeline, ModelConfig + +vram_config = { + "offload_dtype": torch.float8_e4m3fn, + "offload_device": "cpu", + "onload_dtype": torch.float8_e4m3fn, + "onload_device": "cpu", + "preparing_dtype": torch.float8_e4m3fn, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} +pipe = FluxImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="black-forest-labs/FLUX.1-dev", origin_file_pattern="flux1-dev.safetensors", **vram_config), + ModelConfig(model_id="black-forest-labs/FLUX.1-dev", origin_file_pattern="text_encoder/model.safetensors", **vram_config), + ModelConfig(model_id="black-forest-labs/FLUX.1-dev", origin_file_pattern="text_encoder_2/*.safetensors", **vram_config), + ModelConfig(model_id="black-forest-labs/FLUX.1-dev", origin_file_pattern="ae.safetensors", **vram_config), + ], + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 1, +) +prompt = "CG, masterpiece, best quality, solo, long hair, wavy hair, silver hair, blue eyes, blue dress, medium breasts, dress, underwater, air bubble, floating hair, refraction, portrait. The girl's flowing silver hair shimmers with every color of the rainbow and cascades down, merging with the floating flora around her." +image = pipe(prompt=prompt, seed=0) +image.save("image.jpg") +``` + +## 模型总览 + +|模型 ID|额外参数|推理|低显存推理|全量训练|全量训练后验证|LoRA 训练|LoRA 训练后验证| +|-|-|-|-|-|-|-|-| +|[black-forest-labs/FLUX.1-dev](https://www.modelscope.cn/models/black-forest-labs/FLUX.1-dev)||[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference/FLUX.1-dev.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference_low_vram/FLUX.1-dev.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/full/FLUX.1-dev.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_full/FLUX.1-dev.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/lora/FLUX.1-dev.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_lora/FLUX.1-dev.py)| +|[black-forest-labs/FLUX.1-Krea-dev](https://www.modelscope.cn/models/black-forest-labs/FLUX.1-Krea-dev)||[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference/FLUX.1-Krea-dev.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference_low_vram/FLUX.1-Krea-dev.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/full/FLUX.1-Krea-dev.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_full/FLUX.1-Krea-dev.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/lora/FLUX.1-Krea-dev.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_lora/FLUX.1-Krea-dev.py)| +|[black-forest-labs/FLUX.1-Kontext-dev](https://www.modelscope.cn/models/black-forest-labs/FLUX.1-Kontext-dev)|`kontext_images`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference/FLUX.1-Kontext-dev.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference_low_vram/FLUX.1-Kontext-dev.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/full/FLUX.1-Kontext-dev.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_full/FLUX.1-Kontext-dev.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/lora/FLUX.1-Kontext-dev.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_lora/FLUX.1-Kontext-dev.py)| +|[black-forest-labs/FLUX.1-Fill-dev](https://www.modelscope.cn/models/black-forest-labs/FLUX.1-Fill-dev)|`flux_fill_image`, `flux_fill_mask`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference/FLUX.1-Fill-dev.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference_low_vram/FLUX.1-Fill-dev.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/full/FLUX.1-Fill-dev.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_full/FLUX.1-Fill-dev.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/lora/FLUX.1-Fill-dev.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_lora/FLUX.1-Fill-dev.py)| +|[black-forest-labs/FLUX.1-Redux-dev](https://www.modelscope.cn/models/black-forest-labs/FLUX.1-Redux-dev)|`flux_redux_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference/FLUX.1-Redux-dev.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference_low_vram/FLUX.1-Redux-dev.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/full/FLUX.1-Redux-dev.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_full/FLUX.1-Redux-dev.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/lora/FLUX.1-Redux-dev.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_lora/FLUX.1-Redux-dev.py)| +|[HuanJue/Insert-Anything](https://www.modelscope.cn/models/HuanJue/Insert-Anything)|`insert_anything_source_image`, `insert_anything_source_mask`, `insert_anything_ref_image`, `insert_anything_ref_mask`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference/Insert-Anything.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference_low_vram/Insert-Anything.py)|-|-|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/lora/Insert-Anything.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_lora/Insert-Anything.py)| +|[alimama-creative/FLUX.1-dev-Controlnet-Inpainting-Beta](https://www.modelscope.cn/models/alimama-creative/FLUX.1-dev-Controlnet-Inpainting-Beta)|`controlnet_inputs`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference/FLUX.1-dev-Controlnet-Inpainting-Beta.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference_low_vram/FLUX.1-dev-Controlnet-Inpainting-Beta.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/full/FLUX.1-dev-Controlnet-Inpainting-Beta.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_full/FLUX.1-dev-Controlnet-Inpainting-Beta.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/lora/FLUX.1-dev-Controlnet-Inpainting-Beta.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_lora/FLUX.1-dev-Controlnet-Inpainting-Beta.py)| +|[InstantX/FLUX.1-dev-Controlnet-Union-alpha](https://www.modelscope.cn/models/InstantX/FLUX.1-dev-Controlnet-Union-alpha)|`controlnet_inputs`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference/FLUX.1-dev-Controlnet-Union-alpha.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference_low_vram/FLUX.1-dev-Controlnet-Union-alpha.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/full/FLUX.1-dev-Controlnet-Union-alpha.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_full/FLUX.1-dev-Controlnet-Union-alpha.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/lora/FLUX.1-dev-Controlnet-Union-alpha.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_lora/FLUX.1-dev-Controlnet-Union-alpha.py)| +|[jasperai/Flux.1-dev-Controlnet-Upscaler](https://www.modelscope.cn/models/jasperai/Flux.1-dev-Controlnet-Upscaler)|`controlnet_inputs`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference/FLUX.1-dev-Controlnet-Upscaler.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference_low_vram/FLUX.1-dev-Controlnet-Upscaler.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/full/FLUX.1-dev-Controlnet-Upscaler.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_full/FLUX.1-dev-Controlnet-Upscaler.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/lora/FLUX.1-dev-Controlnet-Upscaler.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_lora/FLUX.1-dev-Controlnet-Upscaler.py)| +|[InstantX/FLUX.1-dev-IP-Adapter](https://www.modelscope.cn/models/InstantX/FLUX.1-dev-IP-Adapter)|`ipadapter_images`, `ipadapter_scale`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference/FLUX.1-dev-IP-Adapter.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference_low_vram/FLUX.1-dev-IP-Adapter.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/full/FLUX.1-dev-IP-Adapter.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_full/FLUX.1-dev-IP-Adapter.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/lora/FLUX.1-dev-IP-Adapter.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_lora/FLUX.1-dev-IP-Adapter.py)| +|[ByteDance/InfiniteYou](https://www.modelscope.cn/models/ByteDance/InfiniteYou)|`infinityou_id_image`, `infinityou_guidance`, `controlnet_inputs`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference/FLUX.1-dev-InfiniteYou.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference_low_vram/FLUX.1-dev-InfiniteYou.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/full/FLUX.1-dev-InfiniteYou.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_full/FLUX.1-dev-InfiniteYou.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/lora/FLUX.1-dev-InfiniteYou.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_lora/FLUX.1-dev-InfiniteYou.py)| +|[DiffSynth-Studio/Eligen](https://www.modelscope.cn/models/DiffSynth-Studio/Eligen)|`eligen_entity_prompts`, `eligen_entity_masks`, `eligen_enable_on_negative`, `eligen_enable_inpaint`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference/FLUX.1-dev-EliGen.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference_low_vram/FLUX.1-dev-EliGen.py)|-|-|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/lora/FLUX.1-dev-EliGen.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_lora/FLUX.1-dev-EliGen.py)| +|[DiffSynth-Studio/LoRA-Encoder-FLUX.1-Dev](https://www.modelscope.cn/models/DiffSynth-Studio/LoRA-Encoder-FLUX.1-Dev)|`lora_encoder_inputs`, `lora_encoder_scale`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference/FLUX.1-dev-LoRA-Encoder.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference_low_vram/FLUX.1-dev-LoRA-Encoder.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/full/FLUX.1-dev-LoRA-Encoder.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_full/FLUX.1-dev-LoRA-Encoder.py)|-|-| +|[DiffSynth-Studio/LoRAFusion-preview-FLUX.1-dev](https://modelscope.cn/models/DiffSynth-Studio/LoRAFusion-preview-FLUX.1-dev)||[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference/FLUX.1-dev-LoRA-Fusion.py)|-|-|-|-|-| +|[stepfun-ai/Step1X-Edit](https://www.modelscope.cn/models/stepfun-ai/Step1X-Edit)|`step1x_reference_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference/Step1X-Edit.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference_low_vram/Step1X-Edit.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/full/Step1X-Edit.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_full/Step1X-Edit.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/lora/Step1X-Edit.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_lora/Step1X-Edit.py)| +|[ostris/Flex.2-preview](https://www.modelscope.cn/models/ostris/Flex.2-preview)|`flex_inpaint_image`, `flex_inpaint_mask`, `flex_control_image`, `flex_control_strength`, `flex_control_stop`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference/FLEX.2-preview.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference_low_vram/FLEX.2-preview.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/full/FLEX.2-preview.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_full/FLEX.2-preview.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/lora/FLEX.2-preview.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_lora/FLEX.2-preview.py)| +|[DiffSynth-Studio/Nexus-GenV2](https://www.modelscope.cn/models/DiffSynth-Studio/Nexus-GenV2)|`nexus_gen_reference_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference/Nexus-Gen-Editing.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_inference_low_vram/Nexus-Gen-Editing.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/full/Nexus-Gen.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_full/Nexus-Gen.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/lora/Nexus-Gen.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/validate_lora/Nexus-Gen.py)| + +特殊训练脚本: + +* 差分 LoRA 训练:[doc](../Training/Differential_LoRA.md) +* FP8 精度训练:[doc](../Training/FP8_Precision.md) +* 两阶段拆分训练:[doc](../Training/Split_Training.md) +* 端到端直接蒸馏:[doc](../Training/Direct_Distill.md) + +## 模型推理 + +模型通过 `FluxImagePipeline.from_pretrained` 加载,详见[加载模型](../Pipeline_Usage/Model_Inference.md#加载模型)。 + +`FluxImagePipeline` 推理的输入参数包括: + +* `prompt`: 提示词,描述画面中出现的内容。 +* `negative_prompt`: 负向提示词,描述画面中不应该出现的内容,默认值为 `""`。 +* `cfg_scale`: Classifier-free guidance 的参数,默认值为 1,当设置为大于 1 的值时启用 CFG。 +* `height`: 图像高度,需保证高度为 16 的倍数。 +* `width`: 图像宽度,需保证宽度为 16 的倍数。 +* `seed`: 随机种子。默认为 `None`,即完全随机。 +* `rand_device`: 生成随机高斯噪声矩阵的计算设备,默认为 `"cpu"`。当设置为 `cuda` 时,在不同 GPU 上会导致不同的生成结果。 +* `num_inference_steps`: 推理次数,默认值为 30。 +* `embedded_guidance`: 嵌入式引导参数,默认值为 3.5。 +* `t5_sequence_length`: T5 文本编码器的序列长度,默认为 512。 +* `tiled`: 是否启用 VAE 分块推理,默认为 `False`。设置为 `True` 时可显著减少 VAE 编解码阶段的显存占用,会产生少许误差,以及少量推理时间延长。 +* `tile_size`: VAE 编解码阶段的分块大小,默认为 128,仅在 `tiled=True` 时生效。 +* `tile_stride`: VAE 编解码阶段的分块步长,默认为 64,仅在 `tiled=True` 时生效,需保证其数值小于或等于 `tile_size`。 +* `progress_bar_cmd`: 进度条,默认为 `tqdm.tqdm`。可通过设置为 `lambda x:x` 来屏蔽进度条。 +* `controlnet_inputs`: ControlNet 模型的输入,类型为 `ControlNetInput` 列表。 +* `ipadapter_images`: IP-Adapter 模型的输入图像列表。 +* `ipadapter_scale`: IP-Adapter 模型的引导强度。 +* `infinityou_id_image`: InfiniteYou 模型的输入图像。 +* `infinityou_guidance`: InfiniteYou 模型的引导强度。 +* `kontext_images`: Kontext 模型的输入图像。 +* `eligen_entity_prompts`: EliGen 分区控制的提示词列表。 +* `eligen_entity_masks`: EliGen 分区控制的区域遮罩图像列表。 +* `eligen_enable_on_negative`: 是否在 CFG 的负向一侧启用 EliGen 分区控制。 +* `eligen_enable_inpaint`: 是否启用 EliGen 分区控制的局部重绘功能。 +* `lora_encoder_inputs`: LoRA 编码器的输入图像列表。 +* `lora_encoder_scale`: LoRA 编码器的引导强度。 +* `step1x_reference_image`: Step1X 模型的参考图像。 +* `flex_inpaint_image`: Flex 模型的待修复图像。 +* `flex_inpaint_mask`: Flex 模型的修复遮罩。 +* `flex_control_image`: Flex 模型的控制图像。 +* `flex_control_strength`: Flex 模型的控制强度。 +* `flex_control_stop`: Flex 模型的控制停止时间步。 +* `nexus_gen_reference_image`: Nexus-Gen 模型的参考图像。 +* `flux_fill_image`: FLUX.1-Fill 模型的待修复图像。 +* `flux_fill_mask`: FLUX.1-Fill 模型的修复遮罩。 +* `flux_redux_image`: FLUX.1-Redux 模型的参考图像。 +* `insert_anything_source_image`: Insert-Anything 模型的源图像,即待编辑的目标图像。 +* `insert_anything_source_mask`: Insert-Anything 模型的源图像遮罩,指定待编辑的区域。 +* `insert_anything_ref_image`: Insert-Anything 模型的参考图像,提供待插入的内容。 +* `insert_anything_ref_mask`: Insert-Anything 模型的参考图像遮罩,指定参考图像中的目标物体。 + +如果显存不足,请开启[显存管理](../Pipeline_Usage/VRAM_management.md),我们在示例代码中提供了每个模型推荐的低显存配置,详见前文"模型总览"中的表格。 + +## 模型训练 + +FLUX 系列模型统一通过 [`examples/flux/model_training/train.py`](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux/model_training/train.py) 进行训练,脚本的参数包括: + +* 通用训练参数 + * 数据集基础配置 + * `--dataset_base_path`: 数据集的根目录。 + * `--dataset_metadata_path`: 数据集的元数据文件路径。 + * `--dataset_repeat`: 每个 epoch 中数据集重复的次数。 + * `--dataset_num_workers`: 每个 Dataloder 的进程数量。 + * `--data_file_keys`: 元数据中需要加载的字段名称,通常是图像或视频文件的路径,以 `,` 分隔。 + * 模型加载配置 + * `--model_paths`: 要加载的模型路径。JSON 格式。 + * `--model_id_with_origin_paths`: 带原始路径的模型 ID,例如 `"black-forest-labs/FLUX.1-dev:flux1-dev.safetensors"`。用逗号分隔。 + * `--extra_inputs`: 模型 Pipeline 所需的额外输入参数,例如训练 ControlNet 模型时需要额外参数 `controlnet_inputs`,以 `,` 分隔。 + * `--fp8_models`:以 FP8 格式加载的模型,格式与 `--model_paths` 或 `--model_id_with_origin_paths` 一致,目前仅支持参数不被梯度更新的模型(不需要梯度回传,或梯度仅更新其 LoRA)。 + * `--quant_options`:对加载的模型进行动态量化。以 `;` 分隔多个条目,每个为 `<模型字符串>:[/]`,`<模型字符串>` 需与 `--model_paths`/`--model_id_with_origin_paths` 中的一致,`method` 为已注册的量化方法(如 `bitsandbytes_nf4`),`exclude_modules` 为可选的保持全精度的层。 + * 训练基础配置 + * `--learning_rate`: 学习率。 + * `--num_epochs`: 轮数(Epoch)。 + * `--trainable_models`: 可训练的模型,例如 `dit`、`vae`、`text_encoder`。 + * `--find_unused_parameters`: DDP 训练中是否存在未使用的参数,少数模型包含不参与梯度计算的冗余参数,需开启这一设置避免在多 GPU 训练中报错。 + * `--weight_decay`:权重衰减大小,详见 [torch.optim.AdamW](https://docs.pytorch.org/docs/stable/generated/torch.optim.AdamW.html)。 + * `--task`: 训练任务,默认为 `sft`,部分模型支持更多训练模式,请参考每个特定模型的文档。 + * 输出配置 + * `--output_path`: 模型保存路径。 + * `--remove_prefix_in_ckpt`: 在模型文件的 state dict 中移除前缀。 + * `--save_steps`: 保存模型的训练步数间隔,若此参数留空,则每个 epoch 保存一次。 + * LoRA 配置 + * `--lora_base_model`: LoRA 添加到哪个模型上。 + * `--lora_target_modules`: LoRA 添加到哪些层上。 + * `--lora_rank`: LoRA 的秩(Rank)。 + * `--lora_checkpoint`: LoRA 检查点的路径。如果提供此路径,LoRA 将从此检查点加载。 + * `--preset_lora_path`: 预置 LoRA 检查点路径,如果提供此路径,这一 LoRA 将会以融入基础模型的形式加载。此参数用于 LoRA 差分训练。 + * `--preset_lora_model`: 预置 LoRA 融入的模型,例如 `dit`。 + * 梯度配置 + * `--use_gradient_checkpointing`: 是否启用 gradient checkpointing。 + * `--use_gradient_checkpointing_offload`: 是否将 gradient checkpointing 卸载到内存中。 + * `--gradient_accumulation_steps`: 梯度累积步数。 + * 图像宽高配置(适用于图像生成模型和视频生成模型) + * `--height`: 图像或视频的高度。将 `height` 和 `width` 留空以启用动态分辨率。 + * `--width`: 图像或视频的宽度。将 `height` 和 `width` 留空以启用动态分辨率。 + * `--max_pixels`: 图像或视频帧的最大像素面积,当启用动态分辨率时,分辨率大于这个数值的图片都会被缩小,分辨率小于这个数值的图片保持不变。 +* FLUX 专有参数 + * `--tokenizer_1_path`: CLIP tokenizer 的路径,留空则自动从远程下载。 + * `--tokenizer_2_path`: T5 tokenizer 的路径,留空则自动从远程下载。 + * `--align_to_opensource_format`: 是否将 LoRA 格式对齐到开源格式,仅适用于 DiT 的 LoRA。 + +我们构建了一个样例图像数据集,以方便您进行测试,通过以下命令可以下载这个数据集: + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --local_dir ./data/diffsynth_example_dataset +``` + +我们为每个模型编写了推荐的训练脚本,请参考前文"模型总览"中的表格。关于如何编写模型训练脚本,请参考[模型训练](../Pipeline_Usage/Model_Training.md);更多高阶训练算法,请参考[训练框架详解](https://github.com/modelscope/DiffSynth-Studio/tree/main/docs/zh/Training/)。 diff --git a/docs/zh/Model_Details/FLUX2.md b/docs/zh/Model_Details/FLUX2.md new file mode 100644 index 0000000000000000000000000000000000000000..c963995dc34e001414ae29a9ea3182aa37f39533 --- /dev/null +++ b/docs/zh/Model_Details/FLUX2.md @@ -0,0 +1,155 @@ +# FLUX.2 + +FLUX.2 是由 Black Forest Labs 训练并开源的图像生成模型。 + +## 安装 + +在使用本项目进行模型推理和训练前,请先安装 DiffSynth-Studio。 + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +更多关于安装的信息,请参考[安装依赖](../Pipeline_Usage/Setup.md)。 + +## 快速开始 + +运行以下代码可以快速加载 [black-forest-labs/FLUX.2-dev](https://www.modelscope.cn/models/black-forest-labs/FLUX.2-dev) 模型并进行推理。显存管理已启动,框架会自动根据剩余显存控制模型参数的加载,最低 10G 显存即可运行。 + +```python +from diffsynth.pipelines.flux2_image import Flux2ImagePipeline, ModelConfig +import torch + +vram_config = { + "offload_dtype": "disk", + "offload_device": "disk", + "onload_dtype": torch.float8_e4m3fn, + "onload_device": "cpu", + "preparing_dtype": torch.float8_e4m3fn, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} +pipe = Flux2ImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="black-forest-labs/FLUX.2-dev", origin_file_pattern="text_encoder/*.safetensors", **vram_config), + ModelConfig(model_id="black-forest-labs/FLUX.2-dev", origin_file_pattern="transformer/*.safetensors", **vram_config), + ModelConfig(model_id="black-forest-labs/FLUX.2-dev", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + tokenizer_config=ModelConfig(model_id="black-forest-labs/FLUX.2-dev", origin_file_pattern="tokenizer/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) +prompt = "High resolution. A dreamy underwater portrait of a serene young woman in a flowing blue dress. Her hair floats softly around her face, strands delicately suspended in the water. Clear, shimmering light filters through, casting gentle highlights, while tiny bubbles rise around her. Her expression is calm, her features finely detailed—creating a tranquil, ethereal scene." +image = pipe(prompt, seed=42, rand_device="cuda", num_inference_steps=50) +image.save("image.jpg") +``` + +## 模型总览 + +|模型 ID|推理|低显存推理|全量训练|全量训练后验证|LoRA 训练|LoRA 训练后验证| +|-|-|-|-|-|-|-| +|[black-forest-labs/FLUX.2-dev](https://www.modelscope.cn/models/black-forest-labs/FLUX.2-dev)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/FLUX.2-dev.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/FLUX.2-dev.py)|-|-|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/lora/FLUX.2-dev.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_lora/FLUX.2-dev.py)| +|[black-forest-labs/FLUX.2-klein-4B](https://www.modelscope.cn/models/black-forest-labs/FLUX.2-klein-4B)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/FLUX.2-klein-4B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/FLUX.2-klein-4B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/FLUX.2-klein-4B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/FLUX.2-klein-4B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/lora/FLUX.2-klein-4B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_lora/FLUX.2-klein-4B.py)| +|[black-forest-labs/FLUX.2-klein-9B](https://www.modelscope.cn/models/black-forest-labs/FLUX.2-klein-9B)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/FLUX.2-klein-9B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/FLUX.2-klein-9B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/FLUX.2-klein-9B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/FLUX.2-klein-9B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/lora/FLUX.2-klein-9B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_lora/FLUX.2-klein-9B.py)| +|[black-forest-labs/FLUX.2-klein-base-4B](https://www.modelscope.cn/models/black-forest-labs/FLUX.2-klein-base-4B)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/FLUX.2-klein-base-4B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/FLUX.2-klein-base-4B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/FLUX.2-klein-base-4B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/FLUX.2-klein-base-4B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/lora/FLUX.2-klein-base-4B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_lora/FLUX.2-klein-base-4B.py)| +|[black-forest-labs/FLUX.2-klein-base-9B](https://www.modelscope.cn/models/black-forest-labs/FLUX.2-klein-base-9B)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/FLUX.2-klein-base-9B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/FLUX.2-klein-base-9B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/FLUX.2-klein-base-9B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/FLUX.2-klein-base-9B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/lora/FLUX.2-klein-base-9B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_lora/FLUX.2-klein-base-9B.py)| +|[DiffSynth-Studio/Template-KleinBase4B-Aesthetic](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Aesthetic)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-Aesthetic.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-Aesthetic.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-Aesthetic.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-Aesthetic.py)|-|-| +|[DiffSynth-Studio/Template-KleinBase4B-Brightness](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Brightness)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-Brightness.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-Brightness.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-Brightness.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-Brightness.py)|-|-| +|[DiffSynth-Studio/Template-KleinBase4B-Age](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Age)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-Age.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-Age.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-Age.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-Age.py)|-|-| +|[DiffSynth-Studio/Template-KleinBase4B-ControlNet](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-ControlNet)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-ControlNet.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-ControlNet.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-ControlNet.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-ControlNet.py)|-|-| +|[DiffSynth-Studio/Template-KleinBase4B-Edit](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Edit)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-Edit.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-Edit.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-Edit.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-Edit.py)|-|-| +|[DiffSynth-Studio/Template-KleinBase4B-Inpaint](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Inpaint)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-Inpaint.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-Inpaint.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-Inpaint.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-Inpaint.py)|-|-| +|[DiffSynth-Studio/Template-KleinBase4B-PandaMeme](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-PandaMeme)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-PandaMeme.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-PandaMeme.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-PandaMeme.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-PandaMeme.py)|-|-| +|[DiffSynth-Studio/Template-KleinBase4B-Sharpness](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Sharpness)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-Sharpness.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-Sharpness.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-Sharpness.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-Sharpness.py)|-|-| +|[DiffSynth-Studio/Template-KleinBase4B-SoftRGB](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-SoftRGB)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-SoftRGB.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-SoftRGB.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-SoftRGB.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-SoftRGB.py)|-|-| +|[DiffSynth-Studio/Template-KleinBase4B-Upscaler](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Upscaler)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-Upscaler.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-Upscaler.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-Upscaler.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-Upscaler.py)|-|-| +|[DiffSynth-Studio/Template-KleinBase4B-ContentRef](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-ContentRef)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/Template-KleinBase4B-ContentRef.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/Template-KleinBase4B-ContentRef.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/Template-KleinBase4B-ContentRef.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/Template-KleinBase4B-ContentRef.py)|-|-| +|[DiffSynth-Studio/KleinBase4B-i2L-v2](https://www.modelscope.cn/models/DiffSynth-Studio/KleinBase4B-i2L-v2)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference/KleinBase4B-i2L-v2.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_inference_low_vram/KleinBase4B-i2L-v2.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/full/KleinBase4B-i2L-v2.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/validate_full/KleinBase4B-i2L-v2.py)|-|-| + +特殊训练脚本: + +* 差分 LoRA 训练:[doc](../Training/Differential_LoRA.md) +* FP8 精度训练:[doc](../Training/FP8_Precision.md) +* 两阶段拆分训练:[doc](../Training/Split_Training.md) +* 端到端直接蒸馏:[doc](../Training/Direct_Distill.md) + +## 模型推理 + +模型通过 `Flux2ImagePipeline.from_pretrained` 加载,详见[加载模型](../Pipeline_Usage/Model_Inference.md#加载模型)。 + +`Flux2ImagePipeline` 推理的输入参数包括: + +* `prompt`: 提示词,描述画面中出现的内容。 +* `negative_prompt`: 负向提示词,描述画面中不应该出现的内容,默认值为 `""`。 +* `cfg_scale`: Classifier-free guidance 的参数,默认值为 1,当设置为大于 1 的值时启用 CFG。 +* `height`: 图像高度,需保证高度为 16 的倍数。 +* `width`: 图像宽度,需保证宽度为 16 的倍数。 +* `seed`: 随机种子。默认为 `None`,即完全随机。 +* `rand_device`: 生成随机高斯噪声矩阵的计算设备,默认为 `"cpu"`。当设置为 `cuda` 时,在不同 GPU 上会导致不同的生成结果。 +* `num_inference_steps`: 推理次数,默认值为 30。 +* `embedded_guidance`: 嵌入式引导参数,默认值为 3.5。 +* `t5_sequence_length`: T5 文本编码器的序列长度,默认为 512。 +* `tiled`: 是否启用 VAE 分块推理,默认为 `False`。设置为 `True` 时可显著减少 VAE 编解码阶段的显存占用,会产生少许误差,以及少量推理时间延长。 +* `tile_size`: VAE 编解码阶段的分块大小,默认为 128,仅在 `tiled=True` 时生效。 +* `tile_stride`: VAE 编解码阶段的分块步长,默认为 64,仅在 `tiled=True` 时生效,需保证其数值小于或等于 `tile_size`。 +* `progress_bar_cmd`: 进度条,默认为 `tqdm.tqdm`。可通过设置为 `lambda x:x` 来屏蔽进度条。 + +如果显存不足,请开启[显存管理](../Pipeline_Usage/VRAM_management.md),我们在示例代码中提供了每个模型推荐的低显存配置,详见前文"模型总览"中的表格。 + +## 模型训练 + +FLUX.2 系列模型统一通过 [`examples/flux2/model_training/train.py`](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/flux2/model_training/train.py) 进行训练,脚本的参数包括: + +* 通用训练参数 + * 数据集基础配置 + * `--dataset_base_path`: 数据集的根目录。 + * `--dataset_metadata_path`: 数据集的元数据文件路径。 + * `--dataset_repeat`: 每个 epoch 中数据集重复的次数。 + * `--dataset_num_workers`: 每个 Dataloder 的进程数量。 + * `--data_file_keys`: 元数据中需要加载的字段名称,通常是图像或视频文件的路径,以 `,` 分隔。 + * 模型加载配置 + * `--model_paths`: 要加载的模型路径。JSON 格式。 + * `--model_id_with_origin_paths`: 带原始路径的模型 ID,例如 `"black-forest-labs/FLUX.2-dev:text_encoder/*.safetensors"`。用逗号分隔。 + * `--extra_inputs`: 模型 Pipeline 所需的额外输入参数,例如训练 ControlNet 模型时需要额外参数 `controlnet_inputs`,以 `,` 分隔。 + * `--fp8_models`:以 FP8 格式加载的模型,格式与 `--model_paths` 或 `--model_id_with_origin_paths` 一致,目前仅支持参数不被梯度更新的模型(不需要梯度回传,或梯度仅更新其 LoRA)。 + * `--quant_options`:对加载的模型进行动态量化。以 `;` 分隔多个条目,每个为 `<模型字符串>:[/]`,`<模型字符串>` 需与 `--model_paths`/`--model_id_with_origin_paths` 中的一致,`method` 为已注册的量化方法(如 `bitsandbytes_nf4`),`exclude_modules` 为可选的保持全精度的层。 + * 训练基础配置 + * `--learning_rate`: 学习率。 + * `--num_epochs`: 轮数(Epoch)。 + * `--trainable_models`: 可训练的模型,例如 `dit`、`vae`、`text_encoder`。 + * `--find_unused_parameters`: DDP 训练中是否存在未使用的参数,少数模型包含不参与梯度计算的冗余参数,需开启这一设置避免在多 GPU 训练中报错。 + * `--weight_decay`:权重衰减大小,详见 [torch.optim.AdamW](https://docs.pytorch.org/docs/stable/generated/torch.optim.AdamW.html)。 + * `--task`: 训练任务,默认为 `sft`,部分模型支持更多训练模式,请参考每个特定模型的文档。 + * 输出配置 + * `--output_path`: 模型保存路径。 + * `--remove_prefix_in_ckpt`: 在模型文件的 state dict 中移除前缀。 + * `--save_steps`: 保存模型的训练步数间隔,若此参数留空,则每个 epoch 保存一次。 + * LoRA 配置 + * `--lora_base_model`: LoRA 添加到哪个模型上。 + * `--lora_target_modules`: LoRA 添加到哪些层上。 + * `--lora_rank`: LoRA 的秩(Rank)。 + * `--lora_checkpoint`: LoRA 检查点的路径。如果提供此路径,LoRA 将从此检查点加载。 + * `--preset_lora_path`: 预置 LoRA 检查点路径,如果提供此路径,这一 LoRA 将会以融入基础模型的形式加载。此参数用于 LoRA 差分训练。 + * `--preset_lora_model`: 预置 LoRA 融入的模型,例如 `dit`。 + * 梯度配置 + * `--use_gradient_checkpointing`: 是否启用 gradient checkpointing。 + * `--use_gradient_checkpointing_offload`: 是否将 gradient checkpointing 卸载到内存中。 + * `--gradient_accumulation_steps`: 梯度累积步数。 + * 图像宽高配置(适用于图像生成模型和视频生成模型) + * `--height`: 图像或视频的高度。将 `height` 和 `width` 留空以启用动态分辨率。 + * `--width`: 图像或视频的宽度。将 `height` 和 `width` 留空以启用动态分辨率。 + * `--max_pixels`: 图像或视频帧的最大像素面积,当启用动态分辨率时,分辨率大于这个数值的图片都会被缩小,分辨率小于这个数值的图片保持不变。 +* FLUX.2 专有参数 + * `--tokenizer_path`: tokenizer 的路径,适用于文生图模型,留空则自动从远程下载。 + +我们构建了一个样例图像数据集,以方便您进行测试,通过以下命令可以下载这个数据集: + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --local_dir ./data/diffsynth_example_dataset +``` + +我们为每个模型编写了推荐的训练脚本,请参考前文"模型总览"中的表格。关于如何编写模型训练脚本,请参考[模型训练](../Pipeline_Usage/Model_Training.md);更多高阶训练算法,请参考[训练框架详解](https://github.com/modelscope/DiffSynth-Studio/tree/main/docs/zh/Training/)。 diff --git a/docs/zh/Model_Details/HiDream-O1-Image.md b/docs/zh/Model_Details/HiDream-O1-Image.md new file mode 100644 index 0000000000000000000000000000000000000000..fb811eb870ca68196d1587784fae3a9f4985fa80 --- /dev/null +++ b/docs/zh/Model_Details/HiDream-O1-Image.md @@ -0,0 +1,143 @@ +# HiDream-O1-Image + +HiDream-O1-Image 是由 HiDream.ai 开源的基于 Pixel-Level Unified Transformer (UiT) 架构的图像生成模型。该模型将 VAE、DiT 和 TextEncoder 统一在单一的 Qwen3VLModel 中,直接在 pixel patch 空间进行扩散去噪,无需独立的 VAE 组件。 + +## 安装 + +在使用本项目进行模型推理和训练前,请先安装 DiffSynth-Studio。 + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +更多关于安装的信息,请参考[安装依赖](../Pipeline_Usage/Setup.md)。 + +## 快速开始 + +运行以下代码可以快速加载 [HiDream-ai/HiDream-O1-Image](https://www.modelscope.cn/models/HiDream-ai/HiDream-O1-Image) 模型并进行推理。显存管理已启动,框架会自动根据剩余显存控制模型参数的加载,最低 3G 显存即可运行。 + +```python +from diffsynth.pipelines.hidream_o1_image import HiDreamO1ImagePipeline +from diffsynth.core.loader.config import ModelConfig +import torch + + +vram_config = { + "offload_dtype": torch.bfloat16, + "offload_device": "cpu", + "onload_dtype": torch.bfloat16, + "onload_device": "cpu", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} + + +pipe = HiDreamO1ImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="HiDream-ai/HiDream-O1-Image", origin_file_pattern="model-*.safetensors", **vram_config), + ], + processor_config=ModelConfig(model_id="HiDream-ai/HiDream-O1-Image", origin_file_pattern="./"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) +image = pipe( + prompt="medium shot, eye-level, front view. A woman is seated in an ornate bedroom, illuminated by candlelight, with a calm and composed expression. The subject is a young woman with fair skin, light brown hair styled in an updo with loose tendrils framing her face, and blue eyes. She wears a cream-colored satin robe with delicate floral embroidery and lace trim along the neckline. Her ears are adorned with pearl drop earrings. She is seated on a bed with a dark, intricately carved wooden headboard. To her left, a wooden nightstand holds three lit white candles and a candelabra with multiple lit candles in the background. The bed is covered with patterned pillows and a dark, textured blanket. The walls are paneled with dark wood and feature a large, ornate tapestry with muted earth tones. The lighting creates soft highlights on her face and robe, with warm shadows cast across the room.", + negative_prompt=" ", + cfg_scale=4.0, + height=2048, + width=2048, + seed=42, + num_inference_steps=50, +) +image.save("image.jpg") +``` + +## 模型总览 + +|模型 ID|推理|低显存推理|全量训练|全量训练后验证|LoRA 训练|LoRA 训练后验证| +|-|-|-|-|-|-|-| +|[HiDream-ai/HiDream-O1-Image](https://www.modelscope.cn/models/HiDream-ai/HiDream-O1-Image)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/hidream_o1_image/model_inference/HiDream-O1-Image.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/hidream_o1_image/model_inference_low_vram/HiDream-O1-Image.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/hidream_o1_image/model_training/full/HiDream-O1-Image.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/hidream_o1_image/model_training/validate_full/HiDream-O1-Image.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/hidream_o1_image/model_training/lora/HiDream-O1-Image.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/hidream_o1_image/model_training/validate_lora/HiDream-O1-Image.py)| +|[HiDream-ai/HiDream-O1-Image-Dev](https://www.modelscope.cn/models/HiDream-ai/HiDream-O1-Image-Dev)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/hidream_o1_image/model_inference/HiDream-O1-Image-Dev.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/hidream_o1_image/model_inference_low_vram/HiDream-O1-Image-Dev.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/hidream_o1_image/model_training/full/HiDream-O1-Image-Dev.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/hidream_o1_image/model_training/validate_full/HiDream-O1-Image-Dev.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/hidream_o1_image/model_training/lora/HiDream-O1-Image-Dev.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/hidream_o1_image/model_training/validate_lora/HiDream-O1-Image-Dev.py)| +|[DiffSynth-Studio/HidreamO1-i2L-v2](https://www.modelscope.cn/models/DiffSynth-Studio/HidreamO1-i2L-v2)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/hidream_o1_image/model_inference/HidreamO1-i2L-v2.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/hidream_o1_image/model_inference_low_vram/HidreamO1-i2L-v2.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/hidream_o1_image/model_training/full/HidreamO1-i2L-v2.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/hidream_o1_image/model_training/validate_full/HidreamO1-i2L-v2.py)|-|-| + +## 模型推理 + +模型通过 `HiDreamO1ImagePipeline.from_pretrained` 加载,详见[加载模型](../Pipeline_Usage/Model_Inference.md#加载模型)。 + +`HiDreamO1ImagePipeline` 推理的输入参数包括: + +* `prompt`: 文本提示词。 +* `negative_prompt`: 负向提示词,默认为 `" "`。 +* `cfg_scale`: Classifier-Free Guidance 缩放系数,默认为 4.0。Dev 模型建议设为 1.0。 +* `height`: 输出图像高度,默认为 2048。 +* `width`: 输出图像宽度,默认为 2048。 +* `seed`: 随机种子,默认为随机。 +* `rand_device`: 噪声生成设备,默认为 `"cpu"`。 +* `num_inference_steps`: 推理步数,Full 模型默认为 50,Dev 模型默认为 28。 +* `model_type`: 模型类型,`"full"` 表示 Full 模型,`"dev"` 表示 Dev 蒸馏模型。 +* `shift`: 时间步偏移量,影响 sigma 计算,默认为 3.0。 +* `noise_scale`: 噪声缩放系数,默认为 8.0,Dev 模型建议设为 7.5。 +* `edit_image`: 参考图像列表,用于图像编辑功能。默认为 None(文生图模式)。 +* `keep_original_aspect`: 是否保持参考图像原始宽高比,默认为 True。 + +> **显存提示**: HiDream-O1-Image 模型参数量较大(~8B),生成 2048x2048 图像时建议开启显存管理(vram_config),或使用低显存推理脚本。 + +## 模型训练 + +hidream_o1_image 系列模型统一通过 `examples/hidream_o1_image/model_training/train.py` 进行训练,脚本的参数包括: + +* 通用训练参数 + * 数据集基础配置 + * `--dataset_base_path`: 数据集的根目录。 + * `--dataset_metadata_path`: 数据集的元数据文件路径。 + * `--dataset_repeat`: 每个 epoch 中数据集重复的次数。 + * `--dataset_num_workers`: 每个 Dataloader 的进程数量。 + * `--data_file_keys`: 元数据中需要加载的字段名称,通常是图像或视频文件的路径,以 `,` 分隔。 + * 模型加载配置 + * `--model_paths`: 要加载的模型路径。JSON 格式。 + * `--model_id_with_origin_paths`: 带原始路径的模型 ID。用逗号分隔。 + * `--extra_inputs`: 模型 Pipeline 所需的额外输入参数,以 `,` 分隔。 + * `--fp8_models`: 以 FP8 格式加载的模型,目前仅支持参数不被梯度更新的模型。 + * `--quant_options`:对加载的模型进行动态量化。以 `;` 分隔多个条目,每个为 `<模型字符串>:[/]`,`<模型字符串>` 需与 `--model_paths`/`--model_id_with_origin_paths` 中的一致,`method` 为已注册的量化方法(如 `bitsandbytes_nf4`),`exclude_modules` 为可选的保持全精度的层。 + * 训练基础配置 + * `--learning_rate`: 学习率。 + * `--num_epochs`: 轮数(Epoch)。 + * `--trainable_models`: 可训练的模型,例如 `dit`、`vae`、`text_encoder`。 + * `--find_unused_parameters`: DDP 训练中是否存在未使用的参数。 + * `--weight_decay`: 权重衰减大小。 + * `--task`: 训练任务,默认为 `sft`。 + * 输出配置 + * `--output_path`: 模型保存路径。 + * `--remove_prefix_in_ckpt`: 在模型文件的 state dict 中移除前缀。 + * `--save_steps`: 保存模型的训练步数间隔。 + * LoRA 配置 + * `--lora_base_model`: LoRA 添加到哪个模型上。 + * `--lora_target_modules`: LoRA 添加到哪些层上。 + * `--lora_rank`: LoRA 的秩(Rank)。 + * `--lora_checkpoint`: LoRA 检查点的路径。 + * `--preset_lora_path`: 预置 LoRA 检查点路径,用于 LoRA 差分训练。 + * `--preset_lora_model`: 预置 LoRA 融入的模型,例如 `dit`。 + * 梯度配置 + * `--use_gradient_checkpointing`: 是否启用 gradient checkpointing。 + * `--use_gradient_checkpointing_offload`: 是否将 gradient checkpointing 卸载到内存中。 + * `--gradient_accumulation_steps`: 梯度累积步数。 + * 分辨率配置 + * `--height`: 图像/视频的高度。留空启用动态分辨率。 + * `--width`: 图像/视频的宽度。留空启用动态分辨率。 + * `--max_pixels`: 最大像素面积,动态分辨率时大于此值的图片会被缩小。 + * `--num_frames`: 视频的帧数(仅视频生成模型)。 +* HiDream-O1-Image 专有参数 + * `--processor_config`: Processor 配置文件路径,用于加载 AutoProcessor 进行文本 tokenization。 + * `--noise_scale`: 噪声缩放系数,默认为 8.0。 + * `--initialize_model_on_cpu`: 是否在 CPU 上初始化模型,启用后可降低 GPU 显存峰值。 + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --local_dir ./data/diffsynth_example_dataset +``` + +我们为每个模型编写了推荐的训练脚本,请参考前文"模型总览"中的表格。关于如何编写模型训练脚本,请参考[模型训练](../Pipeline_Usage/Model_Training.md);更多高阶训练算法,请参考[训练框架详解](https://github.com/modelscope/DiffSynth-Studio/tree/main/docs/zh/Training/)。 diff --git a/docs/zh/Model_Details/Ideogram-4.md b/docs/zh/Model_Details/Ideogram-4.md new file mode 100644 index 0000000000000000000000000000000000000000..e1045486a4a08f9bd2fa7abfc10d3d6071a9ffa3 --- /dev/null +++ b/docs/zh/Model_Details/Ideogram-4.md @@ -0,0 +1,151 @@ +# Ideogram 4 + +Ideogram 4 是由 Ideogram 开源的图像生成模型。DiffSynth-Studio 支持 FP8 量化版本和 BF16 重打包版本的推理、低显存推理,以及全量训练和 LoRA 训练。 + +## 安装 + +在使用本项目进行模型推理和训练前,请先安装 DiffSynth-Studio。 + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +更多关于安装的信息,请参考[安装依赖](../Pipeline_Usage/Setup.md)。 + +## 快速开始 + +运行以下代码可以快速加载 [ideogram-ai/ideogram-4-fp8](https://www.modelscope.cn/models/ideogram-ai/ideogram-4-fp8) 模型并进行推理。最低 24G 显存即可运行。 + +```python +from diffsynth.pipelines.ideogram4 import Ideogram4Pipeline +from diffsynth.core import ModelConfig +import torch + + +pipe = Ideogram4Pipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ideogram-ai/ideogram-4-fp8", origin_file_pattern="transformer/diffusion_pytorch_model.safetensors"), + # unconditional_transformer is optional. You can delete this line to reduce VRAM required. + ModelConfig(model_id="ideogram-ai/ideogram-4-fp8", origin_file_pattern="unconditional_transformer/diffusion_pytorch_model.safetensors"), + ModelConfig(model_id="ideogram-ai/ideogram-4-fp8", origin_file_pattern="text_encoder/model.safetensors"), + ModelConfig(model_id="ideogram-ai/ideogram-4-fp8", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + tokenizer_config=ModelConfig(model_id="ideogram-ai/ideogram-4-fp8", origin_file_pattern="tokenizer/"), +) +prompt = r""" +{ + "high_level_description": "A medium-shot photograph of Formula 1 driver Max Verstappen wearing his Red Bull Racing racing suit and cap, smiling as he holds his racing helmet and talks to a man in a white shirt and black vest at a race track.", + "style_description": { + "aesthetics": "saturated primary colors, rule of thirds, joyful and triumphant", + "lighting": "overcast daylight, diffused, soft subtle shadows", + "photo": "shallow depth of field, sharp focus, eye-level, telephoto", + "medium": "photograph" + }, + "compositional_deconstruction": { + "background": "The background is an out-of-focus racing paddock or track environment. Several blurred figures are visible, including one in an orange shirt. A purple and white structure with a red 'F1' logo stands on the left. The scene is outdoors with daylight, though the sky is not visible.", + "elements": [ + {"type": "obj", "bbox": [55, 642, 1000, 937], "desc": "An older man standing in profile, facing left toward Max Verstappen. He has grey hair and fair skin. He is wearing a white long-sleeved button-down shirt with a navy blue quilted vest over it. He has a slight smile."}, + {"type": "obj", "bbox": [34, 137, 1000, 617], "desc": "Max Verstappen, a fair-skinned male Formula 1 driver, positioned in the center. He is facing forward with a joyful expression and a slight smile. He wears a navy blue Red Bull Racing team uniform with numerous sponsor logos and a matching baseball cap with the number '1'. He is holding a white and red racing helmet in his hands. He has a silver watch on his left wrist."}, + {"type": "obj", "bbox": [422, 212, 792, 452], "desc": "Max Verstappen's racing helmet, held in front of his chest. It features a white, red, and yellow design with the Red Bull logo and the 'Player 0.0' branding. The visor is clear and open."}, + {"type": "text", "bbox": [657, 0, 755, 142], "text": "F1", "desc": "Large, stylized red logo on a black and purple background in the lower left."}, + {"type": "text", "bbox": [768, 0, 818, 147], "text": "Formula 1\nWorld Championship™", "desc": "Small white sans-serif text below the F1 logo on the left side."}, + {"type": "text", "bbox": [78, 447, 117, 510], "text": "ORACLE\nRed Bull\nRacing", "desc": "Very small white and orange logo on the front of the navy blue cap."}, + {"type": "text", "bbox": [78, 417, 120, 440], "text": "1", "desc": "Bold red numeral '1' on the front left side of the navy blue cap."}, + {"type": "text", "bbox": [332, 442, 363, 483], "text": "Red Bull", "desc": "Small yellow and red text logo on the collar of the uniform."}, + {"type": "text", "bbox": [373, 490, 423, 532], "text": "RAUCH", "desc": "Small yellow and blue logo on the right chest of the uniform."}, + {"type": "text", "bbox": [422, 473, 500, 532], "text": "BYBIT\nHONDA", "desc": "Medium-sized white sans-serif text on the right chest of the uniform."}, + {"type": "text", "bbox": [410, 203, 442, 257], "text": "RAUCH", "desc": "Small yellow logo on the left upper arm of the uniform."}, + {"type": "text", "bbox": [530, 448, 627, 510], "text": "Red Bull", "desc": "Medium red text logo on the right side of the torso, part of the Red Bull graphic."}, + {"type": "text", "bbox": [680, 417, 768, 523], "text": "Red Bull", "desc": "Large red text logo across the lower torso of the uniform."}, + {"type": "text", "bbox": [797, 475, 815, 518], "text": "MAX", "desc": "Small white text next to a Dutch flag on the belt area of the uniform."}, + {"type": "text", "bbox": [558, 317, 715, 355], "text": "Player 0.0", "desc": "Black sans-serif text on a white band on the racing helmet."}, + {"type": "text", "bbox": [560, 800, 582, 835], "text": "IA.COM", "desc": "Small blue sans-serif text on the right sleeve of the white shirt."}, + {"type": "text", "bbox": [968, 8, 997, 332], "text": "© Anadolu Agency via Getty Images", "desc": "Small white watermark text in the bottom left corner."} + ] + } +} +""" +image = pipe(prompt=prompt, height=1024, width=1024, num_inference_steps=48, cfg_scale=7.0, seed=42) +image.save("image_ideogram-4-fp8.jpg") +``` + +## 模型总览 + +|模型 ID|推理|低显存推理|全量训练|全量训练后验证|LoRA 训练|LoRA 训练后验证| +|-|-|-|-|-|-|-| +|[ideogram-ai/ideogram-4-fp8](https://www.modelscope.cn/models/ideogram-ai/ideogram-4-fp8)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ideogram4/model_inference/ideogram-4-fp8.py)|-|-|-|-|-| +|[DiffSynth-Studio/ideogram-4-bf16-repackage](https://www.modelscope.cn/models/DiffSynth-Studio/ideogram-4-bf16-repackage)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ideogram4/model_inference/ideogram-4-bf16-repackage.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ideogram4/model_inference_low_vram/ideogram-4-bf16-repackage.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ideogram4/model_training/full/Ideogram-4-bf16-repackage.sh)|-|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ideogram4/model_training/lora/Ideogram-4-bf16-repackage.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ideogram4/model_training/validate_lora/Ideogram-4-bf16-repackage.py)| + +## 模型推理 + +模型通过 `Ideogram4Pipeline.from_pretrained` 加载,详见[加载模型](../Pipeline_Usage/Model_Inference.md#加载模型)。 + +`Ideogram4Pipeline` 推理的输入参数包括: + +* `prompt`: 提示词,描述画面中出现的内容。Ideogram 4 支持结构化的 JSON 格式提示词,包含高层描述、风格描述和构图解构等信息。 +* `negative_prompt`: 负向提示词,描述画面中不应该出现的内容,默认值为 `""`。 +* `cfg_scale`: Classifier-free guidance 的参数,默认值为 7.0。 +* `input_image`: 输入图像,用于图生图,该参数与 `denoising_strength` 配合使用。 +* `denoising_strength`: 去噪强度,范围是 0~1,默认值为 1。当数值接近 0 时,生成图像与输入图像相似;当数值接近 1 时,生成图像与输入图像相差更大。在不输入 `input_image` 参数时,请不要将其设置为非 1 的数值。 +* `height`: 图像高度,需保证高度为 16 的倍数,默认值为 1024。 +* `width`: 图像宽度,需保证宽度为 16 的倍数,默认值为 1024。 +* `seed`: 随机种子。默认为 `None`,即完全随机。 +* `rand_device`: 生成随机高斯噪声矩阵的计算设备,默认为 `"cpu"`。 +* `num_inference_steps`: 推理次数,默认值为 50。 + +## 模型训练 + +ideogram4 系列模型统一通过 `examples/ideogram4/model_training/train.py` 进行训练,脚本的参数包括: + +* 通用训练参数 + * 数据集基础配置 + * `--dataset_base_path`: 数据集的根目录。 + * `--dataset_metadata_path`: 数据集的元数据文件路径。 + * `--dataset_repeat`: 每个 epoch 中数据集重复的次数。 + * `--dataset_num_workers`: 每个 Dataloader 的进程数量。 + * `--data_file_keys`: 元数据中需要加载的字段名称,通常是图像或视频文件的路径,以 `,` 分隔。 + * 模型加载配置 + * `--model_paths`: 要加载的模型路径。JSON 格式。 + * `--model_id_with_origin_paths`: 带原始路径的模型 ID。用逗号分隔。 + * `--extra_inputs`: 模型 Pipeline 所需的额外输入参数,以 `,` 分隔。 + * `--fp8_models`: 以 FP8 格式加载的模型,目前仅支持参数不被梯度更新的模型。 + * `--quant_options`:对加载的模型进行动态量化。以 `;` 分隔多个条目,每个为 `<模型字符串>:[/]`,`<模型字符串>` 需与 `--model_paths`/`--model_id_with_origin_paths` 中的一致,`method` 为已注册的量化方法(如 `bitsandbytes_nf4`),`exclude_modules` 为可选的保持全精度的层。 + * 训练基础配置 + * `--learning_rate`: 学习率。 + * `--num_epochs`: 轮数(Epoch)。 + * `--trainable_models`: 可训练的模型,例如 `dit`、`vae`、`text_encoder`。 + * `--find_unused_parameters`: DDP 训练中是否存在未使用的参数。 + * `--weight_decay`: 权重衰减大小。 + * `--task`: 训练任务,默认为 `sft`。 + * 输出配置 + * `--output_path`: 模型保存路径。 + * `--remove_prefix_in_ckpt`: 在模型文件的 state dict 中移除前缀。 + * `--save_steps`: 保存模型的训练步数间隔。 + * LoRA 配置 + * `--lora_base_model`: LoRA 添加到哪个模型上。 + * `--lora_target_modules`: LoRA 添加到哪些层上。 + * `--lora_rank`: LoRA 的秩(Rank)。 + * `--lora_checkpoint`: LoRA 检查点的路径。 + * `--preset_lora_path`: 预置 LoRA 检查点路径,用于 LoRA 差分训练。 + * `--preset_lora_model`: 预置 LoRA 融入的模型,例如 `dit`。 + * 梯度配置 + * `--use_gradient_checkpointing`: 是否启用 gradient checkpointing。 + * `--use_gradient_checkpointing_offload`: 是否将 gradient checkpointing 卸载到内存中。 + * `--gradient_accumulation_steps`: 梯度累积步数。 + * 分辨率配置 + * `--height`: 图像/视频的高度。留空启用动态分辨率。 + * `--width`: 图像/视频的宽度。留空启用动态分辨率。 + * `--max_pixels`: 最大像素面积,动态分辨率时大于此值的图片会被缩小。 + * `--num_frames`: 视频的帧数(仅视频生成模型)。 +* Ideogram-4 专有参数 + * `--tokenizer_path`: Tokenizer 路径。默认从 `ideogram-ai/ideogram-4-fp8` 下载。 + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --local_dir ./data/diffsynth_example_dataset +``` + +我们为每个模型编写了推荐的训练脚本,请参考前文"模型总览"中的表格。关于如何编写模型训练脚本,请参考[模型训练](../Pipeline_Usage/Model_Training.md);更多高阶训练算法,请参考[训练框架详解](https://github.com/modelscope/DiffSynth-Studio/tree/main/docs/zh/Training/)。 diff --git a/docs/zh/Model_Details/Image-Quality-Metrics.md b/docs/zh/Model_Details/Image-Quality-Metrics.md new file mode 100644 index 0000000000000000000000000000000000000000..a4eacb2e39253662530cc7fc0d8ca13166689ae4 --- /dev/null +++ b/docs/zh/Model_Details/Image-Quality-Metrics.md @@ -0,0 +1,178 @@ +# 图像质量评估指标 + +DiffSynth-Studio 在 `diffsynth.metrics` 中提供了一组图像质量评估指标和奖励模型,用于评估生成图像的文本对齐、审美质量、人类偏好和图像分布质量。这些指标的示例代码位于 [`examples/image_quality_metric/`](../../../examples/image_quality_metric/)。 + +## 安装 + +在使用本项目进行模型推理和训练前,请先安装 DiffSynth-Studio。 + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +更多关于安装的信息,请参考[安装依赖](../Pipeline_Usage/Setup.md)。 + +## 快速开始 + +运行以下代码可以快速加载 PickScore,并对一张图像和一段提示词进行评分。默认模型会从 ModelScope 下载到 `./models`。 + +```python +from diffsynth.metrics import PickScoreMetric, ModelConfig +from modelscope import dataset_snapshot_download +from PIL import Image + +dataset_snapshot_download( + "DiffSynth-Studio/diffsynth_example_dataset", + allow_file_pattern="flux/FLUX.1-dev/*", + local_dir="./data/diffsynth_example_dataset", +) +image = Image.open("data/diffsynth_example_dataset/flux/FLUX.1-dev/1.jpg").convert("RGB") +prompt = "a dog" +metric = PickScoreMetric.from_pretrained( + model_config=ModelConfig(model_id="DiffSynth-Studio/ImageMetrics", origin_file_pattern="PickScore/model.safetensors"), + device="cuda" +) +score = metric.compute(prompt, image)[0] +print(f"PickScore score:: {score:.3f}") +``` + +## 指标总览 + +|指标|输入|输出|示例代码| +|-|-|-|-| +|PickScore|prompt + PIL 图像|偏好分数|[code](../../../examples/image_quality_metric/pickscore.py)| +|ImageReward|prompt + PIL 图像|偏好分数|[code](../../../examples/image_quality_metric/image_reward.py)| +|HPSv2|prompt + PIL 图像|偏好分数|[code](../../../examples/image_quality_metric/hpsv2.py)| +|HPSv3|prompt + PIL 图像|偏好分数|[code](../../../examples/image_quality_metric/hpsv3.py)| +|CLIP Score|prompt + PIL 图像|图文匹配度|[code](../../../examples/image_quality_metric/clipscore.py)| +|UnifiedReward 2.0|prompt + PIL 图像|多维度分数|[code](../../../examples/image_quality_metric/unified_reward_2.py)| +|Qwen-Image-Bench|prompt + PIL 图像|多级维度分数|[code](../../../examples/image_quality_metric/qwen_image_bench.py)| +|UnifiedReward Edit|编辑指令 + 源图 + 编辑图|图像编辑质量分数|[code](../../../examples/image_quality_metric/unified_reward_edit.py)| +|Aesthetic|PIL 图像|美学分数|[code](../../../examples/image_quality_metric/aesthetic.py)| +|FID|reference 图像目录 + generated 图像目录|分布距离|[code](../../../examples/image_quality_metric/fid.py)| + +### 文本-图像对齐与偏好评估 + +适用指标: **PickScore**,**ImageReward**,**HPSv2**,**HPSv3**,**CLIP Score**,**UnifiedReward 2.0**,**Qwen-Image-Bench** + +这类模型用于评估图像是否遵循提示词以及是否符合人类视觉偏好。它们必须同时接收 `prompt` 和 `image`。 + +**基础打分** +```python +score = metric.compute(prompt, image)[0] +``` + +**批量打分** +如果需要评估多张图像,可以直接传入列表: + +```python +scores = metric.compute("a cute cat", [image1, image2, image3]) + +scores = metric.compute(["a cat", "a dog"], [image_cat, image_dog]) +``` + +其中 prompt 为单个字符串时,会对每张图像使用同一个 prompt。prompt 为字符串列表时,prompt 数量需要和图像数量一致。 + +### 多维度图像质量评估 + +适用指标: **UnifiedReward 2.0**,**Qwen-Image-Bench** + +这两个指标同样接收 `prompt` 和 `image`,但除了主分数外,还会通过 `evaluate()` 返回更细的评估维度,适合需要分析图文对齐、画面一致性、风格或多级质量维度的场景。 + +**Qwen-Image-Bench** + +```python +from diffsynth.metrics import ModelConfig, QwenImageBenchMetric + +metric = QwenImageBenchMetric.from_pretrained( + model_config=ModelConfig( + model_id="Qwen/Qwen-Image-Bench", + origin_file_pattern="model-*.safetensors", + ), + processor_config=ModelConfig( + model_id="Qwen/Qwen-Image-Bench", + origin_file_pattern="", + ), + device="cuda", +) +details = metric.evaluate(prompt, image)[0] +score = details["total_score"] +print(details["level1_scores"]) +print(details["level2_scores"]) +``` + +如果只需要主分数,也可以调用 `metric.compute(prompt, image)`。 + +### 图像编辑质量评估 + +适用指标: **UnifiedReward Edit** + +UnifiedReward Edit 用于评估编辑结果是否遵循编辑指令,并衡量是否存在过度编辑。输入通常包括编辑指令、源图和编辑图。它支持三种任务: + +* `edit_pointwise_score`:对单个编辑结果打分,输入为 `[source_image, edited_image]`。 +* `edit_pairwise_rank`:比较两个编辑结果并返回胜者,输入为 `[source_image, edited_image_1, edited_image_2]`。 +* `edit_pairwise_score`:分别返回两个编辑结果的分数,输入为 `[source_image, edited_image_1, edited_image_2]`。 + +```python +from diffsynth.metrics import ModelConfig, UnifiedRewardEditMetric + +metric = UnifiedRewardEditMetric.from_pretrained( + model_config=ModelConfig( + model_id="DiffSynth-Studio/ImageMetrics", + origin_file_pattern="UnifiedReward-Edit-qwen3vl-8b/model-*.safetensors", + ), + processor_config=ModelConfig( + model_id="DiffSynth-Studio/ImageMetrics", + origin_file_pattern="UnifiedReward-Edit-qwen3vl-8b/", + ), + device="cuda", +) + +details = metric.evaluate( + instruction, + [source_image, edited_image], + task="edit_pointwise_score", +)[0] +print(details["score"], details["editing_success"], details["overediting"]) +``` + +### 纯图像美学评估 + +适用指标: **Aesthetic** + +该模型仅评估图像本身的构图、色彩、清晰度等美学特征,不需要提示词介入。 + + +```python +from diffsynth.metrics import AestheticMetric + +metric = AestheticMetric.from_pretrained(device="cuda") +score = metric.compute(image)[0] +``` + +### 数据集分布评估 +适用指标: **FID** (Fréchet Inception Distance) + +FID 不对单张图片打分,而是比较真实参考图像集与生成图像集的整体特征分布距离。分数越低,说明生成分布越接近真实分布。 + +```python +from diffsynth.metrics import FIDMetric + +reference_dir = "path/to/real_reference_images" +generated_dir = "path/to/model_generated_images" + +metric = FIDMetric.from_pretrained(device="cuda", batch_size=16) +fid_score = metric.compute(reference_dir, generated_dir) +print(f"FID: {fid_score:.3f}") +``` + +FID 的基准不是固定唯一的。对于通用图像生成,常使用 COCO Validation;如果是特定领域(如医学图像、电商商品),应提供该领域真实数据构成的 `reference_dir`。 + + +## 注意事项 + +* PickScore、ImageReward、HPSv2、HPSv3、CLIPScore、UnifiedReward 2.0、Qwen-Image-Bench、UnifiedReward Edit、Aesthetic 的分数适合做同一指标内部的相对比较,不建议直接把不同指标的数值大小相互比较。 +* HPSv3、UnifiedReward 2.0、UnifiedReward Edit 和 Qwen-Image-Bench 基于多模态大模型,显存需求明显高于 CLIP 类指标。 +* FID 对 reference 选择、样本量和 generated 样本量较敏感。 diff --git a/docs/zh/Model_Details/JoyAI-Image.md b/docs/zh/Model_Details/JoyAI-Image.md new file mode 100644 index 0000000000000000000000000000000000000000..67dea99f758204c42fa4d2aad06ea5d0a3756a93 --- /dev/null +++ b/docs/zh/Model_Details/JoyAI-Image.md @@ -0,0 +1,155 @@ +# JoyAI-Image + +JoyAI-Image 是京东开源的统一多模态基础模型,支持图像理解、文生图生成和指令引导的图像编辑。 + +## 安装 + +在使用本项目进行模型推理和训练前,请先安装 DiffSynth-Studio。 + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +更多关于安装的信息,请参考[安装依赖](../Pipeline_Usage/Setup.md)。 + +## 快速开始 + +运行以下代码可以快速加载 [jd-opensource/JoyAI-Image-Edit](https://modelscope.cn/models/jd-opensource/JoyAI-Image-Edit) 模型并进行推理。显存管理已启动,框架会自动根据剩余显存控制模型参数的加载,最低 4G 显存即可运行。 + +```python +from diffsynth.pipelines.joyai_image import JoyAIImagePipeline, ModelConfig +import torch +from PIL import Image +from modelscope import dataset_snapshot_download + +# Download dataset +dataset_snapshot_download( + dataset_id="DiffSynth-Studio/diffsynth_example_dataset", + local_dir="data/diffsynth_example_dataset", + allow_file_pattern="joyai_image/JoyAI-Image-Edit/*" +) + +vram_config = { + "offload_dtype": torch.bfloat16, + "offload_device": "cpu", + "onload_dtype": torch.bfloat16, + "onload_device": "cpu", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} + +pipe = JoyAIImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="jd-opensource/JoyAI-Image-Edit", origin_file_pattern="transformer/transformer.pth", **vram_config), + ModelConfig(model_id="jd-opensource/JoyAI-Image-Edit", origin_file_pattern="JoyAI-Image-Und/model*.safetensors", **vram_config), + ModelConfig(model_id="jd-opensource/JoyAI-Image-Edit", origin_file_pattern="vae/Wan2.1_VAE.pth", **vram_config), + ], + processor_config=ModelConfig(model_id="jd-opensource/JoyAI-Image-Edit", origin_file_pattern="JoyAI-Image-Und/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) + +# Use first sample from dataset +dataset_base_path = "data/diffsynth_example_dataset/joyai_image/JoyAI-Image-Edit" +prompt = "将裙子改为粉色" +edit_image = Image.open(f"{dataset_base_path}/edit/image1.jpg").convert("RGB") + +output = pipe( + prompt=prompt, + edit_image=edit_image, + height=1024, + width=1024, + seed=0, + num_inference_steps=30, + cfg_scale=5.0, +) + +output.save("output_joyai_edit_low_vram.png") +``` + +## 模型总览 + +|模型 ID|推理|低显存推理|全量训练|全量训练后验证|LoRA 训练|LoRA 训练后验证| +|-|-|-|-|-|-|-| +|[jd-opensource/JoyAI-Image-Edit](https://modelscope.cn/models/jd-opensource/JoyAI-Image-Edit)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/joyai_image/model_inference/JoyAI-Image-Edit.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/joyai_image/model_inference_low_vram/JoyAI-Image-Edit.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/joyai_image/model_training/full/JoyAI-Image-Edit.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/joyai_image/model_training/validate_full/JoyAI-Image-Edit.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/joyai_image/model_training/lora/JoyAI-Image-Edit.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/joyai_image/model_training/validate_lora/JoyAI-Image-Edit.py)| + +## 模型推理 + +模型通过 `JoyAIImagePipeline.from_pretrained` 加载,详见[加载模型](../Pipeline_Usage/Model_Inference.md#加载模型)。 + +`JoyAIImagePipeline` 推理的输入参数包括: + +* `prompt`: 文本提示词,用于描述期望的图像编辑效果。 +* `negative_prompt`: 负向提示词,指定不希望出现在结果中的内容,默认为空字符串。 +* `cfg_scale`: 分类器自由引导的缩放系数,默认为 5.0。值越大,生成结果越贴近 prompt 描述。 +* `edit_image`: 待编辑的单张图像。 +* `denoising_strength`: 降噪强度,控制输入图像被重绘的程度,默认为 1.0。 +* `height`: 输出图像的高度,默认为 1024。需能被 16 整除。 +* `width`: 输出图像的宽度,默认为 1024。需能被 16 整除。 +* `seed`: 随机种子,用于控制生成的可复现性。设为 `None` 时使用随机种子。 +* `max_sequence_length`: 文本编码器处理的最大序列长度,默认为 4096。 +* `num_inference_steps`: 推理步数,默认为 30。步数越多,生成质量通常越好。 +* `tiled`: 是否启用分块处理,用于降低显存占用,默认为 False。 +* `tile_size`: 分块大小,默认为 (30, 52)。 +* `tile_stride`: 分块步幅,默认为 (15, 26)。 +* `shift`: 调度器的 shift 参数,用于控制 Flow Match 的调度曲线,默认为 4.0。 +* `progress_bar_cmd`: 进度条显示方式,默认为 tqdm。 + +## 模型训练 + +joyai_image 系列模型统一通过 `examples/joyai_image/model_training/train.py` 进行训练,脚本的参数包括: + +* 通用训练参数 + * 数据集基础配置 + * `--dataset_base_path`: 数据集的根目录。 + * `--dataset_metadata_path`: 数据集的元数据文件路径。 + * `--dataset_repeat`: 每个 epoch 中数据集重复的次数。 + * `--dataset_num_workers`: 每个 Dataloader 的进程数量。 + * `--data_file_keys`: 元数据中需要加载的字段名称,通常是图像或视频文件的路径,以 `,` 分隔。 + * 模型加载配置 + * `--model_paths`: 要加载的模型路径。JSON 格式。 + * `--model_id_with_origin_paths`: 带原始路径的模型 ID。用逗号分隔。 + * `--extra_inputs`: 模型 Pipeline 所需的额外输入参数,以 `,` 分隔。 + * `--fp8_models`: 以 FP8 格式加载的模型,目前仅支持参数不被梯度更新的模型。 + * `--quant_options`:对加载的模型进行动态量化。以 `;` 分隔多个条目,每个为 `<模型字符串>:[/]`,`<模型字符串>` 需与 `--model_paths`/`--model_id_with_origin_paths` 中的一致,`method` 为已注册的量化方法(如 `bitsandbytes_nf4`),`exclude_modules` 为可选的保持全精度的层。 + * 训练基础配置 + * `--learning_rate`: 学习率。 + * `--num_epochs`: 轮数(Epoch)。 + * `--trainable_models`: 可训练的模型,例如 `dit`、`vae`、`text_encoder`。 + * `--find_unused_parameters`: DDP 训练中是否存在未使用的参数。 + * `--weight_decay`: 权重衰减大小。 + * `--task`: 训练任务,默认为 `sft`。 + * 输出配置 + * `--output_path`: 模型保存路径。 + * `--remove_prefix_in_ckpt`: 在模型文件的 state dict 中移除前缀。 + * `--save_steps`: 保存模型的训练步数间隔。 + * LoRA 配置 + * `--lora_base_model`: LoRA 添加到哪个模型上。 + * `--lora_target_modules`: LoRA 添加到哪些层上。 + * `--lora_rank`: LoRA 的秩(Rank)。 + * `--lora_checkpoint`: LoRA 检查点的路径。 + * `--preset_lora_path`: 预置 LoRA 检查点路径,用于 LoRA 差分训练。 + * `--preset_lora_model`: 预置 LoRA 融入的模型,例如 `dit`。 + * 梯度配置 + * `--use_gradient_checkpointing`: 是否启用 gradient checkpointing。 + * `--use_gradient_checkpointing_offload`: 是否将 gradient checkpointing 卸载到内存中。 + * `--gradient_accumulation_steps`: 梯度累积步数。 + * 分辨率配置 + * `--height`: 图像/视频的高度。留空启用动态分辨率。 + * `--width`: 图像/视频的宽度。留空启用动态分辨率。 + * `--max_pixels`: 最大像素面积,动态分辨率时大于此值的图片会被缩小。 + * `--num_frames`: 视频的帧数(仅视频生成模型)。 +* JoyAI-Image 专有参数 + * `--processor_path`: Processor 路径,用于处理文本和图像的编码器输入。 + * `--initialize_model_on_cpu`: 是否在 CPU 上初始化模型,默认在加速设备上初始化。 + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --local_dir ./data/diffsynth_example_dataset +``` + +关于如何编写模型训练脚本,请参考[模型训练](../Pipeline_Usage/Model_Training.md);更多高阶训练算法,请参考[训练框架详解](https://github.com/modelscope/DiffSynth-Studio/tree/main/docs/zh/Training/)。 diff --git a/docs/zh/Model_Details/Krea-2.md b/docs/zh/Model_Details/Krea-2.md new file mode 100644 index 0000000000000000000000000000000000000000..0b9ca0123e36f32099232b103afc128b5b6a35c7 --- /dev/null +++ b/docs/zh/Model_Details/Krea-2.md @@ -0,0 +1,137 @@ +# Krea-2 + +Krea-2 是由 Krea 团队开发的图像生成模型。 + +## 安装 + +在使用本项目进行模型推理和训练前,请先安装 DiffSynth-Studio。 + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +更多关于安装的信息,请参考[安装依赖](../Pipeline_Usage/Setup.md)。 + +## 快速开始 + +运行以下代码可以快速加载 [krea/Krea-2-Raw](https://www.modelscope.cn/models/krea/Krea-2-Raw) 模型并进行推理。显存管理已启动,框架会自动根据剩余显存控制模型参数的加载,最低 24G 显存即可运行。 + +```python +from diffsynth.pipelines.krea2 import Krea2Pipeline, ModelConfig +import torch + +vram_config = { + "offload_dtype": "disk", + "offload_device": "disk", + "onload_dtype": torch.float8_e4m3fn, + "onload_device": "cpu", + "preparing_dtype": torch.float8_e4m3fn, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} +pipe = Krea2Pipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="krea/Krea-2-Raw", origin_file_pattern="raw.safetensors", **vram_config), + ModelConfig(model_id="Qwen/Qwen3-VL-4B-Instruct", origin_file_pattern="*.safetensors", **vram_config), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="vae/diffusion_pytorch_model.safetensors", **vram_config), + ], + tokenizer_config=ModelConfig(model_id="Qwen/Qwen3-VL-4B-Instruct", origin_file_pattern=""), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 1, +) +prompt = "A cat standing on a stone." +image = pipe(prompt, seed=0, num_inference_steps=52, cfg_scale=4.5) +image.save("image.jpg") +``` + +## 模型总览 + +|模型 ID|推理|低显存推理|全量训练|全量训练后验证|LoRA 训练|LoRA 训练后验证| +|-|-|-|-|-|-|-| +|[krea/Krea-2-Raw](https://www.modelscope.cn/models/krea/Krea-2-Raw)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/krea2/model_inference/Krea-2-Raw.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/krea2/model_inference_low_vram/Krea-2-Raw.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/krea2/model_training/full/Krea-2-Raw.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/krea2/model_training/validate_full/Krea-2-Raw.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/krea2/model_training/lora/Krea-2-Raw.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/krea2/model_training/validate_lora/Krea-2-Raw.py)| +|[krea/Krea-2-Turbo](https://www.modelscope.cn/models/krea/Krea-2-Turbo)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/krea2/model_inference/Krea-2-Turbo.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/krea2/model_inference_low_vram/Krea-2-Turbo.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/krea2/model_training/full/Krea-2-Turbo.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/krea2/model_training/validate_full/Krea-2-Turbo.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/krea2/model_training/lora/Krea-2-Turbo.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/krea2/model_training/validate_lora/Krea-2-Turbo.py)| + +## 模型推理 + +模型通过 `Krea2Pipeline.from_pretrained` 加载,详见[加载模型](../Pipeline_Usage/Model_Inference.md#加载模型)。 + +`Krea2Pipeline` 推理的输入参数包括: + +* `prompt`: 提示词,描述要生成的图像内容,默认值为 `""`。 +* `negative_prompt`: 负向提示词,描述图像中不应该出现的内容,默认值为 `""`。 +* `cfg_scale`: Classifier-free guidance 的参数,默认值为 3.5。 +* `height`: 图像高度,需保证为 16 的倍数,默认值为 1024。 +* `width`: 图像宽度,需保证为 16 的倍数,默认值为 1024。 +* `seed`: 随机种子,默认为 `None`,即完全随机。 +* `rand_device`: 生成随机高斯噪声矩阵的计算设备,默认为 `"cpu"`。 +* `num_inference_steps`: 推理次数,默认值为 52。 +* `mu`: 时间步动态位移参数,默认为 `None`。 +* `progress_bar_cmd`: 进度条,默认为 `tqdm.tqdm`。可通过设置为 `lambda x:x` 来屏蔽进度条。 + +如果显存不足,请开启[显存管理](../Pipeline_Usage/VRAM_management.md),我们在示例代码中提供了每个模型推荐的低显存配置,详见前文"模型总览"中的表格。 + +## 模型训练 + +Krea-2 系列模型统一通过 [`examples/krea2/model_training/train.py`](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/krea2/model_training/train.py) 进行训练,脚本的参数包括: + +* 通用训练参数 + * 数据集基础配置 + * `--dataset_base_path`: 数据集的根目录。 + * `--dataset_metadata_path`: 数据集的元数据文件路径。 + * `--dataset_repeat`: 每个 epoch 中数据集重复的次数。 + * `--dataset_num_workers`: 每个 Dataloader 的进程数量。 + * `--data_file_keys`: 元数据中需要加载的字段名称,通常是图像或视频文件的路径,以 `,` 分隔。 + * 模型加载配置 + * `--model_paths`: 要加载的模型路径。JSON 格式。 + * `--model_id_with_origin_paths`: 带原始路径的模型 ID。用逗号分隔。 + * `--extra_inputs`: 模型 Pipeline 所需的额外输入参数,以 `,` 分隔。 + * `--fp8_models`: 以 FP8 格式加载的模型,目前仅支持参数不被梯度更新的模型。 + * `--quant_options`:对加载的模型进行动态量化。以 `;` 分隔多个条目,每个为 `<模型字符串>:[/]`,`<模型字符串>` 需与 `--model_paths`/`--model_id_with_origin_paths` 中的一致,`method` 为已注册的量化方法(如 `bitsandbytes_nf4`),`exclude_modules` 为可选的保持全精度的层。 + * 训练基础配置 + * `--learning_rate`: 学习率。 + * `--num_epochs`: 轮数(Epoch)。 + * `--trainable_models`: 可训练的模型,例如 `dit`、`vae`、`text_encoder`。 + * `--find_unused_parameters`: DDP 训练中是否存在未使用的参数。 + * `--weight_decay`: 权重衰减大小。 + * `--task`: 训练任务,默认为 `sft`。 + * 输出配置 + * `--output_path`: 模型保存路径。 + * `--remove_prefix_in_ckpt`: 在模型文件的 state dict 中移除前缀。 + * `--save_steps`: 保存模型的训练步数间隔。 + * LoRA 配置 + * `--lora_base_model`: LoRA 添加到哪个模型上。 + * `--lora_target_modules`: LoRA 添加到哪些层上。 + * `--lora_rank`: LoRA 的秩(Rank)。 + * `--lora_checkpoint`: LoRA 检查点的路径。 + * `--preset_lora_path`: 预置 LoRA 检查点路径,用于 LoRA 差分训练。 + * `--preset_lora_model`: 预置 LoRA 融入的模型,例如 `dit`。 + * 梯度配置 + * `--use_gradient_checkpointing`: 是否启用 gradient checkpointing。 + * `--use_gradient_checkpointing_offload`: 是否将 gradient checkpointing 卸载到内存中。 + * `--gradient_accumulation_steps`: 梯度累积步数。 + * 分辨率配置 + * `--height`: 图像的高度。留空启用动态分辨率。 + * `--width`: 图像的宽度。留空启用动态分辨率。 + * `--max_pixels`: 最大像素面积,动态分辨率时大于此值的图片会被缩小。 +* Krea-2 专有参数 + * `--tokenizer_path`: tokenizer 的路径,留空则自动从远程下载。 + * `--initialize_model_on_cpu`: 是否在 CPU 上初始化模型。 + * `--align_to_opensource_format`: 是否将 LoRA 格式对齐为开源格式,适用于与其他框架兼容的 LoRA 模型。 + +我们构建了样例数据集,以方便您进行测试,通过以下命令可以下载这个数据集: + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "krea2/*" --local_dir ./data/diffsynth_example_dataset +``` + +我们为每个模型编写了推荐的训练脚本,请参考前文"模型总览"中的表格。关于如何编写模型训练脚本,请参考[模型训练](../Pipeline_Usage/Model_Training.md);更多高阶训练算法,请参考[训练框架详解](https://github.com/modelscope/DiffSynth-Studio/tree/main/docs/zh/Training/)。 + + + +## 许可协议 + +> **⚠️ 提示**:**Krea-2** 权重(Raw 与 Turbo)遵循 [Krea 2 Community License](https://www.krea.ai/krea-2-licensing),**不同于** DiffSynth-Studio 本身的 Apache 2.0 协议。 \ No newline at end of file diff --git a/docs/zh/Model_Details/LTX-2.md b/docs/zh/Model_Details/LTX-2.md new file mode 100644 index 0000000000000000000000000000000000000000..6ba595be580108f1268c26798c37083658bf4f66 --- /dev/null +++ b/docs/zh/Model_Details/LTX-2.md @@ -0,0 +1,173 @@ +# LTX-2 + +LTX-2 是由 Lightricks 开发的音视频生成模型系列。 + +## 安装 + +在使用本项目进行模型推理和训练前,请先安装 DiffSynth-Studio。 + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +更多关于安装的信息,请参考[安装依赖](../Pipeline_Usage/Setup.md)。 + +## 快速开始 + +运行以下代码可以快速加载 [Lightricks/LTX-2.3](https://www.modelscope.cn/models/Lightricks/LTX-2.3) 模型并进行推理。显存管理已启动,框架会自动根据剩余显存控制模型参数的加载,最低 8GB 显存即可运行。 + +```python +import torch +from diffsynth.pipelines.ltx2_audio_video import LTX2AudioVideoPipeline, ModelConfig +from diffsynth.utils.data.media_io_ltx2 import write_video_audio_ltx2 + +vram_config = { + "offload_dtype": torch.bfloat16, + "offload_device": "cpu", + "onload_dtype": torch.bfloat16, + "onload_device": "cuda", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} +pipe = LTX2AudioVideoPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="google/gemma-3-12b-it-qat-q4_0-unquantized", origin_file_pattern="model-*.safetensors", **vram_config), + ModelConfig(model_id="Lightricks/LTX-2.3", origin_file_pattern="ltx-2.3-22b-dev.safetensors", **vram_config), + ModelConfig(model_id="Lightricks/LTX-2.3", origin_file_pattern="ltx-2.3-spatial-upscaler-x2-1.0.safetensors", **vram_config), + ], + tokenizer_config=ModelConfig(model_id="google/gemma-3-12b-it-qat-q4_0-unquantized"), + stage2_lora_config=ModelConfig(model_id="Lightricks/LTX-2.3", origin_file_pattern="ltx-2.3-22b-distilled-lora-384.safetensors"), +) +prompt = "Two cute orange cats, wearing boxing gloves, stand in a boxing ring and fight each other. They are punching each other fast and yelling: 'I will win!'" +negative_prompt = pipe.default_negative_prompt["LTX-2.3"] +video, audio = pipe( + prompt=prompt, + negative_prompt=negative_prompt, + seed=43, + height=1024, width=1536, num_frames=121, + tiled=True, use_two_stage_pipeline=True, +) +write_video_audio_ltx2(video=video, audio=audio, output_path='video.mp4', fps=24, audio_sample_rate=pipe.audio_vocoder.output_sampling_rate) +``` + +## 模型总览 +|模型 ID|额外参数|推理|低显存推理|全量训练|全量训练后验证|LoRA 训练|LoRA 训练后验证| +|-|-|-|-|-|-|-|-| +|[jd-opensource/JoyAI-Echo](https://modelscope.cn/models/jd-opensource/JoyAI-Echo)||[code](/examples/ltx2/model_inference/JoyAI-Echo-T2AV.py)|[code](/examples/ltx2/model_inference_low_vram/JoyAI-Echo-T2AV.py)|[code](/examples/ltx2/model_training/full/JoyAI-Echo-T2AV-splited.sh)|[code](/examples/ltx2/model_training/validate_full/JoyAI-Echo-T2AV.py)|[code](/examples/ltx2/model_training/lora/JoyAI-Echo-T2AV-splited.sh)|[code](/examples/ltx2/model_training/validate_lora/JoyAI-Echo-T2AV.py)| +|[Lightricks/LTX-2.3: OneStagePipeline-I2AV](https://www.modelscope.cn/models/Lightricks/LTX-2.3)|`input_images`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2.3-I2AV-OneStage.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2.3-I2AV-OneStage.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/full/LTX-2.3-I2AV-splited.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/validate_full/LTX-2.3-I2AV.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/lora/LTX-2.3-I2AV-splited.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/validate_lora/LTX-2.3-I2AV.py)| +|[Lightricks/LTX-2.3: TwoStagePipeline-I2AV](https://www.modelscope.cn/models/Lightricks/LTX-2.3)|`input_images`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2.3-I2AV-TwoStage.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2.3-I2AV-TwoStage.py)|-|-|-|-| +|[Lightricks/LTX-2.3: DistilledPipeline-I2AV](https://www.modelscope.cn/models/Lightricks/LTX-2.3)|`input_images`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2.3-I2AV-DistilledPipeline.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2.3-I2AV-DistilledPipeline.py)|-|-|-|-| +|[Lightricks/LTX-2.3: OneStagePipeline-T2AV](https://www.modelscope.cn/models/Lightricks/LTX-2.3)||[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2.3-T2AV-OneStage.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2.3-T2AV-OneStage.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/full/LTX-2.3-T2AV-splited.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/validate_full/LTX-2.3-T2AV.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/lora/LTX-2.3-T2AV-splited.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/validate_lora/LTX-2.3-T2AV.py)| +|[Lightricks/LTX-2.3: TwoStagePipeline-T2AV](https://www.modelscope.cn/models/Lightricks/LTX-2.3)||[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2.3-T2AV-TwoStage.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2.3-T2AV-TwoStage.py)|-|-|-|-| +|[Lightricks/LTX-2.3: DistilledPipeline-T2AV](https://www.modelscope.cn/models/Lightricks/LTX-2.3)||[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2.3-T2AV-DistilledPipeline.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2.3-T2AV-DistilledPipeline.py)|-|-|-|-| +|[Lightricks/LTX-2.3: A2V](https://www.modelscope.cn/models/Lightricks/LTX-2.3)|`retake_audio`,`audio_sample_rate`,`retake_audio_regions`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2.3-A2V-TwoStage.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2.3-A2V-TwoStage.py)|-|-|-|-| +|[Lightricks/LTX-2.3: Retake](https://www.modelscope.cn/models/Lightricks/LTX-2.3)|`retake_video`,`retake_video_regions`,`retake_audio`,`audio_sample_rate`,`retake_audio_regions`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2.3-T2AV-TwoStage-Retake.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2.3-T2AV-TwoStage-Retake.py)|-|-|-|-| +|[Lightricks/LTX-2.3-22b-IC-LoRA-Union-Control](https://www.modelscope.cn/models/Lightricks/LTX-2.3-22b-IC-LoRA-Union-Control)|`in_context_videos`,`in_context_downsample_factor`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2.3-T2AV-IC-LoRA-Union-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2.3-T2AV-IC-LoRA-Union-Control.py)|-|-|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/lora/LTX-2.3-T2AV-IC-LoRA-splited.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/validate_lora/LTX-2.3-T2AV-IC-LoRA.py)| +|[Lightricks/LTX-2.3-22b-IC-LoRA-Motion-Track-Control](https://www.modelscope.cn/models/Lightricks/LTX-2.3-22b-IC-LoRA-Motion-Track-Control)|`in_context_videos`,`in_context_downsample_factor`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2.3-T2AV-IC-LoRA-Motion-Track-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2.3-T2AV-IC-LoRA-Motion-Track-Control.py)|-|-|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/lora/LTX-2.3-T2AV-IC-LoRA-splited.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/validate_lora/LTX-2.3-T2AV-IC-LoRA.py)| +|[Lightricks/LTX-2: OneStagePipeline-T2AV](https://www.modelscope.cn/models/Lightricks/LTX-2)||[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2-T2AV-OneStage.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2-T2AV-OneStage.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/full/LTX-2-T2AV-splited.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/validate_full/LTX-2-T2AV.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/lora/LTX-2-T2AV-splited.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/validate_lora/LTX-2-T2AV.py)| +|[Lightricks/LTX-2-19b-IC-LoRA-Union-Control](https://www.modelscope.cn/models/Lightricks/LTX-2-19b-IC-LoRA-Union-Control)|`in_context_videos`,`in_context_downsample_factor`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2-T2AV-IC-LoRA-Union-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2-T2AV-IC-LoRA-Union-Control.py)|-|-|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/lora/LTX-2-T2AV-IC-LoRA-splited.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/validate_lora/LTX-2-T2AV-IC-LoRA.py)| +|[Lightricks/LTX-2-19b-IC-LoRA-Detailer](https://www.modelscope.cn/models/Lightricks/LTX-2-19b-IC-LoRA-Detailer)|`in_context_videos`,`in_context_downsample_factor`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2-T2AV-IC-LoRA-Detailer.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2-T2AV-IC-LoRA-Detailer.py)|-|-|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/lora/LTX-2-T2AV-IC-LoRA-splited.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/validate_lora/LTX-2-T2AV-IC-LoRA.py)| +|[Lightricks/LTX-2: TwoStagePipeline-T2AV](https://www.modelscope.cn/models/Lightricks/LTX-2)||[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2-T2AV-TwoStage.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2-T2AV-TwoStage.py)|-|-|-|-| +|[Lightricks/LTX-2: DistilledPipeline-T2AV](https://www.modelscope.cn/models/Lightricks/LTX-2)||[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2-T2AV-DistilledPipeline.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2-T2AV-DistilledPipeline.py)|-|-|-|-| +|[Lightricks/LTX-2: OneStagePipeline-I2AV](https://www.modelscope.cn/models/Lightricks/LTX-2)|`input_images`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2-I2AV-OneStage.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2-I2AV-OneStage.py)|-|-|-|-| +|[Lightricks/LTX-2: TwoStagePipeline-I2AV](https://www.modelscope.cn/models/Lightricks/LTX-2)|`input_images`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2-I2AV-TwoStage.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2-I2AV-TwoStage.py)|-|-|-|-| +|[Lightricks/LTX-2: DistilledPipeline-I2AV](https://www.modelscope.cn/models/Lightricks/LTX-2)|`input_images`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2-I2AV-DistilledPipeline.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2-I2AV-DistilledPipeline.py)|-|-|-|-| +|[Lightricks/LTX-2-19b-LoRA-Camera-Control-Dolly-In](https://www.modelscope.cn/models/Lightricks/LTX-2-19b-LoRA-Camera-Control-Dolly-In)||[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2-T2AV-Camera-Control-Dolly-In.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2-T2AV-Camera-Control-Dolly-In.py)|-|-|-|-| +|[Lightricks/LTX-2-19b-LoRA-Camera-Control-Dolly-Out](https://www.modelscope.cn/models/Lightricks/LTX-2-19b-LoRA-Camera-Control-Dolly-Out)||[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2-T2AV-Camera-Control-Dolly-Out.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2-T2AV-Camera-Control-Dolly-Out.py)|-|-|-|-| +|[Lightricks/LTX-2-19b-LoRA-Camera-Control-Dolly-Left](https://www.modelscope.cn/models/Lightricks/LTX-2-19b-LoRA-Camera-Control-Dolly-Left)||[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2-T2AV-Camera-Control-Dolly-Left.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2-T2AV-Camera-Control-Dolly-Left.py)|-|-|-|-| +|[Lightricks/LTX-2-19b-LoRA-Camera-Control-Dolly-Right](https://www.modelscope.cn/models/Lightricks/LTX-2-19b-LoRA-Camera-Control-Dolly-Right)||[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2-T2AV-Camera-Control-Dolly-Right.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2-T2AV-Camera-Control-Dolly-Right.py)|-|-|-|-| +|[Lightricks/LTX-2-19b-LoRA-Camera-Control-Jib-Up](https://www.modelscope.cn/models/Lightricks/LTX-2-19b-LoRA-Camera-Control-Jib-Up)||[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2-T2AV-Camera-Control-Jib-Up.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2-T2AV-Camera-Control-Jib-Up.py)|-|-|-|-| +|[Lightricks/LTX-2-19b-LoRA-Camera-Control-Jib-Down](https://www.modelscope.cn/models/Lightricks/LTX-2-19b-LoRA-Camera-Control-Jib-Down)||[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2-T2AV-Camera-Control-Jib-Down.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2-T2AV-Camera-Control-Jib-Down.py)|-|-|-|-| +|[Lightricks/LTX-2-19b-LoRA-Camera-Control-Static](https://www.modelscope.cn/models/Lightricks/LTX-2-19b-LoRA-Camera-Control-Static)||[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference/LTX-2-T2AV-Camera-Control-Static.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_inference_low_vram/LTX-2-T2AV-Camera-Control-Static.py)|-|-|-|-| + +## 模型推理 + +模型通过 `LTX2AudioVideoPipeline.from_pretrained` 加载,详见[加载模型](../Pipeline_Usage/Model_Inference.md#加载模型)。 + +`LTX2AudioVideoPipeline` 推理的输入参数包括: + +* `prompt`: 提示词,描述视频中出现的内容。 +* `negative_prompt`: 负向提示词,描述视频中不应该出现的内容,默认值为 `""`。 +* `cfg_scale`: Classifier-free guidance 的参数,默认值为 3.0。 +* `input_images`: 输入图像列表,用于图生视频。 +* `input_images_indexes`: 输入图像在视频中的帧索引列表。 +* `input_images_strength`: 输入图像的强度,默认值为 1.0。 +* `denoising_strength`: 去噪强度,范围是 0~1,默认值为 1.0。 +* `seed`: 随机种子。默认为 `None`,即完全随机。 +* `rand_device`: 生成随机高斯噪声矩阵的计算设备,默认为 `"cpu"`。当设置为 `cuda` 时,在不同 GPU 上会导致不同的生成结果。 +* `height`: 视频高度,需保证高度为 32 的倍数(单阶段)或 64 的倍数(两阶段)。 +* `width`: 视频宽度,需保证宽度为 32 的倍数(单阶段)或 64 的倍数(两阶段)。 +* `num_frames`: 视频帧数,默认值为 121,需保证为 8 的倍数 + 1。 +* `num_inference_steps`: 推理次数,默认值为 40。 +* `tiled`: 是否启用 VAE 分块推理,默认为 `True`。设置为 `True` 时可显著减少 VAE 编解码阶段的显存占用,会产生少许误差,以及少量推理时间延长。 +* `tile_size_in_pixels`: VAE 编解码阶段的像素分块大小,默认为 512。 +* `tile_overlap_in_pixels`: VAE 编解码阶段的像素分块重叠大小,默认为 128。 +* `tile_size_in_frames`: VAE 编解码阶段的帧分块大小,默认为 128。 +* `tile_overlap_in_frames`: VAE 编解码阶段的帧分块重叠大小,默认为 24。 +* `use_two_stage_pipeline`: 是否使用两阶段管道,默认为 `False`。 +* `use_distilled_pipeline`: 是否使用蒸馏管道,默认为 `False`。 +* `progress_bar_cmd`: 进度条,默认为 `tqdm.tqdm`。可通过设置为 `lambda x:x` 来屏蔽进度条。 + +如果显存不足,请开启[显存管理](../Pipeline_Usage/VRAM_management.md),我们在示例代码中提供了每个模型推荐的低显存配置,详见前文"支持的推理脚本"中的表格。 + +## 模型训练 + +LTX-2 系列模型统一通过 [`examples/ltx2/model_training/train.py`](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/ltx2/model_training/train.py) 进行训练,脚本的参数包括: + +* 通用训练参数 + * 数据集基础配置 + * `--dataset_base_path`: 数据集的根目录。 + * `--dataset_metadata_path`: 数据集的元数据文件路径。 + * `--dataset_repeat`: 每个 epoch 中数据集重复的次数。 + * `--dataset_num_workers`: 每个 Dataloder 的进程数量。 + * `--data_file_keys`: 元数据中需要加载的字段名称,通常是图像或视频文件的路径,以 `,` 分隔。 + * 模型加载配置 + * `--model_paths`: 要加载的模型路径。JSON 格式。 + * `--model_id_with_origin_paths`: 带原始路径的模型 ID,例如 `"Wan-AI/Wan2.1-T2V-1.3B:diffusion_pytorch_model*.safetensors"`。用逗号分隔。 + * `--extra_inputs`: 模型 Pipeline 所需的额外输入参数,例如训练图像编辑模型时需要额外参数,以 `,` 分隔。 + * `--fp8_models`:以 FP8 格式加载的模型,格式与 `--model_paths` 或 `--model_id_with_origin_paths` 一致,目前仅支持参数不被梯度更新的模型(不需要梯度回传,或梯度仅更新其 LoRA)。 + * `--quant_options`:对加载的模型进行动态量化。以 `;` 分隔多个条目,每个为 `<模型字符串>:[/]`,`<模型字符串>` 需与 `--model_paths`/`--model_id_with_origin_paths` 中的一致,`method` 为已注册的量化方法(如 `bitsandbytes_nf4`),`exclude_modules` 为可选的保持全精度的层。 + * 训练基础配置 + * `--learning_rate`: 学习率。 + * `--num_epochs`: 轮数(Epoch)。 + * `--trainable_models`: 可训练的模型,例如 `dit`、`vae`、`text_encoder`。 + * `--find_unused_parameters`: DDP 训练中是否存在未使用的参数,少数模型包含不参与梯度计算的冗余参数,需开启这一设置避免在多 GPU 训练中报错。 + * `--weight_decay`:权重衰减大小,详见 [torch.optim.AdamW](https://docs.pytorch.org/docs/stable/generated/torch.optim.AdamW.html)。 + * `--task`: 训练任务,默认为 `sft`,部分模型支持更多训练模式,请参考每个特定模型的文档。 + * 输出配置 + * `--output_path`: 模型保存路径。 + * `--remove_prefix_in_ckpt`: 在模型文件的 state dict 中移除前缀。 + * `--save_steps`: 保存模型的训练步数间隔,若此参数留空,则每个 epoch 保存一次。 + * LoRA 配置 + * `--lora_base_model`: LoRA 添加到哪个模型上。 + * `--lora_target_modules`: LoRA 添加到哪些层上。 + * `--lora_rank`: LoRA 的秩(Rank)。 + * `--lora_checkpoint`: LoRA 检查点的路径。如果提供此路径,LoRA 将从此检查点加载。 + * `--preset_lora_path`: 预置 LoRA 检查点路径,如果提供此路径,这一 LoRA 将会以融入基础模型的形式加载。此参数用于 LoRA 差分训练。 + * `--preset_lora_model`: 预置 LoRA 融入的模型,例如 `dit`。 + * 梯度配置 + * `--use_gradient_checkpointing`: 是否启用 gradient checkpointing。 + * `--use_gradient_checkpointing_offload`: 是否将 gradient checkpointing 卸载到内存中。 + * `--gradient_accumulation_steps`: 梯度累积步数。 + * 视频宽高配置 + * `--height`: 视频的高度。将 `height` 和 `width` 留空以启用动态分辨率。 + * `--width`: 视频的宽度。将 `height` 和 `width` 留空以启用动态分辨率。 + * `--max_pixels`: 视频帧的最大像素面积,当启用动态分辨率时,分辨率大于这个数值的视频帧都会被缩小,分辨率小于这个数值的视频帧保持不变。 + * `--num_frames`: 视频的帧数。 +* LTX-2 系列特定参数 + * `--tokenizer_path`: 分词器路径,适用于文生视频模型,留空则从远程自动下载。 + * `--frame_rate`: 训练视频的帧率。 + +我们构建了一个样例视频数据集,以方便您进行测试,通过以下命令可以下载这个数据集: + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --local_dir ./data/diffsynth_example_dataset +``` + +我们为每个模型编写了推荐的训练脚本,请参考前文"模型总览"中的表格。关于如何编写模型训练脚本,请参考[模型训练](../Pipeline_Usage/Model_Training.md);更多高阶训练算法,请参考[训练框架详解](https://github.com/modelscope/DiffSynth-Studio/tree/main/docs/zh/Training/)。 diff --git a/docs/zh/Model_Details/LingBot-Video.md b/docs/zh/Model_Details/LingBot-Video.md new file mode 100644 index 0000000000000000000000000000000000000000..4ca243664a9bd307b09372fd5b5d21c2731afdda --- /dev/null +++ b/docs/zh/Model_Details/LingBot-Video.md @@ -0,0 +1,213 @@ +# LingBot-Video + +LingBot-Video 是由 LingBot 团队研发的 flow-matching 视频生成模型,单个模型即可完成文生视频、图生视频和文生图三种任务。 + +特别感谢 [NancyFyong](https://github.com/NancyFyong) 在模型接入中做出的杰出贡献! + +## 安装 + +在使用本项目进行模型推理和训练前,请先安装 DiffSynth-Studio。 + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +更多关于安装的信息,请参考[安装依赖](../Pipeline_Usage/Setup.md)。 + +## 快速开始 + +运行以下代码可以快速加载 [Robbyant/lingbot-video-dense-1.3b](https://modelscope.cn/models/Robbyant/lingbot-video-dense-1.3b) 模型并进行推理。显存管理已启动,框架会自动根据剩余显存控制模型参数的加载,最低 6G 显存即可运行。 + +```python +import torch +import json +from diffsynth.utils.data import save_video, VideoData +from diffsynth.pipelines.lingbot_video import LingBotVideoPipeline, ModelConfig +from modelscope import dataset_snapshot_download + +vram_config = { + "offload_dtype": "disk", + "offload_device": "disk", + "onload_dtype": torch.float8_e4m3fn, + "onload_device": "cpu", + "preparing_dtype": torch.float8_e4m3fn, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} + +pipe = LingBotVideoPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Robbyant/lingbot-video-dense-1.3b", origin_file_pattern="transformer/diffusion_pytorch_model.safetensors", **vram_config), + ModelConfig(model_id="Qwen/Qwen3-VL-4B-Instruct", origin_file_pattern="*.safetensors", **vram_config), + ModelConfig(model_id="Robbyant/lingbot-video-dense-1.3b", origin_file_pattern="vae/diffusion_pytorch_model.safetensors", **vram_config), + ], + processor_config=ModelConfig(model_id="Qwen/Qwen3-VL-4B-Instruct", origin_file_pattern=""), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) + +dataset_snapshot_download( + dataset_id="DiffSynth-Studio/diffsynth_example_dataset", + local_dir="data/diffsynth_example_dataset", + allow_file_pattern="lingbot_video/lingbot-video-dense-1.3b_t2v/*", +) +with open("data/diffsynth_example_dataset/lingbot_video/lingbot-video-dense-1.3b_t2v/t2v_example_1.json", "r", encoding="utf-8") as f: + caption = json.load(f) + +video = pipe( + prompt=caption, + negative_prompt=pipe.default_negative_prompt, + height=480, width=832, num_frames=81, + num_inference_steps=40, cfg_scale=3.0, + seed=0, +) +save_video(video, "video.mp4", fps=15, quality=10) +``` + +## 模型总览 + +|模型 ID|推理|低显存推理|全量训练|全量训练后验证|LoRA 训练|LoRA 训练后验证| +|-|-|-|-|-|-|-| +|[Robbyant/lingbot-video-dense-1.3b: T2V](https://modelscope.cn/models/Robbyant/lingbot-video-dense-1.3b)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_inference/lingbot-video-dense-1.3b_t2v.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_inference_low_vram/lingbot-video-dense-1.3b_t2v.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_training/full/lingbot-video-dense-1.3b_t2v.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_training/validate_full/lingbot-video-dense-1.3b_t2v.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_training/lora/lingbot-video-dense-1.3b_t2v.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_training/validate_lora/lingbot-video-dense-1.3b_t2v.py)| +|[Robbyant/lingbot-video-dense-1.3b: TI2V](https://modelscope.cn/models/Robbyant/lingbot-video-dense-1.3b)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_inference/lingbot-video-dense-1.3b_ti2v.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_inference_low_vram/lingbot-video-dense-1.3b_ti2v.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_training/full/lingbot-video-dense-1.3b_ti2v.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_training/validate_full/lingbot-video-dense-1.3b_ti2v.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_training/lora/lingbot-video-dense-1.3b_ti2v.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_training/validate_lora/lingbot-video-dense-1.3b_ti2v.py)| +|[Robbyant/lingbot-video-dense-1.3b: T2I](https://modelscope.cn/models/Robbyant/lingbot-video-dense-1.3b)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_inference/lingbot-video-dense-1.3b_t2i.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_inference_low_vram/lingbot-video-dense-1.3b_t2i.py)|-|-|-|-| +|[Robbyant/lingbot-video-moe-30b-a3b: T2V](https://modelscope.cn/models/Robbyant/lingbot-video-moe-30b-a3b)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_inference/lingbot-video-moe-30b-a3b_t2v.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_inference_low_vram/lingbot-video-moe-30b-a3b_t2v.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_training/full/lingbot-video-moe-30b-a3b_t2v.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_training/validate_full/lingbot-video-moe-30b-a3b_t2v.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_training/lora/lingbot-video-moe-30b-a3b_t2v.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_training/validate_lora/lingbot-video-moe-30b-a3b_t2v.py)| +|[Robbyant/lingbot-video-moe-30b-a3b: TI2V](https://modelscope.cn/models/Robbyant/lingbot-video-moe-30b-a3b)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_inference/lingbot-video-moe-30b-a3b_ti2v.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_inference_low_vram/lingbot-video-moe-30b-a3b_ti2v.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_training/full/lingbot-video-moe-30b-a3b_ti2v.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_training/validate_full/lingbot-video-moe-30b-a3b_ti2v.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_training/lora/lingbot-video-moe-30b-a3b_ti2v.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_training/validate_lora/lingbot-video-moe-30b-a3b_ti2v.py)| +|[Robbyant/lingbot-video-moe-30b-a3b: T2I](https://modelscope.cn/models/Robbyant/lingbot-video-moe-30b-a3b)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_inference/lingbot-video-moe-30b-a3b_t2i.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_inference_low_vram/lingbot-video-moe-30b-a3b_t2i.py)|-|-|-|-| +|[Robbyant/lingbot-video-moe-30b-a3b: T2V + Refinement](https://modelscope.cn/models/Robbyant/lingbot-video-moe-30b-a3b)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_inference/lingbot-video-moe-30b-a3b_t2v_refiner.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_inference_low_vram/lingbot-video-moe-30b-a3b_t2v_refiner.py)|-|-|-|-| +|[Robbyant/lingbot-video-moe-30b-a3b: TI2V + Refinement](https://modelscope.cn/models/Robbyant/lingbot-video-moe-30b-a3b)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_inference/lingbot-video-moe-30b-a3b_ti2v_refiner.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_inference_low_vram/lingbot-video-moe-30b-a3b_ti2v_refiner.py)|-|-|-|-| + +## 模型推理 + +模型通过 `LingBotVideoPipeline.from_pretrained` 加载,详见[加载模型](../Pipeline_Usage/Model_Inference.md#加载模型)。 + +`LingBotVideoPipeline` 推理的输入参数包括: + +* `prompt`: 描述视频内容的提示词,接受结构化 JSON caption(`dict`)或纯字符串。LingBot-Video 在结构化 caption 上训练,Pipeline 会自动对 `dict` 进行归一化。示例数据集中提供了发布版的结构化 caption(见下方[提示词改写](#提示词改写))。 +* `negative_prompt`: 描述不应出现内容的负向提示词。`pipe.default_negative_prompt` 提供了官方 T2V/V2V/TI2V 负向提示词;`pipe.default_negative_prompt_image` 是移除时序项后的 T2I 版本。 +* `input_image`: 图生视频(TI2V)的首帧 PIL 图像。该帧被 VAE 编码成 clean latent,在每个采样步之后重新写入第一个时间槽,使模型只生成后续帧。T2V / V2V / T2I 时留 `None`。 +* `input_video`: 视频到视频生成的输入视频(帧列表或 `VideoData`),与 `denoising_strength` 配合使用。 +* `denoising_strength`: 去噪强度,范围 `[0, 1]`,默认 `1.0`。较小值保留更多输入视频结构。仅当 `input_video` 提供时生效。 +* `height`: 视频 / 图像高度,默认 `480`,必须是 16 的倍数。 +* `width`: 视频 / 图像宽度,默认 `480`,必须是 16 的倍数。 +* `num_frames`: 帧数,默认 `81`,须满足 `4k+1`(VAE 时间上 4× 压缩)。文生图使用 `num_frames=1`。 +* `cfg_scale`: 无分类器指导强度,默认 `3.0`。 +* `num_inference_steps`: 推理步数,默认 `40`。 +* `sigma_shift`: Flow-matching 时间步 shift,默认 `3.0`。 +* `t_thresh`: 精修起始 sigma,默认 `None`(普通生成)。设置后调度会被截断,使采样从 `sigma=t_thresh` 开始,并把 `input_video` 加噪到该噪声水平。仅在提供 `input_video` 时有意义;TI2V 还会在每个采样步之后重新写入干净的首帧 latent。官方精修配置为 `0.85`。 +* `sigma_tail_steps`: 精修调度尾部追加的额外低噪声步数,默认 `2`。仅在设置了 `t_thresh` 时生效。 +* `seed`: 随机种子,默认 `None`(完全随机)。 +* `rand_device`: 生成初始噪声的设备,默认 `"cpu"`。 +* `progress_bar_cmd`: 进度条,默认 `tqdm`,可设为 `lambda x: x` 关闭。 + +显存不足时请参考[显存管理](../Pipeline_Usage/VRAM_management.md)启用显存管理功能。我们在示例代码中提供了每个任务的推荐低显存配置,见上方"模型总览"中的表格。 + +### 两阶段精修 + +MoE 的 refiner 会在更高分辨率上执行一次短程精修:官方配置先以 480×832、40 步生成,再以 1088×1920、8 步精修。加载时把分片通配符从 `transformer/` 换成 `refiner/`,将基础阶段的视频以目标分辨率通过 `input_video` 传回,并设置 `t_thresh`: + +```python +input_video = VideoData("video_base.mp4", height=1088, width=1920) +video = pipe( + prompt=caption, + negative_prompt=pipe.default_negative_prompt, + input_video=input_video, + height=1088, width=1920, num_frames=81, + num_inference_steps=8, cfg_scale=3.0, + t_thresh=0.85, sigma_tail_steps=2, + seed=0, +) +``` + +放大后的视频会被 VAE 编码并重新加噪到 `sigma=t_thresh`,因此这一阶段保留基础阶段的结构,并在目标分辨率上重新生成细节。请使用与基础阶段相同的 caption,并保持相同的宽高比。精修分辨率决定了主要开销——1088×1920 的序列长度约为 480×832 的 5 倍——建议开启显存管理运行该阶段。 + +### 提示词改写 + +LingBot-Video 训练时使用的是**结构化 JSON caption**,直接喂平铺句子属于分布外输入,会明显降低生成质量。Pipeline 接受 `dict` 形式的 caption(与训练一致的格式)或纯字符串,`dict` 会被内部归一化。 + +发布版的结构化 caption 已通过 `DiffSynth-Studio/diffsynth_example_dataset` 示例数据集提供(`t2v_example_*.json`、`ti2v_example.json`、`t2i_example.json`,推理示例脚本会自动下载)。用 `json.load` 读入后作为 `dict` 传入 Pipeline,或作为编写自定义 caption 的模板。 + +如需将一段简短描述改写为结构化 caption,可使用 `examples/lingbot_video/model_training/scripts/prompt_rewriter.py` 中的两阶段改写器:阶段 1 将想法扩展为自然语言描述,阶段 2 将其映射为结构化 JSON。改写器是**独立的 VLM + 阶段二 LoRA 适配器**,需要另外下载: + +| 角色 | 模型 ID | 大小 | +|-|-|-| +| 改写器 base VLM(阶段 1 + 2) | [`Qwen/Qwen3.6-27B`](https://modelscope.cn/models/Qwen/Qwen3.6-27B) | ~55 GB | +| 改写器阶段二 LoRA 适配器 | [`Robbyant/lingbot-video-rewriter-lora`](https://modelscope.cn/models/Robbyant/lingbot-video-rewriter-lora) | ~0.5 GB | + +```python +import os +os.environ["REWRITER_BASE_MODEL"] = "./models/Qwen/Qwen3.6-27B" +os.environ["REWRITER_ADAPTER"] = "./models/Robbyant/lingbot-video-rewriter-lora" + +# 在仓库根目录下运行,此包式 import 才能解析。 +from examples.lingbot_video.model_training.scripts.prompt_rewriter import rewrite_prompt +caption = rewrite_prompt("a puppy running across a meadow", mode="t2v", duration=5) +video = pipe(prompt=caption, height=480, width=832, num_frames=81, cfg_scale=3.0) +``` + +除环境变量外,也可以直接向 `rewrite_prompt` 传 `base=` / `adapter=`;或者提供一个实现了 `generate(text, image, use_lora)` 方法的自定义对象作为 `backend=`,从而对接托管服务或 OpenAI-compatible 端点。 + +## 模型训练 + +LingBot-Video 系列模型统一通过 [`examples/lingbot_video/model_training/train.py`](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_training/train.py) 进行训练,脚本的参数包括: + +* 通用训练参数 + * 数据集基础配置 + * `--dataset_base_path`: 数据集的根目录。 + * `--dataset_metadata_path`: 数据集的元数据文件路径。 + * `--dataset_repeat`: 每个 epoch 中数据集重复的次数。 + * `--dataset_num_workers`: 每个 Dataloader 的进程数量。 + * `--data_file_keys`: 元数据中需要加载的字段名称,通常是图像或视频文件的路径,以 `,` 分隔。 + * 模型加载配置 + * `--model_paths`: 要加载的模型路径。JSON 格式。 + * `--model_id_with_origin_paths`: 带原始路径的模型 ID。用逗号分隔。 + * `--extra_inputs`: 模型 Pipeline 所需的额外输入参数,以 `,` 分隔。 + * `--fp8_models`: 以 FP8 格式加载的模型,目前仅支持参数不被梯度更新的模型。 + * `--quant_options`:对加载的模型进行动态量化。以 `;` 分隔多个条目,每个为 `<模型字符串>:[/]`,`<模型字符串>` 需与 `--model_paths`/`--model_id_with_origin_paths` 中的一致,`method` 为已注册的量化方法(如 `bitsandbytes_nf4`),`exclude_modules` 为可选的保持全精度的层。 + * 训练基础配置 + * `--learning_rate`: 学习率。 + * `--num_epochs`: 轮数(Epoch)。 + * `--trainable_models`: 可训练的模型,例如 `dit`、`vae`、`text_encoder`。 + * `--find_unused_parameters`: DDP 训练中是否存在未使用的参数。 + * `--weight_decay`: 权重衰减大小。 + * `--task`: 训练任务,默认为 `sft`。 + * 输出配置 + * `--output_path`: 模型保存路径。 + * `--remove_prefix_in_ckpt`: 在模型文件的 state dict 中移除前缀。 + * `--save_steps`: 保存模型的训练步数间隔。 + * LoRA 配置 + * `--lora_base_model`: LoRA 添加到哪个模型上。 + * `--lora_target_modules`: LoRA 添加到哪些层上。 + * `--lora_rank`: LoRA 的秩(Rank)。 + * `--lora_checkpoint`: LoRA 检查点的路径。 + * `--preset_lora_path`: 预置 LoRA 检查点路径,用于 LoRA 差分训练。 + * `--preset_lora_model`: 预置 LoRA 融入的模型,例如 `dit`。 + * 梯度配置 + * `--use_gradient_checkpointing`: 是否启用 gradient checkpointing。 + * `--use_gradient_checkpointing_offload`: 是否将 gradient checkpointing 卸载到内存中。 + * `--gradient_accumulation_steps`: 梯度累积步数。 + * 分辨率配置 + * `--height`: 视频的高度,必须能被 16 整除。 + * `--width`: 视频的宽度,必须能被 16 整除。 + * `--max_pixels`: 最大像素面积,动态分辨率时大于此值的图片会被缩小。 + * `--num_frames`: 视频的帧数,须满足 `4k+1`。 +* LingBot-Video 专有参数 + * `--processor_path`: Qwen3-VL processor 目录(或 `model_id:origin_file_pattern` 形式)路径,用于对 prompt 进行 tokenize。 + * `--first_frame_as_condition`: 启用图生视频(TI2V)的 LoRA / 全量训练。每段视频以自己的第一帧作为条件:该帧被 VAE 编码为 clean latent 固定到第一个时间槽(同时作为视觉输入送入 Qwen3-VL 文本编码器),并从 flow-matching 损失中排除。 + * `--max_timestep_boundary`: 训练时时间步的上边界,取值 `[0, 1]` 表示相对训练调度的比例。 + * `--min_timestep_boundary`: 训练时时间步的下边界,取值 `[0, 1]` 表示相对训练调度的比例。 + * `--initialize_model_on_cpu`: 是否在 CPU 上初始化模型。 + +我们构建了一个样例数据集供您测试,可通过以下命令下载: + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "lingbot_video/lingbot-video-dense-1.3b_t2v/*" --local_dir ./data/diffsynth_example_dataset +``` + +训练时 `prompt` 字段应存放**结构化 JSON caption**(与推理时使用的分布内格式一致)。如果数据集里存的是原始散文,可先使用 [`examples/lingbot_video/model_training/scripts/rewrite_captions.py`](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/lingbot_video/model_training/scripts/rewrite_captions.py) 离线改写一次。 + +我们为每个任务编写了推荐的训练脚本,请参考前文"模型总览"中的表格。关于如何编写模型训练脚本,请参考[模型训练](../Pipeline_Usage/Model_Training.md);更多高阶训练算法,请参考[训练框架详解](https://github.com/modelscope/DiffSynth-Studio/tree/main/docs/zh/Training/)。 diff --git a/docs/zh/Model_Details/MiniMax-H3.md b/docs/zh/Model_Details/MiniMax-H3.md new file mode 100644 index 0000000000000000000000000000000000000000..2e95e56ef0e5aabd2d3c184657b756731596f907 --- /dev/null +++ b/docs/zh/Model_Details/MiniMax-H3.md @@ -0,0 +1,246 @@ +# MiniMax-H3 + +MiniMax H3 是一个通用的全模态生成系统。它支持对由文本、图像、视频和音频组成的多模态上下文进行统一理解,并能生成最高达 2K 分辨率、最长 15 秒、包含原生立体声音频的视频。得益于其面向任务泛化的系统设计,H3 在预训练阶段就已具备广泛的多模态上下文理解与生成能力,从而在遵循复杂多模态指令方面表现出色。 + +## 安装 + +在使用本项目进行模型推理和训练前,请先安装 DiffSynth-Studio。 + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +更多关于安装的信息,请参考[安装依赖](../Pipeline_Usage/Setup.md)。 + +## 快速开始 + +运行以下代码可以快速加载 [DiffSynth-Studio/MiniMax-H3-NF4](https://www.modelscope.cn/models/DiffSynth-Studio/MiniMax-H3-NF4) NF4 量化模型并进行文生音视频推理。显存管理已启动,框架会自动根据剩余显存控制模型参数的加载,最低 7G 显存即可运行。 + +```python +import torch +from diffsynth.pipelines.minimax_h3_audio_video import MiniMaxH3Pipeline, ModelConfig +from diffsynth.utils.data.audio_video import write_video_audio + +vram_config = { + "offload_dtype": torch.bfloat16, + "offload_device": "cpu", + "onload_dtype": torch.bfloat16, + "onload_device": "cpu", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} +pipe = MiniMaxH3Pipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="DiffSynth-Studio/MiniMax-H3-NF4", origin_file_pattern="minimax-h3-fl2va-nf4.safetensors", **vram_config), + ModelConfig(model_id="DiffSynth-Studio/MiniMax-H3-NF4", origin_file_pattern="minimax-h3-text-encoder-nf4.safetensors", **vram_config), + ModelConfig(model_id="DiffSynth-Studio/MiniMax-H3-NF4", origin_file_pattern="video_vae_nf4.safetensors", **vram_config), + ModelConfig(model_id="DiffSynth-Studio/MiniMax-H3-NF4", origin_file_pattern="audio_vae_nf4.safetensors", **vram_config), + ], + processor_config=ModelConfig(model_id="MiniMax/MiniMax-H3", origin_file_pattern="FL2VA/processor/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 2, +) + +# Text -> Video + Audio +prompt = "A girl is very happy, she is speaking in english: “I enjoy working with Diffsynth-Studio, it's a perfect framework.”" +video, audio = pipe( + prompt=prompt, + height=480, width=832, num_frames=124, num_inference_steps=50, seed=0, +) +write_video_audio( + video=video, audio=audio, + output_path="t2va.mp4", fps=24, audio_sample_rate=32000, +) +``` + +## 模型总览 + +|模型 ID|推理|低显存推理|全量训练|全量训练后验证|LoRA 训练|LoRA 训练后验证| +|-|-|-|-|-|-|-| +|[MiniMax/MiniMax-H3: FL2VA](https://www.modelscope.cn/models/MiniMax/MiniMax-H3)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference/MiniMax-H3-FL2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-FL2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/full/MiniMax-H3-FL2VA.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/validate_full/MiniMax-H3-FL2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/lora/MiniMax-H3-FL2VA.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-FL2VA.py)| +|[MiniMax/MiniMax-H3: Ref2VA](https://www.modelscope.cn/models/MiniMax/MiniMax-H3)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference/MiniMax-H3-Ref2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-Ref2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/full/MiniMax-H3-Ref2VA.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/validate_full/MiniMax-H3-Ref2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/lora/MiniMax-H3-Ref2VA.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-Ref2VA.py)| +|[MiniMax/MiniMax-H3: Retake](https://www.modelscope.cn/models/MiniMax/MiniMax-H3)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference/MiniMax-H3-Retake.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-Retake.py)|-|-|-|-| +|[DiffSynth-Studio/MiniMax-H3-NF4: FL2VA](https://www.modelscope.cn/models/DiffSynth-Studio/MiniMax-H3-NF4)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference/MiniMax-H3-NF4-FL2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-NF4-FL2VA.py)|-|-|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/lora/MiniMax-H3-NF4-FL2VA.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-NF4-FL2VA.py)| +|[DiffSynth-Studio/MiniMax-H3-NF4: Ref2VA](https://www.modelscope.cn/models/DiffSynth-Studio/MiniMax-H3-NF4)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference/MiniMax-H3-NF4-Ref2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-NF4-Ref2VA.py)|-|-|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/lora/MiniMax-H3-NF4-Ref2VA.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-NF4-Ref2VA.py)| +|[Comfy-Org/MiniMax-H3: FL2VA pruned](https://www.modelscope.cn/models/Comfy-Org/MiniMax-H3)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference/MiniMax-H3-Pruned-FL2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-Pruned-FL2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/full/MiniMax-H3-Pruned-FL2VA.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/validate_full/MiniMax-H3-Pruned-FL2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/lora/MiniMax-H3-Pruned-FL2VA.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-Pruned-FL2VA.py)| +|[Comfy-Org/MiniMax-H3: Ref2VA pruned](https://www.modelscope.cn/models/Comfy-Org/MiniMax-H3)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference/MiniMax-H3-Pruned-Ref2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-Pruned-Ref2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/full/MiniMax-H3-Pruned-Ref2VA.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/validate_full/MiniMax-H3-Pruned-Ref2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/lora/MiniMax-H3-Pruned-Ref2VA.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-Pruned-Ref2VA.py)| +|[DiffSynth-Studio/MiniMax-H3-NF4: FL2VA pruned](https://www.modelscope.cn/models/DiffSynth-Studio/MiniMax-H3-NF4)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference/MiniMax-H3-NF4-Pruned-FL2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-NF4-Pruned-FL2VA.py)|-|-|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/lora/MiniMax-H3-NF4-Pruned-FL2VA.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-NF4-Pruned-FL2VA.py)| +|[DiffSynth-Studio/MiniMax-H3-NF4: Ref2VA pruned](https://www.modelscope.cn/models/DiffSynth-Studio/MiniMax-H3-NF4)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference/MiniMax-H3-NF4-Pruned-Ref2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-NF4-Pruned-Ref2VA.py)|-|-|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/lora/MiniMax-H3-NF4-Pruned-Ref2VA.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-NF4-Pruned-Ref2VA.py)| +|[Comfy-Org/MiniMax-H3: FL2VA int8_convrot](https://www.modelscope.cn/models/Comfy-Org/MiniMax-H3)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference/MiniMax-H3-Int8-ConvRot-FL2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-Int8-ConvRot-FL2VA.py)|-|-|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/lora/MiniMax-H3-Int8-ConvRot-FL2VA.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-Int8-ConvRot-FL2VA.py)| +|[Comfy-Org/MiniMax-H3: Ref2VA int8_convrot](https://www.modelscope.cn/models/Comfy-Org/MiniMax-H3)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference/MiniMax-H3-Int8-ConvRot-Ref2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-Int8-ConvRot-Ref2VA.py)|-|-|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/lora/MiniMax-H3-Int8-ConvRot-Ref2VA.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-Int8-ConvRot-Ref2VA.py)| +|[Comfy-Org/MiniMax-H3: FL2VA pruned int8_convrot](https://www.modelscope.cn/models/Comfy-Org/MiniMax-H3)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference/MiniMax-H3-Int8-ConvRot-Pruned-FL2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-Int8-ConvRot-Pruned-FL2VA.py)|-|-|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/lora/MiniMax-H3-Int8-ConvRot-Pruned-FL2VA.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-Int8-ConvRot-Pruned-FL2VA.py)| +|[Comfy-Org/MiniMax-H3: Ref2VA pruned int8_convrot](https://www.modelscope.cn/models/Comfy-Org/MiniMax-H3)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference/MiniMax-H3-Int8-ConvRot-Pruned-Ref2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-Int8-ConvRot-Pruned-Ref2VA.py)|-|-|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/lora/MiniMax-H3-Int8-ConvRot-Pruned-Ref2VA.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-Int8-ConvRot-Pruned-Ref2VA.py)| +|[Comfy-Org/MiniMax-H3: FL2VA pruned fp8](https://www.modelscope.cn/models/Comfy-Org/MiniMax-H3)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference/MiniMax-H3-FP8-Pruned-FL2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-FP8-Pruned-FL2VA.py)|-|-|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/lora/MiniMax-H3-FP8-Pruned-FL2VA.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-FP8-Pruned-FL2VA.py)| +|[Comfy-Org/MiniMax-H3: Ref2VA pruned fp8](https://www.modelscope.cn/models/Comfy-Org/MiniMax-H3)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference/MiniMax-H3-FP8-Pruned-Ref2VA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-FP8-Pruned-Ref2VA.py)|-|-|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/lora/MiniMax-H3-FP8-Pruned-Ref2VA.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/validate_lora/MiniMax-H3-FP8-Pruned-Ref2VA.py)| +|[lightx2v/Minimax-h3-Turbo: FL2VA 4steps](https://www.modelscope.cn/models/lightx2v/Minimax-h3-Turbo)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference/MiniMax-H3-FL2VA-Turbo.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-FL2VA-Turbo.py)|-|-|-|-| +|[DiffSynth-Studio/MiniMax-H3-Text-Embeddings](https://www.modelscope.cn/models/DiffSynth-Studio/MiniMax-H3-Text-Embeddings)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference/MiniMax-H3-Text-Embeddings.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_inference_low_vram/MiniMax-H3-Text-Embeddings.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/full/MiniMax-H3-Text-Embeddings.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/validate_full/MiniMax-H3-Text-Embeddings.py)|-|-| + +模型权重分为两个分区:`FL2VA` 分区服务文生音视频与首尾帧引导生成,`Ref2VA` 分区服务参考驱动生成,两者的 DiT 与文本编码器权重不同,需按任务选择对应分区的 `origin_file_pattern`。 + +## 模型推理 + +模型通过 `MiniMaxH3Pipeline.from_pretrained` 加载,详见[加载模型](../Pipeline_Usage/Model_Inference.md#加载模型)。加载时除 `model_configs` 外还包括: + +* `processor_config`: Qwen3-VL processor 的 `ModelConfig`,用于对提示词及参考图像进行 tokenize,默认指向 `FL2VA/processor/`。使用 `Ref2VA` 分区时需显式改为 `Ref2VA/processor/`。 +* `vram_limit`: 显存管理的显存上限(单位 GB),留空则不限制。 + +`MiniMaxH3Pipeline` 推理的输入参数包括: + +* `prompt`: 提示词,描述视频中出现的内容以及人物说出的台词。 +* `negative_prompt`: 负向提示词,默认值为 `" "`。该模型为 CFG 蒸馏模型,默认不生效。 +* `height`: 视频高度,默认值为 768,需保证为 32 的倍数。 +* `width`: 视频宽度,默认值为 1344,需保证为 32 的倍数。 +* `num_frames`: 视频帧数,默认值为 124,会被向上对齐到最近的 `17n+5`,因此实际输出可能略长于请求值。视频帧率固定为 24。 +* `num_inference_steps`: 推理步数,默认值为 50。 +* `seed`: 随机种子,默认值为 42。 +* `rand_device`: 生成随机高斯噪声矩阵的计算设备,默认为 `"cpu"`。当设置为 `cuda` 时,在不同 GPU 上会导致不同的生成结果。 +* `cfg_scale`: Classifier-free guidance 的参数,默认值为 1.0。该模型为 CFG 蒸馏模型,建议保持默认值。 +* `flow_shift`: 视频模态的 flow matching 时间步 shift,默认值为 12.0。 +* `audio_flow_shift`: 音频模态的 flow matching 时间步 shift,默认值为 3.0。视频与音频使用两条独立的 sigma 调度。 +* `tiled`: 是否启用 VAE 分块推理,默认为 `True`。设置为 `True` 时可显著减少 VAE 编解码阶段的显存占用,会产生少许误差,以及少量推理时间延长。 +* `tile_size`: VAE 编解码阶段的分块大小,默认为 256。 +* `tile_overlap`: VAE 编解码阶段的分块重叠大小,默认为 64。 +* `keyframes`: 关键帧图像列表,用于首尾帧引导生成,图像会被缩放到目标画幅。 +* `keyframe_indices`: 关键帧在视频中的帧索引列表,取值为 `0`(首帧)或 `-1`(尾帧),与 `keyframes` 一一对应。 +* `references`: 参考条件列表,按请求顺序给出,每个元素为字典,支持以下四种形式: + * `{"type": "image", "image": PIL.Image}` + * `{"type": "video", "video": list[PIL.Image]}`(无声视频) + * `{"type": "audio", "audio": Tensor[C, L], "sample_rate": int}` + * `{"type": "video_audio", "video": list[PIL.Image], "audio": Tensor[C, L], "sample_rate": int}` + + 其中传入的视频帧列表必须已经是 24fps,Pipeline 不会重采样帧率。`video` 一律按无声处理,因此若要把参考视频自带的声轨也作为音频条件,必须使用 `video_audio` 并显式传入波形 —— Pipeline 接收的是帧列表而非文件,无法自行探测声轨。可用 `diffsynth.utils.data.audio_video.read_video_audio` 从同一个文件同时读出画面与声轨,两者的时长会自动对齐: + + ```python + from diffsynth.utils.data.audio_video import read_video_audio + + frames, waveform, sample_rate = read_video_audio( + "video.mp4", height=480, width=832, num_frames=124, fps=24, + audio_sample_rate=pipe.audio_vae.sample_rate, + ) + ``` +* `ref_image_short_edge`: 参考图像的短边目标长度,默认值为 2048。参考图像保持长宽比缩放至该短边(允许放大),两轴各自向最近的 32 倍数取整,不受面积上限约束。 +* `ref_video_short_edge`: 参考视频的短边目标长度,默认值为 768。 +* `ref_video_max_pixels`: 参考视频的面积软上限,默认值为 `768 * 1344`。参考视频先按短边定标,若面积超过该上限则等比缩回,最后两轴各自取整到 32 的倍数。宽于 16:9 的素材通常会触发该上限。 +* `retake_video`: 视频重绘(retake)的源视频帧列表,必须已经是 24fps。帧会被缩放到目标画幅并截取前 `num_frames` 帧。由于 `num_frames` 会先向上对齐到最近的 `17n+5`,源视频常常会差几帧(例如 121 帧的素材对应对齐后的 124 帧),此时会重复最后一帧补齐,且补出的尾部会被重新生成而非冻结。源素材帧数不少于 `num_frames` 即可避免。 +* `frame_regions_to_retake`: `retake_video` 中需要重新生成的**帧号**区间,左闭右开、帧从 0 计数,例如 `[(17, 51)]`。区间之外的内容会从源视频原样保留。一个 VAE clip 的 17 帧在隐空间是耦合的,重绘 clip 内任何一帧就等于重绘整个 clip,因此区间会向外扩展到 clip 边界;传 17 的倍数即可得到与请求完全一致的范围。不传该参数(或传入空列表)时整段源视频都会被保留,此时 `retake_video` 相当于视频驱动的音频生成。 +* `retake_audio`: 音频重绘(retake)的源波形 `Tensor[C, L]`。会被转为立体声并重采样到音频 VAE 的采样率,再按视频时长截断或补齐。 +* `retake_audio_sample_rate`: `retake_audio` 的采样率,默认值为 32000。 +* `seconds_regions_to_retake`: `retake_audio` 中需要重新生成的时间区间,单位为**秒**、左闭右开,例如 `[(0, 1), (4, 5)]`。音频 VAE 是均匀压缩(每秒 40 个隐空间帧)、没有 clip 结构,因此区间按给定值直接使用,时间分辨率为 1/40 秒。不传该参数时整段源音频都会被保留,此时 `retake_audio` 相当于音频驱动的视频生成。 + + 视频与音频的 retake 相互独立:可以只用其中之一,注意两者单位不同 —— 视频用帧号,音频用秒。推荐用 `read_video_audio` 从同一个文件中读出时长已对齐的 `(帧列表, 波形, 采样率)`: + + ```python + source_video, source_audio, audio_sample_rate = read_video_audio( + "video.mp4", height=480, width=832, num_frames=124, fps=24, + audio_sample_rate=pipe.audio_vae.sample_rate, + ) + + def align_to_clips(start, end, total_frames, clip_frames=17): + """把左闭右开的帧区间 [start, end) 扩展到完整 clip,帧从 0 计数。""" + first_clip, last_clip = start // clip_frames, (end - 1) // clip_frames + return first_clip * clip_frames, min((last_clip + 1) * clip_frames, total_frames) + + video, audio = pipe( + prompt=prompt, height=480, width=832, num_frames=124, + retake_video=source_video, + frame_regions_to_retake=[align_to_clips(24, 48, 124)], # 帧 [24,48) -> (17, 51) + retake_audio=source_audio, + retake_audio_sample_rate=audio_sample_rate, + seconds_regions_to_retake=[(0, 1), (4, 5)], # 秒 + ) + ``` +* `progress_bar_cmd`: 进度条,默认为 `tqdm`。可通过设置为 `lambda x: x` 来屏蔽进度条。 + +Pipeline 返回 `(video, audio)` 二元组,视频为 PIL 图像列表,音频为波形张量,可通过 `diffsynth.utils.data.audio_video.write_video_audio` 混流写出 MP4: + +```python +write_video_audio(video=video, audio=audio, output_path="video.mp4", fps=24, audio_sample_rate=pipe.audio_vae.sample_rate) +``` + +如果显存不足,请开启[显存管理](../Pipeline_Usage/VRAM_management.md),我们在示例代码中提供了每个模型推荐的低显存配置,详见前文“模型总览”中的表格。此外我们还提供了 NF4 量化版本的权重,可进一步降低显存需求,对应脚本同样见“模型总览”表格。我们同时支持 Comfy-Org 发布的 int8 量化权重,通过 comfy-kitchen 后端加载,需要安装 `pip install "diffsynth[quant]"`。 + +## 模型训练 + +MiniMax-H3 系列模型统一通过 [`examples/minimax_h3/model_training/train.py`](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/train.py) 进行训练,脚本的参数包括: + +* 通用训练参数 + * 数据集基础配置 + * `--dataset_base_path`: 数据集的根目录。 + * `--dataset_metadata_path`: 数据集的元数据文件路径。 + * `--dataset_repeat`: 每个 epoch 中数据集重复的次数。 + * `--dataset_num_workers`: 每个 Dataloader 的进程数量。 + * `--data_file_keys`: 元数据中需要加载的字段名称,通常是图像或视频文件的路径,以 `,` 分隔。 + * 模型加载配置 + * `--model_paths`: 要加载的模型路径。JSON 格式。 + * `--model_id_with_origin_paths`: 带原始路径的模型 ID。用逗号分隔。 + * `--extra_inputs`: 模型 Pipeline 所需的额外输入参数,以 `,` 分隔。 + * `--fp8_models`: 以 FP8 格式加载的模型,目前仅支持参数不被梯度更新的模型。 + * `--quant_options`:对加载的模型进行动态量化。以 `;` 分隔多个条目,每个为 `<模型字符串>:[/]`,`<模型字符串>` 需与 `--model_paths`/`--model_id_with_origin_paths` 中的一致,`method` 为已注册的量化方法(如 `bitsandbytes_nf4`),`exclude_modules` 为可选的保持全精度的层。 + * 训练基础配置 + * `--learning_rate`: 学习率。 + * `--num_epochs`: 轮数(Epoch)。 + * `--trainable_models`: 可训练的模型,例如 `dit`、`vae`、`text_encoder`。 + * `--find_unused_parameters`: DDP 训练中是否存在未使用的参数。 + * `--weight_decay`: 权重衰减大小。 + * `--task`: 训练任务,默认为 `sft`。 + * 输出配置 + * `--output_path`: 模型保存路径。 + * `--remove_prefix_in_ckpt`: 在模型文件的 state dict 中移除前缀。 + * `--save_steps`: 保存模型的训练步数间隔。 + * LoRA 配置 + * `--lora_base_model`: LoRA 添加到哪个模型上。 + * `--lora_target_modules`: LoRA 添加到哪些层上。 + * `--lora_rank`: LoRA 的秩(Rank)。 + * `--lora_checkpoint`: LoRA 检查点的路径。 + * `--preset_lora_path`: 预置 LoRA 检查点路径,用于 LoRA 差分训练。 + * `--preset_lora_model`: 预置 LoRA 融入的模型,例如 `dit`。 + * 梯度配置 + * `--use_gradient_checkpointing`: 是否启用 gradient checkpointing。 + * `--use_gradient_checkpointing_offload`: 是否将 gradient checkpointing 卸载到内存中。 + * `--gradient_accumulation_steps`: 梯度累积步数。 + * 分辨率配置 + * `--height`: 视频的高度。将 `height` 和 `width` 留空以启用动态分辨率。 + * `--width`: 视频的宽度。将 `height` 和 `width` 留空以启用动态分辨率。 + * `--max_pixels`: 最大像素面积,动态分辨率时大于此值的图片会被缩小。 + * `--num_frames`: 视频的帧数。 +* MiniMax-H3 专有参数 + * `--processor_path`: Qwen3-VL processor 的路径,支持 `model_id:origin_file_pattern` 形式,用于对 prompt 进行 tokenize。 + * `--initialize_model_on_cpu`: 是否在 CPU 上初始化模型。 + * `--silent_on_missing_audio`: 视频数据不含音轨时,是否以静音音频作为兜底。 + * `--training_cfg_scale`: 微调时用于保留 MiniMax-H3 指导蒸馏的逆 CFG 系数。大于 1 时启用一路无梯度的无条件分支,等于 1 时保持标准 flow matching 损失。 + * `--audio_loss_weight`: MiniMax-H3 损失中音频项的权重。为 1 时视频与音频等权重,为 0 时只用视频项训练,音频流仍会加噪并送入模型。 + +我们构建了一个样例数据集,以方便您进行测试,通过以下命令可以下载这个数据集: + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --local_dir ./data/diffsynth_example_dataset +``` + +LoRA 训练脚本采用两阶段流程:先以 `--task "sft:data_process"` 预处理并缓存数据集,再以 `--task "sft:train"` 执行正式训练。之所以必须分阶段,是因为 DiT 与 Qwen3-VL 文本编码器无法同时载入单卡。LoRA 默认作用于 DiT 的 `qkv_proj,out_proj` 模块,rank 为 32。全量训练同样采用两阶段流程,第二阶段通过 [`accelerate_config_zero3.yaml`](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_h3/model_training/full/accelerate_config_zero3.yaml) 启用 DeepSpeed ZeRO-3,并以 `--trainable_models "dit"` 指定训练对象。 + +NF4 量化版本的 LoRA 训练为单阶段流程:量化后所有组件可同时载入单卡,无需预先缓存数据集。此时必须显式指定 `--lora_target_modules`,因为量化权重在 state dict 中以打包形式存储,自动探测无法识别其形状。 + +首尾帧引导(FL2VA)训练在 `--extra_inputs` 中追加 `input_image,end_image`,分别取训练视频的首帧与尾帧作为条件,数据集无需额外列。参考驱动(Ref2VA)训练使用 `metadata.json`,其中 `references` 字段为一组参考块,支持 `image`、`video`、`audio`、`video_audio` 四种类型: + +```json +[ + { + "video": "train_video.mp4", + "prompt": "...", + "input_audio": "train_video.mp4", + "references": [ + {"type": "image", "image": "0.png"} + ], + "frame_rate": 24 + } +] +``` + +`references` 需同时出现在 `--data_file_keys` 与 `--extra_inputs` 中,前者负责按类型加载文件,后者负责将参考块注入 Pipeline。参考图像以原生分辨率交给 Pipeline(其内部会按参考短边重新缩放),参考视频则裁剪到训练画布并按 24fps 采样。 + +我们为每个模型编写了推荐的训练脚本,请参考前文“模型总览”中的表格。关于如何编写模型训练脚本,请参考[模型训练](../Pipeline_Usage/Model_Training.md);更多高阶训练算法,请参考[训练框架详解](https://github.com/modelscope/DiffSynth-Studio/tree/main/docs/zh/Training/)。 diff --git a/docs/zh/Model_Details/MiniMax-Music3.md b/docs/zh/Model_Details/MiniMax-Music3.md new file mode 100644 index 0000000000000000000000000000000000000000..23d8d141c037d40066e917c94a64e8cc3349dbd1 --- /dev/null +++ b/docs/zh/Model_Details/MiniMax-Music3.md @@ -0,0 +1,94 @@ +# MiniMax-Music3 + +MiniMax-Music3 是一个音乐生成模型,采用自回归语言模型与流匹配声学模型级联的两阶段架构,输入音乐描述与歌词即可生成带人声的立体声歌曲。 + +## 安装 + +在使用本项目进行模型推理和训练前,请先安装 DiffSynth-Studio。 + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +更多关于安装的信息,请参考[安装依赖](../Pipeline_Usage/Setup.md)。 + +## 快速开始 + +运行以下代码可以快速加载 [MiniMax/MiniMax-Music3](https://www.modelscope.cn/models/MiniMax/MiniMax-Music3) 模型并进行推理。显存管理已启动,框架会自动根据剩余显存控制模型参数的加载,最低 6G 显存即可运行。 + +```python +from diffsynth.pipelines.minimax_music3 import MiniMaxMusic3Pipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio +import torch + +vram_config = { + "offload_dtype": "disk", + "offload_device": "disk", + "onload_dtype": torch.bfloat16, + "onload_device": "cpu", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} + +pipe = MiniMaxMusic3Pipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="MiniMax/MiniMax-Music3", origin_file_pattern="language_model/model*.safetensors", **vram_config), + ModelConfig(model_id="MiniMax/MiniMax-Music3", origin_file_pattern="rvq_depth_decoder/diffusion_pytorch_model.safetensors", **vram_config), + ModelConfig(model_id="MiniMax/MiniMax-Music3", origin_file_pattern="transformer/diffusion_pytorch_model*.safetensors", **vram_config), + ModelConfig(model_id="MiniMax/MiniMax-Music3", origin_file_pattern="condition_encoder/diffusion_pytorch_model.safetensors", **vram_config), + ModelConfig(model_id="MiniMax/MiniMax-Music3", origin_file_pattern="vocoder/diffusion_pytorch_model.safetensors", **vram_config), + ], + tokenizer_config=ModelConfig(model_id="MiniMax/MiniMax-Music3", origin_file_pattern="tokenizer/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) + +lyrics = ( + "[verse]\n" + "Morning light filtering through the pine\n" + "Every quiet street is yours and mine\n" + "[chorus]\n" + "Softly the world begins to breathe" +) +prompt = ( + "Genre: acoustic pop. BPM: 96. Key: C major. Warm and intimate, building gently into the chorus. " + "Vocals: soft female lead, close and breathy, light stacked harmonies in the chorus. " + "Arrangement: fingerpicked guitar and soft piano; brushed drums and upright bass enter in the chorus." +) +audio = pipe(prompt=prompt, lyrics=lyrics, max_audio_duration=60.0, num_inference_steps=30, cfg_scale=1.7, seed=7) +save_audio(audio, 44100, "MiniMax-Music3.wav") +``` + +## 模型总览 + +|模型 ID|推理|低显存推理|全量训练|全量训练后验证|LoRA 训练|LoRA 训练后验证| +|-|-|-|-|-|-|-| +|[MiniMax/MiniMax-Music3](https://www.modelscope.cn/models/MiniMax/MiniMax-Music3)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_music3/model_inference/MiniMax-Music3.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/minimax_music3/model_inference_low_vram/MiniMax-Music3.py)|—|—|—|—| + +## 模型推理 + +模型通过 `MiniMaxMusic3Pipeline.from_pretrained` 加载,详见[加载模型](../Pipeline_Usage/Model_Inference.md#加载模型)。 + +`MiniMaxMusic3Pipeline` 推理的输入参数包括: + +* `prompt`: 音乐描述,用于指定风格、BPM、调性、人声特征与编曲。 +* `lyrics`: 歌词。`[verse]`、`[chorus]` 等结构标签需各自独占一行,与标签同行的文本会被丢弃。留空时生成纯器乐。 +* `max_audio_duration`: 生成音频时长的上限,单位为秒。自回归阶段可能提前结束,因此实际时长可能短于该值;帧数上限为 9000 帧。 +* `num_inference_steps`: 每个窗口的流匹配迭代步数。 +* `cfg_scale`: 声学阶段的 classifier-free guidance 强度。 +* `seed`: 随机种子。 +* `rand_device`: 随机数生成所在的设备。设为 `"cpu"` 可获得与计算设备无关的复现结果。 +* `progress_bar_cmd`: 进度条。每个窗口显示一条覆盖全部迭代步的进度条。 + +模型分两阶段生成:自回归语言模型逐帧产出语义 token 与残差 RVQ 码,其逐帧隐状态作为条件,驱动分块流匹配模型生成 Flow-VAE 隐变量,最后由声码器合成 44.1kHz 立体声波形。自回归阶段的离散采样对数值精度敏感,因此该阶段的模型参数常驻显存,逐层显存管理仅作用于声码器。 + +若显存不足,请参考[显存管理](../Pipeline_Usage/Model_Inference.md#显存管理)。 + +## 模型训练 + +MiniMax-Music3 暂不支持训练。 diff --git a/docs/zh/Model_Details/Qwen-Image.md b/docs/zh/Model_Details/Qwen-Image.md new file mode 100644 index 0000000000000000000000000000000000000000..a407e4ed1df4e3f44b9aa5fda3abe465ef81e22a --- /dev/null +++ b/docs/zh/Model_Details/Qwen-Image.md @@ -0,0 +1,180 @@ +# Qwen-Image + +![Image](https://github.com/user-attachments/assets/738078d8-8749-4a53-a046-571861541924) + +Qwen-Image 是由阿里巴巴通义实验室通义千问团队训练并开源的图像生成模型。 + +## 安装 + +在使用本项目进行模型推理和训练前,请先安装 DiffSynth-Studio。 + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +更多关于安装的信息,请参考[安装依赖](../Pipeline_Usage/Setup.md)。 + +## 快速开始 + +运行以下代码可以快速加载 [Qwen/Qwen-Image](https://www.modelscope.cn/models/Qwen/Qwen-Image) 模型并进行推理。显存管理已启动,框架会自动根据剩余显存控制模型参数的加载,最低 8G 显存即可运行。 + +```python +from diffsynth.pipelines.qwen_image import QwenImagePipeline, ModelConfig +import torch + +vram_config = { + "offload_dtype": "disk", + "offload_device": "disk", + "onload_dtype": torch.float8_e4m3fn, + "onload_device": "cpu", + "preparing_dtype": torch.float8_e4m3fn, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} +pipe = QwenImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="transformer/diffusion_pytorch_model*.safetensors", **vram_config), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="text_encoder/model*.safetensors", **vram_config), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="vae/diffusion_pytorch_model.safetensors", **vram_config), + ], + tokenizer_config=ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="tokenizer/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) +prompt = "精致肖像,水下少女,蓝裙飘逸,发丝轻扬,光影透澈,气泡环绕,面容恬静,细节精致,梦幻唯美。" +image = pipe(prompt, seed=0, num_inference_steps=40) +image.save("image.jpg") +``` + +## 模型总览 + +|模型 ID|推理|低显存推理|全量训练|全量训练后验证|LoRA 训练|LoRA 训练后验证| +|-|-|-|-|-|-|-| +|[Qwen/Qwen-Image](https://www.modelscope.cn/models/Qwen/Qwen-Image)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/Qwen-Image.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/Qwen-Image.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/full/Qwen-Image.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_full/Qwen-Image.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/lora/Qwen-Image.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_lora/Qwen-Image.py)| +|[Qwen/Qwen-Image-2512](https://www.modelscope.cn/models/Qwen/Qwen-Image-2512)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/Qwen-Image-2512.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/Qwen-Image-2512.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/full/Qwen-Image-2512.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_full/Qwen-Image-2512.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/lora/Qwen-Image-2512.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_lora/Qwen-Image-2512.py)| +|[Qwen/Qwen-Image-Edit](https://www.modelscope.cn/models/Qwen/Qwen-Image-Edit)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/Qwen-Image-Edit.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/Qwen-Image-Edit.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/full/Qwen-Image-Edit.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_full/Qwen-Image-Edit.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/lora/Qwen-Image-Edit.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_lora/Qwen-Image-Edit.py)| +|[Qwen/Qwen-Image-Edit-2509](https://www.modelscope.cn/models/Qwen/Qwen-Image-Edit-2509)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/Qwen-Image-Edit-2509.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/Qwen-Image-Edit-2509.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/full/Qwen-Image-Edit-2509.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_full/Qwen-Image-Edit-2509.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/lora/Qwen-Image-Edit-2509.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_lora/Qwen-Image-Edit-2509.py)| +|[Qwen/Qwen-Image-Edit-2511](https://www.modelscope.cn/models/Qwen/Qwen-Image-Edit-2511)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/Qwen-Image-Edit-2511.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/Qwen-Image-Edit-2511.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/full/Qwen-Image-Edit-2511.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_full/Qwen-Image-Edit-2511.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/lora/Qwen-Image-Edit-2511.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_lora/Qwen-Image-Edit-2511.py)| +|[FireRedTeam/FireRed-Image-Edit-1.0](https://www.modelscope.cn/models/FireRedTeam/FireRed-Image-Edit-1.0)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/FireRed-Image-Edit-1.0.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/FireRed-Image-Edit-1.0.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/full/FireRed-Image-Edit-1.0.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_full/FireRed-Image-Edit-1.0.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/lora/FireRed-Image-Edit-1.0.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_lora/FireRed-Image-Edit-1.0.py)| +|[FireRedTeam/FireRed-Image-Edit-1.1](https://www.modelscope.cn/models/FireRedTeam/FireRed-Image-Edit-1.1)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/FireRed-Image-Edit-1.1.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/FireRed-Image-Edit-1.1.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/full/FireRed-Image-Edit-1.1.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_full/FireRed-Image-Edit-1.1.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/lora/FireRed-Image-Edit-1.1.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_lora/FireRed-Image-Edit-1.1.py)| +|[lightx2v/Qwen-Image-Edit-2511-Lightning](https://modelscope.cn/models/lightx2v/Qwen-Image-Edit-2511-Lightning)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/Qwen-Image-Edit-2511-Lightning.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/Qwen-Image-Edit-2511-Lightning.py)|-|-|-|-| +|[Qwen/Qwen-Image-Layered](https://www.modelscope.cn/models/Qwen/Qwen-Image-Layered)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/Qwen-Image-Layered.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/Qwen-Image-Layered.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/full/Qwen-Image-Layered.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_full/Qwen-Image-Layered.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/lora/Qwen-Image-Layered.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_lora/Qwen-Image-Layered.py)| +|[DiffSynth-Studio/Qwen-Image-Layered-Control](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Layered-Control)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/Qwen-Image-Layered-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/Qwen-Image-Layered-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/full/Qwen-Image-Layered-Control.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_full/Qwen-Image-Layered-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/lora/Qwen-Image-Layered-Control.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_lora/Qwen-Image-Layered-Control.py)| +|[DiffSynth-Studio/Qwen-Image-Layered-Control-V2](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Layered-Control-V2)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/Qwen-Image-Layered-Control-V2.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/Qwen-Image-Layered-Control-V2.py)|-|-|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/lora/Qwen-Image-Layered-Control-V2.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_lora/Qwen-Image-Layered-Control-V2.py)| +|[DiffSynth-Studio/Qwen-Image-EliGen](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-EliGen)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/Qwen-Image-EliGen.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/Qwen-Image-EliGen.py)|-|-|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/lora/Qwen-Image-EliGen.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_lora/Qwen-Image-EliGen.py)| +|[DiffSynth-Studio/Qwen-Image-EliGen-V2](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-EliGen-V2)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/Qwen-Image-EliGen-V2.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/Qwen-Image-EliGen-V2.py)|-|-|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/lora/Qwen-Image-EliGen.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_lora/Qwen-Image-EliGen.py)| +|[DiffSynth-Studio/Qwen-Image-EliGen-Poster](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-EliGen-Poster)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/Qwen-Image-EliGen-Poster.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/Qwen-Image-EliGen-Poster.py)|-|-|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/lora/Qwen-Image-EliGen-Poster.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_lora/Qwen-Image-EliGen-Poster.py)| +|[DiffSynth-Studio/Qwen-Image-Distill-Full](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Distill-Full)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/Qwen-Image-Distill-Full.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/Qwen-Image-Distill-Full.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/full/Qwen-Image-Distill-Full.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_full/Qwen-Image-Distill-Full.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/lora/Qwen-Image-Distill-Full.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_lora/Qwen-Image-Distill-Full.py)| +|[DiffSynth-Studio/Qwen-Image-Distill-LoRA](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Distill-LoRA)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/Qwen-Image-Distill-LoRA.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/Qwen-Image-Distill-LoRA.py)|-|-|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/lora/Qwen-Image-Distill-LoRA.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_lora/Qwen-Image-Distill-LoRA.py)| +|[DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Canny](https://modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Canny)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/Qwen-Image-Blockwise-ControlNet-Canny.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/Qwen-Image-Blockwise-ControlNet-Canny.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/full/Qwen-Image-Blockwise-ControlNet-Canny.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_full/Qwen-Image-Blockwise-ControlNet-Canny.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/lora/Qwen-Image-Blockwise-ControlNet-Canny.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_lora/Qwen-Image-Blockwise-ControlNet-Canny.py)| +|[DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Depth](https://modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Depth)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/Qwen-Image-Blockwise-ControlNet-Depth.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/Qwen-Image-Blockwise-ControlNet-Depth.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/full/Qwen-Image-Blockwise-ControlNet-Depth.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_full/Qwen-Image-Blockwise-ControlNet-Depth.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/lora/Qwen-Image-Blockwise-ControlNet-Depth.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_lora/Qwen-Image-Blockwise-ControlNet-Depth.py)| +|[DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Inpaint](https://modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Blockwise-ControlNet-Inpaint)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/Qwen-Image-Blockwise-ControlNet-Inpaint.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/Qwen-Image-Blockwise-ControlNet-Inpaint.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/full/Qwen-Image-Blockwise-ControlNet-Inpaint.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_full/Qwen-Image-Blockwise-ControlNet-Inpaint.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/lora/Qwen-Image-Blockwise-ControlNet-Inpaint.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_lora/Qwen-Image-Blockwise-ControlNet-Inpaint.py)| +|[DiffSynth-Studio/Qwen-Image-In-Context-Control-Union](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-In-Context-Control-Union)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/Qwen-Image-In-Context-Control-Union.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/Qwen-Image-In-Context-Control-Union.py)|-|-|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/lora/Qwen-Image-In-Context-Control-Union.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/validate_lora/Qwen-Image-In-Context-Control-Union.py)| +|[DiffSynth-Studio/Qwen-Image-Edit-Lowres-Fix](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Edit-Lowres-Fix)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/Qwen-Image-Edit-Lowres-Fix.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/Qwen-Image-Edit-Lowres-Fix.py)|-|-|-|-| +|[DiffSynth-Studio/Qwen-Image-i2L](https://www.modelscope.cn/models/DiffSynth-Studio/Qwen-Image-i2L)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference/Qwen-Image-i2L.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_inference_low_vram/Qwen-Image-i2L.py)|-|-|-|-| + +特殊训练脚本: + +* 差分 LoRA 训练:[doc](../Training/Differential_LoRA.md)、[code](https://github.com/modelscope/DiffSynth-Studio/tree/main/examples/qwen_image/model_training/special/differential_training/) +* FP8 精度训练:[doc](../Training/FP8_Precision.md)、[code](https://github.com/modelscope/DiffSynth-Studio/tree/main/examples/qwen_image/model_training/special/fp8_training/) +* 两阶段拆分训练:[doc](../Training/Split_Training.md)、[code](https://github.com/modelscope/DiffSynth-Studio/tree/main/examples/qwen_image/model_training/special/split_training/) +* 端到端直接蒸馏:[doc](../Training/Direct_Distill.md)、[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/lora/Qwen-Image-Distill-LoRA.sh) + +DeepSpeed ZeRO 3 训练:Qwen-Image 系列模型支持 DeepSpeed ZeRO 3 训练,将模型拆分到多个 GPU 上,以 Qwen-Image 模型的全量训练为例,需修改: + +* `--config_file examples/qwen_image/model_training/full/accelerate_config_zero3.yaml` +* `--initialize_model_on_cpu` + +## 模型推理 + +模型通过 `QwenImagePipeline.from_pretrained` 加载,详见[加载模型](../Pipeline_Usage/Model_Inference.md#加载模型)。 + +`QwenImagePipeline` 推理的输入参数包括: + +* `prompt`: 提示词,描述画面中出现的内容。 +* `negative_prompt`: 负向提示词,描述画面中不应该出现的内容,默认值为 `""`。 +* `cfg_scale`: Classifier-free guidance 的参数,默认值为 4,当设置为 1 时不再生效。 +* `input_image`: 输入图像,用于图生图,该参数与 `denoising_strength` 配合使用。 +* `denoising_strength`: 去噪强度,范围是 0~1,默认值为 1,当数值接近 0 时,生成图像与输入图像相似;当数值接近 1 时,生成图像与输入图像相差更大。在不输入 `input_image` 参数时,请不要将其设置为非 1 的数值。 +* `inpaint_mask`: 图像局部重绘的遮罩图像。 +* `inpaint_blur_size`: 图像局部重绘的边缘柔化宽度。 +* `inpaint_blur_sigma`: 图像局部重绘的边缘柔化强度。 +* `height`: 图像高度,需保证高度为 16 的倍数。 +* `width`: 图像宽度,需保证宽度为 16 的倍数。 +* `seed`: 随机种子。默认为 `None`,即完全随机。 +* `rand_device`: 生成随机高斯噪声矩阵的计算设备,默认为 `"cpu"`。当设置为 `cuda` 时,在不同 GPU 上会导致不同的生成结果。 +* `num_inference_steps`: 推理次数,默认值为 30。 +* `exponential_shift_mu`: 在采样时间步时采用的固定参数,留空则根据图像宽高进行采样。 +* `blockwise_controlnet_inputs`: Blockwise ControlNet 模型的输入。 +* `eligen_entity_prompts`: EliGen 分区控制的提示词。 +* `eligen_entity_masks`: EliGen 分区控制的区域遮罩图像。 +* `eligen_enable_on_negative`: 是否在 CFG 的负向一侧启用 EliGen 分区控制。 +* `edit_image`: 编辑模型的待编辑图像,支持多张图像。 +* `edit_image_auto_resize`: 是否自动缩放待编辑图像。 +* `edit_rope_interpolation`: 是否在低分辨率编辑图像上启用 ROPE 插值。 +* `context_image`: In-Context Control 的输入图像。 +* `tiled`: 是否启用 VAE 分块推理,默认为 `False`。设置为 `True` 时可显著减少 VAE 编解码阶段的显存占用,会产生少许误差,以及少量推理时间延长。 +* `tile_size`: VAE 编解码阶段的分块大小,默认为 128,仅在 `tiled=True` 时生效。 +* `tile_stride`: VAE 编解码阶段的分块步长,默认为 64,仅在 `tiled=True` 时生效,需保证其数值小于或等于 `tile_size`。 +* `progress_bar_cmd`: 进度条,默认为 `tqdm.tqdm`。可通过设置为 `lambda x:x` 来屏蔽进度条。 + +如果显存不足,请开启[显存管理](../Pipeline_Usage/VRAM_management.md),我们在示例代码中提供了每个模型推荐的低显存配置,详见前文“模型总览”中的表格。 + +## 模型训练 + +Qwen-Image 系列模型统一通过 [`examples/qwen_image/model_training/train.py`](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/train.py) 进行训练,脚本的参数包括: + +* 通用训练参数 + * 数据集基础配置 + * `--dataset_base_path`: 数据集的根目录。 + * `--dataset_metadata_path`: 数据集的元数据文件路径。 + * `--dataset_repeat`: 每个 epoch 中数据集重复的次数。 + * `--dataset_num_workers`: 每个 Dataloder 的进程数量。 + * `--data_file_keys`: 元数据中需要加载的字段名称,通常是图像或视频文件的路径,以 `,` 分隔。 + * 模型加载配置 + * `--model_paths`: 要加载的模型路径。JSON 格式。 + * `--model_id_with_origin_paths`: 带原始路径的模型 ID,例如 `"Qwen/Qwen-Image:transformer/diffusion_pytorch_model*.safetensors"`。用逗号分隔。 + * `--extra_inputs`: 模型 Pipeline 所需的额外输入参数,例如训练图像编辑模型 Qwen-Image-Edit 时需要额外参数 `edit_image`,以 `,` 分隔。 + * `--fp8_models`:以 FP8 格式加载的模型,格式与 `--model_paths` 或 `--model_id_with_origin_paths` 一致,目前仅支持参数不被梯度更新的模型(不需要梯度回传,或梯度仅更新其 LoRA)。 + * `--quant_options`:对加载的模型进行动态量化。以 `;` 分隔多个条目,每个为 `<模型字符串>:[/]`,`<模型字符串>` 需与 `--model_paths`/`--model_id_with_origin_paths` 中的一致,`method` 为已注册的量化方法(如 `bitsandbytes_nf4`),`exclude_modules` 为可选的保持全精度的层。 + * 训练基础配置 + * `--learning_rate`: 学习率。 + * `--num_epochs`: 轮数(Epoch)。 + * `--trainable_models`: 可训练的模型,例如 `dit`、`vae`、`text_encoder`。 + * `--find_unused_parameters`: DDP 训练中是否存在未使用的参数,少数模型包含不参与梯度计算的冗余参数,需开启这一设置避免在多 GPU 训练中报错。 + * `--weight_decay`:权重衰减大小,详见 [torch.optim.AdamW](https://docs.pytorch.org/docs/stable/generated/torch.optim.AdamW.html)。 + * `--task`: 训练任务,默认为 `sft`,部分模型支持更多训练模式,请参考每个特定模型的文档。 + * 输出配置 + * `--output_path`: 模型保存路径。 + * `--remove_prefix_in_ckpt`: 在模型文件的 state dict 中移除前缀。 + * `--save_steps`: 保存模型的训练步数间隔,若此参数留空,则每个 epoch 保存一次。 + * LoRA 配置 + * `--lora_base_model`: LoRA 添加到哪个模型上。 + * `--lora_target_modules`: LoRA 添加到哪些层上。 + * `--lora_rank`: LoRA 的秩(Rank)。 + * `--lora_checkpoint`: LoRA 检查点的路径。如果提供此路径,LoRA 将从此检查点加载。 + * `--preset_lora_path`: 预置 LoRA 检查点路径,如果提供此路径,这一 LoRA 将会以融入基础模型的形式加载。此参数用于 LoRA 差分训练。 + * `--preset_lora_model`: 预置 LoRA 融入的模型,例如 `dit`。 + * 梯度配置 + * `--use_gradient_checkpointing`: 是否启用 gradient checkpointing。 + * `--use_gradient_checkpointing_offload`: 是否将 gradient checkpointing 卸载到内存中。 + * `--gradient_accumulation_steps`: 梯度累积步数。 + * 图像宽高配置(适用于图像生成模型和视频生成模型) + * `--height`: 图像或视频的高度。将 `height` 和 `width` 留空以启用动态分辨率。 + * `--width`: 图像或视频的宽度。将 `height` 和 `width` 留空以启用动态分辨率。 + * `--max_pixels`: 图像或视频帧的最大像素面积,当启用动态分辨率时,分辨率大于这个数值的图片都会被缩小,分辨率小于这个数值的图片保持不变。 +* Qwen-Image 专有参数 + * `--tokenizer_path`: tokenizer 的路径,适用于文生图模型,留空则自动从远程下载。 + * `--processor_path`: processor 的路径,适用于图像编辑模型,留空则自动从远程下载。 + +我们构建了一个样例图像数据集,以方便您进行测试,通过以下命令可以下载这个数据集: + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --local_dir ./data/diffsynth_example_dataset +``` + +我们为每个模型编写了推荐的训练脚本,请参考前文“模型总览”中的表格。关于如何编写模型训练脚本,请参考[模型训练](../Pipeline_Usage/Model_Training.md);更多高阶训练算法,请参考[训练框架详解](https://github.com/modelscope/DiffSynth-Studio/tree/main/docs/zh/Training/)。 diff --git a/docs/zh/Model_Details/Qwen-Video-Edit.md b/docs/zh/Model_Details/Qwen-Video-Edit.md new file mode 100644 index 0000000000000000000000000000000000000000..221a2bb56432aca62eda9ddbcb8561ba0bfbac7d --- /dev/null +++ b/docs/zh/Model_Details/Qwen-Video-Edit.md @@ -0,0 +1,146 @@ +# Qwen-Video-Edit + +Qwen-Video-Edit 是基于 Qwen-Image 架构的视频编辑模型,来自开源社区开发者 [yunpeng1998](https://github.com/yunpeng1998)。该模型接收一段输入视频和文本提示词,生成符合提示词描述的编辑后视频。模型采用 QwenImageDiT 作为核心 DiT 主干,结合 Wan2.1 VAE 进行视频编解码,并通过 QwenVideoEditAdapter 将视频特征投影到 DiT 的特征空间中。 + +## 安装 + +在使用本项目进行模型推理和训练前,请先安装 DiffSynth-Studio。 + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +更多关于安装的信息,请参考[安装依赖](../Pipeline_Usage/Setup.md)。 + +## 快速开始 + +运行以下代码可以快速加载 [yunpeng1998/Qwen-Video-Edit](https://www.modelscope.cn/models/yunpeng1998/Qwen-Video-Edit) 模型并进行推理。显存管理已启动,框架会自动根据剩余显存控制模型参数的加载。 + +```python +import torch +from modelscope import dataset_snapshot_download +from diffsynth.core import ModelConfig +from diffsynth.pipelines.qwen_video_edit import QwenVideoEditPipeline +from diffsynth.utils.data import VideoData, save_video + +vram_config = { + "offload_dtype": torch.bfloat16, + "offload_device": "cpu", + "onload_dtype": torch.bfloat16, + "onload_device": "cpu", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} + +dataset_snapshot_download( + "DiffSynth-Studio/diffsynth_example_dataset", + local_dir="data/diffsynth_example_dataset", + allow_file_pattern="qwen_video_edit/Qwen-Video-Edit/*" +) + +edit_video = VideoData("data/diffsynth_example_dataset/qwen_video_edit/Qwen-Video-Edit/source.mp4") +prompts = [ + "Transform the video into Japanese anime style", +] +pipe = QwenVideoEditPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="yunpeng1998/Qwen-Video-Edit", origin_file_pattern="360P/step-30000.safetensors", **vram_config), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="text_encoder/model*.safetensors", **vram_config), + ModelConfig(model_id="Wan-AI/Wan2.1-T2V-1.3B", origin_file_pattern="Wan2.1_VAE.pth", **vram_config), + ], + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) +video = pipe(edit_video=edit_video, prompts=prompts, height=640, width=384, num_frames=45, cfg_scale=4.0, num_inference_steps=40, seed=0) +save_video(video, "video_Qwen-Video-Edit.mp4", fps=16) +``` + +## 模型总览 + +|模型 ID|推理|低显存推理|全量训练|全量训练后验证|LoRA 训练|LoRA 训练后验证| +|-|-|-|-|-|-|-| +|[yunpeng1998/Qwen-Video-Edit](https://www.modelscope.cn/models/yunpeng1998/Qwen-Video-Edit)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_video_edit/model_inference/Qwen-Video-Edit.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_video_edit/model_inference_low_vram/Qwen-Video-Edit.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_video_edit/model_training/full/Qwen-Video-Edit.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_video_edit/model_training/validate_full/Qwen-Video-Edit.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_video_edit/model_training/lora/Qwen-Video-Edit.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_video_edit/model_training/validate_lora/Qwen-Video-Edit.py)| + +## 模型推理 + +模型通过 `QwenVideoEditPipeline.from_pretrained` 加载,详见[加载模型](../Pipeline_Usage/Model_Inference.md#加载模型)。 + +`QwenVideoEditPipeline` 推理的输入参数包括: + +* `edit_video`: 输入视频,即待编辑的源视频。类型为 `list[PIL.Image.Image]`,通过 `VideoData` 加载。 +* `num_frames`: 视频帧数,默认值为 45。模型以 45 帧为一个 chunk 进行处理,每个 chunk 对应 `prompts` 列表中的一条提示词。 +* `height`: 视频高度,需保证高度为 16 的倍数。 +* `width`: 视频宽度,需保证宽度为 16 的倍数。 +* `tiled`: 是否启用 VAE 分块推理,默认为 `False`。设置为 `True` 时可显著减少 VAE 编解码阶段的显存占用,会产生少许误差,以及少量推理时间延长。 +* `tile_size`: VAE 编解码阶段的分块大小,默认为 `(30, 52)`,仅在 `tiled=True` 时生效。 +* `tile_stride`: VAE 编解码阶段的分块步长,默认为 `(15, 26)`,仅在 `tiled=True` 时生效,需保证其数值小于或等于 `tile_size`。 +* `prompts`: 提示词列表,每个元素对应一个 chunk 的编辑指令。 +* `negative_prompt`: 负向提示词,描述画面中不应该出现的内容,默认值为 `" "`。 +* `cfg_scale`: Classifier-free guidance 的参数,默认值为 4,当设置为 1 时不再生效。 +* `seed`: 随机种子。默认为 `None`,即完全随机。 +* `rand_device`: 生成随机高斯噪声矩阵的计算设备,默认为 `"cpu"`。当设置为 `cuda` 时,在不同 GPU 上会导致不同的生成结果。 +* `num_inference_steps`: 推理次数,默认值为 40。 +* `zero_cond_t`: 是否在时间步 t=0 时将条件特征置零。 +* `progress_bar_cmd`: 进度条,默认为 `tqdm.tqdm`。可通过设置为 `lambda x:x` 来屏蔽进度条。 + +## 模型训练 + +Qwen-Video-Edit 通过 [`examples/qwen_video_edit/model_training/train.py`](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_video_edit/model_training/train.py) 进行训练,脚本的参数包括: + +* 通用训练参数 + * 数据集基础配置 + * `--dataset_base_path`: 数据集的根目录。 + * `--dataset_metadata_path`: 数据集的元数据文件路径。 + * `--dataset_repeat`: 每个 epoch 中数据集重复的次数。 + * `--dataset_num_workers`: 每个 Dataloader 的进程数量。 + * `--data_file_keys`: 元数据中需要加载的字段名称,以 `,` 分隔。Qwen-Video-Edit 需要设置为 `"input_video,video"`,其中 `input_video` 是条件视频(源视频),`video` 是目标视频。 + * 模型加载配置 + * `--model_paths`: 要加载的模型路径。JSON 格式。 + * `--model_id_with_origin_paths`: 带原始路径的模型 ID,例如 `"yunpeng1998/Qwen-Video-Edit:360P/step-30000.safetensors"`。用逗号分隔。 + * `--extra_inputs`: 模型 Pipeline 所需的额外输入参数,以 `,` 分隔。 + * `--fp8_models`:以 FP8 格式加载的模型,格式与 `--model_paths` 或 `--model_id_with_origin_paths` 一致,目前仅支持参数不被梯度更新的模型。 + * `--quant_options`:对加载的模型进行动态量化。以 `;` 分隔多个条目,每个为 `<模型字符串>:[/]`。 + * 训练基础配置 + * `--learning_rate`: 学习率。 + * `--num_epochs`: 轮数(Epoch)。 + * `--trainable_models`: 可训练的模型,例如 `dit`、`adapter`。 + * `--find_unused_parameters`: DDP 训练中是否存在未使用的参数,需开启这一设置避免在多 GPU 训练中报错。 + * `--weight_decay`:权重衰减大小,详见 [torch.optim.AdamW](https://docs.pytorch.org/docs/stable/generated/torch.optim.AdamW.html)。 + * `--task`: 训练任务,默认为 `sft`。 + * 输出配置 + * `--output_path`: 模型保存路径。 + * `--remove_prefix_in_ckpt`: 在模型文件的 state dict 中移除前缀。 + * `--save_steps`: 保存模型的训练步数间隔,若此参数留空,则每个 epoch 保存一次。 + * LoRA 配置 + * `--lora_base_model`: LoRA 添加到哪个模型上。 + * `--lora_target_modules`: LoRA 添加到哪些层上。 + * `--lora_rank`: LoRA 的秩(Rank)。 + * `--lora_checkpoint`: LoRA 检查点的路径。如果提供此路径,LoRA 将从此检查点加载。 + * `--preset_lora_path`: 预置 LoRA 检查点路径,如果提供此路径,这一 LoRA 将会以融入基础模型的形式加载。 + * `--preset_lora_model`: 预置 LoRA 融入的模型,例如 `dit`。 + * 梯度配置 + * `--use_gradient_checkpointing`: 是否启用 gradient checkpointing。 + * `--use_gradient_checkpointing_offload`: 是否将 gradient checkpointing 卸载到内存中。 + * `--gradient_accumulation_steps`: 梯度累积步数。 + * 视频宽高配置 + * `--height`: 视频的高度。 + * `--width`: 视频的宽度。 + * `--num_frames`: 视频的帧数,默认为 45。 + * `--max_pixels`: 视频帧的最大像素面积。 +* Qwen-Video-Edit 专有参数 + * `--tokenizer_path`: tokenizer 的路径,留空则自动从远程下载。 + * `--processor_path`: processor 的路径,留空则自动从远程下载。 + * `--zero_cond_t`: 是否在时间步 t=0 时将条件特征置零。 + +我们构建了一个样例视频数据集,以方便您进行测试,通过以下命令可以下载这个数据集: + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "qwen_video_edit/Qwen-Video-Edit/*" --local_dir ./data/diffsynth_example_dataset +``` + +我们为模型编写了推荐的训练脚本,请参考前文"模型总览"中的表格。关于如何编写模型训练脚本,请参考[模型训练](../Pipeline_Usage/Model_Training.md);更多高阶训练算法,请参考[训练框架详解](https://github.com/modelscope/DiffSynth-Studio/tree/main/docs/zh/Training/)。 diff --git a/docs/zh/Model_Details/Stable-Diffusion-XL.md b/docs/zh/Model_Details/Stable-Diffusion-XL.md new file mode 100644 index 0000000000000000000000000000000000000000..8abcbcd3266d9b08c0bcfe3dac903684c3a5a8d5 --- /dev/null +++ b/docs/zh/Model_Details/Stable-Diffusion-XL.md @@ -0,0 +1,142 @@ +# Stable Diffusion XL + +Stable Diffusion XL (SDXL) 是由 Stability AI 开发的开源扩散式文本到图像生成模型,支持 1024x1024 分辨率的高质量文本到图像生成,采用双文本编码器(CLIP-L + CLIP-bigG)架构。 + +## 安装 + +在使用本项目进行模型推理和训练前,请先安装 DiffSynth-Studio。 + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +更多关于安装的信息,请参考[安装依赖](../Pipeline_Usage/Setup.md)。 + +## 快速开始 + +运行以下代码可以快速加载 [stabilityai/stable-diffusion-xl-base-1.0](https://www.modelscope.cn/models/stabilityai/stable-diffusion-xl-base-1.0) 模型并进行推理。显存管理已启动,框架会自动根据剩余显存控制模型参数的加载,最低 6GB 显存即可运行。 + +```python +import torch +from diffsynth.core import ModelConfig +from diffsynth.pipelines.stable_diffusion_xl import StableDiffusionXLPipeline + +vram_config = { + "offload_dtype": torch.float32, + "offload_device": "cpu", + "onload_dtype": torch.float32, + "onload_device": "cpu", + "preparing_dtype": torch.float32, + "preparing_device": "cuda", + "computation_dtype": torch.float32, + "computation_device": "cuda", +} +pipe = StableDiffusionXLPipeline.from_pretrained( + torch_dtype=torch.float32, + model_configs=[ + ModelConfig(model_id="stabilityai/stable-diffusion-xl-base-1.0", origin_file_pattern="text_encoder/model.safetensors", **vram_config), + ModelConfig(model_id="stabilityai/stable-diffusion-xl-base-1.0", origin_file_pattern="text_encoder_2/model.safetensors", **vram_config), + ModelConfig(model_id="stabilityai/stable-diffusion-xl-base-1.0", origin_file_pattern="unet/diffusion_pytorch_model.safetensors", **vram_config), + ModelConfig(model_id="stabilityai/stable-diffusion-xl-base-1.0", origin_file_pattern="vae/diffusion_pytorch_model.safetensors", **vram_config), + ], + tokenizer_config=ModelConfig(model_id="stabilityai/stable-diffusion-xl-base-1.0", origin_file_pattern="tokenizer/"), + tokenizer_2_config=ModelConfig(model_id="stabilityai/stable-diffusion-xl-base-1.0", origin_file_pattern="tokenizer_2/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) + +image = pipe( + prompt="a photo of an astronaut riding a horse on mars", + negative_prompt="", + cfg_scale=5.0, + height=1024, + width=1024, + seed=42, + num_inference_steps=50, +) +image.save("image.jpg") +``` + +## 模型总览 + +|模型 ID|推理|低显存推理|全量训练|全量训练后验证|LoRA 训练|LoRA 训练后验证| +|-|-|-|-|-|-|-| +|[stabilityai/stable-diffusion-xl-base-1.0](https://www.modelscope.cn/models/stabilityai/stable-diffusion-xl-base-1.0)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/stable_diffusion_xl/model_inference/stable-diffusion-xl-base-1.0.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/stable_diffusion_xl/model_inference_low_vram/stable-diffusion-xl-base-1.0.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/stable_diffusion_xl/model_training/full/stable-diffusion-xl-base-1.0.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/stable_diffusion_xl/model_training/validate_full/stable-diffusion-xl-base-1.0.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/stable_diffusion_xl/model_training/lora/stable-diffusion-xl-base-1.0.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/stable_diffusion_xl/model_training/validate_lora/stable-diffusion-xl-base-1.0.py)| + +## 模型推理 + +模型通过 `StableDiffusionXLPipeline.from_pretrained` 加载,详见[加载模型](../Pipeline_Usage/Model_Inference.md#加载模型)。 + +`StableDiffusionXLPipeline` 的推理输入参数包括: + +* `prompt`: 文本提示词。 +* `negative_prompt`: 负面提示词,默认为空字符串。 +* `cfg_scale`: Classifier-Free Guidance 缩放系数,默认 5.0。 +* `height`: 输出图像高度,默认 1024。 +* `width`: 输出图像宽度,默认 1024。 +* `seed`: 随机种子,默认不设置时使用随机种子。 +* `rand_device`: 噪声生成设备,默认 "cpu"。 +* `num_inference_steps`: 推理步数,默认 50。 +* `guidance_rescale`: Guidance rescale 系数,默认 0.0。 +* `progress_bar_cmd`: 进度条回调函数。 + +> `StableDiffusionXLPipeline` 需要双 tokenizer 配置(`tokenizer_config` 和 `tokenizer_2_config`),分别对应 CLIP-L 和 CLIP-bigG 文本编码器。 + +## 模型训练 + +stable_diffusion_xl 系列模型通过 `examples/stable_diffusion_xl/model_training/train.py` 进行训练,脚本的参数包括: + +* 通用训练参数 + * 数据集基础配置 + * `--dataset_base_path`: 数据集的根目录。 + * `--dataset_metadata_path`: 数据集的元数据文件路径。 + * `--dataset_repeat`: 每个 epoch 中数据集重复的次数。 + * `--dataset_num_workers`: 每个 Dataloader 的进程数量。 + * `--data_file_keys`: 元数据中需要加载的字段名称,通常是图像或视频文件的路径,以 `,` 分隔。 + * 模型加载配置 + * `--model_paths`: 要加载的模型路径。JSON 格式。 + * `--model_id_with_origin_paths`: 带原始路径的模型 ID。用逗号分隔。 + * `--extra_inputs`: 模型 Pipeline 所需的额外输入参数,以 `,` 分隔。 + * `--fp8_models`: 以 FP8 格式加载的模型,目前仅支持参数不被梯度更新的模型。 + * `--quant_options`:对加载的模型进行动态量化。以 `;` 分隔多个条目,每个为 `<模型字符串>:[/]`,`<模型字符串>` 需与 `--model_paths`/`--model_id_with_origin_paths` 中的一致,`method` 为已注册的量化方法(如 `bitsandbytes_nf4`),`exclude_modules` 为可选的保持全精度的层。 + * 训练基础配置 + * `--learning_rate`: 学习率。 + * `--num_epochs`: 轮数(Epoch)。 + * `--trainable_models`: 可训练的模型,例如 `dit`、`vae`、`text_encoder`。 + * `--find_unused_parameters`: DDP 训练中是否存在未使用的参数。 + * `--weight_decay`: 权重衰减大小。 + * `--task`: 训练任务,默认为 `sft`。 + * 输出配置 + * `--output_path`: 模型保存路径。 + * `--remove_prefix_in_ckpt`: 在模型文件的 state dict 中移除前缀。 + * `--save_steps`: 保存模型的训练步数间隔。 + * LoRA 配置 + * `--lora_base_model`: LoRA 添加到哪个模型上。 + * `--lora_target_modules`: LoRA 添加到哪些层上。 + * `--lora_rank`: LoRA 的秩(Rank)。 + * `--lora_checkpoint`: LoRA 检查点的路径。 + * `--preset_lora_path`: 预置 LoRA 检查点路径,用于 LoRA 差分训练。 + * `--preset_lora_model`: 预置 LoRA 融入的模型,例如 `dit`。 + * 梯度配置 + * `--use_gradient_checkpointing`: 是否启用 gradient checkpointing。 + * `--use_gradient_checkpointing_offload`: 是否将 gradient checkpointing 卸载到内存中。 + * `--gradient_accumulation_steps`: 梯度累积步数。 + * 分辨率配置 + * `--height`: 图像/视频的高度。留空启用动态分辨率。 + * `--width`: 图像/视频的宽度。留空启用动态分辨率。 + * `--max_pixels`: 最大像素面积,动态分辨率时大于此值的图片会被缩小。 + * `--num_frames`: 视频的帧数(仅视频生成模型)。 +* Stable Diffusion XL 专有参数 + * `--tokenizer_path`: 第一个 Tokenizer 路径。 + * `--tokenizer_2_path`: 第二个 Tokenizer 路径,默认为 `stabilityai/stable-diffusion-xl-base-1.0:tokenizer_2/`。 + +样例数据集下载: + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "stable_diffusion_xl/*" --local_dir ./data/diffsynth_example_dataset +``` + +[stable-diffusion-xl-base-1.0 训练脚本](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/stable_diffusion_xl/model_training/lora/stable-diffusion-xl-base-1.0.sh) + +我们为每个模型编写了推荐的训练脚本,请参考前文"模型总览"中的表格。关于如何编写模型训练脚本,请参考[模型训练](../Pipeline_Usage/Model_Training.md);更多高阶训练算法,请参考[训练框架详解](https://github.com/modelscope/DiffSynth-Studio/tree/main/docs/zh/Training/)。 diff --git a/docs/zh/Model_Details/Stable-Diffusion.md b/docs/zh/Model_Details/Stable-Diffusion.md new file mode 100644 index 0000000000000000000000000000000000000000..494ea29a525155363eea630200d96f806e06440d --- /dev/null +++ b/docs/zh/Model_Details/Stable-Diffusion.md @@ -0,0 +1,139 @@ +# Stable Diffusion + +Stable Diffusion 是由 Stability AI 开发的开源扩散式文本到图像生成模型,支持 512x512 分辨率的文本到图像生成。 + +## 安装 + +在使用本项目进行模型推理和训练前,请先安装 DiffSynth-Studio。 + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +更多关于安装的信息,请参考[安装依赖](../Pipeline_Usage/Setup.md)。 + +## 快速开始 + +运行以下代码可以快速加载 [AI-ModelScope/stable-diffusion-v1-5](https://www.modelscope.cn/models/AI-ModelScope/stable-diffusion-v1-5) 模型并进行推理。显存管理已启动,框架会自动根据剩余显存控制模型参数的加载,最低 2GB 显存即可运行。 + +```python +import torch +from diffsynth.core import ModelConfig +from diffsynth.pipelines.stable_diffusion import StableDiffusionPipeline + +vram_config = { + "offload_dtype": torch.float32, + "offload_device": "cpu", + "onload_dtype": torch.float32, + "onload_device": "cpu", + "preparing_dtype": torch.float32, + "preparing_device": "cuda", + "computation_dtype": torch.float32, + "computation_device": "cuda", +} +pipe = StableDiffusionPipeline.from_pretrained( + torch_dtype=torch.float32, + model_configs=[ + ModelConfig(model_id="AI-ModelScope/stable-diffusion-v1-5", origin_file_pattern="text_encoder/model.safetensors", **vram_config), + ModelConfig(model_id="AI-ModelScope/stable-diffusion-v1-5", origin_file_pattern="unet/diffusion_pytorch_model.safetensors", **vram_config), + ModelConfig(model_id="AI-ModelScope/stable-diffusion-v1-5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors", **vram_config), + ], + tokenizer_config=ModelConfig(model_id="AI-ModelScope/stable-diffusion-v1-5", origin_file_pattern="tokenizer/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) + +image = pipe( + prompt="a photo of an astronaut riding a horse on mars, high quality, detailed", + negative_prompt="blurry, low quality, deformed", + cfg_scale=7.5, + height=512, + width=512, + seed=42, + rand_device="cuda", + num_inference_steps=50, +) +image.save("image.jpg") +``` + +## 模型总览 + +|模型 ID|推理|低显存推理|全量训练|全量训练后验证|LoRA 训练|LoRA 训练后验证| +|-|-|-|-|-|-|-| +|[AI-ModelScope/stable-diffusion-v1-5](https://www.modelscope.cn/models/AI-ModelScope/stable-diffusion-v1-5)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/stable_diffusion/model_inference/stable-diffusion-v1-5.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/stable_diffusion/model_inference_low_vram/stable-diffusion-v1-5.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/stable_diffusion/model_training/full/stable-diffusion-v1-5.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/stable_diffusion/model_training/validate_full/stable-diffusion-v1-5.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/stable_diffusion/model_training/lora/stable-diffusion-v1-5.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/stable_diffusion/model_training/validate_lora/stable-diffusion-v1-5.py)| + +## 模型推理 + +模型通过 `StableDiffusionPipeline.from_pretrained` 加载,详见[加载模型](../Pipeline_Usage/Model_Inference.md#加载模型)。 + +`StableDiffusionPipeline` 的推理输入参数包括: + +* `prompt`: 文本提示词。 +* `negative_prompt`: 负面提示词,默认为空字符串。 +* `cfg_scale`: Classifier-Free Guidance 缩放系数,默认 7.5。 +* `height`: 输出图像高度,默认 512。 +* `width`: 输出图像宽度,默认 512。 +* `seed`: 随机种子,默认不设置时使用随机种子。 +* `rand_device`: 噪声生成设备,默认 "cpu"。 +* `num_inference_steps`: 推理步数,默认 50。 +* `eta`: DDIM 调度器的 eta 参数,默认 0.0。 +* `guidance_rescale`: Guidance rescale 系数,默认 0.0。 +* `progress_bar_cmd`: 进度条回调函数。 + +## 模型训练 + +stable_diffusion 系列模型通过 `examples/stable_diffusion/model_training/train.py` 进行训练,脚本的参数包括: + +* 通用训练参数 + * 数据集基础配置 + * `--dataset_base_path`: 数据集的根目录。 + * `--dataset_metadata_path`: 数据集的元数据文件路径。 + * `--dataset_repeat`: 每个 epoch 中数据集重复的次数。 + * `--dataset_num_workers`: 每个 Dataloader 的进程数量。 + * `--data_file_keys`: 元数据中需要加载的字段名称,通常是图像或视频文件的路径,以 `,` 分隔。 + * 模型加载配置 + * `--model_paths`: 要加载的模型路径。JSON 格式。 + * `--model_id_with_origin_paths`: 带原始路径的模型 ID。用逗号分隔。 + * `--extra_inputs`: 模型 Pipeline 所需的额外输入参数,以 `,` 分隔。 + * `--fp8_models`: 以 FP8 格式加载的模型,目前仅支持参数不被梯度更新的模型。 + * `--quant_options`:对加载的模型进行动态量化。以 `;` 分隔多个条目,每个为 `<模型字符串>:[/]`,`<模型字符串>` 需与 `--model_paths`/`--model_id_with_origin_paths` 中的一致,`method` 为已注册的量化方法(如 `bitsandbytes_nf4`),`exclude_modules` 为可选的保持全精度的层。 + * 训练基础配置 + * `--learning_rate`: 学习率。 + * `--num_epochs`: 轮数(Epoch)。 + * `--trainable_models`: 可训练的模型,例如 `dit`、`vae`、`text_encoder`。 + * `--find_unused_parameters`: DDP 训练中是否存在未使用的参数。 + * `--weight_decay`: 权重衰减大小。 + * `--task`: 训练任务,默认为 `sft`。 + * 输出配置 + * `--output_path`: 模型保存路径。 + * `--remove_prefix_in_ckpt`: 在模型文件的 state dict 中移除前缀。 + * `--save_steps`: 保存模型的训练步数间隔。 + * LoRA 配置 + * `--lora_base_model`: LoRA 添加到哪个模型上。 + * `--lora_target_modules`: LoRA 添加到哪些层上。 + * `--lora_rank`: LoRA 的秩(Rank)。 + * `--lora_checkpoint`: LoRA 检查点的路径。 + * `--preset_lora_path`: 预置 LoRA 检查点路径,用于 LoRA 差分训练。 + * `--preset_lora_model`: 预置 LoRA 融入的模型,例如 `dit`。 + * 梯度配置 + * `--use_gradient_checkpointing`: 是否启用 gradient checkpointing。 + * `--use_gradient_checkpointing_offload`: 是否将 gradient checkpointing 卸载到内存中。 + * `--gradient_accumulation_steps`: 梯度累积步数。 + * 分辨率配置 + * `--height`: 图像/视频的高度。留空启用动态分辨率。 + * `--width`: 图像/视频的宽度。留空启用动态分辨率。 + * `--max_pixels`: 最大像素面积,动态分辨率时大于此值的图片会被缩小。 + * `--num_frames`: 视频的帧数(仅视频生成模型)。 +* Stable Diffusion 专有参数 + * `--tokenizer_path`: Tokenizer 路径,默认为 `AI-ModelScope/stable-diffusion-v1-5:tokenizer/`。 + +样例数据集下载: + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "stable_diffusion/*" --local_dir ./data/diffsynth_example_dataset +``` + +[stable-diffusion-v1-5 训练脚本](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/stable_diffusion/model_training/lora/stable-diffusion-v1-5.sh) + +我们为每个模型编写了推荐的训练脚本,请参考前文"模型总览"中的表格。关于如何编写模型训练脚本,请参考[模型训练](../Pipeline_Usage/Model_Training.md);更多高阶训练算法,请参考[训练框架详解](https://github.com/modelscope/DiffSynth-Studio/tree/main/docs/zh/Training/)。 diff --git a/docs/zh/Model_Details/Wan.md b/docs/zh/Model_Details/Wan.md new file mode 100644 index 0000000000000000000000000000000000000000..084339075cd9ea98b2f2078b96cb7f77474a8220 --- /dev/null +++ b/docs/zh/Model_Details/Wan.md @@ -0,0 +1,267 @@ +# Wan + +https://github.com/user-attachments/assets/1d66ae74-3b02-40a9-acc3-ea95fc039314 + +Wan 是由阿里巴巴通义实验室通义万相团队开发的视频生成模型系列。 + +## 安装 + +在使用本项目进行模型推理和训练前,请先安装 DiffSynth-Studio。 + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +更多关于安装的信息,请参考[安装依赖](../Pipeline_Usage/Setup.md)。 + +## 快速开始 + +运行以下代码可以快速加载 [Wan-AI/Wan2.1-T2V-1.3B](https://modelscope.cn/models/Wan-AI/Wan2.1-T2V-1.3B) 模型并进行推理。显存管理已启动,框架会自动根据剩余显存控制模型参数的加载,最低 8G 显存即可运行。 + +```python +import torch +from diffsynth.utils.data import save_video, VideoData +from diffsynth.pipelines.wan_video import WanVideoPipeline, ModelConfig + +vram_config = { + "offload_dtype": "disk", + "offload_device": "disk", + "onload_dtype": torch.bfloat16, + "onload_device": "cpu", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} +pipe = WanVideoPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Wan-AI/Wan2.1-T2V-1.3B", origin_file_pattern="diffusion_pytorch_model*.safetensors", **vram_config), + ModelConfig(model_id="Wan-AI/Wan2.1-T2V-1.3B", origin_file_pattern="models_t5_umt5-xxl-enc-bf16.pth", **vram_config), + ModelConfig(model_id="Wan-AI/Wan2.1-T2V-1.3B", origin_file_pattern="Wan2.1_VAE.pth", **vram_config), + ], + tokenizer_config=ModelConfig(model_id="Wan-AI/Wan2.1-T2V-1.3B", origin_file_pattern="google/umt5-xxl/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 2, +) + +video = pipe( + prompt="纪实摄影风格画面,一只活泼的小狗在绿茵茵的草地上迅速奔跑。小狗毛色棕黄,两只耳朵立起,神情专注而欢快。阳光洒在它身上,使得毛发看上去格外柔软而闪亮。背景是一片开阔的草地,偶尔点缀着几朵野花,远处隐约可见蓝天和几片白云。透视感鲜明,捕捉小狗奔跑时的动感和四周草地的生机。中景侧面移动视角。", + negative_prompt="色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走", + seed=0, tiled=True, +) +save_video(video, "video.mp4", fps=15, quality=5) +``` + +## 模型总览 + +|模型 ID|额外参数|推理|低显存推理|全量训练|全量训练后验证|LoRA 训练|LoRA 训练后验证| +|-|-|-|-|-|-|-|-| +|[Wan-AI/Wan2.1-T2V-1.3B](https://modelscope.cn/models/Wan-AI/Wan2.1-T2V-1.3B)||[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.1-T2V-1.3B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.1-T2V-1.3B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.1-T2V-1.3B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.1-T2V-1.3B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.1-T2V-1.3B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.1-T2V-1.3B.py)| +|[Wan-AI/Wan2.1-T2V-14B](https://modelscope.cn/models/Wan-AI/Wan2.1-T2V-14B)||[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.1-T2V-14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.1-T2V-14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.1-T2V-14B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.1-T2V-14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.1-T2V-14B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.1-T2V-14B.py)| +|[Wan-AI/Wan2.1-I2V-14B-480P](https://modelscope.cn/models/Wan-AI/Wan2.1-I2V-14B-480P)|`input_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.1-I2V-14B-480P.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.1-I2V-14B-480P.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.1-I2V-14B-480P.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.1-I2V-14B-480P.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.1-I2V-14B-480P.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.1-I2V-14B-480P.py)| +|[Wan-AI/Wan2.1-I2V-14B-720P](https://modelscope.cn/models/Wan-AI/Wan2.1-I2V-14B-720P)|`input_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.1-I2V-14B-720P.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.1-I2V-14B-720P.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.1-I2V-14B-720P.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.1-I2V-14B-720P.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.1-I2V-14B-720P.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.1-I2V-14B-720P.py)| +|[Wan-AI/Wan2.1-FLF2V-14B-720P](https://modelscope.cn/models/Wan-AI/Wan2.1-FLF2V-14B-720P)|`input_image`, `end_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.1-FLF2V-14B-720P.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.1-FLF2V-14B-720P.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.1-FLF2V-14B-720P.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.1-FLF2V-14B-720P.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.1-FLF2V-14B-720P.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.1-FLF2V-14B-720P.py)| +|[iic/VACE-Wan2.1-1.3B-Preview](https://modelscope.cn/models/iic/VACE-Wan2.1-1.3B-Preview)|`vace_control_video`, `vace_reference_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.1-VACE-1.3B-Preview.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.1-VACE-1.3B-Preview.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.1-VACE-1.3B-Preview.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.1-VACE-1.3B-Preview.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.1-VACE-1.3B-Preview.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.1-VACE-1.3B-Preview.py)| +|[Wan-AI/Wan2.1-VACE-1.3B](https://modelscope.cn/models/Wan-AI/Wan2.1-VACE-1.3B)|`vace_control_video`, `vace_reference_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.1-VACE-1.3B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.1-VACE-1.3B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.1-VACE-1.3B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.1-VACE-1.3B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.1-VACE-1.3B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.1-VACE-1.3B.py)| +|[Wan-AI/Wan2.1-VACE-14B](https://modelscope.cn/models/Wan-AI/Wan2.1-VACE-14B)|`vace_control_video`, `vace_reference_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.1-VACE-14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.1-VACE-14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.1-VACE-14B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.1-VACE-14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.1-VACE-14B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.1-VACE-14B.py)| +|[PAI/Wan2.1-Fun-1.3B-InP](https://modelscope.cn/models/PAI/Wan2.1-Fun-1.3B-InP)|`input_image`, `end_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.1-Fun-1.3B-InP.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.1-Fun-1.3B-InP.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.1-Fun-1.3B-InP.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.1-Fun-1.3B-InP.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.1-Fun-1.3B-InP.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.1-Fun-1.3B-InP.py)| +|[PAI/Wan2.1-Fun-1.3B-Control](https://modelscope.cn/models/PAI/Wan2.1-Fun-1.3B-Control)|`control_video`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.1-Fun-1.3B-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.1-Fun-1.3B-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.1-Fun-1.3B-Control.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.1-Fun-1.3B-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.1-Fun-1.3B-Control.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.1-Fun-1.3B-Control.py)| +|[PAI/Wan2.1-Fun-14B-InP](https://modelscope.cn/models/PAI/Wan2.1-Fun-14B-InP)|`input_image`, `end_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.1-Fun-14B-InP.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.1-Fun-14B-InP.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.1-Fun-14B-InP.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.1-Fun-14B-InP.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.1-Fun-14B-InP.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.1-Fun-14B-InP.py)| +|[PAI/Wan2.1-Fun-14B-Control](https://modelscope.cn/models/PAI/Wan2.1-Fun-14B-Control)|`control_video`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.1-Fun-14B-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.1-Fun-14B-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.1-Fun-14B-Control.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.1-Fun-14B-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.1-Fun-14B-Control.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.1-Fun-14B-Control.py)| +|[PAI/Wan2.1-Fun-V1.1-1.3B-Control](https://modelscope.cn/models/PAI/Wan2.1-Fun-V1.1-1.3B-Control)|`control_video`, `reference_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.1-Fun-V1.1-1.3B-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.1-Fun-V1.1-1.3B-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.1-Fun-V1.1-1.3B-Control.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.1-Fun-V1.1-1.3B-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.1-Fun-V1.1-1.3B-Control.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.1-Fun-V1.1-1.3B-Control.py)| +|[PAI/Wan2.1-Fun-V1.1-14B-Control](https://modelscope.cn/models/PAI/Wan2.1-Fun-V1.1-14B-Control)|`control_video`, `reference_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.1-Fun-V1.1-14B-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.1-Fun-V1.1-14B-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.1-Fun-V1.1-14B-Control.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.1-Fun-V1.1-14B-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.1-Fun-V1.1-14B-Control.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.1-Fun-V1.1-14B-Control.py)| +|[PAI/Wan2.1-Fun-V1.1-1.3B-InP](https://modelscope.cn/models/PAI/Wan2.1-Fun-V1.1-1.3B-InP)|`input_image`, `end_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.1-Fun-V1.1-1.3B-InP.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.1-Fun-V1.1-1.3B-InP.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.1-Fun-V1.1-1.3B-InP.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.1-Fun-V1.1-1.3B-InP.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.1-Fun-V1.1-1.3B-InP.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.1-Fun-V1.1-1.3B-InP.py)| +|[PAI/Wan2.1-Fun-V1.1-14B-InP](https://modelscope.cn/models/PAI/Wan2.1-Fun-V1.1-14B-InP)|`input_image`, `end_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.1-Fun-V1.1-14B-InP.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.1-Fun-V1.1-14B-InP.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.1-Fun-V1.1-14B-InP.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.1-Fun-V1.1-14B-InP.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.1-Fun-V1.1-14B-InP.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.1-Fun-V1.1-14B-InP.py)| +|[PAI/Wan2.1-Fun-V1.1-1.3B-Control-Camera](https://modelscope.cn/models/PAI/Wan2.1-Fun-V1.1-1.3B-Control-Camera)|`control_camera_video`, `input_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.1-Fun-V1.1-1.3B-Control-Camera.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.1-Fun-V1.1-1.3B-Control-Camera.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.1-Fun-V1.1-1.3B-Control-Camera.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.1-Fun-V1.1-1.3B-Control-Camera.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.1-Fun-V1.1-1.3B-Control-Camera.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.1-Fun-V1.1-1.3B-Control-Camera.py)| +|[PAI/Wan2.1-Fun-V1.1-14B-Control-Camera](https://modelscope.cn/models/PAI/Wan2.1-Fun-V1.1-14B-Control-Camera)|`control_camera_video`, `input_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.1-Fun-V1.1-14B-Control-Camera.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.1-Fun-V1.1-14B-Control-Camera.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.1-Fun-V1.1-14B-Control-Camera.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.1-Fun-V1.1-14B-Control-Camera.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.1-Fun-V1.1-14B-Control-Camera.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.1-Fun-V1.1-14B-Control-Camera.py)| +|[DiffSynth-Studio/Wan2.1-1.3b-speedcontrol-v1](https://modelscope.cn/models/DiffSynth-Studio/Wan2.1-1.3b-speedcontrol-v1)|`motion_bucket_id`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.1-1.3b-speedcontrol-v1.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.1-1.3b-speedcontrol-v1.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.1-1.3b-speedcontrol-v1.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.1-1.3b-speedcontrol-v1.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.1-1.3b-speedcontrol-v1.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.1-1.3b-speedcontrol-v1.py)| +|[krea/krea-realtime-video](https://www.modelscope.cn/models/krea/krea-realtime-video)||[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/krea-realtime-video.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/krea-realtime-video.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/krea-realtime-video.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/krea-realtime-video.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/krea-realtime-video.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/krea-realtime-video.py)| +|[meituan-longcat/LongCat-Video](https://www.modelscope.cn/models/meituan-longcat/LongCat-Video)|`longcat_video`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/LongCat-Video.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/LongCat-Video.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/LongCat-Video.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/LongCat-Video.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/LongCat-Video.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/LongCat-Video.py)| +|[ByteDance/Video-As-Prompt-Wan2.1-14B](https://modelscope.cn/models/ByteDance/Video-As-Prompt-Wan2.1-14B)|`vap_video`, `vap_prompt`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Video-As-Prompt-Wan2.1-14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Video-As-Prompt-Wan2.1-14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Video-As-Prompt-Wan2.1-14B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Video-As-Prompt-Wan2.1-14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Video-As-Prompt-Wan2.1-14B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Video-As-Prompt-Wan2.1-14B.py)| +|[Wan-AI/Wan2.2-T2V-A14B](https://modelscope.cn/models/Wan-AI/Wan2.2-T2V-A14B)||[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.2-T2V-A14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.2-T2V-A14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.2-T2V-A14B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.2-T2V-A14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.2-T2V-A14B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.2-T2V-A14B.py)| +|[Wan-AI/Wan2.2-I2V-A14B](https://modelscope.cn/models/Wan-AI/Wan2.2-I2V-A14B)|`input_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.2-I2V-A14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.2-I2V-A14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.2-I2V-A14B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.2-I2V-A14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.2-I2V-A14B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.2-I2V-A14B.py)| +|[Wan-AI/Wan2.2-TI2V-5B](https://modelscope.cn/models/Wan-AI/Wan2.2-TI2V-5B)|`input_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.2-TI2V-5B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.2-TI2V-5B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.2-TI2V-5B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.2-TI2V-5B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.2-TI2V-5B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.2-TI2V-5B.py)| +|[Wan-AI/Wan2.2-Animate-14B](https://www.modelscope.cn/models/Wan-AI/Wan2.2-Animate-14B)|`input_image`, `animate_pose_video`, `animate_face_video`, `animate_inpaint_video`, `animate_mask_video`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.2-Animate-14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.2-Animate-14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.2-Animate-14B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.2-Animate-14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.2-Animate-14B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.2-Animate-14B.py)| +|[Wan-AI/Wan2.2-Animate-2-14B](https://www.modelscope.cn/models/Wan-AI/Wan2.2-Animate-2-14B)|`animate2_reference_image`, `animate2_reference_video`, `animate2_prompt_ref`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.2-Animate-2-14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.2-Animate-2-14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.2-Animate-2-14B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.2-Animate-2-14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.2-Animate-2-14B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.2-Animate-2-14B.py)| +|[Wan-AI/Wan2.2-Animate-2-14B: Distilled](https://www.modelscope.cn/models/Wan-AI/Wan2.2-Animate-2-14B)|`animate2_reference_image`, `animate2_reference_video`, `animate2_prompt_ref`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.2-Animate-2-14B-Distilled.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.2-Animate-2-14B-Distilled.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.2-Animate-2-14B-Distilled.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.2-Animate-2-14B-Distilled.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.2-Animate-2-14B-Distilled.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.2-Animate-2-14B-Distilled.py)| +|[Wan-AI/Wan2.2-S2V-14B](https://www.modelscope.cn/models/Wan-AI/Wan2.2-S2V-14B)|`input_image`, `input_audio`, `audio_sample_rate`, `s2v_pose_video`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.2-S2V-14B_multi_clips.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.2-S2V-14B_multi_clips.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.2-S2V-14B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.2-S2V-14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.2-S2V-14B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.2-S2V-14B.py)| +|[PAI/Wan2.2-VACE-Fun-A14B](https://www.modelscope.cn/models/PAI/Wan2.2-VACE-Fun-A14B)|`vace_control_video`, `vace_reference_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.2-VACE-Fun-A14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.2-VACE-Fun-A14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.2-VACE-Fun-A14B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.2-VACE-Fun-A14B.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.2-VACE-Fun-A14B.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.2-VACE-Fun-A14B.py)| +|[PAI/Wan2.2-Fun-A14B-InP](https://modelscope.cn/models/PAI/Wan2.2-Fun-A14B-InP)|`input_image`, `end_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.2-Fun-A14B-InP.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.2-Fun-A14B-InP.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.2-Fun-A14B-InP.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.2-Fun-A14B-InP.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.2-Fun-A14B-InP.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.2-Fun-A14B-InP.py)| +|[PAI/Wan2.2-Fun-A14B-Control](https://modelscope.cn/models/PAI/Wan2.2-Fun-A14B-Control)|`control_video`, `reference_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.2-Fun-A14B-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.2-Fun-A14B-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.2-Fun-A14B-Control.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.2-Fun-A14B-Control.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.2-Fun-A14B-Control.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.2-Fun-A14B-Control.py)| +|[PAI/Wan2.2-Fun-A14B-Control-Camera](https://modelscope.cn/models/PAI/Wan2.2-Fun-A14B-Control-Camera)|`control_camera_video`, `input_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan2.2-Fun-A14B-Control-Camera.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan2.2-Fun-A14B-Control-Camera.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan2.2-Fun-A14B-Control-Camera.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan2.2-Fun-A14B-Control-Camera.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan2.2-Fun-A14B-Control-Camera.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan2.2-Fun-A14B-Control-Camera.py)| +|[openmoss/MOVA-360p](https://modelscope.cn/models/openmoss/MOVA-360p)|`input_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/mova/model_inference/MOVA-360p-I2AV.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/mova/model_inference_low_vram/MOVA-360p-I2AV.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/mova/model_training/full/MOVA-360P-I2AV.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/mova/model_training/validate_full/MOVA-360p-I2AV.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/mova/model_training/lora/MOVA-360P-I2AV.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/mova/model_training/validate_lora/MOVA-360p-I2AV.py)| +|[openmoss/MOVA-720p](https://modelscope.cn/models/openmoss/MOVA-720p)|`input_image`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/mova/model_inference/MOVA-720p-I2AV.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/mova/model_inference_low_vram/MOVA-720p-I2AV.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/mova/model_training/full/MOVA-720P-I2AV.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/mova/model_training/validate_full/MOVA-720p-I2AV.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/mova/model_training/lora/MOVA-720P-I2AV.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/mova/model_training/validate_lora/MOVA-720p-I2AV.py)| +|[Wan-AI/Wan-Dancer-14B (global model)](https://modelscope.cn/models/Wan-AI/Wan-Dancer-14B)|`wantodance_music_path`, `wantodance_reference_image`, `wantodance_fps`, `wantodance_keyframes`, `wantodance_keyframes_mask`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan-Dancer-14B-global.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan-Dancer-14B-global.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan-Dancer-14B-global.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan-Dancer-14B-global.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan-Dancer-14B-global.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan-Dancer-14B-global.py)| +|[Wan-AI/Wan-Dancer-14B (local model)](https://modelscope.cn/models/Wan-AI/Wan-Dancer-14B)|`wantodance_music_path`, `wantodance_reference_image`, `wantodance_fps`, `wantodance_keyframes`, `wantodance_keyframes_mask`|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference/Wan-Dancer-14B-local.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_inference_low_vram/Wan-Dancer-14B-local.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/full/Wan-Dancer-14B-local.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_full/Wan-Dancer-14B-local.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/lora/Wan-Dancer-14B-local.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/validate_lora/Wan-Dancer-14B-local.py)| + +* FP8 精度训练:[doc](../Training/FP8_Precision.md)、[code](https://github.com/modelscope/DiffSynth-Studio/tree/main/examples/wanvideo/model_training/special/fp8_training/) +* 两阶段拆分训练:[doc](../Training/Split_Training.md)、[code](https://github.com/modelscope/DiffSynth-Studio/tree/main/examples/wanvideo/model_training/special/split_training/) +* 端到端直接蒸馏:[doc](../Training/Direct_Distill.md)、[code](https://github.com/modelscope/DiffSynth-Studio/tree/main/examples/wanvideo/model_training/special/direct_distill/) + +DeepSpeed ZeRO 3 训练:Wan 系列模型支持 DeepSpeed ZeRO 3 训练,将模型拆分到多个 GPU 上,以 Wan2.1-T2V-14B 模型的全量训练为例,需修改: + +* `--config_file examples/wanvideo/model_training/full/accelerate_config_zero3.yaml` +* `--initialize_model_on_cpu` + +## 模型推理 + +模型通过 `WanVideoPipeline.from_pretrained` 加载,详见[加载模型](../Pipeline_Usage/Model_Inference.md#加载模型)。 + +`WanVideoPipeline` 推理的输入参数包括: + +* `prompt`: 提示词,描述视频中出现的内容。 +* `negative_prompt`: 负向提示词,描述视频中不应该出现的内容,默认值为 `""`。 +* `cfg_scale`: Classifier-free guidance 的参数,默认值为 5,当设置为 1 时不再生效。 +* `input_image`: 输入图像,用于图生视频,该参数与 `denoising_strength` 配合使用。 +* `end_image`: 结束图像,用于首尾帧生成视频。 +* `input_video`: 输入视频,用于视频到视频生成,该参数与 `denoising_strength` 配合使用。 +* `denoising_strength`: 去噪强度,范围是 0~1,默认值为 1,当数值接近 0 时,生成视频与输入视频相似;当数值接近 1 时,生成视频与输入视频相差更大。 +* `control_video`: 控制视频,用于控制视频生成过程。 +* `reference_image`: 参考图像,用于保持生成视频中某些特征的一致性。 +* `camera_control_direction`: 相机控制方向,可选值为 `"Left"`, `"Right"`, `"Up"`, `"Down"`, `"LeftUp"`, `"LeftDown"`, `"RightUp"`, `"RightDown"`。 +* `camera_control_speed`: 相机控制速度,默认值为 1/54。 +* `vace_video`: VACE 控制视频。 +* `vace_video_mask`: VACE 控制视频遮罩。 +* `vace_reference_image`: VACE 参考图像。 +* `vace_scale`: VACE 控制强度,默认值为 1.0。 +* `animate_pose_video`: `animate` 模型姿态视频。 +* `animate_face_video`: `animate` 模型面部视频。 +* `animate_inpaint_video`: `animate` 模型局部编辑视频。 +* `animate_mask_video`: `animate` 模型遮罩视频。 +* `vap_video`: `video-as-prompt` 的输入视频。 +* `vap_prompt`: `video-as-prompt` 的文本描述。 +* `negative_vap_prompt`: `video-as-prompt` 的负向文本描述。 +* `input_audio`: 输入音频,用于语音到视频生成。 +* `audio_embeds`: 音频嵌入向量。 +* `audio_sample_rate`: 音频采样率,默认值为 16000。 +* `s2v_pose_video`: S2V 模型的姿态视频。 +* `motion_video`: S2V 模型的运动视频。 +* `animate2_reference_image`: Wan-Animate-2 模型的参考图像,提供角色身份。 +* `animate2_reference_video`: Wan-Animate-2 模型的驱动视频,提供动作。 +* `animate2_prompt_ref`: Wan-Animate-2 模型驱动视频的参考提示词,描述驱动视频中的内容。 +* `animate2_refert_images`: Wan-Animate-2 模型用于时序续接的参考帧图像,用于长视频分块生成。 +* `animate2_offload_kv`: Wan-Animate-2 模型是否将参考视频的 KV 缓存卸载到内存,默认值为 `False`。 +* `animate2_log_scale`: Wan-Animate-2 模型的引导对数缩放系数,默认值为 0.0,蒸馏模型建议设为 -1.3。 +* `height`: 视频高度,需保证高度为 16 的倍数。 +* `width`: 视频宽度,需保证宽度为 16 的倍数。 +* `num_frames`: 视频帧数,默认值为 81,需保证为 4 的倍数 + 1。 +* `seed`: 随机种子。默认为 `None`,即完全随机。 +* `rand_device`: 生成随机高斯噪声矩阵的计算设备,默认为 `"cpu"`。当设置为 `cuda` 时,在不同 GPU 上会导致不同的生成结果。 +* `num_inference_steps`: 推理次数,默认值为 50。 +* `motion_bucket_id`: 运动控制参数,数值越大,运动幅度越大。 +* `longcat_video`: LongCat 输入视频。 +* `tiled`: 是否启用 VAE 分块推理,默认为 `True`。设置为 `True` 时可显著减少 VAE 编解码阶段的显存占用,会产生少许误差,以及少量推理时间延长。 +* `tile_size`: VAE 编解码阶段的分块大小,默认为 `(30, 52)`,仅在 `tiled=True` 时生效。 +* `tile_stride`: VAE 编解码阶段的分块步长,默认为 `(15, 26)`,仅在 `tiled=True` 时生效,需保证其数值小于或等于 `tile_size`。 +* `switch_DiT_boundary`: 切换DiT模型的时间边界,默认值为 0.875。 +* `sigma_shift`: 时间步偏移参数,默认值为 5.0。 +* `sliding_window_size`: 滑动窗口大小。 +* `sliding_window_stride`: 滑动窗口步长。 +* `tea_cache_l1_thresh`: TeaCache 的 L1 阈值。 +* `tea_cache_model_id`: TeaCache 使用的模型 ID。 +* `progress_bar_cmd`: 进度条,默认为 `tqdm.tqdm`。可通过设置为 `lambda x:x` 来屏蔽进度条。 + +如果显存不足,请开启[显存管理](../Pipeline_Usage/VRAM_management.md),我们在示例代码中提供了每个模型推荐的低显存配置,详见前文"模型总览"中的表格。 + +### 多卡并行加速 + +如需开启多卡并行加速,请先安装 `flash_attn` 与 `xfuser`: + +```shell +pip install flash-attn --no-build-isolation +pip install xfuser +``` + +对代码进行如下修改([样例代码](https://github.com/modelscope/DiffSynth-Studio/tree/main/examples/wanvideo/acceleration/unified_sequence_parallel.py)): + +```diff +import torch +from PIL import Image +from diffsynth.utils.data import save_video, VideoData +from diffsynth.pipelines.wan_video import WanVideoPipeline, ModelConfig ++ import torch.distributed as dist + +pipe = WanVideoPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", ++ use_usp=True, + model_configs=[ + ModelConfig(model_id="Wan-AI/Wan2.1-T2V-14B", origin_file_pattern="diffusion_pytorch_model*.safetensors"), + ModelConfig(model_id="Wan-AI/Wan2.1-T2V-14B", origin_file_pattern="models_t5_umt5-xxl-enc-bf16.pth"), + ModelConfig(model_id="Wan-AI/Wan2.1-T2V-14B", origin_file_pattern="Wan2.1_VAE.pth"), + ], + tokenizer_config=ModelConfig(model_id="Wan-AI/Wan2.1-T2V-1.3B", origin_file_pattern="google/umt5-xxl/"), +) +video = pipe( + prompt="一名宇航员身穿太空服,面朝镜头骑着一匹机械马在火星表面驰骋。红色的荒凉地表延伸至远方,点缀着巨大的陨石坑和奇特的岩石结构。机械马的步伐稳健,扬起微弱的尘埃,展现出未来科技与原始探索的完美结合。宇航员手持操控装置,目光坚定,仿佛正在开辟人类的新疆域。背景是深邃的宇宙和蔚蓝的地球,画面既科幻又充满希望,让人不禁畅想未来的星际生活。", + negative_prompt="色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走", + seed=0, tiled=True, +) ++ if dist.get_rank() == 0: ++ save_video(video, "video1.mp4", fps=15, quality=5) +``` + +运行多卡并行推理时,请使用 `torchrun` 运行,其中 `--nproc_per_node` 为 GPU 数量: + +```shell +torchrun --nproc_per_node=8 examples/wanvideo/acceleration/unified_sequence_parallel.py +``` + +## 模型训练 + +Wan 系列模型统一通过 [`examples/wanvideo/model_training/train.py`](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/wanvideo/model_training/train.py) 进行训练,脚本的参数包括: + +* 通用训练参数 + * 数据集基础配置 + * `--dataset_base_path`: 数据集的根目录。 + * `--dataset_metadata_path`: 数据集的元数据文件路径。 + * `--dataset_repeat`: 每个 epoch 中数据集重复的次数。 + * `--dataset_num_workers`: 每个 Dataloder 的进程数量。 + * `--data_file_keys`: 元数据中需要加载的字段名称,通常是图像或视频文件的路径,以 `,` 分隔。 + * 模型加载配置 + * `--model_paths`: 要加载的模型路径。JSON 格式。 + * `--model_id_with_origin_paths`: 带原始路径的模型 ID,例如 `"Wan-AI/Wan2.1-T2V-1.3B:diffusion_pytorch_model*.safetensors"`。用逗号分隔。 + * `--extra_inputs`: 模型 Pipeline 所需的额外输入参数,例如训练图像编辑模型时需要额外参数,以 `,` 分隔。 + * `--fp8_models`:以 FP8 格式加载的模型,格式与 `--model_paths` 或 `--model_id_with_origin_paths` 一致,目前仅支持参数不被梯度更新的模型(不需要梯度回传,或梯度仅更新其 LoRA)。 + * `--quant_options`:对加载的模型进行动态量化。以 `;` 分隔多个条目,每个为 `<模型字符串>:[/]`,`<模型字符串>` 需与 `--model_paths`/`--model_id_with_origin_paths` 中的一致,`method` 为已注册的量化方法(如 `bitsandbytes_nf4`),`exclude_modules` 为可选的保持全精度的层。 + * 训练基础配置 + * `--learning_rate`: 学习率。 + * `--num_epochs`: 轮数(Epoch)。 + * `--trainable_models`: 可训练的模型,例如 `dit`、`vae`、`text_encoder`。 + * `--find_unused_parameters`: DDP 训练中是否存在未使用的参数,少数模型包含不参与梯度计算的冗余参数,需开启这一设置避免在多 GPU 训练中报错。 + * `--weight_decay`:权重衰减大小,详见 [torch.optim.AdamW](https://docs.pytorch.org/docs/stable/generated/torch.optim.AdamW.html)。 + * `--task`: 训练任务,默认为 `sft`,部分模型支持更多训练模式,请参考每个特定模型的文档。 + * 输出配置 + * `--output_path`: 模型保存路径。 + * `--remove_prefix_in_ckpt`: 在模型文件的 state dict 中移除前缀。 + * `--save_steps`: 保存模型的训练步数间隔,若此参数留空,则每个 epoch 保存一次。 + * LoRA 配置 + * `--lora_base_model`: LoRA 添加到哪个模型上。 + * `--lora_target_modules`: LoRA 添加到哪些层上。 + * `--lora_rank`: LoRA 的秩(Rank)。 + * `--lora_checkpoint`: LoRA 检查点的路径。如果提供此路径,LoRA 将从此检查点加载。 + * `--preset_lora_path`: 预置 LoRA 检查点路径,如果提供此路径,这一 LoRA 将会以融入基础模型的形式加载。此参数用于 LoRA 差分训练。 + * `--preset_lora_model`: 预置 LoRA 融入的模型,例如 `dit`。 + * 梯度配置 + * `--use_gradient_checkpointing`: 是否启用 gradient checkpointing。 + * `--use_gradient_checkpointing_offload`: 是否将 gradient checkpointing 卸载到内存中。 + * `--gradient_accumulation_steps`: 梯度累积步数。 + * 视频宽高配置 + * `--height`: 视频的高度。将 `height` 和 `width` 留空以启用动态分辨率。 + * `--width`: 视频的宽度。将 `height` 和 `width` 留空以启用动态分辨率。 + * `--max_pixels`: 视频帧的最大像素面积,当启用动态分辨率时,分辨率大于这个数值的视频帧都会被缩小,分辨率小于这个数值的视频帧保持不变。 + * `--num_frames`: 视频的帧数。 +* Wan 系列专有参数 + * `--tokenizer_path`: tokenizer 的路径,适用于文生视频模型,留空则自动从远程下载。 + * `--audio_processor_path`: 音频处理器的路径,适用于语音到视频模型,留空则自动从远程下载。 + +我们构建了一个样例视频数据集,以方便您进行测试,通过以下命令可以下载这个数据集: + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --local_dir ./data/diffsynth_example_dataset +``` + +我们为每个模型编写了推荐的训练脚本,请参考前文"模型总览"中的表格。关于如何编写模型训练脚本,请参考[模型训练](../Pipeline_Usage/Model_Training.md);更多高阶训练算法,请参考[训练框架详解](https://github.com/modelscope/DiffSynth-Studio/tree/main/docs/zh/Training/)。 diff --git a/docs/zh/Model_Details/Z-Image.md b/docs/zh/Model_Details/Z-Image.md new file mode 100644 index 0000000000000000000000000000000000000000..53c22f5a836684dfda4113c8ed1544b2a7b4be52 --- /dev/null +++ b/docs/zh/Model_Details/Z-Image.md @@ -0,0 +1,151 @@ +# Z-Image + +Z-Image 是由阿里巴巴通义实验室多模态交互团队训练并开源的图像生成模型。 + +## 安装 + +在使用本项目进行模型推理和训练前,请先安装 DiffSynth-Studio。 + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +更多关于安装的信息,请参考[安装依赖](../Pipeline_Usage/Setup.md)。 + +## 快速开始 + +运行以下代码可以快速加载 [Tongyi-MAI/Z-Image-Turbo](https://www.modelscope.cn/models/Tongyi-MAI/Z-Image-Turbo) 模型并进行推理。FP8 精度量化会导致明显的图像质量劣化,因此不建议在 Z-Image Turbo 模型上开启任何量化,仅建议开启 CPU Offload,最低 8G 显存即可运行。 + +```python +from diffsynth.pipelines.z_image import ZImagePipeline, ModelConfig +import torch + +vram_config = { + "offload_dtype": torch.bfloat16, + "offload_device": "cpu", + "onload_dtype": torch.bfloat16, + "onload_device": "cpu", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} +pipe = ZImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Tongyi-MAI/Z-Image-Turbo", origin_file_pattern="transformer/*.safetensors", **vram_config), + ModelConfig(model_id="Tongyi-MAI/Z-Image-Turbo", origin_file_pattern="text_encoder/*.safetensors", **vram_config), + ModelConfig(model_id="Tongyi-MAI/Z-Image-Turbo", origin_file_pattern="vae/diffusion_pytorch_model.safetensors", **vram_config), + ], + tokenizer_config=ModelConfig(model_id="Tongyi-MAI/Z-Image-Turbo", origin_file_pattern="tokenizer/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) +prompt = "Young Chinese woman in red Hanfu, intricate embroidery. Impeccable makeup, red floral forehead pattern. Elaborate high bun, golden phoenix headdress, red flowers, beads. Holds round folding fan with lady, trees, bird. Neon lightning-bolt lamp (⚡️), bright yellow glow, above extended left palm. Soft-lit outdoor night background, silhouetted tiered pagoda (西安大雁塔), blurred colorful distant lights." +image = pipe(prompt=prompt, seed=42, rand_device="cuda") +image.save("image.jpg") +``` + +## 模型总览 + +|模型 ID|推理|低显存推理|全量训练|全量训练后验证|LoRA 训练|LoRA 训练后验证| +|-|-|-|-|-|-|-| +|[Tongyi-MAI/Z-Image](https://www.modelscope.cn/models/Tongyi-MAI/Z-Image)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_inference/Z-Image.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_inference_low_vram/Z-Image.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/full/Z-Image.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/validate_full/Z-Image.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/lora/Z-Image.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/validate_lora/Z-Image.py)| +|[DiffSynth-Studio/Z-Image-i2L](https://www.modelscope.cn/models/DiffSynth-Studio/Z-Image-i2L)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_inference/Z-Image-i2L.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_inference_low_vram/Z-Image-i2L.py)|-|-|-|-| +|[Tongyi-MAI/Z-Image-Turbo](https://www.modelscope.cn/models/Tongyi-MAI/Z-Image-Turbo)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_inference/Z-Image-Turbo.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_inference_low_vram/Z-Image-Turbo.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/full/Z-Image-Turbo.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/validate_full/Z-Image-Turbo.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/lora/Z-Image-Turbo.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/validate_lora/Z-Image-Turbo.py)| +|[PAI/Z-Image-Turbo-Fun-Controlnet-Union-2.1](https://www.modelscope.cn/models/PAI/Z-Image-Turbo-Fun-Controlnet-Union-2.1)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_inference/Z-Image-Turbo-Fun-Controlnet-Union-2.1.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_inference_low_vram/Z-Image-Turbo-Fun-Controlnet-Union-2.1.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/full/Z-Image-Turbo-Fun-Controlnet-Union-2.1.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/validate_full/Z-Image-Turbo-Fun-Controlnet-Union-2.1.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/lora/Z-Image-Turbo-Fun-Controlnet-Union-2.1.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/validate_lora/Z-Image-Turbo-Fun-Controlnet-Union-2.1.py)| +|[PAI/Z-Image-Turbo-Fun-Controlnet-Union-2.1-8steps](https://www.modelscope.cn/models/PAI/Z-Image-Turbo-Fun-Controlnet-Union-2.1)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_inference/Z-Image-Turbo-Fun-Controlnet-Union-2.1-8steps.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_inference_low_vram/Z-Image-Turbo-Fun-Controlnet-Union-2.1-8steps.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/full/Z-Image-Turbo-Fun-Controlnet-Union-2.1-8steps.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/validate_full/Z-Image-Turbo-Fun-Controlnet-Union-2.1-8steps.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/lora/Z-Image-Turbo-Fun-Controlnet-Union-2.1-8steps.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/validate_lora/Z-Image-Turbo-Fun-Controlnet-Union-2.1-8steps.py)| +|[PAI/Z-Image-Turbo-Fun-Controlnet-Tile-2.1-8steps](https://www.modelscope.cn/models/PAI/Z-Image-Turbo-Fun-Controlnet-Union-2.1)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_inference/Z-Image-Turbo-Fun-Controlnet-Tile-2.1-8steps.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_inference_low_vram/Z-Image-Turbo-Fun-Controlnet-Tile-2.1-8steps.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/full/Z-Image-Turbo-Fun-Controlnet-Tile-2.1-8steps.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/validate_full/Z-Image-Turbo-Fun-Controlnet-Tile-2.1-8steps.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/lora/Z-Image-Turbo-Fun-Controlnet-Tile-2.1-8steps.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/validate_lora/Z-Image-Turbo-Fun-Controlnet-Tile-2.1-8steps.py)| +|[DiffSynth-Studio/ZImage-i2L-v2](https://www.modelscope.cn/models/DiffSynth-Studio/ZImage-i2L-v2)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_inference/ZImage-i2L-v2.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_inference_low_vram/ZImage-i2L-v2.py)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/full/ZImage-i2L-v2.sh)|[code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/validate_full/ZImage-i2L-v2.py)|-|-| + +特殊训练脚本: + +* 差分 LoRA 训练:[doc](../Training/Differential_LoRA.md)、[code](https://github.com/modelscope/DiffSynth-Studio/tree/main/examples/z_image/model_training/special/differential_training/) +* 轨迹模仿蒸馏训练(实验性功能):[code](https://github.com/modelscope/DiffSynth-Studio/tree/main/examples/z_image/model_training/special/trajectory_imitation/) + +## 模型推理 + +模型通过 `ZImagePipeline.from_pretrained` 加载,详见[加载模型](../Pipeline_Usage/Model_Inference.md#加载模型)。 + +`ZImagePipeline` 推理的输入参数包括: + +* `prompt`: 提示词,描述画面中出现的内容。 +* `negative_prompt`: 负向提示词,描述画面中不应该出现的内容,默认值为 `""`。 +* `cfg_scale`: Classifier-free guidance 的参数,默认值为 1。 +* `input_image`: 输入图像,用于图生图,该参数与 `denoising_strength` 配合使用。 +* `denoising_strength`: 去噪强度,范围是 0~1,默认值为 1,当数值接近 0 时,生成图像与输入图像相似;当数值接近 1 时,生成图像与输入图像相差更大。在不输入 `input_image` 参数时,请不要将其设置为非 1 的数值。 +* `height`: 图像高度,需保证高度为 16 的倍数。 +* `width`: 图像宽度,需保证宽度为 16 的倍数。 +* `seed`: 随机种子。默认为 `None`,即完全随机。 +* `rand_device`: 生成随机高斯噪声矩阵的计算设备,默认为 `"cpu"`。当设置为 `cuda` 时,在不同 GPU 上会导致不同的生成结果。 +* `num_inference_steps`: 推理次数,默认值为 8。 +* `controlnet_inputs`: ControlNet 模型的输入。 +* `edit_image`: 编辑模型的待编辑图像,支持多张图像。 +* `positive_only_lora`: 仅在正向提示词中使用的 LoRA 权重。 + +如果显存不足,请开启[显存管理](../Pipeline_Usage/VRAM_management.md),我们在示例代码中提供了每个模型推荐的低显存配置,详见前文"模型总览"中的表格。 + +## 模型训练 + +Z-Image 系列模型统一通过 [`examples/z_image/model_training/train.py`](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/train.py) 进行训练,脚本的参数包括: + +* 通用训练参数 + * 数据集基础配置 + * `--dataset_base_path`: 数据集的根目录。 + * `--dataset_metadata_path`: 数据集的元数据文件路径。 + * `--dataset_repeat`: 每个 epoch 中数据集重复的次数。 + * `--dataset_num_workers`: 每个 Dataloder 的进程数量。 + * `--data_file_keys`: 元数据中需要加载的字段名称,通常是图像或视频文件的路径,以 `,` 分隔。 + * 模型加载配置 + * `--model_paths`: 要加载的模型路径。JSON 格式。 + * `--model_id_with_origin_paths`: 带原始路径的模型 ID,例如 `"Tongyi-MAI/Z-Image-Turbo:transformer/*.safetensors"`。用逗号分隔。 + * `--extra_inputs`: 模型 Pipeline 所需的额外输入参数,例如训练图像编辑模型时需要额外参数,以 `,` 分隔。 + * `--fp8_models`:以 FP8 格式加载的模型,格式与 `--model_paths` 或 `--model_id_with_origin_paths` 一致,目前仅支持参数不被梯度更新的模型(不需要梯度回传,或梯度仅更新其 LoRA)。 + * `--quant_options`:对加载的模型进行动态量化。以 `;` 分隔多个条目,每个为 `<模型字符串>:[/]`,`<模型字符串>` 需与 `--model_paths`/`--model_id_with_origin_paths` 中的一致,`method` 为已注册的量化方法(如 `bitsandbytes_nf4`),`exclude_modules` 为可选的保持全精度的层。 + * 训练基础配置 + * `--learning_rate`: 学习率。 + * `--num_epochs`: 轮数(Epoch)。 + * `--trainable_models`: 可训练的模型,例如 `dit`、`vae`、`text_encoder`。 + * `--find_unused_parameters`: DDP 训练中是否存在未使用的参数,少数模型包含不参与梯度计算的冗余参数,需开启这一设置避免在多 GPU 训练中报错。 + * `--weight_decay`:权重衰减大小,详见 [torch.optim.AdamW](https://docs.pytorch.org/docs/stable/generated/torch.optim.AdamW.html)。 + * `--task`: 训练任务,默认为 `sft`,部分模型支持更多训练模式,请参考每个特定模型的文档。 + * 输出配置 + * `--output_path`: 模型保存路径。 + * `--remove_prefix_in_ckpt`: 在模型文件的 state dict 中移除前缀。 + * `--save_steps`: 保存模型的训练步数间隔,若此参数留空,则每个 epoch 保存一次。 + * LoRA 配置 + * `--lora_base_model`: LoRA 添加到哪个模型上。 + * `--lora_target_modules`: LoRA 添加到哪些层上。 + * `--lora_rank`: LoRA 的秩(Rank)。 + * `--lora_checkpoint`: LoRA 检查点的路径。如果提供此路径,LoRA 将从此检查点加载。 + * `--preset_lora_path`: 预置 LoRA 检查点路径,如果提供此路径,这一 LoRA 将会以融入基础模型的形式加载。此参数用于 LoRA 差分训练。 + * `--preset_lora_model`: 预置 LoRA 融入的模型,例如 `dit`。 + * 梯度配置 + * `--use_gradient_checkpointing`: 是否启用 gradient checkpointing。 + * `--use_gradient_checkpointing_offload`: 是否将 gradient checkpointing 卸载到内存中。 + * `--gradient_accumulation_steps`: 梯度累积步数。 + * 图像宽高配置(适用于图像生成模型和视频生成模型) + * `--height`: 图像或视频的高度。将 `height` 和 `width` 留空以启用动态分辨率。 + * `--width`: 图像或视频的宽度。将 `height` 和 `width` 留空以启用动态分辨率。 + * `--max_pixels`: 图像或视频帧的最大像素面积,当启用动态分辨率时,分辨率大于这个数值的图片都会被缩小,分辨率小于这个数值的图片保持不变。 +* Z-Image 专有参数 + * `--tokenizer_path`: tokenizer 的路径,适用于文生图模型,留空则自动从远程下载。 + +我们构建了一个样例图像数据集,以方便您进行测试,通过以下命令可以下载这个数据集: + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --local_dir ./data/diffsynth_example_dataset +``` + +我们为每个模型编写了推荐的训练脚本,请参考前文"模型总览"中的表格。关于如何编写模型训练脚本,请参考[模型训练](../Pipeline_Usage/Model_Training.md);更多高阶训练算法,请参考[训练框架详解](https://github.com/modelscope/DiffSynth-Studio/tree/main/docs/zh/Training/)。 + +训练技巧: + +* [Tongyi-MAI/Z-Image-Turbo](https://www.modelscope.cn/models/Tongyi-MAI/Z-Image-Turbo) 是一个蒸馏加速的模型,因此直接训练将会迅速让模型失去加速能力,以“加速配置”(`num_inference_steps=8`,`cfg_scale=1`)推理的效果变差,以“无加速配置”(`num_inference_steps=30`,`cfg_scale=2`)推理的效果变好。可采用以下方案训练和推理: + * 标准 SFT 训练([code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/lora/Z-Image-Turbo.sh)) + 无加速配置推理 + * 差分 LoRA 训练([code](https://github.com/modelscope/DiffSynth-Studio/tree/main/examples/z_image/model_training/special/differential_training/)) + 加速配置推理 + * 差分 LoRA 训练中需加载一个额外的 LoRA,例如 [ostris/zimage_turbo_training_adapter](https://www.modelscope.cn/models/ostris/zimage_turbo_training_adapter) + * 标准 SFT 训练([code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/lora/Z-Image-Turbo.sh))+ 轨迹模仿蒸馏训练([code](https://github.com/modelscope/DiffSynth-Studio/tree/main/examples/z_image/model_training/special/trajectory_imitation/))+ 加速配置推理 + * 标准 SFT 训练([code](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/z_image/model_training/lora/Z-Image-Turbo.sh))+ 推理时加载蒸馏加速 LoRA([model](https://www.modelscope.cn/models/DiffSynth-Studio/Z-Image-Turbo-DistillPatch)) + 加速配置推理 diff --git a/docs/zh/Pipeline_Usage/Accelerated_Inference.md b/docs/zh/Pipeline_Usage/Accelerated_Inference.md new file mode 100644 index 0000000000000000000000000000000000000000..d852965663a59f1c664e5652ff152202a892aee0 --- /dev/null +++ b/docs/zh/Pipeline_Usage/Accelerated_Inference.md @@ -0,0 +1,84 @@ +# 推理加速 + +扩散模型的去噪过程通常耗时较长。为提升推理速度,可采用多种加速技术,包含多卡并行推理、计算图编译等无损加速方案,以及 Cache、量化等有损加速方案。 + +当前扩散模型大多基于 [Diffusion Transformer (DiT)](https://arxiv.org/abs/2212.09748) 构建,高效注意力机制同样是常用的加速手段。DiffSynth-Studio 目前已支持部分无损加速推理功能。本节重点从多卡并行推理和计算图编译两个维度介绍加速方法。 + +## 高效注意力机制 +注意力机制的加速细节请参考 [注意力机制实现](../API_Reference/core/attention.md)。 + +## 多卡并行推理 +DiffSynth-Studio 采用统一序列并行的多卡推理方案。在 DiT 中将 token 序列拆分至多张显卡进行并行处理。底层基于 [xDiT](https://github.com/xdit-project/xDiT) 实现。需要注意,统一序列并行会引入额外通信开销,实际加速比通常低于显卡数量。 + +目前 DiffSynth-Studio 已支持 [Wan](../Model_Details/Wan.md) 和 [MOVA](../Model_Details/Wan.md) 模型的统一序列并行加速。 + +首先安装 `xDiT` 依赖。 +```bash +pip install "xfuser[flash-attn]>=0.4.3" +``` + +然后使用 `torchrun` 启动多卡推理。 +```bash +torchrun --standalone --nproc_per_node=8 examples/wanvideo/acceleration/unified_sequence_parallel.py +``` + +构建 pipeline 时配置 `usp=True` 即可实现 USP 并行推理。代码示例如下。 +```python +import torch +from PIL import Image +from diffsynth.utils.data import save_video +from diffsynth.pipelines.wan_video import WanVideoPipeline, ModelConfig +import torch.distributed as dist + +pipe = WanVideoPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + use_usp=True, + model_configs=[ + ModelConfig(model_id="Wan-AI/Wan2.1-T2V-14B", origin_file_pattern="diffusion_pytorch_model*.safetensors"), + ModelConfig(model_id="Wan-AI/Wan2.1-T2V-14B", origin_file_pattern="models_t5_umt5-xxl-enc-bf16.pth"), + ModelConfig(model_id="Wan-AI/Wan2.1-T2V-14B", origin_file_pattern="Wan2.1_VAE.pth"), + ], + tokenizer_config=ModelConfig(model_id="Wan-AI/Wan2.1-T2V-1.3B", origin_file_pattern="google/umt5-xxl/"), +) + +# Text-to-video +video = pipe( + prompt="一名宇航员身穿太空服,面朝镜头骑着一匹机械马在火星表面驰骋。红色的荒凉地表延伸至远方,点缀着巨大的陨石坑和奇特的岩石结构。机械马的步伐稳健,扬起微弱的尘埃,展现出未来科技与原始探索的完美结合。宇航员手持操控装置,目光坚定,仿佛正在开辟人类的新疆域。背景是深邃的宇宙和蔚蓝的地球,画面既科幻又充满希望,让人不禁畅想未来的星际生活。", + negative_prompt="色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走", + seed=0, tiled=True, +) +if dist.get_rank() == 0: + save_video(video, "video1.mp4", fps=15, quality=5) +``` + +## 计算图编译 +PyTorch 2.0 提供了自动计算图编译接口 [torch.compile](https://docs.pytorch.org/tutorials/intermediate/torch_compile_tutorial.html),能够将 PyTorch 代码即时编译为优化内核,从而提升运行速度。由于扩散模型的推理耗时集中在 DiT 的多步去噪阶段,且 DiT 主要由基础模块堆叠而成,为缩短编译时间,DiffSynth 的 compile 功能采用仅针对基础 Transformer 模块的 [区域编译](https://docs.pytorch.org/tutorials/recipes/regional_compilation.html) 策略。 + +### Compile 使用示例 +相比常规推理,只需在调用 pipeline 前执行 `pipe.compile_pipeline()` 即可开启编译加速。具体函数定义请参阅[源代码](https://github.com/modelscope/DiffSynth-Studio/blob/166e6d2d38764209f66a74dd0fe468226536ad0f/diffsynth/diffusion/base_pipeline.py#L342)。 + +`compile_pipeline` 的输入参数主要包含两类。 + +第一类是编译模型参数 `compile_models`。以 Qwen-Image Pipeline 为例,若仅编译 DiT 模型,保持该参数为空即可。若需额外编译 VAE 等模型,可传入 `compile_models=["vae", "dit"]`。除 DiT 外,其余模型均采用整体编译策略,即把模型的 forward 函数完整编译为计算图。 + +第二类是编译策略参数。涵盖 `mode`, `dynamic`, `fullgraph` 及其他自定义选项。这些参数会直接传递给 `torch.compile` 接口。若未深入了解这些参数的具体机制,建议保持默认设置。 + +- `mode` 指定编译模式,包含 `"default"`, `"reduce-overhead"`, `"max-autotune"` 和 `"max-autotune-no-cudagraphs"`。由于 cudagraph 对计算图要求较为严格(例如可能需要配合 `torch.compiler.cudagraph_mark_step_begin()` 使用),`"reduce-overhead"` 和 `"max-autotune"` 模式可能编译失败。 +- `dynamic` 决定是否启用动态形状。对于多数生成模型,修改 prompt、开启 CFG 或调整分辨率都会改变计算图的输入张量形状。设置为 `dynamic=True` 会增加首次运行的编译时长,但支持动态形状,形状改变时无需重编译。设置为 `dynamic=False` 时首次编译较快,但任何改变输入形状的操作都会触发重新编译。对大部分场景,建议设定为 `dynamic=True`。 +- `fullgraph` 设为 `True` 时,底层会尝试将目标模型编译为单一计算图,若失败则报错。设为 `False` 时,底层会在无法连接处设置断点,将模型编译为多个独立计算图。开发者可开启 `True` 来优化编译性能,普通用户建议仅使用 `False`。 +- 其他参数配置请查阅 [PyTorch 的 API 文档](https://docs.pytorch.org/docs/stable/generated/torch.compile.html)。 + +### Compile 功能开发者文档 +若需为新接入的 pipeline 提供 compile 支持,应在 pipeline 中配置 `compilable_models` 属性以指定默认编译模型。针对该 pipeline 的 DiT 模型类,还需配置 `_repeated_blocks` 以指定参与区域编译的基础模块类型。 + +以 Qwen-Image 为例,其 pipeline 配置如下。 +```python +self.compilable_models = ["dit"] +``` + +其 DiT 配置如下。 +```python +class QwenImageDiT(torch.nn.Module): + _repeated_blocks = ["QwenImageTransformerBlock"] +``` diff --git a/docs/zh/Pipeline_Usage/Environment_Variables.md b/docs/zh/Pipeline_Usage/Environment_Variables.md new file mode 100644 index 0000000000000000000000000000000000000000..a4ad45b67a01da7dacb8dcc8f2e9bbadb84203b7 --- /dev/null +++ b/docs/zh/Pipeline_Usage/Environment_Variables.md @@ -0,0 +1,39 @@ +# 环境变量 + +`DiffSynth-Studio` 可通过环境变量控制一些设置。 + +在 `Python` 代码中,可以使用 `os.environ` 设置环境变量。请注意,环境变量需在 `import diffsynth` 前设置。 + +```python +import os +os.environ["DIFFSYNTH_MODEL_BASE_PATH"] = "./path_to_my_models" +import diffsynth +``` + +在 Linux 操作系统上,也可在命令行临时设置环境变量: + +```shell +DIFFSYNTH_MODEL_BASE_PATH="./path_to_my_models" python xxx.py +``` + +以下是 `DiffSynth-Studio` 所支持的环境变量。 + +## `DIFFSYNTH_SKIP_DOWNLOAD` + +是否跳过模型下载。可设置为 `True`、`true`、`False`、`false`,若 `ModelConfig` 中没有设置 `skip_download`,则会根据这一环境变量决定是否跳过模型下载。 + +## `DIFFSYNTH_MODEL_BASE_PATH` + +模型下载根目录。可设置为任意本地路径,若 `ModelConfig` 中没有设置 `local_model_path`,则会将模型文件下载到这一环境变量指向的路径。若两者都未设置,则会将模型文件下载到 `./models`。 + +## `DIFFSYNTH_ATTENTION_IMPLEMENTATION` + +注意力机制实现的方式,可以设置为 `flash_attention_3`、`flash_attention_2`、`sage_attention`、`xformers`、`torch`。详见 [`./core/attention.md`](../API_Reference/core/attention.md). + +## `DIFFSYNTH_DISK_MAP_BUFFER_SIZE` + +硬盘直连中的 Buffer 大小,默认是 1B(1000000000),数值越大,占用内存越大,速度越快。 + +## `DIFFSYNTH_DOWNLOAD_SOURCE` + +远程模型下载源,可设置为 `modelscope` 或 `huggingface`,控制模型下载的来源,默认值为 `modelscope`。 diff --git a/docs/zh/Pipeline_Usage/GPU_support.md b/docs/zh/Pipeline_Usage/GPU_support.md new file mode 100644 index 0000000000000000000000000000000000000000..4558fa0b20dd3018847ec2e8df1a9f7273c0a313 --- /dev/null +++ b/docs/zh/Pipeline_Usage/GPU_support.md @@ -0,0 +1,97 @@ +# GPU/NPU 支持 + +`DiffSynth-Studio` 支持多种 GPU/NPU,本文介绍如何在这些设备上运行模型推理和训练。 + +在开始前,请参考[安装依赖](../Pipeline_Usage/Setup.md)安装好 GPU/NPU 相关的依赖包。 + +## NVIDIA GPU + +本项目提供的所有样例代码默认支持 NVIDIA GPU,无需额外修改。 + +## AMD GPU + +AMD 提供了基于 ROCm 的 torch 包,所以大多数模型无需修改代码即可运行,少数模型由于依赖特定的 cuda 指令无法运行。 + +### Apple Silicon + +在 Apple Silicon 设备上,由于显存和内存是统一的,请将代码中的 `"cuda"` 全部修改为 `"mps"` 或 `"cpu"`。 + +## Ascend NPU +### 推理 +使用 Ascend NPU 时,需把代码中的 `"cuda"` 改为 `"npu"`。 + +例如,Wan2.1-T2V-1.3B 的推理代码: + +```diff +import torch +from diffsynth.utils.data import save_video, VideoData +from diffsynth.pipelines.wan_video import WanVideoPipeline, ModelConfig +from diffsynth.core.device.npu_compatible_device import get_device_name + +vram_config = { + "offload_dtype": "disk", + "offload_device": "disk", + "onload_dtype": torch.bfloat16, + "onload_device": "cpu", + "preparing_dtype": torch.bfloat16, +- "preparing_device": "cuda", ++ "preparing_device": "npu", + "computation_dtype": torch.bfloat16, +- "computation_device": "cuda", ++ "computation_device": "npu", +} +pipe = WanVideoPipeline.from_pretrained( + torch_dtype=torch.bfloat16, +- device="cuda", ++ device="npu", + model_configs=[ + ModelConfig(model_id="Wan-AI/Wan2.1-T2V-1.3B", origin_file_pattern="diffusion_pytorch_model*.safetensors", **vram_config), + ModelConfig(model_id="Wan-AI/Wan2.1-T2V-1.3B", origin_file_pattern="models_t5_umt5-xxl-enc-bf16.pth", **vram_config), + ModelConfig(model_id="Wan-AI/Wan2.1-T2V-1.3B", origin_file_pattern="Wan2.1_VAE.pth", **vram_config), + ], + tokenizer_config=ModelConfig(model_id="Wan-AI/Wan2.1-T2V-1.3B", origin_file_pattern="google/umt5-xxl/"), +- vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 2, ++ vram_limit=torch.npu.mem_get_info(get_device_name())[1] / (1024 ** 3) - 2, +) + +video = pipe( + prompt="纪实摄影风格画面,一只活泼的小狗在绿茵茵的草地上迅速奔跑。小狗毛色棕黄,两只耳朵立起,神情专注而欢快。阳光洒在它身上,使得毛发看上去格外柔软而闪亮。背景是一片开阔的草地,偶尔点缀着几朵野花,远处隐约可见蓝天和几片白云。透视感鲜明,捕捉小狗奔跑时的动感和四周草地的生机。中景侧面移动视角。", + negative_prompt="色调艳丽,过曝,静态,细节模糊不清,字幕,风格,作品,画作,画面,静止,整体发灰,最差质量,低质量,JPEG压缩残留,丑陋的,残缺的,多余的手指,画得不好的手部,画得不好的脸部,畸形的,毁容的,形态畸形的肢体,手指融合,静止不动的画面,杂乱的背景,三条腿,背景人很多,倒着走", + seed=0, tiled=True, +) +save_video(video, "video.mp4", fps=15, quality=5) +``` + +#### USP(Unified Sequence Parallel) +如果想要在NPU上使用该特性,请通过如下方式安装额外的第三方库: +```shell +pip install git+https://github.com/feifeibear/long-context-attention.git +pip install git+https://github.com/xdit-project/xDiT.git +``` + +### 训练 +当前已为每类模型添加NPU的启动脚本样例,脚本存放在`examples/xxx/special/npu_training`目录下,例如 `examples/wanvideo/model_training/special/npu_training/Wan2.2-T2V-A14B-NPU.sh`。 + +在NPU训练脚本中,添加了可以优化性能的NPU特有环境变量,并针对特定模型开启了相关参数。 + +#### 环境变量 +```shell +export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True +``` +`expandable_segments:`: 使能内存池扩展段功能,即虚拟内存特征。 + +```shell +export CPU_AFFINITY_CONF=1 +``` +设置0或未设置: 表示不启用绑核功能 + +1: 表示开启粗粒度绑核 + +2: 表示开启细粒度绑核 + +#### 特定模型需要开启的参数 +| 模型 | 参数 | 备注 | +|-----------|------|-------------------| +| Wan 14B系列 | --initialize_model_on_cpu | 14B模型需要在cpu上进行初始化 | +| Qwen-Image系列 | --initialize_model_on_cpu | 模型需要在cpu上进行初始化 | +| Z-Image 系列 | --enable_npu_patch | 使用NPU融合算子来替换Z-image模型中的对应算子以提升模型在NPU上的性能 | \ No newline at end of file diff --git a/docs/zh/Pipeline_Usage/Inference_WebUI.md b/docs/zh/Pipeline_Usage/Inference_WebUI.md new file mode 100644 index 0000000000000000000000000000000000000000..562b9a257c2a73d6734d3c97ca6ad727952c0cab --- /dev/null +++ b/docs/zh/Pipeline_Usage/Inference_WebUI.md @@ -0,0 +1,54 @@ +# 推理 WebUI + +DiffSynth-Studio 提供推理 WebUI,帮助开发者快速验证模型效果。 + +> 现阶段的推理 WebUI 功能还不完善,我们会在未来优化交互逻辑。 + +> 推理 WebUI 是面向开发者的调试工具,而非面向创作者的设计工具。如需功能更丰富、交互更友好的创作体验,推荐使用魔搭社区 [AIGC 专区](https://modelscope.cn/aigc/home)(中国用户)或 [Civision 专区](https://modelscope.ai/civision/home)(非中国用户)。 + +## 启动推理 WebUI + +推理 WebUI 基于 [`Streamlit`](https://streamlit.io/) 构建。除 DiffSynth-Studio 外还需安装 `Streamlit`: + +```shell +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +pip install streamlit +``` + +启动命令: + +```shell +streamlit run examples/dev_tools/webui.py --server.fileWatcherType none +``` + +## 工作原理 + +推理 WebUI 作为独立工具,通过解析 Pipeline 的 `from_pretrained` 和 `__call__` 方法中的参数类型标注,动态生成对应 UI 控件。因此,界面交互逻辑与代码调用逻辑完全一致,可视为 DiffSynth-Studio 代码的可视化入口。 + +以 `diffsynth.pipelines.z_image` 中的 `ZImagePipeline.__call__` 为例: + +```python +@torch.no_grad() +def __call__( + self, + # Prompt + prompt: str = "", + negative_prompt: str = "", + cfg_scale: float = 1.0, + # Image + input_image: Image.Image = None, + denoising_strength: float = 1.0, + ... +) +``` + +WebUI 解析后将自动渲染为如下界面: + +![](https://github.com/user-attachments/assets/55795022-7a9b-4383-b048-7feabdfcdddf) + +## 使用提示 + +- 支持从 `./examples` 样例代码中自动加载 `model_id`、`origin_file_pattern` 等模型信息,简化配置流程; +- `vram_limit`、`tokenizer_config`、`lora` 等参数无法通过代码解析获取,需手动填写。 diff --git a/docs/zh/Pipeline_Usage/Model_Inference.md b/docs/zh/Pipeline_Usage/Model_Inference.md new file mode 100644 index 0000000000000000000000000000000000000000..8d1c34813ecc405242a8612f868a102d755b779f --- /dev/null +++ b/docs/zh/Pipeline_Usage/Model_Inference.md @@ -0,0 +1,168 @@ +# 模型推理 + +本文档以 Qwen-Image 模型为例,介绍如何使用 `DiffSynth-Studio` 进行模型推理。 + +## 加载模型 + +模型通过 `from_pretrained` 加载: + +```python +from diffsynth.pipelines.qwen_image import QwenImagePipeline, ModelConfig +import torch + +pipe = QwenImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="transformer/diffusion_pytorch_model*.safetensors"), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="text_encoder/model*.safetensors"), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + tokenizer_config=ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="tokenizer/"), +) +``` + +其中 `torch_dtype` 和 `device` 是计算精度和计算设备(不是模型的精度和设备)。`model_configs` 可通过多种方式配置模型路径,关于本项目内部是如何加载模型的,请参考 [`diffsynth.core.loader`](../API_Reference/core/loader.md)。 + +
+ +从远程下载模型并加载 + +> `DiffSynth-Studio` 默认从[魔搭社区](https://www.modelscope.cn/)下载并加载模型,需填写 `model_id` 和 `origin_file_pattern`,例如 +> +> ```python +> ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="transformer/diffusion_pytorch_model*.safetensors"), +> ``` +> +> 模型文件默认下载到 `./models` 路径,该路径可通过[环境变量 DIFFSYNTH_MODEL_BASE_PATH](../Pipeline_Usage/Environment_Variables.md#diffsynth_model_base_path) 修改。 + +
+ +
+ +从本地文件路径加载模型 + +> 填写 `path`,例如 +> +> ```python +> ModelConfig(path="models/xxx.safetensors") +> ``` +> +> 对于从多个文件加载的模型,使用列表即可,例如 +> +> ```python +> ModelConfig(path=[ +> "models/Qwen/Qwen-Image/text_encoder/model-00001-of-00004.safetensors", +> "models/Qwen/Qwen-Image/text_encoder/model-00002-of-00004.safetensors", +> "models/Qwen/Qwen-Image/text_encoder/model-00003-of-00004.safetensors", +> "models/Qwen/Qwen-Image/text_encoder/model-00004-of-00004.safetensors", +> ]) +> ``` + +
+ +默认情况下,即使模型已经下载完毕,程序仍会向远程查询是否有遗漏文件,如果要完全关闭远程请求,请将[环境变量 DIFFSYNTH_SKIP_DOWNLOAD](../Pipeline_Usage/Environment_Variables.md#diffsynth_skip_download) 设置为 `True`。 + +```shell +import os +os.environ["DIFFSYNTH_SKIP_DOWNLOAD"] = "True" +import diffsynth +``` + +如需从 [HuggingFace](https://huggingface.co/) 下载模型,请将[环境变量 DIFFSYNTH_DOWNLOAD_SOURCE](../Pipeline_Usage/Environment_Variables.md#diffsynth_download_source) 设置为 `huggingface`。 + +```shell +import os +os.environ["DIFFSYNTH_DOWNLOAD_SOURCE"] = "huggingface" +import diffsynth +``` + +## 启动推理 + +输入提示词,即可启动推理过程,生成一张图片。 + +```python +from diffsynth.pipelines.qwen_image import QwenImagePipeline, ModelConfig +import torch + +pipe = QwenImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="transformer/diffusion_pytorch_model*.safetensors"), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="text_encoder/model*.safetensors"), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + tokenizer_config=ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="tokenizer/"), +) +prompt = "精致肖像,水下少女,蓝裙飘逸,发丝轻扬,光影透澈,气泡环绕,面容恬静,细节精致,梦幻唯美。" +image = pipe(prompt, seed=0, num_inference_steps=40) +image.save("image.jpg") +``` + +每个模型 `Pipeline` 的输入参数不同,请参考各模型的文档。 + +如果模型参数量太大,导致显存不足,请开启[显存管理](../Pipeline_Usage/VRAM_management.md)。 + +## 加载 LoRA + +LoRA 是一种轻量化的模型训练方式,产生少量参数,扩展模型的能力。DiffSynth-Studio 的 LoRA 加载有两种方式:冷加载和热加载。 + +* 冷加载:当基础模型未开启[显存管理](../Pipeline_Usage/VRAM_management.md)时,LoRA 会融合进基础模型权重,此时推理速度没有变化,LoRA 加载后无法卸载。 + +```python +from diffsynth.pipelines.qwen_image import QwenImagePipeline, ModelConfig +import torch + +pipe = QwenImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="transformer/diffusion_pytorch_model*.safetensors"), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="text_encoder/model*.safetensors"), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + tokenizer_config=ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="tokenizer/"), +) +lora = ModelConfig(model_id="DiffSynth-Studio/Qwen-Image-LoRA-ArtAug-v1", origin_file_pattern="model.safetensors") +pipe.load_lora(pipe.dit, lora, alpha=1) +prompt = "精致肖像,水下少女,蓝裙飘逸,发丝轻扬,光影透澈,气泡环绕,面容恬静,细节精致,梦幻唯美。" +image = pipe(prompt, seed=0, num_inference_steps=40) +image.save("image.jpg") +``` + +* 热加载:当基础模型开启[显存管理](../Pipeline_Usage/VRAM_management.md)时,LoRA 不会融合进基础模型权重,此时推理速度会变慢,LoRA 加载后可通过 `pipe.clear_lora()` 卸载。 + +如果不希望启用显存管理,可以通过 `pipe.enable_lora_hotloading(pipe.dit)` 来单独启用 LoRA 热加载。 + +```python +from diffsynth.pipelines.qwen_image import QwenImagePipeline, ModelConfig +import torch + +vram_config = { + "offload_dtype": torch.bfloat16, + "offload_device": "cuda", + "onload_dtype": torch.bfloat16, + "onload_device": "cuda", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} +pipe = QwenImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="transformer/diffusion_pytorch_model*.safetensors", **vram_config), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="text_encoder/model*.safetensors"), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + tokenizer_config=ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="tokenizer/"), +) +lora = ModelConfig(model_id="DiffSynth-Studio/Qwen-Image-LoRA-ArtAug-v1", origin_file_pattern="model.safetensors") +pipe.load_lora(pipe.dit, lora, alpha=1) +prompt = "精致肖像,水下少女,蓝裙飘逸,发丝轻扬,光影透澈,气泡环绕,面容恬静,细节精致,梦幻唯美。" +image = pipe(prompt, seed=0, num_inference_steps=40) +image.save("image.jpg") +pipe.clear_lora() +``` diff --git a/docs/zh/Pipeline_Usage/Model_Training.md b/docs/zh/Pipeline_Usage/Model_Training.md new file mode 100644 index 0000000000000000000000000000000000000000..ddff6d7cb4f13162cb56f382ff27bb5e8edfa641 --- /dev/null +++ b/docs/zh/Pipeline_Usage/Model_Training.md @@ -0,0 +1,273 @@ +# 模型训练 + +本文档介绍如何使用 `DiffSynth-Studio` 进行模型训练。 + +`DiffSynth-Studio` 为 Diffusion 模型提供训练框架支持,每个模型架构的训练代码位于 [`examples`](https://github.com/modelscope/DiffSynth-Studio/tree/main/examples) 中独立编写的 `train.py`,我们为每个模型提供了用于模型训练的 `.sh` 脚本。以 Z-Image 为例,文件结构如下: + +```shell +diffsynth/diffusion/ # 基础训练框架 +examples/z_image/ +├── model_inference +├── model_inference_low_vram +└── model_training + ├── train.py # Z-Image 架构的模型训练代码在这里 + ├── full + │ └── Z-Image.sh # 启动全量训练 + ├── validate_full + │ └── Z-Image.py # 全量训练完成后,运行这个脚本加载模型,验证效果 + ├── lora + │ └── Z-Image.sh # 启动 LoRA 训练 + └── validate_lora + └── Z-Image.py # LoRA 训练完成后,运行这个脚本加载模型,验证效果 +``` + +## 脚本参数 + +训练脚本通常包含以下参数: + +* 数据集基础配置 + * `--dataset_base_path`: 数据集的根目录。 + * `--dataset_metadata_path`: 数据集的元数据文件路径。 + * `--dataset_repeat`: 每个 epoch 中数据集重复的次数。 + * `--dataset_num_workers`: 每个 Dataloder 的进程数量。 + * `--data_file_keys`: 元数据中需要加载的字段名称,通常是图像或视频文件的路径,以 `,` 分隔。 +* 模型加载配置 + * `--model_paths`: 要加载的模型路径。JSON 格式。 + * `--model_id_with_origin_paths`: 带原始路径的模型 ID,例如 `"Qwen/Qwen-Image:transformer/diffusion_pytorch_model*.safetensors"`。用逗号分隔。 + * `--extra_inputs`: 模型 Pipeline 所需的额外输入参数,例如训练图像编辑模型 Qwen-Image-Edit 时需要额外参数 `edit_image`,以 `,` 分隔。 + * `--fp8_models`:以 FP8 格式加载的模型,格式与 `--model_paths` 或 `--model_id_with_origin_paths` 一致,目前仅支持参数不被梯度更新的模型(不需要梯度回传,或梯度仅更新其 LoRA)。 + * `--quant_options`:对加载的模型进行动态量化。以 `;` 分隔多个条目,每个为 `<模型字符串>:[/]`,`<模型字符串>` 需与 `--model_paths`/`--model_id_with_origin_paths` 中的一致,`method` 为已注册的量化方法(如 `bitsandbytes_nf4`),`exclude_modules` 为可选的保持全精度的层。 + * `--resume_from_checkpoint`:从 checkpoint 文件中加载模型权重并继续训练。目前仅支持非 LoRA 的单模型加载。 +* 训练基础配置 + * `--learning_rate`: 学习率。 + * `--num_epochs`: 轮数(Epoch)。 + * `--trainable_models`: 可训练的模型,例如 `dit`、`vae`、`text_encoder`。 + * `--find_unused_parameters`: DDP 训练中是否存在未使用的参数,少数模型包含不参与梯度计算的冗余参数,需开启这一设置避免在多 GPU 训练中报错。 + * `--weight_decay`:权重衰减大小,详见 [torch.optim.AdamW](https://docs.pytorch.org/docs/stable/generated/torch.optim.AdamW.html)。 + * `--task`: 训练任务,默认为 `sft`,部分模型支持更多训练模式,请参考每个特定模型的文档。 +* 输出配置 + * `--output_path`: 模型保存路径。 + * `--remove_prefix_in_ckpt`: 在模型文件的 state dict 中移除前缀。 + * `--save_steps`: 保存模型的训练步数间隔,若此参数留空,则每个 epoch 保存一次。 +* LoRA 配置 + * `--lora_base_model`: LoRA 添加到哪个模型上。 + * `--lora_target_modules`: LoRA 添加到哪些层上。 + * `--lora_rank`: LoRA 的秩(Rank)。 + * `--lora_checkpoint`: LoRA 检查点的路径。如果提供此路径,LoRA 将从此检查点加载。 + * `--preset_lora_path`: 预置 LoRA 检查点路径,如果提供此路径,这一 LoRA 将会以融入基础模型的形式加载。此参数用于 LoRA 差分训练。 + * `--preset_lora_model`: 预置 LoRA 融入的模型,例如 `dit`。 +* 梯度配置 + * `--use_gradient_checkpointing`: 是否启用 gradient checkpointing。 + * `--use_gradient_checkpointing_offload`: 是否将 gradient checkpointing 卸载到内存中。 + * `--gradient_accumulation_steps`: 梯度累积步数。 +* CPU Offload 训练配置 + * `--enable_model_cpu_offload`: 启用 CPU offload 训练,权重保留在 CPU,逐层加载到 GPU 进行计算。 + * `--enable_optimizer_cpu_offload`: 当 `--enable_model_cpu_offload` 启用时,在 CPU 上执行 optimizer。所有参数都 offload 到 CPU。默认为 False(可训练参数和 optimizer 留在 GPU)。 + * `--cpu_offload_split_threshold`: (实验性)当 `--enable_model_cpu_offload` 启用时,参数总量超过此阈值(单位 MB)的模块会被递归拆分为子模块。None 表示直接以叶子模块为单位 offload。默认:None。 +* 图像宽高配置(适用于图像生成模型和视频生成模型) + * `--height`: 图像或视频的高度。将 `height` 和 `width` 留空以启用动态分辨率。 + * `--width`: 图像或视频的宽度。将 `height` 和 `width` 留空以启用动态分辨率。 + * `--max_pixels`: 图像或视频帧的最大像素面积,当启用动态分辨率时,分辨率大于这个数值的图片都会被缩小,分辨率小于这个数值的图片保持不变。 + +部分模型的训练脚本还包含额外的参数,详见[各模型的文档](../README.md#section-2-模型详解),也可以通过 `python xxx/train.py -h` 查看支持的脚本参数。 + +## 准备数据集 + +`DiffSynth-Studio` 采用通用数据集格式,数据集包含一系列数据文件(图像、视频等),以及标注元数据的文件,我们建议您这样组织数据集文件: + +``` +data/example_image_dataset/ +├── metadata.csv +├── image_1.jpg +└── image_2.jpg +``` + +其中 `image_1.jpg`、`image_2.jpg` 为训练用图像数据,`metadata.csv` 为元数据列表,例如 + +``` +image,prompt +image_1.jpg,"a dog" +image_2.jpg,"a cat" +``` + +我们构建了样例数据集,以方便您进行测试。了解通用数据集架构是如何实现的,请参考 [`diffsynth.core.data`](../API_Reference/core/data.md)。 + +
+ +样例数据集 + +> ```shell +> modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --local_dir ./data/diffsynth_example_dataset +> ``` +> +> 适用于 Qwen-Image、FLUX 等图像生成模型的训练。 + +
+ +## 加载模型 + +类似于[推理时的模型加载](../Pipeline_Usage/Model_Inference.md#加载模型),我们支持多种方式配置模型路径,两种方式是可以混用的。 + +
+ +从远程下载模型并加载 + +> 如果在推理时我们通过以下设置加载模型 +> +> ```python +> model_configs=[ +> ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="transformer/diffusion_pytorch_model*.safetensors"), +> ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="text_encoder/model*.safetensors"), +> ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), +> ] +> ``` +> +> 那么在训练时,填入以下参数即可加载对应的模型。 +> +> ```shell +> --model_id_with_origin_paths "Qwen/Qwen-Image:transformer/diffusion_pytorch_model*.safetensors,Qwen/Qwen-Image:text_encoder/model*.safetensors,Qwen/Qwen-Image:vae/diffusion_pytorch_model.safetensors" +> ``` +> +> 模型文件默认下载到 `./models` 路径,该路径可通过[环境变量 DIFFSYNTH_MODEL_BASE_PATH](../Pipeline_Usage/Environment_Variables.md#diffsynth_model_base_path) 修改。 +> +> 默认情况下,即使模型已经下载完毕,程序仍会向远程查询是否有遗漏文件,如果要完全关闭远程请求,请将[环境变量 DIFFSYNTH_SKIP_DOWNLOAD](../Pipeline_Usage/Environment_Variables.md#diffsynth_skip_download) 设置为 `True`。 + +
+ +
+ +从本地文件路径加载模型 + +> 如果从本地文件加载模型,例如推理时 +> +> ```python +> model_configs=[ +> ModelConfig([ +> "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model-00001-of-00009.safetensors", +> "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model-00002-of-00009.safetensors", +> "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model-00003-of-00009.safetensors", +> "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model-00004-of-00009.safetensors", +> "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model-00005-of-00009.safetensors", +> "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model-00006-of-00009.safetensors", +> "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model-00007-of-00009.safetensors", +> "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model-00008-of-00009.safetensors", +> "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model-00009-of-00009.safetensors" +> ]), +> ModelConfig([ +> "models/Qwen/Qwen-Image/text_encoder/model-00001-of-00004.safetensors", +> "models/Qwen/Qwen-Image/text_encoder/model-00002-of-00004.safetensors", +> "models/Qwen/Qwen-Image/text_encoder/model-00003-of-00004.safetensors", +> "models/Qwen/Qwen-Image/text_encoder/model-00004-of-00004.safetensors" +> ]), +> ModelConfig("models/Qwen/Qwen-Image/vae/diffusion_pytorch_model.safetensors") +> ] +> ``` +> +> 那么训练时需设置为 +> +> ```shell +> --model_paths '[ +> [ +> "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model-00001-of-00009.safetensors", +> "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model-00002-of-00009.safetensors", +> "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model-00003-of-00009.safetensors", +> "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model-00004-of-00009.safetensors", +> "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model-00005-of-00009.safetensors", +> "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model-00006-of-00009.safetensors", +> "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model-00007-of-00009.safetensors", +> "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model-00008-of-00009.safetensors", +> "models/Qwen/Qwen-Image/transformer/diffusion_pytorch_model-00009-of-00009.safetensors" +> ], +> [ +> "models/Qwen/Qwen-Image/text_encoder/model-00001-of-00004.safetensors", +> "models/Qwen/Qwen-Image/text_encoder/model-00002-of-00004.safetensors", +> "models/Qwen/Qwen-Image/text_encoder/model-00003-of-00004.safetensors", +> "models/Qwen/Qwen-Image/text_encoder/model-00004-of-00004.safetensors" +> ], +> "models/Qwen/Qwen-Image/vae/diffusion_pytorch_model.safetensors" +> ]' \ +> ``` +> +> 请注意,`--model_paths` 是 json 格式,其中不能出现多余的 `,`,否则无法被正常解析。 + +
+ +## 设置可训练模块 + +训练框架支持任意模型的训练,以 Qwen-Image 为例,若全量训练其中的 DiT 模型,则需设置为 + +```shell +--trainable_models "dit" +``` + +若训练 DiT 模型的 LoRA,则需设置 + +```shell +--lora_base_model dit --lora_target_modules "to_q,to_k,to_v" --lora_rank 32 +``` + +我们希望给技术探索留下足够的发挥空间,因此框架支持同时训练任意多个模块,例如同时训练 text encoder、controlnet,以及 DiT 的 LoRA: + +```shell +--trainable_models "text_encoder,controlnet" --lora_base_model dit --lora_target_modules "to_q,to_k,to_v" --lora_rank 32 +``` + +此外,由于训练脚本中加载了多个模块(text encoder、dit、vae 等),保存模型文件时需要移除前缀,例如在全量训练 DiT 部分或者训练 DiT 部分的 LoRA 模型时,请设置 `--remove_prefix_in_ckpt pipe.dit.`。如果多个模块同时训练,则需开发者在训练完成后自行编写代码拆分模型文件中的 state dict。 + +## 启动训练程序 + +训练框架基于 [`accelerate`](https://huggingface.co/docs/accelerate/index) 构建,训练命令按照如下格式编写: + +```shell +accelerate launch xxx/train.py \ + --xxx yyy \ + --xxxx yyyy +``` + +我们为每个模型编写了预置的训练脚本,详见各模型的文档。 + +默认情况下,`accelerate` 会按照 `~/.cache/huggingface/accelerate/default_config.yaml` 的配置进行训练,使用 `accelerate config` 可在终端交互式地配置,包括多 GPU 训练、[`DeepSpeed`](https://www.deepspeed.ai/) 等。 + +我们为部分模型提供了推荐的 `accelerate` 配置文件,可通过 `--config_file` 设置,例如 Qwen-Image 模型的全量训练: + +```shell +accelerate launch --config_file examples/qwen_image/model_training/full/accelerate_config_zero2offload.yaml examples/qwen_image/model_training/train.py \ + --dataset_base_path data/example_image_dataset \ + --dataset_metadata_path data/example_image_dataset/metadata.csv \ + --max_pixels 1048576 \ + --dataset_repeat 50 \ + --model_id_with_origin_paths "Qwen/Qwen-Image:transformer/diffusion_pytorch_model*.safetensors,Qwen/Qwen-Image:text_encoder/model*.safetensors,Qwen/Qwen-Image:vae/diffusion_pytorch_model.safetensors" \ + --learning_rate 1e-5 \ + --num_epochs 2 \ + --remove_prefix_in_ckpt "pipe.dit." \ + --output_path "./models/train/Qwen-Image_full" \ + --trainable_models "dit" \ + --use_gradient_checkpointing \ + --find_unused_parameters +``` + +## 训练注意事项 + +* 数据集的元数据除 `csv` 格式外,还支持 `json`、`jsonl` 格式,关于如何选择最佳的元数据格式,请参考[](../API_Reference/core/data.md#元数据) +* 通常训练效果与训练步数强相关,与 epoch 数量弱相关,因此我们更推荐使用参数 `--save_steps` 按训练步数间隔来保存模型文件。 +* 当数据量 * `dataset_repeat` 超过 $10^9$ 时,我们观测到数据集的速度明显变慢,这似乎是 `PyTorch` 的 bug,我们尚不确定新版本的 `PyTorch` 是否已经修复了这一问题。 +* 学习率 `--learning_rate` 在 LoRA 训练中建议设置为 `1e-4`,在全量训练中建议设置为 `1e-5`。 +* 训练框架不支持 batch size > 1,原因是复杂的,详见 [Q&A: 为什么训练框架不支持 batch size > 1?](../QA.md#为什么训练框架不支持-batch-size--1) +* 少数模型包含冗余参数,例如 Qwen-Image 的 DiT 部分最后一层的文本编码部分,在训练这些模型时,需设置 `--find_unused_parameters` 避免在多 GPU 训练中报错。出于对开源社区模型兼容性的考虑,我们不打算删除这些冗余参数。 +* Diffusion 模型的损失函数值与实际效果的关系不大,因此我们在训练过程中不会记录损失函数值。我们建议把 `--num_epochs` 设置为足够大的数值,边训边测,直至效果收敛后手动关闭训练程序。 +* `--use_gradient_checkpointing` 通常是开启的,除非 GPU 显存足够;`--use_gradient_checkpointing_offload` 则按需开启,详见 [`diffsynth.core.gradient`](../API_Reference/core/gradient.md)。 +* 如需加载前一次训练好的模型 checkpoint 文件并继续训练,请使用 `--lora_checkpoint` 加载 LoRA checkpoint,使用 `--resume_from_checkpoint` 加载基础模型,目前仅支持单模型的加载。 + +## 低显存训练 + +框架支持多种方式减少训练所需的显存,包括: + +|名称|开启方式|技术原理|使用效果|何时启用|参考文档| +|-|-|-|-|-|-| +|Gradient Checkpointing|通过 `--use_gradient_checkpointing` 开启|在前向传播时不保留梯度相关参数,在反向传播时重新计算这些参数|显著减少显存占用,增加计算时间|在大部分情况下,我们推荐开启这个功能|[文档](../API_Reference/core/gradient.md)| +|Gradient Checkpointing Offload|通过 `--use_gradient_checkpointing_offload` 开启)|在 Gradient Checkpointing 的基础上,将 Gradient Checkpointing 的参数从显存移至内存中|进一步减少显存占用和增加计算时间,同时增加内存占用|仅推荐在视频生成模型的训练中考虑开启这个功能|[文档](../API_Reference/core/gradient.md)| +|DeepSpeed|通过 `accelerate config` 交互式地配置|DeepSpeed 支持将梯度、Optimizer 等参数分拆到多 GPU 上|减少显存占用,增加多 GPU 与多机之间的通信成本,增加计算时间|仅推荐在多 GPU 与多机集群训练中启用|[文档](../Training/DeepSpeed.md)| +|FP8 训练|通过 `--fp8_models` 设置将哪些模型组件切换为 FP8 模式|将模型参数以 FP8 精度存储在显存中,在推理时临时转换为更高精度,仅支持不需要梯度更新参数的模型|减少显存占用,少量增加计算时间,引入少量训练误差|仅推荐在 `text_encoder`、`vae` 等非训练模块上启用,也可在 LoRA 训练时对 `dit` 启用|[文档](../Training/FP8_Precision.md)| +|自定义量化精度|通过 `--quant_options` 设置每个模型组件的量化配置|FP8 训练的高阶版,将模型参数以任意量化精度存储在显存中|减少显存占用,少量增加计算时间,引入少量训练误差|仅推荐在 `text_encoder`、`vae` 等非训练模块上启用,也可在 LoRA 训练时对 `dit` 启用|[文档](./Quantization.md)| +|两阶段拆分训练|较为复杂,请参考[文档](../Training/Split_Training.md)|将训练过程拆分为两个阶段,第一阶段进行无梯度计算并将中间结果保存至硬盘,第二阶段计算梯度并更新模型参数。|减少显存占用,增加计算速度,占用额外硬盘空间|部分模型的两阶段训练功能未验证,请谨慎使用|[文档](../Training/Split_Training.md)| +|CPU Offload|通过 `--enable_model_cpu_offload` 启用|在训练时将模型保存在内存中,逐层移至显存中进行前向和后向传播|减少显存占用,增加计算时间,增加内存占用|仅推荐在单 GPU 且显存极为有限的设备上启用|[文档](../Training/Offload_Training.md)| diff --git a/docs/zh/Pipeline_Usage/Quantization.md b/docs/zh/Pipeline_Usage/Quantization.md new file mode 100644 index 0000000000000000000000000000000000000000..ba18d71e9ec2d9434ff54504da898bc3c44d40c5 --- /dev/null +++ b/docs/zh/Pipeline_Usage/Quantization.md @@ -0,0 +1,426 @@ +# 模型量化 + +量化通过降低模型权重的数值精度来减少显存占用,让大模型能在更小的显卡上运行。`DiffSynth-Studio` 提供统一的量化入口 `QuantizeConfig`,支持 bitsandbytes、torchao、comfy-kitchen 等多个量化后端,并支持在线量化、加载预量化权重、混合量化以及量化 + LoRA 训练。 + +本文以 `Z-Image` 为例介绍量化的使用。如果你希望把 `diffsynth.core.quant` 用到自己的代码库中,请参考 [`diffsynth.core.quant` API 文档](../API_Reference/core/quant.md)。 + +> **量化 与 显存管理 FP8 的区别** +> +> [显存管理](./VRAM_management.md)中的 FP8 通过 `offload_dtype` / `onload_dtype` 等参数控制权重在显存中的存储精度,作用于全部参数、不依赖第三方库,但只有简单的 FP8 转换。 +> +> 本文的量化(`QuantizeConfig`)是针对 `nn.Linear` 的专门方案,支持 NF4、INT8、INT4、MXFP4、NVFP4 等更精细的格式,可保存/加载量化权重,支持激活量化与量化 + LoRA 训练。两者可以组合使用。 + +## 安装依赖 + +不同量化后端需要对应的第三方库: + +| 后端 | 安装命令 | Project Page | +| --- | --- | --- | +| bitsandbytes | `pip install bitsandbytes` | [bitsandbytes](https://github.com/bitsandbytes-foundation/bitsandbytes) | +| torchao | `pip install torchao>=0.16` | [torchao](https://github.com/pytorch/ao) | +| comfy-kitchen | `pip install comfy-kitchen` | [comfy-kitchen](https://github.com/Comfy-Org/comfy-kitchen) | + +一次性安装全部:`pip install "diffsynth[quant]"` + +## 快速开始 + +在任意 `ModelConfig` 上传入 `quantize` 即可对该模型启用在线量化。以下代码把 Z-Image 的 DiT 用 NF4 量化后加载: + +```python +from diffsynth.pipelines.z_image import ZImagePipeline, ModelConfig +from diffsynth.core.quant import QuantizeConfig +import torch + +pipe = ZImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig( + model_id="Tongyi-MAI/Z-Image", origin_file_pattern="transformer/*.safetensors", + quantize=QuantizeConfig(method="bitsandbytes_nf4"), + ), + ModelConfig(model_id="Tongyi-MAI/Z-Image-Turbo", origin_file_pattern="text_encoder/*.safetensors"), + ModelConfig(model_id="Tongyi-MAI/Z-Image-Turbo", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + tokenizer_config=ModelConfig(model_id="Tongyi-MAI/Z-Image-Turbo", origin_file_pattern="tokenizer/"), +) +prompt = "精致肖像,水下少女,蓝裙飘逸,发丝轻扬,光影透澈,气泡环绕,面容恬静,细节精致,梦幻唯美。" +image = pipe(prompt=prompt, seed=42, num_inference_steps=50, cfg_scale=4) +image.save("image_z_image_nf4.jpg") +``` + +## 支持的量化方法 + +以下是内置的全部量化方法,`method` 即传入 `QuantizeConfig` 的名称。命名遵循 `W<权重位宽>A<激活位宽>` 约定:`w8a16` 表示只量化权重(weight-only),`w8a8` 表示权重与激活都量化。 + +| method | 后端 | 权重 / 激活 | 可序列化 | 支持 LoRA 训练 | +| --- | --- | --- | --- | --- | +| `bitsandbytes_nf4` | bitsandbytes | NF4 / 不量化 | ✅ | ✅ | +| `bitsandbytes_fp4` | bitsandbytes | FP4 / 不量化 | ✅ | ✅ | +| `torchao_int8_w8a16` | torchao | INT8 / 不量化 | ✅ | ✅ | +| `torchao_fp8_w8a16` | torchao | FP8 / 不量化 | ✅ | ✅ | +| `torchao_int4_w4a16` | torchao | INT4 / 不量化 | ✅ | ❌ | +| `torchao_nvfp4_w4a16` | torchao | NVFP4 / 不量化 | ✅ | ✅ | +| `torchao_int8_w8a8` | torchao | INT8 / INT8 动态 | ✅ | ❌ | +| `torchao_fp8_w8a8` | torchao | FP8 / FP8 动态 | ✅ | ❌ | +| `torchao_int4_w4a8` | torchao | INT4 / FP8 动态 | ✅ | ❌ | +| `torchao_mxfp8_w8a8` | torchao | MXFP8 / MXFP8 | ✅ | ❌ | +| `torchao_mxfp4_w4a4` | torchao | MXFP4 / MXFP4 | ✅ | ❌ | +| `torchao_nvfp4_w4a4` | torchao | NVFP4 / NVFP4 | ✅ | ❌ | +| `comfy_kitchen_int8_w8a8` | comfy_kitchen | INT8 / INT8 动态 | ✅ | ✅ | +| `comfy_kitchen_fp8_w8a8` | comfy_kitchen | FP8 E4M3 / FP8 | ✅ | ✅ | + +几点说明: + +- **激活量化**(`w8a8` / `w4a4`)在压缩权重之外还会量化激活值,在支持对应低精度矩阵乘的硬件上可以真正提速,而 weight-only 方案通常只省显存。 +- **LoRA 训练**:只有表中"支持 LoRA 训练"为 ✅ 的方法可用于量化 + LoRA 训练。 +- `comfy_kitchen_*` 方法读写的是 ComfyUI 的量化权重格式,可与 ComfyUI 生态互通。comfy-kitchen 需要 CUDA 13.0 及以上。 +- MXFP8 / MXFP4 / NVFP4 等格式对计算硬件有要求,具体兼容性请查阅 [torchao](https://github.com/pytorch/ao) 文档。 + +你可以在代码中查询所有可用方法及其参数: + +```python +from diffsynth.core.quant import describe_quant_method, QUANT_METHODS, backends + +backends.load_all_backends() +print(sorted(QUANT_METHODS)) # 所有已注册的方法名 + +describe_quant_method("bitsandbytes_nf4") +``` + +输出如下,其中 `backend_config_kwargs (user-tunable)` 列出了该方法可调整的参数及默认值,这些参数决定量化的行为,你可以根据需要修改它们。对于 torchao 后端,部分参数会直接传递给 torchao 自己的 config(如 `Int8WeightOnlyConfig`): + +> 除非你清楚这些参数的含义,否则建议保留默认值。 + +``` +method: bitsandbytes_nf4 +backend: bitsandbytes +detail: 4bit, nf4, weight-only +backend config: diffsynth.core.quant.backends.bitsandbytes.BitsAndBytesNF4Config +backend_config_kwargs (user-tunable): + compress_statistics = True + blocksize = None + quant_storage = torch.uint8 +pinned by method (not overridable): + quant_type = 'nf4' +``` + +## QuantizeConfig 详解 + +`QuantizeConfig` 描述了"用哪种方法、量化哪些层、量化后如何运行": + +- **`method`**:量化方法名,见上表,必填。 +- **`mode`**:量化层的运行方式。 + - `"dynamic"`(默认):保留量化 Linear,forward 时按需反量化,显存占用低。 + - `"dequant_once"`:量化完成后一次性还原成普通 fp `nn.Linear`(保留量化误差)。适合需要标准 `nn.Linear` 的场景,不再省显存。 +- **`target_modules` / `exclude_modules`**:按层名过滤要量化的 `nn.Linear`,取值为列表。匹配规则是完整点分名称相等,或以 `"." + 名称` 结尾(例如 `"img_mod.1"` 可匹配 `transformer_blocks.0.img_mod.1`)。 +- **`backend_config_kwargs`**:传给后端配置的参数字典,决定量化的行为(torchao 后端的部分参数会直接传给 torchao 自己的 config)。可先用 `describe_quant_method(method)` 查询可用参数。 +- **`load_prequantized`**:设为 `True` 表示 checkpoint 中已经是量化权重,直接加载(见下文)。 + +示例:排除对量化敏感的层,并调整 NF4 的后端参数: + +```python +from diffsynth.core.quant import QuantizeConfig + +quantize = QuantizeConfig( + method="bitsandbytes_nf4", + mode="dynamic", + exclude_modules=["time_embedder.proj_in", "time_embedder.proj_out", "proj_out"], + backend_config_kwargs={"compress_statistics": False}, +) +``` + +激活量化方法的用法完全一致,只是换个 `method`: + +```python +quantize = QuantizeConfig(method="comfy_kitchen_int8_w8a8", backend_config_kwargs={"convrot_groupsize": 128}) +``` + +## 加载预量化权重 + +除在线量化外,也支持直接加载已量化好的 checkpoint,省去每次加载时的量化开销。 + +对于官方发布的量化模型(如 `ideogram-ai/ideogram-4-nf4`),配置中已写好量化信息,像加载普通模型一样即可: + +```python +ModelConfig(model_id="ideogram-ai/ideogram-4-nf4", origin_file_pattern="transformer/diffusion_pytorch_model.safetensors") +``` + +对于自己保存的量化 checkpoint(见下一节),加载时显式传入 `quantize` 并设置 `load_prequantized=True`,其中 `method` 与 `exclude_modules` 必须与保存时保持一致: + +```python +from diffsynth.core.quant import QuantizeConfig + +ModelConfig( + path="models/z-image-nf4/transformer.safetensors", + quantize=QuantizeConfig(method="bitsandbytes_nf4", load_prequantized=True), +) +``` + +## 保存量化模型 + +想把一次在线量化的结果保存下来反复使用,可以用 `save_quantized_model`: + +```python +from diffsynth.core.loader import ModelConfig +from diffsynth.core.quant import QuantizeConfig +from diffsynth.utils.quant.serialization import save_quantized_model + +model_config = ModelConfig( + model_id="Tongyi-MAI/Z-Image", + origin_file_pattern="transformer/*.safetensors", + quantize=QuantizeConfig(method="bitsandbytes_nf4"), +) +save_quantized_model(model_config, "models/z-image-nf4/transformer.safetensors") +``` + +它会下载并加载原始 fp 权重、执行量化,再把量化后的 state dict 存成 `.safetensors`。保存后即可用上一节的方式加载。 + +## 混合量化 + +不同层对量化的敏感程度不同。`MixedQuantizeConfig` 允许对不同层集合应用不同方法,例如对精度敏感的调制层用 INT8、其余层用 NF4: + +```python +from diffsynth.core.quant import QuantizeConfig, MixedQuantizeConfig + +mod_layers = ["img_mod.1", "txt_mod.1", "norm_out.linear", "img_in", "txt_in", "proj_out"] +quantize = MixedQuantizeConfig(configs=[ + QuantizeConfig(method="bitsandbytes_nf4", exclude_modules=mod_layers), + QuantizeConfig(method="torchao_int8_w8a16", target_modules=mod_layers), +]) +``` + +各子配置匹配到的层集合必须互不重叠。所有子配置必须共享同一个 `mode`。`MixedQuantizeConfig` 对外接口与 `QuantizeConfig` 完全一致,可直接传给 `ModelConfig(quantize=...)`,也可以传给 `save_quantized_model`。 + +> 加载混合量化的预量化 checkpoint 时,`load_prequantized=True` 要设置在 `MixedQuantizeConfig` 上,而不是子配置上。 + +## 量化 + LoRA 训练 + +在大多数情况下,量化后的模型不支持训练,但支持冻结基础模型后的 LoRA 训练,从而在很小的显存里训练大模型。 + +可用于量化 + LoRA 训练的方法见[方法表](#支持的量化方法)的最后一列。有两种使用方式。 + +### 方式一:用预量化的底模训练 + +训练脚本通过 `--model_id_with_origin_paths` 指向预量化模型: + +```bash +accelerate launch examples/.../train.py \ + --model_id_with_origin_paths "DiffSynth-Studio/MiniMax-H3-NF4:minimax-h3-fl2va-nf4.safetensors,..." \ + --lora_base_model "dit" \ + --lora_target_modules "attn.qkv_proj,attn.out_proj,mlp.fc1,mlp.fc2" \ + --lora_rank 32 \ + --output_path "./models/train/xxx-nf4" +``` + +### 方式二:用 `--quant_options` 在线量化 + +如果没有现成的预量化权重,可以用 `--quant_options` 在训练启动时对加载的模型做在线量化。取值以 `;` 分隔多个条目,每个条目的格式为 `<模型字符串>:[/]`: + +- `<模型字符串>`:要量化的模型,必须与 `--model_paths` / `--model_id_with_origin_paths` 中的写法完全一致。 +- ``:量化方法名,见[方法表](#支持的量化方法)。 +- ``:可选,以 `,` 分隔的层名列表,这些层保持全精度。 + +以 Z-Image-Turbo 的量化 LoRA 训练为例(完整脚本见 `examples/z_image/model_training/special/quant_training/Z-Image-Turbo-bitsandbytes_nf4.sh`): + +```bash +accelerate launch examples/z_image/model_training/train.py \ + --model_id_with_origin_paths "Tongyi-MAI/Z-Image-Turbo:transformer/*.safetensors,Tongyi-MAI/Z-Image-Turbo:text_encoder/*.safetensors,Tongyi-MAI/Z-Image-Turbo:vae/diffusion_pytorch_model.safetensors" \ + --quant_options "Tongyi-MAI/Z-Image-Turbo:transformer/*.safetensors:bitsandbytes_nf4;Tongyi-MAI/Z-Image-Turbo:text_encoder/*.safetensors:bitsandbytes_nf4" \ + --lora_base_model "dit" \ + --lora_target_modules "to_q,to_k,to_v,to_out.0,w1,w2,w3" \ + --lora_rank 32 \ + --use_gradient_checkpointing \ + --output_path "./models/train/Z-Image-Turbo_quant_lora" +``` + +上例中 DiT 与 text encoder 都启用了 NF4 量化。`text_encoder`、`vae` 等不参与训练的模块可以放心量化;被训练的 `dit` 只能在 LoRA 训练下量化,且必须选用支持 LoRA 训练的方法——如果指定了不可微的方法,训练会直接报错退出。 + +用本地权重训练时改用 `--model_paths`(JSON 格式),`<模型字符串>` 要与其中的条目对应。由多个文件组成的模型在 `--model_paths` 里是一个 JSON 列表,`--quant_options` 中也要把这个列表**整体**写出来: + +```bash +accelerate launch examples/z_image/model_training/train.py \ + --model_paths '[["models/Tongyi-MAI/Z-Image-Turbo/transformer/diffusion_pytorch_model-00001-of-00003.safetensors", "models/Tongyi-MAI/Z-Image-Turbo/transformer/diffusion_pytorch_model-00002-of-00003.safetensors", "models/Tongyi-MAI/Z-Image-Turbo/transformer/diffusion_pytorch_model-00003-of-00003.safetensors"], ["models/Tongyi-MAI/Z-Image-Turbo/text_encoder/model-00001-of-00003.safetensors", "models/Tongyi-MAI/Z-Image-Turbo/text_encoder/model-00002-of-00003.safetensors", "models/Tongyi-MAI/Z-Image-Turbo/text_encoder/model-00003-of-00003.safetensors"], "models/Tongyi-MAI/Z-Image-Turbo/vae/diffusion_pytorch_model.safetensors"]' \ + --tokenizer_path "models/Tongyi-MAI/Z-Image-Turbo/tokenizer/" \ + --quant_options '["models/Tongyi-MAI/Z-Image-Turbo/transformer/diffusion_pytorch_model-00001-of-00003.safetensors", "models/Tongyi-MAI/Z-Image-Turbo/transformer/diffusion_pytorch_model-00002-of-00003.safetensors", "models/Tongyi-MAI/Z-Image-Turbo/transformer/diffusion_pytorch_model-00003-of-00003.safetensors"]:bitsandbytes_nf4;["models/Tongyi-MAI/Z-Image-Turbo/text_encoder/model-00001-of-00003.safetensors", "models/Tongyi-MAI/Z-Image-Turbo/text_encoder/model-00002-of-00003.safetensors", "models/Tongyi-MAI/Z-Image-Turbo/text_encoder/model-00003-of-00003.safetensors"]:bitsandbytes_nf4' \ + --lora_base_model "dit" \ + --lora_target_modules "to_q,to_k,to_v,to_out.0,w1,w2,w3" \ + --lora_rank 32 \ + --use_gradient_checkpointing \ + --output_path "./models/train/Z-Image-Turbo_quant_lora" +``` + +只写列表中的某一个文件、或改变文件顺序都不会匹配上。启动时如果打印 `No quant option matches ...`,说明该模型没有匹配到任何量化选项,会以原精度加载,此时应对照日志里同时打印出的已解析选项检查写法。 + +带 `exclude_modules` 的写法(保留对量化敏感的层): + +```bash + --quant_options "MiniMaxAI/MiniMax-H3:FL2VA/transformer/model*.safetensors:bitsandbytes_nf4/time_embedder.proj_in,time_embedder.proj_out,video_patch_proj,audio_patch_proj" +``` + +> `--quant_options` 使用的是 `mode="dynamic"`,不支持配置 `backend_config_kwargs`、混合量化等更复杂的选项。有这类需求时请改用方式一:先用 `save_quantized_model` 保存量化权重,再用预量化底模训练。 + +### 通用说明 + +- 训练中量化底模保持冻结,只有 LoRA 分支更新,因此保存下来的是 fp 精度的 LoRA 权重。 +- 推理时按"量化底模 + LoRA"加载:先像[加载预量化权重](#加载预量化权重)那样加载量化底模,再 `pipe.load_lora(pipe.dit, "epoch-x.safetensors")`。 +- 大模型建议优先选方式一:在线量化需要先加载完整 fp 权重,启动慢且峰值内存高。 + +## 自定义量化后端 + +如果内置方法不满足需求,你可以实现自己的量化后端。完整的接入流程与可运行的示例(以玩具后端 INT9 为例)见[接入量化后端](../Developer_Guide/Integrating_Quantization_Backend.md),完整的接口签名与契约见 [`diffsynth.core.quant` API 文档](../API_Reference/core/quant.md#扩展接口自定义后端)。 + +## 量化与显存管理组合 + +量化与[显存管理](./VRAM_management.md)解决的是不同层面的问题,可以同时启用: + +- 量化降低**每一层的存储体积**,例如 NF4 约为 bf16 的 1/4。 +- 显存管理决定**哪些层此刻留在显存里**,其余按需从内存/硬盘调入。 + +两者组合可以进一步压低推理所需的显存:先把权重压缩到 4bit/8bit,再用 `vram_limit` 把压缩后的模型拆分到显存与内存中。 + +```python +from diffsynth.pipelines.z_image import ZImagePipeline, ModelConfig +from diffsynth.core.quant import QuantizeConfig +import torch + +vram_config = { + "offload_dtype": torch.bfloat16, + "offload_device": "cpu", + "onload_dtype": torch.bfloat16, + "onload_device": "cpu", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} +pipe = ZImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig( + model_id="Tongyi-MAI/Z-Image", origin_file_pattern="transformer/*.safetensors", + quantize=QuantizeConfig(method="bitsandbytes_nf4"), **vram_config, + ), + ModelConfig(model_id="Tongyi-MAI/Z-Image-Turbo", origin_file_pattern="text_encoder/*.safetensors", **vram_config), + ModelConfig(model_id="Tongyi-MAI/Z-Image-Turbo", origin_file_pattern="vae/diffusion_pytorch_model.safetensors", **vram_config), + ], + tokenizer_config=ModelConfig(model_id="Tongyi-MAI/Z-Image-Turbo", origin_file_pattern="tokenizer/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) +``` + +两点注意: + +- `vram_config` 中的 `offload_dtype` / `onload_dtype` 等参数作用于未量化的参数;已量化层的存储精度由量化方法决定,不受这些参数影响。 +- **Disk Offload 与在线量化不兼容**。Disk Offload 按层从硬盘读取参数,要求量化后的参数已经保存在磁盘上,因此不能先走 Disk Offload 再做在线量化。若要结合 Disk Offload 使用量化,请先按[最佳实践](#最佳实践)的流程保存量化权重,再加载预量化 checkpoint。 + +## 最佳实践 + +以 MiniMax-H3 为例,展示从保存量化权重到加载推理的完整流程。 + +### 第一步:保存量化权重 + +MiniMax-H3 的 FL2VA 底模约 66G(bf16),直接用 NF4 在线量化会很慢,建议先量化并保存一次,之后反复加载。`save_quantized_model` 会返回保存文件的 hash: + +```python +from diffsynth.core.loader import ModelConfig +from diffsynth.core.quant import QuantizeConfig +from diffsynth.utils.quant.serialization import save_quantized_model + +quantize = QuantizeConfig( + method="bitsandbytes_nf4", + mode="dynamic", + exclude_modules=[ + "time_embedder.proj_in", "time_embedder.proj_out", + "video_patch_proj", "audio_patch_proj", "condition_proj", + "final_layer.video_out", "final_layer.audio_out", + ], +) +model_config = ModelConfig( + model_id="MiniMaxAI/MiniMax-H3", + origin_file_pattern="FL2VA/transformer/model*.safetensors", + quantize=quantize, +) +model_hash = save_quantized_model(model_config, "models/MiniMax-H3-NF4/minimax-h3-fl2va-nf4.safetensors") +print(model_hash) +``` + +`exclude_modules` 里是对量化敏感的层(时间步嵌入、输入输出投影),保留 bf16 以维持质量。 + +### 第二步:把 hash 写入模型配置 + +框架通过文件 hash 识别模型类型与量化配置。注册条目如下,`quant_config` 需与保存时的 `QuantizeConfig` 保持一致并加上 `load_prequantized: True`: + +```python +config_entry = { + # Example: ModelConfig(model_id="...", origin_file_pattern="minimax-h3-fl2va-nf4.safetensors") + "model_hash": model_hash, + "model_name": "minimax_h3_dit", + "model_class": "diffsynth.models.minimax_h3_dit.MiniMaxH3DiT", + "quant_config": {"method": "bitsandbytes_nf4", "load_prequantized": True, "exclude_modules": ["time_embedder.proj_in", "time_embedder.proj_out", "video_patch_proj", "audio_patch_proj", "condition_proj", "final_layer.video_out", "final_layer.audio_out"]}, +} +``` + +注册方式有两种: + +**方式一:在 Python 代码中动态注册(推荐,即插即用)**。无需改动框架代码,在加载模型之前把条目加入 `MODEL_CONFIGS` 即可生效,仅作用于当前进程: + +```python +from diffsynth.configs import MODEL_CONFIGS + +MODEL_CONFIGS.append(config_entry) +``` + +**方式二:写入配置文件(永久生效)**。把上面的条目添加到 `diffsynth/configs/model_configs.py` 的 `MODEL_CONFIGS` 列表中,这样在本地无需再手动注册。如果你的量化权重已经公开发布,也欢迎把这个条目提交 PR 给我们,让其他用户可以直接加载。 + +### 第三步:加载推理 + +注册完成后,加载自己的量化权重就和加载普通模型一样,无需传入 `quantize` 参数: + +```python +import torch +from diffsynth.pipelines.minimax_h3_audio_video import MiniMaxH3Pipeline, ModelConfig +from diffsynth.utils.data.audio_video import write_video_audio + +vram_config = { + "offload_dtype": torch.bfloat16, + "offload_device": "cpu", + "onload_dtype": torch.bfloat16, + "onload_device": "cpu", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} +pipe = MiniMaxH3Pipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(path="models/MiniMax-H3-NF4/minimax-h3-fl2va-nf4.safetensors", **vram_config), + ModelConfig(model_id="MiniMax/MiniMax-H3", origin_file_pattern="FL2VA/text_encoder/model*.safetensors", **vram_config), + ModelConfig(model_id="MiniMax/MiniMax-H3", origin_file_pattern="FL2VA/video_vae/source/model.safetensors", **vram_config), + ModelConfig(model_id="MiniMax/MiniMax-H3", origin_file_pattern="FL2VA/audio_vae/model.safetensors", **vram_config), + ], + processor_config=ModelConfig(model_id="MiniMax/MiniMax-H3", origin_file_pattern="FL2VA/processor/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 2, +) +prompt = "A girl is very happy, she is speaking in english: 'I enjoy working with Diffsynth-Studio, it's a perfect framework.'" +video, audio = pipe(prompt=prompt, height=480, width=832, num_frames=124, num_inference_steps=50, seed=0) +write_video_audio(video=video, audio=audio, output_path="t2va.mp4", fps=24, audio_sample_rate=32000) +``` + +我们已将 MiniMax-H3 的 NF4 量化权重上传到 ModelScope([DiffSynth-Studio/MiniMax-H3-NF4](https://modelscope.cn/models/DiffSynth-Studio/MiniMax-H3-NF4)),可以直接使用而无需自行量化。如果你想把自己保存的量化权重上传到 ModelScope,可以用 modelscope SDK: + +```python +from modelscope.hub.api import HubApi + +api = HubApi() +api.login("your_access_token") +api.create_model("your-username/MiniMax-H3-NF4", visibility=1) +api.upload_folder( + repo_id="your-username/MiniMax-H3-NF4", + folder_path="models/MiniMax-H3-NF4", + repo_type="model", +) +``` diff --git a/docs/zh/Pipeline_Usage/Setup.md b/docs/zh/Pipeline_Usage/Setup.md new file mode 100644 index 0000000000000000000000000000000000000000..898931f59bcb2568f7e9e5b2a1d40ac039492ae5 --- /dev/null +++ b/docs/zh/Pipeline_Usage/Setup.md @@ -0,0 +1,74 @@ +# 安装依赖 + +从源码安装(推荐): + +``` +git clone https://github.com/modelscope/DiffSynth-Studio.git +cd DiffSynth-Studio +pip install -e . +``` + +从 pypi 安装(存在版本更新延迟,如需使用最新功能,请从源码安装) + +``` +pip install diffsynth +``` + +为保证框架的轻量化,基础安装选项只会安装必要的依赖包,我们提供了一些额外的安装选项: + +* `[audio]`: 用于音频模型的支持,例如 ACE-Step、MiniMax-Music3 等 +* `[quant]`: 用于参数量化,启用 NF4、INT8、NVFP4 等精度 +* `[training]`: 用于分布式大规模预训练 +* `[logger]`: 用于启用 TensorBoard、SwanLab 等训练日志记录器 +* `[npu]`: 用于 x86 架构的 Ascend NPU 设备 +* `[npu_aarch64]`: 用于 aarch64/ARM 架构的 Ascend NPU 设备 +* 特定模型的依赖 + * `[infiniteyou]`: https://arxiv.org/abs/2503.16418 + * `[ses]`: https://arxiv.org/abs/2602.03208 + * `[nexusgen]`: https://arxiv.org/pdf/2504.21356 +* `[all]`: 包含除“特定模型的依赖”以外的所有依赖 + +你可以使用命令 `pip install -e ".[audio,quant]"` 或 `pip install diffsynth[audio,quant]` 来安装多组依赖包。 + +## GPU/NPU 支持 + +### NVIDIA GPU + +按照以上方式安装即可。 + +### AMD GPU + +需安装支持 ROCm 的 `torch` 包,以 ROCm 6.4(本文更新于 2025 年 12 月 15 日)、Linux 系统为例,请运行以下命令 + +```shell +pip install torch torchvision --index-url https://download.pytorch.org/whl/rocm6.4 +``` + +### Apple Silicon + +在 Apple Silicon 设备上,无需修改安装步骤。但由于显存和内存是统一的,请将代码中的 `"cuda"` 全部修改为 `"mps"` 或 `"cpu"`。 + +### Ascend NPU + +1. 通过官方文档安装 [CANN](https://www.hiascend.com/document/detail/zh/canncommercial/83RC1/softwareinst/instg/instg_quick.html?Mode=PmIns&InstallType=local&OS=openEuler&Software=cannToolKit) + +2. 从源码安装 + ```shell + git clone https://github.com/modelscope/DiffSynth-Studio.git + cd DiffSynth-Studio + # aarch64/ARM + pip install -e .[npu_aarch64] + # x86 + pip install -e .[npu] --extra-index-url "https://download.pytorch.org/whl/cpu" + ``` + +使用 Ascend NPU 时,请将 Python 代码中的 `"cuda"` 改为 `"npu"`,详见[NPU 支持](../Pipeline_Usage/GPU_support.md#ascend-npu)。 + +## 其他安装问题 + +如果在安装过程中遇到问题,可能是由上游依赖包导致的,请参考这些包的文档: + +* [torch](https://pytorch.org/get-started/locally/) +* [Ascend/pytorch](https://github.com/Ascend/pytorch) +* [sentencepiece](https://github.com/google/sentencepiece) +* [cmake](https://cmake.org) diff --git a/docs/zh/Pipeline_Usage/VRAM_management.md b/docs/zh/Pipeline_Usage/VRAM_management.md new file mode 100644 index 0000000000000000000000000000000000000000..fc22b7e118ef62298b314cc378ba15338c98fba6 --- /dev/null +++ b/docs/zh/Pipeline_Usage/VRAM_management.md @@ -0,0 +1,214 @@ +# 显存管理 + +显存管理是 `DiffSynth-Studio` 的特色功能,能够让低显存的 GPU 能够运行参数量巨大的模型推理。本文档以 Qwen-Image 为例,介绍显存管理方案的使用。 + +## 基础推理 + +以下代码中没有启用任何显存管理,显存占用 56G,作为参考。 + +```python +from diffsynth.pipelines.qwen_image import QwenImagePipeline, ModelConfig +import torch + +pipe = QwenImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="transformer/diffusion_pytorch_model*.safetensors"), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="text_encoder/model*.safetensors"), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + tokenizer_config=ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="tokenizer/"), +) +prompt = "精致肖像,水下少女,蓝裙飘逸,发丝轻扬,光影透澈,气泡环绕,面容恬静,细节精致,梦幻唯美。" +image = pipe(prompt, seed=0, num_inference_steps=40) +image.save("image.jpg") +``` + +## CPU Offload + +由于模型 `Pipeline` 包括多个组件,这些组件并非同时调用的,因此我们可以在某些组件不需要参与计算时将其移至内存,减少显存占用,以下代码可以实现这一逻辑,显存占用 40G。 + +```python +from diffsynth.pipelines.qwen_image import QwenImagePipeline, ModelConfig +import torch + +vram_config = { + "offload_dtype": torch.bfloat16, + "offload_device": "cpu", + "onload_dtype": torch.bfloat16, + "onload_device": "cuda", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} +pipe = QwenImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="transformer/diffusion_pytorch_model*.safetensors", **vram_config), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="text_encoder/model*.safetensors", **vram_config), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="vae/diffusion_pytorch_model.safetensors", **vram_config), + ], + tokenizer_config=ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="tokenizer/"), +) +prompt = "精致肖像,水下少女,蓝裙飘逸,发丝轻扬,光影透澈,气泡环绕,面容恬静,细节精致,梦幻唯美。" +image = pipe(prompt, seed=0, num_inference_steps=40) +image.save("image.jpg") +``` + +## FP8 量化 + +在 CPU Offload 的基础上,我们进一步启用 FP8 量化来减少显存需求,以下代码可以令模型参数以 FP8 精度存储在显存中,并在推理时临时转为 BF16 精度计算,显存占用 21G。但这种量化方案有微小的图像质量下降问题。 + +```python +from diffsynth.pipelines.qwen_image import QwenImagePipeline, ModelConfig +import torch + +vram_config = { + "offload_dtype": torch.float8_e4m3fn, + "offload_device": "cpu", + "onload_dtype": torch.float8_e4m3fn, + "onload_device": "cuda", + "preparing_dtype": torch.float8_e4m3fn, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} +pipe = QwenImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="transformer/diffusion_pytorch_model*.safetensors", **vram_config), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="text_encoder/model*.safetensors", **vram_config), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="vae/diffusion_pytorch_model.safetensors", **vram_config), + ], + tokenizer_config=ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="tokenizer/"), +) +prompt = "精致肖像,水下少女,蓝裙飘逸,发丝轻扬,光影透澈,气泡环绕,面容恬静,细节精致,梦幻唯美。" +image = pipe(prompt, seed=0, num_inference_steps=40) +image.save("image.jpg") +``` + +> Q: 为什么要在推理时临时转为 BF16 精度,而不是以 FP8 精度计算? +> +> A: FP8 的原生计算仅在 Hopper 架构的 GPU(例如 H20)支持,且计算误差很大,我们目前暂不开放 FP8 精度计算。目前的 FP8 量化仅能减少显存占用,不会提高计算速度。 + +## 动态显存管理 + +在 CPU Offload 中,我们对模型组件进行控制,事实上,我们支持做到 Layer 级别的 Offload,将一个模型拆分为多个 Layer,令一部分常驻显存,令一部分存储在内存中按需移至显存计算。这一功能需要模型开发者针对每个模型提供详细的显存管理方案,相关配置在 `diffsynth/configs/vram_management_module_maps.py` 中。 + +通过在 `Pipeline` 中增加 `vram_limit` 参数,框架可以自动感知设备的剩余显存并决定如何拆分模型到显存和内存中。`vram_limit` 越小,占用显存越少,速度越慢。 +* `vram_limit=None` 时,即默认状态,框架认为显存无限,动态显存管理是不启用的 +* `vram_limit=10` 时,框架会在显存占用超过 10G 之后限制模型,将超出的部分移至内存中存储。 +* `vram_limit=0` 时,框架会尽全力减少显存占用,所有模型参数都存储在内存中,仅在必要时移至显存计算 + +在显存不足以运行模型推理的情况下,框架会试图超出 `vram_limit` 的限制从而让模型推理运行下去,因此显存管理框架并不能总是保证占用的显存小于 `vram_limit`,我们建议将其设置为略小于实际可用显存的数值,例如 GPU 显存为 16G 时,设置为 `vram_limit=15.5`。`PyTorch` 中可用 `torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3)` 获取 GPU 的显存。 + +```python +from diffsynth.pipelines.qwen_image import QwenImagePipeline, ModelConfig +import torch + +vram_config = { + "offload_dtype": torch.float8_e4m3fn, + "offload_device": "cpu", + "onload_dtype": torch.float8_e4m3fn, + "onload_device": "cpu", + "preparing_dtype": torch.float8_e4m3fn, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} +pipe = QwenImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="transformer/diffusion_pytorch_model*.safetensors", **vram_config), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="text_encoder/model*.safetensors", **vram_config), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="vae/diffusion_pytorch_model.safetensors", **vram_config), + ], + tokenizer_config=ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="tokenizer/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) +prompt = "精致肖像,水下少女,蓝裙飘逸,发丝轻扬,光影透澈,气泡环绕,面容恬静,细节精致,梦幻唯美。" +image = pipe(prompt, seed=0, num_inference_steps=40) +image.save("image.jpg") +``` + +## Disk Offload + +在更为极端的情况下,当内存也不足以存储整个模型时,Disk Offload 功能可以让模型参数惰性加载,即,模型中的每个 Layer 仅在调用 forward 时才会从硬盘中读取相应的参数。启用这一功能时,我们建议使用高速的 SSD 硬盘。 + +Disk Offload 是极为特殊的显存管理方案,只支持 `.safetensors` 格式文件,不支持 `.bin`、`.pth`、`.ckpt` 等二进制文件,不支持带 Tensor reshape 的 [state dict converter](../Developer_Guide/Integrating_Your_Model.md#step-2-模型文件格式转换)。 + +```python +from diffsynth.pipelines.qwen_image import QwenImagePipeline, ModelConfig +import torch + +vram_config = { + "offload_dtype": "disk", + "offload_device": "disk", + "onload_dtype": "disk", + "onload_device": "disk", + "preparing_dtype": torch.float8_e4m3fn, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} +pipe = QwenImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="transformer/diffusion_pytorch_model*.safetensors", **vram_config), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="text_encoder/model*.safetensors", **vram_config), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="vae/diffusion_pytorch_model.safetensors", **vram_config), + ], + tokenizer_config=ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="tokenizer/"), + vram_limit=10, +) +prompt = "精致肖像,水下少女,蓝裙飘逸,发丝轻扬,光影透澈,气泡环绕,面容恬静,细节精致,梦幻唯美。" +image = pipe(prompt, seed=0, num_inference_steps=40) +image.save("image.jpg") +``` + +## 更多使用方式 + +`vram_config` 中的信息可自行填写,例如不开 FP8 量化的 Disk Offload: + +```python +vram_config = { + "offload_dtype": "disk", + "offload_device": "disk", + "onload_dtype": "disk", + "onload_device": "disk", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} +``` + +具体地,显存管理模块会将模型的 Layer 分为以下四种状态: + +* Offload:短期内不调用这个模型,这个状态由 `Pipeline` 控制切换 +* Onload:接下来随时要调用这个模型,这个状态由 `Pipeline` 控制切换 +* Preparing:Onload 和 Computation 的中间状态,在显存允许的前提下的暂存状态,这个状态由显存管理机制控制切换,当且仅当【vram_limit 设置为无限制】或【vram_limit 已设置且有空余显存】时会进入这一状态 +* Computation:模型正在计算过程中,这个状态由显存管理机制控制切换,仅在 `forward` 中临时进入 + +如果你是模型开发者,希望自行控制某个模型的显存管理粒度,请参考[启用显存管理](../Developer_Guide/Enabling_VRAM_management.md)。 + +显存管理可以与模型量化同时启用,模型量化会带来精度损失,但可以让更多模型参数保存在显存中,从而避免 Offload 到内存和硬盘中带来的速度损失,请参考[模型量化](./Quantization.md)。 + +## 选择最佳推理方案 + +```mermaid +graph TD; + A[显存是否足够?] -->|是| B[使用基础推理] + A -->|否| C[是否允许精度损失?] + C -->|是| D[使用模型量化] + C -->|否| E[内存是否足够?] + D --> E + E -->|是| F[使用动态显存管理] + E -->|否| G[使用 Disk Offload] +``` diff --git a/docs/zh/QA.md b/docs/zh/QA.md new file mode 100644 index 0000000000000000000000000000000000000000..9ed9274ef048fb9596c957d24482af911081c7cd --- /dev/null +++ b/docs/zh/QA.md @@ -0,0 +1,39 @@ +# 常见问题 + +## 为什么训练框架不支持 batch size > 1? + +* **更大的 batch size 已无法实现显著加速**:由于 flash attention 等加速技术已经充分提高了 GPU 的利用率,因此更大的 batch size 只会带来更大的显存占用,无法带来显著加速。在 Stable Diffusion 1.5 这类小模型上的经验已不再适用于最新的大模型。 +* **更大的 batch size 可以用其他方案实现**:多 GPU 训练和 Gradient Accumulation 都可以在数学意义上等价地实现更大的 batch size。 +* **更大的 batch size 与框架的通用性设计相悖**:我们希望构建通用的训练框架,大量模型无法适配更大的 batch size,例如不同长度的文本编码、不同分辨率的图像等,都是无法合并为更大的 batch 的。 + +## 为什么不删除某些模型中的冗余参数? + +在部分模型中,模型存在冗余参数,例如 Qwen-Image 的 DiT 模型最后一层的文本部分,这部分参数不会参与任何计算,这是模型开发者留下的小 bug。直接将其设置为可训练时还会在多 GPU 训练中出现报错。 + +为了与开源社区中其他模型保持兼容性,我们决定保留这些参数。这些冗余参数在多 GPU 训练中可以通过 `--find_unused_parameters` 参数避免报错。 + +## 为什么 FP8 量化没有任何加速效果? + +原生 FP8 计算需要依赖 Hopper 架构的 GPU,同时在计算精度上有较大误差,目前仍然是不成熟的技术,因此本项目不支持原生 FP8 计算。 + +显存管理中的 FP8 计算是指将模型参数以 FP8 精度存储在内存或显存中,在需要计算时临时转换为其他精度,因此仅能减少显存占用,没有加速效果。 + +## 为什么训练框架不支持原生 FP8 精度训练? + +即使硬件条件允许,我们目前也没有任何支持原生 FP8 精度训练的规划。 + +* 目前原生 FP8 精度训练的主要挑战是梯度爆炸导致的精度溢出,为了保证训练的稳定性,需针对性地重新设计模型结构,然而目前还没有任何模型开发者愿意这么做。 +* 此外,使用原生 FP8 精度训练的模型,在推理时若没有 Hopper 架构 GPU,则只能以 BF16 精度进行计算,理论上其生成效果反而不如 FP8。 + +因此,原生 FP8 精度训练技术是极不成熟的,我们静观开源社区的技术发展。 + +## 如何在推理时动态加载 LoRA 模型? + +我们支持 LoRA 模型的两种加载方式,详见[LoRA 加载](./Pipeline_Usage/Model_Inference.md#加载-lora): + +* 冷加载:当基础模型未开启[显存管理](./Pipeline_Usage/VRAM_management.md)时,LoRA 会融合进基础模型权重,此时推理速度没有变化,LoRA 加载后无法卸载。 +* 热加载:当基础模型开启[显存管理](./Pipeline_Usage/VRAM_management.md)时,LoRA 不会融合进基础模型权重,此时推理速度会变慢,LoRA 加载后可通过 `pipe.clear_lora()` 卸载。 + +## 如何减少训练所需的显存? + +框架支持多种方式减少训练所需的显存,包括 Gradient Checkpointing、DeepSpeed、FP8、两阶段拆分训练、CPU Offload,请参考[低显存训练](./Pipeline_Usage/Model_Training.md#低显存训练)。 diff --git a/docs/zh/README.md b/docs/zh/README.md new file mode 100644 index 0000000000000000000000000000000000000000..2f31b88c484eed56c35d7170b5d2d54950fe6759 --- /dev/null +++ b/docs/zh/README.md @@ -0,0 +1,125 @@ +# DiffSynth-Studio 文档 + +欢迎来到 Diffusion 模型的魔法世界!`DiffSynth-Studio` 是由[魔搭社区](https://www.modelscope.cn/)团队开发和维护的开源 Diffusion 模型引擎。我们期望构建一个通用的 Diffusion 模型框架,以框架建设孵化技术创新,凝聚开源社区的力量,探索生成式模型技术的边界! + +
+ +文档阅读导引 + +```mermaid +graph LR; + 我想要使用模型进行推理和训练-->sec1[Section 1: 上手使用]; + 我想要使用模型进行推理和训练-->sec2[Section 2: 模型详解]; + 我想要使用模型进行推理和训练-->sec3[Section 3: 训练框架]; + 我想要基于此框架进行二次开发-->sec3[Section 3: 训练框架]; + 我想要基于此框架进行二次开发-->sec4[Section 4: 模型接入]; + 我想要基于此框架进行二次开发-->sec5[Section 5: API 参考]; + 我想要基于本项目探索新的技术-->sec4[Section 4: 模型接入]; + 我想要基于本项目探索新的技术-->sec5[Section 5: API 参考]; + 我想要基于本项目探索新的技术-->sec6[Section 6: Diffusion Templates] + 我想要基于本项目探索新的技术-->sec7[Section 7: 学术导引]; + 我遇到了问题-->sec8[Section 8: 常见问题]; +``` + +
+ +## Section 1: 上手使用 + +本节介绍 `DiffSynth-Studio` 的基本使用方式,包括如何启用显存管理从而在极低显存的 GPU 上进行推理,以及如何训练任意基础模型、LoRA、ControlNet 等模型。 + +* [安装依赖](./Pipeline_Usage/Setup.md) +* [模型推理](./Pipeline_Usage/Model_Inference.md) +* [加速推理](./Pipeline_Usage/Accelerated_Inference.md) +* [显存管理](./Pipeline_Usage/VRAM_management.md) +* [模型量化](./Pipeline_Usage/Quantization.md) +* [模型训练](./Pipeline_Usage/Model_Training.md) +* [环境变量](./Pipeline_Usage/Environment_Variables.md) +* [GPU/NPU 支持](./Pipeline_Usage/GPU_support.md) +* [推理 WebUI](./Pipeline_Usage/Inference_WebUI.md) + +## Section 2: 模型详解 + +本节介绍 `DiffSynth-Studio` 所支持的 Diffusion 模型,部分模型 Pipeline 具备可控生成、并行加速等特色功能。 + +* [FLUX.1](./Model_Details/FLUX.md) +* [Wan](./Model_Details/Wan.md) +* [Qwen-Image](./Model_Details/Qwen-Image.md) +* [Qwen-Video-Edit](./Model_Details/Qwen-Video-Edit.md) +* [FLUX.2](./Model_Details/FLUX2.md) +* [Z-Image](./Model_Details/Z-Image.md) +* [Anima](./Model_Details/Anima.md) +* [LTX-2](./Model_Details/LTX-2.md) +* [ERNIE-Image](./Model_Details/ERNIE-Image.md) +* [JoyAI-Image](./Model_Details/JoyAI-Image.md) +* [ACE-Step](./Model_Details/ACE-Step.md) +* [HiDream-O1-Image](./Model_Details/HiDream-O1-Image.md) +* [Stable Diffusion](./Model_Details/Stable-Diffusion.md) +* [Stable Diffusion XL](./Model_Details/Stable-Diffusion-XL.md) +* [图像质量评估指标](./Model_Details/Image-Quality-Metrics.md) +* [Ideogram 4](./Model_Details/Ideogram-4.md) +* [Krea-2](./Model_Details/Krea-2.md) +* [Boogu-Image](./Model_Details/Boogu-Image.md) +* [LingBot-Video](./Model_Details/LingBot-Video.md) +* [MiniMax-H3](./Model_Details/MiniMax-H3.md) +* [MiniMax-Music3](./Model_Details/MiniMax-Music3.md) + +## Section 3: 训练框架 + +本节介绍 `DiffSynth-Studio` 中训练框架的设计思路,帮助开发者理解 Diffusion 模型训练算法的原理。 + +* [Diffusion 模型基本原理](./Training/Understanding_Diffusion_models.md) +* [标准监督训练](./Training/Supervised_Fine_Tuning.md) +* [在训练中启用 FP8 精度](./Training/FP8_Precision.md) +* [端到端的蒸馏加速训练](./Training/Direct_Distill.md) +* [两阶段拆分训练](./Training/Split_Training.md) +* [差分 LoRA 训练](./Training/Differential_LoRA.md) +* [启用 DeepSpeed](./Training/DeepSpeed.md) +* [Offload Training](./Training/Offload_Training.md) + +## Section 4: 模型接入 + +本节介绍如何将模型接入 `DiffSynth-Studio` 从而使用框架基础功能,帮助开发者为本项目提供新模型的支持,或进行私有化模型的推理和训练。 + +* [接入模型结构](./Developer_Guide/Integrating_Your_Model.md) +* [接入 Pipeline](./Developer_Guide/Building_a_Pipeline.md) +* [接入细粒度显存管理](./Developer_Guide/Enabling_VRAM_management.md) +* [接入模型训练](./Developer_Guide/Training_Diffusion_Models.md) +* [接入量化后端](./Developer_Guide/Integrating_Quantization_Backend.md) + +> 我们开源了 [**DiffSynth-Studio Model Integration Skills**](https://www.modelscope.cn/collections/DiffSynth-Studio/DiffSynth-Studio-Model-Integration-Skills)。这是一套可组合的 Agent Skill 合集,将外部扩散模型(图像 / 视频 / 音频)接入 DiffSynth-Studio 的全流程自动化。它沉淀并定义了 DiffSynth-Studio 的模型接入规范,将代码库分析、模型代码接入、Pipeline 设计、低显存管理与训练支持等最佳实践固化为可复用的标准流程。遵循这套规范,能显著降低接入门槛、减少反复调试,大幅提升新模型的接入效率。建议从 [diffsynth-integrator](https://www.modelscope.cn/skills/DiffSynth-Studio/diffsynth-integrator) 的[使用示例](https://www.modelscope.cn/skills/DiffSynth-Studio/diffsynth-integrator/file/view/master/example.md?status=1)开始,快速上手、加速模型接入。 + + +## Section 5: API 参考 + +本节介绍 `DiffSynth-Studio` 中的独立核心模块 `diffsynth.core`,介绍内部的功能是如何设计和运作的,开发者如有需要,可将其中的功能模块用于其他代码库的开发中。 + +* [`diffsynth.core.attention`](./API_Reference/core/attention.md): 注意力机制实现 +* [`diffsynth.core.data`](./API_Reference/core/data.md): 数据处理算子与通用数据集 +* [`diffsynth.core.gradient`](./API_Reference/core/gradient.md): 梯度检查点 +* [`diffsynth.core.loader`](./API_Reference/core/loader.md): 模型下载与加载 +* [`diffsynth.core.quant`](./API_Reference/core/quant.md): 模型量化 +* [`diffsynth.core.vram`](./API_Reference/core/vram.md): 显存管理 + +## Section 6: Diffusion Templates + +本节介绍 Diffusion 模型可控生成插件框架 Diffusion Templates,讲解 Diffusion Templates 框架的运行机制,展示如何使用 Template 模型进行推理和训练。 + +* [Diffusion Templates 简介](./Diffusion_Templates/Introducing_Diffusion_Templates.md) +* [Diffusion Templates 架构详解](./Diffusion_Templates/Understanding_Diffusion_Templates.md) +* [Template 模型推理](./Diffusion_Templates/Template_Model_Inference.md) +* [Template 模型训练](./Diffusion_Templates/Template_Model_Training.md) + +## Section 7: 学术导引 + +本节介绍如何利用 `DiffSynth-Studio` 训练新的模型,帮助科研工作者探索新的模型技术。 + +* [从零开始训练模型](./Research_Tutorial/train_from_scratch.md) +* [推理改进优化技术](./Research_Tutorial/inference_time_scaling.md) +* [设计可控生成模型](./Research_Tutorial/controllable_models.md) +* 创建新的训练范式【coming soon】 + +## Section 8: 常见问题 + +本节总结了开发者常见的问题,如果你在使用和开发中遇到了问题,请参考本节内容,如果仍无法解决,请到 GitHub 上给我们提 issue。 + +* [常见问题](./QA.md) diff --git a/docs/zh/Research_Tutorial/controllable_models.ipynb b/docs/zh/Research_Tutorial/controllable_models.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..8203b253aaeddf7bb989732566f6c72cb8349ab4 --- /dev/null +++ b/docs/zh/Research_Tutorial/controllable_models.ipynb @@ -0,0 +1,861 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "a205ddd9", + "metadata": {}, + "source": [ + "# 魔搭社区 AIGC 系列课程 - 可控生成技术\n", + "\n", + "本实验以 **Diffusion-Templates** 为框架,系统介绍图像生成模型的多种可控生成技术,并演示如何自行训练一个可控生成模块。\n", + "\n", + "相关资料:\n", + "\n", + "* 开源代码:[DiffSynth-Studio](https://github.com/modelscope/DiffSynth-Studio)\n", + "* 技术报告:[arXiv](https://arxiv.org/abs/2604.24351)\n", + "* 项目主页:[GitHub](https://modelscope.github.io/diffusion-templates-web/)\n", + "* 文档参考:[English Version](https://diffsynth-studio-doc.readthedocs.io/en/latest/Diffusion_Templates/Introducing_Diffusion_Templates.html)、[中文版](https://diffsynth-studio-doc.readthedocs.io/zh-cn/latest/Diffusion_Templates/Introducing_Diffusion_Templates.html)\n", + "* 在线体验:[魔搭社区创空间](https://modelscope.cn/studios/DiffSynth-Studio/Diffusion-Templates)\n", + "* 模型集:[ModelScope](https://modelscope.cn/collections/DiffSynth-Studio/KleinBase4B-Templates)、[ModelScope 国际站](https://modelscope.ai/collections/DiffSynth-Studio/KleinBase4B-Templates)、[HuggingFace](https://huggingface.co/collections/DiffSynth-Studio/kleinbase4b-templates)\n", + "* 数据集:[ModelScope](https://modelscope.cn/collections/DiffSynth-Studio/ImagePulseV2)、[ModelScope 国际站](https://modelscope.cn/collections/DiffSynth-Studio/ImagePulseV2)、[HuggingFace](https://huggingface.co/collections/DiffSynth-Studio/imagepulsev2)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c556f6de", + "metadata": {}, + "outputs": [], + "source": [ + "!pip install diffsynth==2.0.15 transformers==5.8.1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "acbd35c0", + "metadata": {}, + "outputs": [], + "source": [ + "from diffsynth.diffusion.template import TemplatePipeline\n", + "from diffsynth.pipelines.flux2_image import Flux2ImagePipeline, ModelConfig\n", + "import torch\n", + "from modelscope import dataset_snapshot_download, snapshot_download\n", + "from PIL import Image\n", + "import numpy as np\n", + "\n", + "vram_config = {\n", + " \"offload_dtype\": \"disk\",\n", + " \"offload_device\": \"disk\",\n", + " \"onload_dtype\": torch.float8_e4m3fn,\n", + " \"onload_device\": \"cpu\",\n", + " \"preparing_dtype\": torch.float8_e4m3fn,\n", + " \"preparing_device\": \"cuda\",\n", + " \"computation_dtype\": torch.bfloat16,\n", + " \"computation_device\": \"cuda\",\n", + "}\n", + "\n", + "def show_images(images, resolution):\n", + " images = [i.resize((resolution, resolution)).convert(\"RGB\") for i in images]\n", + " images = [np.array(i) for i in images]\n", + " images = np.concat(images, axis=1)\n", + " images = Image.fromarray(images)\n", + " return images" + ] + }, + { + "cell_type": "markdown", + "id": "d58a54f2", + "metadata": {}, + "source": [ + "首先,加载基础模型 [black-forest-labs/FLUX.2-klein-base-4B](https://modelscope.cn/models/black-forest-labs/FLUX.2-klein-base-4B)。这是一个参数量为 4B 的图像生成模型,本实验后续所有可控生成模块都会挂载到这个基础模型之上。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9bb3f260", + "metadata": {}, + "outputs": [], + "source": [ + "pipe = Flux2ImagePipeline.from_pretrained(\n", + " torch_dtype=torch.bfloat16,\n", + " device=\"cuda\",\n", + " model_configs=[\n", + " ModelConfig(model_id=\"black-forest-labs/FLUX.2-klein-base-4B\", origin_file_pattern=\"transformer/*.safetensors\", **vram_config),\n", + " ModelConfig(model_id=\"black-forest-labs/FLUX.2-klein-4B\", origin_file_pattern=\"text_encoder/*.safetensors\", **vram_config),\n", + " ModelConfig(model_id=\"black-forest-labs/FLUX.2-klein-4B\", origin_file_pattern=\"vae/diffusion_pytorch_model.safetensors\"),\n", + " ],\n", + " tokenizer_config=ModelConfig(model_id=\"black-forest-labs/FLUX.2-klein-4B\", origin_file_pattern=\"tokenizer/\"),\n", + " vram_limit=torch.cuda.mem_get_info(\"cuda\")[1] / (1024 ** 3) - 0.5,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "2b0ed288", + "metadata": {}, + "source": [ + "## 图像结构控制\n", + "\n", + "[ControlNet](https://arxiv.org/abs/2302.05543) 是最早的一批 Diffusion 可控生成技术,可用**深度图、边缘图、姿态图**等结构性条件对生成画面进行**逐像素级**的控制。\n", + "\n", + "以 Template 格式加载 [DiffSynth-Studio/Template-KleinBase4B-ControlNet](https://modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-ControlNet),即可在保留输入结构的前提下,用不同的提示词生成不同风格的画面。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "96c1225f", + "metadata": {}, + "outputs": [], + "source": [ + "template = TemplatePipeline.from_pretrained(\n", + " torch_dtype=torch.bfloat16,\n", + " device=\"cuda\",\n", + " model_configs=[ModelConfig(model_id=\"DiffSynth-Studio/Template-KleinBase4B-ControlNet\")],\n", + " lazy_loading=True,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b906f029", + "metadata": {}, + "outputs": [], + "source": [ + "dataset_snapshot_download(\n", + " \"DiffSynth-Studio/examples_in_diffsynth\",\n", + " allow_file_pattern=[\"templates/*\"],\n", + " local_dir=\"data/examples\",\n", + ")\n", + "image = template(\n", + " pipe,\n", + " prompt=\"A cat is sitting on a stone, bathed in bright sunshine.\",\n", + " seed=0, cfg_scale=4, num_inference_steps=50,\n", + " template_inputs = [{\n", + " \"image\": Image.open(\"data/examples/templates/image_depth.jpg\"),\n", + " \"prompt\": \"A cat is sitting on a stone, bathed in bright sunshine.\",\n", + " }],\n", + " negative_template_inputs = [{\n", + " \"image\": Image.open(\"data/examples/templates/image_depth.jpg\"),\n", + " \"prompt\": \"\",\n", + " }],\n", + ")\n", + "image.save(\"image_ControlNet_sunshine.jpg\")\n", + "image = template(\n", + " pipe,\n", + " prompt=\"A cat is sitting on a stone, surrounded by colorful magical particles.\",\n", + " seed=0, cfg_scale=4, num_inference_steps=50,\n", + " template_inputs = [{\n", + " \"image\": Image.open(\"data/examples/templates/image_depth.jpg\"),\n", + " \"prompt\": \"A cat is sitting on a stone, surrounded by colorful magical particles.\",\n", + " }],\n", + " negative_template_inputs = [{\n", + " \"image\": Image.open(\"data/examples/templates/image_depth.jpg\"),\n", + " \"prompt\": \"\",\n", + " }],\n", + ")\n", + "image.save(\"image_ControlNet_magic.jpg\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "af45ce68", + "metadata": {}, + "outputs": [], + "source": [ + "show_images([\n", + " Image.open(\"data/examples/templates/image_depth.jpg\"),\n", + " Image.open(\"image_ControlNet_sunshine.jpg\"),\n", + " Image.open(\"image_ControlNet_magic.jpg\"),\n", + "], resolution=256)" + ] + }, + { + "cell_type": "markdown", + "id": "1bb8d720", + "metadata": {}, + "source": [ + "## 数值属性控制\n", + "\n", + "[AttriCtrl](https://arxiv.org/abs/2508.02151) 是一类**数值型**可控生成模型,能够将连续的数值属性作为控制条件注入生成过程。\n", + "\n", + "运行以下代码,加载 [DiffSynth-Studio/Template-KleinBase4B-SoftRGB](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-SoftRGB),通过输入 R/G/B 数值精确控制画面的整体色调。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3352ae2f", + "metadata": {}, + "outputs": [], + "source": [ + "template = TemplatePipeline.from_pretrained(\n", + " torch_dtype=torch.bfloat16,\n", + " device=\"cuda\",\n", + " model_configs=[ModelConfig(model_id=\"DiffSynth-Studio/Template-KleinBase4B-SoftRGB\")],\n", + " lazy_loading=True,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3b6a871c", + "metadata": {}, + "outputs": [], + "source": [ + "image = template(\n", + " pipe,\n", + " prompt=\"A cat is sitting on a stone.\",\n", + " seed=0, cfg_scale=4, num_inference_steps=50,\n", + " template_inputs = [{\"R\": 128/255, \"G\": 128/255, \"B\": 128/255}],\n", + ")\n", + "image.save(\"image_rgb_normal.jpg\")\n", + "image = template(\n", + " pipe,\n", + " prompt=\"A cat is sitting on a stone.\",\n", + " seed=0, cfg_scale=4, num_inference_steps=50,\n", + " template_inputs = [{\"R\": 208/255, \"G\": 185/255, \"B\": 138/255}],\n", + ")\n", + "image.save(\"image_rgb_warm.jpg\")\n", + "image = template(\n", + " pipe,\n", + " prompt=\"A cat is sitting on a stone.\",\n", + " seed=0, cfg_scale=4, num_inference_steps=50,\n", + " template_inputs = [{\"R\": 94/255, \"G\": 163/255, \"B\": 174/255}],\n", + ")\n", + "image.save(\"image_rgb_cold.jpg\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "00f4174f", + "metadata": {}, + "outputs": [], + "source": [ + "show_images([\n", + " Image.open(\"image_rgb_normal.jpg\"),\n", + " Image.open(\"image_rgb_warm.jpg\"),\n", + " Image.open(\"image_rgb_cold.jpg\"),\n", + "], resolution=256)" + ] + }, + { + "cell_type": "markdown", + "id": "ebf205dd", + "metadata": {}, + "source": [ + "## 图像编辑\n", + "\n", + "图像编辑模型是一类**通用性较强**的可控生成模型:给定一张原图和一段编辑指令,即可对原图进行局部或整体修改。\n", + "\n", + "运行以下代码,加载 [DiffSynth-Studio/Template-KleinBase4B-Edit](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Edit)。该模型通过 **KV-Cache** 复用输入图像的注意力键值,从而快速完成编辑,推理速度较快。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "730bb8bf", + "metadata": {}, + "outputs": [], + "source": [ + "template = TemplatePipeline.from_pretrained(\n", + " torch_dtype=torch.bfloat16,\n", + " device=\"cuda\",\n", + " model_configs=[ModelConfig(model_id=\"DiffSynth-Studio/Template-KleinBase4B-Edit\")],\n", + " lazy_loading=True,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2f8da7ab", + "metadata": {}, + "outputs": [], + "source": [ + "dataset_snapshot_download(\n", + " \"DiffSynth-Studio/examples_in_diffsynth\",\n", + " allow_file_pattern=[\"templates/*\"],\n", + " local_dir=\"data/examples\",\n", + ")\n", + "image = template(\n", + " pipe,\n", + " prompt=\"Put a hat on this cat.\",\n", + " seed=0, cfg_scale=4, num_inference_steps=50,\n", + " template_inputs = [{\n", + " \"image\": Image.open(\"data/examples/templates/image_reference.jpg\"),\n", + " \"prompt\": \"Put a hat on this cat.\",\n", + " }],\n", + " negative_template_inputs = [{\n", + " \"image\": Image.open(\"data/examples/templates/image_reference.jpg\"),\n", + " \"prompt\": \"\",\n", + " }],\n", + ")\n", + "image.save(\"image_Edit_hat.jpg\")\n", + "image = template(\n", + " pipe,\n", + " prompt=\"Make the cat turn its head to look to the right.\",\n", + " seed=0, cfg_scale=4, num_inference_steps=50,\n", + " template_inputs = [{\n", + " \"image\": Image.open(\"data/examples/templates/image_reference.jpg\"),\n", + " \"prompt\": \"Make the cat turn its head to look to the right.\",\n", + " }],\n", + " negative_template_inputs = [{\n", + " \"image\": Image.open(\"data/examples/templates/image_reference.jpg\"),\n", + " \"prompt\": \"\",\n", + " }],\n", + ")\n", + "image.save(\"image_Edit_head.jpg\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "16fa68bb", + "metadata": {}, + "outputs": [], + "source": [ + "show_images([\n", + " Image.open(\"data/examples/templates/image_reference.jpg\"),\n", + " Image.open(\"image_Edit_hat.jpg\"),\n", + " Image.open(\"image_Edit_head.jpg\"),\n", + "], resolution=256)" + ] + }, + { + "cell_type": "markdown", + "id": "8cd453b9", + "metadata": {}, + "source": [ + "## 风格控制\n", + "\n", + "实现图像风格控制的最直接方式,是训练一个风格 [LoRA](https://arxiv.org/abs/2106.09685)——但每种风格都需要单独训练,成本较高。为此我们训练了一个特殊的 [Image-to-LoRA](https://arxiv.org/abs/2606.13809) 模型,它可以**根据输入的参考图像即时生成一份 LoRA 权重**,免去了传统的风格训练过程。\n", + "\n", + "运行以下代码,加载 [DiffSynth-Studio/KleinBase4B-i2L-v2](https://www.modelscope.cn/models/DiffSynth-Studio/KleinBase4B-i2L-v2),用参考图像动态生成 LoRA,从而控制画面风格。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "51ae1734", + "metadata": {}, + "outputs": [], + "source": [ + "from modelscope import snapshot_download\n", + "\n", + "template = TemplatePipeline.from_pretrained(\n", + " torch_dtype=torch.bfloat16,\n", + " device=\"cuda\",\n", + " model_configs=[ModelConfig(model_id=\"DiffSynth-Studio/KleinBase4B-i2L-v2\")],\n", + " lazy_loading=True,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5fcc038d", + "metadata": {}, + "outputs": [], + "source": [ + "snapshot_download(\"DiffSynth-Studio/KleinBase4B-i2L-v2\", allow_file_pattern=\"assets/*\", local_dir=\"data\")\n", + "images = [Image.open(f\"data/assets/image_1_{i}.jpg\") for i in range(4)]\n", + "image = template(\n", + " pipe,\n", + " prompt=\"A cat is sitting on a stone\",\n", + " seed=42, cfg_scale=4, num_inference_steps=50,\n", + " template_inputs = [{\"image\": images}],\n", + " negative_template_inputs = [{\"image\": [Image.fromarray(np.zeros_like(np.array(i)) + 128) for i in images]}],\n", + ")\n", + "image.save(\"image_KleinBase4B-i2L-v2_1.jpg\")\n", + "images = [Image.open(f\"data/assets/image_3_{i}.jpg\") for i in range(4)]\n", + "image = template(\n", + " pipe,\n", + " prompt=\"A cat is sitting on a stone\",\n", + " seed=42, cfg_scale=4, num_inference_steps=50,\n", + " template_inputs = [{\"image\": images}],\n", + " negative_template_inputs = [{\"image\": [Image.fromarray(np.zeros_like(np.array(i)) + 128) for i in images]}],\n", + ")\n", + "image.save(\"image_KleinBase4B-i2L-v2_2.jpg\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b4a6609b", + "metadata": {}, + "outputs": [], + "source": [ + "show_images([\n", + " Image.open(\"data/assets/image_1_2.jpg\"),\n", + " Image.open(\"image_KleinBase4B-i2L-v2_1.jpg\"),\n", + " Image.open(\"data/assets/image_3_0.jpg\"),\n", + " Image.open(\"image_KleinBase4B-i2L-v2_2.jpg\"),\n", + "], resolution=256)" + ] + }, + { + "cell_type": "markdown", + "id": "7918117f", + "metadata": {}, + "source": [ + "## 训练可控生成模型\n", + "\n", + "**Diffusion-Templates 框架允许开发者训练任意结构的可控生成模型**——只要给定模型定义、数据处理逻辑和数据集,即可接入统一的训练流程。下面我们从零训练一个**亮度控制模型**,让画面按指定的亮度数值生成。\n", + "\n", + "第一步,编写模型结构代码(包含数值编码器、KV-Cache 生成主干和数据标注器):" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c25c94f0", + "metadata": {}, + "outputs": [], + "source": [ + "code = \"\"\"\n", + "import torch, math, os\n", + "from PIL import Image\n", + "import numpy as np\n", + "\n", + "\n", + "class SingleValueEncoder(torch.nn.Module):\n", + " def __init__(self, dim_in=256, dim_out=4096, length=32):\n", + " super().__init__()\n", + " self.length = length\n", + " self.prefer_value_embedder = torch.nn.Sequential(torch.nn.Linear(dim_in, dim_out), torch.nn.SiLU(), torch.nn.Linear(dim_out, dim_out))\n", + " self.positional_embedding = torch.nn.Parameter(torch.randn(self.length, dim_out))\n", + "\n", + " def get_timestep_embedding(self, timesteps, embedding_dim, max_period=10000):\n", + " half_dim = embedding_dim // 2\n", + " exponent = -math.log(max_period) * torch.arange(0, half_dim, dtype=torch.float32, device=timesteps.device) / half_dim\n", + " emb = timesteps[:, None].float() * torch.exp(exponent)[None, :]\n", + " emb = torch.cat([torch.cos(emb), torch.sin(emb)], dim=-1)\n", + " return emb\n", + "\n", + " def forward(self, value, dtype):\n", + " emb = self.get_timestep_embedding(value * 1000, 256).to(dtype)\n", + " emb = self.prefer_value_embedder(emb).squeeze(0)\n", + " base_embeddings = emb.expand(self.length, -1)\n", + " positional_embedding = self.positional_embedding.to(dtype=base_embeddings.dtype, device=base_embeddings.device)\n", + " learned_embeddings = base_embeddings + positional_embedding\n", + " return learned_embeddings\n", + "\n", + "\n", + "# 主干模型结构(将输入的数值转换为 KV-Cache 向量)\n", + "class ValueFormatModel(torch.nn.Module):\n", + " def __init__(self, num_double_blocks=5, num_single_blocks=20, dim=3072, num_heads=24, length=512):\n", + " super().__init__()\n", + " self.block_names = [f\"double_{i}\" for i in range(num_double_blocks)] + [f\"single_{i}\" for i in range(num_single_blocks)]\n", + " self.proj_k = torch.nn.ModuleDict({block_name: SingleValueEncoder(dim_out=dim, length=length) for block_name in self.block_names})\n", + " self.proj_v = torch.nn.ModuleDict({block_name: SingleValueEncoder(dim_out=dim, length=length) for block_name in self.block_names})\n", + " self.num_heads = num_heads\n", + " self.length = length\n", + "\n", + " @torch.no_grad()\n", + " def process_inputs(self, pipe, scale, **kwargs):\n", + " return {\"value\": torch.Tensor([scale]).to(dtype=pipe.torch_dtype, device=pipe.device)}\n", + "\n", + " def forward(self, value, **kwargs):\n", + " kv_cache = {}\n", + " for block_name in self.block_names:\n", + " k = self.proj_k[block_name](value, value.dtype)\n", + " k = k.view(1, self.length, self.num_heads, -1)\n", + " v = self.proj_v[block_name](value, value.dtype)\n", + " v = v.view(1, self.length, self.num_heads, -1)\n", + " kv_cache[block_name] = (k, v)\n", + " return {\"kv_cache\": kv_cache}\n", + "\n", + "\n", + "# 将图像数据转换为模型输入(根据图像中的 RGB 数值计算亮度)\n", + "class DataAnnotator(torch.nn.Module):\n", + " def __init__(self):\n", + " pass\n", + "\n", + " def __call__(self, image, **kwargs):\n", + " image = Image.open(image)\n", + " image = np.array(image)\n", + " return {\"scale\": image.astype(np.float32).mean() / 255}\n", + "\n", + "\n", + "TEMPLATE_MODEL = ValueFormatModel\n", + "TEMPLATE_MODEL_PATH = \"model.safetensors\" if \"model.safetensors\" in os.listdir(os.path.dirname(__file__)) else None\n", + "TEMPLATE_DATA_PROCESSOR = DataAnnotator\n", + "\"\"\"\n", + "\n", + "import os\n", + "\n", + "os.makedirs(\"models/template_brightness\", exist_ok=True)\n", + "with open(\"models/template_brightness/model.py\", \"w\", encoding=\"utf-8\") as f:\n", + " f.write(code.strip())" + ] + }, + { + "cell_type": "markdown", + "id": "9105dffc", + "metadata": {}, + "source": [ + "第二步,下载并预处理数据集,同时生成训练所需的 metadata:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "94557ebb", + "metadata": {}, + "outputs": [], + "source": [ + "import json, os\n", + "from modelscope import dataset_snapshot_download\n", + "\n", + "# 下载数据集\n", + "dataset_snapshot_download(\n", + " \"DiffSynth-Studio/ImagePulseV2-TextImage\",\n", + " local_dir=\"data/ImagePulseV2-TextImage\",\n", + " allow_file_pattern=\"data/1770381050168240056.tar.gz\"\n", + ")\n", + "\n", + "# 解压数据集\n", + "os.makedirs(\"data/dataset\", exist_ok=True)\n", + "os.system(\"tar zxvf data/ImagePulseV2-TextImage/data/1770381050168240056.tar.gz -C data/dataset\")\n", + "\n", + "# 生成数据集 metadata\n", + "dataset_path = \"data/dataset/1770381050168240056\"\n", + "metadata = []\n", + "for file_name in os.listdir(dataset_path):\n", + " if file_name.endswith(\".json\"):\n", + " with open(os.path.join(dataset_path, file_name), \"r\") as f:\n", + " data = json.load(f)\n", + " data[\"template_inputs\"] = {\"image\": os.path.join(dataset_path, data[\"image\"])}\n", + " metadata.append(data)\n", + "with open(\"data/dataset/metadata.json\", \"w\") as f:\n", + " json.dump(metadata, f, indent=4, ensure_ascii=False)" + ] + }, + { + "cell_type": "markdown", + "id": "d48dd079", + "metadata": {}, + "source": [ + "第三步,启动训练:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "49c3d4fb", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "# 训练脚本\n", + "code = \"\"\"\n", + "import torch, os, argparse, accelerate\n", + "from diffsynth.core import UnifiedDataset\n", + "from diffsynth.pipelines.flux2_image import Flux2ImagePipeline, ModelConfig\n", + "from diffsynth.diffusion import *\n", + "os.environ[\"TOKENIZERS_PARALLELISM\"] = \"false\"\n", + "\n", + "\n", + "class Flux2ImageTrainingModule(DiffusionTrainingModule):\n", + " def __init__(\n", + " self,\n", + " model_paths=None, model_id_with_origin_paths=None,\n", + " tokenizer_path=None,\n", + " trainable_models=None,\n", + " lora_base_model=None, lora_target_modules=\"\", lora_rank=32, lora_checkpoint=None,\n", + " preset_lora_path=None, preset_lora_model=None,\n", + " use_gradient_checkpointing=True,\n", + " use_gradient_checkpointing_offload=False,\n", + " extra_inputs=None,\n", + " fp8_models=None,\n", + " offload_models=None,\n", + " template_model_id_or_path=None,\n", + " resume_from_checkpoint=None, remove_prefix_in_ckpt=None,\n", + " enable_lora_hot_loading=False,\n", + " device=\"cpu\",\n", + " task=\"sft\",\n", + " ):\n", + " super().__init__()\n", + " # Load models\n", + " model_configs = self.parse_model_configs(model_paths, model_id_with_origin_paths, fp8_models=fp8_models, offload_models=offload_models, device=device)\n", + " tokenizer_config = self.parse_path_or_model_id(tokenizer_path, default_value=ModelConfig(model_id=\"black-forest-labs/FLUX.2-dev\", origin_file_pattern=\"tokenizer/\"))\n", + " self.pipe = Flux2ImagePipeline.from_pretrained(torch_dtype=torch.bfloat16, device=device, model_configs=model_configs, tokenizer_config=tokenizer_config)\n", + " self.pipe = self.load_training_template_model(self.pipe, template_model_id_or_path, use_gradient_checkpointing, use_gradient_checkpointing_offload)\n", + " self.pipe = self.split_pipeline_units(task, self.pipe, trainable_models, lora_base_model, remove_unnecessary_params=True)\n", + " self.resume_from_checkpoint(resume_from_checkpoint, remove_prefix_in_ckpt)\n", + " if enable_lora_hot_loading: self.pipe.dit = self.pipe.enable_lora_hot_loading(self.pipe.dit)\n", + "\n", + " # Training mode\n", + " self.switch_pipe_to_training_mode(\n", + " self.pipe, trainable_models,\n", + " lora_base_model, lora_target_modules, lora_rank, lora_checkpoint,\n", + " preset_lora_path, preset_lora_model,\n", + " task=task,\n", + " )\n", + "\n", + " # Other configs\n", + " self.use_gradient_checkpointing = use_gradient_checkpointing\n", + " self.use_gradient_checkpointing_offload = use_gradient_checkpointing_offload\n", + " self.extra_inputs = extra_inputs.split(\",\") if extra_inputs is not None else []\n", + " self.fp8_models = fp8_models\n", + " self.task = task\n", + " self.task_to_loss = {\n", + " \"sft:data_process\": lambda pipe, *args: args,\n", + " \"direct_distill:data_process\": lambda pipe, *args: args,\n", + " \"sft\": lambda pipe, inputs_shared, inputs_posi, inputs_nega: FlowMatchSFTLoss(pipe, **inputs_shared, **inputs_posi),\n", + " \"sft:train\": lambda pipe, inputs_shared, inputs_posi, inputs_nega: FlowMatchSFTLoss(pipe, **inputs_shared, **inputs_posi),\n", + " \"direct_distill\": lambda pipe, inputs_shared, inputs_posi, inputs_nega: DirectDistillLoss(pipe, **inputs_shared, **inputs_posi),\n", + " \"direct_distill:train\": lambda pipe, inputs_shared, inputs_posi, inputs_nega: DirectDistillLoss(pipe, **inputs_shared, **inputs_posi),\n", + " }\n", + "\n", + " def get_pipeline_inputs(self, data):\n", + " inputs_posi = {\"prompt\": data[\"prompt\"]}\n", + " inputs_nega = {\"negative_prompt\": \"\"}\n", + " inputs_shared = {\n", + " # Assume you are using this pipeline for inference,\n", + " # please fill in the input parameters.\n", + " \"input_image\": data[\"image\"],\n", + " \"height\": data[\"image\"].size[1],\n", + " \"width\": data[\"image\"].size[0],\n", + " # Please do not modify the following parameters\n", + " # unless you clearly know what this will cause.\n", + " \"embedded_guidance\": 1.0,\n", + " \"cfg_scale\": 1,\n", + " \"rand_device\": self.pipe.device,\n", + " \"use_gradient_checkpointing\": self.use_gradient_checkpointing,\n", + " \"use_gradient_checkpointing_offload\": self.use_gradient_checkpointing_offload,\n", + " }\n", + " inputs_shared = self.parse_extra_inputs(data, self.extra_inputs, inputs_shared)\n", + " return inputs_shared, inputs_posi, inputs_nega\n", + "\n", + " def forward(self, data, inputs=None):\n", + " if inputs is None: inputs = self.get_pipeline_inputs(data)\n", + " inputs = self.transfer_data_to_device(inputs, self.pipe.device, self.pipe.torch_dtype)\n", + " for unit in self.pipe.units:\n", + " inputs = self.pipe.unit_runner(unit, self.pipe, *inputs)\n", + " loss = self.task_to_loss[self.task](self.pipe, *inputs)\n", + " return loss\n", + "\n", + "\n", + "def flux2_parser():\n", + " parser = argparse.ArgumentParser(description=\"Simple example of a training script.\")\n", + " parser = add_general_config(parser)\n", + " parser = add_image_size_config(parser)\n", + " parser.add_argument(\"--tokenizer_path\", type=str, default=None, help=\"Path to tokenizer.\")\n", + " parser.add_argument(\"--initialize_model_on_cpu\", default=False, action=\"store_true\", help=\"Whether to initialize models on CPU.\")\n", + " return parser\n", + "\n", + "\n", + "if __name__ == \"__main__\":\n", + " parser = flux2_parser()\n", + " args = parser.parse_args()\n", + "\n", + " accelerator = accelerate.Accelerator(\n", + " gradient_accumulation_steps=args.gradient_accumulation_steps,\n", + " kwargs_handlers=[accelerate.DistributedDataParallelKwargs(find_unused_parameters=args.find_unused_parameters)],\n", + " )\n", + " dataset = UnifiedDataset(\n", + " base_path=args.dataset_base_path,\n", + " metadata_path=args.dataset_metadata_path,\n", + " repeat=args.dataset_repeat,\n", + " data_file_keys=args.data_file_keys.split(\",\"),\n", + " main_data_operator=UnifiedDataset.default_image_operator(\n", + " base_path=args.dataset_base_path,\n", + " max_pixels=args.max_pixels,\n", + " height=args.height,\n", + " width=args.width,\n", + " height_division_factor=16,\n", + " width_division_factor=16,\n", + " )\n", + " )\n", + " model = Flux2ImageTrainingModule(\n", + " model_paths=args.model_paths,\n", + " model_id_with_origin_paths=args.model_id_with_origin_paths,\n", + " tokenizer_path=args.tokenizer_path,\n", + " trainable_models=args.trainable_models,\n", + " lora_base_model=args.lora_base_model,\n", + " lora_target_modules=args.lora_target_modules,\n", + " lora_rank=args.lora_rank,\n", + " lora_checkpoint=args.lora_checkpoint,\n", + " preset_lora_path=args.preset_lora_path,\n", + " preset_lora_model=args.preset_lora_model,\n", + " use_gradient_checkpointing=args.use_gradient_checkpointing,\n", + " use_gradient_checkpointing_offload=args.use_gradient_checkpointing_offload,\n", + " extra_inputs=args.extra_inputs,\n", + " fp8_models=args.fp8_models,\n", + " offload_models=args.offload_models,\n", + " template_model_id_or_path=args.template_model_id_or_path,\n", + " resume_from_checkpoint=args.resume_from_checkpoint,\n", + " remove_prefix_in_ckpt=args.remove_prefix_in_ckpt,\n", + " enable_lora_hot_loading=args.enable_lora_hot_loading,\n", + " task=args.task,\n", + " device=\"cpu\" if (args.initialize_model_on_cpu or args.enable_model_cpu_offload) else accelerator.device,\n", + " )\n", + " model_logger = ModelLogger(\n", + " args.output_path,\n", + " remove_prefix_in_ckpt=args.remove_prefix_in_ckpt,\n", + " enable_tensorboard_log=args.enable_tensorboard_log,\n", + " enable_swanlab_log=args.enable_swanlab_log,\n", + " swanlab_project=args.swanlab_project,\n", + " enable_wandb_log=args.enable_wandb_log,\n", + " wandb_project=args.wandb_project,\n", + " )\n", + " launcher_map = {\n", + " \"sft:data_process\": launch_data_process_task,\n", + " \"direct_distill:data_process\": launch_data_process_task,\n", + " \"sft\": launch_training_task,\n", + " \"sft:train\": launch_training_task,\n", + " \"direct_distill\": launch_training_task,\n", + " \"direct_distill:train\": launch_training_task,\n", + " }\n", + " launcher_map[args.task](accelerator, dataset, model, model_logger, args=args)\n", + "\"\"\".strip()\n", + "with open(\"train.py\", \"w\", encoding=\"utf-8\") as f:\n", + " f.write(code)\n", + "\n", + "# 启动训练任务\n", + "cmd = \"\"\"\n", + "accelerate launch train.py \\\n", + " --dataset_base_path data/dataset/1770381050168240056 \\\n", + " --dataset_metadata_path data/dataset/metadata.json \\\n", + " --extra_inputs \"template_inputs\" \\\n", + " --max_pixels 1048576 \\\n", + " --dataset_repeat 1 \\\n", + " --model_id_with_origin_paths \"black-forest-labs/FLUX.2-klein-4B:text_encoder/*.safetensors,black-forest-labs/FLUX.2-klein-base-4B:transformer/*.safetensors,black-forest-labs/FLUX.2-klein-4B:vae/diffusion_pytorch_model.safetensors\" \\\n", + " --template_model_id_or_path \"DiffSynth-Studio/Template-KleinBase4B-Brightness:\" \\\n", + " --tokenizer_path \"black-forest-labs/FLUX.2-klein-4B:tokenizer/\" \\\n", + " --learning_rate 1e-4 \\\n", + " --num_epochs 1 \\\n", + " --remove_prefix_in_ckpt \"pipe.template_model.\" \\\n", + " --output_path \"models/template_brightness_training\" \\\n", + " --trainable_models \"template_model\" \\\n", + " --use_gradient_checkpointing \\\n", + " --find_unused_parameters \\\n", + " --fp8_models \"black-forest-labs/FLUX.2-klein-4B:text_encoder/*.safetensors,black-forest-labs/FLUX.2-klein-base-4B:transformer/*.safetensors\"\n", + "\"\"\"\n", + "os.system(cmd)" + ] + }, + { + "cell_type": "markdown", + "id": "0e91a608", + "metadata": {}, + "source": [ + "训练完成后,将得到的权重与前面写好的模型定义一起打包到 `models/template_brightness` 目录,形成一个完整的 Template 模型:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c3dd83dc", + "metadata": {}, + "outputs": [], + "source": [ + "import shutil\n", + "\n", + "shutil.copy(\n", + " \"models/template_brightness_training/epoch-0.safetensors\",\n", + " \"models/template_brightness/model.safetensors\",\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "1619f72c", + "metadata": {}, + "source": [ + "加载训练好的模型,通过传入不同的 `scale` 数值生成明暗不同的图像:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5acc60f9", + "metadata": {}, + "outputs": [], + "source": [ + "template = TemplatePipeline.from_pretrained(\n", + " torch_dtype=torch.bfloat16,\n", + " device=\"cuda\",\n", + " model_configs=[ModelConfig(\"models/template_brightness\")],\n", + " lazy_loading=True,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "427b288d", + "metadata": {}, + "outputs": [], + "source": [ + "image = template(\n", + " pipe,\n", + " prompt=\"A cat is sitting on a stone.\",\n", + " seed=0, cfg_scale=4, num_inference_steps=50,\n", + " template_inputs = [{\"scale\": 0.7}],\n", + " negative_template_inputs = [{\"scale\": 0.5}]\n", + ")\n", + "image.save(\"image_Brightness_light.jpg\")\n", + "image = template(\n", + " pipe,\n", + " prompt=\"A cat is sitting on a stone.\",\n", + " seed=0, cfg_scale=4, num_inference_steps=50,\n", + " template_inputs = [{\"scale\": 0.3}],\n", + " negative_template_inputs = [{\"scale\": 0.5}]\n", + ")\n", + "image.save(\"image_Brightness_dark.jpg\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "603a288e", + "metadata": {}, + "outputs": [], + "source": [ + "show_images([\n", + " Image.open(\"image_Brightness_light.jpg\"),\n", + " Image.open(\"image_Brightness_dark.jpg\"),\n", + "], resolution=256)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "08d3ff52", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "class", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.20" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/zh/Research_Tutorial/controllable_models.md b/docs/zh/Research_Tutorial/controllable_models.md new file mode 100644 index 0000000000000000000000000000000000000000..271f86fe66cd5619d2174860010458fab07673fb --- /dev/null +++ b/docs/zh/Research_Tutorial/controllable_models.md @@ -0,0 +1,634 @@ +# 魔搭社区 AIGC 系列课程 - 可控生成技术 + +本实验以 **Diffusion-Templates** 为框架,系统介绍图像生成模型的多种可控生成技术,并演示如何自行训练一个可控生成模块。 + +相关资料: + +* 开源代码:[DiffSynth-Studio](https://github.com/modelscope/DiffSynth-Studio) +* 技术报告:[arXiv](https://arxiv.org/abs/2604.24351) +* 项目主页:[GitHub](https://modelscope.github.io/diffusion-templates-web/) +* 文档参考:[English Version](https://diffsynth-studio-doc.readthedocs.io/en/latest/Diffusion_Templates/Introducing_Diffusion_Templates.html)、[中文版](https://diffsynth-studio-doc.readthedocs.io/zh-cn/latest/Diffusion_Templates/Introducing_Diffusion_Templates.html) +* 在线体验:[魔搭社区创空间](https://modelscope.cn/studios/DiffSynth-Studio/Diffusion-Templates) +* 模型集:[ModelScope](https://modelscope.cn/collections/DiffSynth-Studio/KleinBase4B-Templates)、[ModelScope 国际站](https://modelscope.ai/collections/DiffSynth-Studio/KleinBase4B-Templates)、[HuggingFace](https://huggingface.co/collections/DiffSynth-Studio/kleinbase4b-templates) +* 数据集:[ModelScope](https://modelscope.cn/collections/DiffSynth-Studio/ImagePulseV2)、[ModelScope 国际站](https://modelscope.ai/collections/DiffSynth-Studio/ImagePulseV2)、[HuggingFace](https://huggingface.co/collections/DiffSynth-Studio/imagepulsev2) + +```python +!pip install diffsynth==2.0.15 transformers==5.8.1 +``` + +```python +from diffsynth.diffusion.template import TemplatePipeline +from diffsynth.pipelines.flux2_image import Flux2ImagePipeline, ModelConfig +import torch +from modelscope import dataset_snapshot_download, snapshot_download +from PIL import Image +import numpy as np + +vram_config = { + "offload_dtype": "disk", + "offload_device": "disk", + "onload_dtype": torch.float8_e4m3fn, + "onload_device": "cpu", + "preparing_dtype": torch.float8_e4m3fn, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} + +def show_images(images, resolution): + images = [i.resize((resolution, resolution)).convert("RGB") for i in images] + images = [np.array(i) for i in images] + images = np.concat(images, axis=1) + images = Image.fromarray(images) + return images +``` + +## 图像结构控制 + +首先,加载基础模型 [black-forest-labs/FLUX.2-klein-base-4B](https://modelscope.cn/models/black-forest-labs/FLUX.2-klein-base-4B)。这是一个参数量为 4B 的图像生成模型,本实验后续所有可控生成模块都会挂载到这个基础模型之上。 + +```python +pipe = Flux2ImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="black-forest-labs/FLUX.2-klein-base-4B", origin_file_pattern="transformer/*.safetensors", **vram_config), + ModelConfig(model_id="black-forest-labs/FLUX.2-klein-4B", origin_file_pattern="text_encoder/*.safetensors", **vram_config), + ModelConfig(model_id="black-forest-labs/FLUX.2-klein-4B", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + tokenizer_config=ModelConfig(model_id="black-forest-labs/FLUX.2-klein-4B", origin_file_pattern="tokenizer/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) +``` + +[ControlNet](https://arxiv.org/abs/2302.05543) 是最早的一批 Diffusion 可控生成技术,可用**深度图、边缘图、姿态图**等结构性条件对生成画面进行**逐像素级**的控制。 + +以 Template 格式加载 [DiffSynth-Studio/Template-KleinBase4B-ControlNet](https://modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-ControlNet),即可在保留输入结构的前提下,用不同的提示词生成不同风格的画面。 + +```python +template = TemplatePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ModelConfig(model_id="DiffSynth-Studio/Template-KleinBase4B-ControlNet")], + lazy_loading=True, +) +``` + +```python +dataset_snapshot_download( + "DiffSynth-Studio/examples_in_diffsynth", + allow_file_pattern=["templates/*"], + local_dir="data/examples", +) +image = template( + pipe, + prompt="A cat is sitting on a stone, bathed in bright sunshine.", + seed=0, cfg_scale=4, num_inference_steps=50, + template_inputs = [{ + "image": Image.open("data/examples/templates/image_depth.jpg"), + "prompt": "A cat is sitting on a stone, bathed in bright sunshine.", + }], + negative_template_inputs = [{ + "image": Image.open("data/examples/templates/image_depth.jpg"), + "prompt": "", + }], +) +image.save("image_ControlNet_sunshine.jpg") +image = template( + pipe, + prompt="A cat is sitting on a stone, surrounded by colorful magical particles.", + seed=0, cfg_scale=4, num_inference_steps=50, + template_inputs = [{ + "image": Image.open("data/examples/templates/image_depth.jpg"), + "prompt": "A cat is sitting on a stone, surrounded by colorful magical particles.", + }], + negative_template_inputs = [{ + "image": Image.open("data/examples/templates/image_depth.jpg"), + "prompt": "", + }], +) +image.save("image_ControlNet_magic.jpg") +``` + +```python +show_images([ + Image.open("data/examples/templates/image_depth.jpg"), + Image.open("image_ControlNet_sunshine.jpg"), + Image.open("image_ControlNet_magic.jpg"), +], resolution=256) +``` +![Image](https://github.com/user-attachments/assets/048ee1d4-6f84-4edc-beb7-49bb5ec2d53d) + +## 数值属性控制 + +[AttriCtrl](https://arxiv.org/abs/2508.02151) 是一类**数值型**可控生成模型,能够将连续的数值属性作为控制条件注入生成过程。 + +运行以下代码,加载 [DiffSynth-Studio/Template-KleinBase4B-SoftRGB](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-SoftRGB),通过输入 R/G/B 数值精确控制画面的整体色调。 + +```python +template = TemplatePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ModelConfig(model_id="DiffSynth-Studio/Template-KleinBase4B-SoftRGB")], + lazy_loading=True, +) +``` + +```python +image = template( + pipe, + prompt="A cat is sitting on a stone.", + seed=0, cfg_scale=4, num_inference_steps=50, + template_inputs = [{"R": 128/255, "G": 128/255, "B": 128/255}], +) +image.save("image_rgb_normal.jpg") +image = template( + pipe, + prompt="A cat is sitting on a stone.", + seed=0, cfg_scale=4, num_inference_steps=50, + template_inputs = [{"R": 208/255, "G": 185/255, "B": 138/255}], +) +image.save("image_rgb_warm.jpg") +image = template( + pipe, + prompt="A cat is sitting on a stone.", + seed=0, cfg_scale=4, num_inference_steps=50, + template_inputs = [{"R": 94/255, "G": 163/255, "B": 174/255}], +) +image.save("image_rgb_cold.jpg") +``` + +```python +show_images([ + Image.open("image_rgb_normal.jpg"), + Image.open("image_rgb_warm.jpg"), + Image.open("image_rgb_cold.jpg"), +], resolution=256) +``` +![Image](https://github.com/user-attachments/assets/025ce94d-fe43-4166-8967-2acfbc76ada3) + +## 图像编辑 + +图像编辑模型是一类**通用性较强**的可控生成模型:给定一张原图和一段编辑指令,即可对原图进行局部或整体修改。 + +运行以下代码,加载 [DiffSynth-Studio/Template-KleinBase4B-Edit](https://www.modelscope.cn/models/DiffSynth-Studio/Template-KleinBase4B-Edit)。该模型通过 **KV-Cache** 复用输入图像的注意力键值,从而快速完成编辑,推理速度较快。 + +```python +template = TemplatePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ModelConfig(model_id="DiffSynth-Studio/Template-KleinBase4B-Edit")], + lazy_loading=True, +) +``` + +```python +dataset_snapshot_download( + "DiffSynth-Studio/examples_in_diffsynth", + allow_file_pattern=["templates/*"], + local_dir="data/examples", +) +image = template( + pipe, + prompt="Put a hat on this cat.", + seed=0, cfg_scale=4, num_inference_steps=50, + template_inputs = [{ + "image": Image.open("data/examples/templates/image_reference.jpg"), + "prompt": "Put a hat on this cat.", + }], + negative_template_inputs = [{ + "image": Image.open("data/examples/templates/image_reference.jpg"), + "prompt": "", + }], +) +image.save("image_Edit_hat.jpg") +image = template( + pipe, + prompt="Make the cat turn its head to look to the right.", + seed=0, cfg_scale=4, num_inference_steps=50, + template_inputs = [{ + "image": Image.open("data/examples/templates/image_reference.jpg"), + "prompt": "Make the cat turn its head to look to the right.", + }], + negative_template_inputs = [{ + "image": Image.open("data/examples/templates/image_reference.jpg"), + "prompt": "", + }], +) +image.save("image_Edit_head.jpg") +``` + +```python +show_images([ + Image.open("data/examples/templates/image_reference.jpg"), + Image.open("image_Edit_hat.jpg"), + Image.open("image_Edit_head.jpg"), +], resolution=256) +``` +![Image](https://github.com/user-attachments/assets/73140bc8-e510-4832-b3f3-40c00281e136) + +## 风格控制 + +实现图像风格控制的最直接方式,是训练一个风格 [LoRA](https://arxiv.org/abs/2106.09685)——但每种风格都需要单独训练,成本较高。为此我们训练了一个特殊的 [Image-to-LoRA](https://arxiv.org/abs/2606.13809) 模型,它可以**根据输入的参考图像即时生成一份 LoRA 权重**,免去了传统的风格训练过程。 + +运行以下代码,加载 [DiffSynth-Studio/KleinBase4B-i2L-v2](https://www.modelscope.cn/models/DiffSynth-Studio/KleinBase4B-i2L-v2),用参考图像动态生成 LoRA,从而控制画面风格。 + +```python +from modelscope import snapshot_download + +template = TemplatePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ModelConfig(model_id="DiffSynth-Studio/KleinBase4B-i2L-v2")], + lazy_loading=True, +) +``` + +```python +snapshot_download("DiffSynth-Studio/KleinBase4B-i2L-v2", allow_file_pattern="assets/*", local_dir="data") +images = [Image.open(f"data/assets/image_1_{i}.jpg") for i in range(4)] +image = template( + pipe, + prompt="A cat is sitting on a stone", + seed=42, cfg_scale=4, num_inference_steps=50, + template_inputs = [{"image": images}], + negative_template_inputs = [{"image": [Image.fromarray(np.zeros_like(np.array(i)) + 128) for i in images]}], +) +image.save("image_KleinBase4B-i2L-v2_1.jpg") +images = [Image.open(f"data/assets/image_3_{i}.jpg") for i in range(4)] +image = template( + pipe, + prompt="A cat is sitting on a stone", + seed=42, cfg_scale=4, num_inference_steps=50, + template_inputs = [{"image": images}], + negative_template_inputs = [{"image": [Image.fromarray(np.zeros_like(np.array(i)) + 128) for i in images]}], +) +image.save("image_KleinBase4B-i2L-v2_2.jpg") +``` + +```python +show_images([ + Image.open("data/assets/image_1_2.jpg"), + Image.open("image_KleinBase4B-i2L-v2_1.jpg"), + Image.open("data/assets/image_3_0.jpg"), + Image.open("image_KleinBase4B-i2L-v2_2.jpg"), +], resolution=256) +``` +![Image](https://github.com/user-attachments/assets/783748e7-90fc-494f-a939-70ea45e1486a) + +## 训练可控生成模型 + +**Diffusion-Templates 框架允许开发者训练任意结构的可控生成模型**——只要给定模型定义、数据处理逻辑和数据集,即可接入统一的训练流程。下面我们从零训练一个**亮度控制模型**,让画面按指定的亮度数值生成。 + +第一步,编写模型结构代码(包含数值编码器、KV-Cache 生成主干和数据标注器): + +```python +code = """ +import torch, math, os +from PIL import Image +import numpy as np + + +class SingleValueEncoder(torch.nn.Module): + def __init__(self, dim_in=256, dim_out=4096, length=32): + super().__init__() + self.length = length + self.prefer_value_embedder = torch.nn.Sequential(torch.nn.Linear(dim_in, dim_out), torch.nn.SiLU(), torch.nn.Linear(dim_out, dim_out)) + self.positional_embedding = torch.nn.Parameter(torch.randn(self.length, dim_out)) + + def get_timestep_embedding(self, timesteps, embedding_dim, max_period=10000): + half_dim = embedding_dim // 2 + exponent = -math.log(max_period) * torch.arange(0, half_dim, dtype=torch.float32, device=timesteps.device) / half_dim + emb = timesteps[:, None].float() * torch.exp(exponent)[None, :] + emb = torch.cat([torch.cos(emb), torch.sin(emb)], dim=-1) + return emb + + def forward(self, value, dtype): + emb = self.get_timestep_embedding(value * 1000, 256).to(dtype) + emb = self.prefer_value_embedder(emb).squeeze(0) + base_embeddings = emb.expand(self.length, -1) + positional_embedding = self.positional_embedding.to(dtype=base_embeddings.dtype, device=base_embeddings.device) + learned_embeddings = base_embeddings + positional_embedding + return learned_embeddings + + +# 主干模型结构(将输入的数值转换为 KV-Cache 向量) +class ValueFormatModel(torch.nn.Module): + def __init__(self, num_double_blocks=5, num_single_blocks=20, dim=3072, num_heads=24, length=512): + super().__init__() + self.block_names = [f"double_{i}" for i in range(num_double_blocks)] + [f"single_{i}" for i in range(num_single_blocks)] + self.proj_k = torch.nn.ModuleDict({block_name: SingleValueEncoder(dim_out=dim, length=length) for block_name in self.block_names}) + self.proj_v = torch.nn.ModuleDict({block_name: SingleValueEncoder(dim_out=dim, length=length) for block_name in self.block_names}) + self.num_heads = num_heads + self.length = length + + @torch.no_grad() + def process_inputs(self, pipe, scale, **kwargs): + return {"value": torch.Tensor([scale]).to(dtype=pipe.torch_dtype, device=pipe.device)} + + def forward(self, value, **kwargs): + kv_cache = {} + for block_name in self.block_names: + k = self.proj_k[block_name](value, value.dtype) + k = k.view(1, self.length, self.num_heads, -1) + v = self.proj_v[block_name](value, value.dtype) + v = v.view(1, self.length, self.num_heads, -1) + kv_cache[block_name] = (k, v) + return {"kv_cache": kv_cache} + + +# 将图像数据转换为模型输入(根据图像中的 RGB 数值计算亮度) +class DataAnnotator(torch.nn.Module): + def __init__(self): + pass + + def __call__(self, image, **kwargs): + image = Image.open(image) + image = np.array(image) + return {"scale": image.astype(np.float32).mean() / 255} + + +TEMPLATE_MODEL = ValueFormatModel +TEMPLATE_MODEL_PATH = "model.safetensors" if "model.safetensors" in os.listdir(os.path.dirname(__file__)) else None +TEMPLATE_DATA_PROCESSOR = DataAnnotator +""" + +import os + +os.makedirs("models/template_brightness", exist_ok=True) +with open("models/template_brightness/model.py", "w", encoding="utf-8") as f: + f.write(code.strip()) +``` + +第二步,下载并预处理数据集,同时生成训练所需的 metadata: + +```python +import json, os +from modelscope import dataset_snapshot_download + +# 下载数据集 +dataset_snapshot_download( + "DiffSynth-Studio/ImagePulseV2-TextImage", + local_dir="data/ImagePulseV2-TextImage", + allow_file_pattern="data/1770381050168240056.tar.gz" +) + +# 解压数据集 +os.makedirs("data/dataset", exist_ok=True) +os.system("tar zxvf data/ImagePulseV2-TextImage/data/1770381050168240056.tar.gz -C data/dataset") + +# 生成数据集 metadata +dataset_path = "data/dataset/1770381050168240056" +metadata = [] +for file_name in os.listdir(dataset_path): + if file_name.endswith(".json"): + with open(os.path.join(dataset_path, file_name), "r") as f: + data = json.load(f) + data["template_inputs"] = {"image": os.path.join(dataset_path, data["image"])} + metadata.append(data) +with open("data/dataset/metadata.json", "w") as f: + json.dump(metadata, f, indent=4, ensure_ascii=False) +``` + +第三步,启动训练: + +```python +import os + +# 训练脚本 +code = """ +import torch, os, argparse, accelerate +from diffsynth.core import UnifiedDataset +from diffsynth.pipelines.flux2_image import Flux2ImagePipeline, ModelConfig +from diffsynth.diffusion import * +os.environ["TOKENIZERS_PARALLELISM"] = "false" + + +class Flux2ImageTrainingModule(DiffusionTrainingModule): + def __init__( + self, + model_paths=None, model_id_with_origin_paths=None, + tokenizer_path=None, + trainable_models=None, + lora_base_model=None, lora_target_modules="", lora_rank=32, lora_checkpoint=None, + preset_lora_path=None, preset_lora_model=None, + use_gradient_checkpointing=True, + use_gradient_checkpointing_offload=False, + extra_inputs=None, + fp8_models=None, + offload_models=None, + template_model_id_or_path=None, + resume_from_checkpoint=None, remove_prefix_in_ckpt=None, + enable_lora_hot_loading=False, + device="cpu", + task="sft", + ): + super().__init__() + # Load models + model_configs = self.parse_model_configs(model_paths, model_id_with_origin_paths, fp8_models=fp8_models, offload_models=offload_models, device=device) + tokenizer_config = self.parse_path_or_model_id(tokenizer_path, default_value=ModelConfig(model_id="black-forest-labs/FLUX.2-dev", origin_file_pattern="tokenizer/")) + self.pipe = Flux2ImagePipeline.from_pretrained(torch_dtype=torch.bfloat16, device=device, model_configs=model_configs, tokenizer_config=tokenizer_config) + self.pipe = self.load_training_template_model(self.pipe, template_model_id_or_path, use_gradient_checkpointing, use_gradient_checkpointing_offload) + self.pipe = self.split_pipeline_units(task, self.pipe, trainable_models, lora_base_model, remove_unnecessary_params=True) + self.resume_from_checkpoint(resume_from_checkpoint, remove_prefix_in_ckpt) + if enable_lora_hot_loading: self.pipe.dit = self.pipe.enable_lora_hot_loading(self.pipe.dit) + + # Training mode + self.switch_pipe_to_training_mode( + self.pipe, trainable_models, + lora_base_model, lora_target_modules, lora_rank, lora_checkpoint, + preset_lora_path, preset_lora_model, + task=task, + ) + + # Other configs + self.use_gradient_checkpointing = use_gradient_checkpointing + self.use_gradient_checkpointing_offload = use_gradient_checkpointing_offload + self.extra_inputs = extra_inputs.split(",") if extra_inputs is not None else [] + self.fp8_models = fp8_models + self.task = task + self.task_to_loss = { + "sft:data_process": lambda pipe, *args: args, + "direct_distill:data_process": lambda pipe, *args: args, + "sft": lambda pipe, inputs_shared, inputs_posi, inputs_nega: FlowMatchSFTLoss(pipe, **inputs_shared, **inputs_posi), + "sft:train": lambda pipe, inputs_shared, inputs_posi, inputs_nega: FlowMatchSFTLoss(pipe, **inputs_shared, **inputs_posi), + "direct_distill": lambda pipe, inputs_shared, inputs_posi, inputs_nega: DirectDistillLoss(pipe, **inputs_shared, **inputs_posi), + "direct_distill:train": lambda pipe, inputs_shared, inputs_posi, inputs_nega: DirectDistillLoss(pipe, **inputs_shared, **inputs_posi), + } + + def get_pipeline_inputs(self, data): + inputs_posi = {"prompt": data["prompt"]} + inputs_nega = {"negative_prompt": ""} + inputs_shared = { + # Assume you are using this pipeline for inference, + # please fill in the input parameters. + "input_image": data["image"], + "height": data["image"].size[1], + "width": data["image"].size[0], + # Please do not modify the following parameters + # unless you clearly know what this will cause. + "embedded_guidance": 1.0, + "cfg_scale": 1, + "rand_device": self.pipe.device, + "use_gradient_checkpointing": self.use_gradient_checkpointing, + "use_gradient_checkpointing_offload": self.use_gradient_checkpointing_offload, + } + inputs_shared = self.parse_extra_inputs(data, self.extra_inputs, inputs_shared) + return inputs_shared, inputs_posi, inputs_nega + + def forward(self, data, inputs=None): + if inputs is None: inputs = self.get_pipeline_inputs(data) + inputs = self.transfer_data_to_device(inputs, self.pipe.device, self.pipe.torch_dtype) + for unit in self.pipe.units: + inputs = self.pipe.unit_runner(unit, self.pipe, *inputs) + loss = self.task_to_loss[self.task](self.pipe, *inputs) + return loss + + +def flux2_parser(): + parser = argparse.ArgumentParser(description="Simple example of a training script.") + parser = add_general_config(parser) + parser = add_image_size_config(parser) + parser.add_argument("--tokenizer_path", type=str, default=None, help="Path to tokenizer.") + parser.add_argument("--initialize_model_on_cpu", default=False, action="store_true", help="Whether to initialize models on CPU.") + return parser + + +if __name__ == "__main__": + parser = flux2_parser() + args = parser.parse_args() + + accelerator = accelerate.Accelerator( + gradient_accumulation_steps=args.gradient_accumulation_steps, + kwargs_handlers=[accelerate.DistributedDataParallelKwargs(find_unused_parameters=args.find_unused_parameters)], + ) + dataset = UnifiedDataset( + base_path=args.dataset_base_path, + metadata_path=args.dataset_metadata_path, + repeat=args.dataset_repeat, + data_file_keys=args.data_file_keys.split(","), + main_data_operator=UnifiedDataset.default_image_operator( + base_path=args.dataset_base_path, + max_pixels=args.max_pixels, + height=args.height, + width=args.width, + height_division_factor=16, + width_division_factor=16, + ) + ) + model = Flux2ImageTrainingModule( + model_paths=args.model_paths, + model_id_with_origin_paths=args.model_id_with_origin_paths, + tokenizer_path=args.tokenizer_path, + trainable_models=args.trainable_models, + lora_base_model=args.lora_base_model, + lora_target_modules=args.lora_target_modules, + lora_rank=args.lora_rank, + lora_checkpoint=args.lora_checkpoint, + preset_lora_path=args.preset_lora_path, + preset_lora_model=args.preset_lora_model, + use_gradient_checkpointing=args.use_gradient_checkpointing, + use_gradient_checkpointing_offload=args.use_gradient_checkpointing_offload, + extra_inputs=args.extra_inputs, + fp8_models=args.fp8_models, + offload_models=args.offload_models, + template_model_id_or_path=args.template_model_id_or_path, + resume_from_checkpoint=args.resume_from_checkpoint, + remove_prefix_in_ckpt=args.remove_prefix_in_ckpt, + enable_lora_hot_loading=args.enable_lora_hot_loading, + task=args.task, + device="cpu" if (args.initialize_model_on_cpu or args.enable_model_cpu_offload) else accelerator.device, + ) + model_logger = ModelLogger( + args.output_path, + remove_prefix_in_ckpt=args.remove_prefix_in_ckpt, + enable_tensorboard_log=args.enable_tensorboard_log, + enable_swanlab_log=args.enable_swanlab_log, + swanlab_project=args.swanlab_project, + enable_wandb_log=args.enable_wandb_log, + wandb_project=args.wandb_project, + ) + launcher_map = { + "sft:data_process": launch_data_process_task, + "direct_distill:data_process": launch_data_process_task, + "sft": launch_training_task, + "sft:train": launch_training_task, + "direct_distill": launch_training_task, + "direct_distill:train": launch_training_task, + } + launcher_map[args.task](accelerator, dataset, model, model_logger, args=args) +""".strip() +with open("train.py", "w", encoding="utf-8") as f: + f.write(code) + +# 启动训练任务 +cmd = """ +accelerate launch train.py \ + --dataset_base_path data/dataset/1770381050168240056 \ + --dataset_metadata_path data/dataset/metadata.json \ + --extra_inputs "template_inputs" \ + --max_pixels 1048576 \ + --dataset_repeat 1 \ + --model_id_with_origin_paths "black-forest-labs/FLUX.2-klein-4B:text_encoder/*.safetensors,black-forest-labs/FLUX.2-klein-base-4B:transformer/*.safetensors,black-forest-labs/FLUX.2-klein-4B:vae/diffusion_pytorch_model.safetensors" \ + --template_model_id_or_path "DiffSynth-Studio/Template-KleinBase4B-Brightness:" \ + --tokenizer_path "black-forest-labs/FLUX.2-klein-4B:tokenizer/" \ + --learning_rate 1e-4 \ + --num_epochs 1 \ + --remove_prefix_in_ckpt "pipe.template_model." \ + --output_path "models/template_brightness_training" \ + --trainable_models "template_model" \ + --use_gradient_checkpointing \ + --find_unused_parameters \ + --fp8_models "black-forest-labs/FLUX.2-klein-4B:text_encoder/*.safetensors,black-forest-labs/FLUX.2-klein-base-4B:transformer/*.safetensors" +""" +os.system(cmd) +``` + +训练完成后,将得到的权重与前面写好的模型定义一起打包到 `models/template_brightness` 目录,形成一个完整的 Template 模型: + +```python +import shutil + +shutil.copy( + "models/template_brightness_training/epoch-0.safetensors", + "models/template_brightness/model.safetensors", +) +``` + +加载训练好的模型,通过传入不同的 `scale` 数值生成明暗不同的图像: + +```python +template = TemplatePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ModelConfig("models/template_brightness")], + lazy_loading=True, +) +``` + +```python +image = template( + pipe, + prompt="A cat is sitting on a stone.", + seed=0, cfg_scale=4, num_inference_steps=50, + template_inputs = [{"scale": 0.7}], + negative_template_inputs = [{"scale": 0.5}] +) +image.save("image_Brightness_light.jpg") +image = template( + pipe, + prompt="A cat is sitting on a stone.", + seed=0, cfg_scale=4, num_inference_steps=50, + template_inputs = [{"scale": 0.3}], + negative_template_inputs = [{"scale": 0.5}] +) +image.save("image_Brightness_dark.jpg") +``` + +```python +show_images([ + Image.open("image_Brightness_light.jpg"), + Image.open("image_Brightness_dark.jpg"), +], resolution=256) +``` +![Image](https://github.com/user-attachments/assets/f3b72cb5-4d7d-46ca-82c8-1ede4d71af1e) \ No newline at end of file diff --git a/docs/zh/Research_Tutorial/inference_time_scaling.ipynb b/docs/zh/Research_Tutorial/inference_time_scaling.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..c1fb6ad7813e9b477a44bf7c02341b434523870e --- /dev/null +++ b/docs/zh/Research_Tutorial/inference_time_scaling.ipynb @@ -0,0 +1,236 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "8db54992", + "metadata": {}, + "source": [ + "# 推理改进优化技术\n", + "\n", + "DiffSynth-Studio 旨在以基础框架驱动技术创新。本文以 Inference-time scaling 为例,展示如何基于 DiffSynth-Studio 构建免训练(Training-free)的图像生成增强方案。" + ] + }, + { + "cell_type": "markdown", + "id": "0911cad4", + "metadata": {}, + "source": [ + "## 1. 图像质量量化\n", + "\n", + "首先,我们需要找到一个指标来量化图像生成模型生成的图像质量。最简单直接的方案是人工打分,但这样做的成本太高,无法大规模使用。不过,收集人工打分后,训练一个图像分类模型来预测人类的打分结果,是完全可行的。PickScore [[1]](https://arxiv.org/abs/2305.01569) 就是这样一个模型,运行下面的代码,将会自动下载并加载 [PickScore 模型](https://modelscope.cn/models/AI-ModelScope/PickScore_v1)。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4faca4ca", + "metadata": {}, + "outputs": [], + "source": [ + "from modelscope import AutoProcessor, AutoModel\n", + "import torch\n", + "\n", + "class PickScore(torch.nn.Module):\n", + " def __init__(self):\n", + " super().__init__()\n", + " self.processor = AutoProcessor.from_pretrained(\"laion/CLIP-ViT-H-14-laion2B-s32B-b79K\")\n", + " self.model = AutoModel.from_pretrained(\"AI-ModelScope/PickScore_v1\").eval().to(\"cuda\")\n", + "\n", + " def forward(self, image, prompt):\n", + " image_inputs = self.processor(images=image, padding=True, truncation=True, max_length=77, return_tensors=\"pt\").to(\"cuda\")\n", + " text_inputs = self.processor(text=prompt, padding=True, truncation=True, max_length=77, return_tensors=\"pt\").to(\"cuda\")\n", + " with torch.inference_mode():\n", + " image_embs = self.model.get_image_features(**image_inputs).pooler_output\n", + " image_embs = image_embs / torch.norm(image_embs, dim=-1, keepdim=True)\n", + " text_embs = self.model.get_text_features(**text_inputs).pooler_output\n", + " text_embs = text_embs / torch.norm(text_embs, dim=-1, keepdim=True)\n", + " score = (text_embs @ image_embs.T).flatten().item()\n", + " return score\n", + "\n", + "reward_model = PickScore()" + ] + }, + { + "cell_type": "markdown", + "id": "5f807cec", + "metadata": {}, + "source": [ + "## 2. Inference-time Scaling 技术\n", + "\n", + "Inference-time Scaling [[2]](https://arxiv.org/abs/2504.00294) 是一类有趣的技术,旨在通过增加推理时的计算量来提升生成结果的质量。例如,在语言模型中,[Qwen/Qwen3.5-27B](https://modelscope.cn/models/Qwen/Qwen3.5-27B)、[deepseek-ai/DeepSeek-R1](deepseek-ai/DeepSeek-R1) 等模型通过“思考模式”引导模型花更多时间仔细思考,让回答结果更准确。接下来我们以模型 [black-forest-labs/FLUX.2-klein-4B](https://modelscope.cn/models/black-forest-labs/FLUX.2-klein-4B) 为例,探讨如何为图像生成模型设计 Inference-time Scaling 方案。\n", + "\n", + "> 在开始前,我们稍微改造了 `Flux2ImagePipeline` 的代码,使其能够根据输入的特定高斯噪声矩阵进行初始化,便于复现结果,详见 [diffsynth/pipelines/flux2_image.py](https://github.com/modelscope/DiffSynth-Studio/blob/main/diffsynth/pipelines/flux2_image.py) 中的 `Flux2Unit_NoiseInitializer`。\n", + "\n", + "运行以下代码,加载模型 [black-forest-labs/FLUX.2-klein-4B](https://modelscope.cn/models/black-forest-labs/FLUX.2-klein-4B)。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c5818a87", + "metadata": {}, + "outputs": [], + "source": [ + "from diffsynth.pipelines.flux2_image import Flux2ImagePipeline, ModelConfig\n", + "\n", + "pipe = Flux2ImagePipeline.from_pretrained(\n", + " torch_dtype=torch.bfloat16,\n", + " device=\"cuda\",\n", + " model_configs=[\n", + " ModelConfig(model_id=\"black-forest-labs/FLUX.2-klein-4B\", origin_file_pattern=\"text_encoder/*.safetensors\"),\n", + " ModelConfig(model_id=\"black-forest-labs/FLUX.2-klein-4B\", origin_file_pattern=\"transformer/*.safetensors\"),\n", + " ModelConfig(model_id=\"black-forest-labs/FLUX.2-klein-4B\", origin_file_pattern=\"vae/diffusion_pytorch_model.safetensors\"),\n", + " ],\n", + " tokenizer_config=ModelConfig(model_id=\"black-forest-labs/FLUX.2-klein-4B\", origin_file_pattern=\"tokenizer/\"),\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "f58e9945", + "metadata": {}, + "source": [ + "用提示词 `\"sketch, a cat\"` 生成一只素描猫猫,并用 PickScore 模型打分。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6ea2d258", + "metadata": {}, + "outputs": [], + "source": [ + "def evaluate_noise(noise, pipe, reward_model, prompt):\n", + " # Generate an image and compute the score.\n", + " image = pipe(\n", + " prompt=prompt,\n", + " num_inference_steps=4,\n", + " initial_noise=noise,\n", + " progress_bar_cmd=lambda x: x,\n", + " )\n", + " score = reward_model(image, prompt)\n", + " return score\n", + "\n", + "torch.manual_seed(1)\n", + "prompt = \"sketch, a cat\"\n", + "noise = pipe.generate_noise((1, 128, 64, 64), rand_device=\"cuda\", rand_torch_dtype=pipe.torch_dtype)\n", + "\n", + "image_1 = pipe(prompt, num_inference_steps=4, initial_noise=noise)\n", + "print(\"Score:\", reward_model(image_1, prompt))\n", + "image_1" + ] + }, + { + "cell_type": "markdown", + "id": "5e11694e", + "metadata": {}, + "source": [ + "### 2.1 Best-of-N 随机搜索\n", + "\n", + "模型的生成结果具有一定的随机性,如果用不同的随机种子,生成的图像结果也是不同的,有时图像质量高,有时图像质量低。那么,我们有一个简单的 Inference-time scaling 方案:使用多个不同的随机种子分别生成图像,然后利用 PickScore 进行打分,只保留分数最高的那一张。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "241f10d2", + "metadata": {}, + "outputs": [], + "source": [ + "from tqdm import tqdm\n", + "\n", + "def random_search(base_latents, objective_reward_fn, total_eval_budget):\n", + " # Search for the noise randomly.\n", + " best_noise = base_latents\n", + " best_score = objective_reward_fn(base_latents)\n", + " for it in tqdm(range(total_eval_budget - 1)):\n", + " noise = pipe.generate_noise((1, 128, 64, 64), seed=None)\n", + " score = objective_reward_fn(noise)\n", + " if score > best_score:\n", + " best_score, best_noise = score, noise\n", + " return best_noise\n", + "\n", + "best_noise = random_search(\n", + " base_latents=noise,\n", + " objective_reward_fn=lambda noise: evaluate_noise(noise, pipe, reward_model, prompt),\n", + " total_eval_budget=50,\n", + ")\n", + "image_2 = pipe(prompt, num_inference_steps=4, initial_noise=best_noise)\n", + "print(\"Score:\", reward_model(image_2, prompt))\n", + "image_2" + ] + }, + { + "cell_type": "markdown", + "id": "8e9bf966", + "metadata": {}, + "source": [ + "我们可以清晰地看到,经过多次随机搜索后,最终选出的猫猫毛发细节更加丰富,PickScore 分数也有明显提升。但这种暴力的随机搜索效率极低,生成时间成倍增长,且很容易触及质量上限。因此,我们希望能够找到一种更高效的搜索方法,在同等计算预算下达到更高的分数。" + ] + }, + { + "cell_type": "markdown", + "id": "c9578349", + "metadata": {}, + "source": [ + "### 2.2 SES 搜索\n", + "\n", + "为了突破随机搜索的瓶颈,我们引入了 SES (Spectral Evolution Search) 算法 [[3]](https://arxiv.org/abs/2602.03208),详细的代码位于 [diffsynth/utils/ses](https://github.com/modelscope/DiffSynth-Studio/blob/main/diffsynth/utils/ses)。\n", + "\n", + "扩散模型生成的图像,很大程度上由初始噪声的低频分量决定。SES 算法通过小波变换将高斯噪声分解,固定高频细节,专门针对低频部分使用交叉熵方法进行演化搜索,能以更高的效率找到优质的初始噪声。\n", + "\n", + "运行下面的代码,即可使用 SES 更高效地搜索最佳的高斯噪声矩阵。" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "adeed2aa", + "metadata": {}, + "outputs": [], + "source": [ + "from diffsynth.utils.ses import ses_search\n", + "\n", + "best_noise = ses_search(\n", + " base_latents=noise,\n", + " objective_reward_fn=lambda noise: evaluate_noise(noise, pipe, reward_model, prompt),\n", + " total_eval_budget=50,\n", + ")\n", + "image_3 = pipe(prompt, num_inference_steps=4, initial_noise=best_noise)\n", + "print(\"Score:\", reward_model(image_3, prompt))\n", + "image_3" + ] + }, + { + "cell_type": "markdown", + "id": "940a97f1", + "metadata": {}, + "source": [ + "可以观察到,在同样的计算预算下,相比于随机搜索,SES 的结果在 PickScore 得分上取得了显著的提升。“素描猫猫”展现出了更精致的整体构图以及更具层次感的明暗对比。\n", + "\n", + "Inference-time scaling 能够以更长推理时间为代价获得更高的图像质量,那么它生成的图像数据也可以用 DPO [[4]](https://arxiv.org/abs/2311.12908)、差分训练 [[5]](https://arxiv.org/abs/2412.12888) 等方式赋予模型自身,那就是另外一个有趣的探索方向了。" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "dzj8", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.19" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/zh/Research_Tutorial/inference_time_scaling.md b/docs/zh/Research_Tutorial/inference_time_scaling.md new file mode 100644 index 0000000000000000000000000000000000000000..7b283ad996f74a49395cc87d9f9d667d736e946d --- /dev/null +++ b/docs/zh/Research_Tutorial/inference_time_scaling.md @@ -0,0 +1,140 @@ +# 推理改进优化技术 + +DiffSynth-Studio 旨在以基础框架驱动技术创新。本文以 Inference-time scaling 为例,展示如何基于 DiffSynth-Studio 构建免训练(Training-free)的图像生成增强方案。 + +Notebook: https://github.com/modelscope/DiffSynth-Studio/blob/main/docs/zh/Research_Tutorial/inference_time_scaling.ipynb + +## 1. 图像质量量化 + +首先,我们需要找到一个指标来量化图像生成模型生成的图像质量。最简单直接的方案是人工打分,但这样做的成本太高,无法大规模使用。不过,收集人工打分后,训练一个图像分类模型来预测人类的打分结果,是完全可行的。PickScore [[1]](https://arxiv.org/abs/2305.01569) 就是这样一个模型,运行下面的代码,将会自动下载并加载 [PickScore 模型](https://modelscope.cn/models/AI-ModelScope/PickScore_v1)。 + +```python +from modelscope import AutoProcessor, AutoModel +import torch + +class PickScore(torch.nn.Module): + def __init__(self): + super().__init__() + self.processor = AutoProcessor.from_pretrained("laion/CLIP-ViT-H-14-laion2B-s32B-b79K") + self.model = AutoModel.from_pretrained("AI-ModelScope/PickScore_v1").eval().to("cuda") + + def forward(self, image, prompt): + image_inputs = self.processor(images=image, padding=True, truncation=True, max_length=77, return_tensors="pt").to("cuda") + text_inputs = self.processor(text=prompt, padding=True, truncation=True, max_length=77, return_tensors="pt").to("cuda") + with torch.inference_mode(): + image_embs = self.model.get_image_features(**image_inputs).pooler_output + image_embs = image_embs / torch.norm(image_embs, dim=-1, keepdim=True) + text_embs = self.model.get_text_features(**text_inputs).pooler_output + text_embs = text_embs / torch.norm(text_embs, dim=-1, keepdim=True) + score = (text_embs @ image_embs.T).flatten().item() + return score + +reward_model = PickScore() +``` + +## 2. Inference-time Scaling 技术 + +Inference-time Scaling [[2]](https://arxiv.org/abs/2504.00294) 是一类有趣的技术,旨在通过增加推理时的计算量来提升生成结果的质量。例如,在语言模型中,[Qwen/Qwen3.5-27B](https://modelscope.cn/models/Qwen/Qwen3.5-27B)、[deepseek-ai/DeepSeek-R1](deepseek-ai/DeepSeek-R1) 等模型通过“思考模式”引导模型花更多时间仔细思考,让回答结果更准确。接下来我们以模型 [black-forest-labs/FLUX.2-klein-4B](https://modelscope.cn/models/black-forest-labs/FLUX.2-klein-4B) 为例,探讨如何为图像生成模型设计 Inference-time Scaling 方案。 + +> 在开始前,我们稍微改造了 `Flux2ImagePipeline` 的代码,使其能够根据输入的特定高斯噪声矩阵进行初始化,便于复现结果,详见 [diffsynth/pipelines/flux2_image.py](https://github.com/modelscope/DiffSynth-Studio/blob/main/diffsynth/pipelines/flux2_image.py) 中的 `Flux2Unit_NoiseInitializer`。 + +运行以下代码,加载模型 [black-forest-labs/FLUX.2-klein-4B](https://modelscope.cn/models/black-forest-labs/FLUX.2-klein-4B)。 + +```python +from diffsynth.pipelines.flux2_image import Flux2ImagePipeline, ModelConfig + +pipe = Flux2ImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="black-forest-labs/FLUX.2-klein-4B", origin_file_pattern="text_encoder/*.safetensors"), + ModelConfig(model_id="black-forest-labs/FLUX.2-klein-4B", origin_file_pattern="transformer/*.safetensors"), + ModelConfig(model_id="black-forest-labs/FLUX.2-klein-4B", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + tokenizer_config=ModelConfig(model_id="black-forest-labs/FLUX.2-klein-4B", origin_file_pattern="tokenizer/"), +) +``` + +用提示词 `"sketch, a cat"` 生成一只素描猫猫,并用 PickScore 模型打分。 + +```python +def evaluate_noise(noise, pipe, reward_model, prompt): + # Generate an image and compute the score. + image = pipe( + prompt=prompt, + num_inference_steps=4, + initial_noise=noise, + progress_bar_cmd=lambda x: x, + ) + score = reward_model(image, prompt) + return score + +torch.manual_seed(1) +prompt = "sketch, a cat" +noise = pipe.generate_noise((1, 128, 64, 64), rand_device="cuda", rand_torch_dtype=pipe.torch_dtype) + +image_1 = pipe(prompt, num_inference_steps=4, initial_noise=noise) +print("Score:", reward_model(image_1, prompt)) +image_1 +``` + +![Image](https://github.com/user-attachments/assets/b6546c6d-b368-4463-b703-d561a9134ba0) + +### 2.1 Best-of-N 随机搜索 + +模型的生成结果具有一定的随机性,如果用不同的随机种子,生成的图像结果也是不同的,有时图像质量高,有时图像质量低。那么,我们有一个简单的 Inference-time scaling 方案:使用多个不同的随机种子分别生成图像,然后利用 PickScore 进行打分,只保留分数最高的那一张。 + +```python +from tqdm import tqdm + +def random_search(base_latents, objective_reward_fn, total_eval_budget): + # Search for the noise randomly. + best_noise = base_latents + best_score = objective_reward_fn(base_latents) + for it in tqdm(range(total_eval_budget - 1)): + noise = pipe.generate_noise((1, 128, 64, 64), seed=None) + score = objective_reward_fn(noise) + if score > best_score: + best_score, best_noise = score, noise + return best_noise + +best_noise = random_search( + base_latents=noise, + objective_reward_fn=lambda noise: evaluate_noise(noise, pipe, reward_model, prompt), + total_eval_budget=50, +) +image_2 = pipe(prompt, num_inference_steps=4, initial_noise=best_noise) +print("Score:", reward_model(image_2, prompt)) +image_2 +``` + +![Image](https://github.com/user-attachments/assets/b8dba70a-daa8-4368-8f32-a6c150daecb5) + +我们可以清晰地看到,经过多次随机搜索后,最终选出的猫猫毛发细节更加丰富,PickScore 分数也有明显提升。但这种暴力的随机搜索效率极低,生成时间成倍增长,且很容易触及质量上限。因此,我们希望能够找到一种更高效的搜索方法,在同等计算预算下达到更高的分数。 + +### 2.2 SES 搜索 + +为了突破随机搜索的瓶颈,我们引入了 SES (Spectral Evolution Search) 算法 [[3]](https://arxiv.org/abs/2602.03208),详细的代码位于 [diffsynth/utils/ses](https://github.com/modelscope/DiffSynth-Studio/blob/main/diffsynth/utils/ses)。 + +扩散模型生成的图像,很大程度上由初始噪声的低频分量决定。SES 算法通过小波变换将高斯噪声分解,固定高频细节,专门针对低频部分使用交叉熵方法进行演化搜索,能以更高的效率找到优质的初始噪声。 + +运行下面的代码,即可使用 SES 更高效地搜索最佳的高斯噪声矩阵。 + +```python +from diffsynth.utils.ses import ses_search + +best_noise = ses_search( + base_latents=noise, + objective_reward_fn=lambda noise: evaluate_noise(noise, pipe, reward_model, prompt), + total_eval_budget=50, +) +image_3 = pipe(prompt, num_inference_steps=4, initial_noise=best_noise) +print("Score:", reward_model(image_3, prompt)) +image_3 +``` + +![Image](https://github.com/user-attachments/assets/9a3f7598-3812-46d2-b333-cd65e49886ab) + +可以观察到,在同样的计算预算下,相比于随机搜索,SES 的结果在 PickScore 得分上取得了显著的提升。“素描猫猫”展现出了更精致的整体构图以及更具层次感的明暗对比。 + +Inference-time scaling 能够以更长推理时间为代价获得更高的图像质量,那么它生成的图像数据也可以用 DPO [[4]](https://arxiv.org/abs/2311.12908)、差分训练 [[5]](https://arxiv.org/abs/2412.12888) 等方式赋予模型自身,那就是另外一个有趣的探索方向了。 diff --git a/docs/zh/Research_Tutorial/train_from_scratch.md b/docs/zh/Research_Tutorial/train_from_scratch.md new file mode 100644 index 0000000000000000000000000000000000000000..c89dce46dda8c6bf911fa0f63e75de40f75e6eb7 --- /dev/null +++ b/docs/zh/Research_Tutorial/train_from_scratch.md @@ -0,0 +1,477 @@ +# 从零开始训练模型 + +DiffSynth-Studio 的训练引擎支持从零开始训练基础模型,本文介绍如何从零开始训练一个参数量仅为 0.1B 的小型文生图模型。 + +## 1. 构建模型结构 + +### 1.1 Diffusion 模型 + +从 UNet [[1]](https://arxiv.org/abs/1505.04597) [[2]](https://arxiv.org/abs/2112.10752) 到 DiT [[3]](https://arxiv.org/abs/2212.09748) [[4]](https://arxiv.org/abs/2403.03206),Diffusion 的主流模型结构经历了多次演变。通常,一个 Diffusion 模型的输入包括: + +* 图像张量(`latents`):图像的编码,由 VAE 模型产生,含有部分噪声 +* 文本张量(`prompt_embeds`):文本的编码,由文本编码器产生 +* 时间步(`timestep`):标量,用于标记当前处于 Diffusion 过程的哪个阶段 + +模型的输出是与图像张量形状相同的张量,表示模型预测的去噪方向,关于 Diffusion 模型理论的细节,请参考 [Diffusion 模型基本原理](../Training/Understanding_Diffusion_models.md)。在本文中,我们构建一个仅含 0.1B 参数的 DiT 模型:`AAADiT`。 + +
+模型结构代码 + +```python +import torch, accelerate +from PIL import Image +from typing import Union +from tqdm import tqdm +from einops import rearrange, repeat + +from transformers import AutoProcessor, AutoTokenizer +from diffsynth.core import ModelConfig, gradient_checkpoint_forward, attention_forward, UnifiedDataset, load_model +from diffsynth.diffusion import FlowMatchScheduler, DiffusionTrainingModule, FlowMatchSFTLoss, ModelLogger, launch_training_task +from diffsynth.diffusion.base_pipeline import BasePipeline, PipelineUnit +from diffsynth.models.general_modules import TimestepEmbeddings +from diffsynth.models.z_image_text_encoder import ZImageTextEncoder +from diffsynth.models.flux2_vae import Flux2VAE + + +class AAAPositionalEmbedding(torch.nn.Module): + def __init__(self, height=16, width=16, dim=1024): + super().__init__() + self.image_emb = torch.nn.Parameter(torch.randn((1, dim, height, width))) + self.text_emb = torch.nn.Parameter(torch.randn((dim,))) + + def forward(self, image, text): + height, width = image.shape[-2:] + image_emb = self.image_emb.to(device=image.device, dtype=image.dtype) + image_emb = torch.nn.functional.interpolate(image_emb, size=(height, width), mode="bilinear") + image_emb = rearrange(image_emb, "B C H W -> B (H W) C") + text_emb = self.text_emb.to(device=text.device, dtype=text.dtype) + text_emb = repeat(text_emb, "C -> B L C", B=text.shape[0], L=text.shape[1]) + emb = torch.concat([image_emb, text_emb], dim=1) + return emb + + +class AAABlock(torch.nn.Module): + def __init__(self, dim=1024, num_heads=32): + super().__init__() + self.norm_attn = torch.nn.RMSNorm(dim, elementwise_affine=False) + self.to_q = torch.nn.Linear(dim, dim) + self.to_k = torch.nn.Linear(dim, dim) + self.to_v = torch.nn.Linear(dim, dim) + self.to_out = torch.nn.Linear(dim, dim) + self.norm_mlp = torch.nn.RMSNorm(dim, elementwise_affine=False) + self.ff = torch.nn.Sequential( + torch.nn.Linear(dim, dim*3), + torch.nn.SiLU(), + torch.nn.Linear(dim*3, dim), + ) + self.to_gate = torch.nn.Linear(dim, dim * 2) + self.num_heads = num_heads + + def attention(self, emb, pos_emb): + emb = self.norm_attn(emb + pos_emb) + q, k, v = self.to_q(emb), self.to_k(emb), self.to_v(emb) + emb = attention_forward( + q, k, v, + q_pattern="b s (n d)", k_pattern="b s (n d)", v_pattern="b s (n d)", out_pattern="b s (n d)", + dims={"n": self.num_heads}, + ) + emb = self.to_out(emb) + return emb + + def feed_forward(self, emb, pos_emb): + emb = self.norm_mlp(emb + pos_emb) + emb = self.ff(emb) + return emb + + def forward(self, emb, pos_emb, t_emb): + gate_attn, gate_mlp = self.to_gate(t_emb).chunk(2, dim=-1) + emb = emb + self.attention(emb, pos_emb) * (1 + gate_attn) + emb = emb + self.feed_forward(emb, pos_emb) * (1 + gate_mlp) + return emb + + +class AAADiT(torch.nn.Module): + def __init__(self, dim=1024): + super().__init__() + self.pos_embedder = AAAPositionalEmbedding(dim=dim) + self.timestep_embedder = TimestepEmbeddings(256, dim) + self.image_embedder = torch.nn.Sequential(torch.nn.Linear(128, dim), torch.nn.LayerNorm(dim)) + self.text_embedder = torch.nn.Sequential(torch.nn.Linear(1024, dim), torch.nn.LayerNorm(dim)) + self.blocks = torch.nn.ModuleList([AAABlock(dim) for _ in range(10)]) + self.proj_out = torch.nn.Linear(dim, 128) + + def forward( + self, + latents, + prompt_embeds, + timestep, + use_gradient_checkpointing=False, + use_gradient_checkpointing_offload=False, + ): + pos_emb = self.pos_embedder(latents, prompt_embeds) + t_emb = self.timestep_embedder(timestep, dtype=latents.dtype).view(1, 1, -1) + image = self.image_embedder(rearrange(latents, "B C H W -> B (H W) C")) + text = self.text_embedder(prompt_embeds) + emb = torch.concat([image, text], dim=1) + for block_id, block in enumerate(self.blocks): + emb = gradient_checkpoint_forward( + block, + use_gradient_checkpointing=use_gradient_checkpointing, + use_gradient_checkpointing_offload=use_gradient_checkpointing_offload, + emb=emb, + pos_emb=pos_emb, + t_emb=t_emb, + ) + emb = emb[:, :latents.shape[-1] * latents.shape[-2]] + emb = self.proj_out(emb) + emb = rearrange(emb, "B (H W) C -> B C H W", W=latents.shape[-1]) + return emb +``` + +
+ +### 1.2 编解码器模型 + +除了用于去噪的 Diffusion 模型以外,我们还需要另外两个模型: + +* 文本编码器:用于将文本编码为张量。我们采用 [Qwen/Qwen3-0.6B](https://modelscope.cn/models/Qwen/Qwen3-0.6B) 模型。 +* VAE 编解码器:编码器部分用于将图像编码为张量,解码器部分用于将图像张量解码为图像。我们采用 [black-forest-labs/FLUX.2-klein-4B](https://modelscope.cn/models/black-forest-labs/FLUX.2-klein-4B) 中的 VAE 模型。 + +这两个模型的结构都已集成在 DiffSynth-Studio 中,分别位于 [/diffsynth/models/z_image_text_encoder.py](https://github.com/modelscope/DiffSynth-Studio/blob/main/diffsynth/models/z_image_text_encoder.py) 和 [/diffsynth/models/flux2_vae.py](https://github.com/modelscope/DiffSynth-Studio/blob/main/diffsynth/models/flux2_vae.py),因此我们不需要修改任何代码。 + +## 2. 构建 Pipeline + +我们在文档 [接入 Pipeline](../Developer_Guide/Building_a_Pipeline.md) 中介绍了如何构建一个模型 Pipeline,对于本文中的模型,我们也需要构建一个 Pipeline,连接文本编码器、Diffusion 模型、VAE 编解码器。 + +
+Pipeline 代码 + +```python +class AAAImagePipeline(BasePipeline): + def __init__(self, device="cuda", torch_dtype=torch.bfloat16): + super().__init__( + device=device, torch_dtype=torch_dtype, + height_division_factor=16, width_division_factor=16, + ) + self.scheduler = FlowMatchScheduler("FLUX.2") + self.text_encoder: ZImageTextEncoder = None + self.dit: AAADiT = None + self.vae: Flux2VAE = None + self.tokenizer: AutoProcessor = None + self.in_iteration_models = ("dit",) + self.units = [ + AAAUnit_PromptEmbedder(), + AAAUnit_NoiseInitializer(), + AAAUnit_InputImageEmbedder(), + ] + self.model_fn = model_fn_aaa + + @staticmethod + def from_pretrained( + torch_dtype: torch.dtype = torch.bfloat16, + device: Union[str, torch.device] = "cuda", + model_configs: list[ModelConfig] = [], + tokenizer_config: ModelConfig = None, + vram_limit: float = None, + ): + # Initialize pipeline + pipe = AAAImagePipeline(device=device, torch_dtype=torch_dtype) + model_pool = pipe.download_and_load_models(model_configs, vram_limit) + + # Fetch models + pipe.text_encoder = model_pool.fetch_model("z_image_text_encoder") + pipe.dit = model_pool.fetch_model("aaa_dit") + pipe.vae = model_pool.fetch_model("flux2_vae") + if tokenizer_config is not None: + tokenizer_config.download_if_necessary() + pipe.tokenizer = AutoTokenizer.from_pretrained(tokenizer_config.path) + + # VRAM Management + pipe.vram_management_enabled = pipe.check_vram_management_state() + return pipe + + @torch.no_grad() + def __call__( + self, + # Prompt + prompt: str, + negative_prompt: str = "", + cfg_scale: float = 1.0, + # Image + input_image: Image.Image = None, + denoising_strength: float = 1.0, + # Shape + height: int = 1024, + width: int = 1024, + # Randomness + seed: int = None, + rand_device: str = "cpu", + # Steps + num_inference_steps: int = 30, + # Progress bar + progress_bar_cmd = tqdm, + ): + self.scheduler.set_timesteps(num_inference_steps, denoising_strength=denoising_strength, dynamic_shift_len=height//16*width//16) + + # Parameters + inputs_posi = {"prompt": prompt} + inputs_nega = {"negative_prompt": negative_prompt} + inputs_shared = { + "cfg_scale": cfg_scale, + "input_image": input_image, "denoising_strength": denoising_strength, + "height": height, "width": width, + "seed": seed, "rand_device": rand_device, + "num_inference_steps": num_inference_steps, + } + for unit in self.units: + inputs_shared, inputs_posi, inputs_nega = self.unit_runner(unit, self, inputs_shared, inputs_posi, inputs_nega) + + # Denoise + self.load_models_to_device(self.in_iteration_models) + models = {name: getattr(self, name) for name in self.in_iteration_models} + for progress_id, timestep in enumerate(progress_bar_cmd(self.scheduler.timesteps)): + timestep = timestep.unsqueeze(0).to(dtype=self.torch_dtype, device=self.device) + noise_pred = self.cfg_guided_model_fn( + self.model_fn, cfg_scale, + inputs_shared, inputs_posi, inputs_nega, + **models, timestep=timestep, progress_id=progress_id + ) + inputs_shared["latents"] = self.step(self.scheduler, progress_id=progress_id, noise_pred=noise_pred, **inputs_shared) + + # Decode + self.load_models_to_device(['vae']) + image = self.vae.decode(inputs_shared["latents"]) + image = self.vae_output_to_image(image) + self.load_models_to_device([]) + + return image + + +class AAAUnit_PromptEmbedder(PipelineUnit): + def __init__(self): + super().__init__( + seperate_cfg=True, + input_params_posi={"prompt": "prompt"}, + input_params_nega={"prompt": "negative_prompt"}, + output_params=("prompt_embeds",), + onload_model_names=("text_encoder",) + ) + self.hidden_states_layers = (-1,) + + def process(self, pipe: AAAImagePipeline, prompt): + pipe.load_models_to_device(self.onload_model_names) + text = pipe.tokenizer.apply_chat_template( + [{"role": "user", "content": prompt}], + tokenize=False, + add_generation_prompt=True, + enable_thinking=False, + ) + inputs = pipe.tokenizer(text, return_tensors="pt", padding="max_length", truncation=True, max_length=128).to(pipe.device) + output = pipe.text_encoder(**inputs, output_hidden_states=True, use_cache=False) + prompt_embeds = torch.concat([output.hidden_states[k] for k in self.hidden_states_layers], dim=-1) + return {"prompt_embeds": prompt_embeds} + + +class AAAUnit_NoiseInitializer(PipelineUnit): + def __init__(self): + super().__init__( + input_params=("height", "width", "seed", "rand_device"), + output_params=("noise",), + ) + + def process(self, pipe: AAAImagePipeline, height, width, seed, rand_device): + noise = pipe.generate_noise((1, 128, height//16, width//16), seed=seed, rand_device=rand_device, rand_torch_dtype=pipe.torch_dtype) + return {"noise": noise} + + +class AAAUnit_InputImageEmbedder(PipelineUnit): + def __init__(self): + super().__init__( + input_params=("input_image", "noise"), + output_params=("latents", "input_latents"), + onload_model_names=("vae",) + ) + + def process(self, pipe: AAAImagePipeline, input_image, noise): + if input_image is None: + return {"latents": noise, "input_latents": None} + pipe.load_models_to_device(['vae']) + image = pipe.preprocess_image(input_image) + input_latents = pipe.vae.encode(image) + if pipe.scheduler.training: + return {"latents": noise, "input_latents": input_latents} + else: + latents = pipe.scheduler.add_noise(input_latents, noise, timestep=pipe.scheduler.timesteps[0]) + return {"latents": latents, "input_latents": input_latents} + + +def model_fn_aaa( + dit: AAADiT, + latents=None, + prompt_embeds=None, + timestep=None, + use_gradient_checkpointing=False, + use_gradient_checkpointing_offload=False, + **kwargs, +): + model_output = dit( + latents, + prompt_embeds, + timestep, + use_gradient_checkpointing=use_gradient_checkpointing, + use_gradient_checkpointing_offload=use_gradient_checkpointing_offload, + ) + return model_output +``` + +
+ +## 3. 准备数据集 + +为了快速验证训练效果,我们使用数据集 [宝可梦-第一世代](https://modelscope.cn/datasets/DiffSynth-Studio/pokemon-gen1),这个数据集转载自开源项目 [pokemon-dataset-zh](https://github.com/42arch/pokemon-dataset-zh),包含从妙蛙种子到梦幻的 151 个第一世代宝可梦。如果你想使用其他数据集,请参考文档 [准备数据集](../Pipeline_Usage/Model_Training.md#准备数据集) 和 [`diffsynth.core.data`](../API_Reference/core/data.md)。 + +```shell +modelscope download --dataset DiffSynth-Studio/pokemon-gen1 --local_dir ./data +``` + +### 4. 开始训练 + +训练过程可使用 Pipeline 快速实现,我们已将完整的代码放在 [../Research_Tutorial/train_from_scratch.py](https://github.com/modelscope/DiffSynth-Studio/blob/main/docs/zh/Research_Tutorial/train_from_scratch.py),可直接通过 `python docs/zh/Research_Tutorial/train_from_scratch.py` 开始单 GPU 训练。 + +如需开启多 GPU 并行训练,请运行 `accelerate config` 设置相关参数,然后使用命令 `accelerate launch docs/zh/Research_Tutorial/train_from_scratch.py` 开始训练。 + +这个训练脚本没有设置停止条件,请在需要时手动关闭。模型在训练大约 6 万步后收敛,单 GPU 训练需要 10~20 小时。 + + +
+训练代码 + +```python +class AAATrainingModule(DiffusionTrainingModule): + def __init__(self, device): + super().__init__() + self.pipe = AAAImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device=device, + model_configs=[ + ModelConfig(model_id="Qwen/Qwen3-0.6B", origin_file_pattern="model.safetensors"), + ModelConfig(model_id="black-forest-labs/FLUX.2-klein-4B", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + tokenizer_config=ModelConfig(model_id="Qwen/Qwen3-0.6B", origin_file_pattern="./"), + ) + self.pipe.dit = AAADiT().to(dtype=torch.bfloat16, device=device) + self.pipe.freeze_except(["dit"]) + self.pipe.scheduler.set_timesteps(1000, training=True) + + def forward(self, data): + inputs_posi = {"prompt": data["prompt"]} + inputs_nega = {"negative_prompt": ""} + inputs_shared = { + "input_image": data["image"], + "height": data["image"].size[1], + "width": data["image"].size[0], + "cfg_scale": 1, + "use_gradient_checkpointing": False, + "use_gradient_checkpointing_offload": False, + } + for unit in self.pipe.units: + inputs_shared, inputs_posi, inputs_nega = self.pipe.unit_runner(unit, self.pipe, inputs_shared, inputs_posi, inputs_nega) + loss = FlowMatchSFTLoss(self.pipe, **inputs_shared, **inputs_posi) + return loss + + +if __name__ == "__main__": + accelerator = accelerate.Accelerator(gradient_accumulation_steps=1) + dataset = UnifiedDataset( + base_path="data/images", + metadata_path="data/metadata_merged.csv", + max_data_items=10000000, + data_file_keys=("image",), + main_data_operator=UnifiedDataset.default_image_operator(base_path="data/images", height=256, width=256) + ) + model = AAATrainingModule(device=accelerator.device) + model_logger = ModelLogger( + "models/AAA/v1", + remove_prefix_in_ckpt="pipe.dit.", + ) + launch_training_task( + accelerator, dataset, model, model_logger, + learning_rate=2e-4, + num_workers=4, + save_steps=50000, + num_epochs=999999, + ) +``` + +
+ +## 5. 验证训练效果 + +如果你不想等待模型训练完成,可以直接下载[我们预先训练好的模型](https://modelscope.cn/models/DiffSynth-Studio/AAAMyModel)。 + +```shell +modelscope download --model DiffSynth-Studio/AAAMyModel step-600000.safetensors --local_dir models/DiffSynth-Studio/AAAMyModel +``` + +加载模型 + +```python +from diffsynth import load_model + +pipe = AAAImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Qwen/Qwen3-0.6B", origin_file_pattern="model.safetensors"), + ModelConfig(model_id="black-forest-labs/FLUX.2-klein-4B", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + tokenizer_config=ModelConfig(model_id="Qwen/Qwen3-0.6B", origin_file_pattern="./"), +) +pipe.dit = load_model(AAADiT, "models/DiffSynth-Studio/AAAMyModel/step-600000.safetensors", torch_dtype=torch.bfloat16, device="cuda") +``` + +模型推理,生成第一世代宝可梦“御三家”,此时模型生成的图像内容与训练数据基本一致。 + +```python +for seed, prompt in enumerate([ + "green, lizard, plant, Grass, Poison, seed on back, red eyes, smiling expression, short stout limbs, sharp claws", + "orange, cream, lizard, Fire, flame on tail tip, large eyes, smiling expression, cream-colored belly patch, sharp claws", + "蓝色,米色,棕色,乌龟,水系,龟壳,大眼睛,短四肢,卷曲尾巴", +]): + image = pipe( + prompt=prompt, + negative_prompt=" ", + num_inference_steps=30, + cfg_scale=10, + seed=seed, + height=256, width=256, + ) + image.save(f"image_{seed}.jpg") +``` + +|![Image](https://github.com/user-attachments/assets/3c620fbf-5d28-4a1a-b887-519d85ac7d1c)|![Image](https://github.com/user-attachments/assets/909efd4c-9e61-4b33-9321-39da0e499b00)|![Image](https://github.com/user-attachments/assets/f3474bcd-b474-4a90-a1ea-579f67e161e3)| +|-|-|-| + +模型推理,生成具有“锐利爪子”的宝可梦,此时不同的随机种子能够产生不同的图像结果。 + +```python +for seed, prompt in enumerate([ + "sharp claws", + "sharp claws", + "sharp claws", +]): + image = pipe( + prompt=prompt, + negative_prompt=" ", + num_inference_steps=30, + cfg_scale=10, + seed=seed+4, + height=256, width=256, + ) + image.save(f"image_sharp_claws_{seed}.jpg") +``` + +|![Image](https://github.com/user-attachments/assets/94862edd-96ae-4276-a38f-795249f11a13)|![Image](https://github.com/user-attachments/assets/b2291f23-20ba-42de-8bfd-76cb4afc6eea)|![Image](https://github.com/user-attachments/assets/f2aab9a4-85ec-498e-8039-648b1289796e)| +|-|-|-| + +现在,我们获得了一个 0.1B 的小型文生图模型,这个模型已经能够生成 151 个宝可梦,但无法生成其他图像内容。如果在此基础上增加数据量、模型参数量、GPU 数量,你就可以训练出一个更强大的文生图模型! diff --git a/docs/zh/Research_Tutorial/train_from_scratch.py b/docs/zh/Research_Tutorial/train_from_scratch.py new file mode 100644 index 0000000000000000000000000000000000000000..328c24d021c8230e05a05faa6cbad7ff1c82584d --- /dev/null +++ b/docs/zh/Research_Tutorial/train_from_scratch.py @@ -0,0 +1,341 @@ +import torch, accelerate +from PIL import Image +from typing import Union +from tqdm import tqdm +from einops import rearrange, repeat + +from transformers import AutoProcessor, AutoTokenizer +from diffsynth.core import ModelConfig, gradient_checkpoint_forward, attention_forward, UnifiedDataset, load_model +from diffsynth.diffusion import FlowMatchScheduler, DiffusionTrainingModule, FlowMatchSFTLoss, ModelLogger, launch_training_task +from diffsynth.diffusion.base_pipeline import BasePipeline, PipelineUnit +from diffsynth.models.general_modules import TimestepEmbeddings +from diffsynth.models.z_image_text_encoder import ZImageTextEncoder +from diffsynth.models.flux2_vae import Flux2VAE + + +class AAAPositionalEmbedding(torch.nn.Module): + def __init__(self, height=16, width=16, dim=1024): + super().__init__() + self.image_emb = torch.nn.Parameter(torch.randn((1, dim, height, width))) + self.text_emb = torch.nn.Parameter(torch.randn((dim,))) + + def forward(self, image, text): + height, width = image.shape[-2:] + image_emb = self.image_emb.to(device=image.device, dtype=image.dtype) + image_emb = torch.nn.functional.interpolate(image_emb, size=(height, width), mode="bilinear") + image_emb = rearrange(image_emb, "B C H W -> B (H W) C") + text_emb = self.text_emb.to(device=text.device, dtype=text.dtype) + text_emb = repeat(text_emb, "C -> B L C", B=text.shape[0], L=text.shape[1]) + emb = torch.concat([image_emb, text_emb], dim=1) + return emb + + +class AAABlock(torch.nn.Module): + def __init__(self, dim=1024, num_heads=32): + super().__init__() + self.norm_attn = torch.nn.RMSNorm(dim, elementwise_affine=False) + self.to_q = torch.nn.Linear(dim, dim) + self.to_k = torch.nn.Linear(dim, dim) + self.to_v = torch.nn.Linear(dim, dim) + self.to_out = torch.nn.Linear(dim, dim) + self.norm_mlp = torch.nn.RMSNorm(dim, elementwise_affine=False) + self.ff = torch.nn.Sequential( + torch.nn.Linear(dim, dim*3), + torch.nn.SiLU(), + torch.nn.Linear(dim*3, dim), + ) + self.to_gate = torch.nn.Linear(dim, dim * 2) + self.num_heads = num_heads + + def attention(self, emb, pos_emb): + emb = self.norm_attn(emb + pos_emb) + q, k, v = self.to_q(emb), self.to_k(emb), self.to_v(emb) + emb = attention_forward( + q, k, v, + q_pattern="b s (n d)", k_pattern="b s (n d)", v_pattern="b s (n d)", out_pattern="b s (n d)", + dims={"n": self.num_heads}, + ) + emb = self.to_out(emb) + return emb + + def feed_forward(self, emb, pos_emb): + emb = self.norm_mlp(emb + pos_emb) + emb = self.ff(emb) + return emb + + def forward(self, emb, pos_emb, t_emb): + gate_attn, gate_mlp = self.to_gate(t_emb).chunk(2, dim=-1) + emb = emb + self.attention(emb, pos_emb) * (1 + gate_attn) + emb = emb + self.feed_forward(emb, pos_emb) * (1 + gate_mlp) + return emb + + +class AAADiT(torch.nn.Module): + def __init__(self, dim=1024): + super().__init__() + self.pos_embedder = AAAPositionalEmbedding(dim=dim) + self.timestep_embedder = TimestepEmbeddings(256, dim) + self.image_embedder = torch.nn.Sequential(torch.nn.Linear(128, dim), torch.nn.LayerNorm(dim)) + self.text_embedder = torch.nn.Sequential(torch.nn.Linear(1024, dim), torch.nn.LayerNorm(dim)) + self.blocks = torch.nn.ModuleList([AAABlock(dim) for _ in range(10)]) + self.proj_out = torch.nn.Linear(dim, 128) + + def forward( + self, + latents, + prompt_embeds, + timestep, + use_gradient_checkpointing=False, + use_gradient_checkpointing_offload=False, + ): + pos_emb = self.pos_embedder(latents, prompt_embeds) + t_emb = self.timestep_embedder(timestep, dtype=latents.dtype).view(1, 1, -1) + image = self.image_embedder(rearrange(latents, "B C H W -> B (H W) C")) + text = self.text_embedder(prompt_embeds) + emb = torch.concat([image, text], dim=1) + for block_id, block in enumerate(self.blocks): + emb = gradient_checkpoint_forward( + block, + use_gradient_checkpointing=use_gradient_checkpointing, + use_gradient_checkpointing_offload=use_gradient_checkpointing_offload, + emb=emb, + pos_emb=pos_emb, + t_emb=t_emb, + ) + emb = emb[:, :latents.shape[-1] * latents.shape[-2]] + emb = self.proj_out(emb) + emb = rearrange(emb, "B (H W) C -> B C H W", W=latents.shape[-1]) + return emb + + +class AAAImagePipeline(BasePipeline): + def __init__(self, device="cuda", torch_dtype=torch.bfloat16): + super().__init__( + device=device, torch_dtype=torch_dtype, + height_division_factor=16, width_division_factor=16, + ) + self.scheduler = FlowMatchScheduler("FLUX.2") + self.text_encoder: ZImageTextEncoder = None + self.dit: AAADiT = None + self.vae: Flux2VAE = None + self.tokenizer: AutoProcessor = None + self.in_iteration_models = ("dit",) + self.units = [ + AAAUnit_PromptEmbedder(), + AAAUnit_NoiseInitializer(), + AAAUnit_InputImageEmbedder(), + ] + self.model_fn = model_fn_aaa + + @staticmethod + def from_pretrained( + torch_dtype: torch.dtype = torch.bfloat16, + device: Union[str, torch.device] = "cuda", + model_configs: list[ModelConfig] = [], + tokenizer_config: ModelConfig = None, + vram_limit: float = None, + ): + # Initialize pipeline + pipe = AAAImagePipeline(device=device, torch_dtype=torch_dtype) + model_pool = pipe.download_and_load_models(model_configs, vram_limit) + + # Fetch models + pipe.text_encoder = model_pool.fetch_model("z_image_text_encoder") + pipe.dit = model_pool.fetch_model("aaa_dit") + pipe.vae = model_pool.fetch_model("flux2_vae") + if tokenizer_config is not None: + tokenizer_config.download_if_necessary() + pipe.tokenizer = AutoTokenizer.from_pretrained(tokenizer_config.path) + + # VRAM Management + pipe.vram_management_enabled = pipe.check_vram_management_state() + return pipe + + @torch.no_grad() + def __call__( + self, + # Prompt + prompt: str, + negative_prompt: str = "", + cfg_scale: float = 1.0, + # Image + input_image: Image.Image = None, + denoising_strength: float = 1.0, + # Shape + height: int = 1024, + width: int = 1024, + # Randomness + seed: int = None, + rand_device: str = "cpu", + # Steps + num_inference_steps: int = 30, + # Progress bar + progress_bar_cmd = tqdm, + ): + self.scheduler.set_timesteps(num_inference_steps, denoising_strength=denoising_strength, dynamic_shift_len=height//16*width//16) + + # Parameters + inputs_posi = {"prompt": prompt} + inputs_nega = {"negative_prompt": negative_prompt} + inputs_shared = { + "cfg_scale": cfg_scale, + "input_image": input_image, "denoising_strength": denoising_strength, + "height": height, "width": width, + "seed": seed, "rand_device": rand_device, + "num_inference_steps": num_inference_steps, + } + for unit in self.units: + inputs_shared, inputs_posi, inputs_nega = self.unit_runner(unit, self, inputs_shared, inputs_posi, inputs_nega) + + # Denoise + self.load_models_to_device(self.in_iteration_models) + models = {name: getattr(self, name) for name in self.in_iteration_models} + for progress_id, timestep in enumerate(progress_bar_cmd(self.scheduler.timesteps)): + timestep = timestep.unsqueeze(0).to(dtype=self.torch_dtype, device=self.device) + noise_pred = self.cfg_guided_model_fn( + self.model_fn, cfg_scale, + inputs_shared, inputs_posi, inputs_nega, + **models, timestep=timestep, progress_id=progress_id + ) + inputs_shared["latents"] = self.step(self.scheduler, progress_id=progress_id, noise_pred=noise_pred, **inputs_shared) + + # Decode + self.load_models_to_device(['vae']) + image = self.vae.decode(inputs_shared["latents"]) + image = self.vae_output_to_image(image) + self.load_models_to_device([]) + + return image + + +class AAAUnit_PromptEmbedder(PipelineUnit): + def __init__(self): + super().__init__( + seperate_cfg=True, + input_params_posi={"prompt": "prompt"}, + input_params_nega={"prompt": "negative_prompt"}, + output_params=("prompt_embeds",), + onload_model_names=("text_encoder",) + ) + self.hidden_states_layers = (-1,) + + def process(self, pipe: AAAImagePipeline, prompt): + pipe.load_models_to_device(self.onload_model_names) + text = pipe.tokenizer.apply_chat_template( + [{"role": "user", "content": prompt}], + tokenize=False, + add_generation_prompt=True, + enable_thinking=False, + ) + inputs = pipe.tokenizer(text, return_tensors="pt", padding="max_length", truncation=True, max_length=128).to(pipe.device) + output = pipe.text_encoder(**inputs, output_hidden_states=True, use_cache=False) + prompt_embeds = torch.concat([output.hidden_states[k] for k in self.hidden_states_layers], dim=-1) + return {"prompt_embeds": prompt_embeds} + + +class AAAUnit_NoiseInitializer(PipelineUnit): + def __init__(self): + super().__init__( + input_params=("height", "width", "seed", "rand_device"), + output_params=("noise",), + ) + + def process(self, pipe: AAAImagePipeline, height, width, seed, rand_device): + noise = pipe.generate_noise((1, 128, height//16, width//16), seed=seed, rand_device=rand_device, rand_torch_dtype=pipe.torch_dtype) + return {"noise": noise} + + +class AAAUnit_InputImageEmbedder(PipelineUnit): + def __init__(self): + super().__init__( + input_params=("input_image", "noise"), + output_params=("latents", "input_latents"), + onload_model_names=("vae",) + ) + + def process(self, pipe: AAAImagePipeline, input_image, noise): + if input_image is None: + return {"latents": noise, "input_latents": None} + pipe.load_models_to_device(['vae']) + image = pipe.preprocess_image(input_image) + input_latents = pipe.vae.encode(image) + if pipe.scheduler.training: + return {"latents": noise, "input_latents": input_latents} + else: + latents = pipe.scheduler.add_noise(input_latents, noise, timestep=pipe.scheduler.timesteps[0]) + return {"latents": latents, "input_latents": input_latents} + + +def model_fn_aaa( + dit: AAADiT, + latents=None, + prompt_embeds=None, + timestep=None, + use_gradient_checkpointing=False, + use_gradient_checkpointing_offload=False, + **kwargs, +): + model_output = dit( + latents, + prompt_embeds, + timestep, + use_gradient_checkpointing=use_gradient_checkpointing, + use_gradient_checkpointing_offload=use_gradient_checkpointing_offload, + ) + return model_output + + +class AAATrainingModule(DiffusionTrainingModule): + def __init__(self, device): + super().__init__() + self.pipe = AAAImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device=device, + model_configs=[ + ModelConfig(model_id="Qwen/Qwen3-0.6B", origin_file_pattern="model.safetensors"), + ModelConfig(model_id="black-forest-labs/FLUX.2-klein-4B", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + tokenizer_config=ModelConfig(model_id="Qwen/Qwen3-0.6B", origin_file_pattern="./"), + ) + self.pipe.dit = AAADiT().to(dtype=torch.bfloat16, device=device) + self.pipe.freeze_except(["dit"]) + self.pipe.scheduler.set_timesteps(1000, training=True) + + def forward(self, data): + inputs_posi = {"prompt": data["prompt"]} + inputs_nega = {"negative_prompt": ""} + inputs_shared = { + "input_image": data["image"], + "height": data["image"].size[1], + "width": data["image"].size[0], + "cfg_scale": 1, + "use_gradient_checkpointing": False, + "use_gradient_checkpointing_offload": False, + } + for unit in self.pipe.units: + inputs_shared, inputs_posi, inputs_nega = self.pipe.unit_runner(unit, self.pipe, inputs_shared, inputs_posi, inputs_nega) + loss = FlowMatchSFTLoss(self.pipe, **inputs_shared, **inputs_posi) + return loss + + +if __name__ == "__main__": + accelerator = accelerate.Accelerator(gradient_accumulation_steps=1) + dataset = UnifiedDataset( + base_path="data/images", + metadata_path="data/metadata_merged.csv", + max_data_items=10000000, + data_file_keys=("image",), + main_data_operator=UnifiedDataset.default_image_operator(base_path="data/images", height=256, width=256) + ) + model = AAATrainingModule(device=accelerator.device) + model_logger = ModelLogger( + "models/AAA/v1", + remove_prefix_in_ckpt="pipe.dit.", + ) + launch_training_task( + accelerator, dataset, model, model_logger, + learning_rate=2e-4, + num_workers=4, + save_steps=50000, + num_epochs=999999, + ) \ No newline at end of file diff --git a/docs/zh/Training/DeepSpeed.md b/docs/zh/Training/DeepSpeed.md new file mode 100644 index 0000000000000000000000000000000000000000..fca89429abc027a597c10bd9d860db9ec6b25c0a --- /dev/null +++ b/docs/zh/Training/DeepSpeed.md @@ -0,0 +1,128 @@ +# 启用 DeepSpeed + +训练框架基于 `accelerate` 与 `deepspeed` 构建,因此原生地支持启用 DeepSpeed 的训练特性。 + +## 配置训练参数 + +DeepSpeed 参数可通过 `accelerate config` 在终端交互式地配置。 + +* DeepSpeed ZeRO Stage 1:对优化器状态进行分片,在与 DDP(分布式数据并行)保持速度一致的同时,提供内存优化。 +* DeepSpeed ZeRO Stage 2:对优化器状态和梯度进行分片,在与 DDP 保持速度一致的同时,提供更显著的内存优化。 +* DeepSpeed ZeRO Stage 2 Offload:将优化器状态和梯度卸载到 CPU。会增加分布式通信量以及 GPU-CPU 设备间的数据传输开销,但能带来大幅内存节省。 +* DeepSpeed ZeRO Stage 3:对优化器状态、梯度、模型参数(可选包括激活值)进行分片。会增加分布式通信量,但能提供更强的内存优化效果。 +* DeepSpeed ZeRO Stage 3 Offload:将优化器状态、梯度、模型参数(可选包括激活值)全部卸载到 CPU。会显著增加分布式通信量和 GPU-CPU 数据传输开销,但可实现更极致的内存节省。 + +## DeepSpeed ZeRO Stage 3 + +DeepSpeed ZeRO Stage 3 是多卡训练中显存占用较小的训练模式,但需要修改部分配置文件。我们为部分模型提供了样例,主要通过 `--config_file` 指定 `deepspeed` 配置。 + +需要注意的是,`deepspeed_zero3_offload` 模式与 `pytorch` 原生的梯度检查点机制不兼容,我们为此对 `deepspeed` 的`checkpointing` 接口做了适配。用户需要在 `deepspeed` 配置中填写 `activation_checkpointing` 字段以启用梯度检查点。 + +以下为 Qwen-Image 模型的低显存模型训练脚本,脚本中同时开启了两阶段拆分训练: + +```shell +accelerate launch examples/qwen_image/model_training/train.py \ + --dataset_base_path data/example_image_dataset \ + --dataset_metadata_path data/example_image_dataset/metadata.csv \ + --max_pixels 1048576 \ + --dataset_repeat 1 \ + --model_id_with_origin_paths "Qwen/Qwen-Image:text_encoder/model*.safetensors,Qwen/Qwen-Image:vae/diffusion_pytorch_model.safetensors" \ + --learning_rate 1e-4 \ + --num_epochs 5 \ + --remove_prefix_in_ckpt "pipe.dit." \ + --output_path "./models/train/Qwen-Image_lora-splited-cache" \ + --lora_base_model "dit" \ + --lora_target_modules "to_q,to_k,to_v,add_q_proj,add_k_proj,add_v_proj,to_out.0,to_add_out,img_mlp.net.2,img_mod.1,txt_mlp.net.2,txt_mod.1" \ + --lora_rank 32 \ + --task "sft:data_process" \ + --use_gradient_checkpointing \ + --dataset_num_workers 8 \ + --find_unused_parameters + +accelerate launch --config_file examples/qwen_image/model_training/special/low_vram_training/deepspeed_zero3_cpuoffload.yaml examples/qwen_image/model_training/train.py \ + --dataset_base_path "./models/train/Qwen-Image_lora-splited-cache" \ + --max_pixels 1048576 \ + --dataset_repeat 50 \ + --model_id_with_origin_paths "Qwen/Qwen-Image:transformer/diffusion_pytorch_model*.safetensors" \ + --learning_rate 1e-4 \ + --num_epochs 5 \ + --remove_prefix_in_ckpt "pipe.dit." \ + --output_path "./models/train/Qwen-Image_lora" \ + --lora_base_model "dit" \ + --lora_target_modules "to_q,to_k,to_v,add_q_proj,add_k_proj,add_v_proj,to_out.0,to_add_out,img_mlp.net.2,img_mod.1,txt_mlp.net.2,txt_mod.1" \ + --lora_rank 32 \ + --task "sft:train" \ + --use_gradient_checkpointing \ + --dataset_num_workers 8 \ + --find_unused_parameters \ + --initialize_model_on_cpu +``` + +其中,`accelerate` 和 `deepspeed` 的配置文件如下: + +```yaml +compute_environment: LOCAL_MACHINE +debug: true +deepspeed_config: + deepspeed_config_file: examples/qwen_image/model_training/special/low_vram_training/ds_z3_cpuoffload.json + zero3_init_flag: true +distributed_type: DEEPSPEED +downcast_bf16: 'no' +enable_cpu_affinity: false +machine_rank: 0 +main_training_function: main +num_machines: 1 +num_processes: 1 +rdzv_backend: static +same_network: true +tpu_env: [] +tpu_use_cluster: false +tpu_use_sudo: false +use_cpu: false +``` + +```json +{ + "fp16": { + "enabled": "auto", + "loss_scale": 0, + "loss_scale_window": 1000, + "initial_scale_power": 16, + "hysteresis": 2, + "min_loss_scale": 1 + }, + "bf16": { + "enabled": "auto" + }, + "zero_optimization": { + "stage": 3, + "offload_optimizer": { + "device": "cpu", + "pin_memory": true + }, + "offload_param": { + "device": "cpu", + "pin_memory": true + }, + "overlap_comm": false, + "contiguous_gradients": true, + "sub_group_size": 1e9, + "reduce_bucket_size": 5e7, + "stage3_prefetch_bucket_size": 5e7, + "stage3_param_persistence_threshold": 1e5, + "stage3_max_live_parameters": 1e8, + "stage3_max_reuse_distance": 1e8, + "stage3_gather_16bit_weights_on_model_save": true + }, + "activation_checkpointing": { + "partition_activations": false, + "cpu_checkpointing": false, + "contiguous_memory_optimization": false + }, + "gradient_accumulation_steps": "auto", + "gradient_clipping": "auto", + "train_batch_size": "auto", + "train_micro_batch_size_per_gpu": "auto", + "wall_clock_breakdown": false +} +``` diff --git a/docs/zh/Training/Differential_LoRA.md b/docs/zh/Training/Differential_LoRA.md new file mode 100644 index 0000000000000000000000000000000000000000..bdbd22f6436741457af4d87caebd8a865e6dd673 --- /dev/null +++ b/docs/zh/Training/Differential_LoRA.md @@ -0,0 +1,46 @@ +# 差分 LoRA 训练 + +差分 LoRA 训练是一种特殊的 LoRA 训练方式,旨在让模型学习图像之间的差异。 + +## 训练方案 + +我们未能找到差分 LoRA 训练最早由谁提出,这一技术已经在开源社区中流传甚久。 + +假设我们有两张内容相似的图像:图 1 和图 2。例如两张图中分别有一辆车,但图 1 中画面细节更少,图 2 中画面细节更多。在差分 LoRA 训练中,我们进行两步训练: + +* 以图 1 为训练数据,以[标准监督训练](../Training/Supervised_Fine_Tuning.md)的方式,训练 LoRA 1 +* 以图 2 为训练数据,将 LoRA 1 融入基础模型后,以[标准监督训练](../Training/Supervised_Fine_Tuning.md)的方式,训练 LoRA 2 + +在第一步训练中,由于训练数据仅有一张图,LoRA 模型很容易过拟合,因此训练完成后,LoRA 1 会让模型毫不犹豫地生成图 1,无论随机种子是什么。在第二步训练中,LoRA 模型再次过拟合,因此训练完成后,在 LoRA 1 和 LoRA 2 的共同作用下,模型会毫不犹豫地生成图 2。简言之: + +* LoRA 1 = 生成图 1 +* LoRA 1 + LoRA 2 = 生成图 2 + +此时丢弃 LoRA 1,只使用 LoRA 2,模型将会理解图 1 和图 2 的差异,使生成的内容倾向于“更不像图1,更像图 2”。 + +单一训练数据可以保证模型能够过拟合到训练数据上,但稳定性不足。为了提高稳定性,我们可以用多个图像对(image pairs)进行训练,并将训练出的 LoRA 2 进行平均,得到效果更稳定的 LoRA。 + +用这一训练方案,可以训练出一些功能奇特的 LoRA 模型。例如,使用丑陋的和漂亮的图像对,训练提升图像美感的 LoRA;使用细节少的和细节丰富的图像对,训练增加图像细节的 LoRA。 + +## 模型效果 + +### 美学提升 + +我们用差分 LoRA 训练技术训练了几个美学提升 LoRA,可前往对应的模型页面查看生成效果。 + +* [DiffSynth-Studio/Qwen-Image-LoRA-ArtAug-v1](https://modelscope.cn/models/DiffSynth-Studio/Qwen-Image-LoRA-ArtAug-v1) +* [DiffSynth-Studio/ArtAug-lora-FLUX.1dev-v1](https://modelscope.cn/models/DiffSynth-Studio/ArtAug-lora-FLUX.1dev-v1) + +### 在蒸馏加速模型上训练 LoRA + +部分模型(例如 [Z-Image-Turbo](https://modelscope.cn/models/Tongyi-MAI/Z-Image-Turbo))已经过蒸馏加速训练,在蒸馏加速配置(关闭 CFG,步数为 8)下效果正常,在标准配置(开启 CFG,步数为 30)下效果崩坏。当在这样的基础模型上训练 LoRA 时,将会导致在蒸馏加速配置下效果崩坏,在标准配置下效果正常。 + +解决这个问题的一个方案是,先训练一个 LoRA(例如 [ostris/zimage_turbo_training_adapter](https://modelscope.cn/models/ostris/zimage_turbo_training_adapter)),令模型的蒸馏加速能力退化(在蒸馏加速配置下效果崩坏,在标准配置下效果正常),然后在此 LoRA 基础上训练新的 LoRA。但需注意的是,差分训练会让 LoRA 模型不再端到端地优化,其效果存在较大的不确定性。 + +## 在训练框架中使用差分 LoRA 训练 + +第一步的训练与普通 LoRA 训练没有任何差异,在第二步的训练命令中,通过 `--preset_lora_path` 参数填入第一步的 LoRA 模型文件路径,并将 `--preset_lora_model` 设置为与 `lora_base_model` 相同的参数,即可将 LoRA 1 加载到基础模型中。 + +## 框架设计思路 + +在训练框架中,`--preset_lora_path` 指向的模型在 `DiffusionTrainingModule` 的 `switch_pipe_to_training_mode` 中完成加载。 diff --git a/docs/zh/Training/Direct_Distill.md b/docs/zh/Training/Direct_Distill.md new file mode 100644 index 0000000000000000000000000000000000000000..48f25c70594138e78f1132ab32a3b02c093e061a --- /dev/null +++ b/docs/zh/Training/Direct_Distill.md @@ -0,0 +1,97 @@ +# 端到端的蒸馏加速训练 + +## 蒸馏加速训练 + +Diffusion 模型的推理过程通常需要多步迭代,在提升生成效果的同时也让生成过程变得缓慢。通过蒸馏加速训练,可以减少生成清晰内容所需的步数。蒸馏加速训练技术的本质训练目标是让少量步数的生成效果与大量步数的生成效果对齐。 + +蒸馏加速训练的方法是多样的,例如 + +* 对抗式训练 ADD(Adversarial Diffusion Distillation) + * 论文:https://arxiv.org/abs/2311.17042 + * 模型:[stabilityai/sdxl-turbo](https://modelscope.cn/models/stabilityai/sdxl-turbo) +* 渐进式训练 Hyper-SD + * 论文:https://arxiv.org/abs/2404.13686 + * 模型:[ByteDance/Hyper-SD](https://www.modelscope.cn/models/ByteDance/Hyper-SD) + +## 直接蒸馏 + +在训练框架层面,支持这类蒸馏加速训练方案是极其困难的。在训练框架的设计中,我们需要保证训练方案满足以下条件: + +* 通用性:训练方案适用于大多数框架内支持的 Diffusion 模型,而非只能对某个特定模型生效,这是代码框架建设的基本要求。 +* 稳定性:训练方案需保证训练效果稳定,不需要人工进行精细的参数调整,ADD 中的对抗式训练则无法保证稳定性。 +* 简洁性:训练方案不会引入额外的复杂模块,根据奥卡姆剃刀([Occam's Razor](https://en.wikipedia.org/wiki/Occam%27s_razor))原理,复杂解决方案可能引入潜在风险,Hyper-SD 中的 Human Feedback Learning 让训练过程变得过于复杂。 + +因此,在 `DiffSynth-Studio` 的训练框架中,我们设计了一个端到端的蒸馏加速训练方案,我们称为直接蒸馏(Direct Distill),其训练过程的伪代码如下: + +``` +seed = xxx +with torch.no_grad(): + image_1 = pipe(prompt, steps=50, seed=seed, cfg=4) +image_2 = pipe(prompt, steps=4, seed=seed, cfg=1) +loss = torch.nn.functional.mse_loss(image_1, image_2) +``` + +是的,非常端到端的训练方案,稍加训练就可以有立竿见影的效果。 + +## 直接蒸馏训练的模型 + +我们用这个方案基于 Qwen-Image 训练了两个模型: + +* [DiffSynth-Studio/Qwen-Image-Distill-Full](https://modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Distill-Full): 全量蒸馏训练 +* [DiffSynth-Studio/Qwen-Image-Distill-LoRA](https://modelscope.cn/models/DiffSynth-Studio/Qwen-Image-Distill-LoRA): LoRA 蒸馏训练 + +点击模型链接即可前往模型页面查看模型效果。 + +## 在训练框架中使用蒸馏加速训练 + +首先,需要生成训练数据,请参考[模型推理](../Pipeline_Usage/Model_Inference.md)部分编写推理代码,以足够多的推理步数生成训练数据。 + +以 Qwen-Image 为例,以下代码可以生成一张图片: + +```python +from diffsynth.pipelines.qwen_image import QwenImagePipeline, ModelConfig +import torch + +pipe = QwenImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="transformer/diffusion_pytorch_model*.safetensors"), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="text_encoder/model*.safetensors"), + ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + tokenizer_config=ModelConfig(model_id="Qwen/Qwen-Image", origin_file_pattern="tokenizer/"), +) +prompt = "精致肖像,水下少女,蓝裙飘逸,发丝轻扬,光影透澈,气泡环绕,面容恬静,细节精致,梦幻唯美。" +image = pipe(prompt, seed=0, num_inference_steps=40) +image.save("image.jpg") +``` + +然后,我们把必要的信息编写成[元数据文件](../API_Reference/core/data.md#元数据): + +```csv +image,prompt,seed,rand_device,num_inference_steps,cfg_scale +distill_qwen/image.jpg,"精致肖像,水下少女,蓝裙飘逸,发丝轻扬,光影透澈,气泡环绕,面容恬静,细节精致,梦幻唯美。",0,cpu,4,1 +``` + +这个样例数据集可以直接下载: + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --local_dir ./data/diffsynth_example_dataset +``` + +然后开始 LoRA 蒸馏加速训练: + +```shell +bash examples/qwen_image/model_training/lora/Qwen-Image-Distill-LoRA.sh +``` + +请注意,在[训练脚本参数](../Pipeline_Usage/Model_Training.md#脚本参数)中,数据集的图像分辨率设置要避免触发缩放处理。当设定 `--height` 和 `--width` 以启用固定分辨率时,所有训练数据必须是以完全一致的宽高生成的;当设定 `--max_pixels` 以启用动态分辨率时,`--max_pixels` 的数值必须大于或等于任一训练图像的像素面积。 + +## 训练框架设计思路 + +直接蒸馏与[标准监督训练](../Training/Supervised_Fine_Tuning.md)相比,仅训练的损失函数不同,直接蒸馏的损失函数是 `diffsynth.diffusion.loss` 中的 `DirectDistillLoss`。 + +## 未来工作 + +直接蒸馏是通用性很强的加速方案,但未必是效果最好的方案,所以我们暂未把这一技术以论文的形式发布。我们希望把这个问题交给学术界和开源社区共同解决,期待开发者能够给出更完善的通用训练方案。 diff --git a/docs/zh/Training/FP8_Precision.md b/docs/zh/Training/FP8_Precision.md new file mode 100644 index 0000000000000000000000000000000000000000..09162a1007fbc2f5412343253f03b59f9d0e6f6f --- /dev/null +++ b/docs/zh/Training/FP8_Precision.md @@ -0,0 +1,20 @@ +# 在训练中启用 FP8 精度 + +尽管 `DiffSynth-Studio` 在模型推理中支持[显存管理](../Pipeline_Usage/VRAM_management.md),但其中的大部分减少显存占用的技术不适合用于训练中,Offload 会导致极为缓慢的训练过程。 + +FP8 精度是唯一可在训练过程中启用的显存管理策略,但本框架目前不支持原生 FP8 精度训练,原因详见 [Q&A: 为什么训练框架不支持原生 FP8 精度训练?](../QA.md#为什么训练框架不支持原生-fp8-精度训练),仅支持将参数不被梯度更新的模型(不需要梯度回传,或梯度仅更新其 LoRA)以 FP8 精度进行存储。 + +## 启用 FP8 + +在我们提供的训练脚本中,通过参数 `--fp8_models` 即可快速设置以 FP8 精度存储的模型。以 Qwen-Image 的 LoRA 训练为例,我们提供了启用 FP8 训练的脚本,位于 [`/examples/qwen_image/model_training/special/fp8_training/Qwen-Image-LoRA.sh`](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/special/fp8_training/Qwen-Image-LoRA.sh)。训练完成后,可通过脚本 [`/examples/qwen_image/model_training/special/fp8_training/validate.py`](https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/qwen_image/model_training/special/fp8_training/validate.py) 验证训练效果。 + +请注意,这种 FP8 显存管理策略不支持梯度更新,当某个模型被设置为可训练时,不能为这个模型开启 FP8 精度,支持开启 FP8 的模型包括两类: + +* 参数不可训练,例如 VAE 模型 +* 梯度不更新其参数,例如 LoRA 训练中的 DiT 模型 + +经实验验证,开启 FP8 后的 LoRA 训练效果没有明显的图像质量下降,但理论上误差是确实存在的,如果在使用本功能时遇到训练效果不如 BF16 精度训练的问题,请通过 GitHub issue 给我们提供反馈。 + +## 训练框架设计思路 + +训练框架完全沿用推理的显存管理,在训练中仅通过 `DiffusionTrainingModule` 中的 `parse_model_configs` 解析显存管理配置。 diff --git a/docs/zh/Training/Offload_Training.md b/docs/zh/Training/Offload_Training.md new file mode 100644 index 0000000000000000000000000000000000000000..fd49cebe403db4d9c3eac5e7dd9c97c559620444 --- /dev/null +++ b/docs/zh/Training/Offload_Training.md @@ -0,0 +1,214 @@ +# Offload Training + +本文档介绍 DiffSynth-Studio 中的 Offload Training 功能,通过将模型权重逐层在 CPU 和 GPU 间搬运,大幅降低训练时的 GPU 显存占用。 + +> **注意**:当前 Offload Training 仅支持单卡训练,暂不兼容多卡(DDP)场景。 + +## 什么是 Offload Training + +训练大规模模型(如 Qwen-Image 60 层、Wan2.1-14B 40 层)时,所有层的权重需同时驻留 GPU,仅权重就占用数十 GB 显存。Offload Training 的核心思想是:**任一时刻只将当前正在计算的模块权重加载到 GPU,计算完毕后立即卸载回 CPU**,从而将显存占用从 O(N × 每层参数量) 降低到 O(1 × 每层参数量)。 + +该功能基于 PyTorch 的 Module Hook 机制实现,不需要修改任何模型代码。 + +## 方案原理 + +### 核心机制 + +`OffloadTrainingManager` 会扫描模型,为每个需要管理的模块注册 4 个 Hook: + +``` +forward_pre_hook → 将模块权重从 CPU 加载到 GPU (onload) +module.forward() → 正常前向计算 +forward_hook → 将模块权重从 GPU 卸载回 CPU (offload) + +backward_pre_hook → 将模块权重从 CPU 重新加载到 GPU (onload) +module.backward() → 计算梯度 +backward_hook → 将模块权重卸载回 CPU (offload) +``` + +### 参数与 Buffer 分类管理 + +根据参数是否可训练以及 buffer 类型,采用不同的 offload 策略: + +| 类型 | Offloader 类 | 行为 | +|---------|-------------|------| +| 非可训练参数 (`requires_grad=False`) | `StaticParamOffloader` | 初始化时将权重拷贝到预分配的 pinned memory 中保持永久 CPU 副本,并将 `param.data` 替换为 GPU 端空 placeholder(释放 GPU 显存);onload 时从 CPU 副本异步拷贝到 GPU,offload 时将 `param.data` 重新指向 placeholder(无需 PCIe 回传) | +| 可训练参数 + `enable_optimizer_cpu_offload=True` | `TrainableParamOffloader` | 权重在训练中会变化,无法保持静态副本;onload/offload 通过 `param.data.to(device)` 实际搬运;backward 后将 `param.grad` 也移到 CPU | +| 可训练参数 + `enable_optimizer_cpu_offload=False` | `AlwaysOnGPUParamOffloader` | 初始化时直接将参数移到 GPU,之后不再搬运;适用于 LoRA 训练(可训练参数量小) | +| 模块 Buffer(如 BatchNorm 的 `running_mean`/`running_var`) | `BufferOffloader` | 与 `StaticParamOffloader` 类似:初始化时将 buffer 拷贝到 pinned memory;onload 时从 CPU 副本异步拷贝到 GPU,offload 时将 `module._buffers[name]` 重新指向 CPU 副本 | + +### Pinned Memory Pool + +`StaticParamOffloader` 和 `BufferOffloader` 在初始化时需要为每个非可训练参数/buffer 分配一份 CPU 端的 pinned memory 副本(pinned memory 可以实现 CPU→GPU 的异步非阻塞传输,比普通 pageable memory 快得多)。 + +**问题**:PyTorch 的 `pin_memory()` 底层通过 `CachingHostAllocator` 分配内存,该分配器会将每次申请的大小向上取整到 2 的整数次方。例如一个 17MB 的 tensor 会实际分配 32MB。大模型有数千个参数 tensor,每个都独立 `pin_memory()` 会导致大量内存浪费(实测可能膨胀 50%~100%)。 + +**解决方案**:`PinnedArenaPool` 预先一次性分配少量大块 pinned memory(即 arena,一块预分配的大内存区域,所有小对象从中切分),然后用 bump-pointer 方式从大块中紧凑地切分出每个 tensor 需要的空间,避免逐 tensor 取整带来的浪费: + +- `from_model()` 扫描模型所有非可训练参数和 buffer,计算总大小 +- 将总大小分解为若干 power-of-two 大小的 chunk(每个 chunk 是一个 `PinnedBuffer`) +- 分配时顺序查找有剩余空间的 chunk,bump-pointer 前进即完成分配(仅 64 字节对齐,无取整浪费) +- 空间不足时自动 grow 新 chunk +- 异常情况下回退到逐 tensor 的 `pin_memory()` + +### Gradient Checkpointing 兼容 + +Gradient Checkpointing 在 backward 时会重新执行 forward(重算激活),这会再次触发 `forward_hook`。方案通过 `_in_recompute` 集合解决: + +- 首次 forward:正常 offload,并将模块加入 `_in_recompute` +- 重算 forward(backward 期间):检测到模块在 `_in_recompute` 中,跳过 offload,保持权重在 GPU 供 backward 使用 +- `after_backward()` 调用时:清空 `_in_recompute`,为下一个 step 做准备 + +### Hook 注册粒度 + +`OffloadTrainingManager` 默认以每个叶子模块(`nn.Linear`、`nn.LayerNorm` 等)为单位注册 hook,即每个叶子模块独立进行 onload/offload。此外,未被任何叶子模块管理到的「孤儿参数」和「孤儿 buffer」也会被自动收集并注册 hook。 + +**实验性功能**:通过 `cpu_offload_split_threshold`(单位 MB)可以调整 hook 的注册粒度。设置后,参数总量超过阈值的模块会被递归拆分为子模块,未超过阈值的模块则作为整体注册 hook。该功能当前版本可能无法兼容所有模型结构,默认不启用。 + +### 训练流程集成 + +在 `runner.py` 中的执行流程: + +```python +# enable_model_cpu_offload=True 时: +# 1. 模型不调用 model.to(device),保持在 CPU +# 2. 只 prepare optimizer、dataloader、scheduler(不 prepare model) +# 3. 创建 OffloadTrainingManager,自动为模型注册 hook + +# 训练循环: +loss = model(data) +accelerator.backward(loss) +offload_manager.after_backward() # 清空 recompute 标记 + 梯度移到 CPU +optimizer.step() +optimizer.zero_grad() +``` + +## 如何使用 + +### 参数说明 + +| 参数 | 默认值 | 说明 | +|------|--------|------| +| `--enable_model_cpu_offload` | False | 启用逐层 offload 训练 | +| `--enable_optimizer_cpu_offload` | False | 配合 `--enable_model_cpu_offload`,将可训练参数和 optimizer 也放在 CPU | +| `--cpu_offload_split_threshold` | None | 实验性参数(单位 MB),超过此阈值的模块会被递归拆分 | + +### 参数组合 + +| 场景 | `--enable_model_cpu_offload` | `--enable_optimizer_cpu_offload` | 效果 | +|------|:---------------:|:-------------------:|------| +| 默认训练 | ❌ | ❌ | 所有权重和 optimizer 在 GPU | +| 仅 offload 非可训练参数 | ✅ | ❌ | 非可训练参数逐层 offload,可训练参数和 optimizer 留在 GPU | +| offload 所有参数 | ✅ | ✅ | 所有参数逐层 offload,梯度和 optimizer 在 CPU 执行 | + +### 使用示例 + +在现有训练命令中添加 `--enable_model_cpu_offload` 即可启用,以 Qwen-Image LoRA 训练为例: + +```bash +accelerate launch examples/qwen_image/model_training/train.py \ + --dataset_base_path data/example_dataset \ + --dataset_metadata_path data/example_dataset/metadata.json \ + --max_pixels 1048576 \ + --dataset_repeat 50 \ + --model_id_with_origin_paths "Qwen/Qwen-Image:transformer/diffusion_pytorch_model*.safetensors,Qwen/Qwen-Image:text_encoder/model*.safetensors,Qwen/Qwen-Image:vae/diffusion_pytorch_model.safetensors" \ + --learning_rate 1e-4 \ + --num_epochs 5 \ + --remove_prefix_in_ckpt "pipe.dit." \ + --output_path "./models/train/Qwen-Image_lora" \ + --lora_base_model "dit" \ + --lora_target_modules "to_q,to_k,to_v,add_q_proj,add_k_proj,add_v_proj,to_out.0,to_add_out,img_mlp.net.2,img_mod.1,txt_mlp.net.2,txt_mod.1" \ + --lora_rank 32 \ + --use_gradient_checkpointing \ + --dataset_num_workers 8 \ + --find_unused_parameters \ + --enable_model_cpu_offload +``` + +如需完整 offload(optimizer 也在 CPU),添加 `--enable_optimizer_cpu_offload`: + +```bash + --enable_model_cpu_offload \ + --enable_optimizer_cpu_offload +``` + +### 兼容性 + +| 特性 | 兼容 | 说明 | +|------|:----:|------| +| Gradient Checkpointing | ✅ | `_in_recompute` 机制兼容 | +| Accelerate DDP(多卡训练) | ⚠️ | enable_model_cpu_offload 模式下不会对 model 进行 DDP 包装(不调用 `accelerator.prepare(model)`),因此**不会执行梯度 allreduce**。无法保证与多卡训练的兼容性,各卡独立计算梯度而无同步 | +| 拆分训练 | ✅ | `launch_data_process_task` 同样支持 `--enable_model_cpu_offload` | +| DeepSpeed | ❌ | ZeRO 的参数聚集机制与 hook 冲突 | + +### 注意事项 + +- 开启 `--enable_model_cpu_offload` 后,模型不会调用 `model.to(device)`,权重始终由 hook 管理 +- 训练速度会因 CPU↔GPU 传输而下降(典型约 2-10 倍),模型越大,速度下降越多,适合显存受限场景 +- 建议配合 `--use_gradient_checkpointing` 使用以进一步降低激活值的显存占用 +- `--enable_optimizer_cpu_offload` 仅支持梯度累积步数为 1(`--gradient_accumulation_steps 1`) + +## 在其他代码库中集成 Offload Training 模块 + +Offload Training 模块是相对独立的,因此开发者可以将其集成到其他代码库中,以下是一个代码样例,显存占用 4G。 + +```python +import torch +from tqdm import tqdm + +class ToyModel(torch.nn.Module): + def __init__(self): + super().__init__() + self.layers = torch.nn.ModuleList(torch.nn.Linear(4096, 4096) for _ in range(10)) + + def forward(self, x): + for layer in self.layers: + x = x + layer(torch.nn.functional.layer_norm(x, (4096,))) + return x + +model = ToyModel().to("cuda") +optimizer = torch.optim.AdamW(model.parameters(), lr=1e-4) +pbar = tqdm(range(100)) +for i in pbar: + x = torch.randn((512, 4096), device="cuda") + y = x + 1 + y_pred = model(x) + loss = torch.nn.functional.mse_loss(y_pred, y) + loss.backward() + optimizer.step() + optimizer.zero_grad() + pbar.set_postfix(loss=f"{loss.item():.4f}") +``` + +启用 Offload Training,显存占用降低到 1.4G: + +```python +import torch +from tqdm import tqdm +from diffsynth.core import OffloadTrainingManager + +class ToyModel(torch.nn.Module): + def __init__(self): + super().__init__() + self.layers = torch.nn.ModuleList(torch.nn.Linear(4096, 4096) for _ in range(10)) + + def forward(self, x): + for layer in self.layers: + x = x + layer(torch.nn.functional.layer_norm(x, (4096,))) + return x + +model = ToyModel().to("cpu") +optimizer = torch.optim.AdamW(model.parameters(), lr=1e-4) +offload_manager = OffloadTrainingManager(model, target_device="cuda", enable_optimizer_cpu_offload=True) +pbar = tqdm(range(100)) +for i in pbar: + x = torch.randn((512, 4096), device="cuda") + y = x + 1 + y_pred = model(x) + loss = torch.nn.functional.mse_loss(y_pred, y) + loss.backward() + offload_manager.after_backward() + optimizer.step() + optimizer.zero_grad() + pbar.set_postfix(loss=f"{loss.item():.4f}") +``` diff --git a/docs/zh/Training/Split_Training.md b/docs/zh/Training/Split_Training.md new file mode 100644 index 0000000000000000000000000000000000000000..856c0e42a5047dd2048af86a4b6dfc3b36f53889 --- /dev/null +++ b/docs/zh/Training/Split_Training.md @@ -0,0 +1,269 @@ +# 两阶段拆分训练 + +本文档介绍拆分训练,能够自动将训练过程拆分为两阶段进行,减少显存占用,同时加快训练速度。 + +(拆分训练是实验性特性,尚未进行大规模验证,如果在使用中出现问题,请在 GitHub 上给我们提 issue。) + +## 拆分训练 + +在大部分模型的训练过程中,大量计算发生在“前处理”中,即“与去噪模型无关的计算”,包括 VAE 编码、文本编码等。当对应的模型参数固定时,这部分计算的结果是重复的,在多个 epoch 中每个数据样本的计算结果完全相同,因此我们提供了“拆分训练”功能,该功能可以自动分析并拆分训练过程。 + +对于普通文生图模型的标准监督训练,拆分过程是非常简单的,只需要把所有 [`Pipeline Units`](../Developer_Guide/Building_a_Pipeline.md#units) 的计算拆分到第一阶段,将计算结果存储到硬盘中,然后在第二阶段从硬盘中读取这些结果并进行后续计算即可。但如果前处理过程中需要梯度回传,情况就变得极其复杂,为此,我们引入了一个计算图拆分算法用于分析如何拆分计算。 + +## 启用拆分训练 + +拆分训练已支持[标准监督训练](../Training/Supervised_Fine_Tuning.md)和[直接蒸馏训练](../Training/Direct_Distill.md),在训练命令中通过 `--task` 参数控制,以 Qwen-Image 模型的 LoRA 训练为例,拆分前的训练命令为: + +```shell +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "qwen_image/Qwen-Image/*" --local_dir ./data/diffsynth_example_dataset + +accelerate launch examples/qwen_image/model_training/train.py \ + --dataset_base_path data/diffsynth_example_dataset/qwen_image/Qwen-Image \ + --dataset_metadata_path data/diffsynth_example_dataset/qwen_image/Qwen-Image/metadata.csv \ + --max_pixels 1048576 \ + --dataset_repeat 50 \ + --model_id_with_origin_paths "Qwen/Qwen-Image:transformer/diffusion_pytorch_model*.safetensors,Qwen/Qwen-Image:text_encoder/model*.safetensors,Qwen/Qwen-Image:vae/diffusion_pytorch_model.safetensors" \ + --learning_rate 1e-4 \ + --num_epochs 5 \ + --remove_prefix_in_ckpt "pipe.dit." \ + --output_path "./models/train/Qwen-Image_lora" \ + --lora_base_model "dit" \ + --lora_target_modules "to_q,to_k,to_v,add_q_proj,add_k_proj,add_v_proj,to_out.0,to_add_out,img_mlp.net.2,img_mod.1,txt_mlp.net.2,txt_mod.1" \ + --lora_rank 32 \ + --use_gradient_checkpointing \ + --dataset_num_workers 8 \ + --find_unused_parameters +``` + +拆分后,在第一阶段中,做如下修改: + +* 将 `--dataset_repeat` 改为 1,避免重复计算 +* 将 `--output_path` 改为第一阶段计算结果保存的路径 +* 添加额外参数 `--task "sft:data_process"` +* 在 `offload_models` 中填入不需要进行 forward 计算的模型,格式与 `model_id_with_origin_paths` 相同 + * 直接删除 `--model_id_with_origin_paths` 中不需要进行 forward 计算的模型也可,但你必须确保对应的模型在 pipeline 中不会被间接调用,这意味着你必须了解 Pipeline 的运行细节 + +```shell +accelerate launch examples/qwen_image/model_training/train.py \ + --dataset_base_path data/diffsynth_example_dataset/qwen_image/Qwen-Image \ + --dataset_metadata_path data/diffsynth_example_dataset/qwen_image/Qwen-Image/metadata.csv \ + --max_pixels 1048576 \ + --dataset_repeat 1 \ + --model_id_with_origin_paths "Qwen/Qwen-Image:text_encoder/model*.safetensors,Qwen/Qwen-Image:vae/diffusion_pytorch_model.safetensors,Qwen/Qwen-Image:transformer/diffusion_pytorch_model*.safetensors" \ + --offload_models "Qwen/Qwen-Image:transformer/diffusion_pytorch_model*.safetensors" \ + --learning_rate 1e-4 \ + --num_epochs 5 \ + --remove_prefix_in_ckpt "pipe.dit." \ + --output_path "./models/train/Qwen-Image-LoRA-splited-cache" \ + --lora_base_model "dit" \ + --lora_target_modules "to_q,to_k,to_v,add_q_proj,add_k_proj,add_v_proj,to_out.0,to_add_out,img_mlp.net.2,img_mod.1,txt_mlp.net.2,txt_mod.1" \ + --lora_rank 32 \ + --use_gradient_checkpointing \ + --dataset_num_workers 8 \ + --find_unused_parameters \ + --task "sft:data_process" +``` + +在第二阶段,做如下修改: + +* 将 `--dataset_base_path` 改为第一阶段的 `--output_path` +* 删除 `--dataset_metadata_path` +* 添加额外参数 `--task "sft:train"` +* 在 `offload_models` 中填入不需要进行 forward 计算的模型,格式与 `model_id_with_origin_paths` 相同 + * 直接删除 `--model_id_with_origin_paths` 中不需要进行 forward 计算的模型也可,但你必须确保对应的模型在 pipeline 中不会被间接调用,这意味着你必须了解 Pipeline 的运行细节 + +```shell +accelerate launch examples/qwen_image/model_training/train.py \ + --dataset_base_path "./models/train/Qwen-Image-LoRA-splited-cache" \ + --max_pixels 1048576 \ + --dataset_repeat 50 \ + --model_id_with_origin_paths "Qwen/Qwen-Image:text_encoder/model*.safetensors,Qwen/Qwen-Image:vae/diffusion_pytorch_model.safetensors,Qwen/Qwen-Image:transformer/diffusion_pytorch_model*.safetensors" \ + --offload_models "Qwen/Qwen-Image:text_encoder/model*.safetensors,Qwen/Qwen-Image:vae/diffusion_pytorch_model.safetensors" \ + --learning_rate 1e-4 \ + --num_epochs 5 \ + --remove_prefix_in_ckpt "pipe.dit." \ + --output_path "./models/train/Qwen-Image-LoRA-splited" \ + --lora_base_model "dit" \ + --lora_target_modules "to_q,to_k,to_v,add_q_proj,add_k_proj,add_v_proj,to_out.0,to_add_out,img_mlp.net.2,img_mod.1,txt_mlp.net.2,txt_mod.1" \ + --lora_rank 32 \ + --use_gradient_checkpointing \ + --dataset_num_workers 8 \ + --find_unused_parameters \ + --task "sft:train" +``` + +我们提供了样例训练脚本和验证脚本,位于 `examples/qwen_image/model_training/special/split_training`。 + +## 计算图拆分算法原理 + +训练框架通过 `DiffusionTrainingModule` 的 `split_pipeline_units` 方法拆分 `Pipeline` 中的计算单元,以下是计算图拆分算法的详细原理。 + +### 问题定义 + +为精确刻画拆分过程,本节对计算流水线进行形式化描述。设流水线由 $n$ 个计算单元([`Pipeline Unit`](../Developer_Guide/Building_a_Pipeline.md#units))构成,记单元集合为 $V=\{u_1,u_2,\dots,u_n\}$。每个单元 $u\in V$ 具有如下属性: + +* 输入参数集合 $\operatorname{in}(u)$:由 `input_params`、`input_params_posi` 与 `input_params_nega` 声明,表示 $u$ 计算前必须读取的数据项; +* 输出参数集合 $\operatorname{out}(u)$:由 `output_params` 声明,表示 $u$ 计算完成后产生并写入数据缓存的数据项; +* 关联模型集合 $\mathcal{M}(u)$:由 `onload_model_names` 声明,表示 $u$ 的计算所依赖的模型。 + +全体参数构成参数空间 $\mathcal{P}=\bigcup_{u\in V}\left(\operatorname{in}(u)\cup\operatorname{out}(u)\right)$。 + +**定义 1(数据依赖边)** 设参数 $p\in\mathcal{P}$。若存在单元 $u_i,u_j\in V$,使得 $p\in\operatorname{out}(u_i)\cap\operatorname{in}(u_j)$,且 $u_i$ 为 $p$ 的最近生产者(即全部产生 $p$ 的单元中执行顺序最靠后者),则称 $u_i$ 与 $u_j$ 之间存在数据依赖边 $(u_i,u_j)$,其语义为 $u_j$ 的计算必须发生在 $u_i$ 完成之后。 + +由此,计算流水线被抽象为有向无环图 $G=(V,E)$,其中 $E$ 为全部数据依赖边的集合。 + +**定义 2(直接相关单元)** 给定需梯度回传的模型集合 $\mathcal{W}$(由 `trainable_models` 与 `lora_base_model` 指定,分别是正在训练的模型组件和正在以 LoRA 训练的模型组件)。若单元 $u\in V$ 满足 $\mathcal{M}(u)\cap\mathcal{W}\neq\varnothing$,则称 $u$ 为直接相关单元,其计算过程涉及可训练模型的调用。 + +**定义 3(计算图拆分问题)** 给定图 $G=(V,E)$ 与模型集合 $\mathcal{W}$,求 $V$ 的一个二分 $(V_1,V_2)$,使得 $V_1$ 为包含全部直接相关单元且满足下述闭包条件的最小集合,$V_2=V\setminus V_1$: + +(C1)前向闭包:若 $u\in V_1$ 且 $(u,v)\in E$,则 $v\in V_1$,即 $V_2$ 中不存在任何依赖 $V_1$ 输出的单元; + +(C2)更新链闭包:对任意参数 $p\in\mathcal{P}$,设其更新链 $\mathbf{c}(p)=(u^{(1)},u^{(2)},\dots,u^{(k)})$ 为按执行顺序产生 $p$ 的全部单元。若 $p$ 在 $V_1$ 内首次被消费于 $u^{(i)}$ 且 $i\sigma_{T-1}>\sigma_{T-2}>\cdots>x_0$,在迭代过程中噪声含量逐渐减小 +* $\sigma_0=0$,对应的 $x_0$ 为不含任何噪声的数据样本 + +至于中间 $\sigma_{T-1}$、$\sigma_{T-2}$、$\cdots$、$\sigma_1$ 的数值,则不是固定的,满足递减的条件即可。 + +那么在中间的某一步,我们可以直接合成含噪声的数据样本 $x_t=(1-\sigma_t)x_0+\sigma_t x_T$。 + +![Image](https://github.com/user-attachments/assets/e25a2f71-123c-4e18-8b34-3a066af15667) + +## 迭代去噪的计算是如何进行的? + +在理解迭代去噪的计算前,我们要先搞清楚,去噪模型的输入和输出是什么。我们把模型抽象成一个符号 $\hat \epsilon$,它的输入通常包含三部分 + +* 时间步 $t$,模型需要理解当前处于去噪过程的哪个阶段 +* 含噪声的数据样本 $x_t$,模型需要理解要对什么数据进行去噪 +* 引导条件 $c$,模型需要理解要通过去噪生成什么样的数据样本 + +其中,引导条件 $c$ 是新引入的参数,它是由用户输入的,可以是用于描述图像内容的文本,也可以是用于勾勒图像结构的线稿图。 + +而模型的输出 $\hat \epsilon(x_t,c,t)$,则近似地等于 $x_T-x_0$,也就是整个扩散过程(去噪过程的反向过程)的方向。 + +接下来我们分析一步迭代中发生的计算,在时间步 $t$,模型通过计算得到近似的 $x_T-x_0$ 后,我们计算下一步的 $x_{t-1}$: + +$$ +\begin{aligned} +x_{t-1}&=x_t + (\sigma_{t-1} - \sigma_t) \cdot \hat \epsilon(x_t,c,t)\\ +&\approx x_t + (\sigma_{t-1} - \sigma_t) \cdot (x_T-x_0)\\ +&=(1-\sigma_t)x_0+\sigma_t x_T + (\sigma_{t-1} - \sigma_t) \cdot (x_T-x_0)\\ +&=(1-\sigma_{t-1})x_0+\sigma_{t-1}x_T +\end{aligned} +$$ + +完美!与时间步 $t-1$ 时的噪声含量定义完美契合。 + +> (这部分可能有点难懂,请不必担心,首次阅读本文时建议跳过这部分,不影响后文的阅读。) +> +> 完成了这段有点复杂的公式推导后,我们思考一个问题,为什么模型的输出要近似地等于 $x_T-x_0$ 呢?可以设定成其他值吗? +> +> 实际上,Diffusion 模型依赖两个定义形成完备的理论。在以上的公式中,我们可以提炼出这两个定义,并导出迭代公式: +> +> * 数据定义:$x_t=(1-\sigma_t)x_0+\sigma_t x_T$ +> * 模型定义:$\hat \epsilon(x_t,c,t)=x_T-x_0$ +> * 导出迭代公式:$x_{t-1}=x_t + (\sigma_{t-1} - \sigma_t) \cdot \hat \epsilon(x_t,c,t)$ +> +> 这三个数学公式是完备的,例如在刚才的推导中,我们把数据定义和模型定义代入迭代公式,可以得到与数据定义吻合的 $x_{t-1}$。 +> +> 这是基于 Flow Matching 理论构建的两个定义,但 Diffusion 模型也可用其他的两个定义来实现,例如早期基于 DDPM(Denoising Diffusion Probabilistic Models)的模型,其两个定义及导出的迭代公式为: +> +> * 数据定义:$x_t=\sqrt{\alpha_t}x_0+\sqrt{1-\alpha_t}x_T$ +> * 模型定义:$\hat \epsilon(x_t,c,t)=x_T$ +> * 导出迭代公式:$x_{t-1}=\sqrt{\alpha_{t-1}}\left(\frac{x_t-\sqrt{1-\alpha_t}\hat \epsilon(x_t,c,t)}{\sqrt{\sigma_t}}\right)+\sqrt{1-\alpha_{t-1}}\hat \epsilon(x_t,c,t)$ +> +> 更一般地,我们用矩阵描述迭代公式的导出过程,对于任意数据定义和模型定义,有: +> +> * 数据定义:$x_t=C_T(x_0,x_T)^T$ +> * 模型定义:$\hat \epsilon(x_t,c,t)=C_T^{[\epsilon]}(x_0,x_T)^T$ +> * 导出迭代公式:$x_{t-1}=C_{t-1}(C_t,C_t^{[\epsilon]})^{-T}(x_t,\hat \epsilon(x_t,c,t))^T$ +> +> 其中,$C_t$、$C_t^{[\epsilon]}$ 是 $1\times 2$ 的系数矩阵,不难发现,在构造两个定义时,需保证矩阵 $(C_t,C_t^{[\epsilon]})^T$ 是可逆的。 +> +> 尽管 Flow Matching 与 DDPM 已被大量预训练模型广泛验证过,但这并不代表这是最优的方案,我们鼓励开发者设计新的 Diffusion 模型理论实现更好的训练效果。 + +## 如何训练这样的 Diffusion 模型? + +搞清楚迭代去噪的过程之后,接下来我们考虑如何训练这样的 Diffusion 模型。 + +训练过程不同于生成过程,如果我们在训练过程中保留多步迭代,那么梯度需经过多步回传,带来的时间和空间复杂度是灾难性的。为了提高计算效率,我们在训练中随机选择某一时间步 $t$ 进行训练。 + +以下是训练过程的伪代码 + +> 从数据集获取数据样本 $x_0$ 和引导条件 $c$ +> +> 随机采样时间步 $t\in(0,T]$ +> +> 随机采样高斯噪声 $x_T\in \mathcal N(O,I)$ +> +> $x_t=(1-\sigma_t)x_0+\sigma_t x_T$ +> +> $\hat \epsilon(x_t,c,t)$ +> +> 损失函数 $\mathcal L=||\hat \epsilon(x_t,c,t)-(x_T-x_0)||_2^2$ +> +> 梯度回传并更新模型参数 + +## 现代 Diffusion 模型的架构是什么样的? + +从理论到实践,还需要填充更多细节。现代 Diffusion 模型架构已经发展成熟,主流的架构沿用了 Latent Diffusion 所提出的“三段式”架构,包括数据编解码器、引导条件编码器、去噪模型三部分。 + +![Image](https://github.com/user-attachments/assets/43855430-6427-4aca-83a0-f684e01438b1) + +### 数据编解码器 + +在前文中,我们一直将 $x_0$ 称为“数据样本”,而不是图像或视频,这是因为现代 Diffusion 模型通常不会直接在图像或视频上进行处理,而是用编码器(Encoder)-解码器(Decoder)架构的模型,通常是 VAE(Variational Auto-Encoders)模型,将图像或视频编码为 Embedding 张量,得到 $x_0$。 + +数据经过编码器编码后,再经过解码器解码,重建后的内容与原来近似地一致,会有少量误差。那么,为什么要在编码后的 Embedding 张量上处理,而不是在图像或视频上直接处理呢?主要原因有亮点: + +* 编码的同时对数据进行了压缩,编码后处理的计算量更小。 +* 编码后的数据分布与高斯分布更相似,更容易用去噪模型对数据进行建模。 + +在生成过程中,编码器部分不参与计算,迭代完成后,用解码器部分解码 $x_0$ 即可得到清晰的图像或视频。在训练过程中,解码器部分不参与计算,仅编码器用于计算 $x_0$。 + +### 引导条件编码器 + +用户输入的引导条件 $c$ 可能是复杂多样的,需要由专门的编码器模型将其处理成 Embedding 张量。按照引导条件的类型,我们把引导条件编码器分为以下几类: + +* 文本类型,例如 CLIP、Qwen-VL +* 图像类型,例如 ControlNet、IP-Adapter +* 视频类型,例如 VAE + +> 前文中的模型 $\hat \epsilon$ 指代此处的所有引导条件编码器和去噪模型这一整体,我们把引导条件编码器单独拆分列出,因为这类模型在 Diffusion 训练中通常是冻结的,且输出值与时间步 $t$ 无关,因此引导条件编码器的计算可以离线进行。 + +### 去噪模型 + +去噪模型是 Diffusion 模型真正的本体,其模型结构多种多样,例如 UNet、DiT,模型开发者可在此结构上自由发挥。 + +## 本项目如何封装和实现模型训练? + +请阅读下一文档:[标准监督训练](../Training/Supervised_Fine_Tuning.md) diff --git a/docs/zh/conf.py b/docs/zh/conf.py new file mode 100644 index 0000000000000000000000000000000000000000..077cf77a0d97191a180722d8e627f1099d3cdf39 --- /dev/null +++ b/docs/zh/conf.py @@ -0,0 +1,147 @@ +# Configuration file for the Sphinx documentation builder. +# +# This file only contains a selection of the most common options. For a full +# list see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +import os +import sys + +# import sphinx_book_theme + +sys.path.insert(0, os.path.abspath('../../')) +# -- Project information ----------------------------------------------------- + +project = 'diffsynth' +copyright = '2022-2025, Alibaba ModelScope' +author = 'ModelScope Authors' +version_file = '../../diffsynth/version.py' +html_theme = 'sphinx_rtd_theme' +language = 'zh_CN' + + +def get_version(): + with open(version_file, 'r', encoding='utf-8') as f: + exec(compile(f.read(), version_file, 'exec')) + return locals()['__version__'] + + +# The full version, including alpha/beta/rc tags +version = get_version() +release = version + +# -- General configuration --------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + 'sphinx.ext.napoleon', + 'sphinx.ext.autosummary', + 'sphinx.ext.autodoc', + 'sphinx.ext.viewcode', + 'sphinx_markdown_tables', + 'sphinx_copybutton', + "sphinx_rtd_theme", + 'sphinx.ext.mathjax', + 'myst_parser', + 'sphinxcontrib.mermaid', +] +# build the templated autosummary files +autosummary_generate = True +numpydoc_show_class_members = False + +# Enable overriding of function signatures in the first line of the docstring. +autodoc_docstring_signature = True + +# Disable docstring inheritance +autodoc_inherit_docstrings = False + +# Show type hints in the description +autodoc_typehints = 'description' + +# Add parameter types if the parameter is documented in the docstring +autodoc_typehints_description_target = 'documented_params' + +autodoc_default_options = { + 'member-order': 'bysource', +} + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +source_suffix = ['.rst', '.md'] + +# The master toctree document. +root_doc = 'index' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = ['build'] +# A list of glob-style patterns [1] that are used to find source files. +# They are matched against the source file names relative to the source directory, +# using slashes as directory separators on all platforms. +# The default is **, meaning that all files are recursively included from the source directory. +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +# html_theme = 'sphinx_book_theme' +# html_theme_path = [sphinx_book_theme.get_html_theme_path()] +# html_theme_options = {} + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] +# html_css_files = ['css/readthedocs.css'] + +# -- Options for HTMLHelp output --------------------------------------------- +# Output file base name for HTML help builder. + +# -- Extension configuration ------------------------------------------------- +# Ignore >>> when copying code +copybutton_prompt_text = r'>>> |\.\.\. ' +copybutton_prompt_is_regexp = True + +# Example configuration for intersphinx: refer to the Python standard library. +intersphinx_mapping = {'https://docs.python.org/': None} + +myst_enable_extensions = [ + 'amsmath', + 'dollarmath', + 'colon_fence', +] + +myst_fence_as_directive = ['mermaid'] + +mermaid_version = '11.12.1' + + +def setup(app): + old_cdn = 'cdn.jsdelivr.net/npm/mermaid@' + new_cdn = 'fastly.jsdelivr.net/npm/mermaid@' + + def _use_china_cdn(app_, pagename, templatename, context, doctree): + for item in context.get('script_files') or []: + state = vars(item) if hasattr(item, '__dict__') else {} + attributes = state.get('attributes') or {} + body = attributes.get('body') or '' + filename = str(state.get('filename') or '') + if old_cdn in body: + attributes['body'] = body.replace(old_cdn, new_cdn) + if old_cdn in filename: + item.filename = filename.replace(old_cdn, new_cdn) + + app.connect('html-page-context', _use_china_cdn) diff --git a/docs/zh/index.rst b/docs/zh/index.rst new file mode 100644 index 0000000000000000000000000000000000000000..6661d96389a30e8f83550693bcd2b3e3a08e7483 --- /dev/null +++ b/docs/zh/index.rst @@ -0,0 +1,111 @@ +欢迎来到 DiffSynth-Studio 的文档 +===================== + +.. toctree:: + :maxdepth: 2 + :caption: 文档介绍 + + README + +.. toctree:: + :maxdepth: 2 + :caption: 上手使用 + + Pipeline_Usage/Setup + Pipeline_Usage/Model_Inference + Pipeline_Usage/Accelerated_Inference + Pipeline_Usage/VRAM_management + Pipeline_Usage/Quantization + Pipeline_Usage/Model_Training + Pipeline_Usage/Environment_Variables + Pipeline_Usage/GPU_support + Pipeline_Usage/Inference_WebUI + +.. toctree:: + :maxdepth: 2 + :caption: 模型详解 + + Model_Details/FLUX + Model_Details/Wan + Model_Details/Qwen-Image + Model_Details/Qwen-Video-Edit + Model_Details/FLUX2 + Model_Details/Z-Image + Model_Details/Anima + Model_Details/LTX-2 + Model_Details/ERNIE-Image + Model_Details/JoyAI-Image + Model_Details/ACE-Step + Model_Details/HiDream-O1-Image + Model_Details/Stable-Diffusion + Model_Details/Stable-Diffusion-XL + Model_Details/Image-Quality-Metrics + Model_Details/Ideogram-4 + Model_Details/Krea-2 + Model_Details/Boogu-Image + Model_Details/LingBot-Video + Model_Details/MiniMax-H3 + Model_Details/MiniMax-Music3 + +.. toctree:: + :maxdepth: 2 + :caption: 训练框架 + + Training/Understanding_Diffusion_models + Training/Supervised_Fine_Tuning + Training/FP8_Precision + Training/Direct_Distill + Training/Split_Training + Training/Differential_LoRA + Training/DeepSpeed + Training/Offload_Training + +.. toctree:: + :maxdepth: 2 + :caption: 模型接入 + + Developer_Guide/Integrating_Your_Model + Developer_Guide/Building_a_Pipeline + Developer_Guide/Enabling_VRAM_management + Developer_Guide/Training_Diffusion_Models + Developer_Guide/Integrating_Quantization_Backend + +.. toctree:: + :maxdepth: 2 + :caption: API 参考 + + API_Reference/core/attention + API_Reference/core/data + API_Reference/core/gradient + API_Reference/core/loader + API_Reference/core/quant + API_Reference/core/vram + +.. toctree:: + :maxdepth: 2 + :caption: Diffusion Templates + + Diffusion_Templates/Introducing_Diffusion_Templates.md + Diffusion_Templates/Understanding_Diffusion_Templates.md + Diffusion_Templates/Template_Model_Inference.md + Diffusion_Templates/Template_Model_Training.md + +.. toctree:: + :maxdepth: 2 + :caption: 学术导引 + + Research_Tutorial/train_from_scratch + Research_Tutorial/inference_time_scaling + Research_Tutorial/controllable_models + +.. toctree:: + :maxdepth: 2 + :caption: 常见问题 + + QA + +Indices and tables +================== +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/examples/ace_step/model_inference/Ace-Step1.5.py b/examples/ace_step/model_inference/Ace-Step1.5.py new file mode 100644 index 0000000000000000000000000000000000000000..ff40d88147a041d0b3627b1904d87d329593ed6e --- /dev/null +++ b/examples/ace_step/model_inference/Ace-Step1.5.py @@ -0,0 +1,53 @@ +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio +from modelscope import dataset_snapshot_download +import torch + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="acestep-v15-turbo/model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), +) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' +audio = pipe( + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=42, +) + +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-turbo.wav") + +# input audio codes as reference +dataset_snapshot_download( + dataset_id="DiffSynth-Studio/diffsynth_example_dataset", + local_dir="data/diffsynth_example_dataset", + allow_file_pattern="ace_step/Ace-Step1.5/audio_codes_input.txt", +) +with open("data/diffsynth_example_dataset/ace_step/Ace-Step1.5/audio_codes_input.txt", "r") as f: + audio_code_string = f.read().strip() + +audio = pipe( + prompt=prompt, + lyrics=lyrics, + task_type="cover", + audio_code_string=audio_code_string, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=42, +) +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-turbo5-with-audio-codes.wav") diff --git a/examples/ace_step/model_inference/acestep-v15-base-CoverTask.py b/examples/ace_step/model_inference/acestep-v15-base-CoverTask.py new file mode 100644 index 0000000000000000000000000000000000000000..ff62b82e7380c44f71dfcea381f07af3ecea933a --- /dev/null +++ b/examples/ace_step/model_inference/acestep-v15-base-CoverTask.py @@ -0,0 +1,45 @@ +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio, read_audio +from modelscope import dataset_snapshot_download +import torch + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/acestep-v15-base", origin_file_pattern="model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), +) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' + +dataset_snapshot_download( + dataset_id="DiffSynth-Studio/diffsynth_example_dataset", + local_dir="data/diffsynth_example_dataset", + allow_file_pattern="ace_step/acestep-v15-base-CoverTask/audio.wav", +) + +src_audio, sr = read_audio("data/diffsynth_example_dataset/ace_step/acestep-v15-base-CoverTask/audio.wav", resample=True, resample_rate=pipe.vae.sampling_rate) +# audio_cover_strength controls the steps of doing cover tasks. [0, num_inference_steps * audio_cover_strength] steps will be cover steps, and the rest will be regular text-to-music generation steps. +# denoising_strength controls how the output audio is influenced by the source audio in cover tasks. +audio = pipe( + prompt=prompt, + lyrics=lyrics, + task_type="cover", + src_audio=src_audio, + audio_cover_strength=0.5, + denoising_strength=0.9, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=42, + num_inference_steps=50, + cfg_scale=4.0, +) +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-base-cover.wav") diff --git a/examples/ace_step/model_inference/acestep-v15-base-RepaintTask.py b/examples/ace_step/model_inference/acestep-v15-base-RepaintTask.py new file mode 100644 index 0000000000000000000000000000000000000000..9813866235ae2a040213c4b7b6337ba6313f539c --- /dev/null +++ b/examples/ace_step/model_inference/acestep-v15-base-RepaintTask.py @@ -0,0 +1,47 @@ +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio, read_audio +from modelscope import dataset_snapshot_download +import torch + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/acestep-v15-base", origin_file_pattern="model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), +) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' + +dataset_snapshot_download( + dataset_id="DiffSynth-Studio/diffsynth_example_dataset", + local_dir="data/diffsynth_example_dataset", + allow_file_pattern="ace_step/acestep-v15-base-RepaintTask/audio.wav", +) + +src_audio, sr = read_audio("data/diffsynth_example_dataset/ace_step/acestep-v15-base-RepaintTask/audio.wav", resample=True, resample_rate=pipe.vae.sampling_rate) +# repainting_ranges are in seconds, and will be converted to frames internally in the pipeline. The negative value in repainting_ranges means the padding from the start of the audio. +# For example, repainting_ranges=[(-10, 30), (160, 200)] means we want to repaint the audio from -10s to 30s (with 10s padding before the start) and from 160s to 200s. The non-existent parts will be padded with silence. +# Repainting strength denotes the intensity of repainting area, where 0 means no repainting (keep the original audio) and 1 means full repainting. +audio = pipe( + prompt=prompt, + lyrics=lyrics, + task_type="repaint", + src_audio=src_audio, + repainting_ranges=[(-10, 30), (150, 200)], + repainting_strength=1.0, + duration=210, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=1, + num_inference_steps=50, + cfg_scale=4.0, +) + +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-base-repaint.wav") diff --git a/examples/ace_step/model_inference/acestep-v15-base.py b/examples/ace_step/model_inference/acestep-v15-base.py new file mode 100644 index 0000000000000000000000000000000000000000..ccc719545b05ac63c99a8f7a383139f2c3f4b95f --- /dev/null +++ b/examples/ace_step/model_inference/acestep-v15-base.py @@ -0,0 +1,31 @@ +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio +import torch + + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/acestep-v15-base", origin_file_pattern="model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), +) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' +audio = pipe( + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=42, + num_inference_steps=50, + cfg_scale=4.0, +) +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-base.wav") diff --git a/examples/ace_step/model_inference/acestep-v15-sft.py b/examples/ace_step/model_inference/acestep-v15-sft.py new file mode 100644 index 0000000000000000000000000000000000000000..64768c2c76352c9bc8225ae92370e6b8af8ffa86 --- /dev/null +++ b/examples/ace_step/model_inference/acestep-v15-sft.py @@ -0,0 +1,38 @@ +""" +Ace-Step 1.5 SFT (supervised fine-tuned) — Text-to-Music inference example. + +SFT variant is fine-tuned for specific music styles. +Non-turbo model: uses num_inference_steps=30, cfg_scale=4.0. +""" +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio +import torch + + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/acestep-v15-sft", origin_file_pattern="model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), +) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' + +audio = pipe( + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=42, + num_inference_steps=50, + cfg_scale=4.0, +) +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-sft.wav") diff --git a/examples/ace_step/model_inference/acestep-v15-turbo-continuous.py b/examples/ace_step/model_inference/acestep-v15-turbo-continuous.py new file mode 100644 index 0000000000000000000000000000000000000000..f587a8f828be0df5bc46e516201dc02b09b60087 --- /dev/null +++ b/examples/ace_step/model_inference/acestep-v15-turbo-continuous.py @@ -0,0 +1,36 @@ +""" +Ace-Step 1.5 Turbo (continuous, shift 1-5) — Text-to-Music inference example. + +Turbo model: no num_inference_steps or cfg_scale (use defaults). +Continuous variant: handles shift range internally, no shift parameter needed. +""" +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio +import torch + + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/acestep-v15-turbo-continuous", origin_file_pattern="model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), +) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' + +audio = pipe( + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=42, +) +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-turbo-continuous.wav") diff --git a/examples/ace_step/model_inference/acestep-v15-turbo-shift1.py b/examples/ace_step/model_inference/acestep-v15-turbo-shift1.py new file mode 100644 index 0000000000000000000000000000000000000000..bb5f6f9b382e3dc8d8e8bd9ebfb116ced0a7b1fe --- /dev/null +++ b/examples/ace_step/model_inference/acestep-v15-turbo-shift1.py @@ -0,0 +1,37 @@ +""" +Ace-Step 1.5 Turbo (shift=1) — Text-to-Music inference example. + +Turbo model: no num_inference_steps or cfg_scale (use defaults). +shift=1: default value, no need to pass. +""" +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio +import torch + + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/acestep-v15-turbo-shift1", origin_file_pattern="model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), +) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' + +audio = pipe( + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + shift=1, + seed=42, +) +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-turbo-shift1.wav") diff --git a/examples/ace_step/model_inference/acestep-v15-turbo-shift3.py b/examples/ace_step/model_inference/acestep-v15-turbo-shift3.py new file mode 100644 index 0000000000000000000000000000000000000000..7b761659ea287432e95ac9a8ba71e387a42ef26b --- /dev/null +++ b/examples/ace_step/model_inference/acestep-v15-turbo-shift3.py @@ -0,0 +1,37 @@ +""" +Ace-Step 1.5 Turbo (shift=3) — Text-to-Music inference example. + +Turbo model: no num_inference_steps or cfg_scale (use defaults). +shift=3: explicitly passed for this variant. +""" +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio +import torch + + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/acestep-v15-turbo-shift3", origin_file_pattern="model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), +) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' + +audio = pipe( + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=42, + shift=3, +) +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-turbo-shift3.wav") diff --git a/examples/ace_step/model_inference/acestep-v15-xl-base.py b/examples/ace_step/model_inference/acestep-v15-xl-base.py new file mode 100644 index 0000000000000000000000000000000000000000..61a78eabfdc2a40971d18bdfd51046a00b8abfd1 --- /dev/null +++ b/examples/ace_step/model_inference/acestep-v15-xl-base.py @@ -0,0 +1,38 @@ +""" +Ace-Step 1.5 XL Base (32 layers, hidden_size=2560) — Text-to-Music inference example. + +XL variant with larger capacity for higher quality generation. +Non-turbo model: uses num_inference_steps=30, cfg_scale=4.0. +""" +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio +import torch + + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/acestep-v15-xl-base", origin_file_pattern="model-*.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), +) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' + +audio = pipe( + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=42, + num_inference_steps=50, + cfg_scale=4.0, +) +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-xl-base.wav") diff --git a/examples/ace_step/model_inference/acestep-v15-xl-sft.py b/examples/ace_step/model_inference/acestep-v15-xl-sft.py new file mode 100644 index 0000000000000000000000000000000000000000..0ba23524a5cdf5989a85242f935adcfabacdc95f --- /dev/null +++ b/examples/ace_step/model_inference/acestep-v15-xl-sft.py @@ -0,0 +1,37 @@ +""" +Ace-Step 1.5 XL SFT (32 layers, supervised fine-tuned) — Text-to-Music inference example. + +Non-turbo model: uses num_inference_steps=30, cfg_scale=4.0. +""" +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio +import torch + + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/acestep-v15-xl-sft", origin_file_pattern="model-*.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), +) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' + +audio = pipe( + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=42, + num_inference_steps=50, + cfg_scale=4.0, +) +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-xl-sft.wav") diff --git a/examples/ace_step/model_inference/acestep-v15-xl-turbo.py b/examples/ace_step/model_inference/acestep-v15-xl-turbo.py new file mode 100644 index 0000000000000000000000000000000000000000..c23c6111f778b018c359c38c9872e50a2faace26 --- /dev/null +++ b/examples/ace_step/model_inference/acestep-v15-xl-turbo.py @@ -0,0 +1,36 @@ +""" +Ace-Step 1.5 XL Turbo (32 layers, fast generation) — Text-to-Music inference example. + +Turbo model: no num_inference_steps or cfg_scale (use defaults). +shift=3: explicitly passed for this variant. +""" +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio +import torch + + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/acestep-v15-xl-turbo", origin_file_pattern="model-*.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), +) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' + +audio = pipe( + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=42, +) +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-xl-turbo.wav") diff --git a/examples/ace_step/model_inference/acestep15xlsft-vocals2music.py b/examples/ace_step/model_inference/acestep15xlsft-vocals2music.py new file mode 100644 index 0000000000000000000000000000000000000000..6efd900c812d780f826bd72262197c232355a7cd --- /dev/null +++ b/examples/ace_step/model_inference/acestep15xlsft-vocals2music.py @@ -0,0 +1,105 @@ +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.diffusion.template import TemplatePipeline +from diffsynth.utils.data.audio import save_audio, read_audio +from modelscope import snapshot_download +import torch + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/acestep-v15-xl-sft", origin_file_pattern="model-*.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), +) +pipe.load_lora( + pipe.dit, + # This LoRA is recommended. + ModelConfig(model_id="DiffSynth-Studio/acestep15xlsft-lora-music", origin_file_pattern="model.safetensors") +) +template = TemplatePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ModelConfig(model_id="DiffSynth-Studio/acestep15xlsft-vocals2music")], +) + +snapshot_download("DiffSynth-Studio/acestep15xlsft-vocals2music", allow_file_pattern="assets/vocals_male.wav", local_dir="data") +vocals, sample_rate = read_audio("data/assets/vocals_male.wav", resample=True, resample_rate=pipe.vae.sampling_rate) +lyrics = """ +[Verse 1] +深夜的屏幕,微光在闪烁 +指尖敲击着,未知的脉络 +不再是孤岛,独自去摸索 +这里有一片海,等待你停泊 + +从零到一的距离,不再遥远 +丰富的模型,静候被点燃 +打破围墙的界限,推倒高墙 +让智慧的火花,自由地碰撞 + +[Pre-Chorus] +听,算法在呼吸,心跳同频共振 +看,开放的火炬,照亮前行路程 +每一个 Commit,都是真诚的见证 +每一次 Fork,都连接着可能 + +[Chorus] +魔搭社区,汇聚世界的目光 +开放的力量,让技术不再隐藏 +我们在云端,编织梦想的网 +探索的尽头,是无限的远方 + +ModelScope,连接你我心房 +共享的代码,是最美的乐章 +不论来自何方,无论身在何处 +在这里创造,让未来发光 + +[Verse 2] +CV 的眼眸,看清世间万象 +NLP 的低语,读懂文字芬芳 +音频的波动,捕捉灵魂声响 +多模态的世界,由此刻启航 + +不需要重复造轮子的疲惫 +站在巨人的肩膀,看得更远 +开发者的心血,开放的精神 +在这里传承,变得如此纯粹 + +[Bridge] +也许会有疑惑,也许会有迷茫 +但社区的温暖,是坚实的后盾墙 +讨论区的热帖,指引方向 +协作的光芒,比星光更亮 + +打破壁垒! +拥抱开放! +探索未知! +就在此刻! + +[Chorus] +魔搭社区,汇聚世界的目光 +开放的力量,让技术不再隐藏 +我们在云端,编织梦想的网 +探索的尽头,是无限的远方 + +让未来发光! +""" +prompt = "Music with clear vocals" +audio = template( + pipe, + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=42, + num_inference_steps=100, + cfg_scale=1.0, + template_inputs = [{"audio": (vocals, sample_rate), "scale": 1}], + shift=6, +) +save_audio(audio, pipe.vae.sampling_rate, "audio_output.wav") \ No newline at end of file diff --git a/examples/ace_step/model_inference_low_vram/Ace-Step1.5.py b/examples/ace_step/model_inference_low_vram/Ace-Step1.5.py new file mode 100644 index 0000000000000000000000000000000000000000..72c8296b62b1bba6990210efd24ad752b8d26e11 --- /dev/null +++ b/examples/ace_step/model_inference_low_vram/Ace-Step1.5.py @@ -0,0 +1,67 @@ +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio +from modelscope import dataset_snapshot_download +import torch + + +vram_config = { + "offload_dtype": torch.bfloat16, + "offload_device": "cpu", + "onload_dtype": torch.bfloat16, + "onload_device": "cpu", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} + + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="acestep-v15-turbo/model.safetensors", **vram_config), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors", **vram_config), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors", **vram_config), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' +audio = pipe( + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=42, +) + +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-turbo-low-vram.wav") + +# input audio codes as reference +dataset_snapshot_download( + dataset_id="DiffSynth-Studio/diffsynth_example_dataset", + local_dir="data/diffsynth_example_dataset", + allow_file_pattern="ace_step/Ace-Step1.5/audio_codes_input.txt", +) +with open("data/diffsynth_example_dataset/ace_step/Ace-Step1.5/audio_codes_input.txt", "r") as f: + audio_code_string = f.read().strip() + +audio = pipe( + prompt=prompt, + lyrics=lyrics, + task_type="cover", + audio_code_string=audio_code_string, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=42, +) +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-turbo5-with-audio-codes-low-vram.wav") diff --git a/examples/ace_step/model_inference_low_vram/acestep-v15-base-CoverTask.py b/examples/ace_step/model_inference_low_vram/acestep-v15-base-CoverTask.py new file mode 100644 index 0000000000000000000000000000000000000000..0884f6e22209594372974840e9299f29d32043a6 --- /dev/null +++ b/examples/ace_step/model_inference_low_vram/acestep-v15-base-CoverTask.py @@ -0,0 +1,57 @@ +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio, read_audio +from modelscope import dataset_snapshot_download +import torch + +vram_config = { + "offload_dtype": torch.bfloat16, + "offload_device": "cpu", + "onload_dtype": torch.bfloat16, + "onload_device": "cpu", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/acestep-v15-base", origin_file_pattern="model.safetensors", **vram_config), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors", **vram_config), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors", **vram_config), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' + +dataset_snapshot_download( + dataset_id="DiffSynth-Studio/diffsynth_example_dataset", + local_dir="data/diffsynth_example_dataset", + allow_file_pattern="ace_step/acestep-v15-base-CoverTask/audio.wav", +) + +src_audio, sr = read_audio("data/diffsynth_example_dataset/ace_step/acestep-v15-base-CoverTask/audio.wav", resample=True, resample_rate=pipe.vae.sampling_rate) +# audio_cover_strength controls the steps of doing cover tasks. [0, num_inference_steps * audio_cover_strength] steps will be cover steps, and the rest will be regular text-to-music generation steps. +# denoising_strength controls how the output audio is influenced by the source audio in cover tasks. +audio = pipe( + prompt=prompt, + lyrics=lyrics, + task_type="cover", + src_audio=src_audio, + audio_cover_strength=0.5, + denoising_strength=0.9, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=42, + num_inference_steps=50, + cfg_scale=4.0, +) +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-base-cover.wav") diff --git a/examples/ace_step/model_inference_low_vram/acestep-v15-base-RepaintTask.py b/examples/ace_step/model_inference_low_vram/acestep-v15-base-RepaintTask.py new file mode 100644 index 0000000000000000000000000000000000000000..44a377f64492ff37a8850ef7e95ca0d2a631ad39 --- /dev/null +++ b/examples/ace_step/model_inference_low_vram/acestep-v15-base-RepaintTask.py @@ -0,0 +1,59 @@ +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio, read_audio +from modelscope import dataset_snapshot_download +import torch + +vram_config = { + "offload_dtype": torch.bfloat16, + "offload_device": "cpu", + "onload_dtype": torch.bfloat16, + "onload_device": "cpu", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/acestep-v15-base", origin_file_pattern="model.safetensors", **vram_config), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors", **vram_config), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors", **vram_config), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' + +dataset_snapshot_download( + dataset_id="DiffSynth-Studio/diffsynth_example_dataset", + local_dir="data/diffsynth_example_dataset", + allow_file_pattern="ace_step/acestep-v15-base-RepaintTask/audio.wav", +) + +src_audio, sr = read_audio("data/diffsynth_example_dataset/ace_step/acestep-v15-base-RepaintTask/audio.wav", resample=True, resample_rate=pipe.vae.sampling_rate) +# repainting_ranges are in seconds, and will be converted to frames internally in the pipeline. The negative value in repainting_ranges means the padding from the start of the audio. +# For example, repainting_ranges=[(-10, 30), (160, 200)] means we want to repaint the audio from -10s to 30s (with 10s padding before the start) and from 160s to 200s. The non-existent parts will be padded with silence. +# Repainting strength denotes the intensity of repainting area, where 0 means no repainting (keep the original audio) and 1 means full repainting. +audio = pipe( + prompt=prompt, + lyrics=lyrics, + task_type="repaint", + src_audio=src_audio, + repainting_ranges=[(-10, 30), (150, 200)], + repainting_strength=1.0, + duration=210, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=1, + num_inference_steps=50, + cfg_scale=4.0, +) + +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-base-repaint.wav") diff --git a/examples/ace_step/model_inference_low_vram/acestep-v15-base.py b/examples/ace_step/model_inference_low_vram/acestep-v15-base.py new file mode 100644 index 0000000000000000000000000000000000000000..e77341c8bbe9a4679feb003eeb0c3ece40a4a3ff --- /dev/null +++ b/examples/ace_step/model_inference_low_vram/acestep-v15-base.py @@ -0,0 +1,44 @@ +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio +import torch + + +vram_config = { + "offload_dtype": torch.bfloat16, + "offload_device": "cpu", + "onload_dtype": torch.bfloat16, + "onload_device": "cpu", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} + + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/acestep-v15-base", origin_file_pattern="model.safetensors", **vram_config), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors", **vram_config), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors", **vram_config), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' +audio = pipe( + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=42, + num_inference_steps=50, + cfg_scale=4.0, +) +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-base-low-vram.wav") diff --git a/examples/ace_step/model_inference_low_vram/acestep-v15-sft.py b/examples/ace_step/model_inference_low_vram/acestep-v15-sft.py new file mode 100644 index 0000000000000000000000000000000000000000..b604d829595e022a5377532ef294003ddd2a70b6 --- /dev/null +++ b/examples/ace_step/model_inference_low_vram/acestep-v15-sft.py @@ -0,0 +1,44 @@ +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio +import torch + + +vram_config = { + "offload_dtype": torch.bfloat16, + "offload_device": "cpu", + "onload_dtype": torch.bfloat16, + "onload_device": "cpu", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} + + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/acestep-v15-sft", origin_file_pattern="model.safetensors", **vram_config), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors", **vram_config), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors", **vram_config), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' +audio = pipe( + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=42, + num_inference_steps=50, + cfg_scale=4.0, +) +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-sft-low-vram.wav") diff --git a/examples/ace_step/model_inference_low_vram/acestep-v15-turbo-continuous.py b/examples/ace_step/model_inference_low_vram/acestep-v15-turbo-continuous.py new file mode 100644 index 0000000000000000000000000000000000000000..8c4f5b2fb73f40e422e59e0ae69c15937aaaf066 --- /dev/null +++ b/examples/ace_step/model_inference_low_vram/acestep-v15-turbo-continuous.py @@ -0,0 +1,42 @@ +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio +import torch + + +vram_config = { + "offload_dtype": torch.bfloat16, + "offload_device": "cpu", + "onload_dtype": torch.bfloat16, + "onload_device": "cpu", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} + + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/acestep-v15-turbo-continuous", origin_file_pattern="model.safetensors", **vram_config), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors", **vram_config), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors", **vram_config), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' +audio = pipe( + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=42, +) +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-turbo-continuous-low-vram.wav") diff --git a/examples/ace_step/model_inference_low_vram/acestep-v15-turbo-shift1.py b/examples/ace_step/model_inference_low_vram/acestep-v15-turbo-shift1.py new file mode 100644 index 0000000000000000000000000000000000000000..780ace972ef4c71e00e40098288d530cd5da6df7 --- /dev/null +++ b/examples/ace_step/model_inference_low_vram/acestep-v15-turbo-shift1.py @@ -0,0 +1,43 @@ +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio +import torch + + +vram_config = { + "offload_dtype": torch.bfloat16, + "offload_device": "cpu", + "onload_dtype": torch.bfloat16, + "onload_device": "cpu", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} + + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/acestep-v15-turbo-shift1", origin_file_pattern="model.safetensors", **vram_config), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors", **vram_config), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors", **vram_config), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' +audio = pipe( + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=42, + shift=1, +) +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-turbo-shift1-low-vram.wav") diff --git a/examples/ace_step/model_inference_low_vram/acestep-v15-turbo-shift3.py b/examples/ace_step/model_inference_low_vram/acestep-v15-turbo-shift3.py new file mode 100644 index 0000000000000000000000000000000000000000..7d3a552f074d69b424099407ea4ae80a913d2f85 --- /dev/null +++ b/examples/ace_step/model_inference_low_vram/acestep-v15-turbo-shift3.py @@ -0,0 +1,43 @@ +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio +import torch + + +vram_config = { + "offload_dtype": torch.bfloat16, + "offload_device": "cpu", + "onload_dtype": torch.bfloat16, + "onload_device": "cpu", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} + + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/acestep-v15-turbo-shift3", origin_file_pattern="model.safetensors", **vram_config), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors", **vram_config), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors", **vram_config), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' +audio = pipe( + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=42, + shift=3, +) +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-turbo-shift3-low-vram.wav") diff --git a/examples/ace_step/model_inference_low_vram/acestep-v15-xl-base.py b/examples/ace_step/model_inference_low_vram/acestep-v15-xl-base.py new file mode 100644 index 0000000000000000000000000000000000000000..6e58289050391e0ed7e2a939df8b0d66fac51076 --- /dev/null +++ b/examples/ace_step/model_inference_low_vram/acestep-v15-xl-base.py @@ -0,0 +1,45 @@ +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio +import torch + +torch.cuda.reset_peak_memory_stats("cuda") + +vram_config = { + "offload_dtype": torch.bfloat16, + "offload_device": "cpu", + "onload_dtype": torch.bfloat16, + "onload_device": "cpu", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} + + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/acestep-v15-xl-base", origin_file_pattern="model-*.safetensors", **vram_config), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors", **vram_config), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors", **vram_config), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' +audio = pipe( + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=42, + num_inference_steps=50, + cfg_scale=4.0, +) +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-xl-base-low-vram.wav") diff --git a/examples/ace_step/model_inference_low_vram/acestep-v15-xl-sft.py b/examples/ace_step/model_inference_low_vram/acestep-v15-xl-sft.py new file mode 100644 index 0000000000000000000000000000000000000000..e67667dfbc9471102c7d2a87c79572d61b58cf47 --- /dev/null +++ b/examples/ace_step/model_inference_low_vram/acestep-v15-xl-sft.py @@ -0,0 +1,44 @@ +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio +import torch + + +vram_config = { + "offload_dtype": torch.bfloat16, + "offload_device": "cpu", + "onload_dtype": torch.bfloat16, + "onload_device": "cpu", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} + + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/acestep-v15-xl-sft", origin_file_pattern="model-*.safetensors", **vram_config), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors", **vram_config), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors", **vram_config), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' +audio = pipe( + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=42, + num_inference_steps=50, + cfg_scale=4.0, +) +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-xl-sft-low-vram.wav") diff --git a/examples/ace_step/model_inference_low_vram/acestep-v15-xl-turbo.py b/examples/ace_step/model_inference_low_vram/acestep-v15-xl-turbo.py new file mode 100644 index 0000000000000000000000000000000000000000..cf7893d1e511d46ab3928963e7927a8c343ce521 --- /dev/null +++ b/examples/ace_step/model_inference_low_vram/acestep-v15-xl-turbo.py @@ -0,0 +1,42 @@ +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio +import torch + + +vram_config = { + "offload_dtype": torch.bfloat16, + "offload_device": "cpu", + "onload_dtype": torch.bfloat16, + "onload_device": "cpu", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} + + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/acestep-v15-xl-turbo", origin_file_pattern="model-*.safetensors", **vram_config), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors", **vram_config), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors", **vram_config), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' +audio = pipe( + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=42, +) +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-xl-turbo-low-vram.wav") diff --git a/examples/ace_step/model_inference_low_vram/acestep15xlsft-vocals2music.py b/examples/ace_step/model_inference_low_vram/acestep15xlsft-vocals2music.py new file mode 100644 index 0000000000000000000000000000000000000000..4550e806448fde366502ba27eb0821e8b1d7c9a0 --- /dev/null +++ b/examples/ace_step/model_inference_low_vram/acestep15xlsft-vocals2music.py @@ -0,0 +1,117 @@ +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.diffusion.template import TemplatePipeline +from diffsynth.utils.data.audio import save_audio, read_audio +from modelscope import snapshot_download +import torch + +vram_config = { + "offload_dtype": torch.bfloat16, + "offload_device": "cpu", + "onload_dtype": torch.bfloat16, + "onload_device": "cpu", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/acestep-v15-xl-sft", origin_file_pattern="model-*.safetensors", **vram_config), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors", **vram_config), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors", **vram_config), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) +pipe.load_lora( + pipe.dit, + # This LoRA is recommended. + ModelConfig(model_id="DiffSynth-Studio/acestep15xlsft-lora-music", origin_file_pattern="model.safetensors") +) +template = TemplatePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + lazy_loading=True, + model_configs=[ModelConfig(model_id="DiffSynth-Studio/acestep15xlsft-vocals2music")], +) + +snapshot_download("DiffSynth-Studio/acestep15xlsft-vocals2music", allow_file_pattern="assets/vocals_male.wav", local_dir="data") +vocals, sample_rate = read_audio("data/assets/vocals_male.wav", resample=True, resample_rate=pipe.vae.sampling_rate) +lyrics = """ +[Verse 1] +深夜的屏幕,微光在闪烁 +指尖敲击着,未知的脉络 +不再是孤岛,独自去摸索 +这里有一片海,等待你停泊 + +从零到一的距离,不再遥远 +丰富的模型,静候被点燃 +打破围墙的界限,推倒高墙 +让智慧的火花,自由地碰撞 + +[Pre-Chorus] +听,算法在呼吸,心跳同频共振 +看,开放的火炬,照亮前行路程 +每一个 Commit,都是真诚的见证 +每一次 Fork,都连接着可能 + +[Chorus] +魔搭社区,汇聚世界的目光 +开放的力量,让技术不再隐藏 +我们在云端,编织梦想的网 +探索的尽头,是无限的远方 + +ModelScope,连接你我心房 +共享的代码,是最美的乐章 +不论来自何方,无论身在何处 +在这里创造,让未来发光 + +[Verse 2] +CV 的眼眸,看清世间万象 +NLP 的低语,读懂文字芬芳 +音频的波动,捕捉灵魂声响 +多模态的世界,由此刻启航 + +不需要重复造轮子的疲惫 +站在巨人的肩膀,看得更远 +开发者的心血,开放的精神 +在这里传承,变得如此纯粹 + +[Bridge] +也许会有疑惑,也许会有迷茫 +但社区的温暖,是坚实的后盾墙 +讨论区的热帖,指引方向 +协作的光芒,比星光更亮 + +打破壁垒! +拥抱开放! +探索未知! +就在此刻! + +[Chorus] +魔搭社区,汇聚世界的目光 +开放的力量,让技术不再隐藏 +我们在云端,编织梦想的网 +探索的尽头,是无限的远方 + +让未来发光! +""" +prompt = "Music with clear vocals" +audio = template( + pipe, + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=42, + num_inference_steps=100, + cfg_scale=1.0, + template_inputs = [{"audio": (vocals, sample_rate), "scale": 1}], + shift=6, +) +save_audio(audio, pipe.vae.sampling_rate, "audio_output.wav") \ No newline at end of file diff --git a/examples/ace_step/model_training/full/Ace-Step1.5.sh b/examples/ace_step/model_training/full/Ace-Step1.5.sh new file mode 100644 index 0000000000000000000000000000000000000000..b4cea1842c7df65d311f2907da0879f9a3652444 --- /dev/null +++ b/examples/ace_step/model_training/full/Ace-Step1.5.sh @@ -0,0 +1,18 @@ +# Dataset: data/diffsynth_example_dataset/ace_step/Ace-Step1.5/ +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "ace_step/Ace-Step1.5/*" --local_dir ./data/diffsynth_example_dataset + +accelerate launch examples/ace_step/model_training/train.py \ + --learning_rate 1e-5 \ + --num_epochs 2 \ + --trainable_models "dit" \ + --use_gradient_checkpointing \ + --find_unused_parameters \ + --dataset_base_path "./data/diffsynth_example_dataset/ace_step/Ace-Step1.5" \ + --dataset_metadata_path "./data/diffsynth_example_dataset/ace_step/Ace-Step1.5/metadata.json" \ + --model_id_with_origin_paths "ACE-Step/Ace-Step1.5:acestep-v15-turbo/model.safetensors,ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/model.safetensors,ACE-Step/Ace-Step1.5:vae/diffusion_pytorch_model.safetensors" \ + --tokenizer_path "ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/" \ + --silence_latent_path "ACE-Step/Ace-Step1.5:acestep-v15-turbo/silence_latent.pt" \ + --remove_prefix_in_ckpt "pipe.dit." \ + --dataset_repeat 50 \ + --output_path "./models/train/Ace-Step1.5_full" \ + --data_file_keys "audio" diff --git a/examples/ace_step/model_training/full/acestep-v15-base.sh b/examples/ace_step/model_training/full/acestep-v15-base.sh new file mode 100644 index 0000000000000000000000000000000000000000..1e99d39ae4d1563ffa97a854fb2f829c7e2d7e8f --- /dev/null +++ b/examples/ace_step/model_training/full/acestep-v15-base.sh @@ -0,0 +1,18 @@ +# Dataset: data/diffsynth_example_dataset/ace_step/acestep-v15-base/ +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "ace_step/acestep-v15-base/*" --local_dir ./data/diffsynth_example_dataset + +accelerate launch examples/ace_step/model_training/train.py \ + --learning_rate 1e-5 \ + --num_epochs 2 \ + --trainable_models "dit" \ + --use_gradient_checkpointing \ + --find_unused_parameters \ + --dataset_base_path "./data/diffsynth_example_dataset/ace_step/acestep-v15-base" \ + --dataset_metadata_path "./data/diffsynth_example_dataset/ace_step/acestep-v15-base/metadata.json" \ + --model_id_with_origin_paths "ACE-Step/acestep-v15-base:model.safetensors,ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/model.safetensors,ACE-Step/Ace-Step1.5:vae/diffusion_pytorch_model.safetensors" \ + --tokenizer_path "ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/" \ + --silence_latent_path "ACE-Step/Ace-Step1.5:acestep-v15-turbo/silence_latent.pt" \ + --remove_prefix_in_ckpt "pipe.dit." \ + --dataset_repeat 50 \ + --output_path "./models/train/acestep-v15-base_full" \ + --data_file_keys "audio" diff --git a/examples/ace_step/model_training/full/acestep-v15-sft.sh b/examples/ace_step/model_training/full/acestep-v15-sft.sh new file mode 100644 index 0000000000000000000000000000000000000000..c80152a39afaf0fb56a52e6dba3082f1cdde0241 --- /dev/null +++ b/examples/ace_step/model_training/full/acestep-v15-sft.sh @@ -0,0 +1,18 @@ +# Dataset: data/diffsynth_example_dataset/ace_step/acestep-v15-sft/ +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "ace_step/acestep-v15-sft/*" --local_dir ./data/diffsynth_example_dataset + +accelerate launch examples/ace_step/model_training/train.py \ + --learning_rate 1e-5 \ + --num_epochs 2 \ + --trainable_models "dit" \ + --use_gradient_checkpointing \ + --find_unused_parameters \ + --dataset_base_path "./data/diffsynth_example_dataset/ace_step/acestep-v15-sft" \ + --dataset_metadata_path "./data/diffsynth_example_dataset/ace_step/acestep-v15-sft/metadata.json" \ + --model_id_with_origin_paths "ACE-Step/acestep-v15-sft:model.safetensors,ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/model.safetensors,ACE-Step/Ace-Step1.5:vae/diffusion_pytorch_model.safetensors" \ + --tokenizer_path "ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/" \ + --silence_latent_path "ACE-Step/Ace-Step1.5:acestep-v15-turbo/silence_latent.pt" \ + --remove_prefix_in_ckpt "pipe.dit." \ + --dataset_repeat 50 \ + --output_path "./models/train/acestep-v15-sft_full" \ + --data_file_keys "audio" diff --git a/examples/ace_step/model_training/full/acestep-v15-turbo-continuous.sh b/examples/ace_step/model_training/full/acestep-v15-turbo-continuous.sh new file mode 100644 index 0000000000000000000000000000000000000000..64b345de5bd1725bc8003ed52f9b16f05b29e90c --- /dev/null +++ b/examples/ace_step/model_training/full/acestep-v15-turbo-continuous.sh @@ -0,0 +1,18 @@ +# Dataset: data/diffsynth_example_dataset/ace_step/acestep-v15-turbo-continuous/ +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "ace_step/acestep-v15-turbo-continuous/*" --local_dir ./data/diffsynth_example_dataset + +accelerate launch examples/ace_step/model_training/train.py \ + --learning_rate 1e-5 \ + --num_epochs 2 \ + --trainable_models "dit" \ + --use_gradient_checkpointing \ + --find_unused_parameters \ + --dataset_base_path "./data/diffsynth_example_dataset/ace_step/acestep-v15-turbo-continuous" \ + --dataset_metadata_path "./data/diffsynth_example_dataset/ace_step/acestep-v15-turbo-continuous/metadata.json" \ + --model_id_with_origin_paths "ACE-Step/acestep-v15-turbo-continuous:model.safetensors,ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/model.safetensors,ACE-Step/Ace-Step1.5:vae/diffusion_pytorch_model.safetensors" \ + --tokenizer_path "ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/" \ + --silence_latent_path "ACE-Step/Ace-Step1.5:acestep-v15-turbo/silence_latent.pt" \ + --remove_prefix_in_ckpt "pipe.dit." \ + --dataset_repeat 50 \ + --output_path "./models/train/acestep-v15-turbo-continuous_full" \ + --data_file_keys "audio" diff --git a/examples/ace_step/model_training/full/acestep-v15-turbo-shift1.sh b/examples/ace_step/model_training/full/acestep-v15-turbo-shift1.sh new file mode 100644 index 0000000000000000000000000000000000000000..d718eb221f455196705d3eaa52e9d7f554604bfa --- /dev/null +++ b/examples/ace_step/model_training/full/acestep-v15-turbo-shift1.sh @@ -0,0 +1,18 @@ +# Dataset: data/diffsynth_example_dataset/ace_step/acestep-v15-turbo-shift1/ +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "ace_step/acestep-v15-turbo-shift1/*" --local_dir ./data/diffsynth_example_dataset + +accelerate launch examples/ace_step/model_training/train.py \ + --learning_rate 1e-5 \ + --num_epochs 2 \ + --trainable_models "dit" \ + --use_gradient_checkpointing \ + --find_unused_parameters \ + --dataset_base_path "./data/diffsynth_example_dataset/ace_step/acestep-v15-turbo-shift1" \ + --dataset_metadata_path "./data/diffsynth_example_dataset/ace_step/acestep-v15-turbo-shift1/metadata.json" \ + --model_id_with_origin_paths "ACE-Step/acestep-v15-turbo-shift1:model.safetensors,ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/model.safetensors,ACE-Step/Ace-Step1.5:vae/diffusion_pytorch_model.safetensors" \ + --tokenizer_path "ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/" \ + --silence_latent_path "ACE-Step/Ace-Step1.5:acestep-v15-turbo/silence_latent.pt" \ + --remove_prefix_in_ckpt "pipe.dit." \ + --dataset_repeat 50 \ + --output_path "./models/train/acestep-v15-turbo-shift1_full" \ + --data_file_keys "audio" diff --git a/examples/ace_step/model_training/full/acestep-v15-turbo-shift3.sh b/examples/ace_step/model_training/full/acestep-v15-turbo-shift3.sh new file mode 100644 index 0000000000000000000000000000000000000000..1fa02ab48d877cacf9a94b19f5dcc630930419d6 --- /dev/null +++ b/examples/ace_step/model_training/full/acestep-v15-turbo-shift3.sh @@ -0,0 +1,18 @@ +# Dataset: data/diffsynth_example_dataset/ace_step/acestep-v15-turbo-shift3/ +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "ace_step/acestep-v15-turbo-shift3/*" --local_dir ./data/diffsynth_example_dataset + +accelerate launch examples/ace_step/model_training/train.py \ + --learning_rate 1e-5 \ + --num_epochs 2 \ + --trainable_models "dit" \ + --use_gradient_checkpointing \ + --find_unused_parameters \ + --dataset_base_path "./data/diffsynth_example_dataset/ace_step/acestep-v15-turbo-shift3" \ + --dataset_metadata_path "./data/diffsynth_example_dataset/ace_step/acestep-v15-turbo-shift3/metadata.json" \ + --model_id_with_origin_paths "ACE-Step/acestep-v15-turbo-shift3:model.safetensors,ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/model.safetensors,ACE-Step/Ace-Step1.5:vae/diffusion_pytorch_model.safetensors" \ + --tokenizer_path "ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/" \ + --silence_latent_path "ACE-Step/Ace-Step1.5:acestep-v15-turbo/silence_latent.pt" \ + --remove_prefix_in_ckpt "pipe.dit." \ + --dataset_repeat 50 \ + --output_path "./models/train/acestep-v15-turbo-shift3_full" \ + --data_file_keys "audio" diff --git a/examples/ace_step/model_training/full/acestep-v15-xl-base.sh b/examples/ace_step/model_training/full/acestep-v15-xl-base.sh new file mode 100644 index 0000000000000000000000000000000000000000..bdccff17c243fa9310c592d910b3bc9e0bec7b73 --- /dev/null +++ b/examples/ace_step/model_training/full/acestep-v15-xl-base.sh @@ -0,0 +1,18 @@ +# Dataset: data/diffsynth_example_dataset/ace_step/acestep-v15-xl-base/ +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "ace_step/acestep-v15-xl-base/*" --local_dir ./data/diffsynth_example_dataset + +accelerate launch examples/ace_step/model_training/train.py \ + --learning_rate 1e-5 \ + --num_epochs 2 \ + --trainable_models "dit" \ + --use_gradient_checkpointing \ + --find_unused_parameters \ + --dataset_base_path "./data/diffsynth_example_dataset/ace_step/acestep-v15-xl-base" \ + --dataset_metadata_path "./data/diffsynth_example_dataset/ace_step/acestep-v15-xl-base/metadata.json" \ + --model_id_with_origin_paths "ACE-Step/acestep-v15-xl-base:model-*.safetensors,ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/model.safetensors,ACE-Step/Ace-Step1.5:vae/diffusion_pytorch_model.safetensors" \ + --tokenizer_path "ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/" \ + --silence_latent_path "ACE-Step/Ace-Step1.5:acestep-v15-turbo/silence_latent.pt" \ + --remove_prefix_in_ckpt "pipe.dit." \ + --dataset_repeat 50 \ + --output_path "./models/train/acestep-v15-xl-base_full" \ + --data_file_keys "audio" diff --git a/examples/ace_step/model_training/full/acestep-v15-xl-sft.sh b/examples/ace_step/model_training/full/acestep-v15-xl-sft.sh new file mode 100644 index 0000000000000000000000000000000000000000..a1dc9f277edc8eb398743845b43afc3b1803d00e --- /dev/null +++ b/examples/ace_step/model_training/full/acestep-v15-xl-sft.sh @@ -0,0 +1,18 @@ +# Dataset: data/diffsynth_example_dataset/ace_step/acestep-v15-xl-sft/ +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "ace_step/acestep-v15-xl-sft/*" --local_dir ./data/diffsynth_example_dataset + +accelerate launch examples/ace_step/model_training/train.py \ + --learning_rate 1e-5 \ + --num_epochs 2 \ + --trainable_models "dit" \ + --use_gradient_checkpointing \ + --find_unused_parameters \ + --dataset_base_path "./data/diffsynth_example_dataset/ace_step/acestep-v15-xl-sft" \ + --dataset_metadata_path "./data/diffsynth_example_dataset/ace_step/acestep-v15-xl-sft/metadata.json" \ + --model_id_with_origin_paths "ACE-Step/acestep-v15-xl-sft:model-*.safetensors,ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/model.safetensors,ACE-Step/Ace-Step1.5:vae/diffusion_pytorch_model.safetensors" \ + --tokenizer_path "ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/" \ + --silence_latent_path "ACE-Step/Ace-Step1.5:acestep-v15-turbo/silence_latent.pt" \ + --remove_prefix_in_ckpt "pipe.dit." \ + --dataset_repeat 50 \ + --output_path "./models/train/acestep-v15-xl-sft_full" \ + --data_file_keys "audio" diff --git a/examples/ace_step/model_training/full/acestep-v15-xl-turbo.sh b/examples/ace_step/model_training/full/acestep-v15-xl-turbo.sh new file mode 100644 index 0000000000000000000000000000000000000000..51ad9b05a0474812472add52ef4cec1882e68f56 --- /dev/null +++ b/examples/ace_step/model_training/full/acestep-v15-xl-turbo.sh @@ -0,0 +1,18 @@ +# Dataset: data/diffsynth_example_dataset/ace_step/acestep-v15-xl-turbo/ +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "ace_step/acestep-v15-xl-turbo/*" --local_dir ./data/diffsynth_example_dataset + +accelerate launch examples/ace_step/model_training/train.py \ + --learning_rate 1e-5 \ + --num_epochs 2 \ + --trainable_models "dit" \ + --use_gradient_checkpointing \ + --find_unused_parameters \ + --dataset_base_path "./data/diffsynth_example_dataset/ace_step/acestep-v15-xl-turbo" \ + --dataset_metadata_path "./data/diffsynth_example_dataset/ace_step/acestep-v15-xl-turbo/metadata.json" \ + --model_id_with_origin_paths "ACE-Step/acestep-v15-xl-turbo:model-*.safetensors,ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/model.safetensors,ACE-Step/Ace-Step1.5:vae/diffusion_pytorch_model.safetensors" \ + --tokenizer_path "ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/" \ + --silence_latent_path "ACE-Step/Ace-Step1.5:acestep-v15-turbo/silence_latent.pt" \ + --remove_prefix_in_ckpt "pipe.dit." \ + --dataset_repeat 50 \ + --output_path "./models/train/acestep-v15-xl-turbo_full" \ + --data_file_keys "audio" diff --git a/examples/ace_step/model_training/full/acestep15xlsft-vocals2music.sh b/examples/ace_step/model_training/full/acestep15xlsft-vocals2music.sh new file mode 100644 index 0000000000000000000000000000000000000000..ede3d6b29d44a02e91d6e046781b185a9650b711 --- /dev/null +++ b/examples/ace_step/model_training/full/acestep15xlsft-vocals2music.sh @@ -0,0 +1,20 @@ +# Dataset: data/diffsynth_example_dataset/ace_step/acestep15xlsft-vocals2music/ +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "ace_step/acestep15xlsft-vocals2music/*" --local_dir ./data/diffsynth_example_dataset + +accelerate launch examples/ace_step/model_training/train.py \ + --learning_rate 1e-6 \ + --num_epochs 2 \ + --trainable_models "template_model" \ + --use_gradient_checkpointing \ + --find_unused_parameters \ + --dataset_base_path "./data/diffsynth_example_dataset/ace_step/acestep15xlsft-vocals2music" \ + --dataset_metadata_path "./data/diffsynth_example_dataset/ace_step/acestep15xlsft-vocals2music/metadata.json" \ + --model_id_with_origin_paths "ACE-Step/acestep-v15-xl-sft:model-*.safetensors,ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/model.safetensors,ACE-Step/Ace-Step1.5:vae/diffusion_pytorch_model.safetensors" \ + --tokenizer_path "ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/" \ + --silence_latent_path "ACE-Step/Ace-Step1.5:acestep-v15-turbo/silence_latent.pt" \ + --remove_prefix_in_ckpt "pipe.template_model." \ + --dataset_repeat 50 \ + --output_path "./models/train/acestep15xlsft-vocals2music_full" \ + --data_file_keys "audio" \ + --template_model_id_or_path "DiffSynth-Studio/acestep15xlsft-vocals2music:" \ + --extra_inputs "template_inputs" diff --git a/examples/ace_step/model_training/lora/Ace-Step1.5.sh b/examples/ace_step/model_training/lora/Ace-Step1.5.sh new file mode 100644 index 0000000000000000000000000000000000000000..fec11fba2891cb07566900fd4c93e7cbcd6f1a19 --- /dev/null +++ b/examples/ace_step/model_training/lora/Ace-Step1.5.sh @@ -0,0 +1,20 @@ +# Dataset: data/diffsynth_example_dataset/ace_step/Ace-Step1.5/ +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "ace_step/Ace-Step1.5/*" --local_dir ./data/diffsynth_example_dataset + +accelerate launch examples/ace_step/model_training/train.py \ + --learning_rate 1e-4 \ + --num_epochs 20 \ + --lora_rank 32 \ + --use_gradient_checkpointing \ + --find_unused_parameters \ + --dataset_base_path "./data/diffsynth_example_dataset/ace_step/Ace-Step1.5" \ + --dataset_metadata_path "./data/diffsynth_example_dataset/ace_step/Ace-Step1.5/metadata.json" \ + --model_id_with_origin_paths "ACE-Step/Ace-Step1.5:acestep-v15-turbo/model.safetensors,ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/model.safetensors,ACE-Step/Ace-Step1.5:vae/diffusion_pytorch_model.safetensors" \ + --tokenizer_path "ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/" \ + --silence_latent_path "ACE-Step/Ace-Step1.5:acestep-v15-turbo/silence_latent.pt" \ + --lora_base_model "dit" \ + --remove_prefix_in_ckpt "pipe.dit." \ + --dataset_repeat 50 \ + --output_path "./models/train/Ace-Step1.5_lora" \ + --lora_target_modules "q_proj,k_proj,v_proj,o_proj,gate_proj,up_proj,down_proj" \ + --data_file_keys "audio" diff --git a/examples/ace_step/model_training/lora/acestep-v15-base.sh b/examples/ace_step/model_training/lora/acestep-v15-base.sh new file mode 100644 index 0000000000000000000000000000000000000000..6ec6be69cec6278193e2b14f3b42d4e34661e842 --- /dev/null +++ b/examples/ace_step/model_training/lora/acestep-v15-base.sh @@ -0,0 +1,20 @@ +# Dataset: data/diffsynth_example_dataset/ace_step/acestep-v15-base/ +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "ace_step/acestep-v15-base/*" --local_dir ./data/diffsynth_example_dataset + +accelerate launch examples/ace_step/model_training/train.py \ + --learning_rate 1e-4 \ + --num_epochs 20 \ + --lora_rank 32 \ + --use_gradient_checkpointing \ + --find_unused_parameters \ + --dataset_base_path "./data/diffsynth_example_dataset/ace_step/acestep-v15-base" \ + --dataset_metadata_path "./data/diffsynth_example_dataset/ace_step/acestep-v15-base/metadata.json" \ + --model_id_with_origin_paths "ACE-Step/acestep-v15-base:model.safetensors,ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/model.safetensors,ACE-Step/Ace-Step1.5:vae/diffusion_pytorch_model.safetensors" \ + --tokenizer_path "ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/" \ + --silence_latent_path "ACE-Step/Ace-Step1.5:acestep-v15-turbo/silence_latent.pt" \ + --lora_base_model "dit" \ + --remove_prefix_in_ckpt "pipe.dit." \ + --dataset_repeat 50 \ + --output_path "./models/train/acestep-v15-base_lora" \ + --lora_target_modules "q_proj,k_proj,v_proj,o_proj,gate_proj,up_proj,down_proj" \ + --data_file_keys "audio" diff --git a/examples/ace_step/model_training/lora/acestep-v15-sft.sh b/examples/ace_step/model_training/lora/acestep-v15-sft.sh new file mode 100644 index 0000000000000000000000000000000000000000..e255b8ea1572f1331b2dd95ebadb0c1f65b218ab --- /dev/null +++ b/examples/ace_step/model_training/lora/acestep-v15-sft.sh @@ -0,0 +1,20 @@ +# Dataset: data/diffsynth_example_dataset/ace_step/acestep-v15-sft/ +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "ace_step/acestep-v15-sft/*" --local_dir ./data/diffsynth_example_dataset + +accelerate launch examples/ace_step/model_training/train.py \ + --learning_rate 1e-4 \ + --num_epochs 20 \ + --lora_rank 32 \ + --use_gradient_checkpointing \ + --find_unused_parameters \ + --dataset_base_path "./data/diffsynth_example_dataset/ace_step/acestep-v15-sft" \ + --dataset_metadata_path "./data/diffsynth_example_dataset/ace_step/acestep-v15-sft/metadata.json" \ + --model_id_with_origin_paths "ACE-Step/acestep-v15-sft:model.safetensors,ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/model.safetensors,ACE-Step/Ace-Step1.5:vae/diffusion_pytorch_model.safetensors" \ + --tokenizer_path "ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/" \ + --silence_latent_path "ACE-Step/Ace-Step1.5:acestep-v15-turbo/silence_latent.pt" \ + --lora_base_model "dit" \ + --remove_prefix_in_ckpt "pipe.dit." \ + --dataset_repeat 50 \ + --output_path "./models/train/acestep-v15-sft_lora" \ + --lora_target_modules "q_proj,k_proj,v_proj,o_proj,gate_proj,up_proj,down_proj" \ + --data_file_keys "audio" diff --git a/examples/ace_step/model_training/lora/acestep-v15-turbo-continuous.sh b/examples/ace_step/model_training/lora/acestep-v15-turbo-continuous.sh new file mode 100644 index 0000000000000000000000000000000000000000..ab66192c0104f7e4d48364b2d9bdf9689200e703 --- /dev/null +++ b/examples/ace_step/model_training/lora/acestep-v15-turbo-continuous.sh @@ -0,0 +1,20 @@ +# Dataset: data/diffsynth_example_dataset/ace_step/acestep-v15-turbo-continuous/ +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "ace_step/acestep-v15-turbo-continuous/*" --local_dir ./data/diffsynth_example_dataset + +accelerate launch examples/ace_step/model_training/train.py \ + --learning_rate 1e-4 \ + --num_epochs 20 \ + --lora_rank 32 \ + --use_gradient_checkpointing \ + --find_unused_parameters \ + --dataset_base_path "./data/diffsynth_example_dataset/ace_step/acestep-v15-turbo-continuous" \ + --dataset_metadata_path "./data/diffsynth_example_dataset/ace_step/acestep-v15-turbo-continuous/metadata.json" \ + --model_id_with_origin_paths "ACE-Step/acestep-v15-turbo-continuous:model.safetensors,ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/model.safetensors,ACE-Step/Ace-Step1.5:vae/diffusion_pytorch_model.safetensors" \ + --tokenizer_path "ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/" \ + --silence_latent_path "ACE-Step/Ace-Step1.5:acestep-v15-turbo/silence_latent.pt" \ + --lora_base_model "dit" \ + --remove_prefix_in_ckpt "pipe.dit." \ + --dataset_repeat 50 \ + --output_path "./models/train/acestep-v15-turbo-continuous_lora" \ + --lora_target_modules "q_proj,k_proj,v_proj,o_proj,gate_proj,up_proj,down_proj" \ + --data_file_keys "audio" diff --git a/examples/ace_step/model_training/lora/acestep-v15-turbo-shift1.sh b/examples/ace_step/model_training/lora/acestep-v15-turbo-shift1.sh new file mode 100644 index 0000000000000000000000000000000000000000..b237998aa1966498b6bb6b18ceaaff4d77f36511 --- /dev/null +++ b/examples/ace_step/model_training/lora/acestep-v15-turbo-shift1.sh @@ -0,0 +1,20 @@ +# Dataset: data/diffsynth_example_dataset/ace_step/acestep-v15-turbo-shift1/ +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "ace_step/acestep-v15-turbo-shift1/*" --local_dir ./data/diffsynth_example_dataset + +accelerate launch examples/ace_step/model_training/train.py \ + --learning_rate 1e-4 \ + --num_epochs 20 \ + --lora_rank 32 \ + --use_gradient_checkpointing \ + --find_unused_parameters \ + --dataset_base_path "./data/diffsynth_example_dataset/ace_step/acestep-v15-turbo-shift1" \ + --dataset_metadata_path "./data/diffsynth_example_dataset/ace_step/acestep-v15-turbo-shift1/metadata.json" \ + --model_id_with_origin_paths "ACE-Step/acestep-v15-turbo-shift1:model.safetensors,ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/model.safetensors,ACE-Step/Ace-Step1.5:vae/diffusion_pytorch_model.safetensors" \ + --tokenizer_path "ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/" \ + --silence_latent_path "ACE-Step/Ace-Step1.5:acestep-v15-turbo/silence_latent.pt" \ + --lora_base_model "dit" \ + --remove_prefix_in_ckpt "pipe.dit." \ + --dataset_repeat 50 \ + --output_path "./models/train/acestep-v15-turbo-shift1_lora" \ + --lora_target_modules "q_proj,k_proj,v_proj,o_proj,gate_proj,up_proj,down_proj" \ + --data_file_keys "audio" diff --git a/examples/ace_step/model_training/lora/acestep-v15-turbo-shift3.sh b/examples/ace_step/model_training/lora/acestep-v15-turbo-shift3.sh new file mode 100644 index 0000000000000000000000000000000000000000..2591f643d82bf8c286e26478b4ae6f28cc04a64d --- /dev/null +++ b/examples/ace_step/model_training/lora/acestep-v15-turbo-shift3.sh @@ -0,0 +1,20 @@ +# Dataset: data/diffsynth_example_dataset/ace_step/acestep-v15-turbo-shift3/ +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "ace_step/acestep-v15-turbo-shift3/*" --local_dir ./data/diffsynth_example_dataset + +accelerate launch examples/ace_step/model_training/train.py \ + --learning_rate 1e-4 \ + --num_epochs 20 \ + --lora_rank 32 \ + --use_gradient_checkpointing \ + --find_unused_parameters \ + --dataset_base_path "./data/diffsynth_example_dataset/ace_step/acestep-v15-turbo-shift3" \ + --dataset_metadata_path "./data/diffsynth_example_dataset/ace_step/acestep-v15-turbo-shift3/metadata.json" \ + --model_id_with_origin_paths "ACE-Step/acestep-v15-turbo-shift3:model.safetensors,ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/model.safetensors,ACE-Step/Ace-Step1.5:vae/diffusion_pytorch_model.safetensors" \ + --tokenizer_path "ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/" \ + --silence_latent_path "ACE-Step/Ace-Step1.5:acestep-v15-turbo/silence_latent.pt" \ + --lora_base_model "dit" \ + --remove_prefix_in_ckpt "pipe.dit." \ + --dataset_repeat 50 \ + --output_path "./models/train/acestep-v15-turbo-shift3_lora" \ + --lora_target_modules "q_proj,k_proj,v_proj,o_proj,gate_proj,up_proj,down_proj" \ + --data_file_keys "audio" diff --git a/examples/ace_step/model_training/lora/acestep-v15-xl-base.sh b/examples/ace_step/model_training/lora/acestep-v15-xl-base.sh new file mode 100644 index 0000000000000000000000000000000000000000..2713d69e39b0eec5754c262975025d91c83619f2 --- /dev/null +++ b/examples/ace_step/model_training/lora/acestep-v15-xl-base.sh @@ -0,0 +1,20 @@ +# Dataset: data/diffsynth_example_dataset/ace_step/acestep-v15-xl-base/ +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "ace_step/acestep-v15-xl-base/*" --local_dir ./data/diffsynth_example_dataset + +accelerate launch examples/ace_step/model_training/train.py \ + --learning_rate 1e-4 \ + --num_epochs 20 \ + --lora_rank 32 \ + --use_gradient_checkpointing \ + --find_unused_parameters \ + --dataset_base_path "./data/diffsynth_example_dataset/ace_step/acestep-v15-xl-base" \ + --dataset_metadata_path "./data/diffsynth_example_dataset/ace_step/acestep-v15-xl-base/metadata.json" \ + --model_id_with_origin_paths "ACE-Step/acestep-v15-xl-base:model-*.safetensors,ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/model.safetensors,ACE-Step/Ace-Step1.5:vae/diffusion_pytorch_model.safetensors" \ + --tokenizer_path "ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/" \ + --silence_latent_path "ACE-Step/Ace-Step1.5:acestep-v15-turbo/silence_latent.pt" \ + --lora_base_model "dit" \ + --remove_prefix_in_ckpt "pipe.dit." \ + --dataset_repeat 50 \ + --output_path "./models/train/acestep-v15-xl-base_lora" \ + --lora_target_modules "q_proj,k_proj,v_proj,o_proj,gate_proj,up_proj,down_proj" \ + --data_file_keys "audio" diff --git a/examples/ace_step/model_training/lora/acestep-v15-xl-sft.sh b/examples/ace_step/model_training/lora/acestep-v15-xl-sft.sh new file mode 100644 index 0000000000000000000000000000000000000000..dfccfeac0ce3d57f2382a7777d98284f302604f7 --- /dev/null +++ b/examples/ace_step/model_training/lora/acestep-v15-xl-sft.sh @@ -0,0 +1,20 @@ +# Dataset: data/diffsynth_example_dataset/ace_step/acestep-v15-xl-sft/ +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "ace_step/acestep-v15-xl-sft/*" --local_dir ./data/diffsynth_example_dataset + +accelerate launch examples/ace_step/model_training/train.py \ + --learning_rate 1e-4 \ + --num_epochs 20 \ + --lora_rank 32 \ + --use_gradient_checkpointing \ + --find_unused_parameters \ + --dataset_base_path "./data/diffsynth_example_dataset/ace_step/acestep-v15-xl-sft" \ + --dataset_metadata_path "./data/diffsynth_example_dataset/ace_step/acestep-v15-xl-sft/metadata.json" \ + --model_id_with_origin_paths "ACE-Step/acestep-v15-xl-sft:model-*.safetensors,ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/model.safetensors,ACE-Step/Ace-Step1.5:vae/diffusion_pytorch_model.safetensors" \ + --tokenizer_path "ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/" \ + --silence_latent_path "ACE-Step/Ace-Step1.5:acestep-v15-turbo/silence_latent.pt" \ + --lora_base_model "dit" \ + --remove_prefix_in_ckpt "pipe.dit." \ + --dataset_repeat 50 \ + --output_path "./models/train/acestep-v15-xl-sft_lora" \ + --lora_target_modules "q_proj,k_proj,v_proj,o_proj,gate_proj,up_proj,down_proj" \ + --data_file_keys "audio" diff --git a/examples/ace_step/model_training/lora/acestep-v15-xl-turbo.sh b/examples/ace_step/model_training/lora/acestep-v15-xl-turbo.sh new file mode 100644 index 0000000000000000000000000000000000000000..76c6d21396aac78f6e56d6c515150bf71e751523 --- /dev/null +++ b/examples/ace_step/model_training/lora/acestep-v15-xl-turbo.sh @@ -0,0 +1,20 @@ +# Dataset: data/diffsynth_example_dataset/ace_step/acestep-v15-xl-turbo/ +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "ace_step/acestep-v15-xl-turbo/*" --local_dir ./data/diffsynth_example_dataset + +accelerate launch examples/ace_step/model_training/train.py \ + --learning_rate 1e-4 \ + --num_epochs 20 \ + --lora_rank 32 \ + --use_gradient_checkpointing \ + --find_unused_parameters \ + --dataset_base_path "./data/diffsynth_example_dataset/ace_step/acestep-v15-xl-turbo" \ + --dataset_metadata_path "./data/diffsynth_example_dataset/ace_step/acestep-v15-xl-turbo/metadata.json" \ + --model_id_with_origin_paths "ACE-Step/acestep-v15-xl-turbo:model-*.safetensors,ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/model.safetensors,ACE-Step/Ace-Step1.5:vae/diffusion_pytorch_model.safetensors" \ + --tokenizer_path "ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/" \ + --silence_latent_path "ACE-Step/Ace-Step1.5:acestep-v15-turbo/silence_latent.pt" \ + --lora_base_model "dit" \ + --remove_prefix_in_ckpt "pipe.dit." \ + --dataset_repeat 50 \ + --output_path "./models/train/acestep-v15-xl-turbo_lora" \ + --lora_target_modules "q_proj,k_proj,v_proj,o_proj,gate_proj,up_proj,down_proj" \ + --data_file_keys "audio" diff --git a/examples/ace_step/model_training/special/split_training/acestep-v15-xl-sft.sh b/examples/ace_step/model_training/special/split_training/acestep-v15-xl-sft.sh new file mode 100644 index 0000000000000000000000000000000000000000..d7a0d19333b27b589d883eb6de4e409c8ebeda10 --- /dev/null +++ b/examples/ace_step/model_training/special/split_training/acestep-v15-xl-sft.sh @@ -0,0 +1,42 @@ +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "ace_step/acestep-v15-xl-sft/*" --local_dir ./data/diffsynth_example_dataset + +# Stage 1: cache deterministic preprocessing outputs. +accelerate launch examples/ace_step/model_training/train.py \ + --learning_rate 1e-4 \ + --num_epochs 20 \ + --lora_rank 32 \ + --use_gradient_checkpointing \ + --find_unused_parameters \ + --dataset_base_path ./data/diffsynth_example_dataset/ace_step/acestep-v15-xl-sft \ + --dataset_metadata_path ./data/diffsynth_example_dataset/ace_step/acestep-v15-xl-sft/metadata.json \ + --model_id_with_origin_paths 'ACE-Step/acestep-v15-xl-sft:model-*.safetensors,ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/model.safetensors,ACE-Step/Ace-Step1.5:vae/diffusion_pytorch_model.safetensors' \ + --tokenizer_path ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/ \ + --silence_latent_path ACE-Step/Ace-Step1.5:acestep-v15-turbo/silence_latent.pt \ + --lora_base_model dit \ + --remove_prefix_in_ckpt pipe.dit. \ + --dataset_repeat 1 \ + --output_path ./models/train/acestep-v15-xl-sft_split_cache \ + --lora_target_modules q_proj,k_proj,v_proj,o_proj,gate_proj,up_proj,down_proj \ + --data_file_keys audio \ + --offload_models "" \ + --task sft:data_process + +# Stage 2: train LoRA from the cached dataset. +accelerate launch examples/ace_step/model_training/train.py \ + --learning_rate 1e-4 \ + --num_epochs 5 \ + --lora_rank 32 \ + --use_gradient_checkpointing \ + --find_unused_parameters \ + --dataset_base_path ./models/train/acestep-v15-xl-sft_split_cache \ + --model_id_with_origin_paths 'ACE-Step/acestep-v15-xl-sft:model-*.safetensors,ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/model.safetensors,ACE-Step/Ace-Step1.5:vae/diffusion_pytorch_model.safetensors' \ + --tokenizer_path ACE-Step/Ace-Step1.5:Qwen3-Embedding-0.6B/ \ + --silence_latent_path ACE-Step/Ace-Step1.5:acestep-v15-turbo/silence_latent.pt \ + --lora_base_model dit \ + --remove_prefix_in_ckpt pipe.dit. \ + --dataset_repeat 50 \ + --output_path ./models/train/acestep-v15-xl-sft_split \ + --lora_target_modules q_proj,k_proj,v_proj,o_proj,gate_proj,up_proj,down_proj \ + --data_file_keys audio \ + --offload_models "" \ + --task sft:train \ No newline at end of file diff --git a/examples/ace_step/model_training/special/split_training/validate.py b/examples/ace_step/model_training/special/split_training/validate.py new file mode 100644 index 0000000000000000000000000000000000000000..df7f47028699ccccb394f1a4ed0a8cc3e7985fb1 --- /dev/null +++ b/examples/ace_step/model_training/special/split_training/validate.py @@ -0,0 +1,33 @@ +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio +import torch + + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/acestep-v15-xl-sft", origin_file_pattern="model-*.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), + silence_latent_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="acestep-v15-turbo/silence_latent.pt"), +) +pipe.load_lora(pipe.dit, './models/train/acestep-v15-xl-sft_split/epoch-4.safetensors', alpha=1) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' +audio = pipe( + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=1, + num_inference_steps=50, + cfg_scale=4.0, +) +save_audio(audio, pipe.vae.sampling_rate, 'split_training_acestep-v15-xl-sft.wav') diff --git a/examples/ace_step/model_training/train.py b/examples/ace_step/model_training/train.py new file mode 100644 index 0000000000000000000000000000000000000000..36a4306347543280af542a43447c914763f1dd23 --- /dev/null +++ b/examples/ace_step/model_training/train.py @@ -0,0 +1,155 @@ +import os +import torch +import math +import argparse +import accelerate +from diffsynth.core import UnifiedDataset +from diffsynth.core.data.operators import ToAbsolutePath, LoadPureAudioWithTorchaudio +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.diffusion import * +os.environ["TOKENIZERS_PARALLELISM"] = "false" + + +class AceStepTrainingModule(DiffusionTrainingModule): + def __init__( + self, + model_paths=None, model_id_with_origin_paths=None, + tokenizer_path=None, silence_latent_path=None, + trainable_models=None, + lora_base_model=None, lora_target_modules="", lora_rank=32, lora_checkpoint=None, + preset_lora_path=None, preset_lora_model=None, + use_gradient_checkpointing=True, + use_gradient_checkpointing_offload=False, + extra_inputs=None, + fp8_models=None, + offload_models=None, + quant_options=None, + template_model_id_or_path=None, + resume_from_checkpoint=None, remove_prefix_in_ckpt=None, + device="cpu", + task="sft", + ): + super().__init__() + model_configs = self.parse_model_configs(model_paths, model_id_with_origin_paths, fp8_models=fp8_models, offload_models=offload_models, quant_options=quant_options, device=device) + text_tokenizer_config = self.parse_path_or_model_id(tokenizer_path, default_value=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/")) + silence_latent_config = self.parse_path_or_model_id(silence_latent_path, default_value=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="acestep-v15-turbo/silence_latent.pt")) + self.pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, device=device, model_configs=model_configs, + text_tokenizer_config=text_tokenizer_config, silence_latent_config=silence_latent_config, + ) + self.pipe = self.load_training_template_model(self.pipe, template_model_id_or_path, use_gradient_checkpointing, use_gradient_checkpointing_offload) + self.pipe = self.split_pipeline_units(task, self.pipe, trainable_models, lora_base_model) + self.resume_from_checkpoint(resume_from_checkpoint, remove_prefix_in_ckpt) + + self.switch_pipe_to_training_mode( + self.pipe, trainable_models, + lora_base_model, lora_target_modules, lora_rank, lora_checkpoint, + preset_lora_path, preset_lora_model, + task=task, + ) + + self.use_gradient_checkpointing = use_gradient_checkpointing + self.use_gradient_checkpointing_offload = use_gradient_checkpointing_offload + self.extra_inputs = extra_inputs.split(",") if extra_inputs is not None else [] + self.fp8_models = fp8_models + self.task = task + self.task_to_loss = { + "sft:data_process": lambda pipe, *args: args, + "sft": lambda pipe, inputs_shared, inputs_posi, inputs_nega: FlowMatchSFTLoss(pipe, **inputs_shared, **inputs_posi), + "sft:train": lambda pipe, inputs_shared, inputs_posi, inputs_nega: FlowMatchSFTLoss(pipe, **inputs_shared, **inputs_posi), + } + + def get_pipeline_inputs(self, data): + inputs_posi = {"prompt": data["prompt"], "positive": True} + inputs_nega = {"positive": False} + duration = math.floor(data['audio'][0].shape[1] / data['audio'][1]) if data.get("audio") is not None else data.get("duration", 60) + inputs_shared = { + "input_audio": data["audio"], + "lyrics": data["lyrics"], + "task_type": "text2music", + "duration": duration, + "bpm": data.get("bpm", 100), + "keyscale": data.get("keyscale", "C major"), + "timesignature": data.get("timesignature", "4"), + "vocal_language": data.get("vocal_language", "unknown"), + "cfg_scale": 1, + "rand_device": self.pipe.device, + "use_gradient_checkpointing": self.use_gradient_checkpointing, + "use_gradient_checkpointing_offload": self.use_gradient_checkpointing_offload, + } + inputs_shared = self.parse_extra_inputs(data, self.extra_inputs, inputs_shared) + return inputs_shared, inputs_posi, inputs_nega + + def forward(self, data, inputs=None): + if inputs is None: inputs = self.get_pipeline_inputs(data) + inputs = self.transfer_data_to_device(inputs, self.pipe.device, self.pipe.torch_dtype) + for unit in self.pipe.units: + inputs = self.pipe.unit_runner(unit, self.pipe, *inputs) + loss = self.task_to_loss[self.task](self.pipe, *inputs) + return loss + + +def ace_step_parser(): + parser = argparse.ArgumentParser(description="ACE-Step training.") + parser = add_general_config(parser) + parser.add_argument("--tokenizer_path", type=str, default=None, help="Tokenizer path in format model_id:origin_pattern.") + parser.add_argument("--silence_latent_path", type=str, default=None, help="Silence latent path in format model_id:origin_pattern.") + parser.add_argument("--initialize_model_on_cpu", default=False, action="store_true", help="Whether to initialize models on CPU.") + parser.add_argument("--max_audio_duration", type=int, default=None, help="Maximum audio length. Audio exceeding the length limit will be truncated.") + return parser + + +if __name__ == "__main__": + parser = ace_step_parser() + args = parser.parse_args() + accelerator = accelerate.Accelerator( + gradient_accumulation_steps=args.gradient_accumulation_steps, + kwargs_handlers=[accelerate.DistributedDataParallelKwargs(find_unused_parameters=args.find_unused_parameters)], + ) + dataset = UnifiedDataset( + base_path=args.dataset_base_path, + metadata_path=args.dataset_metadata_path, + repeat=args.dataset_repeat, + data_file_keys=args.data_file_keys.split(","), + main_data_operator=ToAbsolutePath(args.dataset_base_path) >> LoadPureAudioWithTorchaudio(target_sample_rate=48000, max_audio_duration=args.max_audio_duration), + ) + model = AceStepTrainingModule( + model_paths=args.model_paths, + model_id_with_origin_paths=args.model_id_with_origin_paths, + tokenizer_path=args.tokenizer_path, + silence_latent_path=args.silence_latent_path, + trainable_models=args.trainable_models, + lora_base_model=args.lora_base_model, + lora_target_modules=args.lora_target_modules, + lora_rank=args.lora_rank, + lora_checkpoint=args.lora_checkpoint, + preset_lora_path=args.preset_lora_path, + preset_lora_model=args.preset_lora_model, + use_gradient_checkpointing=args.use_gradient_checkpointing, + use_gradient_checkpointing_offload=args.use_gradient_checkpointing_offload, + extra_inputs=args.extra_inputs, + fp8_models=args.fp8_models, + offload_models=args.offload_models, + quant_options=args.quant_options, + template_model_id_or_path=args.template_model_id_or_path, + resume_from_checkpoint=args.resume_from_checkpoint, + remove_prefix_in_ckpt=args.remove_prefix_in_ckpt, + task=args.task, + device="cpu" if (args.initialize_model_on_cpu or args.enable_model_cpu_offload) else accelerator.device, + ) + model_logger = ModelLogger( + args.output_path, + remove_prefix_in_ckpt=args.remove_prefix_in_ckpt, + enable_tensorboard_log=args.enable_tensorboard_log, + enable_swanlab_log=args.enable_swanlab_log, + swanlab_project=args.swanlab_project, + enable_wandb_log=args.enable_wandb_log, + wandb_project=args.wandb_project, + enable_csv_log=args.enable_csv_log, + ) + launcher_map = { + "sft:data_process": launch_data_process_task, + "sft": launch_training_task, + "sft:train": launch_training_task, + } + launcher_map[args.task](accelerator, dataset, model, model_logger, args=args) diff --git a/examples/ace_step/model_training/validate_full/Ace-Step1.5.py b/examples/ace_step/model_training/validate_full/Ace-Step1.5.py new file mode 100644 index 0000000000000000000000000000000000000000..9f1dc8f7dbb4b4c90839a4eba4f3a16cf3303be2 --- /dev/null +++ b/examples/ace_step/model_training/validate_full/Ace-Step1.5.py @@ -0,0 +1,35 @@ +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio +from diffsynth import load_state_dict +import torch + + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="acestep-v15-turbo/model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), + silence_latent_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="acestep-v15-turbo/silence_latent.pt"), +) +state_dict = load_state_dict("models/train/Ace-Step1.5_full/epoch-1.safetensors") +pipe.dit.load_state_dict(state_dict) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' +audio = pipe( + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=1, + num_inference_steps=50, + cfg_scale=4.0, +) +save_audio(audio, pipe.vae.sampling_rate, "Ace-Step1.5_full.wav") diff --git a/examples/ace_step/model_training/validate_full/acestep-v15-base.py b/examples/ace_step/model_training/validate_full/acestep-v15-base.py new file mode 100644 index 0000000000000000000000000000000000000000..26ce944053ff68bcb1028cb0f18fb31e80ae26f8 --- /dev/null +++ b/examples/ace_step/model_training/validate_full/acestep-v15-base.py @@ -0,0 +1,35 @@ +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio +from diffsynth import load_state_dict +import torch + + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/acestep-v15-base", origin_file_pattern="model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), + silence_latent_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="acestep-v15-turbo/silence_latent.pt"), +) +state_dict = load_state_dict("models/train/acestep-v15-base_full/epoch-1.safetensors") +pipe.dit.load_state_dict(state_dict) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' +audio = pipe( + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=42, + num_inference_steps=50, + cfg_scale=4.0, +) +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-base_full.wav") diff --git a/examples/ace_step/model_training/validate_full/acestep-v15-sft.py b/examples/ace_step/model_training/validate_full/acestep-v15-sft.py new file mode 100644 index 0000000000000000000000000000000000000000..c9e153373452e379ca6539f83fd1984aea788fc4 --- /dev/null +++ b/examples/ace_step/model_training/validate_full/acestep-v15-sft.py @@ -0,0 +1,35 @@ +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio +from diffsynth import load_state_dict +import torch + + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/acestep-v15-sft", origin_file_pattern="model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), + silence_latent_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="acestep-v15-turbo/silence_latent.pt"), +) +state_dict = load_state_dict("models/train/acestep-v15-sft_full/epoch-1.safetensors") +pipe.dit.load_state_dict(state_dict) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' +audio = pipe( + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=1, + num_inference_steps=50, + cfg_scale=4.0, +) +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-sft_full.wav") diff --git a/examples/ace_step/model_training/validate_full/acestep-v15-turbo-continuous.py b/examples/ace_step/model_training/validate_full/acestep-v15-turbo-continuous.py new file mode 100644 index 0000000000000000000000000000000000000000..73b1a82ca8440f54c6f7f30a582daabe264dfbf2 --- /dev/null +++ b/examples/ace_step/model_training/validate_full/acestep-v15-turbo-continuous.py @@ -0,0 +1,35 @@ +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio +from diffsynth import load_state_dict +import torch + + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/acestep-v15-turbo-continuous", origin_file_pattern="model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), + silence_latent_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="acestep-v15-turbo/silence_latent.pt"), +) +state_dict = load_state_dict("models/train/acestep-v15-turbo-continuous_full/epoch-1.safetensors") +pipe.dit.load_state_dict(state_dict) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' +audio = pipe( + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=1, + num_inference_steps=50, + cfg_scale=4.0, +) +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-turbo-continuous_full.wav") diff --git a/examples/ace_step/model_training/validate_full/acestep-v15-turbo-shift1.py b/examples/ace_step/model_training/validate_full/acestep-v15-turbo-shift1.py new file mode 100644 index 0000000000000000000000000000000000000000..cd356be48a9afdaf4aacb3d6c3eee40605ad3410 --- /dev/null +++ b/examples/ace_step/model_training/validate_full/acestep-v15-turbo-shift1.py @@ -0,0 +1,36 @@ +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio +from diffsynth import load_state_dict +import torch + + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/acestep-v15-turbo-shift1", origin_file_pattern="model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), + silence_latent_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="acestep-v15-turbo/silence_latent.pt"), +) +state_dict = load_state_dict("models/train/acestep-v15-turbo-shift1_full/epoch-1.safetensors") +pipe.dit.load_state_dict(state_dict) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' +audio = pipe( + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=1, + num_inference_steps=50, + cfg_scale=4.0, + shift=1, +) +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-turbo-shift1_full.wav") diff --git a/examples/ace_step/model_training/validate_full/acestep-v15-turbo-shift3.py b/examples/ace_step/model_training/validate_full/acestep-v15-turbo-shift3.py new file mode 100644 index 0000000000000000000000000000000000000000..88f0c6b5844e3c612675c69f794c215b58b6162b --- /dev/null +++ b/examples/ace_step/model_training/validate_full/acestep-v15-turbo-shift3.py @@ -0,0 +1,35 @@ +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio +from diffsynth import load_state_dict +import torch + + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/acestep-v15-turbo-shift3", origin_file_pattern="model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), + silence_latent_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="acestep-v15-turbo/silence_latent.pt"), +) +state_dict = load_state_dict("models/train/acestep-v15-turbo-shift3_full/epoch-1.safetensors") +pipe.dit.load_state_dict(state_dict) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' +audio = pipe( + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=1, + num_inference_steps=50, + cfg_scale=4.0, +) +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-turbo-shift3_full.wav") diff --git a/examples/ace_step/model_training/validate_full/acestep-v15-xl-base.py b/examples/ace_step/model_training/validate_full/acestep-v15-xl-base.py new file mode 100644 index 0000000000000000000000000000000000000000..ff192d8fb8e4ed458b89d636125ba84a565fa1d8 --- /dev/null +++ b/examples/ace_step/model_training/validate_full/acestep-v15-xl-base.py @@ -0,0 +1,35 @@ +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio +from diffsynth import load_state_dict +import torch + + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/acestep-v15-xl-base", origin_file_pattern="model-*.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), + silence_latent_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="acestep-v15-turbo/silence_latent.pt"), +) +state_dict = load_state_dict("models/train/acestep-v15-xl-base_full/epoch-1.safetensors") +pipe.dit.load_state_dict(state_dict) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' +audio = pipe( + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=1, + num_inference_steps=50, + cfg_scale=4.0, +) +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-xl-base_full.wav") diff --git a/examples/ace_step/model_training/validate_full/acestep-v15-xl-sft.py b/examples/ace_step/model_training/validate_full/acestep-v15-xl-sft.py new file mode 100644 index 0000000000000000000000000000000000000000..04ca0f666bb7e73156d9fff5d974b7bdb198b855 --- /dev/null +++ b/examples/ace_step/model_training/validate_full/acestep-v15-xl-sft.py @@ -0,0 +1,35 @@ +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio +from diffsynth import load_state_dict +import torch + + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/acestep-v15-xl-sft", origin_file_pattern="model-*.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), + silence_latent_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="acestep-v15-turbo/silence_latent.pt"), +) +state_dict = load_state_dict("models/train/acestep-v15-xl-sft_full/epoch-1.safetensors") +pipe.dit.load_state_dict(state_dict) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' +audio = pipe( + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=1, + num_inference_steps=50, + cfg_scale=4.0, +) +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-xl-sft_full.wav") diff --git a/examples/ace_step/model_training/validate_full/acestep-v15-xl-turbo.py b/examples/ace_step/model_training/validate_full/acestep-v15-xl-turbo.py new file mode 100644 index 0000000000000000000000000000000000000000..b03315ea1a4b4c6db258b63f1af384fa8ffe3c41 --- /dev/null +++ b/examples/ace_step/model_training/validate_full/acestep-v15-xl-turbo.py @@ -0,0 +1,35 @@ +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio +from diffsynth import load_state_dict +import torch + + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/acestep-v15-xl-turbo", origin_file_pattern="model-*.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), + silence_latent_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="acestep-v15-turbo/silence_latent.pt"), +) +state_dict = load_state_dict("models/train/acestep-v15-xl-turbo_full/epoch-1.safetensors") +pipe.dit.load_state_dict(state_dict) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' +audio = pipe( + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=1, + num_inference_steps=50, + cfg_scale=1.0, +) +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-xl-turbo_full.wav") diff --git a/examples/ace_step/model_training/validate_full/acestep15xlsft-vocals2music.py b/examples/ace_step/model_training/validate_full/acestep15xlsft-vocals2music.py new file mode 100644 index 0000000000000000000000000000000000000000..f751cd0ddd6c72adc8f57ec050b4824991d0a7c9 --- /dev/null +++ b/examples/ace_step/model_training/validate_full/acestep15xlsft-vocals2music.py @@ -0,0 +1,107 @@ +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.diffusion.template import TemplatePipeline +from diffsynth.utils.data.audio import save_audio, read_audio +from modelscope import snapshot_download +import torch +from diffsynth import load_state_dict + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/acestep-v15-xl-sft", origin_file_pattern="model-*.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), +) +pipe.load_lora( + pipe.dit, + # This LoRA is recommended. + ModelConfig(model_id="DiffSynth-Studio/acestep15xlsft-lora-music", origin_file_pattern="model.safetensors") +) +template = TemplatePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ModelConfig(model_id="DiffSynth-Studio/acestep15xlsft-vocals2music")], +) +template.models[0].load_state_dict(load_state_dict("models/train/acestep15xlsft-vocals2music_full/epoch-1.safetensors")) + +snapshot_download("DiffSynth-Studio/acestep15xlsft-vocals2music", allow_file_pattern="assets/vocals_male.wav", local_dir="data") +vocals, sample_rate = read_audio("data/assets/vocals_male.wav", resample=True, resample_rate=pipe.vae.sampling_rate) +lyrics = """ +[Verse 1] +深夜的屏幕,微光在闪烁 +指尖敲击着,未知的脉络 +不再是孤岛,独自去摸索 +这里有一片海,等待你停泊 + +从零到一的距离,不再遥远 +丰富的模型,静候被点燃 +打破围墙的界限,推倒高墙 +让智慧的火花,自由地碰撞 + +[Pre-Chorus] +听,算法在呼吸,心跳同频共振 +看,开放的火炬,照亮前行路程 +每一个 Commit,都是真诚的见证 +每一次 Fork,都连接着可能 + +[Chorus] +魔搭社区,汇聚世界的目光 +开放的力量,让技术不再隐藏 +我们在云端,编织梦想的网 +探索的尽头,是无限的远方 + +ModelScope,连接你我心房 +共享的代码,是最美的乐章 +不论来自何方,无论身在何处 +在这里创造,让未来发光 + +[Verse 2] +CV 的眼眸,看清世间万象 +NLP 的低语,读懂文字芬芳 +音频的波动,捕捉灵魂声响 +多模态的世界,由此刻启航 + +不需要重复造轮子的疲惫 +站在巨人的肩膀,看得更远 +开发者的心血,开放的精神 +在这里传承,变得如此纯粹 + +[Bridge] +也许会有疑惑,也许会有迷茫 +但社区的温暖,是坚实的后盾墙 +讨论区的热帖,指引方向 +协作的光芒,比星光更亮 + +打破壁垒! +拥抱开放! +探索未知! +就在此刻! + +[Chorus] +魔搭社区,汇聚世界的目光 +开放的力量,让技术不再隐藏 +我们在云端,编织梦想的网 +探索的尽头,是无限的远方 + +让未来发光! +""" +prompt = "Music with clear vocals" +audio = template( + pipe, + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=42, + num_inference_steps=100, + cfg_scale=1.0, + template_inputs = [{"audio": (vocals, sample_rate), "scale": 1}], + shift=6, +) +save_audio(audio, pipe.vae.sampling_rate, "audio_output.wav") \ No newline at end of file diff --git a/examples/ace_step/model_training/validate_lora/Ace-Step1.5.py b/examples/ace_step/model_training/validate_lora/Ace-Step1.5.py new file mode 100644 index 0000000000000000000000000000000000000000..ff363965900f28d9298f763e689cc0abb910babb --- /dev/null +++ b/examples/ace_step/model_training/validate_lora/Ace-Step1.5.py @@ -0,0 +1,33 @@ +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio +import torch + + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="acestep-v15-turbo/model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), + silence_latent_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="acestep-v15-turbo/silence_latent.pt"), +) +pipe.load_lora(pipe.dit, "models/train/Ace-Step1.5_lora/epoch-9.safetensors", alpha=1) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' +audio = pipe( + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=1, + num_inference_steps=50, + cfg_scale=4.0, +) +save_audio(audio, pipe.vae.sampling_rate, "Ace-Step1.5_lora.wav") diff --git a/examples/ace_step/model_training/validate_lora/acestep-v15-base.py b/examples/ace_step/model_training/validate_lora/acestep-v15-base.py new file mode 100644 index 0000000000000000000000000000000000000000..8915da25f583d946fafcbc5061dc47318188141c --- /dev/null +++ b/examples/ace_step/model_training/validate_lora/acestep-v15-base.py @@ -0,0 +1,33 @@ +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio +import torch + + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/acestep-v15-base", origin_file_pattern="model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), + silence_latent_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="acestep-v15-turbo/silence_latent.pt"), +) +pipe.load_lora(pipe.dit, "models/train/acestep-v15-base_lora/epoch-9.safetensors", alpha=1) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' +audio = pipe( + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=1, + num_inference_steps=50, + cfg_scale=4.0, +) +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-base_lora.wav") diff --git a/examples/ace_step/model_training/validate_lora/acestep-v15-sft.py b/examples/ace_step/model_training/validate_lora/acestep-v15-sft.py new file mode 100644 index 0000000000000000000000000000000000000000..7002d809a14fbb36c0fe1950dad1b6a4e224c4b7 --- /dev/null +++ b/examples/ace_step/model_training/validate_lora/acestep-v15-sft.py @@ -0,0 +1,33 @@ +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio +import torch + + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/acestep-v15-sft", origin_file_pattern="model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), + silence_latent_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="acestep-v15-turbo/silence_latent.pt"), +) +pipe.load_lora(pipe.dit, "models/train/acestep-v15-sft_lora/epoch-9.safetensors", alpha=1) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' +audio = pipe( + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=1, + num_inference_steps=50, + cfg_scale=4.0, +) +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-sft_lora.wav") diff --git a/examples/ace_step/model_training/validate_lora/acestep-v15-turbo-continuous.py b/examples/ace_step/model_training/validate_lora/acestep-v15-turbo-continuous.py new file mode 100644 index 0000000000000000000000000000000000000000..e7461b2e349c0a16ddaa50ad4e1f00bb03d55ed9 --- /dev/null +++ b/examples/ace_step/model_training/validate_lora/acestep-v15-turbo-continuous.py @@ -0,0 +1,33 @@ +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio +import torch + + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/acestep-v15-turbo-continuous", origin_file_pattern="model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), + silence_latent_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="acestep-v15-turbo/silence_latent.pt"), +) +pipe.load_lora(pipe.dit, "models/train/acestep-v15-turbo-continuous_lora/epoch-9.safetensors", alpha=1) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' +audio = pipe( + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=1, + num_inference_steps=50, + cfg_scale=4.0, +) +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-turbo-continuous_lora.wav") diff --git a/examples/ace_step/model_training/validate_lora/acestep-v15-turbo-shift1.py b/examples/ace_step/model_training/validate_lora/acestep-v15-turbo-shift1.py new file mode 100644 index 0000000000000000000000000000000000000000..3163467418c883a1171419e47c8f49daf469dde0 --- /dev/null +++ b/examples/ace_step/model_training/validate_lora/acestep-v15-turbo-shift1.py @@ -0,0 +1,34 @@ +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio +import torch + + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/acestep-v15-turbo-shift1", origin_file_pattern="model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), + silence_latent_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="acestep-v15-turbo/silence_latent.pt"), +) +pipe.load_lora(pipe.dit, "models/train/acestep-v15-turbo-shift1_lora/epoch-9.safetensors", alpha=1) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' +audio = pipe( + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=1, + num_inference_steps=50, + cfg_scale=4.0, + shift=1, +) +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-turbo-shift1_lora.wav") diff --git a/examples/ace_step/model_training/validate_lora/acestep-v15-turbo-shift3.py b/examples/ace_step/model_training/validate_lora/acestep-v15-turbo-shift3.py new file mode 100644 index 0000000000000000000000000000000000000000..9d0f5c59e5667597cd878c85174131aca67160a4 --- /dev/null +++ b/examples/ace_step/model_training/validate_lora/acestep-v15-turbo-shift3.py @@ -0,0 +1,33 @@ +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio +import torch + + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/acestep-v15-turbo-shift3", origin_file_pattern="model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), + silence_latent_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="acestep-v15-turbo/silence_latent.pt"), +) +pipe.load_lora(pipe.dit, "models/train/acestep-v15-turbo-shift3_lora/epoch-9.safetensors", alpha=1) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' +audio = pipe( + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=1, + num_inference_steps=50, + cfg_scale=4.0, +) +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-turbo-shift3_lora.wav") diff --git a/examples/ace_step/model_training/validate_lora/acestep-v15-xl-base.py b/examples/ace_step/model_training/validate_lora/acestep-v15-xl-base.py new file mode 100644 index 0000000000000000000000000000000000000000..5dea47551c78095a94fcb046f5c183197fe4895e --- /dev/null +++ b/examples/ace_step/model_training/validate_lora/acestep-v15-xl-base.py @@ -0,0 +1,33 @@ +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio +import torch + + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/acestep-v15-xl-base", origin_file_pattern="model-*.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), + silence_latent_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="acestep-v15-turbo/silence_latent.pt"), +) +pipe.load_lora(pipe.dit, "models/train/acestep-v15-xl-base_lora/epoch-9.safetensors", alpha=1) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' +audio = pipe( + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=1, + num_inference_steps=50, + cfg_scale=4.0, +) +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-xl-base_lora.wav") diff --git a/examples/ace_step/model_training/validate_lora/acestep-v15-xl-sft.py b/examples/ace_step/model_training/validate_lora/acestep-v15-xl-sft.py new file mode 100644 index 0000000000000000000000000000000000000000..c2f6ecf67a46c09ece8890c4155735e555f69bfb --- /dev/null +++ b/examples/ace_step/model_training/validate_lora/acestep-v15-xl-sft.py @@ -0,0 +1,33 @@ +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio +import torch + + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/acestep-v15-xl-sft", origin_file_pattern="model-*.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), + silence_latent_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="acestep-v15-turbo/silence_latent.pt"), +) +pipe.load_lora(pipe.dit, "models/train/acestep-v15-xl-sft_lora/epoch-9.safetensors", alpha=1) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' +audio = pipe( + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=1, + num_inference_steps=50, + cfg_scale=4.0, +) +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-xl-sft_lora.wav") diff --git a/examples/ace_step/model_training/validate_lora/acestep-v15-xl-turbo.py b/examples/ace_step/model_training/validate_lora/acestep-v15-xl-turbo.py new file mode 100644 index 0000000000000000000000000000000000000000..a4a1f014701065af20cbce5a4c1a01aead3faca8 --- /dev/null +++ b/examples/ace_step/model_training/validate_lora/acestep-v15-xl-turbo.py @@ -0,0 +1,33 @@ +from diffsynth.pipelines.ace_step import AceStepPipeline, ModelConfig +from diffsynth.utils.data.audio import save_audio +import torch + + +pipe = AceStepPipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="ACE-Step/acestep-v15-xl-turbo", origin_file_pattern="model-*.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/model.safetensors"), + ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), + ], + text_tokenizer_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="Qwen3-Embedding-0.6B/"), + silence_latent_config=ModelConfig(model_id="ACE-Step/Ace-Step1.5", origin_file_pattern="acestep-v15-turbo/silence_latent.pt"), +) +pipe.load_lora(pipe.dit, "models/train/acestep-v15-xl-turbo_lora/epoch-9.safetensors", alpha=1) + +prompt = "An explosive, high-energy pop-rock track with a strong anime theme song feel. The song kicks off with a catchy, synthesized brass fanfare over a driving rock beat with punchy drums and a solid bassline. A powerful, clear male vocal enters with a theatrical and energetic delivery, soaring through the verses and hitting powerful high notes in the chorus. The arrangement is dense and dynamic, featuring rhythmic electric guitar chords, brief instrumental breaks with synth flourishes, and a consistent, danceable groove throughout. The overall mood is triumphant, adventurous, and exhilarating." +lyrics = '[Intro - Synth Brass Fanfare]\n\n[Verse 1]\n黑夜里的风吹过耳畔\n甜蜜时光转瞬即万\n脚步飘摇在星光上\n心追节奏心跳狂乱\n耳边传来电吉他呼唤\n手指轻触碰点流点燃\n梦在云端任它蔓延\n疯狂跳跃自由无间\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Instrumental Break - Synth Brass Melody]\n\n[Verse 2]\n鼓点撞击黑夜的底端\n跳动节拍连接你我俩\n在这里让灵魂发光\n燃尽所有不留遗憾\n\n[Instrumental Break - Synth Brass Melody]\n\n[Bridge]\n光影交错彼此的视线\n霓虹之下夜空的蔚蓝\n月光洒下温热心田\n追逐梦想它不会遥远\n\n[Chorus]\n心电感应在震动间\n拥抱未来勇敢冒险\n那旋律在心中无限\n世界变得如此耀眼\n\n[Outro - Instrumental with Synth Brass Melody]\n[Song ends abruptly]' +audio = pipe( + prompt=prompt, + lyrics=lyrics, + duration=160, + bpm=100, + keyscale="B minor", + timesignature="4", + vocal_language="zh", + seed=1, + num_inference_steps=50, + cfg_scale=4.0, +) +save_audio(audio, pipe.vae.sampling_rate, "acestep-v15-xl-turbo_lora.wav") diff --git a/examples/anima/README.md b/examples/anima/README.md new file mode 100644 index 0000000000000000000000000000000000000000..b49ab1fcbae839a62b9cbddb1f17cba079c8160a --- /dev/null +++ b/examples/anima/README.md @@ -0,0 +1,3 @@ +English Document: https://diffsynth-studio-doc.readthedocs.io/en/latest/Model_Details/Anima.html + +中文文档:https://diffsynth-studio-doc.readthedocs.io/zh-cn/latest/Model_Details/Anima.html diff --git a/examples/anima/model_inference/anima-preview.py b/examples/anima/model_inference/anima-preview.py new file mode 100644 index 0000000000000000000000000000000000000000..9440bdf09900ac7a08b9b37ea18b3151f58d6ced --- /dev/null +++ b/examples/anima/model_inference/anima-preview.py @@ -0,0 +1,19 @@ +from diffsynth.pipelines.anima_image import AnimaImagePipeline, ModelConfig +import torch + + +pipe = AnimaImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="circlestone-labs/Anima", origin_file_pattern="split_files/diffusion_models/anima-preview.safetensors"), + ModelConfig(model_id="circlestone-labs/Anima", origin_file_pattern="split_files/text_encoders/qwen_3_06b_base.safetensors"), + ModelConfig(model_id="circlestone-labs/Anima", origin_file_pattern="split_files/vae/qwen_image_vae.safetensors"), + ], + tokenizer_config=ModelConfig(model_id="Qwen/Qwen3-0.6B", origin_file_pattern="./"), + tokenizer_t5xxl_config=ModelConfig(model_id="stabilityai/stable-diffusion-3.5-large", origin_file_pattern="tokenizer_3/") +) +prompt = "Masterpiece, best quality, solo, long hair, wavy hair, silver hair, blue eyes, blue dress, medium breasts, dress, underwater, air bubble, floating hair, refraction, portrait." +negative_prompt = "worst quality, low quality, monochrome, zombie, interlocked fingers, Aissist, cleavage, nsfw," +image = pipe(prompt, seed=0, num_inference_steps=50) +image.save("image.jpg") diff --git a/examples/anima/model_inference_low_vram/anima-preview.py b/examples/anima/model_inference_low_vram/anima-preview.py new file mode 100644 index 0000000000000000000000000000000000000000..bfe8e24f3a5478952424e109b20f9796d2920a49 --- /dev/null +++ b/examples/anima/model_inference_low_vram/anima-preview.py @@ -0,0 +1,30 @@ +from diffsynth.pipelines.anima_image import AnimaImagePipeline, ModelConfig +import torch + + +vram_config = { + "offload_dtype": "disk", + "offload_device": "disk", + "onload_dtype": "disk", + "onload_device": "disk", + "preparing_dtype": torch.bfloat16, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} +pipe = AnimaImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="circlestone-labs/Anima", origin_file_pattern="split_files/diffusion_models/anima-preview.safetensors", **vram_config), + ModelConfig(model_id="circlestone-labs/Anima", origin_file_pattern="split_files/text_encoders/qwen_3_06b_base.safetensors", **vram_config), + ModelConfig(model_id="circlestone-labs/Anima", origin_file_pattern="split_files/vae/qwen_image_vae.safetensors", **vram_config), + ], + tokenizer_config=ModelConfig(model_id="Qwen/Qwen3-0.6B", origin_file_pattern="./"), + tokenizer_t5xxl_config=ModelConfig(model_id="stabilityai/stable-diffusion-3.5-large", origin_file_pattern="tokenizer_3/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) +prompt = "Masterpiece, best quality, solo, long hair, wavy hair, silver hair, blue eyes, blue dress, medium breasts, dress, underwater, air bubble, floating hair, refraction, portrait." +negative_prompt = "worst quality, low quality, monochrome, zombie, interlocked fingers, Aissist, cleavage, nsfw," +image = pipe(prompt, seed=0, num_inference_steps=50) +image.save("image.jpg") diff --git a/examples/anima/model_training/full/anima-preview.sh b/examples/anima/model_training/full/anima-preview.sh new file mode 100644 index 0000000000000000000000000000000000000000..fa7778eb8bcb871c9c732ce704bab11291ad27f3 --- /dev/null +++ b/examples/anima/model_training/full/anima-preview.sh @@ -0,0 +1,16 @@ +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "anima/anima-preview/*" --local_dir ./data/diffsynth_example_dataset + +accelerate launch examples/anima/model_training/train.py \ + --dataset_base_path data/diffsynth_example_dataset/anima/anima-preview \ + --dataset_metadata_path data/diffsynth_example_dataset/anima/anima-preview/metadata.csv \ + --max_pixels 1048576 \ + --dataset_repeat 50 \ + --model_id_with_origin_paths "circlestone-labs/Anima:split_files/diffusion_models/anima-preview.safetensors,circlestone-labs/Anima:split_files/text_encoders/qwen_3_06b_base.safetensors,circlestone-labs/Anima:split_files/vae/qwen_image_vae.safetensors" \ + --tokenizer_path "Qwen/Qwen3-0.6B:./" \ + --tokenizer_t5xxl_path "stabilityai/stable-diffusion-3.5-large:tokenizer_3/" \ + --learning_rate 1e-5 \ + --num_epochs 2 \ + --remove_prefix_in_ckpt "pipe.dit." \ + --output_path "./models/train/anima-preview_full" \ + --trainable_models "dit" \ + --use_gradient_checkpointing diff --git a/examples/anima/model_training/lora/anima-preview.sh b/examples/anima/model_training/lora/anima-preview.sh new file mode 100644 index 0000000000000000000000000000000000000000..cb8f0b0f8d43fc7af8ebdaacc6a9c04aa78c4b23 --- /dev/null +++ b/examples/anima/model_training/lora/anima-preview.sh @@ -0,0 +1,18 @@ +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "anima/anima-preview/*" --local_dir ./data/diffsynth_example_dataset + +accelerate launch examples/anima/model_training/train.py \ + --dataset_base_path data/diffsynth_example_dataset/anima/anima-preview \ + --dataset_metadata_path data/diffsynth_example_dataset/anima/anima-preview/metadata.csv \ + --max_pixels 1048576 \ + --dataset_repeat 50 \ + --model_id_with_origin_paths "circlestone-labs/Anima:split_files/diffusion_models/anima-preview.safetensors,circlestone-labs/Anima:split_files/text_encoders/qwen_3_06b_base.safetensors,circlestone-labs/Anima:split_files/vae/qwen_image_vae.safetensors" \ + --tokenizer_path "Qwen/Qwen3-0.6B:./" \ + --tokenizer_t5xxl_path "stabilityai/stable-diffusion-3.5-large:tokenizer_3/" \ + --learning_rate 1e-4 \ + --num_epochs 5 \ + --remove_prefix_in_ckpt "pipe.dit." \ + --output_path "./models/train/anima-preview_lora" \ + --lora_base_model "dit" \ + --lora_target_modules "" \ + --lora_rank 32 \ + --use_gradient_checkpointing diff --git a/examples/anima/model_training/special/split_training/anima-preview.sh b/examples/anima/model_training/special/split_training/anima-preview.sh new file mode 100644 index 0000000000000000000000000000000000000000..aa1c9ee3663bdb4165aaa665b1455691b1952b54 --- /dev/null +++ b/examples/anima/model_training/special/split_training/anima-preview.sh @@ -0,0 +1,40 @@ +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "anima/anima-preview/*" --local_dir ./data/diffsynth_example_dataset + +# Stage 1: cache deterministic preprocessing outputs. +accelerate launch examples/anima/model_training/train.py \ + --dataset_base_path data/diffsynth_example_dataset/anima/anima-preview \ + --dataset_metadata_path data/diffsynth_example_dataset/anima/anima-preview/metadata.csv \ + --max_pixels 1048576 \ + --dataset_repeat 1 \ + --model_id_with_origin_paths circlestone-labs/Anima:split_files/diffusion_models/anima-preview.safetensors,circlestone-labs/Anima:split_files/text_encoders/qwen_3_06b_base.safetensors,circlestone-labs/Anima:split_files/vae/qwen_image_vae.safetensors \ + --tokenizer_path Qwen/Qwen3-0.6B:./ \ + --tokenizer_t5xxl_path stabilityai/stable-diffusion-3.5-large:tokenizer_3/ \ + --learning_rate 1e-4 \ + --num_epochs 5 \ + --remove_prefix_in_ckpt pipe.dit. \ + --output_path ./models/train/anima-preview_split_cache \ + --lora_base_model dit \ + --lora_target_modules '' \ + --lora_rank 32 \ + --use_gradient_checkpointing \ + --offload_models circlestone-labs/Anima:split_files/diffusion_models/anima-preview.safetensors \ + --task sft:data_process + +# Stage 2: train LoRA from the cached dataset. +accelerate launch examples/anima/model_training/train.py \ + --dataset_base_path ./models/train/anima-preview_split_cache \ + --max_pixels 1048576 \ + --dataset_repeat 50 \ + --model_id_with_origin_paths circlestone-labs/Anima:split_files/diffusion_models/anima-preview.safetensors,circlestone-labs/Anima:split_files/text_encoders/qwen_3_06b_base.safetensors,circlestone-labs/Anima:split_files/vae/qwen_image_vae.safetensors \ + --tokenizer_path Qwen/Qwen3-0.6B:./ \ + --tokenizer_t5xxl_path stabilityai/stable-diffusion-3.5-large:tokenizer_3/ \ + --learning_rate 1e-4 \ + --num_epochs 5 \ + --remove_prefix_in_ckpt pipe.dit. \ + --output_path ./models/train/anima-preview_split \ + --lora_base_model dit \ + --lora_target_modules '' \ + --lora_rank 32 \ + --use_gradient_checkpointing \ + --offload_models circlestone-labs/Anima:split_files/text_encoders/qwen_3_06b_base.safetensors,circlestone-labs/Anima:split_files/vae/qwen_image_vae.safetensors \ + --task sft:train diff --git a/examples/anima/model_training/special/split_training/validate.py b/examples/anima/model_training/special/split_training/validate.py new file mode 100644 index 0000000000000000000000000000000000000000..0f34940c37c43810c98d6229c704dc7bc8f475c4 --- /dev/null +++ b/examples/anima/model_training/special/split_training/validate.py @@ -0,0 +1,19 @@ +from diffsynth.pipelines.anima_image import AnimaImagePipeline, ModelConfig +import torch + + +pipe = AnimaImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="circlestone-labs/Anima", origin_file_pattern="split_files/diffusion_models/anima-preview.safetensors"), + ModelConfig(model_id="circlestone-labs/Anima", origin_file_pattern="split_files/text_encoders/qwen_3_06b_base.safetensors"), + ModelConfig(model_id="circlestone-labs/Anima", origin_file_pattern="split_files/vae/qwen_image_vae.safetensors"), + ], + tokenizer_config=ModelConfig(model_id="Qwen/Qwen3-0.6B", origin_file_pattern="./"), + tokenizer_t5xxl_config=ModelConfig(model_id="stabilityai/stable-diffusion-3.5-large", origin_file_pattern="tokenizer_3/") +) +pipe.load_lora(pipe.dit, './models/train/anima-preview_split/epoch-4.safetensors') +prompt = "a dog" +image = pipe(prompt=prompt, seed=0) +image.save('split_training_anima-preview.jpg') \ No newline at end of file diff --git a/examples/anima/model_training/train.py b/examples/anima/model_training/train.py new file mode 100644 index 0000000000000000000000000000000000000000..d6f1ac4536fb28469a1aaf9b1b47887b490c66cc --- /dev/null +++ b/examples/anima/model_training/train.py @@ -0,0 +1,157 @@ +import torch, os, argparse, accelerate +from diffsynth.core import UnifiedDataset +from diffsynth.pipelines.anima_image import AnimaImagePipeline, ModelConfig +from diffsynth.diffusion import * +os.environ["TOKENIZERS_PARALLELISM"] = "false" + + +class AnimaTrainingModule(DiffusionTrainingModule): + def __init__( + self, + model_paths=None, model_id_with_origin_paths=None, + tokenizer_path=None, tokenizer_t5xxl_path=None, + trainable_models=None, + lora_base_model=None, lora_target_modules="", lora_rank=32, lora_checkpoint=None, + preset_lora_path=None, preset_lora_model=None, + use_gradient_checkpointing=True, + use_gradient_checkpointing_offload=False, + extra_inputs=None, + fp8_models=None, + offload_models=None, + quant_options=None, + resume_from_checkpoint=None, remove_prefix_in_ckpt=None, + device="cpu", + task="sft", + ): + super().__init__() + # Load models + model_configs = self.parse_model_configs(model_paths, model_id_with_origin_paths, fp8_models=fp8_models, offload_models=offload_models, quant_options=quant_options, device=device) + tokenizer_config = self.parse_path_or_model_id(tokenizer_path, ModelConfig(model_id="Qwen/Qwen3-0.6B", origin_file_pattern="./")) + tokenizer_t5xxl_config = self.parse_path_or_model_id(tokenizer_t5xxl_path, ModelConfig(model_id="stabilityai/stable-diffusion-3.5-large", origin_file_pattern="tokenizer_3/")) + self.pipe = AnimaImagePipeline.from_pretrained(torch_dtype=torch.bfloat16, device=device, model_configs=model_configs, tokenizer_config=tokenizer_config, tokenizer_t5xxl_config=tokenizer_t5xxl_config) + self.pipe = self.split_pipeline_units(task, self.pipe, trainable_models, lora_base_model) + self.resume_from_checkpoint(resume_from_checkpoint, remove_prefix_in_ckpt) + + # Training mode + self.switch_pipe_to_training_mode( + self.pipe, trainable_models, + lora_base_model, lora_target_modules, lora_rank, lora_checkpoint, + preset_lora_path, preset_lora_model, + task=task, + ) + + # Other configs + self.use_gradient_checkpointing = use_gradient_checkpointing + self.use_gradient_checkpointing_offload = use_gradient_checkpointing_offload + self.extra_inputs = extra_inputs.split(",") if extra_inputs is not None else [] + self.fp8_models = fp8_models + self.task = task + self.task_to_loss = { + "sft:data_process": lambda pipe, *args: args, + "direct_distill:data_process": lambda pipe, *args: args, + "sft": lambda pipe, inputs_shared, inputs_posi, inputs_nega: FlowMatchSFTLoss(pipe, **inputs_shared, **inputs_posi), + "sft:train": lambda pipe, inputs_shared, inputs_posi, inputs_nega: FlowMatchSFTLoss(pipe, **inputs_shared, **inputs_posi), + "direct_distill": lambda pipe, inputs_shared, inputs_posi, inputs_nega: DirectDistillLoss(pipe, **inputs_shared, **inputs_posi), + "direct_distill:train": lambda pipe, inputs_shared, inputs_posi, inputs_nega: DirectDistillLoss(pipe, **inputs_shared, **inputs_posi), + } + + def get_pipeline_inputs(self, data): + inputs_posi = {"prompt": data["prompt"]} + inputs_nega = {"negative_prompt": ""} + inputs_shared = { + # Assume you are using this pipeline for inference, + # please fill in the input parameters. + "input_image": data["image"], + "height": data["image"].size[1], + "width": data["image"].size[0], + # Please do not modify the following parameters + # unless you clearly know what this will cause. + "cfg_scale": 1, + "rand_device": self.pipe.device, + "use_gradient_checkpointing": self.use_gradient_checkpointing, + "use_gradient_checkpointing_offload": self.use_gradient_checkpointing_offload, + } + inputs_shared = self.parse_extra_inputs(data, self.extra_inputs, inputs_shared) + return inputs_shared, inputs_posi, inputs_nega + + def forward(self, data, inputs=None): + if inputs is None: inputs = self.get_pipeline_inputs(data) + inputs = self.transfer_data_to_device(inputs, self.pipe.device, self.pipe.torch_dtype) + for unit in self.pipe.units: + inputs = self.pipe.unit_runner(unit, self.pipe, *inputs) + loss = self.task_to_loss[self.task](self.pipe, *inputs) + return loss + + +def anima_parser(): + parser = argparse.ArgumentParser(description="Training script for Anima models.") + parser = add_general_config(parser) + parser = add_image_size_config(parser) + parser.add_argument("--tokenizer_path", type=str, default=None, help="Path to tokenizer.") + parser.add_argument("--tokenizer_t5xxl_path", type=str, default=None, help="Path to tokenizer_t5xxl.") + return parser + + +if __name__ == "__main__": + parser = anima_parser() + args = parser.parse_args() + accelerator = accelerate.Accelerator( + gradient_accumulation_steps=args.gradient_accumulation_steps, + kwargs_handlers=[accelerate.DistributedDataParallelKwargs(find_unused_parameters=args.find_unused_parameters)], + ) + dataset = UnifiedDataset( + base_path=args.dataset_base_path, + metadata_path=args.dataset_metadata_path, + repeat=args.dataset_repeat, + data_file_keys=args.data_file_keys.split(","), + main_data_operator=UnifiedDataset.default_image_operator( + base_path=args.dataset_base_path, + max_pixels=args.max_pixels, + height=args.height, + width=args.width, + height_division_factor=16, + width_division_factor=16, + ) + ) + model = AnimaTrainingModule( + model_paths=args.model_paths, + model_id_with_origin_paths=args.model_id_with_origin_paths, + tokenizer_path=args.tokenizer_path, + tokenizer_t5xxl_path=args.tokenizer_t5xxl_path, + trainable_models=args.trainable_models, + lora_base_model=args.lora_base_model, + lora_target_modules=args.lora_target_modules, + lora_rank=args.lora_rank, + lora_checkpoint=args.lora_checkpoint, + preset_lora_path=args.preset_lora_path, + preset_lora_model=args.preset_lora_model, + use_gradient_checkpointing=args.use_gradient_checkpointing, + use_gradient_checkpointing_offload=args.use_gradient_checkpointing_offload, + extra_inputs=args.extra_inputs, + fp8_models=args.fp8_models, + offload_models=args.offload_models, + quant_options=args.quant_options, + resume_from_checkpoint=args.resume_from_checkpoint, + remove_prefix_in_ckpt=args.remove_prefix_in_ckpt, + task=args.task, + device="cpu" if args.enable_model_cpu_offload else accelerator.device, + ) + model_logger = ModelLogger( + args.output_path, + remove_prefix_in_ckpt=args.remove_prefix_in_ckpt, + enable_tensorboard_log=args.enable_tensorboard_log, + enable_swanlab_log=args.enable_swanlab_log, + swanlab_project=args.swanlab_project, + enable_wandb_log=args.enable_wandb_log, + wandb_project=args.wandb_project, + enable_csv_log=args.enable_csv_log, + ) + launcher_map = { + "sft:data_process": launch_data_process_task, + "direct_distill:data_process": launch_data_process_task, + "sft": launch_training_task, + "sft:train": launch_training_task, + "direct_distill": launch_training_task, + "direct_distill:train": launch_training_task, + } + launcher_map[args.task](accelerator, dataset, model, model_logger, args=args) \ No newline at end of file diff --git a/examples/anima/model_training/validate_full/anima-preview.py b/examples/anima/model_training/validate_full/anima-preview.py new file mode 100644 index 0000000000000000000000000000000000000000..9f31a5af4322b2a48a74eb3f070d6dfb34ee3bf3 --- /dev/null +++ b/examples/anima/model_training/validate_full/anima-preview.py @@ -0,0 +1,21 @@ +from diffsynth.pipelines.anima_image import AnimaImagePipeline, ModelConfig +from diffsynth.core import load_state_dict +import torch + + +pipe = AnimaImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="circlestone-labs/Anima", origin_file_pattern="split_files/diffusion_models/anima-preview.safetensors"), + ModelConfig(model_id="circlestone-labs/Anima", origin_file_pattern="split_files/text_encoders/qwen_3_06b_base.safetensors"), + ModelConfig(model_id="circlestone-labs/Anima", origin_file_pattern="split_files/vae/qwen_image_vae.safetensors"), + ], + tokenizer_config=ModelConfig(model_id="Qwen/Qwen3-0.6B", origin_file_pattern="./"), + tokenizer_t5xxl_config=ModelConfig(model_id="stabilityai/stable-diffusion-3.5-large", origin_file_pattern="tokenizer_3/") +) +state_dict = load_state_dict("./models/train/anima-preview_full/epoch-1.safetensors", torch_dtype=torch.bfloat16) +pipe.dit.load_state_dict(state_dict) +prompt = "a dog" +image = pipe(prompt=prompt, seed=0) +image.save("image.jpg") \ No newline at end of file diff --git a/examples/anima/model_training/validate_lora/anima-preview.py b/examples/anima/model_training/validate_lora/anima-preview.py new file mode 100644 index 0000000000000000000000000000000000000000..df107d21bdedf51a2a515f0895679aa57576b644 --- /dev/null +++ b/examples/anima/model_training/validate_lora/anima-preview.py @@ -0,0 +1,19 @@ +from diffsynth.pipelines.anima_image import AnimaImagePipeline, ModelConfig +import torch + + +pipe = AnimaImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="circlestone-labs/Anima", origin_file_pattern="split_files/diffusion_models/anima-preview.safetensors"), + ModelConfig(model_id="circlestone-labs/Anima", origin_file_pattern="split_files/text_encoders/qwen_3_06b_base.safetensors"), + ModelConfig(model_id="circlestone-labs/Anima", origin_file_pattern="split_files/vae/qwen_image_vae.safetensors"), + ], + tokenizer_config=ModelConfig(model_id="Qwen/Qwen3-0.6B", origin_file_pattern="./"), + tokenizer_t5xxl_config=ModelConfig(model_id="stabilityai/stable-diffusion-3.5-large", origin_file_pattern="tokenizer_3/") +) +pipe.load_lora(pipe.dit, "./models/train/anima-preview_lora/epoch-4.safetensors") +prompt = "a dog" +image = pipe(prompt=prompt, seed=0) +image.save("image.jpg") \ No newline at end of file diff --git a/examples/boogu_image/model_inference/Boogu-Image-0.1-Base.py b/examples/boogu_image/model_inference/Boogu-Image-0.1-Base.py new file mode 100644 index 0000000000000000000000000000000000000000..26df8c61f766741f79ca0c24d626402281139cc1 --- /dev/null +++ b/examples/boogu_image/model_inference/Boogu-Image-0.1-Base.py @@ -0,0 +1,25 @@ +from diffsynth.pipelines.boogu_image import BooguImagePipeline, ModelConfig +import torch + + +pipe = BooguImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Boogu/Boogu-Image-0.1-Base", origin_file_pattern="transformer/*.safetensors"), + ModelConfig(model_id="Boogu/Boogu-Image-0.1-Base", origin_file_pattern="mllm/*.safetensors"), + ModelConfig(model_id="Boogu/Boogu-Image-0.1-Base", origin_file_pattern="vae/*.safetensors"), + ], + processor_config=ModelConfig(model_id="Boogu/Boogu-Image-0.1-Base", origin_file_pattern="mllm/"), +) + +output = pipe( + prompt="a cat", + negative_prompt="", + height=1024, + width=1024, + seed=42, + num_inference_steps=50, + cfg_scale=4.0, +) +output.save("image_Boogu-Image-0.1-Base.jpg") diff --git a/examples/boogu_image/model_inference/Boogu-Image-0.1-Edit.py b/examples/boogu_image/model_inference/Boogu-Image-0.1-Edit.py new file mode 100644 index 0000000000000000000000000000000000000000..74b7552972c486a5b573b8423ff6de2b723362bf --- /dev/null +++ b/examples/boogu_image/model_inference/Boogu-Image-0.1-Edit.py @@ -0,0 +1,31 @@ +from diffsynth.pipelines.boogu_image import BooguImagePipeline, ModelConfig +from PIL import Image +import torch +from modelscope import dataset_snapshot_download + + +pipe = BooguImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Boogu/Boogu-Image-0.1-Edit", origin_file_pattern="transformer/*.safetensors"), + ModelConfig(model_id="Boogu/Boogu-Image-0.1-Edit", origin_file_pattern="mllm/*.safetensors"), + ModelConfig(model_id="Boogu/Boogu-Image-0.1-Edit", origin_file_pattern="vae/*.safetensors"), + ], + processor_config=ModelConfig(model_id="Boogu/Boogu-Image-0.1-Edit", origin_file_pattern="mllm/"), +) +dataset_snapshot_download("DiffSynth-Studio/example_image_dataset", allow_file_pattern="edit/image1.jpg", local_dir="data/example_image_dataset") +edit_image = Image.open("data/example_image_dataset/edit/image1.jpg").resize((1024, 1024)) + +output = pipe( + prompt="Change the color of the dress to red.", + negative_prompt="", + edit_image=edit_image, + height=1024, + width=1024, + seed=42, + rand_device="cuda", + num_inference_steps=50, + cfg_scale=1.0, +) +output.save("image_Boogu-Image-0.1-Edit.jpg") diff --git a/examples/boogu_image/model_inference/Boogu-Image-0.1-Turbo.py b/examples/boogu_image/model_inference/Boogu-Image-0.1-Turbo.py new file mode 100644 index 0000000000000000000000000000000000000000..eeeb6c87332c3d699ea77e9ecbfd8f4943b5a5c6 --- /dev/null +++ b/examples/boogu_image/model_inference/Boogu-Image-0.1-Turbo.py @@ -0,0 +1,27 @@ +from diffsynth.pipelines.boogu_image import BooguImagePipeline, ModelConfig +import torch + + +pipe = BooguImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Boogu/Boogu-Image-0.1-Turbo", origin_file_pattern="transformer/*.safetensors"), + ModelConfig(model_id="Boogu/Boogu-Image-0.1-Turbo", origin_file_pattern="mllm/*.safetensors"), + ModelConfig(model_id="Boogu/Boogu-Image-0.1-Turbo", origin_file_pattern="vae/*.safetensors"), + ], + processor_config=ModelConfig(model_id="Boogu/Boogu-Image-0.1-Turbo", origin_file_pattern="mllm/"), +) + +output = pipe( + prompt="a cat", + negative_prompt="", + height=1024, + width=1024, + seed=42, + rand_device="cuda", + num_inference_steps=4, + cfg_scale=1.0, + sigmas=[0.999, 0.748, 0.5, 0.25], +) +output.save("image_Boogu-Image-0.1-Turbo.jpg") diff --git a/examples/boogu_image/model_inference_low_vram/Boogu-Image-0.1-Base.py b/examples/boogu_image/model_inference_low_vram/Boogu-Image-0.1-Base.py new file mode 100644 index 0000000000000000000000000000000000000000..326fef389c915702490f60c17fc5121b3b81af4f --- /dev/null +++ b/examples/boogu_image/model_inference_low_vram/Boogu-Image-0.1-Base.py @@ -0,0 +1,37 @@ +from diffsynth.pipelines.boogu_image import BooguImagePipeline, ModelConfig +import torch + + +vram_config = { + "offload_dtype": torch.float8_e4m3fn, + "offload_device": "cpu", + "onload_dtype": torch.float8_e4m3fn, + "onload_device": "cpu", + "preparing_dtype": torch.float8_e4m3fn, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} + +pipe = BooguImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Boogu/Boogu-Image-0.1-Base", origin_file_pattern="transformer/*.safetensors", **vram_config), + ModelConfig(model_id="Boogu/Boogu-Image-0.1-Base", origin_file_pattern="mllm/*.safetensors", **vram_config), + ModelConfig(model_id="Boogu/Boogu-Image-0.1-Base", origin_file_pattern="vae/*.safetensors", **vram_config), + ], + processor_config=ModelConfig(model_id="Boogu/Boogu-Image-0.1-Base", origin_file_pattern="mllm/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) + +output = pipe( + prompt="a cat", + negative_prompt="", + height=1024, + width=1024, + seed=42, + num_inference_steps=50, + cfg_scale=4.0, +) +output.save("image_Boogu-Image-0.1-Base.jpg") diff --git a/examples/boogu_image/model_inference_low_vram/Boogu-Image-0.1-Edit.py b/examples/boogu_image/model_inference_low_vram/Boogu-Image-0.1-Edit.py new file mode 100644 index 0000000000000000000000000000000000000000..025a8483cb75a50e779cb5988208c45f838c8167 --- /dev/null +++ b/examples/boogu_image/model_inference_low_vram/Boogu-Image-0.1-Edit.py @@ -0,0 +1,43 @@ +from diffsynth.pipelines.boogu_image import BooguImagePipeline, ModelConfig +from PIL import Image +import torch +from modelscope import dataset_snapshot_download + + +vram_config = { + "offload_dtype": torch.float8_e4m3fn, + "offload_device": "cpu", + "onload_dtype": torch.float8_e4m3fn, + "onload_device": "cpu", + "preparing_dtype": torch.float8_e4m3fn, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} + +pipe = BooguImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Boogu/Boogu-Image-0.1-Edit", origin_file_pattern="transformer/*.safetensors", **vram_config), + ModelConfig(model_id="Boogu/Boogu-Image-0.1-Edit", origin_file_pattern="mllm/*.safetensors", **vram_config), + ModelConfig(model_id="Boogu/Boogu-Image-0.1-Edit", origin_file_pattern="vae/*.safetensors", **vram_config), + ], + processor_config=ModelConfig(model_id="Boogu/Boogu-Image-0.1-Edit", origin_file_pattern="mllm/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) +dataset_snapshot_download("DiffSynth-Studio/example_image_dataset", allow_file_pattern="edit/image1.jpg", local_dir="data/example_image_dataset") +edit_image = Image.open("data/example_image_dataset/edit/image1.jpg").resize((1024, 1024)) + +output = pipe( + prompt="Change the color of the dress to red.", + negative_prompt="", + edit_image=edit_image, + height=1024, + width=1024, + seed=42, + rand_device="cuda", + num_inference_steps=50, + cfg_scale=1.0, +) +output.save("image_Boogu-Image-0.1-Edit.jpg") diff --git a/examples/boogu_image/model_inference_low_vram/Boogu-Image-0.1-Turbo.py b/examples/boogu_image/model_inference_low_vram/Boogu-Image-0.1-Turbo.py new file mode 100644 index 0000000000000000000000000000000000000000..f25a8d648d10f9393010291de0afd20a02290492 --- /dev/null +++ b/examples/boogu_image/model_inference_low_vram/Boogu-Image-0.1-Turbo.py @@ -0,0 +1,39 @@ +from diffsynth.pipelines.boogu_image import BooguImagePipeline, ModelConfig +import torch + + +vram_config = { + "offload_dtype": torch.float8_e4m3fn, + "offload_device": "cpu", + "onload_dtype": torch.float8_e4m3fn, + "onload_device": "cpu", + "preparing_dtype": torch.float8_e4m3fn, + "preparing_device": "cuda", + "computation_dtype": torch.bfloat16, + "computation_device": "cuda", +} + +pipe = BooguImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Boogu/Boogu-Image-0.1-Turbo", origin_file_pattern="transformer/*.safetensors", **vram_config), + ModelConfig(model_id="Boogu/Boogu-Image-0.1-Turbo", origin_file_pattern="mllm/*.safetensors", **vram_config), + ModelConfig(model_id="Boogu/Boogu-Image-0.1-Turbo", origin_file_pattern="vae/*.safetensors", **vram_config), + ], + processor_config=ModelConfig(model_id="Boogu/Boogu-Image-0.1-Turbo", origin_file_pattern="mllm/"), + vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, +) + +output = pipe( + prompt="a cat", + negative_prompt="", + height=1024, + width=1024, + seed=42, + rand_device="cuda", + num_inference_steps=4, + cfg_scale=1.0, + sigmas=[0.999, 0.748, 0.5, 0.25], +) +output.save("image_Boogu-Image-0.1-Turbo.jpg") diff --git a/examples/boogu_image/model_training/full/Boogu-Image-0.1-Base.sh b/examples/boogu_image/model_training/full/Boogu-Image-0.1-Base.sh new file mode 100644 index 0000000000000000000000000000000000000000..88809e0cc20c3e5e8dc623c5ecbcda16d6017751 --- /dev/null +++ b/examples/boogu_image/model_training/full/Boogu-Image-0.1-Base.sh @@ -0,0 +1,18 @@ +# Please run `accelerate config` to configure GPU, DeepSpeed, etc. +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "boogu_image/Boogu-Image-0.1-Base/*" --local_dir ./data/diffsynth_example_dataset + +accelerate launch examples/boogu_image/model_training/train.py \ + --dataset_base_path "./data/diffsynth_example_dataset/boogu_image/Boogu-Image-0.1-Base" \ + --dataset_metadata_path "./data/diffsynth_example_dataset/boogu_image/Boogu-Image-0.1-Base/metadata.csv" \ + --max_pixels 1048576 \ + --dataset_repeat 50 \ + --model_id_with_origin_paths "Boogu/Boogu-Image-0.1-Base:transformer/*.safetensors,Boogu/Boogu-Image-0.1-Base:mllm/*.safetensors,Boogu/Boogu-Image-0.1-Base:vae/*.safetensors" \ + --learning_rate 1e-5 \ + --num_epochs 2 \ + --remove_prefix_in_ckpt "pipe.dit." \ + --output_path "./models/train/Boogu-Image-0.1-Base_full" \ + --trainable_models "dit" \ + --use_gradient_checkpointing \ + --dataset_num_workers 8 \ + --find_unused_parameters \ + --data_file_keys "image" diff --git a/examples/boogu_image/model_training/full/Boogu-Image-0.1-Edit.sh b/examples/boogu_image/model_training/full/Boogu-Image-0.1-Edit.sh new file mode 100644 index 0000000000000000000000000000000000000000..90bc9763ffa81524c6aca3677a6ce6b7d2695370 --- /dev/null +++ b/examples/boogu_image/model_training/full/Boogu-Image-0.1-Edit.sh @@ -0,0 +1,19 @@ +# Please run `accelerate config` to configure GPU, DeepSpeed, etc. +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "boogu_image/Boogu-Image-0.1-Edit/*" --local_dir ./data/diffsynth_example_dataset + +accelerate launch examples/boogu_image/model_training/train.py \ + --dataset_base_path "./data/diffsynth_example_dataset/boogu_image/Boogu-Image-0.1-Edit" \ + --dataset_metadata_path "./data/diffsynth_example_dataset/boogu_image/Boogu-Image-0.1-Edit/metadata.csv" \ + --max_pixels 1048576 \ + --dataset_repeat 50 \ + --model_id_with_origin_paths "Boogu/Boogu-Image-0.1-Edit:transformer/*.safetensors,Boogu/Boogu-Image-0.1-Edit:mllm/*.safetensors,Boogu/Boogu-Image-0.1-Edit:vae/*.safetensors" \ + --learning_rate 1e-5 \ + --num_epochs 2 \ + --remove_prefix_in_ckpt "pipe.dit." \ + --output_path "./models/train/Boogu-Image-0.1-Edit_full" \ + --trainable_models "dit" \ + --use_gradient_checkpointing \ + --dataset_num_workers 8 \ + --find_unused_parameters \ + --data_file_keys "image,edit_image" \ + --extra_inputs "edit_image" diff --git a/examples/boogu_image/model_training/full/Boogu-Image-0.1-Turbo.sh b/examples/boogu_image/model_training/full/Boogu-Image-0.1-Turbo.sh new file mode 100644 index 0000000000000000000000000000000000000000..fc4d5ae3d1ab91976f7d786d15450370a82d46b2 --- /dev/null +++ b/examples/boogu_image/model_training/full/Boogu-Image-0.1-Turbo.sh @@ -0,0 +1,18 @@ +# Please run `accelerate config` to configure GPU, DeepSpeed, etc. +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "boogu_image/Boogu-Image-0.1-Turbo/*" --local_dir ./data/diffsynth_example_dataset + +accelerate launch examples/boogu_image/model_training/train.py \ + --dataset_base_path "./data/diffsynth_example_dataset/boogu_image/Boogu-Image-0.1-Turbo" \ + --dataset_metadata_path "./data/diffsynth_example_dataset/boogu_image/Boogu-Image-0.1-Turbo/metadata.csv" \ + --max_pixels 1048576 \ + --dataset_repeat 50 \ + --model_id_with_origin_paths "Boogu/Boogu-Image-0.1-Turbo:transformer/*.safetensors,Boogu/Boogu-Image-0.1-Turbo:mllm/*.safetensors,Boogu/Boogu-Image-0.1-Turbo:vae/*.safetensors" \ + --learning_rate 1e-5 \ + --num_epochs 2 \ + --remove_prefix_in_ckpt "pipe.dit." \ + --output_path "./models/train/Boogu-Image-0.1-Turbo_full" \ + --trainable_models "dit" \ + --use_gradient_checkpointing \ + --dataset_num_workers 8 \ + --find_unused_parameters \ + --data_file_keys "image" diff --git a/examples/boogu_image/model_training/lora/Boogu-Image-0.1-Base.sh b/examples/boogu_image/model_training/lora/Boogu-Image-0.1-Base.sh new file mode 100644 index 0000000000000000000000000000000000000000..e5f844853e4fc119d6727329ba147abae17cd7ee --- /dev/null +++ b/examples/boogu_image/model_training/lora/Boogu-Image-0.1-Base.sh @@ -0,0 +1,19 @@ +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "boogu_image/Boogu-Image-0.1-Base/*" --local_dir ./data/diffsynth_example_dataset + +accelerate launch examples/boogu_image/model_training/train.py \ + --dataset_base_path "./data/diffsynth_example_dataset/boogu_image/Boogu-Image-0.1-Base" \ + --dataset_metadata_path "./data/diffsynth_example_dataset/boogu_image/Boogu-Image-0.1-Base/metadata.csv" \ + --max_pixels 1048576 \ + --dataset_repeat 50 \ + --model_id_with_origin_paths "Boogu/Boogu-Image-0.1-Base:transformer/*.safetensors,Boogu/Boogu-Image-0.1-Base:mllm/*.safetensors,Boogu/Boogu-Image-0.1-Base:vae/*.safetensors" \ + --learning_rate 1e-4 \ + --num_epochs 5 \ + --remove_prefix_in_ckpt "pipe.dit." \ + --output_path "./models/train/Boogu-Image-0.1-Base_lora" \ + --lora_base_model "dit" \ + --lora_target_modules "to_q,to_k,to_v,to_out.0,img_to_q,img_to_k,img_to_v,img_out,instruct_to_q,instruct_to_k,instruct_to_v,instruct_out" \ + --lora_rank 32 \ + --use_gradient_checkpointing \ + --dataset_num_workers 8 \ + --find_unused_parameters \ + --data_file_keys "image" diff --git a/examples/boogu_image/model_training/lora/Boogu-Image-0.1-Edit.sh b/examples/boogu_image/model_training/lora/Boogu-Image-0.1-Edit.sh new file mode 100644 index 0000000000000000000000000000000000000000..0dcf1fd4ff0ad546e255baa8512cdcb2d49543f3 --- /dev/null +++ b/examples/boogu_image/model_training/lora/Boogu-Image-0.1-Edit.sh @@ -0,0 +1,20 @@ +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "boogu_image/Boogu-Image-0.1-Edit/*" --local_dir ./data/diffsynth_example_dataset + +accelerate launch examples/boogu_image/model_training/train.py \ + --dataset_base_path "./data/diffsynth_example_dataset/boogu_image/Boogu-Image-0.1-Edit" \ + --dataset_metadata_path "./data/diffsynth_example_dataset/boogu_image/Boogu-Image-0.1-Edit/metadata.csv" \ + --max_pixels 1048576 \ + --dataset_repeat 50 \ + --model_id_with_origin_paths "Boogu/Boogu-Image-0.1-Edit:transformer/*.safetensors,Boogu/Boogu-Image-0.1-Edit:mllm/*.safetensors,Boogu/Boogu-Image-0.1-Edit:vae/*.safetensors" \ + --learning_rate 1e-4 \ + --num_epochs 5 \ + --remove_prefix_in_ckpt "pipe.dit." \ + --output_path "./models/train/Boogu-Image-0.1-Edit_lora" \ + --lora_base_model "dit" \ + --lora_target_modules "to_q,to_k,to_v,to_out.0,img_to_q,img_to_k,img_to_v,img_out,instruct_to_q,instruct_to_k,instruct_to_v,instruct_out" \ + --lora_rank 32 \ + --use_gradient_checkpointing \ + --dataset_num_workers 8 \ + --find_unused_parameters \ + --data_file_keys "image,edit_image" \ + --extra_inputs "edit_image" diff --git a/examples/boogu_image/model_training/lora/Boogu-Image-0.1-Turbo.sh b/examples/boogu_image/model_training/lora/Boogu-Image-0.1-Turbo.sh new file mode 100644 index 0000000000000000000000000000000000000000..6d1e0b7bb2ebcfee05d19797bce8ff710493d887 --- /dev/null +++ b/examples/boogu_image/model_training/lora/Boogu-Image-0.1-Turbo.sh @@ -0,0 +1,19 @@ +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "boogu_image/Boogu-Image-0.1-Turbo/*" --local_dir ./data/diffsynth_example_dataset + +accelerate launch examples/boogu_image/model_training/train.py \ + --dataset_base_path "./data/diffsynth_example_dataset/boogu_image/Boogu-Image-0.1-Turbo" \ + --dataset_metadata_path "./data/diffsynth_example_dataset/boogu_image/Boogu-Image-0.1-Turbo/metadata.csv" \ + --max_pixels 1048576 \ + --dataset_repeat 50 \ + --model_id_with_origin_paths "Boogu/Boogu-Image-0.1-Turbo:transformer/*.safetensors,Boogu/Boogu-Image-0.1-Turbo:mllm/*.safetensors,Boogu/Boogu-Image-0.1-Turbo:vae/*.safetensors" \ + --learning_rate 1e-4 \ + --num_epochs 5 \ + --remove_prefix_in_ckpt "pipe.dit." \ + --output_path "./models/train/Boogu-Image-0.1-Turbo_lora" \ + --lora_base_model "dit" \ + --lora_target_modules "to_q,to_k,to_v,to_out.0,img_to_q,img_to_k,img_to_v,img_out,instruct_to_q,instruct_to_k,instruct_to_v,instruct_out" \ + --lora_rank 32 \ + --use_gradient_checkpointing \ + --dataset_num_workers 8 \ + --find_unused_parameters \ + --data_file_keys "image" diff --git a/examples/boogu_image/model_training/special/split_training/Boogu-Image-0.1-Base.sh b/examples/boogu_image/model_training/special/split_training/Boogu-Image-0.1-Base.sh new file mode 100644 index 0000000000000000000000000000000000000000..cb23fd26a5c2d3dcacc38d7755f6eaff1dcb8821 --- /dev/null +++ b/examples/boogu_image/model_training/special/split_training/Boogu-Image-0.1-Base.sh @@ -0,0 +1,42 @@ +modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "boogu_image/Boogu-Image-0.1-Base/*" --local_dir ./data/diffsynth_example_dataset + +# Stage 1: cache deterministic preprocessing outputs. +accelerate launch examples/boogu_image/model_training/train.py \ + --dataset_base_path ./data/diffsynth_example_dataset/boogu_image/Boogu-Image-0.1-Base \ + --dataset_metadata_path ./data/diffsynth_example_dataset/boogu_image/Boogu-Image-0.1-Base/metadata.csv \ + --max_pixels 1048576 \ + --dataset_repeat 1 \ + --model_id_with_origin_paths 'Boogu/Boogu-Image-0.1-Base:transformer/*.safetensors,Boogu/Boogu-Image-0.1-Base:mllm/*.safetensors,Boogu/Boogu-Image-0.1-Base:vae/*.safetensors' \ + --learning_rate 1e-4 \ + --num_epochs 5 \ + --remove_prefix_in_ckpt pipe.dit. \ + --output_path ./models/train/Boogu-Image-0.1-Base_split_cache \ + --lora_base_model dit \ + --lora_target_modules to_q,to_k,to_v,to_out.0,img_to_q,img_to_k,img_to_v,img_out,instruct_to_q,instruct_to_k,instruct_to_v,instruct_out \ + --lora_rank 32 \ + --use_gradient_checkpointing \ + --dataset_num_workers 8 \ + --find_unused_parameters \ + --data_file_keys image \ + --offload_models 'Boogu/Boogu-Image-0.1-Base:transformer/*.safetensors' \ + --task sft:data_process + +# Stage 2: train LoRA from the cached dataset. +accelerate launch examples/boogu_image/model_training/train.py \ + --dataset_base_path ./models/train/Boogu-Image-0.1-Base_split_cache \ + --max_pixels 1048576 \ + --dataset_repeat 50 \ + --model_id_with_origin_paths 'Boogu/Boogu-Image-0.1-Base:transformer/*.safetensors,Boogu/Boogu-Image-0.1-Base:mllm/*.safetensors,Boogu/Boogu-Image-0.1-Base:vae/*.safetensors' \ + --learning_rate 1e-4 \ + --num_epochs 5 \ + --remove_prefix_in_ckpt pipe.dit. \ + --output_path ./models/train/Boogu-Image-0.1-Base_split \ + --lora_base_model dit \ + --lora_target_modules to_q,to_k,to_v,to_out.0,img_to_q,img_to_k,img_to_v,img_out,instruct_to_q,instruct_to_k,instruct_to_v,instruct_out \ + --lora_rank 32 \ + --use_gradient_checkpointing \ + --dataset_num_workers 8 \ + --find_unused_parameters \ + --data_file_keys image \ + --offload_models 'Boogu/Boogu-Image-0.1-Base:mllm/*.safetensors,Boogu/Boogu-Image-0.1-Base:vae/*.safetensors' \ + --task sft:train diff --git a/examples/boogu_image/model_training/special/split_training/validate.py b/examples/boogu_image/model_training/special/split_training/validate.py new file mode 100644 index 0000000000000000000000000000000000000000..079e9b4f38cffda06198b9e58fe9f52a2a5f7a7b --- /dev/null +++ b/examples/boogu_image/model_training/special/split_training/validate.py @@ -0,0 +1,28 @@ +import torch +from diffsynth.pipelines.boogu_image import BooguImagePipeline, ModelConfig + +pipe = BooguImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Boogu/Boogu-Image-0.1-Base", origin_file_pattern="transformer/*.safetensors"), + ModelConfig(model_id="Boogu/Boogu-Image-0.1-Base", origin_file_pattern="mllm/*.safetensors"), + ModelConfig(model_id="Boogu/Boogu-Image-0.1-Base", origin_file_pattern="vae/*.safetensors"), + ], + processor_config=ModelConfig(model_id="Boogu/Boogu-Image-0.1-Base", origin_file_pattern="mllm/"), +) + +pipe.load_lora(pipe.dit, './models/train/Boogu-Image-0.1-Base_split/epoch-4.safetensors') + +prompt = "dog,white and brown dog, sitting on wall, under pink flowers" + +output = pipe( + prompt=prompt, + negative_prompt="", + height=1024, + width=1024, + seed=42, + num_inference_steps=50, + cfg_scale=4.0, +) +output.save('split_training_Boogu-Image-0.1-Base.jpg') diff --git a/examples/boogu_image/model_training/train.py b/examples/boogu_image/model_training/train.py new file mode 100644 index 0000000000000000000000000000000000000000..8aa810583e2662049f435f2770079e4176858e17 --- /dev/null +++ b/examples/boogu_image/model_training/train.py @@ -0,0 +1,144 @@ +import torch, os, argparse, accelerate +from diffsynth.core import UnifiedDataset +from diffsynth.pipelines.boogu_image import BooguImagePipeline, ModelConfig +from diffsynth.diffusion import * +from diffsynth.core.data.operators import * +os.environ["TOKENIZERS_PARALLELISM"] = "false" + + +class BooguImageTrainingModule(DiffusionTrainingModule): + def __init__( + self, + model_paths=None, model_id_with_origin_paths=None, + processor_path=None, + trainable_models=None, + lora_base_model=None, lora_target_modules="", lora_rank=32, lora_checkpoint=None, + preset_lora_path=None, preset_lora_model=None, + use_gradient_checkpointing=True, + use_gradient_checkpointing_offload=False, + extra_inputs=None, + fp8_models=None, + offload_models=None, + quant_options=None, + resume_from_checkpoint=None, remove_prefix_in_ckpt=None, + device="cpu", + task="sft", + ): + super().__init__() + model_configs = self.parse_model_configs(model_paths, model_id_with_origin_paths, fp8_models=fp8_models, offload_models=offload_models, quant_options=quant_options, device=device) + processor_config = ModelConfig(model_id="Boogu/Boogu-Image-0.1-Base", origin_file_pattern="mllm/") if processor_path is None else ModelConfig(processor_path) + self.pipe = BooguImagePipeline.from_pretrained(torch_dtype=torch.bfloat16, device=device, model_configs=model_configs, processor_config=processor_config) + self.pipe = self.split_pipeline_units(task, self.pipe, trainable_models, lora_base_model) + self.resume_from_checkpoint(resume_from_checkpoint, remove_prefix_in_ckpt) + + self.switch_pipe_to_training_mode( + self.pipe, trainable_models, + lora_base_model, lora_target_modules, lora_rank, lora_checkpoint, + preset_lora_path, preset_lora_model, + task=task, + ) + + self.use_gradient_checkpointing = use_gradient_checkpointing + self.use_gradient_checkpointing_offload = use_gradient_checkpointing_offload + self.extra_inputs = extra_inputs.split(",") if extra_inputs is not None else [] + self.fp8_models = fp8_models + self.task = task + self.task_to_loss = { + "sft:data_process": lambda pipe, *args: args, + "sft": lambda pipe, inputs_shared, inputs_posi, inputs_nega: FlowMatchSFTLoss(pipe, **inputs_shared, **inputs_posi), + "sft:train": lambda pipe, inputs_shared, inputs_posi, inputs_nega: FlowMatchSFTLoss(pipe, **inputs_shared, **inputs_posi), + } + + def get_pipeline_inputs(self, data): + inputs_posi = {"prompt": data["prompt"]} + inputs_nega = {"negative_prompt": ""} + inputs_shared = { + "input_image": data["image"], + "height": data["image"].size[1], + "width": data["image"].size[0], + "cfg_scale": 1, + "rand_device": self.pipe.device, + "use_gradient_checkpointing": self.use_gradient_checkpointing, + "use_gradient_checkpointing_offload": self.use_gradient_checkpointing_offload, + } + inputs_shared = self.parse_extra_inputs(data, self.extra_inputs, inputs_shared) + return inputs_shared, inputs_posi, inputs_nega + + def forward(self, data, inputs=None): + if inputs is None: + inputs = self.get_pipeline_inputs(data) + inputs = self.transfer_data_to_device(inputs, self.pipe.device, self.pipe.torch_dtype) + for unit in self.pipe.units: + inputs = self.pipe.unit_runner(unit, self.pipe, *inputs) + loss = self.task_to_loss[self.task](self.pipe, *inputs) + return loss + + +def boogu_image_parser(): + parser = argparse.ArgumentParser(description="Boogu-Image training.") + parser = add_general_config(parser) + parser = add_image_size_config(parser) + parser.add_argument("--processor_path", type=str, default=None, help="Path to the processor.") + parser.add_argument("--initialize_model_on_cpu", default=False, action="store_true", help="Whether to initialize models on CPU.") + return parser + + +if __name__ == "__main__": + parser = boogu_image_parser() + args = parser.parse_args() + accelerator = accelerate.Accelerator( + gradient_accumulation_steps=args.gradient_accumulation_steps, + kwargs_handlers=[accelerate.DistributedDataParallelKwargs(find_unused_parameters=args.find_unused_parameters)], + ) + dataset = UnifiedDataset( + base_path=args.dataset_base_path, + metadata_path=args.dataset_metadata_path, + repeat=args.dataset_repeat, + data_file_keys=args.data_file_keys.split(","), + main_data_operator=UnifiedDataset.default_image_operator( + base_path=args.dataset_base_path, + max_pixels=args.max_pixels, + height=args.height, + width=args.width, + height_division_factor=16, + width_division_factor=16, + ), + ) + model = BooguImageTrainingModule( + model_paths=args.model_paths, + model_id_with_origin_paths=args.model_id_with_origin_paths, + processor_path=args.processor_path, + trainable_models=args.trainable_models, + lora_base_model=args.lora_base_model, + lora_target_modules=args.lora_target_modules, + lora_rank=args.lora_rank, + lora_checkpoint=args.lora_checkpoint, + preset_lora_path=args.preset_lora_path, + preset_lora_model=args.preset_lora_model, + use_gradient_checkpointing=args.use_gradient_checkpointing, + use_gradient_checkpointing_offload=args.use_gradient_checkpointing_offload, + extra_inputs=args.extra_inputs, + fp8_models=args.fp8_models, + offload_models=args.offload_models, + quant_options=args.quant_options, + resume_from_checkpoint=args.resume_from_checkpoint, + remove_prefix_in_ckpt=args.remove_prefix_in_ckpt, + task=args.task, + device="cpu" if (args.initialize_model_on_cpu or args.enable_model_cpu_offload) else accelerator.device, + ) + model_logger = ModelLogger( + args.output_path, + remove_prefix_in_ckpt=args.remove_prefix_in_ckpt, + enable_tensorboard_log=args.enable_tensorboard_log, + enable_swanlab_log=args.enable_swanlab_log, + swanlab_project=args.swanlab_project, + enable_wandb_log=args.enable_wandb_log, + wandb_project=args.wandb_project, + enable_csv_log=args.enable_csv_log, + ) + launcher_map = { + "sft:data_process": launch_data_process_task, + "sft": launch_training_task, + "sft:train": launch_training_task, + } + launcher_map[args.task](accelerator, dataset, model, model_logger, args=args) diff --git a/examples/boogu_image/model_training/validate_full/Boogu-Image-0.1-Base.py b/examples/boogu_image/model_training/validate_full/Boogu-Image-0.1-Base.py new file mode 100644 index 0000000000000000000000000000000000000000..8479b30d8b653bfaa04087d37bd2a7e80945ebc7 --- /dev/null +++ b/examples/boogu_image/model_training/validate_full/Boogu-Image-0.1-Base.py @@ -0,0 +1,30 @@ +import torch +from diffsynth import load_state_dict +from diffsynth.pipelines.boogu_image import BooguImagePipeline, ModelConfig + +pipe = BooguImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Boogu/Boogu-Image-0.1-Base", origin_file_pattern="transformer/*.safetensors"), + ModelConfig(model_id="Boogu/Boogu-Image-0.1-Base", origin_file_pattern="mllm/*.safetensors"), + ModelConfig(model_id="Boogu/Boogu-Image-0.1-Base", origin_file_pattern="vae/*.safetensors"), + ], + processor_config=ModelConfig(model_id="Boogu/Boogu-Image-0.1-Base", origin_file_pattern="mllm/"), +) + +state_dict = load_state_dict("models/train/Boogu-Image-0.1-Base_full/epoch-1.safetensors") +pipe.dit.load_state_dict(state_dict, strict=False) + +prompt = "dog,white and brown dog, sitting on wall, under pink flowers" + +output = pipe( + prompt=prompt, + negative_prompt="", + height=1024, + width=1024, + seed=42, + num_inference_steps=50, + cfg_scale=4.0, +) +output.save("image_Boogu-Image-0.1-Base_full.jpg") diff --git a/examples/boogu_image/model_training/validate_full/Boogu-Image-0.1-Edit.py b/examples/boogu_image/model_training/validate_full/Boogu-Image-0.1-Edit.py new file mode 100644 index 0000000000000000000000000000000000000000..4ffeab6750e2404b4076f757eda6968d22253179 --- /dev/null +++ b/examples/boogu_image/model_training/validate_full/Boogu-Image-0.1-Edit.py @@ -0,0 +1,34 @@ +import torch +from PIL import Image +from diffsynth import load_state_dict +from diffsynth.pipelines.boogu_image import BooguImagePipeline, ModelConfig + +pipe = BooguImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Boogu/Boogu-Image-0.1-Edit", origin_file_pattern="transformer/*.safetensors"), + ModelConfig(model_id="Boogu/Boogu-Image-0.1-Edit", origin_file_pattern="mllm/*.safetensors"), + ModelConfig(model_id="Boogu/Boogu-Image-0.1-Edit", origin_file_pattern="vae/*.safetensors"), + ], + processor_config=ModelConfig(model_id="Boogu/Boogu-Image-0.1-Edit", origin_file_pattern="mllm/"), +) + +state_dict = load_state_dict("models/train/Boogu-Image-0.1-Edit_full/epoch-1.safetensors") +pipe.dit.load_state_dict(state_dict, strict=False) + +prompt = "将裙子改为粉色" +edit_image = Image.open("data/diffsynth_example_dataset/boogu_image/Boogu-Image-0.1-Edit/edit/image1.jpg").convert("RGB") + +output = pipe( + prompt=prompt, + negative_prompt="", + edit_image=edit_image, + height=1024, + width=1024, + seed=42, + rand_device="cuda", + num_inference_steps=50, + cfg_scale=1.0, +) +output.save("image_Boogu-Image-0.1-Edit_full.jpg") diff --git a/examples/boogu_image/model_training/validate_full/Boogu-Image-0.1-Turbo.py b/examples/boogu_image/model_training/validate_full/Boogu-Image-0.1-Turbo.py new file mode 100644 index 0000000000000000000000000000000000000000..e7f6a5a6df549608bf9690117b63e0b4817beb65 --- /dev/null +++ b/examples/boogu_image/model_training/validate_full/Boogu-Image-0.1-Turbo.py @@ -0,0 +1,32 @@ +import torch +from diffsynth import load_state_dict +from diffsynth.pipelines.boogu_image import BooguImagePipeline, ModelConfig + +pipe = BooguImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Boogu/Boogu-Image-0.1-Turbo", origin_file_pattern="transformer/*.safetensors"), + ModelConfig(model_id="Boogu/Boogu-Image-0.1-Turbo", origin_file_pattern="mllm/*.safetensors"), + ModelConfig(model_id="Boogu/Boogu-Image-0.1-Turbo", origin_file_pattern="vae/*.safetensors"), + ], + processor_config=ModelConfig(model_id="Boogu/Boogu-Image-0.1-Turbo", origin_file_pattern="mllm/"), +) + +state_dict = load_state_dict("models/train/Boogu-Image-0.1-Turbo_full/epoch-1.safetensors") +pipe.dit.load_state_dict(state_dict, strict=False) + +prompt = "dog,white and brown dog, sitting on wall, under pink flowers" + +output = pipe( + prompt=prompt, + negative_prompt="", + height=1024, + width=1024, + seed=42, + rand_device="cuda", + num_inference_steps=4, + cfg_scale=1.0, + sigmas=[0.999, 0.748, 0.5, 0.25], +) +output.save("image_Boogu-Image-0.1-Turbo_full.jpg") diff --git a/examples/boogu_image/model_training/validate_lora/Boogu-Image-0.1-Base.py b/examples/boogu_image/model_training/validate_lora/Boogu-Image-0.1-Base.py new file mode 100644 index 0000000000000000000000000000000000000000..901a5622c2ae1b3dff51bc80d8ead4c7df07f427 --- /dev/null +++ b/examples/boogu_image/model_training/validate_lora/Boogu-Image-0.1-Base.py @@ -0,0 +1,28 @@ +import torch +from diffsynth.pipelines.boogu_image import BooguImagePipeline, ModelConfig + +pipe = BooguImagePipeline.from_pretrained( + torch_dtype=torch.bfloat16, + device="cuda", + model_configs=[ + ModelConfig(model_id="Boogu/Boogu-Image-0.1-Base", origin_file_pattern="transformer/*.safetensors"), + ModelConfig(model_id="Boogu/Boogu-Image-0.1-Base", origin_file_pattern="mllm/*.safetensors"), + ModelConfig(model_id="Boogu/Boogu-Image-0.1-Base", origin_file_pattern="vae/*.safetensors"), + ], + processor_config=ModelConfig(model_id="Boogu/Boogu-Image-0.1-Base", origin_file_pattern="mllm/"), +) + +pipe.load_lora(pipe.dit, "models/train/Boogu-Image-0.1-Base_lora/epoch-4.safetensors") + +prompt = "dog,white and brown dog, sitting on wall, under pink flowers" + +output = pipe( + prompt=prompt, + negative_prompt="", + height=1024, + width=1024, + seed=42, + num_inference_steps=50, + cfg_scale=4.0, +) +output.save("image_Boogu-Image-0.1-Base_lora.jpg")