Skip to content
Inferencia rápida de LoRA para Flux con Diffusers y PEFT
Source: huggingface.co

Inferencia rápida de LoRA para Flux con Diffusers y PEFT

Sources: https://huggingface.co/blog/lora-fast, Hugging Face Blog

Las adaptadores LoRA ofrecen una gran personalización para modelos de todas las formas y tamaños. En generación de imágenes, pueden dotar a los modelos de diferentes estilos, personajes y mucho más. A veces, también se pueden aprovechar para reducir la latencia de inferencia. Por ello, su importancia es crucial, especialmente para personalizar y ajustar modelos. En este artículo tomamos el modelo Flux.1-Dev para generación de texto a imagen por su popularidad y adopción generalizada, y mostramos cómo optimizar su velocidad de inferencia al usar LoRAs (~2.3x). Cuenta con más de 30k adaptadores entrenados con él (según lo reportado en el Hub de Hugging Face). Por lo tanto, su importancia para la comunidad es significativa. Nota: aunque demostramos mejoras con Flux, creemos que nuestra receta es lo suficientemente genérica para aplicarse a otros modelos. Si no puedes esperar para empezar con el código, consulta el repositorio de código asociado. Al servir LoRAs, es común realizar hot-swapping (intercambiar LoRAs). Un LoRA cambia la arquitectura del modelo base. Además, las LoRAs pueden ser diferentes entre sí – cada una puede tener rangos diferentes y apuntar a distintas capas para la adaptación. Para abordar estas propiedades dinámicas de las LoRAs, debemos tomar medidas para asegurar que las optimizaciones sean robustas. Por ejemplo, podemos aplicar torch.compile a un modelo cargado con una LoRA particular para obtener aceleraciones en la inferencia. Sin embargo, en cuanto cambiamos a otra LoRA (con una configuración potencialmente diferente), encontraremos problemas de recompilación, lo que ralentiza la inferencia. También se pueden fusionar los parámetros LoRA en los parámetros base del modelo, ejecutar la compilación y desfusionar LoRA al cargar nuevas. Sin embargo, este enfoque volverá a encontrar el problema de recompilación en cada inferencia debido a cambios de arquitectura potenciales. Nuestra receta de optimización tiene en cuenta estos escenarios para ser lo más realista posible. A continuación, los componentes clave de nuestra receta de optimización: Observa que entre los mencionados, la cuantización FP8 es con pérdida pero a menudo ofrece la negociación más importante entre velocidad y memoria. Aunque probamos principalmente la receta en GPUs NVIDIA, debería funcionar en GPUs AMD también. En nuestros blogs anteriores (post 1 y post 2), ya discutimos los beneficios de usar los tres primeros componentes de nuestra receta de optimización. Aplicarlos uno a la vez implica solo unas pocas líneas de código: El procesador FA3 proviene de aquí. Los problemas surgen cuando intentamos intercambiar LoRAs en un transformador de difusión compilado (pipe.transformer) sin activar recompilación. Normalmente, cargar y descargar LoRAs requeriría recompilación, lo que anula cualquier ventaja de velocidad obtenida de la compilación. Afortunadamente, hay una forma de evitar la necesidad de recompilación. Al pasar hotswap=True, diffusers mantendrá sin cambios la arquitectura del modelo y solo cambiará los pesos del adaptador LoRA, lo cual no requiere recompilación. (Como recordatorio, la primera llamada a pipe será lenta ya que torch.compile es un compilador just-in-time. Sin embargo, las llamadas subsecuentes deberían ser significativamente más rápidas). Esto generalmente permite intercambiar LoRAs sin recompilación, pero hay limitaciones: para más información sobre hot-swapping en Diffusers y sus limitaciones, visita la sección de hot-swapping de la documentación. Los beneficios de este flujo se vuelven evidentes cuando miramos la latencia de inferencia sin usar compilación con hot-swapping. Puntos clave : Este artículo presenta una receta de optimización para inferencia rápida de LoRA con Flux, demostrando ganancias significativas en velocidad. Nuestro enfoque combina Flash Attention 3, torch.compile y cuantización FP8 manteniendo la capacidad de hot-swapping sin recompilación. En GPUs de alto rendimiento como la H100, esta configuración optimizada ofrece aproximadamente 2.23x de velocidad respecto al baseline. Para GPUs de consumo, específicamente el RTX 4090, abordamos limitaciones de memoria introduciendo cuantización NF4 para el codificador de texto T5 y utilizando compilación regional. Esta receta integral logró una ganancia sustancial de ~2.04x, haciendo que la inferencia LoRA en Flux sea viable y eficiente incluso con VRAM limitada. La idea clave es que, al gestionar cuidadosamente compilación y cuantización, los beneficios de LoRA pueden realizarse plenamente en diferentes configuraciones de hardware. Esperamos que estas recetas te inspiren a optimizar tus casos de uso basados en LoRA y a beneficiarte de una inferencia rápida. A continuación, se muestra una lista de los recursos importantes citados a lo largo de este artículo: Más artículos de nuestro Blog Por linoyts 2 de enero de 2024 • 70 Por derekl35 19 de junio de 2025 • 83 Me gustó tu artículo! ¿Puedo preguntar qué versión de PyTorch usaste para los resultados de prueba? PyTorch nightly. A boy with baloon · Regístrate o inicia sesión para comentar

More news