Llevo varios días trabajando con todo tipo de tecnologías que hasta el día de hoy se conocen como “Inteligencia Artificial”, que de inteligencia no tiene nada, por que no van aprendiendo solas, simplemente se les da un conjunto de datos y lo que hacen es que buscan patrones y aprenden a replicarlos y almacenarlos de una forma optimizada para poder encontrarlos dentro de varios campos semánticos. Yo lo catalogo como “Machine Learning”, básicamente son computadoras aprendiendo a hacer cosas.
Hasta ahora lo más complicado y tardado que he hecho es utilizar “Stable Diffusion”, y creo que se debe a que toma mucho tiempo en descargar los modelos.
Apple cuenta con un repositorio el cual esta optimizado para ejecutarse en procesador de la misma empresa, pero eso no quiere decir que sea rápido.
Estos son los pasos para crear el ambiente:
git clone git@github.com:apple/ml-stable-diffusion.git
cd ml-stable-diffusion
python3 -m venv .
source bin/activate
pip install -r requirements.txt
huggingface-cli login
mkdir models
Una vez descargado el código y con el directorio models/
listo, descargamos y convertimos CompVis/stable-diffusion-v1-4
a un formato compatible para los procesadores M1/M2:
git clone https://huggingface.co/CompVis/stable-diffusion-v1-4
python -m python_coreml_stable_diffusion.torch2coreml --convert-unet --convert-text-encoder --convert-safety-checker --convert-vae-decoder -o ./models --model-version CompVis/stable-diffusion-v1-4
Una vez con los modelos listos, podemos empezar a crear imagenes:
python -m python_coreml_stable_diffusion.pipeline -i ./models -o ./img --compute-unit ALL --model-version CompVis/stable-diffusion-v1-4 --seed 124 --prompt "a photo of an astronaut riding a horse on mars"

CompVis/stable-diffusion-v1-4
Y si deseamos convertir otro modelo, el procedimiento es el mismo, solo hay que modificar la versión, en el siguiente ejemplo se utilizar runwayml/stable-diffusion-v1-5
:
git clone https://huggingface.co/runwayml/stable-diffusion-v1-5
python -m python_coreml_stable_diffusion.torch2coreml --convert-unet --convert-text-encoder --convert-safety-checker --convert-vae-decoder -o ./models --model-version runwayml/stable-diffusion-v1-5
python -m python_coreml_stable_diffusion.pipeline -i ./models -o ./img --compute-unit ALL --model-version runwayml/stable-diffusion-v1-5 --seed 124 --prompt "a photo of an astronaut riding a horse on mars"

runwayml/stable-diffusion-v1-5
Una vez generados los modelos optimizados para CoreML, se pueden eliminar los repositorios, ya que ocupan bastante espacio.

Y podemos confirmar que el GPU se esta utilizando con Activity Monitor.app
:
