Stable Diffusion WebUI

Las redes neuronales generativas parecen mágicas. Responden a preguntas, crean imágenes e incluso escriben código en varios lenguajes de programación. El éxito de estas redes tiene dos componentes: modelos preentrenados y aceleradores de hardware. Ciertamente, es posible utilizar núcleos de CPU para esta carga de trabajo, pero sería como una carrera de caracoles. Generar una imagen pequeña puede llevar mucho tiempo, decenas de minutos. Generar la misma imagen en una GPU llevaría cientos de veces menos.
El primer secreto reside en el número de núcleos. Los núcleos de la CPU son universales y pueden manejar instrucciones complejas. Sin embargo, los procesadores de servidor convencionales tienen un máximo de 64 núcleos. Incluso en los sistemas multiprocesador, el número de núcleos rara vez supera los 256. Los núcleos de las GPU son más sencillos, pero como resultado caben muchos más en el chip. Por ejemplo, una NVIDIA® RTX™ 4090 tiene 16.384 núcleos.
El segundo secreto es que la carga de trabajo puede dividirse en muchas tareas sencillas, que pueden ejecutarse en subprocesos paralelos en núcleos de GPU dedicados. Este truco acelera considerablemente el procesamiento de datos. Hoy veremos cómo funciona y desplegaremos una red neuronal generativa Stable Diffusion Web UI en la infraestructura LeaderGPU. Tomemos, por ejemplo, un servidor con una NVIDIA® RTX™ 4090 que tiene 16.384 núcleos de GPU. Como sistema operativo, seleccionamos la actual versión LTS de Ubuntu 22.04 y elegimos la opción "Instalar controladores NVIDIA® y CUDA® 11.8".
Preparación del sistema

Antes de empezar, vamos a considerar la memoria. Stable Diffusion es un sistema grande que puede ocupar hasta 13G en tu disco duro. El disco virtual estándar en una instalación de LeaderGPU es de 100G. El sistema operativo ocupa 25G. Si desplegamos Stable Diffusion sin ampliar la partición de inicio, agotaremos toda la memoria libre y nos encontraremos con un error de "No queda espacio en el dispositivo". Es una buena idea extender nuestro directorio home.
Ampliar el directorio de inicio
Primero, necesitamos comprobar todos los discos disponibles.
sudo fdisk -l
Disk /dev/sda: 447.13 GiB, 480103981056 bytes, 937703088 sectors Disk model: INTEL SSDSC2KB48 Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disk /dev/sdb: 50 GiB, 53687091200 bytes, 104857600 sectors Disk model: VIRTUAL-DISK Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt Disk identifier: 9D4C1F0C-D4A7-406E-AECB-BF57E4726437
Luego necesitamos crear una nueva partición Linux en nuestro disco SSD físico, /dev/sda:
sudo fdisk /dev/sda
Pulsa las siguientes teclas, una a una: g → n → Enter → Enter → Enter → w. Esto resultará en una nueva partición /dev/sda1 sin sistema de archivos. Ahora, crea un sistema de archivos ext4 en ella:
sudo mkfs.ext4 /dev/sda1
Cuando termine el proceso, pasamos al siguiente paso.
Atención. Por favor, proceda con la siguiente operación con sumo cuidado. Cualquier error cometido al modificar el archivo fstab puede provocar que su servidor no pueda arrancar con normalidad y puede requerir un reinicio completo del sistema operativo.
sudo blkid
/dev/sdb2: UUID="6b17e542-0934-4dba-99ca-a00bd260c247" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="70030755-75d8-4339-a4e0-26a97f1d1c5d" /dev/loop1: TYPE="squashfs" /dev/sdb1: PARTUUID="63ff1714-bd29-4062-be04-21af32423c0a" /dev/loop4: TYPE="squashfs" /dev/loop0: TYPE="squashfs" /dev/sda1: UUID="fb2ba455-2b8d-4da0-8719-ce327d0026bc" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="6e0108df-b000-5848-8328-b187daf37a4f" /dev/loop5: TYPE="squashfs" /dev/loop3: TYPE="squashfs"
Copie UUID (fb2ba455-2b8d-4da0-8719-ce327d0026bc en el ejemplo) de la partición /dev/sda1. A continuación, daremos instrucciones al sistema para que monte automáticamente esta unidad por su UUID en el arranque:
sudo nano /etc/fstab
Introduzca esta línea antes de /swap.img... string:
/dev/disk/by-uuid/ /home/usergpu ext4 defaults defaults
Ejemplo:
# /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # ## / was on /dev/sdb2 during curtin installation /dev/disk/by-uuid/6b17e542-0934-4dba-99ca-a00bd260c247 / ext4 defaults,_netdev 0 1 /dev/disk/by-uuid/fb2ba455-2b8d-4da0-8719-ce327d0026bc /home/usergpu ext4 defaults defaults /swap.img none swap sw 0 0
Salga con el atajo de teclado Ctrl + X y confirme el guardado del archivo pulsando Enter. La nueva configuración se aplicará en el próximo arranque del sistema. Vamos a reiniciar el servidor:
sudo shutdown -r now
Después de reiniciar, podemos comprobar todos los directorios montados con el siguiente comando:
df -h
Filesystem Size Used Avail Use% Mounted on tmpfs 6.3G 1.7M 6.3G 1% /run /dev/sdb2 49G 23G 24G 50% / tmpfs 32G 0 32G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock /dev/sda1 440G 28K 417G 1% /home/usergpu tmpfs 6.3G 4.0K 6.3G 1% /run/user/1000
¡Magnífico! Pero ahora no tenemos acceso para escribir algo en nuestro directorio home porque fue cambiado por el archivo de configuración fstab. Es hora de recuperar la propiedad del directorio:
sudo chown -R usergpu /home/usergpu
¡Buen trabajo! Pasemos al siguiente paso.
Instalar paquetes básicos
Actualiza la caché de software desde los repositorios oficiales de Ubuntu y actualiza algunos paquetes:
sudo apt update && sudo apt -y upgrade
El sistema ha informado de que se ha instalado un nuevo kernel y estará operativo tras el reinicio del sistema. Seleccione OK dos veces.
A continuación, tenemos que resolver las dependencias, que requieren Stable Diffusion. El primer paquete añade la funcionalidad de entorno virtual Python:
sudo apt install python3-venv
El segundo paquete añade una implementación de la función malloc() del lenguaje de programación C personalizada por Google. Evita el error “Cannot locate TCMalloc” y mejora el uso de la memoria de la CPU.
sudo apt install -y --no-install-recommends google-perftools
Por último, reinicia el servidor de nuevo:
sudo shutdown -r now
Difusión estable automática 1111: instalar script

La forma más fácil de instalar Stable Diffusion con WebUI es utilizando el script preconfigurado escrito por el usuario de GitHub AUTOMATIC1111. Este script descarga e instala estas dos partes mientras resuelve todas las dependencias necesarias.
Vamos a descargar el script:
wget https://raw.githubusercontent.com/AUTOMATIC1111/stable-diffusion-webui/master/webui.sh
A continuación, démosle acceso a los datos de modificación y ejecutémoslo como un programa:
chmod a+x webui.sh
Ejecuta el script descargado:
./webui.sh
Este proceso puede tardar un par de minutos. Todo está listo para crear imágenes perfectas con Stable Diffusion.
Solución de problemas
Si se encuentra con el error "Torch is not able to use GPU", puede solucionarlo reinstalando a través de apt:
sudo apt -y install nvidia-driver-535
Es necesario reiniciar el sistema operativo para habilitar el controlador:
sudo shutdown -r now
Generar

El script de instalación ./webui.sh tiene otra función. Sirve simultáneamente a la parte del servidor de Stable Diffusion y WebUI. Sin embargo, si lo utiliza sin argumentos, el servidor estará disponible como un demonio local en http://127.0.0.1:7860. Esto puede resolverse de dos maneras: reenviando puertos a través de un túnel SSH o permitiendo conexiones desde IPs externas.
La segunda forma es más simple: simplemente añade la opción --listen y podrás conectarte a la interfaz web en http://[YOUR_LEADERGPU_SERVER_IP_ADDRESS]:7860. Sin embargo, esto es completamente inseguro, ya que cualquier usuario de Internet tendrá acceso. Para evitar el uso no autorizado, añada la opción --gradio-auth junto al nombre de usuario y la contraseña, separados por dos puntos:
./webui.sh --listen --gradio-auth user:password
Esto añade una página de login a tu instancia WebUI.El script descargará los modelos básicos y las dependencias requeridas por primera vez:

Puedes disfrutar del resultado. Sólo tienes que introducir algunos datos, separarlos por comas, y hacer clic en el botón Generar. Después de unos segundos, se mostrará una imagen generada por la red neuronal.
Conclusión
Hemos recorrido todo el camino desde un servidor LeaderGPU vacío con sólo un sistema operativo preinstalado hasta una instancia lista con Stable Diffusion y una interfaz WebUI. La próxima vez, aprenderemos más sobre el ajuste del rendimiento del software y cómo mejorar adecuadamente tu instancia de Stable Diffusion con nuevas versiones de controladores y paquetes.
Vea también:
Actualizado: 28.03.2025
Publicado: 25.11.2024