๐ SD-XL 1.0-base Model Card
This is a diffusion-based text - to - image generative model that can generate and modify images based on text prompts. It offers a powerful solution for various research and creative applications.
๐ Quick Start
๐งจ Diffusers
Make sure to upgrade diffusers
to >= 0.19.0:
pip install diffusers --upgrade
In addition, make sure to install transformers
, safetensors
, accelerate
as well as the invisible watermark:
pip install invisible_watermark transformers accelerate safetensors
To just use the base model, you can run:
from diffusers import DiffusionPipeline
import torch
pipe = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16, use_safetensors=True, variant="fp16")
pipe.to("cuda")
prompt = "An astronaut riding a green horse"
images = pipe(prompt=prompt).images[0]
To use the whole base + refiner pipeline as an ensemble of experts you can run:
from diffusers import DiffusionPipeline
import torch
base = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16, variant="fp16", use_safetensors=True
)
base.to("cuda")
refiner = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-refiner-1.0",
text_encoder_2=base.text_encoder_2,
vae=base.vae,
torch_dtype=torch.float16,
use_safetensors=True,
variant="fp16",
)
refiner.to("cuda")
n_steps = 40
high_noise_frac = 0.8
prompt = "A majestic lion jumping from a big stone at night"
image = base(
prompt=prompt,
num_inference_steps=n_steps,
denoising_end=high_noise_frac,
output_type="latent",
).images
image = refiner(
prompt=prompt,
num_inference_steps=n_steps,
denoising_start=high_noise_frac,
image=image,
).images[0]
When using torch >= 2.0
, you can improve the inference speed by 20 - 30% with torch.compile. Simple wrap the unet with torch compile before running the pipeline:
pipe.unet = torch.compile(pipe.unet, mode="reduce-overhead", fullgraph=True)
If you are limited by GPU VRAM, you can enable cpu offloading by calling pipe.enable_model_cpu_offload
instead of .to("cuda")
:
- pipe.to("cuda")
+ pipe.enable_model_cpu_offload()
For more information on how to use Stable Diffusion XL with diffusers
, please have a look at the Stable Diffusion XL Docs.
Optimum
Optimum provides a Stable Diffusion pipeline compatible with both OpenVINO and ONNX Runtime.
OpenVINO
To install Optimum with the dependencies required for OpenVINO :
pip install optimum[openvino]
To load an OpenVINO model and run inference with OpenVINO Runtime, you need to replace StableDiffusionXLPipeline
with Optimum OVStableDiffusionXLPipeline
. In case you want to load a PyTorch model and convert it to the OpenVINO format on - the - fly, you can set export=True
.
- from diffusers import StableDiffusionXLPipeline
+ from optimum.intel import OVStableDiffusionXLPipeline
model_id = "stabilityai/stable-diffusion-xl-base-1.0"
- pipeline = StableDiffusionXLPipeline.from_pretrained(model_id)
+ pipeline = OVStableDiffusionXLPipeline.from_pretrained(model_id)
prompt = "A majestic lion jumping from a big stone at night"
image = pipeline(prompt).images[0]
You can find more examples (such as static reshaping and model compilation) in optimum documentation.
ONNX
To install Optimum with the dependencies required for ONNX Runtime inference :
pip install optimum[onnxruntime]
To load an ONNX model and run inference with ONNX Runtime, you need to replace StableDiffusionXLPipeline
with Optimum ORTStableDiffusionXLPipeline
. In case you want to load a PyTorch model and convert it to the ONNX format on - the - fly, you can set export=True
.
- from diffusers import StableDiffusionXLPipeline
+ from optimum.onnxruntime import ORTStableDiffusionXLPipeline
model_id = "stabilityai/stable-diffusion-xl-base-1.0"
- pipeline = StableDiffusionXLPipeline.from_pretrained(model_id)
+ pipeline = ORTStableDiffusionXLPipeline.from_pretrained(model_id)
prompt = "A majestic lion jumping from a big stone at night"
image = pipeline(prompt).images[0]
You can find more examples in optimum documentation.
โจ Features
- Ensemble of Experts Pipeline: SDXL consists of an ensemble of experts pipeline for latent diffusion. In a first step, the base model is used to generate (noisy) latents, which are then further processed with a refinement model (available here: https://huggingface.co/stabilityai/stable-diffusion-xl-refiner-1.0/) specialized for the final denoising steps. The base model can also be used as a standalone module.
- Two - stage Pipeline: Alternatively, a two - stage pipeline can be used. First, the base model generates latents of the desired output size. Then, a specialized high - resolution model and the SDEdit technique (https://arxiv.org/abs/2108.01073, also known as "img2img") are applied to the latents using the same prompt.
๐ฆ Installation
The installation steps are included in the "Quick Start" section, mainly involving the installation of diffusers
, transformers
, safetensors
, accelerate
, and the invisible watermark, as well as the installation of Optimum with different dependencies for OpenVINO and ONNX Runtime.
๐ป Usage Examples
Basic Usage
The code examples in the "Quick Start" section for using the base model and the base + refiner pipeline are basic usage examples.
Advanced Usage
When using torch >= 2.0
, wrapping the unet
with torch.compile
can improve the inference speed:
pipe.unet = torch.compile(pipe.unet, mode="reduce-overhead", fullgraph=True)
If limited by GPU VRAM, enabling cpu offloading can be a solution:
- pipe.to("cuda")
+ pipe.enable_model_cpu_offload()
๐ Documentation
Model Description
Model Sources
For research purposes, the generative - models
Github repository (https://github.com/Stability - AI/generative - models) is recommended, which implements popular diffusion frameworks and will add new functionalities over time. [Clipdrop](https://clipdrop.co/stable - diffusion) provides free SDXL inference.
Evaluation
The chart evaluates user preference for SDXL (with and without refinement) over SDXL 0.9 and Stable Diffusion 1.5 and 2.1. The SDXL base model performs significantly better than the previous variants, and the model combined with the refinement module achieves the best overall performance.
Uses
Direct Use
The model is intended for research purposes only. Possible research areas and tasks include:
- Generation of artworks and use in design and other artistic processes.
- Applications in educational or creative tools.
- Research on generative models.
- Safe deployment of models which have the potential to generate harmful content.
- Probing and understanding the limitations and biases of generative models.
Out - of - Scope Use
The model was not trained to be factual or true representations of people or events, so using it to generate such content is out - of - scope for its abilities.
Limitations and Bias
Limitations
- The model does not achieve perfect photorealism.
- The model cannot render legible text.
- The model struggles with more difficult tasks involving compositionality, such as rendering an image corresponding to โA red cube on top of a blue sphereโ.
- Faces and people in general may not be generated properly.
- The autoencoding part of the model is lossy.
Bias
While the capabilities of image generation models are impressive, they can also reinforce or exacerbate social biases.
๐ License
The model is licensed under the CreativeML Open RAIL++ - M License.