Diffusers

De NLHPC

Introducción

Los modelos de difusión son arquitecturas generativas que permiten crear imágenes de alta calidad a partir de texto u otras modalidades.

En esta guía, se enseñara el uso de diffusers de hugging face. Con lo que podrá realizar inferencia utilizando el cluster.

Cargar módulos necesarios:

Para utilizar diffusers con compatibilidad AMD, se deben cargar los módulos:

ml ai-inference

El cual contiene todos paquetes de software necesarios para realizar inferencia con modelos de difusión y LLM’s.

Entre los paquetes se encuentran:

  • Pytorch,
  • Ollama,
  • vLLM,
  • diffusers,
  • huggingface-cli,
  • transformers,
  • etc.

Creación de un script python

Para ejecutar inferencia con modelos de difusión, se debe tener un script en python pre-preparado, por ejemplo:

import torch
from diffusers import StableDiffusionPipeline
pipe = StableDiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-2-1",
torch_dtype=torch.float16
).to("cuda")
image = pipe("Astronaut riding a horse on Mars, HD, cinematic").images[0]
image.save("output.png")

Notar que la imagen quedará guardada en el directorio de ejecución del script python. Ejecución con sbatch

Para ejecutar el script en python creado anteriormente, se puede utilizar el siguiente script sbatch como ejemplo:

#!/bin/bash
#---------------Script SBATCH - NLHPC ----------------
#SBATCH -J diffusion_inference
#SBATCH -p mi210
#SBATCH --gres=gpu:1
#SBATCH -n 1
#SBATCH -c 8
#SBATCH --ntasks-per-node=1
#SBATCH -t 0:30:00
#SBATCH --mem=8192MB
#SBATCH -o logs/diffusion_%j.out
#SBATCH -e logs/diffusion_%j.err
# ----------------Modulos----------------------------
ml purge
ml ai-inference
# ----------------Comando--------------------------
python <python_script>.py

⚠️ Consideraciones importantes

  • Uso de VRAM

Si el modelo excede la capacidad de VRAM de una tarjeta gráfica, puede utilizar 2, notar que la velocidad de inferencia no aumenta si hace eso. A continuación algunos ejemplos:

    • SD 2.1 Base (~5.1GB en FP16) (una gpu)
    • SDXL (~14GB en FP16) (una gpu)

Por lo general, todos los modelos de difusión caben en una sola MI210, por tanto, se recomienda el uso de una sola GPU.

  • Reserva de CPU’s

Se recomienda que se soliciten 8 CPU’s por cada GPU

  • Directorio de descarga de modelos

Los modelos se descargan automáticamente de Hugging Face Hub en el directorio /home/ai_inference_db/models/. Para usar y descargar modelos en su carpeta de usuario, cambie las variables de entorno:

unset HF_HOME
unset HF_DATASETS_CACHE

Además, si su modelo requiere permisos para utilizarse, puede realizar login a su cuenta utilizando:

huggingface-cli login

Por último, puede comunicarse con el soporte de NLHPC vía tickets para solicitar el grupo <practica-gpu> y descargar modelos en la carpeta compartida.

Rendimiento

DIFFUSERS-Rendimiento.png

Troubleshooting

Descarga y Carga del Modelo

¿ Por qué el modelo no se descarga, no carga o no se lanza correctamente?

Posibles causas:

  • Variables de entorno configuradas de forma incorrecta (por ejemplo, HF_HOME o HF_DATASETS_CACHE apuntando a rutas no deseadas).
  • Falta de permisos para acceder a ciertos modelos o repositorios.
  • El modelo no se encuentra en la carpeta compartida predeterminada (/home/ai_inference_db/models/).

Soluciones:

  • Ejecutar unset HF_HOME y unset HF_DATASETS_CACHE para forzar la descarga en la carpeta de usuario.
  • Realizar login con huggingface-cli login si el modelo requiere autenticación.
  • Consultar con soporte NLHPC para solicitar el grupo de permisos adecuado y confirmar la disponibilidad del modelo en la carpeta compartida.

¿Por qué me aparece error de asignación de memoria en el proceso de carga?

Posibles causas:

  • El modelo excede la capacidad de RAM asignada. Por ejemplo, algunos modelos (como SDXL en FP16) pueden requerir más memoria de la que solicitaste.

Soluciones:

  • Verificar los requisitos de memoria del modelo consultando su documentación (e.g., SD 2.1 Base requiere ~5.1 GB en FP16, mientras que modelos más grandes podrían necesitar GPU adicionales).
  • Reservar al menos 8 CPU por cada GPU solicitada y asignar memoria acorde al cálculo: Memoria requerida.
  • Revisar y, de ser necesario, aumentar los recursos en el script SBATCH.

Otros Enlaces

OLLAMA API

Diffusers

vLLM API con módulos de software