🧑‍🎨

Macのローカル環境でSDXL Turboを実行する

2023/11/29に公開

この記事について

この記事ではM1/M2/M3のMacのローカルでSDXL Turboを実行する方法を解説します。
公式のコードはMac環境では使えないため、Mac用に改変しています。

現状はMac環境の方が効率が悪いとはいえ、
筆者の環境(M1-Pro 32GB)の環境でもtext to imageで1秒、image to imageで2秒なのでかなり未来感があります。

公式のURL

この記事は公式のコードや実行環境をベースに記載しています。
詳細な技術情報は公式のサイトに記載がありますので、ぜひ公式のサイトも見てみてください。

https://ja.stability.ai/blog/sdxl-turbo

環境構築

細かい部分は別の記事を参考にしてください。
HuggingFaceの設定が必要になりますので、未設定の場合はこちらの記事を参考にしてください。
https://zenn.dev/michy/articles/102a0558096199

仮想環境を作る

ターミナルで以下を実行

python -m venv env

仮想環境を起動

. ./env/bin/activate

仮想環境に必要なライブラリをインストール

最後は公式のコードそのままです。

pip install --upgrade pip
pip install jupyter notebook
pip install diffusers transformers accelerate --upgrade

notebook環境を起動

vscodeやブラウザなどでnotebook環境を構築してください。

実行コード

text to imageの場合

初回起動時のみファイルのダウンロードなどに時間がかかります。
一度ファイルやモデルのロードが終わったら2回目以降は最終行だけ実行すればOKです。

from diffusers import AutoPipelineForText2Image
import torch

pipe = AutoPipelineForText2Image.from_pretrained("stabilityai/sdxl-turbo", torch_dtype=torch.float32, variant="fp32")
pipe.to("mps")

prompt = "A cinematic shot of a baby racoon wearing an intricate italian priest robe."

image = pipe(prompt=prompt, num_inference_steps=1, guidance_scale=0.0).images[0]

アウトプット

1秒でこのクオリティは本当にすごいですね。

image to imageの場合

インプット画像は公式のものをお借りしています。

from diffusers import AutoPipelineForImage2Image
from diffusers.utils import load_image
import torch

pipe = AutoPipelineForImage2Image.from_pretrained("stabilityai/sdxl-turbo", torch_dtype=torch.float32, variant="fp32")

init_image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/cat.png").resize((512, 512))

prompt = "cat wizard, gandalf, lord of the rings, detailed, fantasy, cute, adorable, Pixar, Disney, 8k"

image = pipe(prompt, image=init_image, num_inference_steps=2, strength=0.5, guidance_scale=0.0).images[0]

アウトプット

こちらは2秒で完成。もう少しコードを加工して、手書きの画像と連動させると手書き画像をリアルタイムで反映していくこともできそうです。

まとめ

いかがだったでしょうか?SDXL-Turboの、あまりの速さに私は感動しました!
SDXLは環境を整えたもののスペック不足で出力が遅く使えていなかったのですが、ここまで来るとSDXL移行が見えてきますね!

私のTwitterではLLMに限らず、AIを活用した業務改善情報の発信をしておりますのでご興味のある方は是非フォローをお願いします。
https://twitter.com/Linus_lab

Discussion