Skip to content

Stable Diffusion XL

Stable Diffusion XL (SDXL) is an advanced text-to-image latent diffusion model known for generating high-resolution images with greater detail and realism compared to previous Stable Diffusion versions. It utilizes two text encoders for improved prompt understanding. RBLN NPUs can accelerate Stable Diffusion XL pipelines using Optimum RBLN.

Supported Pipelines

Optimum RBLN supports several Stable Diffusion XL pipelines:

  • Text-to-Image: Generate high-resolution images from text prompts.
  • Image-to-Image: Modify existing images based on text prompts.
  • Inpainting: Fill masked regions of an image guided by text prompts.

Key Classes

Important: Batch Size Configuration for Guidance Scale

Batch Size and Guidance Scale

When using Stable Diffusion XL with a guidance scale > 1.0 (the default is 7.5), the UNet's effective batch size is doubled during runtime because of the classifier-free guidance technique.

Since RBLN NPU uses static graph compilation, the UNet's batch size at compilation time must match its runtime batch size, or you'll encounter errors during inference.

Default Behavior

By default, if you don't explicitly specify the UNet's batch size, Optimum RBLN will:

  • Assume you'll use the default guidance scale (7.5).
  • Automatically set the UNet's batch size to 2× your pipeline's batch size.

If you plan to use the default guidance scale (which is > 1.0), this automatic configuration will work correctly. However, if you plan to use a different guidance scale or want more control, you should explicitly configure the UNet's batch size.

Example: Explicitly Setting the UNet Batch Size

from optimum.rbln import RBLNStableDiffusionXLPipelineConfig, RBLNStableDiffusionXLPipeline

# For inference with guidance_scale > 1.0 (default is 7.5)
# Set UNet's batch size to 2 * your desired inference batch size
config = RBLNStableDiffusionXLPipelineConfig(
    batch_size=2,  # Inference batch size
    img_height=1024,
    img_width=1024,
    # Configure UNet with doubled batch size
    unet=dict(batch_size=4)  # Double the batch size for UNet
)

pipe = RBLNStableDiffusionXLPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0",
    export=True,
    rbln_config=config
)

# Normal inference with default guidance_scale=7.5
prompts = ["A cinematic shot of a baby raccoon wearing an intricate italian priest robe",
           "A photo of a Corgi dog surfing a wave"]
images = pipe(prompts).images  # Batch size of 2

# Save the generated images
for i, image in enumerate(images):
    image.save(f"sdxl_generated_image_{i}.png")
    print(f"Image {i} saved as sdxl_generated_image_{i}.png")

Example: Disabling Guidance (guidance_scale = 0.0)

For models like SDXL-Turbo or when disabling classifier-free guidance (setting guidance_scale=0.0), you should explicitly set the UNet batch size to match your inference batch size:

from optimum.rbln import RBLNStableDiffusionXLPipelineConfig, RBLNStableDiffusionXLPipeline

config = RBLNStableDiffusionXLPipelineConfig(
    img_height=1024,
    img_width=1024,
    # UNet batch size matches the inference batch size
    unet=dict(batch_size=1)
)

pipe = RBLNStableDiffusionXLPipeline.from_pretrained(
    "stabilityai/sdxl-turbo",
    export=True,
    rbln_config=config
)

# Use guidance_scale=0.0 during inference for no guidance
# This is often used with models like sdxl-turbo and may require fewer inference steps
prompt = "A cinematic shot of a baby raccoon wearing an intricate italian priest robe"
image = pipe(prompt, guidance_scale=0.0, num_inference_steps=1).images[0] # Use guidance_scale=0.0

# Save the generated image
image.save("sdxl_no_guidance_image.png")

Usage Example

from optimum.rbln import RBLNStableDiffusionXLPipeline, RBLNStableDiffusionXLPipelineConfig

# Create a configuration object with specific settings (e.g., 1024x1024)
config = RBLNStableDiffusionXLPipelineConfig(
    img_height=1024,
    img_width=1024
)

# Load and compile the SDXL model for RBLN NPU
pipe = RBLNStableDiffusionXLPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0",
    export=True,
    rbln_config=config
)

# Generate an image
prompt = "A cinematic shot of a baby raccoon wearing an intricate italian priest robe"
image = pipe(prompt).images[0]

# Save the generated image
image.save("sdxl_raccoon_priest.png")
print("Image saved as sdxl_raccoon_priest.png")

API Reference

Classes

RBLNStableDiffusionXLPipeline

Bases: RBLNDiffusionMixin, StableDiffusionXLPipeline

Functions

from_pretrained(model_id, *, export=False, model_save_dir=None, rbln_config={}, lora_ids=None, lora_weights_names=None, lora_scales=None, **kwargs) classmethod

Load a pretrained diffusion pipeline from a model checkpoint, with optional compilation for RBLN NPUs.

This method has two distinct operating modes:

  • When export=True: Takes a PyTorch-based diffusion model, compiles it for RBLN NPUs, and loads the compiled model
  • When export=False: Loads an already compiled RBLN model from model_id without recompilation

It supports various diffusion pipelines including Stable Diffusion, Kandinsky, ControlNet, and other diffusers-based models.

Parameters:

Name Type Description Default
model_id str

The model ID or path to the pretrained model to load. Can be either:

  • A model ID from the Hugging Face Hub
  • A local path to a saved model directory
required
export bool

If True, takes a PyTorch model from model_id and compiles it for RBLN NPU execution. If False, loads an already compiled RBLN model from model_id without recompilation.

False
model_save_dir Optional[PathLike]

Directory to save the compiled model artifacts. Only used when export=True. If not provided and export=True, a temporary directory is used.

None
rbln_config Dict[str, Any]

Configuration options for RBLN compilation. Can include settings for specific submodules such as text_encoder, unet, and vae. Configuration can be tailored to the specific pipeline being compiled.

{}
lora_ids Optional[Union[str, List[str]]]

LoRA adapter ID(s) to load and apply before compilation. LoRA weights are fused into the model weights during compilation. Only used when export=True.

None
lora_weights_names Optional[Union[str, List[str]]]

Names of specific LoRA weight files to load, corresponding to lora_ids. Only used when export=True.

None
lora_scales Optional[Union[float, List[float]]]

Scaling factor(s) to apply to the LoRA adapter(s). Only used when export=True.

None
**kwargs Dict[str, Any]

Additional arguments to pass to the underlying diffusion pipeline constructor or the RBLN compilation process. These may include parameters specific to individual submodules or the particular diffusion pipeline being used.

{}

Returns:

Type Description
Self

A compiled diffusion pipeline that can be used for inference on RBLN NPU. The returned object is an instance of the class that called this method, inheriting from RBLNDiffusionMixin.

RBLNStableDiffusionXLInpaintPipeline

Bases: RBLNDiffusionMixin, StableDiffusionXLInpaintPipeline

Functions

from_pretrained(model_id, *, export=False, model_save_dir=None, rbln_config={}, lora_ids=None, lora_weights_names=None, lora_scales=None, **kwargs) classmethod

Load a pretrained diffusion pipeline from a model checkpoint, with optional compilation for RBLN NPUs.

This method has two distinct operating modes:

  • When export=True: Takes a PyTorch-based diffusion model, compiles it for RBLN NPUs, and loads the compiled model
  • When export=False: Loads an already compiled RBLN model from model_id without recompilation

It supports various diffusion pipelines including Stable Diffusion, Kandinsky, ControlNet, and other diffusers-based models.

Parameters:

Name Type Description Default
model_id str

The model ID or path to the pretrained model to load. Can be either:

  • A model ID from the Hugging Face Hub
  • A local path to a saved model directory
required
export bool

If True, takes a PyTorch model from model_id and compiles it for RBLN NPU execution. If False, loads an already compiled RBLN model from model_id without recompilation.

False
model_save_dir Optional[PathLike]

Directory to save the compiled model artifacts. Only used when export=True. If not provided and export=True, a temporary directory is used.

None
rbln_config Dict[str, Any]

Configuration options for RBLN compilation. Can include settings for specific submodules such as text_encoder, unet, and vae. Configuration can be tailored to the specific pipeline being compiled.

{}
lora_ids Optional[Union[str, List[str]]]

LoRA adapter ID(s) to load and apply before compilation. LoRA weights are fused into the model weights during compilation. Only used when export=True.

None
lora_weights_names Optional[Union[str, List[str]]]

Names of specific LoRA weight files to load, corresponding to lora_ids. Only used when export=True.

None
lora_scales Optional[Union[float, List[float]]]

Scaling factor(s) to apply to the LoRA adapter(s). Only used when export=True.

None
**kwargs Dict[str, Any]

Additional arguments to pass to the underlying diffusion pipeline constructor or the RBLN compilation process. These may include parameters specific to individual submodules or the particular diffusion pipeline being used.

{}

Returns:

Type Description
Self

A compiled diffusion pipeline that can be used for inference on RBLN NPU. The returned object is an instance of the class that called this method, inheriting from RBLNDiffusionMixin.

RBLNStableDiffusionXLImg2ImgPipeline

Bases: RBLNDiffusionMixin, StableDiffusionXLImg2ImgPipeline

Functions

from_pretrained(model_id, *, export=False, model_save_dir=None, rbln_config={}, lora_ids=None, lora_weights_names=None, lora_scales=None, **kwargs) classmethod

Load a pretrained diffusion pipeline from a model checkpoint, with optional compilation for RBLN NPUs.

This method has two distinct operating modes:

  • When export=True: Takes a PyTorch-based diffusion model, compiles it for RBLN NPUs, and loads the compiled model
  • When export=False: Loads an already compiled RBLN model from model_id without recompilation

It supports various diffusion pipelines including Stable Diffusion, Kandinsky, ControlNet, and other diffusers-based models.

Parameters:

Name Type Description Default
model_id str

The model ID or path to the pretrained model to load. Can be either:

  • A model ID from the Hugging Face Hub
  • A local path to a saved model directory
required
export bool

If True, takes a PyTorch model from model_id and compiles it for RBLN NPU execution. If False, loads an already compiled RBLN model from model_id without recompilation.

False
model_save_dir Optional[PathLike]

Directory to save the compiled model artifacts. Only used when export=True. If not provided and export=True, a temporary directory is used.

None
rbln_config Dict[str, Any]

Configuration options for RBLN compilation. Can include settings for specific submodules such as text_encoder, unet, and vae. Configuration can be tailored to the specific pipeline being compiled.

{}
lora_ids Optional[Union[str, List[str]]]

LoRA adapter ID(s) to load and apply before compilation. LoRA weights are fused into the model weights during compilation. Only used when export=True.

None
lora_weights_names Optional[Union[str, List[str]]]

Names of specific LoRA weight files to load, corresponding to lora_ids. Only used when export=True.

None
lora_scales Optional[Union[float, List[float]]]

Scaling factor(s) to apply to the LoRA adapter(s). Only used when export=True.

None
**kwargs Dict[str, Any]

Additional arguments to pass to the underlying diffusion pipeline constructor or the RBLN compilation process. These may include parameters specific to individual submodules or the particular diffusion pipeline being used.

{}

Returns:

Type Description
Self

A compiled diffusion pipeline that can be used for inference on RBLN NPU. The returned object is an instance of the class that called this method, inheriting from RBLNDiffusionMixin.

Classes

RBLNStableDiffusionXLPipelineBaseConfig

Bases: RBLNModelConfig

Functions

__init__(text_encoder=None, text_encoder_2=None, unet=None, vae=None, *, batch_size=None, img_height=None, img_width=None, sample_size=None, image_size=None, guidance_scale=None, **kwargs)

Parameters:

Name Type Description Default
text_encoder Optional[RBLNCLIPTextModelConfig]

Configuration for the primary text encoder component. Initialized as RBLNCLIPTextModelConfig if not provided.

None
text_encoder_2 Optional[RBLNCLIPTextModelWithProjectionConfig]

Configuration for the secondary text encoder component. Initialized as RBLNCLIPTextModelWithProjectionConfig if not provided.

None
unet Optional[RBLNUNet2DConditionModelConfig]

Configuration for the UNet model component. Initialized as RBLNUNet2DConditionModelConfig if not provided.

None
vae Optional[RBLNAutoencoderKLConfig]

Configuration for the VAE model component. Initialized as RBLNAutoencoderKLConfig if not provided.

None
batch_size Optional[int]

Batch size for inference, applied to all submodules.

None
img_height Optional[int]

Height of the generated images.

None
img_width Optional[int]

Width of the generated images.

None
sample_size Optional[Tuple[int, int]]

Spatial dimensions for the UNet model.

None
image_size Optional[Tuple[int, int]]

Alternative way to specify image dimensions. Cannot be used together with img_height/img_width.

None
guidance_scale Optional[float]

Scale for classifier-free guidance. Deprecated parameter.

None
**kwargs Dict[str, Any]

Additional arguments passed to the parent RBLNModelConfig.

{}

Raises:

Type Description
ValueError

If both image_size and img_height/img_width are provided.

Note

When guidance_scale > 1.0, the UNet batch size is automatically doubled to accommodate classifier-free guidance.

RBLNStableDiffusionXLPipelineConfig

Bases: RBLNStableDiffusionXLPipelineBaseConfig

Functions

__init__(text_encoder=None, text_encoder_2=None, unet=None, vae=None, *, batch_size=None, img_height=None, img_width=None, sample_size=None, image_size=None, guidance_scale=None, **kwargs)

Parameters:

Name Type Description Default
text_encoder Optional[RBLNCLIPTextModelConfig]

Configuration for the primary text encoder component. Initialized as RBLNCLIPTextModelConfig if not provided.

None
text_encoder_2 Optional[RBLNCLIPTextModelWithProjectionConfig]

Configuration for the secondary text encoder component. Initialized as RBLNCLIPTextModelWithProjectionConfig if not provided.

None
unet Optional[RBLNUNet2DConditionModelConfig]

Configuration for the UNet model component. Initialized as RBLNUNet2DConditionModelConfig if not provided.

None
vae Optional[RBLNAutoencoderKLConfig]

Configuration for the VAE model component. Initialized as RBLNAutoencoderKLConfig if not provided.

None
batch_size Optional[int]

Batch size for inference, applied to all submodules.

None
img_height Optional[int]

Height of the generated images.

None
img_width Optional[int]

Width of the generated images.

None
sample_size Optional[Tuple[int, int]]

Spatial dimensions for the UNet model.

None
image_size Optional[Tuple[int, int]]

Alternative way to specify image dimensions. Cannot be used together with img_height/img_width.

None
guidance_scale Optional[float]

Scale for classifier-free guidance. Deprecated parameter.

None
**kwargs Dict[str, Any]

Additional arguments passed to the parent RBLNModelConfig.

{}

Raises:

Type Description
ValueError

If both image_size and img_height/img_width are provided.

Note

When guidance_scale > 1.0, the UNet batch size is automatically doubled to accommodate classifier-free guidance.

RBLNStableDiffusionXLImg2ImgPipelineConfig

Bases: RBLNStableDiffusionXLPipelineBaseConfig

Functions

__init__(text_encoder=None, text_encoder_2=None, unet=None, vae=None, *, batch_size=None, img_height=None, img_width=None, sample_size=None, image_size=None, guidance_scale=None, **kwargs)

Parameters:

Name Type Description Default
text_encoder Optional[RBLNCLIPTextModelConfig]

Configuration for the primary text encoder component. Initialized as RBLNCLIPTextModelConfig if not provided.

None
text_encoder_2 Optional[RBLNCLIPTextModelWithProjectionConfig]

Configuration for the secondary text encoder component. Initialized as RBLNCLIPTextModelWithProjectionConfig if not provided.

None
unet Optional[RBLNUNet2DConditionModelConfig]

Configuration for the UNet model component. Initialized as RBLNUNet2DConditionModelConfig if not provided.

None
vae Optional[RBLNAutoencoderKLConfig]

Configuration for the VAE model component. Initialized as RBLNAutoencoderKLConfig if not provided.

None
batch_size Optional[int]

Batch size for inference, applied to all submodules.

None
img_height Optional[int]

Height of the generated images.

None
img_width Optional[int]

Width of the generated images.

None
sample_size Optional[Tuple[int, int]]

Spatial dimensions for the UNet model.

None
image_size Optional[Tuple[int, int]]

Alternative way to specify image dimensions. Cannot be used together with img_height/img_width.

None
guidance_scale Optional[float]

Scale for classifier-free guidance. Deprecated parameter.

None
**kwargs Dict[str, Any]

Additional arguments passed to the parent RBLNModelConfig.

{}

Raises:

Type Description
ValueError

If both image_size and img_height/img_width are provided.

Note

When guidance_scale > 1.0, the UNet batch size is automatically doubled to accommodate classifier-free guidance.

RBLNStableDiffusionXLInpaintPipelineConfig

Bases: RBLNStableDiffusionXLPipelineBaseConfig

Functions

__init__(text_encoder=None, text_encoder_2=None, unet=None, vae=None, *, batch_size=None, img_height=None, img_width=None, sample_size=None, image_size=None, guidance_scale=None, **kwargs)

Parameters:

Name Type Description Default
text_encoder Optional[RBLNCLIPTextModelConfig]

Configuration for the primary text encoder component. Initialized as RBLNCLIPTextModelConfig if not provided.

None
text_encoder_2 Optional[RBLNCLIPTextModelWithProjectionConfig]

Configuration for the secondary text encoder component. Initialized as RBLNCLIPTextModelWithProjectionConfig if not provided.

None
unet Optional[RBLNUNet2DConditionModelConfig]

Configuration for the UNet model component. Initialized as RBLNUNet2DConditionModelConfig if not provided.

None
vae Optional[RBLNAutoencoderKLConfig]

Configuration for the VAE model component. Initialized as RBLNAutoencoderKLConfig if not provided.

None
batch_size Optional[int]

Batch size for inference, applied to all submodules.

None
img_height Optional[int]

Height of the generated images.

None
img_width Optional[int]

Width of the generated images.

None
sample_size Optional[Tuple[int, int]]

Spatial dimensions for the UNet model.

None
image_size Optional[Tuple[int, int]]

Alternative way to specify image dimensions. Cannot be used together with img_height/img_width.

None
guidance_scale Optional[float]

Scale for classifier-free guidance. Deprecated parameter.

None
**kwargs Dict[str, Any]

Additional arguments passed to the parent RBLNModelConfig.

{}

Raises:

Type Description
ValueError

If both image_size and img_height/img_width are provided.

Note

When guidance_scale > 1.0, the UNet batch size is automatically doubled to accommodate classifier-free guidance.