1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

M1 ProでStable Diffusionを動かしてみた。

Last updated at Posted at 2022-09-12

はじめに

※2022/09/11時点

話題の文字から画像を生成するツール。

原理わかっていなく、pythonとか機械学習周りとかもさっぱりでしたが、こちらの記事を参考にそのまま作業した所、結構あっさりいけました。
https://vivinko.com/inoue/blog/2022/09/01/162730.html

※参考サイトはM1 Maxで、スペックは少し下です。とはいえM2とかでも可能そう

環境

  • MacBook Pro(14インチ、2021)
    • M1 Pro 10CPU/14GPU
    • メモリ 32GB
  • asdf
    • python (miniforge3-4.10.3-10 :python3.9.7)
      • conda
        • python 3.9.13
    • cmake (latest :3.24.1)
    • rust (latest :1.25.1)
  • brew
    • protobuf

概要

ツール本体と実行に必要なモデルをそれぞれダウンロードして、ツール実行をする

流れ

  1. ローカルPCに環境構築 (python etc...)
  2. gitからツール本体のソースをダウンロード
    1. m1用のブランチがあるので切り替える
      1. ブランチ切り替えないで、protobuf入れれたらwin環境でもできそう
  3. 実行に必要なモデルのダウンロード(git) & 指定階層に配置
    1. サイトでアカウント登録と、ダウンロードするページでユーザー情報共有のチェックが必要。(共有されるのは、メールアドレスと名前くらいかと)
  4. 事前処理用のpythonを実行
  5. 文字 to 画像のpythonを実行

ローカル環境構築

実行用のフォルダ作成

mkdir workspace; cd workspace

各種インストール

※ asdf、gitは入ってる前提

# python
asdf plugin add python
## condaが最初から入っているバージョン
asdf install miniforge3-4.10.3-10
asdf local miniforge3-4.10.3-10
python -V

# cmake
asdf plugin add cmake
asdf install cmake latest
asdf local cmake latest
cmake -V

# rust
asdf plugin add rust
asdf install rust latest
asdf local rust latest
rustup -V

# protobuf
brew install protobuf
# brew doctor見て, brew update等で、先に環境を綺麗にする必要あった。


conda init
# .bash_profileにコマンドが入るっぽい、ターミナル起動時に勝手にbaseって環境になる。
# この時点ではconda環境に入らないまま

ツール整備

本体ダウンロード

git clone https://github.com/magnusviri/stable-diffusion.git
cd stable-diffusion

git checkout apple-silicon-mps-support

conda環境設定

.zprofileに下記追加 (参考サイトの手順通り、おまじないみたいな感じで入れた)

export GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=1
export GRPC_PYTHON_BUILD_SYSTEM_ZLIB=1

yamlをベースにconda環境構築
※ターミナル立ち上げ直す。

conda env create -f environment-mac.yaml
conda activate ldm

切り替わると下記みたいなターミナルの表示になるはず

(ldm) ~/workspace/stable-diffusion $ 

モデル取得

cd models/ldm
git clone https://huggingface.co/CompVis/stable-diffusion-v-1-4-original

7GBほど、結構待つ。(バージョン上がるほど軽くなってくとか)
公式はAPIが先行リリースとかで、クローズドでは1.5はもうありそう。(詳細は末尾のリンク)

mv stable-diffusion-v-1-4-original stable-diffusion-v1
cd stable-diffusion-v1
ln -s sd-v1-4.ckpt model.ckpt

これで準備がほぼ完了。

実行

事前準備

参考記事にはないけど、最初に1回これが必要だった

python scripts/preload_models.py

画像生成

記事や公式とは違うけど、下記パスで実行できた
※デフォ512、指定わかりやすいように例では入れた

python scripts/orig_scripts/txt2img.py --prompt "coffee" --W 512 --H 512 --plms

他のパラメータは公式参照
https://github.com/CompVis/stable-diffusion

image.png

出力先

  • ルートのoutputsフォルダ内に生成されます。
    image.png

まぁまぁ、綺麗に描けたワード

※有志のチートシート参考
https://moritz.pm/posts/parameters

# 城 (3D)
A mysterious Western-style castle floating in the sky | unreal engine, depth of field, 4k, fantasy, lumen reflections, studio quality

# 古民家的(実写)
old house in the mountains | cliff top | Around the Meiji era | Fujifilm XT3

  • 被写体+属性で綺麗になっていきそう。
  • チートシートのワード使って色々試すと面白そうです。
  • パイプやカンマの有効性はイマイチ分かってないですが、前に書くほど優先度が高いみたいです。

実行エビデンス

  • 512x512の生成で
    • 実行時間:6分ほど
    • メモリを20GBくらい使ってた
    • 描画枚数:4〜6枚 (指定なし時)
    • サイズ:512x512(default)
      • 64の倍数で指定できるっぽい
      • 大きいサイズも指定できたけど、メモリ足りないと実行エラーになる
  • 同じワードで同じ画像は生成されなかった
  • ファンが回ってくれた

その他

執筆後に類似記事を探したら、ほぼ同じ内容のものがありました。
https://qiita.com/hevo2/items/c9c611a5f918d36732f3
※記事内にはcliで1枚生成の方法のパラメータ指定方法の記述もあり。

また、この中でweb uiを使う方法が書いてあり、これ使うとすごく便利でした。1枚生成を1分くらいでやってくれました!

python scripts/dream.py --web

localhost:9090
image.png

まとめ

もやもやしたイメージを形にするのとか、こういう感じのが欲しいって場合に今のところ活きそうでした。
(テスト用の画像生成とか)
よりツール化されると、仕事とかでも使いやすいかもです。
※このモデルを元にアイコンまとめて生成、とかサイトデザインを作成とか。そういう時代も来そう。。。

ソースの更新頻度が激しそうで、この手順はそのうち使えなくなりそうですが、現時点の利用例を参考までにって感じです。

最後に、開発会社のインタビュー記事見つけたので、こちらも興味ある方は参考までに。
https://signal.diamond.jp/articles/-/1407

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?