diff --git a/pipelines/model_cogview.py b/pipelines/model_cogview.py index 673c41565..146177063 100644 --- a/pipelines/model_cogview.py +++ b/pipelines/model_cogview.py @@ -3,6 +3,11 @@ import diffusers from modules import shared, devices, sd_models, model_quant, sd_hijack_te from modules.logger import log from pipelines import generic +from pipelines.native_transformer import TransformerSpec + + +COGVIEW3_SPEC = TransformerSpec(cls=diffusers.CogView3PlusTransformer2DModel) +COGVIEW4_SPEC = TransformerSpec(cls=diffusers.CogView4Transformer2DModel) def load_cogview3(checkpoint_info, diffusers_load_config=None): @@ -14,7 +19,7 @@ def load_cogview3(checkpoint_info, diffusers_load_config=None): load_args, _quant_args = model_quant.get_dit_args(diffusers_load_config) log.debug(f'Load model: type=CogView3 repo="{repo_id}" config={diffusers_load_config} offload={shared.opts.diffusers_offload_mode} dtype={devices.dtype} args={load_args}') - transformer = generic.load_transformer(repo_id, cls_name=diffusers.CogView3PlusTransformer2DModel, load_config=diffusers_load_config, subfolder="transformer") + transformer = generic.load_transformer(repo_id, cls_name=diffusers.CogView3PlusTransformer2DModel, load_config=diffusers_load_config, subfolder="transformer", native_spec=COGVIEW3_SPEC) text_encoder = generic.load_text_encoder(repo_id, cls_name=transformers.T5EncoderModel, load_config=diffusers_load_config, subfolder="text_encoder") pipe = diffusers.CogView3PlusPipeline.from_pretrained( @@ -40,7 +45,7 @@ def load_cogview4(checkpoint_info, diffusers_load_config=None): load_args, _quant_args = model_quant.get_dit_args(diffusers_load_config) log.debug(f'Load model: type=CogView4 repo="{repo_id}" config={diffusers_load_config} offload={shared.opts.diffusers_offload_mode} dtype={devices.dtype} args={load_args}') - transformer = generic.load_transformer(repo_id, cls_name=diffusers.CogView4Transformer2DModel, load_config=diffusers_load_config, subfolder="transformer") + transformer = generic.load_transformer(repo_id, cls_name=diffusers.CogView4Transformer2DModel, load_config=diffusers_load_config, subfolder="transformer", native_spec=COGVIEW4_SPEC) text_encoder = generic.load_text_encoder(repo_id, cls_name=transformers.GlmModel, load_config=diffusers_load_config, subfolder="text_encoder", allow_quant=True) pipe = diffusers.CogView4Pipeline.from_pretrained( diff --git a/pipelines/model_glm.py b/pipelines/model_glm.py index c58358f88..97f218bce 100644 --- a/pipelines/model_glm.py +++ b/pipelines/model_glm.py @@ -5,6 +5,10 @@ import diffusers from modules import shared, devices, sd_models, model_quant, sd_hijack_te from modules.logger import log, console from pipelines import generic +from pipelines.native_transformer import TransformerSpec + + +GLM_IMAGE_SPEC = TransformerSpec(cls=diffusers.GlmImageTransformer2DModel) class GLMTokenProgressProcessor(transformers.LogitsProcessor): @@ -98,7 +102,8 @@ def load_glm_image(checkpoint_info, diffusers_load_config=None): transformer = generic.load_transformer( repo_id, cls_name=diffusers.GlmImageTransformer2DModel, - load_config=diffusers_load_config + load_config=diffusers_load_config, + native_spec=GLM_IMAGE_SPEC, ) # Load text encoder (ByT5 for glyph) - cannot use shared T5 as GLM-Image requires specific ByT5 encoder (1472 hidden size) diff --git a/pipelines/model_hunyuandit.py b/pipelines/model_hunyuandit.py index b2933a94f..71e75bf48 100644 --- a/pipelines/model_hunyuandit.py +++ b/pipelines/model_hunyuandit.py @@ -3,6 +3,10 @@ import diffusers from modules import shared, sd_models, devices, model_quant from modules.logger import log from pipelines import generic +from pipelines.native_transformer import TransformerSpec + + +HUNYUANDIT_SPEC = TransformerSpec(cls=diffusers.HunyuanDiT2DModel) def load_hunyuandit(checkpoint_info, diffusers_load_config=None): @@ -19,7 +23,7 @@ def load_hunyuandit(checkpoint_info, diffusers_load_config=None): load_args, _quant_args = model_quant.get_dit_args(diffusers_load_config) log.debug(f'Load model: type=HunyuanDiT repo="{repo_id}" config={diffusers_load_config} offload={shared.opts.diffusers_offload_mode} dtype={devices.dtype} args={load_args}') - transformer = generic.load_transformer(repo_id, cls_name=diffusers.HunyuanDiT2DModel, load_config=diffusers_load_config) + transformer = generic.load_transformer(repo_id, cls_name=diffusers.HunyuanDiT2DModel, load_config=diffusers_load_config, native_spec=HUNYUANDIT_SPEC) repo_te = 'Tencent-Hunyuan/HunyuanDiT-v1.2-Diffusers' if 'HunyuanDiT-v1' in repo_id else repo_id text_encoder_2 = generic.load_text_encoder(repo_te, cls_name=transformers.T5EncoderModel, load_config=diffusers_load_config, subfolder="text_encoder_2", allow_shared=False) # this is not normal t5 diff --git a/pipelines/model_joy.py b/pipelines/model_joy.py index 5ed363315..99b8de829 100644 --- a/pipelines/model_joy.py +++ b/pipelines/model_joy.py @@ -3,6 +3,10 @@ import transformers from modules import shared, devices, sd_models, model_quant, sd_hijack_te, sd_hijack_vae from modules.logger import log from pipelines import generic +from pipelines.native_transformer import TransformerSpec + + +JOY_SPEC = TransformerSpec(cls=diffusers.JoyImageEditTransformer3DModel) def load_joy(checkpoint_info, diffusers_load_config=None): @@ -18,6 +22,7 @@ def load_joy(checkpoint_info, diffusers_load_config=None): repo_id, cls_name=diffusers.JoyImageEditTransformer3DModel, load_config=diffusers_load_config, + native_spec=JOY_SPEC, ) text_encoder = generic.load_text_encoder( repo_id, diff --git a/pipelines/model_kandinsky.py b/pipelines/model_kandinsky.py index 4f06e185d..41a1bb85c 100644 --- a/pipelines/model_kandinsky.py +++ b/pipelines/model_kandinsky.py @@ -6,6 +6,7 @@ from pipelines import generic from pipelines.native_transformer import TransformerSpec +KANDINSKY3_UNET_SPEC = TransformerSpec(cls=diffusers.Kandinsky3UNet, subfolder='unet') KANDINSKY5_SPEC = TransformerSpec(cls=diffusers.Kandinsky5Transformer3DModel) @@ -54,7 +55,7 @@ def load_kandinsky3(checkpoint_info, diffusers_load_config=None): load_args, _quant_args = model_quant.get_dit_args(diffusers_load_config) log.debug(f'Load model: type=Kandinsky30 repo="{repo_id}" config={diffusers_load_config} offload={shared.opts.diffusers_offload_mode} dtype={devices.dtype} args={load_args}') - unet = generic.load_transformer(repo_id, cls_name=diffusers.Kandinsky3UNet, load_config=diffusers_load_config, subfolder="unet", variant="fp16") + unet = generic.load_transformer(repo_id, cls_name=diffusers.Kandinsky3UNet, load_config=diffusers_load_config, subfolder="unet", variant="fp16", native_spec=KANDINSKY3_UNET_SPEC) text_encoder = generic.load_text_encoder(repo_id, cls_name=transformers.T5EncoderModel, load_config=diffusers_load_config, subfolder="text_encoder", variant="fp16", allow_shared=False) pipe = diffusers.Kandinsky3Pipeline.from_pretrained( diff --git a/pipelines/model_pixart.py b/pipelines/model_pixart.py index 1ced8b659..0a79b3178 100644 --- a/pipelines/model_pixart.py +++ b/pipelines/model_pixart.py @@ -4,6 +4,10 @@ from huggingface_hub import file_exists from modules import shared, devices, sd_models, model_quant, sd_hijack_te from modules.logger import log from pipelines import generic +from pipelines.native_transformer import TransformerSpec + + +PIXART_SPEC = TransformerSpec(cls=diffusers.PixArtTransformer2DModel) def load_pixart(checkpoint_info, diffusers_load_config=None): @@ -24,7 +28,7 @@ def load_pixart(checkpoint_info, diffusers_load_config=None): load_args, _quant_args = model_quant.get_dit_args(diffusers_load_config, allow_quant=False) log.debug(f'Load model: type=PixArtSigma repo="{repo_id}" config={diffusers_load_config} offload={shared.opts.diffusers_offload_mode} dtype={devices.dtype} args={load_args}') - transformer = generic.load_transformer(repo_id, cls_name=diffusers.PixArtTransformer2DModel, load_config=diffusers_load_config) + transformer = generic.load_transformer(repo_id, cls_name=diffusers.PixArtTransformer2DModel, load_config=diffusers_load_config, native_spec=PIXART_SPEC) text_encoder = generic.load_text_encoder(repo_id_tenc, cls_name=transformers.T5EncoderModel, load_config=diffusers_load_config) pipe = diffusers.PixArtSigmaPipeline.from_pretrained( diff --git a/pipelines/model_prx.py b/pipelines/model_prx.py index 52088444c..8b3fc3a53 100644 --- a/pipelines/model_prx.py +++ b/pipelines/model_prx.py @@ -2,6 +2,10 @@ import diffusers from modules import shared, devices, sd_models, model_quant, sd_hijack_te from modules.logger import log from pipelines import generic +from pipelines.native_transformer import TransformerSpec + + +PRX_SPEC = TransformerSpec(cls=diffusers.PRXTransformer2DModel) def load_prx(checkpoint_info, diffusers_load_config=None): @@ -14,7 +18,7 @@ def load_prx(checkpoint_info, diffusers_load_config=None): log.debug(f'Load model: type=PRX repo="{repo_id}" config={diffusers_load_config} offload={shared.opts.diffusers_offload_mode} dtype={devices.dtype} args={load_args}') from transformers.models.t5gemma.modeling_t5gemma import T5GemmaEncoder - transformer = generic.load_transformer(repo_id, cls_name=diffusers.PRXTransformer2DModel, load_config=diffusers_load_config) + transformer = generic.load_transformer(repo_id, cls_name=diffusers.PRXTransformer2DModel, load_config=diffusers_load_config, native_spec=PRX_SPEC) text_encoder = generic.load_text_encoder(repo_id, cls_name=T5GemmaEncoder, load_config=diffusers_load_config) pipe = diffusers.PRXPipeline.from_pretrained(