View a markdown version of this page

Générez des images par lots à l'aide d'un modèle de diffusion - Deadline Cloud

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Générez des images par lots à l'aide d'un modèle de diffusion

Ce didacticiel explique comment exécuter la génération d'images par lots à haut débit sur un fichier JSONL contenant des invites à l'aide d'un modèle de diffusion. Vous soumettez le bundle de tâches par lots texte-image GitHub à un parc de GPU de votre ferme Deadline Cloud. Le modèle par défaut est FLUX.2 Klein 4B on Hugging Face, qui est sous licence Apache 2.0, non régulé, distillé en 4 étapes et nécessite environ 13 Go de RAM vidéo (VRAM).

Chaque ligne sélectionnée dans le JSONL devient une tâche de génération. Le planificateur distribue les tâches entre les opérateurs GPU disponibles, et chaque programme de travail charge le pipeline de diffusion une fois et le réutilise pour chaque tâche qu'il exécute. Lorsqu'une ligne contient un caption champ, ou qu'un generated_text champ est enchaîné à partir de la sortie du bundle d'inférence par lots vLLM, le travail compose le texte sur l'image générée sous forme de typographie nette. Les lignes sans légende produisent des images pures, de sorte que le bundle fonctionne aussi bien qu'un générateur de lots texte-image en clair.

Durée estimée : 30 à 60 minutes, configuration de la ferme comprise. La première exécution télécharge également environ 13 Go de poids de modèle par travailleur.

L'exécution de ce didacticiel entraîne des frais pour les instances de travail GPU qui traitent la tâche.

Présentation de

Pour terminer ce didacticiel, procédez comme suit :

  1. Configurez votre ferme.

  2. Préparez le fichier d'entrée.

  3. Soumettez la tâche de génération d'images.

  4. Téléchargez et parcourez la galerie.

  5. nettoyer les ressources.

Configurez votre ferme

Vous avez besoin d'un parc géré par des services avec des GPU NVIDIA et au moins 32 Go de RAM, ainsi que d'une file d'attente avec un environnement de file d'attente conda qui lit CondaPackages les paramètres et les tâches. CondaChannels FLUX.2 Klein 4B s'adapte facilement aux GPU de 16 Go et plus (par exemple, L4 ou A10G) grâce au déchargement du processeur.

Le moyen le plus rapide d'obtenir une batterie de serveurs compatible est de déployer le CloudFormation modèle de batterie de serveurs CUDA GitHub, qui est le même que celui utilisé par le bundle d'inférence par lots vLLM. Une fois la pile atteinteCREATE_COMPLETE, configurez la CLI Deadline Cloud pour utiliser la nouvelle batterie de serveurs :

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

Le bundle comprend un environnement de InstallDeps travail qui installe PyTorch et la dernière bibliothèque de diffuseurs de git en plus de l'environnement conda de la file d'attente à chaque session, et télécharge quatre petites polices Google pour la superposition des sous-titres. Attendez-vous à un temps de configuration supplémentaire de 30 à 90 secondes par utilisateur lors de la première utilisation, en plus du téléchargement du modèle lors de la première exécution. Si votre flotte fonctionne dans un VPC restreint au réseau, vous devez soit préintégrer les dépendances dans un canal AMI ou conda personnalisé, soit ouvrir une sortie.

Préparez le fichier d'entrée

L'entrée est un fichier JSONL avec un objet JSON par ligne. Chaque ligne doit avoir un prompt champ ou un generated_text champ enchaîné à partir de la sortie du bundle d'inférence par lots 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"}

Les champs par ligne facultatifs incluent le texte superposé, caption style pour remplacer le suffixe de style au niveau de la tâche, et, etfont. width height steps seed Le bundle inclut le même outil de création d'invites à dépendance zéro que le bundle par lots vLLM. Ouvrez tools/prompt_builder.html pour créer des fichiers d'entrée, importer un JSONL par glisser-déposer et ajouter des remplacements par invite.

Le sample_prompts.jsonl fichier groupé est une démonstration de 10 images d'une campagne de boulangerie : des slogans de boulangerie générés par le bundle d'inférence par lots vLLM, accompagnés d'astuces de style superposées pour des visuels évocateurs.

Soumettre la tâche de génération d'images

Pour soumettre à l'aide de l'expéditeur de l'interface graphique
  1. Dans le répertoire du text_to_image_batch bundle, ouvrez l'émetteur :

    deadline bundle gui-submit .
  2. Choisissez votre fichier JSONL d'entrée. Essayez la démo sample_prompts.jsonl de la campagne sur les boulangeries.

  3. Définissez la plage d'invites (par exemple, 1-10 pour les 10 premières invites) et choisissez un répertoire de sortie.

  4. Modifiez éventuellement StyleSuffix la largeur et la hauteur. Laissez Overlay Caption activé true si votre JSONL contient des légendes ou des slogans, ou réglez-le sur false pour la génération d'images pures.

  5. Sélectionnez Soumettre.

Vous pouvez également soumettre via l'interface de ligne de commande :

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

Les ChunkSize paramètres Prompts et fonctionnent de la même manière que dans le bundle d'inférence par lots vLLM, à l'aide de la fonction de découpage des tâches de Deadline Cloud. Pour de plus amples informations, veuillez consulter Découpage des tâches pour les modèles de tâches. Le ModelName paramètre accepte tout ce que la bibliothèque de diffuseurs peut charger, y compris SDXL Turbo et Stable Diffusion 3.5. Pour la liste complète des paramètres et les paramètres des autres modèles, consultez le tableau des paramètres dans l'exemple de fichier README sur GitHub.

Téléchargez et parcourez la galerie

Pour télécharger et consulter les résultats
  1. Une fois la tâche terminée, exécutez la commande de téléchargement depuis le répertoire que vous avez utilisé au moment de l'envoi, afin que le OutputDir chemin soit redirigé au même endroit :

    deadline job download-output --job-id job-id
  2. Chaque artefact se trouve dans un output/ sous-répertoire du chemin que vous avez défini. OutputDir Les fichiers PNG bruts sont disponiblesoutput/images/, les métadonnées combinées sont disponibles et il s'output/gallery.htmlagit d'une visionneuse de galerie statique avec recherche et exportation au format CSV. output/output.jsonl

  3. Si les images de la galerie ne se chargent pas lorsque vous l'ouvrez gallery.html directement, il s'agit d'une restriction de sécurité du navigateur sur file:// les URL. Servez plutôt le répertoire :

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

Chaîne à partir de l'inférence par lots vLLM

Le flux classique associe ce bundle au bundle d'inférence par lots vLLM :

  1. Générez du texte à l'aide du bundle d'inférence par lots vLLM : slogans, légendes, descriptions de scènes ou texte alternatif. La sortie est output.jsonl avec un generated_text champ par ligne. Consultez Exécuter une inférence LLM par lots avec vLLM.

  2. (Facultatif) Ouvreztools/prompt_builder.html, déposezoutput.jsonl, ajoutez ou modifiez des légendes, des styles ou des descriptions visuelles par invite, puis réexportez.

  3. Soumettez ce bundle avec le JSONL en tant que. InputFile Le script par tâche est automatiquement utilisé generated_text comme légende de superposition.

Lorsqu'une ligne contient à la fois un generated_text slogan et le LLM originalprompt, le script de tâche essaie de retirer le sujet de la demande et de l'utiliser comme invite visuelle pour le modèle de diffusion, car les slogans sont souvent trop abstraits pour donner un sujet concret au modèle. Le travailleur enregistre la source d'invite visuelle par tâche afin que vous puissiez détecter les erreurs d'extraction.

Nettoyage

Pour éviter des frais récurrents, nettoyez les ressources que vous avez créées pour ce didacticiel :

Pour nettoyer les ressources du didacticiel
  1. Si vous avez déployé le CloudFormation modèle de batterie de serveurs CUDA, supprimez la CloudFormation pile de la CloudFormation console.

  2. Si vous avez utilisé un parc de serveurs existant et créé un parc de GPU spécialement pour ce didacticiel, arrêtez ou supprimez ce parc. Si vous avez utilisé une flotte partagée préexistante, laissez-la en place.

  3. Supprimez les fichiers de sortie locaux si vous n'en avez plus besoin.

Les ressources suivantes fournissent des informations supplémentaires :