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 秒ほどで画像生成処理が完了します。上記のコードセルを繰り返し実行すると、モデルロード済みの状態から画像生成処理を繰り返し実行することができます。
実行時に前回保存した画像を上書きしてしまわないよう、出力ディレクトリを新たに用意して画像を保存するようにしています。
下の画像は出力された生成画像の例になります。
