メインコンテンツへスキップ
Colab で試す Hugging Face Diffusers は、画像や音声の生成、さらには分子の 3D 構造まで、最先端の事前学習済み拡散モデルのための定番ライブラリです。W&B のインテグレーションを使うと、使いやすさを損なうことなく、インタラクティブで一元化されたダッシュボード上で、実験の柔軟でリッチなトラッキング、メディアの可視化、パイプライン構成、そして設定管理を行えます。

たった2行で高度なロギングを実現

実験に関連するすべてのプロンプト、ネガティブプロンプト、生成メディア、そして設定を、コードを2行追加するだけで記録できます。ロギングを始めるための2行のコードは次のとおりです。
# autolog関数をインポートする
from wandb.integration.diffusers import autolog

# パイプラインを呼び出す前にautologを呼び出す
autolog(init=dict(project="diffusers_logging"))
実験結果のログ

はじめに

  1. diffuserstransformersacceleratewandb をインストールします。
    • コマンドライン:
      pip install --upgrade diffusers transformers accelerate wandb
      
    • ノートブック:
      !pip install --upgrade diffusers transformers accelerate wandb
      
  2. autolog を使用して W&B の run を初期化し、サポートされているすべてのパイプライン呼び出しの入力と出力を自動で追跡します。 autolog() 関数は init パラメータ付きで呼び出すことができます。init には、wandb.init() に必要なパラメータの辞書を渡します。 autolog() を呼び出すと、W&B の run が初期化され、サポートされているすべてのパイプライン呼び出しの入力と出力が自動で追跡されます。
    • 各パイプライン呼び出しはワークスペース内の専用の table に記録され、そのパイプライン呼び出しに関連付けられた config は、その run の config 内の workflow リストに追加されます。
    • プロンプト、ネガティブプロンプト、および生成されたメディアは wandb.Table にログされます。
    • seed やパイプラインアーキテクチャなど、実験に関連するその他すべての config は、その run の config セクションに保存されます。
    • 各パイプライン呼び出しで生成されたメディアは、その run の media panels にもログされます。
    サポートされているパイプライン呼び出しの一覧を確認できます。このインテグレーションに新機能をリクエストしたい場合や、関連するバグを報告したい場合は、W&B GitHub issues ページで issue を作成してください。

使用例

自動ロギング

以下は、自動ロギング機能がどのように動作するかを示す、エンドツーエンドの簡単な例です。
import torch
from diffusers import DiffusionPipeline

# autolog 関数をインポート
from wandb.integration.diffusers import autolog

# pipeline を呼び出す前に autolog を呼び出す
autolog(init=dict(project="diffusers_logging"))

# diffusion pipeline を初期化
pipeline = DiffusionPipeline.from_pretrained(
    "stabilityai/stable-diffusion-2-1", torch_dtype=torch.float16
).to("cuda")

# prompt、negative prompt、および seed を定義
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)

# 画像を生成するために pipeline を呼び出す
images = pipeline(
    prompt,
    negative_prompt=negative_prompt,
    num_images_per_prompt=2,
    generator=generator,
)
  • 単一の実験結果:
    Experiment results logging
  • 複数の実験結果:
    Experiment results logging
  • 実験の設定:
    Experiment config logging
IPython notebook 環境で pipeline を呼び出す場合は、その後に明示的に wandb.Run.finish() を呼び出す必要があります。python スクリプトを実行する場合は、この呼び出しは不要です。

複数パイプライン ワークフローのトラッキング

このセクションでは、典型的な Stable Diffusion XL + Refiner ワークフローにおける autolog 機能の使用例を示します。このワークフローでは、StableDiffusionXLPipeline によって生成された潜在表現が、対応する refiner によって精緻化されます。
import torch
from diffusers import StableDiffusionXLImg2ImgPipeline, StableDiffusionXLPipeline
from wandb.integration.diffusers import autolog

# 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()

# 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"

# ランダム性を制御して実験を再現可能にする。
# シードはWandBに自動的にログされる。
seed = 42
generator_base = torch.Generator(device="cuda").manual_seed(seed)
generator_refiner = torch.Generator(device="cuda").manual_seed(seed)

# Diffusers向けWandB Autologを呼び出す。これにより、プロンプト、生成画像、
# パイプラインアーキテクチャ、および関連するすべての実験設定がW&Bに自動的にログされ、
# 画像生成実験の再現、共有、分析が容易になる。
autolog(init=dict(project="sdxl"))

# ベースパイプラインを呼び出して潜在変数を生成する
image = base_pipeline(
    prompt=prompt,
    negative_prompt=negative_prompt,
    output_type="latent",
    generator=generator_base,
).images[0]

# リファイナーパイプラインを呼び出して精緻化された画像を生成する
image = refiner_pipeline(
    prompt=prompt,
    negative_prompt=negative_prompt,
    image=image[None, :],
    generator=generator_refiner,
).images[0]
  • Stable Diffusion XL + Refiner を用いた実験例:
    Stable Diffusion XL experiment tracking

その他のリソース