View a markdown version of this page

Genere imágenes por lotes con un modelo de difusión - Deadline Cloud

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Genere imágenes por lotes con un modelo de difusión

En este tutorial se explica cómo generar imágenes por lotes de alto rendimiento en un archivo JSONL de indicaciones mediante un modelo de difusión. El paquete de trabajo por lotes de conversión de texto a imágenes se envía a una flota de GPU de la granja de GitHub Deadline Cloud. El modelo predeterminado es FLUX.2 Klein 4B en Hugging Face, que tiene licencia para Apache 2.0, no está cerrado, se divide en 4 pasos y necesita aproximadamente 13 GB de RAM de vídeo (VRAM).

Cada línea seleccionada en el JSONL se convierte en una tarea de generación. El programador distribuye las tareas entre los trabajadores de la GPU disponibles, y cada uno de ellos carga la canalización de difusión una vez y la reutiliza para cada tarea que ejecuta. Cuando una línea contiene un campo o un caption generated_text campo encadenado a partir del resultado del paquete de inferencia por lotes de vLLM, el trabajo compone el texto sobre la imagen generada en forma de tipografía nítida. Las líneas sin subtítulos producen imágenes puras, por lo que el paquete funciona igual de bien que un generador de lotes de texto a imagen sin formato.

Tiempo estimado: 30 a 60 minutos, incluida la configuración de la granja. La primera ejecución también descarga alrededor de 13 GB de pesos de modelo por trabajador.

La ejecución de este tutorial implica gastos para las instancias de trabajo de la GPU que procesan el trabajo.

Descripción general de

Para completar este tutorial, sigue estos pasos:

  1. Configura tu granja.

  2. Prepara el archivo de entrada.

  3. Envíe el trabajo de generación de imágenes.

  4. Descarga y navega por la galería.

  5. Eliminación de recursos.

Configura tu granja

Necesitas una flota gestionada por servicios con GPU NVIDIA y al menos 32 GB de RAM, y una cola con un entorno de colas integrado que lea y ejecute los parámetros. CondaPackages CondaChannels FLUX.2 El Klein 4B se adapta cómodamente a GPU de 16 GB o más (por ejemplo, L4 o A10G) gracias a la descarga de CPU.

La forma más rápida de conseguir una granja compatible es implementar la plantilla de granja CUDA GitHub, que es la misma CloudFormation plantilla que utiliza el paquete de inferencia por lotes de vLLM. Cuando llegue la pilaCREATE_COMPLETE, configure la CLI de Deadline Cloud para usar la nueva granja:

deadline config set defaults.farm_id FarmId-from-stack-outputs deadline config set defaults.queue_id CUDAQueueId-from-stack-outputs
nota

El paquete incluye un entorno de InstallDeps trabajo en el que se instala PyTorch y se instala la biblioteca de difusores más reciente de git además del entorno conda de Queue en cada sesión, además de descargar cuatro pequeñas fuentes de Google para superponer los subtítulos. Espera entre 30 y 90 segundos de tiempo adicional de configuración por trabajador la primera vez que lo utilices, más la descarga del modelo la primera vez que lo ejecutes. Si su flota se ejecuta en una VPC con acceso restringido a la red, debe preagrupar las dependencias en un canal AMI o conda personalizado, o bien abrir la salida.

Prepara el archivo de entrada

La entrada es un archivo JSONL con un objeto JSON por línea. Cada línea debe tener un prompt campo o un generated_text campo encadenado a partir del resultado del paquete de inferencia por lotes de vLLM:

{"prompt": "A golden hour photo of a sourdough loaf on a linen-covered table", "id": "loaf_01"} {"prompt": "A bakery storefront at sunrise, photorealistic", "caption": "OPEN AT DAWN", "id": "shop_01"} {"prompt": "Write a slogan for sourdough", "id": "001", "generated_text": "Real grain. Real fermentation. Real you.", "style": "rustic flat lay, warm tones"}

Los campos opcionales por línea incluyen, caption para superponer texto, style para anular el sufijo de estilo del nivel de trabajo, y,, y. font width height steps seed El paquete incluye la misma herramienta de creación de avisos sin dependencia que el paquete por lotes de vLLM. tools/prompt_builder.htmlÁbrelo para crear archivos de entrada, importar un JSONL arrastrándolo y soltándolo y añadiendo anulaciones por mensaje.

El sample_prompts.jsonl archivo incluido es una demostración de una campaña de panadería de 10 imágenes: lemas de panadería generados por el paquete de inferencia por lotes de vLLM, con sugerencias de estilo superpuestas para crear imágenes evocadoras.

Envía el trabajo de generación de imágenes

Para enviar con el remitente de la GUI
  1. Desde el directorio del text_to_image_batch paquete, abre el remitente:

    deadline bundle gui-submit .
  2. Elige tu archivo JSONL de entrada. Prueba la demo sample_prompts.jsonl de la campaña de panadería.

  3. Establezca el rango de mensajes (por ejemplo, 1-10 para los 10 primeros mensajes) y seleccione un directorio de salida.

  4. Si lo desea StyleSuffix, ajuste la anchura y la altura. Deja el subtítulo superpuesto como tal true si tu JSONL tiene subtítulos o lemas, o configúralo para que solo genere imágenes. false

  5. Seleccione Enviar.

Si lo prefiere, envíelo con la CLI:

deadline bundle submit . \ --parameter InputFile=$PWD/sample_prompts.jsonl \ --parameter Prompts=1-10 \ --parameter OutputDir=$PWD/output

ChunkSizeLos parámetros Prompts y funcionan de la misma manera que en el paquete de inferencia por lotes de vLLM, mediante la función de fragmentación de tareas de Deadline Cloud. Para obtener más información, consulte Fragmentación de tareas para plantillas de trabajo. El ModelName parámetro acepta todo lo que pueda cargar la biblioteca de difusores, incluidos SDXL Turbo y Stable Diffusion 3.5. Para ver la lista completa de parámetros y los ajustes de otros modelos, consulta la tabla de parámetros en el archivo README de ejemplo, en. GitHub

Descarga y navega por la galería

Para descargar y explorar los resultados
  1. Una vez finalizado el trabajo, ejecuta el comando de descarga desde el mismo directorio que utilizaste en el momento del envío para que la OutputDir ruta termine en el mismo lugar:

    deadline job download-output --job-id job-id
  2. Cada artefacto cae en un output/ subdirectorio de la ruta que hayas establecido. OutputDir Los archivos PNG sin procesar están incluidosoutput/images/, los metadatos combinados están incluidos y output/gallery.html es un visor de galería estático con búsqueda y exportación a CSV. output/output.jsonl

  3. Si las imágenes de la galería no se cargan cuando las abres gallery.html directamente, se trata de una restricción de seguridad del navegador para las file:// URL. En su lugar, publica el directorio:

    cd OutputDir/output && python3 -m http.server 8080 # open http://localhost:8080/gallery.html

Cadena a partir de la inferencia por lotes de VLLM

El flujo clásico empareja este paquete con el paquete de inferencia por lotes de vLLM:

  1. Genere texto con el paquete de inferencia por lotes de vLLM: lemas, subtítulos, descripciones de escenas o texto alternativo. El resultado es con un campo por línea. output.jsonl generated_text Consulte Ejecute la inferencia de LLM por lotes con vLLM.

  2. (Opcional) Abratools/prompt_builder.html, coloqueoutput.jsonl, añada o edite subtítulos, estilos o descripciones visuales por mensaje y vuelva a exportar.

  3. Envíe este paquete con el JSONL como. InputFile El script por tarea se utiliza automáticamente generated_text como subtítulo superpuesto.

Cuando una línea contiene tanto un generated_text eslogan como el LLM originalprompt, el script de la tarea intenta sacar el asunto de la solicitud y usarlo como guía visual para el modelo de difusión, ya que los lemas suelen ser demasiado abstractos para dar al modelo un tema concreto. El trabajador registra el origen de las indicaciones visuales por tarea para que puedas detectar las extracciones incorrectas.

Limpieza

Para evitar cargos continuos, limpia los recursos que creaste para este tutorial:

Para limpiar los recursos del tutorial
  1. Si implementó la CloudFormation plantilla de granja de CUDA, elimine la CloudFormation pila de la CloudFormation consola.

  2. Si usaste una granja existente y creaste una flota de GPU específicamente para este tutorial, detiene o elimina esa flota. Si usaste una flota compartida preexistente, déjala en su lugar.

  3. Elimine los archivos de salida locales si ya no los necesita.

Los siguientes recursos proporcionan información adicional: