Stable Diffusion 3.5 の参照実装を git clone して Google Colab PRO で動かす (2)

1. 概要

こちらのブログに記載した内容の続きになります。

上記のブログでは、2025年12月21日(日)に開催予定の第10回 岐阜AI勉強会のため、Stability AI の Stable Diffusion 3.5 の参照実装を git clone して Google Colab PRO で動かす準備をしました。

上記のブログの方法では、最後のコードセルの下記のコマンドで画像生成を実行する際、 Stable Diffusion 3.5 Medium、T5-XXL等の training 済みモデルをロードし直す必要がありました。一回の画像生成に Google Colab PRO で L4 GPU を利用する条件で 2 分以上の時間を要していました。

python3 sd3_infer.py --prompt "$prompt" --model /content/models/sd3.5_medium.safetensors --model_folder /content/models --steps 28

ちょっとした修正ですが、モデルロード後の SD3Inferencer のインスタンスをグローバル変数として保持し、モデルロード済みの状態から画像生成を実行できるようにしました。

このブログにはその手順を記します。

2. Stability AI の参照実装のスクリプトでモデルロード済みの状態から画像生成を実行

こちらのリンク先の Google Colab のページを開き、順にコードセルを実行していきます。

「4. 必要な python package をインストール」まではこちらのブログに記載した内容と同様です。

「4. 必要な python package をインストール」まで実行したら sd3_infer.py を編集し、スクリプト実行後に SD3Inferencer のインスタンス及び画像生成メソッドのパラメータを他のコードセルから参照できるようにします。SD3Inferencer のインスタンス及び画像生成メソッドのパラメータをグローバル変数にセットすることで他のコードセルからの参照を可能にします。

3.1. sd3_infer.py の編集

下記のようなグローバル変数 SD3_5_inferencer, SD3_5_sanitized_prompt, …, SD3_5_skip_layer_config を用意し、main 関数を下記のように書き換えます。

SD3_5_inferencer = SD3Inferencer()
SD3_5_sanitized_prompt = None
SD3_5_prompts = None
SD3_5_width = None
SD3_5_height = None
SD3_5_steps = None
SD3_5_cfg = None
SD3_5_sampler = None
SD3_5_seed = None
SD3_5_seed_type = None
SD3_5_out_dir = None
SD3_5_controlnet_cond_image = None
SD3_5_init_image = None
SD3_5_denoise = None
SD3_5_skip_layer_config = None

@torch.no_grad()
def main(
    ...
):
    assert not kwargs, f"Unknown arguments: {kwargs}"
    ...

    SD3_5_inferencer.load(
        model,
        vae,
        _shift,
        controlnet_ckpt,
        model_folder,
        text_encoder_device,
        verbose,
    )

    ...

    os.makedirs(out_dir, exist_ok=False)

    global SD3_5_sanitized_prompt
    SD3_5_sanitized_prompt = sanitized_prompt
    
    global SD3_5_prompts
    global SD3_5_width
    global SD3_5_height
    global SD3_5_steps
    global SD3_5_cfg
    global SD3_5_sampler
    global SD3_5_seed
    global SD3_5_seed_type
    global SD3_5_out_dir
    global SD3_5_controlnet_cond_image
    global SD3_5_init_image
    global SD3_5_denoise
    global SD3_5_skip_layer_config
    
    SD3_5_prompts = prompts
    SD3_5_width = width
    SD3_5_height = height
    SD3_5_steps = _steps
    SD3_5_cfg = _cfg
    SD3_5_sampler = _sampler
    SD3_5_seed = seed
    SD3_5_seed_type = seed_type
    SD3_5_out_dir = out_dir
    SD3_5_controlnet_cond_image = controlnet_cond_image
    SD3_5_init_image = init_image
    SD3_5_denoise = denoise
    SD3_5_skip_layer_config = skip_layer_config
    
    SD3_5_inferencer.gen_image(
        prompts,
        width,
        height,
        _steps,
        _cfg,
        _sampler,
        seed,
        seed_type,
        out_dir,
        controlnet_cond_image,
        init_image,
        denoise,
        skip_layer_config,
    )

補足:
Google Drive のファイルは Google Drive for Desktop をインストールすれば、Windows 又は Mac の PC から G ドライブのファイルとして任意のエディターで編集できます。

3.2. Stable Diffusion 3.5 Medium を使用した SD3Inferencer のインスタンスを生成して画像を生成

上記 3.1 で書き換えた Google Drive 上の sd3_infer.py を下記のコードセルで実行します。下記のコードセルを実行すると、グローバル変数 SD3_5_inferencer, SD3_5_sanitized_prompt, …, SD3_5_skip_layer_config に SD3Inferencer のインスタンス及び画像生成メソッドのパラメータがセットされ、他のコードセルから参照できるようになります。

%cd /content/drive/MyDrive/sd3.5_custom/sd3.5/
%run sd3_infer.py --prompt "Stylish modern typography. The phrase 'Gifu AI Study Group' centered on a simple light background." --model /content/models/sd3.5_medium.safetensors --model_folder /content/models --steps 28
3.3. 生成済みの SD3Inference のインスタンスとグローバル変数に格納したパラメータを使用して画像を生成

下記のコードセルを実行し、生成済みの SD3Inference のインスタンスとグローバル変数に格納したパラメータを使用して画像を生成します。

out_dir = os.path.join("outputs",
                       "sd3.5_medium",
                       os.path.splitext(os.path.basename(SD3_5_sanitized_prompt))[0][:50]
                       + datetime.datetime.now().strftime("_%Y-%m-%dT%H-%M-%S"),
                       )

os.makedirs(out_dir, exist_ok=False)

SD3_5_inferencer.gen_image(
    SD3_5_prompts,
    SD3_5_width,
    SD3_5_height,
    SD3_5_steps,
    SD3_5_cfg,
    SD3_5_sampler,
    SD3_5_seed,
    SD3_5_seed_type,
    out_dir,
    SD3_5_controlnet_cond_image,
    SD3_5_init_image,
    SD3_5_denoise,
    SD3_5_skip_layer_config
)

SD3_5_inferencer にはモデルロード済みの SD3Inference のインスタンスがセットされています。モデルロード済みの状態から約 30 秒ほどで画像生成処理が完了します。上記のコードセルを繰り返し実行すると、モデルロード済みの状態から画像生成処理を繰り返し実行することができます。

実行時に前回保存した画像を上書きしてしまわないよう、出力ディレクトリを新たに用意して画像を保存するようにしています。

下の画像は出力された生成画像の例になります。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA