From 3a9e6c3f701baa2ab2745dd7641cec003024e7ed Mon Sep 17 00:00:00 2001 From: Angelos Katharopoulos Date: Fri, 8 Mar 2024 10:24:19 -0800 Subject: [PATCH] Stable diffusion XL (#516) --- stable_diffusion/README.md | 91 +++++------ stable_diffusion/image2image.py | 25 ++- stable_diffusion/requirements.txt | 1 - stable_diffusion/stable_diffusion/__init__.py | 154 ++++++++++++++++-- stable_diffusion/stable_diffusion/clip.py | 58 ++++++- stable_diffusion/stable_diffusion/config.py | 19 ++- stable_diffusion/stable_diffusion/model_io.py | 83 +++++++--- stable_diffusion/stable_diffusion/sampler.py | 20 +++ stable_diffusion/stable_diffusion/unet.py | 53 +++++- stable_diffusion/still-life.png | Bin 0 -> 1615785 bytes stable_diffusion/txt2image.py | 50 +++++- 11 files changed, 449 insertions(+), 105 deletions(-) create mode 100644 stable_diffusion/still-life.png diff --git a/stable_diffusion/README.md b/stable_diffusion/README.md index cf2b7113..6ff08d72 100644 --- a/stable_diffusion/README.md +++ b/stable_diffusion/README.md @@ -2,22 +2,25 @@ Stable Diffusion ================ Stable Diffusion in MLX. The implementation was ported from Hugging Face's -[diffusers](https://huggingface.co/docs/diffusers/index) and we are fetching -and using the weights available on the Hugging Face Hub by Stability AI at -[stabilitiai/stable-diffusion-2-1](https://huggingface.co/stabilityai/stable-diffusion-2-1). +[diffusers](https://huggingface.co/docs/diffusers/index) and model weights are +downloaded directly from the Hugging Face hub. The implementation currently +supports the following models: + +- [stabilityai/sdxl-turbo](https://huggingface.co/stabilityai/sdxl-turbo) +- [stabilitiai/stable-diffusion-2-1](https://huggingface.co/stabilityai/stable-diffusion-2-1) ![out](generated-mlx.png) -*Image generated using Stable Diffusion in MLX and the prompt 'A big red sign saying MLX in capital letters.'* +*Image generated using Stable Diffusion in MLX and the prompt 'A big red sign +saying MLX in capital letters.'* Installation ------------ The dependencies are minimal, namely: -- `safetensors` and `huggingface-hub` to load the checkpoints. +- `huggingface-hub` to download the checkpoints. - `regex` for the tokenization -- `numpy` because safetensors needs to return some form of array -- `tqdm` and `PIL` for the `txt2image.py` script +- `tqdm`, `PIL`, and `numpy` for the `txt2image.py` script You can install all of the above with the `requirements.txt` as follows: @@ -43,7 +46,9 @@ sd = StableDiffusion() # # Because MLX is lazily evaluated iterating over this generator doesn't # actually perform the computation until mx.eval() is called. -latent_generator = sd.generate_latents("A photo of an astronaut riding a horse on Mars.") +latent_generator = sd.generate_latents( + "A photo of an astronaut riding a horse on Mars." +) # Here we are evaluating each diffusion step but we could also evaluate # once at the end. @@ -55,10 +60,16 @@ for x_t in latent_generator: im = sd.decode(x_t) ``` -The above is almost line for line the implementation of the `txt2image.py` -script in the root of the repository. You can use the script as follows: +The above is essentially the implementation of the `txt2image.py` script in the +root of the repository. You can use the script as follows: - python txt2image.py "A photo of an astronaut riding a horse on Mars." --n_images 4 --n_rows 2 + +```shell +python txt2image.py "A photo of an astronaut riding a horse on Mars." --n_images 4 --n_rows 2 +``` + +You can select the model using `--model` argument. Currently supported models +are `sdxl` (default) and `sd`. Image 2 Image ------------- @@ -71,48 +82,36 @@ to the forward diffusion process and the `strength` parameter. A `strength` of random noise. ![image2image](im2im.png) + *Generations with varying strength using the original image and the prompt 'A lit fireplace'.* The command to generate the above images is: - python image2image.py --strength 0.5 original.png 'A lit fireplace' +```shell +python image2image.py --strength 0.5 original.png 'A lit fireplace' +``` -*Note: `image2image.py` will automatically downsample your input image to guarantee that its dimensions are divisible by 64. If you want full control of this process, resize your image prior to using the script.* +> [!Note] +> `image2image.py` will automatically downsample your input image to guarantee +> that its dimensions are divisible by 64. If you want full control of this +> process, resize your image prior to using the script. -Performance ------------ +Memory constrained devices +-------------------------- -The following table compares the performance of the UNet in stable diffusion. -We report throughput in images per second **processed by the UNet** for the -provided `txt2image.py` script and the `diffusers` library using the MPS -PyTorch backend. +The `txt2image.py` script by default loads the model in float16 which reduces +significantly the required memory for image generation. However, since the +Stable Diffusion XL UNet alone has 2.6B parameters in order to use it in +devices with 8GB of RAM, quantization is practically necessary. -At the time of writing this comparison convolutions are still some of the least -optimized operations in MLX. Despite that, MLX still achieves **~40% higher -throughput** than PyTorch with a batch size of 16 and ~15% higher when -comparing the optimal batch sizes. +The `txt2image.py` script supports quantization using the `-q` or `--quantize` +command line arguments. When quantization is used, the script quantizes the +text encoder models to 4 bits and the unet to 8 bits. This allows generating +images on an 8GB Mac Mini with no-swapping. -Notably, PyTorch achieves almost ~50% higher throughput for the batch size of 1 -which is unfortunate as that means that a single image can be computed faster. -However, when starting with the models not loaded in memory and PyTorch's MPS -graph kernels not cached, the compilation time more than accounts for this -speed difference. +``` +python txt2image.py --n_images 4 -q -v --output still-life.png "A painting of a vase on a wooden table, dark background, still life." +``` -| Batch size | PyTorch | MLX | -| ---------- | ----------- | ----------- | -| 1 | 6.25 im/s | 4.17 im/s | -| 2 | 7.14 im/s | 5.88 im/s | -| 4 |**7.69 im/s**| 7.14 im/s | -| 6 | 7.22 im/s | 8.00 im/s | -| 8 | 6.89 im/s | 8.42 im/s | -| 12 | 6.62 im/s | 8.51 im/s | -| 16 | 6.32 im/s |**8.79 im/s**| - -The above experiments were made on an M2 Ultra with PyTorch version 2.1, -diffusers version 0.21.4 and transformers version 4.33.3. For the generation we -used classifier free guidance which means that the above batch sizes result -double the images processed by the UNet. - -Note that the above table means that it takes about 90 seconds to fully -generate 16 images with MLX and 50 diffusion steps with classifier free -guidance and about 120 for PyTorch. +![painting](still-life.png) +*Image generated using Stable Diffusion XL turbo in MLX with the above command on an 8GB M1 Mac mini* diff --git a/stable_diffusion/image2image.py b/stable_diffusion/image2image.py index 46b25c29..8c433990 100644 --- a/stable_diffusion/image2image.py +++ b/stable_diffusion/image2image.py @@ -22,10 +22,19 @@ if __name__ == "__main__": parser.add_argument("--negative_prompt", default="") parser.add_argument("--n_rows", type=int, default=1) parser.add_argument("--decoding_batch_size", type=int, default=1) + parser.add_argument("--quantize", "-q", action="store_true") + parser.add_argument("--no-float16", dest="float16", action="store_false") + parser.add_argument("--preload-models", action="store_true") parser.add_argument("--output", default="out.png") + parser.add_argument("--verbose", "-v", action="store_true") args = parser.parse_args() - sd = StableDiffusion() + sd = StableDiffusion("stabilityai/stable-diffusion-2-1-base", float16=args.float16) + if args.quantize: + QuantizedLinear.quantize_module(sd.text_encoder) + QuantizedLinear.quantize_module(sd.unet, group_size=32, bits=8) + if args.preload_models: + sd.ensure_models_are_loaded() # Read the image img = Image.open(args.image) @@ -52,11 +61,20 @@ if __name__ == "__main__": for x_t in tqdm(latents, total=int(args.steps * args.strength)): mx.eval(x_t) + # The following is not necessary but it may help in memory + # constrained systems by reusing the memory kept by the unet and the text + # encoders. + del sd.text_encoder + del sd.unet + del sd.sampler + peak_mem_unet = mx.metal.get_peak_memory() / 1024**3 + # Decode them into images decoded = [] for i in tqdm(range(0, args.n_images, args.decoding_batch_size)): decoded.append(sd.decode(x_t[i : i + args.decoding_batch_size])) mx.eval(decoded[-1]) + peak_mem_overall = mx.metal.get_peak_memory() / 1024**3 # Arrange them on a grid x = mx.concatenate(decoded, axis=0) @@ -69,3 +87,8 @@ if __name__ == "__main__": # Save them to disc im = Image.fromarray(np.array(x)) im.save(args.output) + + # Report the peak memory used during generation + if args.verbose: + print(f"Peak memory used for the unet: {peak_mem_unet:.3f}GB") + print(f"Peak memory used overall: {peak_mem_overall:.3f}GB") diff --git a/stable_diffusion/requirements.txt b/stable_diffusion/requirements.txt index aa76c437..18291154 100644 --- a/stable_diffusion/requirements.txt +++ b/stable_diffusion/requirements.txt @@ -1,5 +1,4 @@ mlx>=0.1 -safetensors huggingface-hub regex numpy diff --git a/stable_diffusion/stable_diffusion/__init__.py b/stable_diffusion/stable_diffusion/__init__.py index 7f2d783c..353189e2 100644 --- a/stable_diffusion/stable_diffusion/__init__.py +++ b/stable_diffusion/stable_diffusion/__init__.py @@ -1,7 +1,7 @@ -# Copyright © 2023 Apple Inc. +# Copyright © 2023-2024 Apple Inc. import time -from typing import Tuple +from typing import Optional, Tuple import mlx.core as mx @@ -13,7 +13,7 @@ from .model_io import ( load_tokenizer, load_unet, ) -from .sampler import SimpleEulerSampler +from .sampler import SimpleEulerAncestralSampler, SimpleEulerSampler class StableDiffusion: @@ -22,10 +22,27 @@ class StableDiffusion: self.diffusion_config = load_diffusion_config(model) self.unet = load_unet(model, float16) self.text_encoder = load_text_encoder(model, float16) - self.autoencoder = load_autoencoder(model, float16) + self.autoencoder = load_autoencoder(model, False) self.sampler = SimpleEulerSampler(self.diffusion_config) self.tokenizer = load_tokenizer(model) + def ensure_models_are_loaded(self): + mx.eval(self.unet.parameters()) + mx.eval(self.text_encoder.parameters()) + mx.eval(self.autoencoder.parameters()) + + def _tokenize(self, tokenizer, text: str, negative_text: Optional[str] = None): + # Tokenize the text + tokens = [tokenizer.tokenize(text)] + if negative_text is not None: + tokens += [tokenizer.tokenize(negative_text)] + lengths = [len(t) for t in tokens] + N = max(lengths) + tokens = [t + [0] * (N - len(t)) for t in tokens] + tokens = mx.array(tokens) + + return tokens + def _get_text_conditioning( self, text: str, @@ -34,16 +51,12 @@ class StableDiffusion: negative_text: str = "", ): # Tokenize the text - tokens = [self.tokenizer.tokenize(text)] - if cfg_weight > 1: - tokens += [self.tokenizer.tokenize(negative_text)] - lengths = [len(t) for t in tokens] - N = max(lengths) - tokens = [t + [0] * (N - len(t)) for t in tokens] - tokens = mx.array(tokens) + tokens = self._tokenize( + self.tokenizer, text, (negative_text if cfg_weight > 1 else None) + ) # Compute the features - conditioning = self.text_encoder(tokens) + conditioning = self.text_encoder(tokens).last_hidden_state # Repeat the conditioning for each of the generated images if n_images > 1: @@ -51,10 +64,14 @@ class StableDiffusion: return conditioning - def _denoising_step(self, x_t, t, t_prev, conditioning, cfg_weight: float = 7.5): + def _denoising_step( + self, x_t, t, t_prev, conditioning, cfg_weight: float = 7.5, text_time=None + ): x_t_unet = mx.concatenate([x_t] * 2, axis=0) if cfg_weight > 1 else x_t t_unet = mx.broadcast_to(t, [len(x_t_unet)]) - eps_pred = self.unet(x_t_unet, t_unet, encoder_x=conditioning) + eps_pred = self.unet( + x_t_unet, t_unet, encoder_x=conditioning, text_time=text_time + ) if cfg_weight > 1: eps_text, eps_neg = eps_pred.split(2) @@ -65,13 +82,21 @@ class StableDiffusion: return x_t_prev def _denoising_loop( - self, x_T, T, conditioning, num_steps: int = 50, cfg_weight: float = 7.5 + self, + x_T, + T, + conditioning, + num_steps: int = 50, + cfg_weight: float = 7.5, + text_time=None, ): x_t = x_T for t, t_prev in self.sampler.timesteps( num_steps, start_time=T, dtype=self.dtype ): - x_t = self._denoising_step(x_t, t, t_prev, conditioning, cfg_weight) + x_t = self._denoising_step( + x_t, t, t_prev, conditioning, cfg_weight, text_time + ) yield x_t def generate_latents( @@ -142,3 +167,100 @@ class StableDiffusion: x = self.autoencoder.decode(x_t) x = mx.clip(x / 2 + 0.5, 0, 1) return x + + +class StableDiffusionXL(StableDiffusion): + def __init__(self, model: str = _DEFAULT_MODEL, float16: bool = False): + super().__init__(model, float16) + + self.sampler = SimpleEulerAncestralSampler(self.diffusion_config) + + self.text_encoder_1 = self.text_encoder + self.tokenizer_1 = self.tokenizer + del self.tokenizer, self.text_encoder + + self.text_encoder_2 = load_text_encoder( + model, + float16, + model_key="text_encoder_2", + ) + self.tokenizer_2 = load_tokenizer( + model, + merges_key="tokenizer_2_merges", + vocab_key="tokenizer_2_vocab", + ) + + def ensure_models_are_loaded(self): + mx.eval(self.unet.parameters()) + mx.eval(self.text_encoder_1.parameters()) + mx.eval(self.text_encoder_2.parameters()) + mx.eval(self.autoencoder.parameters()) + + def _get_text_conditioning( + self, + text: str, + n_images: int = 1, + cfg_weight: float = 7.5, + negative_text: str = "", + ): + tokens_1 = self._tokenize( + self.tokenizer_1, + text, + (negative_text if cfg_weight > 1 else None), + ) + tokens_2 = self._tokenize( + self.tokenizer_2, + text, + (negative_text if cfg_weight > 1 else None), + ) + + conditioning_1 = self.text_encoder_1(tokens_1) + conditioning_2 = self.text_encoder_2(tokens_2) + conditioning = mx.concatenate( + [conditioning_1.hidden_states[-2], conditioning_2.hidden_states[-2]], + axis=-1, + ) + pooled_conditioning = conditioning_2.pooled_output + + if n_images > 1: + conditioning = mx.repeat(conditioning, n_images, axis=0) + + return conditioning, pooled_conditioning + + def generate_latents( + self, + text: str, + n_images: int = 1, + num_steps: int = 2, + cfg_weight: float = 0.0, + negative_text: str = "", + latent_size: Tuple[int] = (64, 64), + seed=None, + ): + # Set the PRNG state + seed = seed or int(time.time()) + mx.random.seed(seed) + + # Get the text conditioning + conditioning, pooled_conditioning = self._get_text_conditioning( + text, n_images, cfg_weight, negative_text + ) + text_time = ( + pooled_conditioning, + mx.array([[512, 512, 0, 0, 512, 512.0]] * len(pooled_conditioning)), + ) + + # Create the latent variables + x_T = self.sampler.sample_prior( + (n_images, *latent_size, self.autoencoder.latent_channels), dtype=self.dtype + ) + + # Perform the denoising loop + yield from self._denoising_loop( + x_T, + self.sampler.max_time, + conditioning, + num_steps, + cfg_weight, + text_time=text_time, + ) diff --git a/stable_diffusion/stable_diffusion/clip.py b/stable_diffusion/stable_diffusion/clip.py index 49d7b513..b5e11fde 100644 --- a/stable_diffusion/stable_diffusion/clip.py +++ b/stable_diffusion/stable_diffusion/clip.py @@ -1,15 +1,33 @@ -# Copyright © 2023 Apple Inc. +# Copyright © 2023-2024 Apple Inc. + +from dataclasses import dataclass +from typing import List, Optional import mlx.core as mx import mlx.nn as nn from .config import CLIPTextModelConfig +_ACTIVATIONS = {"quick_gelu": nn.gelu_fast_approx, "gelu": nn.gelu} + + +@dataclass +class CLIPOutput: + # The last_hidden_state indexed at the EOS token and possibly projected if + # the model has a projection layer + pooled_output: Optional[mx.array] = None + + # The full sequence output of the transformer after the final layernorm + last_hidden_state: Optional[mx.array] = None + + # A list of hidden states corresponding to the outputs of the transformer layers + hidden_states: Optional[List[mx.array]] = None + class CLIPEncoderLayer(nn.Module): """The transformer encoder layer from CLIP.""" - def __init__(self, model_dims: int, num_heads: int): + def __init__(self, model_dims: int, num_heads: int, activation: str): super().__init__() self.layer_norm1 = nn.LayerNorm(model_dims) @@ -25,6 +43,8 @@ class CLIPEncoderLayer(nn.Module): self.linear1 = nn.Linear(model_dims, 4 * model_dims) self.linear2 = nn.Linear(4 * model_dims, model_dims) + self.act = _ACTIVATIONS[activation] + def __call__(self, x, attn_mask=None): y = self.layer_norm1(x) y = self.attention(y, y, y, attn_mask) @@ -32,7 +52,7 @@ class CLIPEncoderLayer(nn.Module): y = self.layer_norm2(x) y = self.linear1(y) - y = nn.gelu_approx(y) + y = self.act(y) y = self.linear2(y) x = y + x @@ -48,23 +68,49 @@ class CLIPTextModel(nn.Module): self.token_embedding = nn.Embedding(config.vocab_size, config.model_dims) self.position_embedding = nn.Embedding(config.max_length, config.model_dims) self.layers = [ - CLIPEncoderLayer(config.model_dims, config.num_heads) + CLIPEncoderLayer(config.model_dims, config.num_heads, config.hidden_act) for i in range(config.num_layers) ] self.final_layer_norm = nn.LayerNorm(config.model_dims) + if config.projection_dim is not None: + self.text_projection = nn.Linear( + config.model_dims, config.projection_dim, bias=False + ) + + def _get_mask(self, N, dtype): + indices = mx.arange(N) + mask = indices[:, None] < indices[None] + mask = mask.astype(dtype) * (-6e4 if dtype == mx.float16 else -1e9) + return mask + def __call__(self, x): # Extract some shapes B, N = x.shape + eos_tokens = x.argmax(-1) # Compute the embeddings x = self.token_embedding(x) x = x + self.position_embedding.weight[:N] # Compute the features from the transformer - mask = nn.MultiHeadAttention.create_additive_causal_mask(N, x.dtype) + mask = self._get_mask(N, x.dtype) + hidden_states = [] for l in self.layers: x = l(x, mask) + hidden_states.append(x) # Apply the final layernorm and return - return self.final_layer_norm(x) + x = self.final_layer_norm(x) + last_hidden_state = x + + # Select the EOS token + pooled_output = x[mx.arange(len(x)), eos_tokens] + if "text_projection" in self: + pooled_output = self.text_projection(pooled_output) + + return CLIPOutput( + pooled_output=pooled_output, + last_hidden_state=last_hidden_state, + hidden_states=hidden_states, + ) diff --git a/stable_diffusion/stable_diffusion/config.py b/stable_diffusion/stable_diffusion/config.py index 6fcf5952..6715757a 100644 --- a/stable_diffusion/stable_diffusion/config.py +++ b/stable_diffusion/stable_diffusion/config.py @@ -1,4 +1,4 @@ -# Copyright © 2023 Apple Inc. +# Copyright © 2023-2024 Apple Inc. from dataclasses import dataclass from typing import Optional, Tuple @@ -23,6 +23,8 @@ class CLIPTextModelConfig: num_heads: int = 16 max_length: int = 77 vocab_size: int = 49408 + projection_dim: Optional[int] = None + hidden_act: str = "quick_gelu" @dataclass @@ -38,6 +40,21 @@ class UNetConfig: num_attention_heads: Tuple[int] = (5, 10, 20, 20) cross_attention_dim: Tuple[int] = (1024,) * 4 norm_num_groups: int = 32 + down_block_types: Tuple[str] = ( + "CrossAttnDownBlock2D", + "CrossAttnDownBlock2D", + "CrossAttnDownBlock2D", + "DownBlock2D", + ) + up_block_types: Tuple[str] = ( + "UpBlock2D", + "CrossAttnUpBlock2D", + "CrossAttnUpBlock2D", + "CrossAttnUpBlock2D", + ) + addition_embed_type: Optional[str] = None + addition_time_embed_dim: Optional[int] = None + projection_class_embeddings_input_dim: Optional[int] = None @dataclass diff --git a/stable_diffusion/stable_diffusion/model_io.py b/stable_diffusion/stable_diffusion/model_io.py index 3c35eac4..ccb948ea 100644 --- a/stable_diffusion/stable_diffusion/model_io.py +++ b/stable_diffusion/stable_diffusion/model_io.py @@ -1,13 +1,12 @@ -# Copyright © 2023 Apple Inc. +# Copyright © 2023-2024 Apple Inc. import json from functools import partial +from typing import Optional import mlx.core as mx -import numpy as np from huggingface_hub import hf_hub_download from mlx.utils import tree_unflatten -from safetensors import safe_open as safetensor_open from .clip import CLIPTextModel from .config import AutoencoderConfig, CLIPTextModelConfig, DiffusionConfig, UNetConfig @@ -17,6 +16,22 @@ from .vae import Autoencoder _DEFAULT_MODEL = "stabilityai/stable-diffusion-2-1-base" _MODELS = { + # See https://huggingface.co/stabilityai/sdxl-turbo for the model details and license + "stabilityai/sdxl-turbo": { + "unet_config": "unet/config.json", + "unet": "unet/diffusion_pytorch_model.safetensors", + "text_encoder_config": "text_encoder/config.json", + "text_encoder": "text_encoder/model.safetensors", + "text_encoder_2_config": "text_encoder_2/config.json", + "text_encoder_2": "text_encoder_2/model.safetensors", + "vae_config": "vae/config.json", + "vae": "vae/diffusion_pytorch_model.safetensors", + "diffusion_config": "scheduler/scheduler_config.json", + "tokenizer_vocab": "tokenizer/vocab.json", + "tokenizer_merges": "tokenizer/merges.txt", + "tokenizer_2_vocab": "tokenizer_2/vocab.json", + "tokenizer_2_merges": "tokenizer_2/merges.txt", + }, # See https://huggingface.co/stabilityai/stable-diffusion-2-1-base for the model details and license "stabilityai/stable-diffusion-2-1-base": { "unet_config": "unet/config.json", @@ -28,14 +43,10 @@ _MODELS = { "diffusion_config": "scheduler/scheduler_config.json", "tokenizer_vocab": "tokenizer/vocab.json", "tokenizer_merges": "tokenizer/merges.txt", - } + }, } -def _from_numpy(x): - return mx.array(np.ascontiguousarray(x)) - - def map_unet_weights(key, value): # Map up/downsampling if "downsamplers" in key: @@ -67,9 +78,9 @@ def map_unet_weights(key, value): if "ff.net.0" in key: k1 = key.replace("ff.net.0.proj", "linear1") k2 = key.replace("ff.net.0.proj", "linear2") - v1, v2 = np.split(value, 2) + v1, v2 = mx.split(value, 2) - return [(k1, _from_numpy(v1)), (k2, _from_numpy(v2))] + return [(k1, v1), (k2, v2)] if "conv_shortcut.weight" in key: value = value.squeeze() @@ -80,8 +91,9 @@ def map_unet_weights(key, value): if len(value.shape) == 4: value = value.transpose(0, 2, 3, 1) + value = value.reshape(-1).reshape(value.shape) - return [(key, _from_numpy(value))] + return [(key, value)] def map_clip_text_encoder_weights(key, value): @@ -109,7 +121,7 @@ def map_clip_text_encoder_weights(key, value): if "mlp.fc2" in key: key = key.replace("mlp.fc2", "linear2") - return [(key, _from_numpy(value))] + return [(key, value)] def map_vae_weights(key, value): @@ -148,8 +160,9 @@ def map_vae_weights(key, value): if len(value.shape) == 4: value = value.transpose(0, 2, 3, 1) + value = value.reshape(-1).reshape(value.shape) - return [(key, _from_numpy(value))] + return [(key, value)] def _flatten(params): @@ -157,9 +170,9 @@ def _flatten(params): def _load_safetensor_weights(mapper, model, weight_file, float16: bool = False): - dtype = np.float16 if float16 else np.float32 - with safetensor_open(weight_file, framework="numpy") as f: - weights = _flatten([mapper(k, f.get_tensor(k).astype(dtype)) for k in f.keys()]) + dtype = mx.float16 if float16 else mx.float32 + weights = mx.load(weight_file) + weights = _flatten([mapper(k, v.astype(dtype)) for k, v in weights.items()]) model.update(tree_unflatten(weights)) @@ -186,6 +199,9 @@ def load_unet(key: str = _DEFAULT_MODEL, float16: bool = False): out_channels=config["out_channels"], block_out_channels=config["block_out_channels"], layers_per_block=[config["layers_per_block"]] * n_blocks, + transformer_layers_per_block=config.get( + "transformer_layers_per_block", (1,) * 4 + ), num_attention_heads=( [config["attention_head_dim"]] * n_blocks if isinstance(config["attention_head_dim"], int) @@ -193,6 +209,13 @@ def load_unet(key: str = _DEFAULT_MODEL, float16: bool = False): ), cross_attention_dim=[config["cross_attention_dim"]] * n_blocks, norm_num_groups=config["norm_num_groups"], + down_block_types=config["down_block_types"], + up_block_types=config["up_block_types"][::-1], + addition_embed_type=config.get("addition_embed_type", None), + addition_time_embed_dim=config.get("addition_time_embed_dim", None), + projection_class_embeddings_input_dim=config.get( + "projection_class_embeddings_input_dim", None + ), ) ) @@ -204,15 +227,24 @@ def load_unet(key: str = _DEFAULT_MODEL, float16: bool = False): return model -def load_text_encoder(key: str = _DEFAULT_MODEL, float16: bool = False): +def load_text_encoder( + key: str = _DEFAULT_MODEL, + float16: bool = False, + model_key: str = "text_encoder", + config_key: Optional[str] = None, +): """Load the stable diffusion text encoder from Hugging Face Hub.""" _check_key(key, "load_text_encoder") + config_key = config_key or (model_key + "_config") + # Download the config and create the model - text_encoder_config = _MODELS[key]["text_encoder_config"] + text_encoder_config = _MODELS[key][config_key] with open(hf_hub_download(key, text_encoder_config)) as f: config = json.load(f) + with_projection = "WithProjection" in config["architectures"][0] + model = CLIPTextModel( CLIPTextModelConfig( num_layers=config["num_hidden_layers"], @@ -220,11 +252,13 @@ def load_text_encoder(key: str = _DEFAULT_MODEL, float16: bool = False): num_heads=config["num_attention_heads"], max_length=config["max_position_embeddings"], vocab_size=config["vocab_size"], + projection_dim=config["projection_dim"] if with_projection else None, + hidden_act=config.get("hidden_act", "quick_gelu"), ) ) # Download the weights and map them into the model - text_encoder_weights = _MODELS[key]["text_encoder"] + text_encoder_weights = _MODELS[key][model_key] weight_file = hf_hub_download(key, text_encoder_weights) _load_safetensor_weights(map_clip_text_encoder_weights, model, weight_file, float16) @@ -249,6 +283,7 @@ def load_autoencoder(key: str = _DEFAULT_MODEL, float16: bool = False): block_out_channels=config["block_out_channels"], layers_per_block=config["layers_per_block"], norm_num_groups=config["norm_num_groups"], + scaling_factor=config.get("scaling_factor", 0.18215), ) ) @@ -276,14 +311,18 @@ def load_diffusion_config(key: str = _DEFAULT_MODEL): ) -def load_tokenizer(key: str = _DEFAULT_MODEL): +def load_tokenizer( + key: str = _DEFAULT_MODEL, + vocab_key: str = "tokenizer_vocab", + merges_key: str = "tokenizer_merges", +): _check_key(key, "load_tokenizer") - vocab_file = hf_hub_download(key, _MODELS[key]["tokenizer_vocab"]) + vocab_file = hf_hub_download(key, _MODELS[key][vocab_key]) with open(vocab_file, encoding="utf-8") as f: vocab = json.load(f) - merges_file = hf_hub_download(key, _MODELS[key]["tokenizer_merges"]) + merges_file = hf_hub_download(key, _MODELS[key][merges_key]) with open(merges_file, encoding="utf-8") as f: bpe_merges = f.read().strip().split("\n")[1 : 49152 - 256 - 2 + 1] bpe_merges = [tuple(m.split()) for m in bpe_merges] diff --git a/stable_diffusion/stable_diffusion/sampler.py b/stable_diffusion/stable_diffusion/sampler.py index 41555daf..ff4433d0 100644 --- a/stable_diffusion/stable_diffusion/sampler.py +++ b/stable_diffusion/stable_diffusion/sampler.py @@ -83,3 +83,23 @@ class SimpleEulerSampler: x_t_prev = x_t_prev * (sigma_prev.square() + 1).rsqrt() return x_t_prev + + +class SimpleEulerAncestralSampler(SimpleEulerSampler): + def step(self, eps_pred, x_t, t, t_prev): + sigma = self.sigmas(t).astype(eps_pred.dtype) + sigma_prev = self.sigmas(t_prev).astype(eps_pred.dtype) + + sigma2 = sigma.square() + sigma_prev2 = sigma_prev.square() + sigma_up = (sigma_prev2 * (sigma2 - sigma_prev2) / sigma2).sqrt() + sigma_down = (sigma_prev2 - sigma_up**2).sqrt() + + dt = sigma_down - sigma + x_t_prev = (sigma2 + 1).sqrt() * x_t + eps_pred * dt + noise = mx.random.normal(x_t_prev.shape).astype(x_t_prev.dtype) + x_t_prev = x_t_prev + noise * sigma_up + + x_t_prev = x_t_prev * (sigma_prev2 + 1).rsqrt() + + return x_t_prev diff --git a/stable_diffusion/stable_diffusion/unet.py b/stable_diffusion/stable_diffusion/unet.py index d58f35fb..ec2915e5 100644 --- a/stable_diffusion/stable_diffusion/unet.py +++ b/stable_diffusion/stable_diffusion/unet.py @@ -74,7 +74,7 @@ class TransformerBlock(nn.Module): y = self.norm3(x) y_a = self.linear1(y) y_b = self.linear2(y) - y = y_a * nn.gelu_approx(y_b) # approximate gelu? + y = y_a * nn.gelu(y_b) y = self.linear3(y) x = x + y @@ -106,10 +106,11 @@ class Transformer2D(nn.Module): def __call__(self, x, encoder_x, attn_mask, encoder_attn_mask): # Save the input to add to the output input_x = x + dtype = x.dtype # Perform the input norm and projection B, H, W, C = x.shape - x = self.norm(x).reshape(B, -1, C) + x = self.norm(x.astype(mx.float32)).astype(dtype).reshape(B, -1, C) x = self.proj_in(x) # Apply the transformer @@ -150,15 +151,17 @@ class ResnetBlock2D(nn.Module): self.conv_shortcut = nn.Linear(in_channels, out_channels) def __call__(self, x, temb=None): + dtype = x.dtype + if temb is not None: temb = self.time_emb_proj(nn.silu(temb)) - y = self.norm1(x) + y = self.norm1(x.astype(mx.float32)).astype(dtype) y = nn.silu(y) y = self.conv1(y) if temb is not None: y = y + temb[:, None, None, :] - y = self.norm2(y) + y = self.norm2(y.astype(mx.float32)).astype(dtype) y = nn.silu(y) y = self.conv2(y) @@ -292,6 +295,23 @@ class UNetModel(nn.Module): config.block_out_channels[0] * 4, ) + if config.addition_embed_type == "text_time": + self.add_time_proj = nn.SinusoidalPositionalEncoding( + config.addition_time_embed_dim, + max_freq=1, + min_freq=math.exp( + -math.log(10000) + + 2 * math.log(10000) / config.addition_time_embed_dim + ), + scale=1.0, + cos_first=True, + full_turns=False, + ) + self.add_embedding = TimestepEmbedding( + config.projection_class_embeddings_input_dim, + config.block_out_channels[0] * 4, + ) + # Make the downsampling blocks block_channels = [config.block_out_channels[0]] + list( config.block_out_channels @@ -308,7 +328,7 @@ class UNetModel(nn.Module): resnet_groups=config.norm_num_groups, add_downsample=(i < len(config.block_out_channels) - 1), add_upsample=False, - add_cross_attention=(i < len(config.block_out_channels) - 1), + add_cross_attention="CrossAttn" in config.down_block_types[i], ) for i, (in_channels, out_channels) in enumerate( zip(block_channels, block_channels[1:]) @@ -357,7 +377,7 @@ class UNetModel(nn.Module): resnet_groups=config.norm_num_groups, add_downsample=False, add_upsample=(i > 0), - add_cross_attention=(i < len(config.block_out_channels) - 1), + add_cross_attention="CrossAttn" in config.up_block_types[i], ) for i, (in_channels, out_channels, prev_out_channels) in reversed( list( @@ -380,11 +400,27 @@ class UNetModel(nn.Module): padding=(config.conv_out_kernel - 1) // 2, ) - def __call__(self, x, timestep, encoder_x, attn_mask=None, encoder_attn_mask=None): + def __call__( + self, + x, + timestep, + encoder_x, + attn_mask=None, + encoder_attn_mask=None, + text_time=None, + ): # Compute the time embeddings temb = self.timesteps(timestep).astype(x.dtype) temb = self.time_embedding(temb) + # Add the extra text_time conditioning + if text_time is not None: + text_emb, time_ids = text_time + emb = self.add_time_proj(time_ids).flatten(1).astype(x.dtype) + emb = mx.concatenate([text_emb, emb], axis=-1) + emb = self.add_embedding(emb) + temb = temb + emb + # Preprocess the input x = self.conv_in(x) @@ -417,7 +453,8 @@ class UNetModel(nn.Module): ) # Postprocess the output - x = self.conv_norm_out(x) + dtype = x.dtype + x = self.conv_norm_out(x.astype(mx.float32)).astype(dtype) x = nn.silu(x) x = self.conv_out(x) diff --git a/stable_diffusion/still-life.png b/stable_diffusion/still-life.png new file mode 100644 index 0000000000000000000000000000000000000000..430510d9b7343b9b36fb99d79334bc8c9d322b9a GIT binary patch literal 1615785 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