-
Notifications
You must be signed in to change notification settings - Fork 7.2k
Krea2 Modular Pipeline Support, Documentation, Test Cases #14083
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
Open
Cedric-Perauer
wants to merge
29
commits into
huggingface:main
Choose a base branch
from
Cedric-Perauer:master
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
29 commits
Select commit
Hold shift + click to select a range
6f8e01b
towards krea2 modular
Cedric-Perauer 2bae576
add test cases
Cedric-Perauer 30c5138
self-review fixes: test model id to hf internal, guider change
Cedric-Perauer 7450dc4
remove pnd
Cedric-Perauer 4e4da7f
modular autodoc
Cedric-Perauer 4da8d49
modular autodoc
Cedric-Perauer bc0c912
Merge branch 'main' into master
Cedric-Perauer 689ee82
Merge branch 'main' into master
Cedric-Perauer d235700
Merge branch 'main' into master
Cedric-Perauer 5a609ca
Merge branch 'main' into master
Cedric-Perauer 3de62bd
Merge branch 'main' into master
Cedric-Perauer 988beb9
Merge branch 'main' into master
Cedric-Perauer 8022f8e
Merge branch 'main' into master
Cedric-Perauer 93f59d9
Update src/diffusers/modular_pipelines/krea2/modular_blocks_krea2.py
Cedric-Perauer e6e288f
Update src/diffusers/modular_pipelines/krea2/before_denoise.py
Cedric-Perauer afd27d3
Update docs/source/en/api/pipelines/krea2.md
Cedric-Perauer 3de7fad
input params, dim multiple of scale factor * patch
Cedric-Perauer e3b07ab
docs for krea2 turbo modular
Cedric-Perauer 909bcc5
docs fix
Cedric-Perauer 07ccbb2
Merge branch 'main' into master
dg845 ec123ba
Merge branch 'main' into master
Cedric-Perauer debb4dd
Merge branch 'main' into master
dg845 0eeca0d
Update tests/modular_pipelines/krea2/test_modular_pipeline_krea2.py
Cedric-Perauer a21b285
Update src/diffusers/modular_pipelines/krea2/before_denoise.py
Cedric-Perauer 421d212
Merge branch 'main' into master
Cedric-Perauer 2750680
Merge branch 'main' into master
Cedric-Perauer 47ba707
modular blocks krea2 turbo fix
Cedric-Perauer ab52d18
Merge branch 'main' into master
Cedric-Perauer 070b25a
Merge branch 'main' into master
Cedric-Perauer File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
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 | ||
|---|---|---|---|---|
|
|
@@ -35,7 +35,7 @@ import torch | |||
| from diffusers import Krea2Pipeline | ||||
|
|
||||
| # Load from a local directory produced by the Krea 2 conversion (no hub repo yet). | ||||
| pipe = Krea2Pipeline.from_pretrained("path/to/krea2-diffusers", torch_dtype=torch.bfloat16) | ||||
| pipe = Krea2Pipeline.from_pretrained("krea/Krea-2-Raw", torch_dtype=torch.bfloat16) | ||||
| pipe.to("cuda") | ||||
|
|
||||
| prompt = "a fox in the snow" | ||||
|
|
@@ -50,6 +50,27 @@ image = pipe( | |||
| image.save("krea2.png") | ||||
| ``` | ||||
|
|
||||
| We additionally provide an example for using Krea2 Turbo : | ||||
|
|
||||
| ```python | ||||
| import torch | ||||
| from diffusers import Krea2Pipeline | ||||
|
|
||||
| pipe = Krea2Pipeline.from_pretrained("krea/Krea-2-Turbo", torch_dtype=torch.bfloat16) | ||||
| pipe.to("cuda") | ||||
|
|
||||
| image = pipe( | ||||
| "a fox in the snow", | ||||
| height=1024, | ||||
| width=1024, | ||||
| num_inference_steps=8, | ||||
| guidance_scale=0.0, | ||||
| generator=torch.Generator("cuda").manual_seed(0), | ||||
| ).images[0] | ||||
| image.save("krea2_turbo.png") | ||||
| ``` | ||||
|
|
||||
|
|
||||
| ## Krea2Pipeline | ||||
|
|
||||
| [[autodoc]] Krea2Pipeline | ||||
|
|
@@ -59,3 +80,68 @@ image.save("krea2.png") | |||
| ## Krea2PipelineOutput | ||||
|
|
||||
| [[autodoc]] pipelines.krea2.pipeline_output.Krea2PipelineOutput | ||||
|
|
||||
| ## Modular | ||||
|
|
||||
| Krea 2 is also available as a [modular pipeline](../../modular_diffusers/overview). Classifier-free guidance is | ||||
| configured through the `guider` component rather than a `guidance_scale` call argument. Krea 2 uses cond-anchored CFG, | ||||
| which is [`ClassifierFreeGuidance`] with `use_original_formulation=True`. | ||||
|
|
||||
| ```python | ||||
| import torch | ||||
| from diffusers import ClassifierFreeGuidance, ModularPipeline | ||||
|
|
||||
| pipe = ModularPipeline.from_pretrained("krea/Krea-2-Raw") | ||||
| pipe.load_components(torch_dtype=torch.bfloat16) | ||||
| pipe.to("cuda") | ||||
|
|
||||
| pipe.update_components(guider=ClassifierFreeGuidance(guidance_scale=4.5, use_original_formulation=True)) | ||||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
we should already default to this guider config, so it's not needed here |
||||
|
|
||||
| image = pipe( | ||||
| prompt="a fox in the snow", | ||||
| height=1024, | ||||
| width=1024, | ||||
| num_inference_steps=28, | ||||
| generator=torch.Generator("cuda").manual_seed(0), | ||||
| ).images[0] | ||||
| image.save("krea2.png") | ||||
| ``` | ||||
|
|
||||
| We additionally provide an example for using Krea2 Turbo. The distilled checkpoint maps to its own set of blocks | ||||
| ([`Krea2TurboAutoBlocks`]): it runs guidance-free (no `guider`), takes no negative prompt, and samples in a few steps. | ||||
| `ModularPipeline.from_pretrained` picks the turbo blocks automatically from the checkpoint's `is_distilled` config, so | ||||
| no guidance configuration is needed: | ||||
|
|
||||
| ```python | ||||
| import torch | ||||
| from diffusers import ModularPipeline | ||||
|
|
||||
| pipe = ModularPipeline.from_pretrained("krea/Krea-2-Turbo") | ||||
| pipe.load_components(torch_dtype=torch.bfloat16) | ||||
| pipe.to("cuda") | ||||
|
|
||||
| image = pipe( | ||||
| prompt="a fox in the snow", | ||||
| height=1024, | ||||
| width=1024, | ||||
| num_inference_steps=8, | ||||
| generator=torch.Generator("cuda").manual_seed(0), | ||||
| ).images[0] | ||||
| image.save("krea2_turbo.png") | ||||
| ``` | ||||
|
|
||||
| ## Krea2ModularPipeline | ||||
|
|
||||
| [[autodoc]] Krea2ModularPipeline | ||||
|
|
||||
| ## Krea2AutoBlocks | ||||
|
|
||||
| [[autodoc]] Krea2AutoBlocks | ||||
|
|
||||
| ## Krea2TurboModularPipeline | ||||
|
|
||||
| [[autodoc]] Krea2TurboModularPipeline | ||||
|
|
||||
| ## Krea2TurboAutoBlocks | ||||
|
|
||||
| [[autodoc]] Krea2TurboAutoBlocks | ||||
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 |
|---|---|---|
| @@ -0,0 +1,49 @@ | ||
| from typing import TYPE_CHECKING | ||
|
|
||
| from ...utils import ( | ||
| DIFFUSERS_SLOW_IMPORT, | ||
| OptionalDependencyNotAvailable, | ||
| _LazyModule, | ||
| get_objects_from_module, | ||
| is_torch_available, | ||
| is_transformers_available, | ||
| ) | ||
|
|
||
|
|
||
| _dummy_objects = {} | ||
| _import_structure = {} | ||
|
|
||
| try: | ||
| if not (is_transformers_available() and is_torch_available()): | ||
| raise OptionalDependencyNotAvailable() | ||
| except OptionalDependencyNotAvailable: | ||
| from ...utils import dummy_torch_and_transformers_objects # noqa F403 | ||
|
|
||
| _dummy_objects.update(get_objects_from_module(dummy_torch_and_transformers_objects)) | ||
| else: | ||
| _import_structure["modular_blocks_krea2"] = ["Krea2AutoBlocks"] | ||
| _import_structure["modular_blocks_krea2_turbo"] = ["Krea2TurboAutoBlocks"] | ||
| _import_structure["modular_pipeline"] = ["Krea2ModularPipeline", "Krea2TurboModularPipeline"] | ||
|
|
||
| if TYPE_CHECKING or DIFFUSERS_SLOW_IMPORT: | ||
| try: | ||
| if not (is_transformers_available() and is_torch_available()): | ||
| raise OptionalDependencyNotAvailable() | ||
| except OptionalDependencyNotAvailable: | ||
| from ...utils.dummy_torch_and_transformers_objects import * # noqa F403 | ||
| else: | ||
| from .modular_blocks_krea2 import Krea2AutoBlocks | ||
| from .modular_blocks_krea2_turbo import Krea2TurboAutoBlocks | ||
| from .modular_pipeline import Krea2ModularPipeline, Krea2TurboModularPipeline | ||
| else: | ||
| import sys | ||
|
|
||
| sys.modules[__name__] = _LazyModule( | ||
| __name__, | ||
| globals()["__file__"], | ||
| _import_structure, | ||
| module_spec=__spec__, | ||
| ) | ||
|
|
||
| for name, value in _dummy_objects.items(): | ||
| setattr(sys.modules[__name__], name, value) |
Oops, something went wrong.
Oops, something went wrong.
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.
Uh oh!
There was an error while loading. Please reload this page.