Passer au contenu principal
Hugging Face Diffusers est la bibliothèque de référence pour les modèles de diffusion préentraînés les plus avancés, permettant de générer des images, de l’Audio et même des structures moléculaires 3D. L’intégration W&B apporte un suivi des expériences riche et flexible, la visualisation des contenus multimédias, l’architecture des pipelines et la gestion de la configuration dans des tableaux de bord centralisés interactifs, sans rien sacrifier à cette simplicité d’utilisation.

Une journalisation avancée en seulement deux lignes

Consignez tous les prompts, les prompts négatifs, les médias générés et les configurations liés à votre expérience en ajoutant simplement 2 lignes de code. Voici les 2 lignes de code pour commencer la journalisation :
# importer la fonction autolog
from wandb.integration.diffusers import autolog

# appeler autolog avant d'appeler le pipeline
autolog(init=dict(project="diffusers_logging"))
Enregistrement des résultats de l’expérience

Pour commencer

  1. Installez diffusers, transformers, accelerate et wandb.
    • Ligne de commande :
      pip install --upgrade diffusers transformers accelerate wandb
      
    • Notebook :
      !pip install --upgrade diffusers transformers accelerate wandb
      
  2. Utilisez autolog pour initialiser un run W&B et suivre automatiquement les entrées et les sorties de tous les appels de pipeline pris en charge. Vous pouvez appeler la fonction autolog() avec le paramètre init, qui accepte un dictionnaire de paramètres requis par wandb.init(). Lorsque vous appelez autolog(), un run W&B est initialisé et les entrées ainsi que les sorties de tous les appels de pipeline pris en charge sont automatiquement suivies.
    • Chaque appel de pipeline est suivi dans son propre tableau dans le Workspace, et les configurations associées à cet appel sont ajoutées à la liste des flux de travail dans la configuration de ce run.
    • Les prompts, les prompts négatifs et les médias générés sont enregistrés dans un wandb.Table.
    • Toutes les autres configurations associées à l’expérience, y compris la seed et l’architecture du pipeline, sont stockées dans la section de configuration du run.
    • Les médias générés pour chaque appel de pipeline sont également enregistrés dans les panneaux multimédias du run.
    Vous trouverez une liste des appels de pipeline pris en charge. Si vous souhaitez demander une nouvelle fonctionnalité pour cette intégration ou signaler un bug associé, ouvrez une issue sur la page GitHub issues de W&B.

Exemples

Autologging

Voici un bref exemple de bout en bout illustrant autolog en action :
import torch
from diffusers import DiffusionPipeline

# importer la fonction autolog
from wandb.integration.diffusers import autolog

# appeler autolog avant d'appeler le pipeline
autolog(init=dict(project="diffusers_logging"))

# Initialiser le pipeline de diffusion
pipeline = DiffusionPipeline.from_pretrained(
    "stabilityai/stable-diffusion-2-1", torch_dtype=torch.float16
).to("cuda")

# Définir les prompts, les prompts négatifs et la graine
prompt = ["a photograph of an astronaut riding a horse", "a photograph of a dragon"]
negative_prompt = ["ugly, deformed", "ugly, deformed"]
generator = torch.Generator(device="cpu").manual_seed(10)

# appeler le pipeline pour générer les images
images = pipeline(
    prompt,
    negative_prompt=negative_prompt,
    num_images_per_prompt=2,
    generator=generator,
)
  • Les résultats d’une seule expérience :
    Journalisation des résultats de l’expérience
  • Les résultats de plusieurs expériences :
    Journalisation des résultats de l’expérience
  • La configuration d’une expérience :
    Journalisation de la configuration de l’expérience
Vous devez appeler explicitement wandb.Run.finish() lorsque vous exécutez le code dans un environnement de notebook IPython après avoir appelé le pipeline. Cela n’est pas nécessaire lors de l’exécution de scripts Python.

Suivi des flux de travail à plusieurs pipelines

Cette section illustre l’autolog dans un flux de travail type Stable Diffusion XL + Refiner, où les variables latentes générées par StableDiffusionXLPipeline sont affinées par le refiner correspondant.
import torch
from diffusers import StableDiffusionXLImg2ImgPipeline, StableDiffusionXLPipeline
from wandb.integration.diffusers import autolog

# initialiser le pipeline de base SDXL
base_pipeline = StableDiffusionXLPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0",
    torch_dtype=torch.float16,
    variant="fp16",
    use_safetensors=True,
)
base_pipeline.enable_model_cpu_offload()

# initialiser le pipeline de raffinement SDXL
refiner_pipeline = StableDiffusionXLImg2ImgPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-refiner-1.0",
    text_encoder_2=base_pipeline.text_encoder_2,
    vae=base_pipeline.vae,
    torch_dtype=torch.float16,
    use_safetensors=True,
    variant="fp16",
)
refiner_pipeline.enable_model_cpu_offload()

prompt = "a photo of an astronaut riding a horse on mars"
negative_prompt = "static, frame, painting, illustration, sd character, low quality, low resolution, greyscale, monochrome, nose, cropped, lowres, jpeg artifacts, deformed iris, deformed pupils, bad eyes, semi-realistic worst quality, bad lips, deformed mouth, deformed face, deformed fingers, deformed toes standing still, posing"

# Rendre l'expérience reproductible en contrôlant l'aléatoire.
# La graine sera automatiquement enregistrée dans WandB.
seed = 42
generator_base = torch.Generator(device="cuda").manual_seed(seed)
generator_refiner = torch.Generator(device="cuda").manual_seed(seed)

# Appeler WandB Autolog pour Diffusers. Cela enregistrera automatiquement
# les prompts, les images générées, l'architecture du pipeline et toutes
# les configurations d'expérience associées dans W&B, facilitant ainsi la
# reproduction, le partage et l'analyse de vos expériences de génération d'images.
autolog(init=dict(project="sdxl"))

# Appeler le pipeline de base pour générer les latents
image = base_pipeline(
    prompt=prompt,
    negative_prompt=negative_prompt,
    output_type="latent",
    generator=generator_base,
).images[0]

# Appeler le pipeline de raffinement pour générer l'image affinée
image = refiner_pipeline(
    prompt=prompt,
    negative_prompt=negative_prompt,
    image=image[None, :],
    generator=generator_refiner,
).images[0]
  • Exemple d’expérience Stable Diffusion XL + Refiner :
    suivi des expériences Stable Diffusion XL

Autres ressources