Skip to content

MultiControlNetModel is not supported for SD3ControlNetInpaintingPipeline #11208

Open
@DanilaAniva

Description

@DanilaAniva

Describe the bug

When using StableDiffusion3ControlNetInpaintingPipeline with SD3MultiControlNetModel, I receive an error:

NotImplementedError: MultiControlNetModel is not supported for SD3ControlNetInpaintingPipeline.

Reproduction

Example reproduction code:

import os
import torch
from diffusers.utils import load_image
from diffusers.pipelines import StableDiffusion3ControlNetInpaintingPipeline
from diffusers.models import SD3ControlNetModel, SD3MultiControlNetModel
from diffusers import BitsAndBytesConfig, SD3Transformer2DModel
from transformers import T5EncoderModel

# Load images
image = load_image(
    "https://huggingface.co/alimama-creative/SD3-Controlnet-Inpainting/resolve/main/images/dog.png"
)
mask = load_image(
    "https://huggingface.co/alimama-creative/SD3-Controlnet-Inpainting/resolve/main/images/dog_mask.png"
)

# Initialize ControlNet models
controlnetA = SD3ControlNetModel.from_pretrained("InstantX/SD3-Controlnet-Pose")
controlnetB = SD3ControlNetModel.from_pretrained("alimama-creative/SD3-Controlnet-Inpainting", use_safetensors=True, extra_conditioning_channels=1)
controlnet = SD3MultiControlNetModel([controlnetA, controlnetB])

# Load transformer and text encoder
nf4_config = BitsAndBytesConfig(load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=torch.bfloat16)
model_id = "stabilityai/stable-diffusion-3.5-large-turbo"
model_nf4 = SD3Transformer2DModel.from_pretrained(model_id, subfolder="transformer", quantization_config=nf4_config, torch_dtype=torch.bfloat16)
t5_nf4 = T5EncoderModel.from_pretrained("diffusers/t5-nf4", torch_dtype=torch.bfloat16)

# Initialize pipeline
pipe = StableDiffusion3ControlNetInpaintingPipeline.from_pretrained(
    "stabilityai/stable-diffusion-3.5-large-turbo",
    token=os.getenv("HF_TOKEN"),
    controlnet=controlnet,
    transformer=model_nf4,
    text_encoder_3=t5_nf4,
    torch_dtype=torch.bfloat16
)

pipe.enable_model_cpu_offload()

# This fails with NotImplementedError
result_image = pipe(
    prompt="a cute dog with a hat",
    negative_prompt="low quality, bad anatomy",
    control_image=[image, image],
    num_inference_steps=30,
    guidance_scale=7.5,
    controlnet_conditioning_scale=[1.0, 1.0],
    output_type="pil",
).images[0]

Logs

Error


NotImplementedError: MultiControlNetModel is not supported for SD3ControlNetInpaintingPipeline.


Error occurs in `diffusers/pipelines/controlnet_sd3/pipeline_stable_diffusion_3_controlnet_inpainting.py` at line 1026. *Full error code*:


---------------------------------------------------------------------------
NotImplementedError                       Traceback (most recent call last)
Cell In[1], line 41
     38 pipe.enable_model_cpu_offload()
     40 # This fails with NotImplementedError
---> 41 result_image = pipe(
     42     prompt="a cute dog with a hat",
     43     negative_prompt="low quality, bad anatomy",
     44     control_image=[image, image],
     45     num_inference_steps=30,
     46     guidance_scale=7.5,
     47     controlnet_conditioning_scale=[1.0, 1.0],
     48     output_type="pil",
     49 ).images[0]

File ~/miniconda3/envs/bnb310/lib/python3.10/site-packages/torch/utils/_contextlib.py:115, in context_decorator.<locals>.decorate_context(*args, **kwargs)
    112 @functools.wraps(func)
    113 def decorate_context(*args, **kwargs):
    114     with ctx_factory():
--> 115         return func(*args, **kwargs)

File ~/miniconda3/envs/bnb310/lib/python3.10/site-packages/diffusers/pipelines/controlnet_sd3/pipeline_stable_diffusion_3_controlnet_inpainting.py:1026, in StableDiffusion3ControlNetInpaintingPipeline.__call__(self, prompt, prompt_2, prompt_3, height, width, num_inference_steps, sigmas, guidance_scale, control_guidance_start, control_guidance_end, control_image, control_mask, controlnet_conditioning_scale, controlnet_pooled_projections, negative_prompt, negative_prompt_2, negative_prompt_3, num_images_per_prompt, generator, latents, prompt_embeds, negative_prompt_embeds, pooled_prompt_embeds, negative_pooled_prompt_embeds, output_type, return_dict, joint_attention_kwargs, clip_skip, callback_on_step_end, callback_on_step_end_tensor_inputs, max_sequence_length)
   1023     width = latent_width * self.vae_scale_factor
   1025 elif isinstance(self.controlnet, SD3MultiControlNetModel):
-> 1026     raise NotImplementedError("MultiControlNetModel is not supported for SD3ControlNetInpaintingPipeline.")
   1027 else:
   1028     assert False

NotImplementedError: MultiControlNetModel is not supported for SD3ControlNetInpaintingPipeline.


Expected Behavior
I expect `StableDiffusion3ControlNetInpaintingPipeline` to support `SD3MultiControlNetModel`

System Info

Versions

Python version: 3.10.16 (main, Dec 11 2024, 16:24:50) [GCC 11.2.0]
PyTorch version: 2.2.0+cu118
CUDA version: 11.8
Diffusers version: 0.32.2
Transformers version: 4.50.3
Accelerate version: 1.7.0.dev0

Who can help?

@yiyixuxu @sayakpaul

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions