Note:
- Este tutorial requiere acceso a Oracle Cloud. Para registrarse en una cuenta gratuita, consulte Introducción a la cuenta gratuita de Oracle Cloud Infrastructure.
- Utiliza valores de ejemplo para credenciales, arrendamiento y compartimentos de Oracle Cloud Infrastructure. Al finalizar el laboratorio, sustituya estos valores por otros específicos del entorno en la nube.
Despliegue Stable Diffusion Automatic1111 en GPU de Oracle Cloud Infrastructure
En el panorama en constante evolución de la inteligencia artificial (IA) y el aprendizaje automático (ML), los investigadores e ingenieros están empujando constantemente los límites de lo que es posible. Un desarrollo notable que ha ganado impulso en los últimos años es el modelo de difusión estable. Esta tecnología de vanguardia ofrece ventajas significativas, promete una amplia gama de casos de uso y continúa viendo desarrollos emocionantes. En este tutorial, profundizaremos en el mundo de los modelos de IA/AA de difusión estable, explorando sus beneficios, explorando sus casos de uso y discutiendo los últimos desarrollos en este fascinante campo.
Introducción
Difusión estable: la difusión estable es un enfoque relativamente nuevo e innovador en el mundo de la IA y el aprendizaje automático. Es un modelo generativo probabilístico que ha ganado protagonismo debido a su capacidad para generar muestras de datos de alta calidad y su robustez a diversas condiciones de entrenamiento. El modelo de difusión estable, a menudo basado en el proceso de difusión, permite la generación y manipulación controlada de datos. A continuación, se muestra una breve descripción general de sus componentes clave:
Proceso de difusión: la idea central del modelo de difusión estable es el proceso de difusión, que modela la evolución de una distribución de datos a lo largo del tiempo. Implica aplicar iterativamente un proceso de ruido a los datos hasta que converge en la distribución deseada.
Denoising Autoencoder: en el proceso de difusión, se utiliza un autoencoder denoising para recuperar los datos originales de las muestras ruidosas. Este proceso ayuda al modelo a aprender y capturar funciones significativas de los datos.
Objetivo
Automatic1111 Stable Diffusion es una herramienta que cambia el juego en el ámbito de las imágenes generadas por IA. Esta innovadora WebUI ofrece una plataforma fácil de usar, remodelando el panorama de la creación de imágenes generadas por IA. Con él, los usuarios pueden operar y supervisar sin problemas sus modelos de IA dedicados a la generación de imágenes. Desplegaremos Automatic1111 y sus requisitos para inferir su modelo de difusión estable favorito en Oracle Linux 8.
Requisitos
-
Arrendamiento de Oracle Cloud Infrastructure (OCI) con límites de GPU A10. Se necesita al menos 1 A10.
-
Una red virtual en la nube (VCN) de OCI existente con al menos una subred pública y límites para IP pública.
-
Un punto de control de modelo de difusión estable de su Huggingface Creator favorito. Limite el modelo a v1-5 y v2-1. La difusión estable XL es difícil de cargar en una única GPU A10. Consulte Modelo de difusión estable: cara de abrazo.
Tarea 1: Aprovisionamiento de una instancia informática de GPU en OCI
-
Inicie una instancia informática en OCI con una VCN existente con subred pública. Para obtener más información, consulte Inicio de una instancia informática.
-
Seleccione una única instancia de GPU A10 de las unidades GPU.A10 disponibles.
VM.GPU.A10.1
-
Al iniciar una instancia informática, cambie de unidad a una de las unidades anteriores. Para iniciar la máquina virtual GPU.A10, haga clic en Especialidad y generación anterior y seleccione las unidades VM.GPU.A10.1.
-
Si su arrendamiento no tiene un límite de servicio definido para GPU.A10, estas unidades no estarán en la lista de unidades.
-
Para comprobar los límites de arrendamiento en la consola de OCI, defina la región en la que va a aprovisionar una instancia informática GPU.A10, abra el menú de navegación y haga clic en Gobernanza y administración.
-
En Gestión de arrendamiento, seleccione Límites, cuotas y uso.
-
Defina el servicio en Compute, seleccione uno de los dominios de disponibilidad en el campo Ámbito y escriba GPU.A10 en el campo Recurso.
-
Seleccione GPU para las instancias de VM basadas en A10 y BM.
-
-
Los límites de recursos informáticos se establecen por dominio de disponibilidad. Compruebe si el límite está definido en cualquiera de los dominios de disponibilidad de la región. Si el límite de servicio está definido en 0 para todos los dominios de disponibilidad, puede hacer clic en el enlace "request a service limit Aumentar" y enviar una solicitud de aumento del límite para este recurso.
Nota: para acceder a Límites, cuotas y uso, debe ser miembro del grupo Administradores del arrendamiento o su grupo debe tener una política asignada para que lea LimitsAndUsageViewers.
- Para obtener más información, consulte Límites de servicio.
-
Actualmente, las unidades de computación GPU.A10 de OCI soportan Oracle Linux, Ubuntu y Rocky Linux. Windows solo está soportado por unidades de máquina virtual.
Nota: NVIDIA no admite oficialmente Rocky Linux.
-
Al aprovisionar una instancia informática en OCI, utilice una imagen de sistema operativo Oracle Linux 8 estándar o una imagen con GPU de Oracle Linux 8. Si utiliza la imagen estándar del sistema operativo Oracle Linux, sepa que es necesario instalar el controlador vGPU NVIDIA. Para nuestro tutorial vamos con la imagen de GPU de Oracle Linux 8.
-
Amplíe la sección Boot Volume para aumentar el volumen de inicio a al menos 250 GB y aumentar el VPU a un rendimiento superior para obtener una lectura/escritura decente para una mejor inferencia.
-
Inicie la instancia con los parámetros anteriores.
Tarea 2: Instalación de requisitos previos para Automatic1111
-
Como los controladores NVIDIA se incluyen en la imagen de compilación de GPU de Oracle Linux, simplemente podemos verificar su presencia y funcionalidad ejecutando el comando nvidia-smi. Esto asegurará que todo esté correctamente configurado y que los controladores de GPU funcionen como se espera.
-
Aumente FileSystem La memoria del sistema de instancias de OCI incluye el valor por defecto 46.6GB. Dado que hemos aumentado nuestro volumen de inicio a 300 GB, ampliemos nuestro sistema de archivos con el comando incorporado de OCI Util.
Para ampliar el sistema de archivos en la instancia de OCI después de aumentar el volumen de inicio a 300 GB, puede utilizar el comando incorporado de OCI (Oracle Cloud Infrastructure). Así es como puedes hacerlo:
-
Comprobar el uso actual del disco: antes de cambiar el tamaño del sistema de archivos, se recomienda comprobar el uso actual del disco para asegurarse de que refleja el aumento del tamaño del volumen de inicio. Para ello, puede utilizar el comando
df
:df -h
Verifique que el espacio disponible coincida con el nuevo tamaño del volumen de inicio (300 GB).
-
Cambio de tamaño del sistema de archivos: utilice el comando de la utilidad OCI para cambiar el tamaño del sistema de archivos para utilizar el almacenamiento aumentado. El comando exacto puede variar según el sistema operativo y el sistema de archivos específicos que esté utilizando. Lo siguiente se utiliza para Oracle Linux 8.
sudo /usr/libexec/oci-growfs
Introduzca 'y' cuando se le pida que confirme que está ampliando la partición.
-
Verificar la expansión del sistema de archivos: después de ejecutar el comando de cambio de tamaño, vuelva a comprobar el uso del disco para confirmar que el sistema de archivos se ha ampliado correctamente:
df -h
Ahora debe reflejar el aumento del tamaño del sistema de archivos.
Si sigue estos pasos, debería poder ampliar el sistema de archivos en la instancia de OCI para utilizar el espacio de almacenamiento adicional proporcionado por el volumen de inicio aumentado.
-
-
Instale Python 3.10.6 en Oracle Linux 8.
sudo dnf update -y sudo dnf install curl gcc openssl-devel bzip2-devel libffi-devel zlib-devel wget make -y wget https://www.python.org/ftp/python/3.10.6/Python-3.10.6.tar.xz tar -xf Python-3.10.6.tar.xz cd Python-3.10.6/ ./configure --enable-optimizations make -j 2 nproc sudo make altinstall python3.10 -V
-
Ahora que tenemos Python3.10.6 instalado, instalemos git para clonar repositorios Git.
sudo dnf install git
-
Clone Automatic1111.
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
Debe tener el repositorio stable-diffusion-webui en el directorio clonado.
-
Descargue su modelo de difusión estable favorito en el directorio
stable-diffusion-webui/models/Stable-Diffusion
.- Para nuestro caso de uso, aquí he descargado v1-5-pruned.ckpt de stable-diffusion-v1-5.
-
Actualice las reglas del firewall para permitir el tráfico 7860 del puerto.
sudo firewall-cmd --list-all # To check existing added ports sudo firewall-cmd --zone=public --permanent --add-port 7860/tcp sudo firewall-cmd --reload sudo firewall-cmd --list-all # Confirm that port has been added.
Tarea 3: Ejecutar AUTOMATIC1111
-
Con Python 3.10.6 instalado correctamente, el software AUTOMATIC1111 y los modelos de difusión estable esenciales descargados, estamos listos para seguir adelante con la ejecución de AUTOMATIC1111. Sin embargo, antes de continuar, ajustemos nuestra configuración para optimizar la velocidad y la calidad general de la generación de imágenes de difusión estable.
-
Edite el archivo
webui-user.sh
y realice los siguientes ajustes. Puede encontrar este archivo en el directoriostable-diffusion-webui
. Este script es responsable de configurar los argumentos para AUTOMATIC1111 y es crucial para comprender y actualizar los parámetros disponibles.-
Modifique el parámetro de la siguiente manera: agregue
listen
para ejecutarlo como servidor en el puerto 7860, active el acceso a extensiones para instalar extensiones preferidas de difusión estable y defina la precisión como completa.# Commandline arguments for webui.py, for example: export COMMANDLINE_ARGS="--medvram --opt-split-attention" export COMMANDLINE_ARGS="--listen --enable-insecure-extension-access --precision full --no-half-vae --no-half --theme light"
-
El siguiente parámetro para asegurarse de que se utiliza Python3.10.
# python3 executable python_cmd="python3.10"
-
El siguiente parámetro instala la versión más reciente de PyTorch2 en lugar de la versión por defecto de PyTorch. Esto ha demostrado ser mejor en las velocidades de inferencia e iteración de imágenes.
# install command for torch export TORCH_COMMAND="pip install clean-fid numba numpy torch==2.0.1+cu118 torchvision --force-reinstall --extra-index-url https://download.pytorch.org/whl/cu118"
-
-
Después de asegurarse de que no hay errores de sintaxis, vamos a ejecutar el script webui.sh (no confundir con webui-user.sh, el archivo editado anteriormente).
bash webui.sh
El resultado de este proceso debe incluir la instalación de todos los paquetes necesarios para AUTOMATIC1111, incluido el último PyTorch2. También cargará los modelos esenciales e iniciará el servidor de inferencia en el puerto 7860. Si es necesario, puede personalizar el puerto modificando el archivo webui-user.sh.
-
Después de confirmar un despliegue correcto con el servidor que se ejecuta en el puerto 7860 como se ha demostrado anteriormente, sigamos accediendo a la aplicación Stable Diffusion. Abra el explorador web e introduzca la siguiente dirección:
http://<PublicIP>:7860
, sustituyendo"<PublicIP>"
por la dirección IP pública de la instancia.
Una vez hecho esto, la aplicación debe cargarse y aparecer como se ilustra a continuación. Encontrará los modelos deseados convenientemente ubicados en la esquina superior derecha, como se resalta.
Tarea 4: Despliegue AUTOMATIC1111 mediante service manager systemctl
-
Cree un archivo
stable-diffusion.service
en la ruta de acceso/etc/systemd/system
e introduzca lo siguiente en el archivostable-diffusion.service
.[Unit] Description=systemd service start stable-diffusion [Service] WorkingDirectory=/home/opc/stable-diffusion-webui ExecStart=bash webui.sh User=opc [Install] WantedBy=multi-user.target
-
Asegúrese de cambiar el directorio de trabajo a lo necesario.
-
Ejecute los siguientes comandos para volver a cargar y activar/iniciar el servicio.
sudo systemctl daemon-reload sudo systemctl enable stable-diffusion.service sudo systemctl start stable-diffusion.service
-
Ejecute el siguiente comando para comprobar el estado del servicio.
sudo systemctl start stable-diffusion.service
Información y mejoras
- Los modelos de difusión estable vienen en una gama de tamaños y versiones, incluyendo v1.1, v1.2, v1.3, v1.4, v1.5, v2.0, v2.1 y vSDXL. Estas versiones se muestran en orden ascendente de sus capacidades y lo que pueden lograr. Por ejemplo, todos los modelos v1 pueden generar imágenes 512x512 nativas. v2 puede generar imágenes 768x768 de forma nativa sin necesidad de precisión completa. Los tamaños de archivo para los modelos v1 suelen estar dentro del rango de 6-8 GB por modelo de punto de control, mientras que los modelos v2 tienden a tener tamaños de archivo alrededor de 5.5GB por modelo de punto de control.
Carga de modelos
-
El modelo de varios gigabytes se carga en su GPU VRAM al inicio de la ejecución, mientras que los numerosos núcleos CUDA lo procesan meticulosamente cientos de veces por segundo. Las tasas de transferencia de datos involucradas están operando en los límites absolutos definidos por las leyes de la física. Dentro de la tarjeta gráfica, factores como el tiempo requerido para que una señal eléctrica atraviese el chip a la velocidad de la luz no deben ser subestimados.
-
La GPU procesa un conjunto de cálculos y, a continuación, indica a la CPU que proporcione más datos para su procesamiento. Posteriormente, espera mientras la CPU accede a la memoria del sistema para recuperar otro lote de datos y lo envía a la GPU a través de PCI-E. Una vez que la GPU tiene los datos, los procesa y luego señala la CPU nuevamente, entrando en otra fase de espera.
-
Esta es la razón por la que VRAM desempeña un papel fundamental en las tareas de IA. Si puede precargar todos los datos e instrucciones necesarios en la tarjeta gráfica al comienzo de la operación, lo que le permite procesarlos a sus brillantes velocidades internas y simplemente recopilar los resultados al final, puede reducir significativamente los tiempos de espera y minimizar los recursos desperdiciados.
-
En nuestro caso de uso, utilizamos VM.GPU.A10.1, que cuenta con una GPU NVIDIA A10 con 24 GB de RAM. Una única GPU NVIDIA A10 es más que suficiente para un buen funcionamiento de la versión 1.5. Sin embargo, a medida que aumenta la complejidad del aviso, el tiempo de generación se alarga y la velocidad de iteración disminuye. Hay versiones depuradas de los modelos v2 Stable Diffusion que pueden ejecutar las operaciones de forma más rápida y sin problemas que sus equivalentes v2 de tamaño original, principalmente debido a sus requisitos de espacio reducidos. Aunque todas las versiones de los modelos Stable Diffusion se pueden acomodar dentro de una sola GPU NVIDIA A10 de 24 GB, el ritmo de iteración y el tiempo de generación de imágenes dependen de varios factores, incluido el modelo específico, su tamaño, complejidad de petición de datos, pasos de muestreo, dimensiones de imagen, ajustes de alta resolución, tamaño de lote y más.
-
En el próximo tutorial, exploraremos cómo particionar el modelo, distribuirlo entre varias GPU y ejecutar Stable Diffusion mediante varias GPU en una sola máquina. También exploraremos el ajuste de un modelo base de difusión estable existente.
Enlaces relacionados
Confirmaciones
Autor: Abhiram Ampabathina (Arquitecto superior en la nube)
Más recursos de aprendizaje
Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en Oracle Learning Explorer.
Para obtener documentación sobre el producto, visite Oracle Help Center.
Deploy Stable Diffusion Automatic1111 on Oracle Cloud Infrastructure GPUs
F87725-01
October 2023
Copyright © 2023, Oracle and/or its affiliates.