Stable Diffusion with Core ML on Apple Silicon
Run Stable Diffusion on Apple Silicon with Core ML
This repository comprises:
python_coreml_stable_diffusion, a Python package for converting PyTorch models to Core ML format and performing image generation with Hugging Face diffusers in PythonStableDiffusion, a Swift package that developers can add to their Xcode projects as a dependency to deploy image generation capabilities in their apps. The Swift package relies on the Core ML model files generated by python_coreml_stable_diffusionIf you run into issues during installation or runtime, please refer to the FAQ section. Please refer to the System Requirements section before getting started.
Model Conversion:
macOS Python coremltools 13.1 3.8 7.0Project Build:
macOS Xcode Swift 13.1 14.3 5.8Target Device Runtime:
macOS iPadOS, iOS 13.1 16.2Target Device Runtime (With Memory Improvements):
macOS iPadOS, iOS 14.0 17.0Target Device Hardware Generation:
Mac iPad iPhone M1 M1 A14stabilityai/stable-diffusion-2-1-base (512x512)
--compute-unit
--attention-implementation
End-to-End Latency (s)
Diffusion Speed (iter/s)
iPhone 12 Mini
CPU_AND_NE
SPLIT_EINSUM_V2
18.5*
1.44
iPhone 12 Pro Max
CPU_AND_NE
SPLIT_EINSUM_V2
15.4
1.45
iPhone 13
CPU_AND_NE
SPLIT_EINSUM_V2
10.8*
2.53
iPhone 13 Pro Max
CPU_AND_NE
SPLIT_EINSUM_V2
10.4
2.55
iPhone 14
CPU_AND_NE
SPLIT_EINSUM_V2
8.6
2.57
iPhone 14 Pro Max
CPU_AND_NE
SPLIT_EINSUM_V2
7.9
2.69
iPad Pro (M1)
CPU_AND_NE
SPLIT_EINSUM_V2
11.2
2.19
iPad Pro (M2)
CPU_AND_NE
SPLIT_EINSUM_V2
7.0
3.07
Details (Click to expand) benchmark branch of the Diffusers apptokenizer.model_max_length) in the text token sequence regardless of the actual length of the input text.* indicates that the reduceMemory option was enabled which loads and unloads models just-in-time to avoid memory shortage. This added up to 2 seconds to the end-to-end latency.--compute-unit and --attention-implementation values per device. The former does not modify the Core ML model and can be applied during runtime. The latter modifies the Core ML model. Note that the best performing compute unit is model version and hardware-specific.--attention-implementation) are generally applicable to Transformers and not customized to Stable Diffusion. Better performance may be observed upon custom kernel tuning. Therefore, these numbers do not represent peak HW capability.stabilityai/stable-diffusion-xl-base-1.0-ios (768x768)
--compute-unit
--attention-implementation
End-to-End Latency (s)
Diffusion Speed (iter/s)
iPhone 12 Pro
CPU_AND_NE
SPLIT_EINSUM
116*
0.50
iPhone 13 Pro Max
CPU_AND_NE
SPLIT_EINSUM
86*
0.68
iPhone 14 Pro Max
CPU_AND_NE
SPLIT_EINSUM
77*
0.83
iPhone 15 Pro Max
CPU_AND_NE
SPLIT_EINSUM
31
0.85
iPad Pro (M1)
CPU_AND_NE
SPLIT_EINSUM
36
0.69
iPad Pro (M2)
CPU_AND_NE
SPLIT_EINSUM
27
0.98
Details (Click to expand) benchmark branch of the Diffusers appUnet.mlmodelc is compressed to 4.04 bit precision following the Mixed-Bit Palettization algorithm recipe published hereUnet.mlmodelc are compressed to 16 bit precisionVAEDecoder.mlmodelc in order to enable float16 weight and activation quantization for the VAE model.--attention-implementation SPLIT_EINSUM is chosen in lieu of SPLIT_EINSUM_V2 due to the prohibitively long compilation time of the latter* indicates that the reduceMemory option was enabled which loads and unloads models just-in-time to avoid memory shortage. This added significant overhead to the end-to-end latency. Note that end-to-end latency difference between iPad Pro (M1) and iPhone 13 Pro Max despite identical diffusion speed.tokenizer.model_max_length) in the text token sequence regardless of the actual length of the input text.--compute-unit and --attention-implementation values per device. The former does not modify the Core ML model and can be applied during runtime. The latter modifies the Core ML model. Note that the best performing compute unit is model version and hardware-specific.--attention-implementation) are generally applicable to Transformers and not customized to Stable Diffusion. Better performance may be observed upon custom kernel tuning. Therefore, these numbers do not represent peak HW capability.stabilityai/stable-diffusion-xl-base-1.0 (1024x1024)
--compute-unit
--attention-implementation
End-to-End Latency (s)
Diffusion Speed (iter/s)
MacBook Pro (M1 Max)
CPU_AND_GPU
ORIGINAL
46
0.46
MacBook Pro (M2 Max)
CPU_AND_GPU
ORIGINAL
37
0.57
Mac Studio (M1 Ultra)
CPU_AND_GPU
ORIGINAL
25
0.89
Mac Studio (M2 Ultra)
CPU_AND_GPU
ORIGINAL
20
1.11
Details (Click to expand) StableDiffusion Swift pipeline.coremltools-7.0 supports advanced weight compression techniques for [prunin