¡Pregunte, nosotros le respondemos!

Aplicaciones y Guías

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

Stable Diffusion WebUI system prepare

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

Stable Diffusion WebUI install 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

Stable Diffusion WebUI run script

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:

Stable Diffusion WebUI Gradio

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