Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 7.3k
refactor: move model helper function in pipeline to a mixin class#6571
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Uh oh!
There was an error while loading. Please reload this page.
Merged
Changes from all commits
Commits
Show all changes
23 commits
Select commit
Hold shift + click to select a range
130be1d
move model helper function in pipeline to EfficiencyMixin
ultranity ec74982
deduplicate functions replaced by EfficiencyMixin
ultranity 4a7fc38
add mixin to rdm & restore audioldm2 & fix quality checks
ultranity cc4f805
rebase on main branch
ultranity fc71e97
init PipelineEfficiencyFunctionTesterMixin
ultranity 95f53e6
rename EfficiencyMixin to LatentDiffusionMixin
ultranity 6c11d6a
add LDM_component test for pipeline with LatentDiffusionMixin
ultranity 48d8b67
Merge branch 'main' into efficiency_pipe_util
yiyixuxu 4602bac
rename EfficiencyMixin to StableDiffusionMixin
ultranity 7373eb0
Merge branch 'main' into efficiency_pipe_util
ultranity ebfd3a7
Add more SDFunctionTesterMixin to cover different UNet type
ultranity 066c14d
add StableDiffusionMixin to InstaFlowPipeline
ultranity fdc43c5
remove StableDiffusionMixin from UniDiffuserPipeline
ultranity 0099144
Update tests/pipelines/test_pipelines_common.py
yiyixuxu 4a294ec
make SDFunctionTesterMixin run on non-image diffsuion pipeline
ultranity b3c3de0
fix fuse_projection by check is_cross_attention when init
ultranity 9920fc9
Merge branch 'main' into efficiency_pipe_util
ultranity 7cdff34
Merge branch 'main' into efficiency_pipe_util
sayakpaul 994299c
use get_dummy_inputs for test_vae_tiling and test_freeu
ultranity a076831
fix I2V gen test error
ultranity 661b1b5
Merge branch 'main' into efficiency_pipe_util
ultranity 0fd684b
add missing StableDiffusionMixin
ultranity 4bf6b55
Merge branch 'main' into efficiency_pipe_util
ultranity File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Uh oh!
There was an error while loading. Please reload this page.
Jump to
Jump to file
Failed to load files.
Loading
Uh oh!
There was an error while loading. Please reload this page.
Diff view
Diff view
There are no files selected for viewing
14 changes: 2 additions & 12 deletions
14 examples/community/clip_guided_images_mixing_stable_diffusion.py
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
14 changes: 2 additions & 12 deletions
14 examples/community/clip_guided_stable_diffusion_img2img.py
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -10,6 +10,7 @@ | ||
| from diffusers.loaders import LoraLoaderMixin | ||
| from diffusers.models import AutoencoderKL, UNet2DConditionModel | ||
| from diffusers.models.lora import adjust_lora_scale_text_encoder | ||
| from diffusers.pipelines.pipeline_utils import StableDiffusionMixin | ||
| from diffusers.pipelines.stable_diffusion.pipeline_output import StableDiffusionPipelineOutput | ||
| from diffusers.pipelines.stable_diffusion.safety_checker import StableDiffusionSafetyChecker | ||
| from diffusers.schedulers import KarrasDiffusionSchedulers | ||
| @@ -193,7 +194,7 @@ def retrieve_timesteps( | ||
| return timesteps, num_inference_steps | ||
| class GlueGenStableDiffusionPipeline(DiffusionPipeline, LoraLoaderMixin): | ||
| class GlueGenStableDiffusionPipeline(DiffusionPipeline, StableDiffusionMixin, LoraLoaderMixin): | ||
| def __init__( | ||
| self, | ||
| vae: AutoencoderKL, | ||
| @@ -241,35 +242,6 @@ def load_language_adapter( | ||
| ) | ||
| self.language_adapter.load_state_dict(torch.load(model_path)) | ||
| def enable_vae_slicing(self): | ||
| r""" | ||
| Enable sliced VAE decoding. When this option is enabled, the VAE will split the input tensor in slices to | ||
| compute decoding in several steps. This is useful to save some memory and allow larger batch sizes. | ||
| """ | ||
| self.vae.enable_slicing() | ||
| def disable_vae_slicing(self): | ||
| r""" | ||
| Disable sliced VAE decoding. If `enable_vae_slicing` was previously enabled, this method will go back to | ||
| computing decoding in one step. | ||
| """ | ||
| self.vae.disable_slicing() | ||
| def enable_vae_tiling(self): | ||
| r""" | ||
| Enable tiled VAE decoding. When this option is enabled, the VAE will split the input tensor into tiles to | ||
| compute decoding and encoding in several steps. This is useful for saving a large amount of memory and to allow | ||
| processing larger images. | ||
| """ | ||
| self.vae.enable_tiling() | ||
| def disable_vae_tiling(self): | ||
| r""" | ||
| Disable tiled VAE decoding. If `enable_vae_tiling` was previously enabled, this method will go back to | ||
| computing decoding in one step. | ||
| """ | ||
| self.vae.disable_tiling() | ||
ultranity marked this conversation as resolved.
Uh oh!There was an error while loading. Please reload this page. | ||
| def _adapt_language(self, prompt_embeds: torch.FloatTensor): | ||
| prompt_embeds = prompt_embeds / 3 | ||
| prompt_embeds = self.language_adapter(prompt_embeds) * (self.tensor_norm / 2) | ||
| @@ -544,32 +516,6 @@ def prepare_latents(self, batch_size, num_channels_latents, height, width, dtype | ||
| latents = latents * self.scheduler.init_noise_sigma | ||
| return latents | ||
| def enable_freeu(self, s1: float, s2: float, b1: float, b2: float): | ||
| r"""Enables the FreeU mechanism as in https://arxiv.org/abs/2309.11497. | ||
| The suffixes after the scaling factors represent the stages where they are being applied. | ||
| Please refer to the [official repository](https://github.com/ChenyangSi/FreeU) for combinations of the values | ||
| that are known to work well for different pipelines such as Stable Diffusion v1, v2, and Stable Diffusion XL. | ||
| Args: | ||
| s1 (`float`): | ||
| Scaling factor for stage 1 to attenuate the contributions of the skip features. This is done to | ||
| mitigate "oversmoothing effect" in the enhanced denoising process. | ||
| s2 (`float`): | ||
| Scaling factor for stage 2 to attenuate the contributions of the skip features. This is done to | ||
| mitigate "oversmoothing effect" in the enhanced denoising process. | ||
| b1 (`float`): Scaling factor for stage 1 to amplify the contributions of backbone features. | ||
| b2 (`float`): Scaling factor for stage 2 to amplify the contributions of backbone features. | ||
| """ | ||
| if not hasattr(self, "unet"): | ||
| raise ValueError("The pipeline must have `unet` for using FreeU.") | ||
| self.unet.enable_freeu(s1=s1, s2=s2, b1=b1, b2=b2) | ||
| def disable_freeu(self): | ||
| """Disables the FreeU mechanism if enabled.""" | ||
| self.unet.disable_freeu() | ||
| # Copied from diffusers.pipelines.latent_consistency_models.pipeline_latent_consistency_text2img.LatentConsistencyModelPipeline.get_guidance_scale_embedding | ||
| def get_guidance_scale_embedding(self, w, embedding_dim=512, dtype=torch.float32): | ||
| """ | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Would leave this as is in the Pipeline for now and not add to the Mixin.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I apologize some of those changes should be spilt into a single commit(like: remove unnecessary overload ...), but as they have been inherited from DiffusionPipeline those function
enable_sequential_cpu_offload,_execution_device,enable_attention_slicingcould be removed without changing any behaviour?