画像生成AIのStable Diffusionがオープンソース化され、8月22日に公開されました。商用の使用も許可されていることから多くの注目を集めているようです。
一つの時代の始まりであると評論している人もいるようで、AIムーブメントのパワフルさとスピード感を感じているところです。
北九州でも、九州工業大学の学生さんがLINEのチャットボット経由でStable Diffusionを使えるサービスを開発したということで、こちらも注目されていますね。
M1 MacBook Proで動かしたい
そんなStable Diffusionですが、我がM1 MacBook Pro 14インチ(M1 Max 24コア)でも動かしたいと思いまして、先週いろいろやってみました。M1 Macだと一筋縄でいかないところがあり、少し苦労したのですが、動かすことができました。
なかなかブログに書く時間がなかったのですが、ようやっと時間が取れたので、まとめておこうと思います。
参考にさせていただいたのは、こちらのZennの投稿です。
基本、こちらの投稿で良いのですが、環境の違いもありまったく同じというわけではありませんでした。(私はPython環境をASDFで作っていたりします。)
動作環境
- MacBook Pro 14インチ
- M1 Max 10コアCPU/24コアGPU/16コアNeural Engine
- メモリ32GB
- arm64環境(archをx86_64に切り替えたりはしていない環境)
- ASDF
- miniforge3-4.10.3-10
- Python 3.9.13
Stable Diffusionの環境構築
Stable Diffusionのダウンロードは公式のリポジトリからではなく、M1 Mac用にカスタムしている方のリポジトリから行います。
apple-sillicon-mps-supportブランチをチェックアウトします。
git clone https://github.com/magnusviri/stable-diffusion.git
cd stable-diffusion
git checkout apple-silicon-mps-support
参考にしたサイトにrustの導入について書いてあったので、Homebrewを使って入れておきます。
実はいろいろと試行錯誤しているのですが、onnxのインストールにハマるので、こちらを参考にcmakeとprotobufをインストールしました。
brew install rust cmake protobuf
grpcioの導入にもハマりました。こちらを参考に、環境変数の設定を行います。
export GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=1
export GRPC_PYTHON_BUILD_SYSTEM_ZLIB=1
Stable Diffusionに必要な諸々のパッケージは、environment-mac.yamlにまとまっているので、それを使ってconda仮想環境上にインストールします。
ldmという名前の仮想環境ができるので、インストールが終わったら有効化します。
conda env create -f environment-mac.yaml
conda activate ldm
学習モデルのダウンロード
Stable Diffusionの学習モデル(学習済みのWeightファイル)は、Huggigfaceからダウンロードできます。事前にHuggigfaceのユーザー登録と、プロジェクトへの参加が必要になります。
models/ldm
配下に学習モデルのリポジトリをクローンし、ディレクトリ名の変更と、sd-v1-4.ckptをmodel.ckptとしてシンボリックリンクを作成します。(この後のスクリプトがmodel.ckptというファイル名を指定しているようです。)
cd models/ldm
git clone https://huggingface.co/CompVis/stable-diffusion-v-1-4-original
mv stable-diffusion-v-1-4-original stable-diffusion-v1
cd stable-diffusion-v1
ln -s sd-v1-4.ckpt model.ckpt
画像を生成してみる
最初にクローンしたstable-diffusionのルートディレクトリに戻って、txt2imgを起動すると、パラメータで指定したテキストに沿った画像を生成してくれます。
python scripts/txt2img.py --prompt "coffee cup on wood table" --plms
txt2img.pyには、いくつかのパラメータがあります。例えば、生成する画像の幅と高さは、--W
と--H
で指定できます。デフォルトはどちらも512pxになっているようです。(ただ、画像サイズを大きくすると、その分だけメモリも使うようでメモリ不足のエラーで落ちるということもあるようです。)
めったに熱くならないMacBook Proなのですが、パームレストのあたりがほんのり熱くなります。結構な性能を食うようです。ただ、ファンが煩くなるというほどではないようです。
5分ほど待つと、outputs/txt2img-samples
ディレクトリにグリッド画像が生成されます。完璧。
また、outputs/txt2img-samples/samples
ディレクトリに、グリッド画像を構成していた6枚の画像がそれぞれ生成されています。
このクオリティで画像が出てくると、素材集のサイトとか要らないかも・・・と思ってしまいますね。