Implement `CustomDiffusionAttnProcessor2_0`. (#4604) · sepal/diffusers@16b9a57 · GitHub
Skip to content

Commit 16b9a57

Browse files
authored
Implement CustomDiffusionAttnProcessor2_0. (huggingface#4604)
* Implement `CustomDiffusionAttnProcessor2_0` * Doc-strings and type annotations for `CustomDiffusionAttnProcessor2_0`. (huggingface#1) * Update attnprocessor.md * Update attention_processor.py * Interops for `CustomDiffusionAttnProcessor2_0`. * Formatted `attention_processor.py`. * Formatted doc-string in `attention_processor.py` * Conditional CustomDiffusion2_0 for training example. * Remove unnecessary reference impl in comments. * Fix `save_attn_procs`.
1 parent 7b39f43 commit 16b9a57

4 files changed

Lines changed: 139 additions & 7 deletions

File tree

‎docs/source/en/api/attnprocessor.md‎

Lines changed: 4 additions & 1 deletion

‎examples/custom_diffusion/train_custom_diffusion.py‎

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,11 @@
5151
UNet2DConditionModel,
5252
)
5353
from diffusers.loaders import AttnProcsLayers
54-
from diffusers.models.attention_processor import CustomDiffusionAttnProcessor, CustomDiffusionXFormersAttnProcessor
54+
from diffusers.models.attention_processor import (
55+
CustomDiffusionAttnProcessor,
56+
CustomDiffusionAttnProcessor2_0,
57+
CustomDiffusionXFormersAttnProcessor,
58+
)
5559
from diffusers.optimization import get_scheduler
5660
from diffusers.utils import check_min_version, is_wandb_available
5761
from diffusers.utils.import_utils import is_xformers_available
@@ -870,7 +874,9 @@ def main(args):
870874
unet.to(accelerator.device, dtype=weight_dtype)
871875
vae.to(accelerator.device, dtype=weight_dtype)
872876

873-
attention_class = CustomDiffusionAttnProcessor
877+
attention_class = (
878+
CustomDiffusionAttnProcessor2_0 if hasattr(F, "scaled_dot_product_attention") else CustomDiffusionAttnProcessor
879+
)
874880
if args.enable_xformers_memory_efficient_attention:
875881
if is_xformers_available():
876882
import xformers

‎src/diffusers/loaders.py‎

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -559,6 +559,7 @@ def save_attn_procs(
559559
"""
560560
from .models.attention_processor import (
561561
CustomDiffusionAttnProcessor,
562+
CustomDiffusionAttnProcessor2_0,
562563
CustomDiffusionXFormersAttnProcessor,
563564
)
564565

@@ -578,15 +579,25 @@ def save_function(weights, filename):
578579
os.makedirs(save_directory, exist_ok=True)
579580

580581
is_custom_diffusion = any(
581-
isinstance(x, (CustomDiffusionAttnProcessor, CustomDiffusionXFormersAttnProcessor))
582+
isinstance(
583+
x,
584+
(CustomDiffusionAttnProcessor, CustomDiffusionAttnProcessor2_0, CustomDiffusionXFormersAttnProcessor),
585+
)
582586
for (_, x) in self.attn_processors.items()
583587
)
584588
if is_custom_diffusion:
585589
model_to_save = AttnProcsLayers(
586590
{
587591
y: x
588592
for (y, x) in self.attn_processors.items()
589-
if isinstance(x, (CustomDiffusionAttnProcessor, CustomDiffusionXFormersAttnProcessor))
593+
if isinstance(
594+
x,
595+
(
596+
CustomDiffusionAttnProcessor,
597+
CustomDiffusionAttnProcessor2_0,
598+
CustomDiffusionXFormersAttnProcessor,
599+
),
600+
)
590601
}
591602
)
592603
state_dict = model_to_save.state_dict()

‎src/diffusers/models/attention_processor.py‎

Lines changed: 114 additions & 2 deletions

0 commit comments

Comments
 (0)