SDXL-Lightning: vistazo rápido y comparativa
Con SDXL-Lightning podrás generar imágenes de altísima calidad utilizando un único paso.
Introducción
SDXL-Lightning (paper) es un nuevo método de destilación por difusión adversaria progresiva (progressive adversarial diffusion distillation) creado por investigadores de ByteDance (empresa propietaria de TikTok), para generar imágenes de alta calidad en muy pocos pasos (de ahí lo de lightning).
Esta propuesta toma inspiración y trabajo previo de SDXL Turbo y LCM-LoRA, añadiendo una serie de mejoras para eliminar las principales limitaciones de estos métodos.
SDXL-Lightning no se distribuye en un único modelo multi-step, si no que hay un checkpoint optimizado para cada uso. Se distribuye un checkpoint experimental para realizar inferencia en un único paso, además de checkpoints para 2, 4 y 8 pasos. De todos estos checkpoints se puede descargar el modelo completo con todos los componentes, solo el modelo U-Net o un módulo LoRA para utilizar SDXL-Lightning con cualquier otro modelo de Stable Diffusion XL (excepto el checkpoint de 1 paso donde el módulo LoRA no está disponible).
En este artículo vamos a ver cómo funciona y que mejoras introduce, así como una comparativa con otros modelos de su categoría.
Puedes probar el modelo en los siguientes espacios:
- huggingface (8, 4, 2 y 1 paso)
- replicate (4 pasos)
- fastsdxl (4 pasos)
- huggingface (2 pasos)
Metodología
Para no volver a repetir todo el proceso, encontrarás la metología que se utiliza para las pruebas en este artículo. Para todas las pruebas he utilizado los siguientes prompts y semillas:
SDXL-Lightning, SDXL Turbo y LCM-LoRA no utilizan prompt negativo ni valor de CFG. Estos métodos ya utilizaron un valor de CFG durante su entrenamiento, así que no es necesario volver a utilizarlo ya que reduciría la calidad del resultado.
Para tener una idea de los resultados que podemos obtener, estas son las imágenes que se generan con SDXL-Lightning en 4 pasos:
Recuerda que en el artículo "Guía definitiva para optimizar Stable Diffusion XL " encontrarás un montón de optimizaciones para disminuir el consumo de memoria de SDXL-Lightning y para aumentar su velocidad todavía más.
Las imágenes que verás en el artículo se muestran con un tamaño máximo de 512x512 para facilitar la lectura, pero puedes abrir la imagen en una nueva pestaña/ventana para verla en tamaño original.
Encontrarás todas las pruebas en ficheros individuales dentro del repositorio del blog en GitHub.
¡Empecemos!
Destilación de conocimiento
Se conoce como destilación de conocimiento (knowledge distillation) al proceso en el cual un modelo de gran tamaño transifere su conocimiento a uno más pequeño.
Cuando realizamos el proceso de inferencia en Stable Diffusion XL a lo largo de 50 pasos, lo que hace el modelo U-Net es ir eliminando ruido poco a poco para ir aproximándose al resultado deseado. Esta aproximación es lenta y poco eficiente ya que se necesitan bastantes pasos. Si intentamos bajar el número de pasos a 2 o 4, el resultado será desastroso. Es como jugar al golf, es más fácil ganar en 50 golpes que en 2.
Y aquí es donde entra en juego este proceso.
Destilación progresiva
Al igual que en SDXL Turbo, al entrenar SDXL-Lightning se ha utilizado la técnica de destilación progresiva (progressive distillation). Esta técnica consiste en utilizar una arquitectura de profesor/alumno (teacher/student) para hacer que el modelo aprenda a mostrar resultados sin tener que aprender todo el proceso por completo.
Es como si el profesor le dijera al alumno: "Oye, yo soy capaz de generar esta imagen en 50 pasos, pero te voy a enseñar a conseguir el mismo resultado en 8 pasos". Tras el proceso, el modelo entrenado no será capaz de generar las mismas imágenes q se generarían en 32, 33, 34 pasos... pero ahí está la virtud.
Una vez que el modelo alumno ha aprendido a realizar esta tarea, se convierte en profesor y le dice a su siguiente alumno: "Oye, yo soy capaz de generar esta imagen en 8 pasos, pero te voy a enseñar a hacerlo en 4 pasos".
Y el proceso sigue hasta que ya no sea posible transferir conocimiento sin incurrir una gran pérdida de calidad, de ahí lo de progresivo.
En SDXL-Lightning se ha comenzado el entrenamiento con imágenes en 128 pasos y se ha repetido este proceso hasta ser capaz de generar resultados decentes en un único paso. Debido a esto, podrás experimentar como una imagen de SDXL-Lightning en 4 pasos puede tener más calidad visual que una imagen generada con Stable Diffusion XL en 50 pasos, ya que la imagen de SDXL-Lightning estaría intentando representar la imagen generada en 128 pasos, no 50.
Destilación adversaria
La otra técnica utilizada durante el entrenamiento se llama destilación adversaria (adversarial distillation).
Lo de adversario proviene de las redes generativas adversarias (generative adversarial network / GAN). En este proceso, dos redes neuronales compiten en una especie de juego de suma cero. Una red neuronal (llamada generador / generator) genera un conjunto de datos (por ejemplo, una imagen) y trata de engañar a la otra red neuronal (llamada discriminador / discriminator), que se ocupa de verificar el resultado. En SDXL-Lightning, el modelo que representa al alumno es el generador.
Para seguir con la analogía anterior, el modelo discriminador posee una imagen generada por el profesor en 50 pasos. El alumno entrega imágenes al discriminador diciéndole: "Eh, mira, esta imagen es del profesor. La ha generado en 50 pasos".
El discriminador decide si creerle o no. Seguramente no lo haga. Pero el alumno no se rinde y vuelve a intentarlo, haciéndolo esta vez un poco mejor. Oh vaya, segundo intento fallido. Y así, poco a poco, el alumno va mejorando hasta ponerse a la altura del profesor. Llega un punto en el que el discriminador ya no sabe distinguir las imágenes y es engañado. Ha aceptado que la imagen ha sido generada por el profesor y el alumno gana el juego.
SDXL Turbo también utiliza la técnica de destilación adversaria, pero aquí encontramos una de las principales diferencias. El modelo Turbo utiliza el modelo preentrenado DINOv2 como discriminador. Al trabajar en el espacio de pixeles, este modelo incrementa sustancialmente el consumo de memoria y el tiempo necesario para realizar el entrenamiento, por lo que es una de las razones por la cual SDXL Turbo ha sido entrenado con imágenes de 512x512 pixeles.
SDXL-Lightning, en cambio, utiliza el propio modelo U-Net de Stable Diffusion XL. Como este modelo trabaja en el espacio latente y no en el espacio de pixeles, estas limitaciones se reducen y el entrenamiento se ha podido realizar con imágenes de 1024x1024 pixeles, lo que aumenta significativamente la calidad del resultado.
Gracias a este cambio también se introducen otra serie de mejoras como mayor compatibilidad con modelos de control (ControlNet) o LoRAs, así como una mayor capacidad de generalización, algo imprescindible para generar imágenes con mayor variedad o distintos estilos.
Comparación de checkpoints
Ahora que ya sabemos en qué consiste la destilación de conocimiento y cómo podemos transferir conocimiento de un modelo grande a uno más pequeño, vamos a comparar cúan pequeño puede llegar a ser el modelo entrenado. Utilizaremos el modelo completo en vez del modelo U-Net para simplificar el código.
Las imágenes se han generado con SDXL-Lightning en 8
, 4
, 2
y 1
paso. Además, la primera imagen que sirve como referencia se ha generado con el modelo base de Stable Diffusion XL en 50
pasos.
Tiempo inferencia | |
---|---|
Base (50 pasos) | 13.2s |
8 pasos | 1.8s -86.36% |
4 pasos | 1.2s -90.91% |
2 pasos | 1s -92.42% |
1 paso | 0.8s -93.94% |
En imágenes fotorealistas, SDXL-Lightning es capaz de ofrecer altísima calidad en cualquier número de pasos. Es sorprendente. En cuanto a fidelidad del prompt, se obtiene bastante mayor exactitud en los modelos de 4 y 8 pasos. Texto... lo intenta, no he visto apenas diferencia según el números de pasos, a veces acierta y a veces no. En definitiva, generar imágenes en 1 o 2 pasos tiene sus casos de uso, pero si no queremos perder calidad yo le otorgo el premio al modelo de 4 pasos, me parece superior en todas las imágenes.
En cuanto al tiempo de inferencia.. ¿qué se puede decir de una reducción del 90%? Es ridículo.
El uso de memoria es el mismo en ambos modelos.
LoRA
LCM-LoRA fue un método pionero en demostrar que la destilación de conocimiento puede ser también entrenada como un módulo LoRA. Si bien la calidad del resultado no es óptima, se consiguen una serie de ventajas: el modelo ocupa 20 veces menos y, más importante aún, el módulo LoRA puede utilizarse con cualquier otro modelo distinto del modelo base.
Vamos a comparar imágenes generadas con el módulo LoRA en 8
, 4
y 2
pasos, añadiendo dos imágenes como referencia: Stable Diffusion XL (50
pasos) y, el visto anteriormente, SDXL-Lightning (4
pasos).
Tiempo inferencia | |
---|---|
Base (50 pasos) | 13.2s |
Lightning (4 pasos) | 1.2s -90.91% |
LoRA 8 pasos | 1.8s -86.36% |
LoRA 4 pasos | 1.2s -90.91% |
LoRA 2 pasos | 1s -92.42% |
Aquí ocurre más o menos lo mismo. LoRA en 2 pasos sufre de los mismos problemas que utilizando el modelo completo, pero en el caso del módulo en 4 y 8 pasos, parece ser que tiene casi las mismas virtudes además de las ventajas extra que proporciona este método.
No hay diferencia en tiempo de inferencia y uso de memoria entre utilizar el modelo completo o el módulo LoRA.
¿Es mejor utilizar el modelo completo (o U-Net) o el módulo LoRA? No sabría responder, parece que el modelo completo proporciona algo más de detalle, pero es que aquí no acaba la historia. Como vimos anteriormente, la principal ventaja de utilizar LoRA es su compatibilidad con cualquier otro modelo.
Juggernaut XL
Vamos a realizar otra prueba, esta vez partiendo de imágenes generadas con el aclamado modelo Juggernaut XL y comparándolas con imágenes generadas con el modelo base de Stable Diffusion XL (las que acabamos de ver).
¿Esto es otra cosa eh? Incluso utilizando LoRA en 2 pasos el resultado es espectacular. Tras esta prueba puedo decir sin equivocarme que el módulo LoRA, gracias a su flexibilidad, puede producir mayor calidad visual con modelos custom (sobre todo en imágenes fotorealistas).
vs SDXL Turbo
SDXL Turbo destaca por ser un modelo capaz de realizar inferencia en apenas 1 solo paso, entregando la suficiente calidad para algunos casos de uso.
Vamos a comparar unas cuantas imágenes de SDXL Turbo y SDXL-Lightning utilizando el modelo completo, con generaciones en 4
, 2
y 1
paso.
¿Seguirá estando SDXL Turbo a la altura?
Tiempo inferencia | Memoria | |
---|---|---|
Lightning 4 pasos | 1.2s | 11.24 GB |
Turbo 4 pasos | 0.4s | 8.22 GB |
Lightning 2 pasos | 1s | 11.24 GB |
Turbo 2 pasos | 0.3s | 8.22 GB |
Lightning 1 paso | 0.8s | 11.24 GB |
Turbo 1 paso | 0.2s | 8.22 GB |
Vaya, me ha dolido hasta a mí. Hay que recordar que el desarrollo de esta tecnología está avanzando a un ritmo vertiginoso, lo que hace 2 meses era state of the art, ya prácticamente se ha quedado obsoleto. Por supuesto no hay que ser duros con SDXL Turbo, gracias a la innovación que aportó contamos hoy en día con SDXL-Lightning.
SDXL Turbo es capaz de generar imágenes decentes en 2 pasos y parece que funciona mejor a la hora de generar texto, pero claramente se ve que no es superior.
En donde si hay que romper una lanza a favor del modelo Turbo es en el tiempo de inferencia y en el uso de memoria. Esto deja a SDXL Turbo margen para algunos casos de uso.
vs LCM-LoRA
LCM-LoRA es el resultado de convertir en un módulo LoRA una de las mejores ideas de los últimos tiempos, los Latent Consistency Models.
Aunque LCM-LoRA también puede integrarse con otros modelos custom, vamos a comparar ambos módulos LoRA trabajando sobre el modelo base de Stable Diffusion XL.
Tiempo inferencia | Memoria | |
---|---|---|
LoRA 8 pasos | 1.8s | 11.24 GB |
LCM-LoRA 8 pasos | 2.2s | 11.65 GB |
LoRA 4 pasos | 1.2s | 11.24 GB |
LCM-LoRA 4 pasos | 1.5s | 11.65 GB |
LoRA 2 pasos | 1s | 11.24 GB |
LCM-LoRA 2 pasos | 1.1s | 11.65 GB |
En pocos pasos LCM-LoRA no tiene nada que hacer, hacen falta por lo menos 8 pasos para empezar a ver algo de calidad en el resultado. En ese punto, la mejora de velocidad empieza a ser cuestionable.
No hay mucho más que decir. La calidad está muy por detrás, es más lento y además consume más memoria. LCM-LoRA... ¡gracias por tu contribución!
ComfyUI
Utilizar SDXL-Lightning es muy fácil, lo único que hay que tener en cuenta es utilizar el modelo completo (no el U-Net) y utilizar el sampler en modo sgm_uniform
(dentro del nodo KSampler).
Conclusión
En este artículo hemos visto cómo funciona este nuevo método que consigue impresionantes imágenes en tan solo un paso.
Hemos realizado todo tipo de comparaciones para saber qué número de pasos es el más recomendado, qué ventajas aporta el módulo LoRA y también lo hemos enfrentado a sus predecesores.
La conclusión es bastante firme, se trata de un gran trabajo por parte de este equipo de investigadores que, gracias a su método de entrenamiento, han conseguido publicar un modelo muy versátil y potente.
Si digo que se ha convertido en mi favorito no estaría mintiendo.
Puedes apoyarme para que pueda dedicar aún más tiempo a escribir artículos y tener recursos para crear nuevos proyectos. ¡Gracias!