Stable diffisionとは
最近色々使われている、お絵描きAIソフト。
今回自分はMacBookProで構築していきます。色々な方法がネットにあり試してみたのですが、今回はその中でもMacbookProが簡単にローカルで実行できる方法を記載します。
使用した環境
-
M1Pro搭載MacBookPro
- OS: Monterey,version: 12.6
- メモリ:16GB
- Cpu: 8Core
-
python
- version: 3.10.8
-
stablediffusion
- apple-silicon-mps-support https://github.com/bfirsh/stable-diffusion.git
-
モデル
- https://huggingface.co/CompVis/stable-diffusion-v-1-4-original
- *現在は自分の趣味で、waifudiffusionを使っています。
モデルの取得
モデルに関しては、Mac、WindowsなどのOSによる差異はないです。
通常のstablediffusionをダウンロードする場合は、以下のサイトからモデルをダウンロードします。下にあるwaifudiffusionは、アニメ調の女子を描くのに適したモデルです。
ログインした後は、Git lfsでクローンするか、Download the weightsからモデルを
ダウンロードします。この時、モデルがsd-v1-4.ckptと、sd-v1-4-full-ema.ckpt
の二つがありますが、どちらを選択しても動作します。自分はfull-emaの方をダウンロードしました。
環境構築
モデルをダウンロードするために、git lfsをダウンロードする必要があります。(Zipでダウンロードする事も可能。)
まずはHomeBrewをアップデートする。
HomeBrewがない時はこのリンクからインストールする。http://brew.sh/index_ja.html
brew update
そして、git-lfsをインストールする。
brew install git-lfs
最新のPythonをインストールする。
brew install python
依存関係をインストールするためにVirtualenvをセットアップする。
python3 -m pip install virtualenv
python3 -m virtualenv venv
最新のPythonをダウンロードした後、StableDiffusionのコードをクローンします。
git clone -b apple-silicon-mps-support https://github.com/bfirsh/stable-diffusion.git
その後、モデルを置くディレクトリを作成します
cd stable-diffusion
mkdir -p models/ldm/stable-diffusion-v1/
次に、実行環境をActiveにします。
source venv/bin/activate
Pythonパッケージのインストール・管理システムであるpipから依存関係をインストールします。
pip install -r requirements.txt
この時、Failed building wheel for onnxとエラー文が出る時は、以下のパッケージをインストールしてください。
brew install Cmake protobuf rust
先ほどダウンロードしたモデルを、上記で作成したディレクトリmodels/ldm/stable-diffusion-v1/に「model.ckpt」という名前にリネームして保存します。
これでセットアップは完了です。
以下のような形でコードを実行してみると、、、
python scripts/txt2img.py \
--prompt "a red juicy apple floating in outer space, like a planet" \
--n_samples 1 --n_iter 1 --plms
/stable-diffusion/outputs/txt2img-samples/samples
に画像が出力されています。ちなみに自分はこんな感じ。

出力にかかる時間はおよそ5分ほどです。Mac用のコードをちゃんとクローンできていれば、GPUをちゃんと使ってくれます。(違うコードで行った場合は1時間ほどかかっていました。)

2回目以降に実行する場合
最初に構築したstablediffusionのディレクトリに移動する。
cd stable-diffusion/
そして、環境をAcrtiveにする。
source venv/bin/activate
そして、絵画の生成コマンドを実行する。プロンプトを色々変えてみると、それに合った絵が出力される。ちなみに--n_samplesはサンプリングの回数、--n_iterは出力の回数であり、2とか3で試したら凄い時間がかかってしまった。1にするのが一番早いと思われる。
python scripts/txt2img.py \
--prompt "好きな文字列" \
--n_samples 1 --n_iter 1 --plms
参考サイト
