Text-to-Image
Diffusers
Safetensors

fix: old SD3Transformer2DModel has no attributes

#2
by KevinZonda - opened

This patch is aims to fix

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[3], line 1
----> 1 result = pipe(
      2     prompt="a racoon holding a shiny red apple over its head",
      3     height=512, width=512,
      4     num_inference_steps=50,
      5     guidance_scale=4.0,
      6     seed=42,
      7 )

File ~/Models/Playground/venv/lib/python3.12/site-packages/torch/utils/_contextlib.py:124, in context_decorator.<locals>.decorate_context(*args, **kwargs)
    120 @functools.wraps(func)
    121 def decorate_context(*args, **kwargs):
    122     # pyrefly: ignore [bad-context-manager]
    123     with ctx_factory():
--> 124         return func(*args, **kwargs)

File ~/.cache/huggingface/modules/diffusers_modules/local/deepgen_pipeline.py:1362, in DeepGenPipeline.__call__(self, prompt, image, negative_prompt, height, width, num_inference_steps, guidance_scale, seed, num_images_per_prompt)
   1354     self._offload_to(self.transformer, gpu)
   1356 pipeline = _SD3Pipeline(
   1357     transformer=self.transformer, scheduler=self.scheduler,
   1358     vae=self.vae, text_encoder=None, tokenizer=None,
   1359     text_encoder_2=None, tokenizer_2=None,
   1360     text_encoder_3=None, tokenizer_3=None)
-> 1362 samples = pipeline(
   1363     height=height, width=width,
   1364     guidance_scale=guidance_scale,
   1365     num_inference_steps=num_inference_steps,
   1366     prompt_embeds=seq_out[:b],
   1367     pooled_prompt_embeds=pooled_out[:b],
   1368     negative_prompt_embeds=seq_out[b:],
   1369     negative_pooled_prompt_embeds=pooled_out[b:],
   1370     generator=generator,
   1371     output_type='latent',
   1372     cond_latents=cond_latents,
   1373 ).images.to(self.transformer.dtype)
   1375 if offload:
   1376     self._offload_to(self.transformer, "cpu")

File ~/Models/Playground/venv/lib/python3.12/site-packages/torch/utils/_contextlib.py:124, in context_decorator.<locals>.decorate_context(*args, **kwargs)
    120 @functools.wraps(func)
    121 def decorate_context(*args, **kwargs):
    122     # pyrefly: ignore [bad-context-manager]
    123     with ctx_factory():
--> 124         return func(*args, **kwargs)

File ~/.cache/huggingface/modules/diffusers_modules/local/deepgen_pipeline.py:864, in _SD3Pipeline.__call__(self, prompt, prompt_2, prompt_3, height, width, num_inference_steps, sigmas, guidance_scale, negative_prompt, negative_prompt_2, negative_prompt_3, num_images_per_prompt, generator, latents, cond_latents, prompt_embeds, negative_prompt_embeds, pooled_prompt_embeds, negative_pooled_prompt_embeds, output_type, return_dict, joint_attention_kwargs, callback_on_step_end, callback_on_step_end_tensor_inputs, max_sequence_length, mu, **kwargs)
    862 latent_model_input = torch.cat([latents] * 2) if self.do_classifier_free_guidance else latents
    863 timestep = t.expand(latent_model_input.shape[0])
--> 864 noise_pred = self.transformer(
    865     hidden_states=latent_model_input, cond_hidden_states=cond_latents,
    866     timestep=timestep, encoder_hidden_states=prompt_embeds,
    867     pooled_projections=pooled_prompt_embeds,
    868     joint_attention_kwargs=self.joint_attention_kwargs,
    869     return_dict=False)[0]
    871 if self.do_classifier_free_guidance:
    872     noise_pred_uncond, noise_pred_text = noise_pred.chunk(2)

File ~/Models/Playground/venv/lib/python3.12/site-packages/torch/nn/modules/module.py:1776, in Module._wrapped_call_impl(self, *args, **kwargs)
   1774     return self._compiled_call_impl(*args, **kwargs)  # type: ignore[misc]
   1775 else:
-> 1776     return self._call_impl(*args, **kwargs)

File ~/Models/Playground/venv/lib/python3.12/site-packages/torch/nn/modules/module.py:1787, in Module._call_impl(self, *args, **kwargs)
   1782 # If we don't have any hooks, we want to skip the rest of the logic in
   1783 # this function, and just call forward.
   1784 if not (self._backward_hooks or self._backward_pre_hooks or self._forward_hooks or self._forward_pre_hooks
   1785         or _global_backward_pre_hooks or _global_backward_hooks
   1786         or _global_forward_hooks or _global_forward_pre_hooks):
-> 1787     return forward_call(*args, **kwargs)
   1789 result = None
   1790 called_always_called_hooks = set()

File ~/Models/Playground/venv/lib/python3.12/site-packages/accelerate/hooks.py:175, in add_hook_to_module.<locals>.new_forward(module, *args, **kwargs)
    173         output = module._old_forward(*args, **kwargs)
    174 else:
--> 175     output = module._old_forward(*args, **kwargs)
    176 return module._hf_hook.post_forward(module, output)

TypeError: SD3Transformer2DModel.forward() got an unexpected keyword argument 'cond_hidden_states'

diffuser will automatic load orginal SD3Transformer2DModel which doesnt support cond_hidden_states, original code tries to "hack" the class of the transformers bnut it may failed to replace the forward method or properly initialise the custom class structure

Ready to merge
This branch is ready to get merged automatically.

Sign up or log in to comment