メインコンテンツまでスキップ

Hugging Face Diffusers

🤗 Diffusers は、最先端の学習済み拡散モデルを用いて画像、音声、さらには分子の3D構造を生成するためのライブラリです。W&Bのインテグレーションにより、リッチで柔軟な実験管理、メディア可視化、パイプラインアーキテクチャ、設定管理をインタラクティブで集中管理されたダッシュボードに追加し、使いやすさを損ないません。

たった2行で次世代のログ

実験に関連する全てのプロンプト、ネガティブプロンプト、生成メディア、設定を、たった2行のコードを追加するだけでログに記録できます。以下の2行のコードを追加するだけでログを開始できます:

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

# パイプラインを呼び出す前に autolog を呼び出す
autolog(init=dict(project="diffusers_logging"))
An example of how the results of your experiment are logged
An example of how the results of your experiment are logged.

はじめに

まず、diffuserstransformersaccelerate そして wandb をインストールする必要があります。

pip install --upgrade diffusers transformers accelerate wandb

autolog はどう機能しますか?

autolog() 関数は init パラメータとともに呼び出すことができ、このパラメータは wandb.init() が必要とするパラメータの辞書を受け付けます。

autolog() が呼び出されると、Weights & Biases の run が初期化され、サポートされているすべてのパイプライン呼び出し からの入力と出力が自動的にトラックされます。

  • 各パイプライン呼び出しはワークスペース内の独自のテーブルに記録され、パイプライン呼び出しに関連する設定はその run の設定のワークフローリストに追加されます。
  • プロンプト、ネガティブプロンプト、および生成されたメディアは wandb.Table に記録されます。
  • シードやパイプラインアーキテクチャを含む実験に関連する他のすべての設定は、その run の設定セクションに保存されます。
  • 各パイプライン呼び出しで生成されたメディアも run 内のメディアパネルに記録されます。
備考

サポートされているパイプライン呼び出しのリストは こちら からご覧いただけます。新機能リクエストやバグ報告については、https://github.com/wandb/wandb/issues にissueを提出してください。

ここに、実際に autolog が動作している簡単なエンドツーエンドの例を示します:

import torch
from diffusers import DiffusionPipeline

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

# パイプラインを呼び出す前に autolog を呼び出す
autolog(init=dict(project="diffusers_logging"))

# 拡散パイプラインを初期化
pipeline = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-2-1", torch_dtype=torch.float16
).to("cuda")

# プロンプト、ネガティブプロンプト、シードを定義
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)

# パイプラインを呼び出して画像を生成
images = pipeline(
prompt,
negative_prompt=negative_prompt,
num_images_per_prompt=2,
generator=generator,
)
An example of how the results of your experiment are logged
An example of how the results of your experiment are logged.
An example of how the results of your experiment are logged
An example of how the results of multiple experiments are logged in your workspace.
An example of how the autolog logs the configs of your experiment
An example of how the autolog logs the configs of your experiment.
備考

IPython ノートブック環境でコードを実行する場合、パイプライン呼び出し後に wandb.finish() を明示的に呼び出す必要があります。Python スクリプトを実行する場合は必要ありません。

マルチパイプラインワークフローの追跡

このセクションでは、StableDiffusionXLPipeline によって生成された潜在変数が対応するリファイナーによって改良される、典型的な Stable Diffusion XL + Refiner ワークフローでの autolog の使用例を示します。

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 を呼び出します。これにより、プロンプト、生成された画像、パイプラインアーキテクチャ、および関連するすべての実験設定が Weights & Biases に自動的に記録されるため、画像生成実験が再現可能で共有されやすく、分析しやすくなります。
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]
An example of how the autolog tracks an Stable Diffusion XL + Refiner experiment
An example of how the autolog tracks an Stable Diffusion XL + Refiner experiment.

追加リソース

Was this page helpful?👍👎