| from typing import TYPE_CHECKING | |
| from ..utils import DIFFUSERS_SLOW_IMPORT, _LazyModule, deprecate | |
| from ..utils.import_utils import is_peft_available, is_torch_available, is_transformers_available | |
| def text_encoder_lora_state_dict(text_encoder): | |
| deprecate( | |
| "text_encoder_load_state_dict in `models`", | |
| "0.27.0", | |
| "`text_encoder_lora_state_dict` is deprecated and will be removed in 0.27.0. Make sure to retrieve the weights using `get_peft_model`. See https://huggingface.co/docs/peft/v0.6.2/en/quicktour#peftmodel for more information.", | |
| ) | |
| state_dict = {} | |
| for name, module in text_encoder_attn_modules(text_encoder): | |
| for k, v in module.q_proj.lora_linear_layer.state_dict().items(): | |
| state_dict[f"{name}.q_proj.lora_linear_layer.{k}"] = v | |
| for k, v in module.k_proj.lora_linear_layer.state_dict().items(): | |
| state_dict[f"{name}.k_proj.lora_linear_layer.{k}"] = v | |
| for k, v in module.v_proj.lora_linear_layer.state_dict().items(): | |
| state_dict[f"{name}.v_proj.lora_linear_layer.{k}"] = v | |
| for k, v in module.out_proj.lora_linear_layer.state_dict().items(): | |
| state_dict[f"{name}.out_proj.lora_linear_layer.{k}"] = v | |
| return state_dict | |
| if is_transformers_available(): | |
| def text_encoder_attn_modules(text_encoder): | |
| deprecate( | |
| "text_encoder_attn_modules in `models`", | |
| "0.27.0", | |
| "`text_encoder_lora_state_dict` is deprecated and will be removed in 0.27.0. Make sure to retrieve the weights using `get_peft_model`. See https://huggingface.co/docs/peft/v0.6.2/en/quicktour#peftmodel for more information.", | |
| ) | |
| from transformers import CLIPTextModel, CLIPTextModelWithProjection | |
| attn_modules = [] | |
| if isinstance(text_encoder, (CLIPTextModel, CLIPTextModelWithProjection)): | |
| for i, layer in enumerate(text_encoder.text_model.encoder.layers): | |
| name = f"text_model.encoder.layers.{i}.self_attn" | |
| mod = layer.self_attn | |
| attn_modules.append((name, mod)) | |
| else: | |
| raise ValueError(f"do not know how to get attention modules for: {text_encoder.__class__.__name__}") | |
| return attn_modules | |
| _import_structure = {} | |
| if is_torch_available(): | |
| _import_structure["single_file_model"] = ["FromOriginalModelMixin"] | |
| _import_structure["unet"] = ["UNet2DConditionLoadersMixin"] | |
| _import_structure["utils"] = ["AttnProcsLayers"] | |
| if is_transformers_available(): | |
| _import_structure["single_file"] = ["FromSingleFileMixin"] | |
| _import_structure["lora_pipeline"] = [ | |
| "AmusedLoraLoaderMixin", | |
| "StableDiffusionLoraLoaderMixin", | |
| "SD3LoraLoaderMixin", | |
| "StableDiffusionXLLoraLoaderMixin", | |
| "LoraLoaderMixin", | |
| "FluxLoraLoaderMixin", | |
| "CogVideoXLoraLoaderMixin", | |
| "Mochi1LoraLoaderMixin", | |
| ] | |
| _import_structure["textual_inversion"] = ["TextualInversionLoaderMixin"] | |
| _import_structure["ip_adapter"] = ["IPAdapterMixin"] | |
| _import_structure["peft"] = ["PeftAdapterMixin"] | |
| if TYPE_CHECKING or DIFFUSERS_SLOW_IMPORT: | |
| if is_torch_available(): | |
| from .single_file_model import FromOriginalModelMixin | |
| from .unet import UNet2DConditionLoadersMixin | |
| from .utils import AttnProcsLayers | |
| if is_transformers_available(): | |
| from .ip_adapter import IPAdapterMixin | |
| from .lora_pipeline import ( | |
| AmusedLoraLoaderMixin, | |
| CogVideoXLoraLoaderMixin, | |
| FluxLoraLoaderMixin, | |
| LoraLoaderMixin, | |
| Mochi1LoraLoaderMixin, | |
| SD3LoraLoaderMixin, | |
| StableDiffusionLoraLoaderMixin, | |
| StableDiffusionXLLoraLoaderMixin, | |
| ) | |
| from .single_file import FromSingleFileMixin | |
| from .textual_inversion import TextualInversionLoaderMixin | |
| from .peft import PeftAdapterMixin | |
| else: | |
| import sys | |
| sys.modules[__name__] = _LazyModule(__name__, globals()["__file__"], _import_structure, module_spec=__spec__) | |