目次

M1 MacbookAir で Stable Diffusionを動作させる


M1 MacBookAirでStable Diffusionを動作させて試した実施メモ。特に、各画像の作成にどのくらいに時間がかかるかのメモ

実施環境は、MacbookAir(M1 2020) ,16 GBメモリ,OS Ventura 13.0(22A380)である。

Stable Diffusionのインストール

インストール方法は先人の知恵をバリバリ借りた。ほとんどQiitaの記事の通りで何もする必要がなかった

M1 Mac に Stable Diffusion をインストールする - Qiita

記事の内容は、自分のための備忘録となる。インストールの主な流れhomebrew で必要なソフトウェアのインストールStable Diffustion のソースコードを取得miniconda …

実際、2022年11月5日時点では以下のコマンドでインストールが完了した。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
brew install python cmake protobuf rust
git clone -b apple-silicon-mps-support https://github.com/bfirsh/stable-diffusion.git
cd stable-diffusion
brew install miniconda
mkdir -p models/ldm/stable-diffusion-v1
conda env create -f environment-mac.yaml
conda init zsh
source ~/.zshrc
conda activate ldm
pip install -r requirements.txt

この後、手順通りに、Hugging Faceの学習データをダウンロード&格納する。

その後、サンプル生成のため、以下のコマンドを実行したところ、一時的にPYTORCH_ENABLE_MPS_FALLBACK=1を指定するようにエラーが戻ってきた。

1
2
3
python scripts/txt2img.py --prompt "a red juicy apple floating in outer space, like a planet" --n_samples 1 --n_iter 1 --plms

>NotImplementedError: The operator 'aten::index.Tensor' is not current implemented for the MPS device. If you want this op to be added in priority during the prototype phase of this feature, please comment on https://github.com/pytorch/pytorch/issues/77764. As a temporary fix, you can set the environment variable `PYTORCH_ENABLE_MPS_FALLBACK=1` to use the CPU as a fallback for this op. WARNING: this will be slower than running natively on MPS.

とりあえず色々と試すのにあたり、GPUにこだわる必要はないので、一時的にPYTORCH_ENABLE_MPS_FALLBACK=1を付与して試すことにする。具体的には、

1
2
3
4

PYTORCH_ENABLE_MPS_FALLBACK=1 python scripts/txt2img.py \
--prompt "a red juicy apple floating in outer space, like a planet" \
--n_samples 1 --n_iter 1 --plms

である。上記のコマンドで、時間は8分23秒ほどで、下記の画像が出力された。バッテリーの使用率は数%しか減っていない。

https://res.cloudinary.com/dlhmnejhz/image/upload/v1667709162/grid-0000_p8kyuy.png

https://res.cloudinary.com/dlhmnejhz/c_scale,f_auto,q_auto,w_1200/grid-0000_p8kyuy.png
a red juicy apple floating in outer space, like a planet

パラメータについて

パラメータについては、こちらを参考にした

ただ、M1 MacBookAirではメモリが足りないからか、512x1024画像や、同時に4枚以上の画像を生成しようとするとメモリ不足で生成が完了しない。色々と試した結果、320x960 サイズの画像で同時に4枚生成するのが良さそうである。

Stable Diffusion コマンドまとめ

お知らせ 新たにGUI付きの構築方法を公開しました。 良ければ御覧ください 前回Stable Diffusionの構築から画像の作成方法を解説しました。 今回はコマンドの指示や意味を解説したいと思います。 テキストについて コマンドプロンプ

実際に以下のコマンドをバッテリー状態で19分30秒ほどで画像が生成された。バッテリーは94%->91%とやはりほとんど減っていない。

1
2
3
PYTORCH_ENABLE_MPS_FALLBACK=1 python scripts/txt2img.py \
--prompt "a red juicy apple floating in outer space, like a planet" \
--plms --H 320 --W 960 --n_samples 2 --n_iter 2
https://res.cloudinary.com/dlhmnejhz/c_scale,f_auto,q_auto,w_1200/grid-0002_gf8djc.png
a red juicy apple floating in outer space, like a planet

サンプルを増やすと時間もかかる。以下のコマンドで30分9秒。バッテリーは20%ほど消費した。

1
2
3
PYTORCH_ENABLE_MPS_FALLBACK=1 python scripts/txt2img.py \
--prompt "landscape taken by Caanon EOS 5D Mark4 and SIGMA Art Lens 35mm F1.4 DG HSM, F1.4, ISO 200 Shutter Speed 2000 --ar 16:9"  \
--plms --H 320 --W 960 --n_samples 2 --n_iter 2
https://res.cloudinary.com/dlhmnejhz/c_scale,f_auto,q_auto,w_1200/grid-0007_kolx1k.png
landscape taken by Caanon EOS 5D Mark4 and SIGMA Art Lens 35mm F1.4 DG HSM, F1.4, ISO 200 Shutter Speed 2000 –ar 16:9

プロンプトについて

どのような画像を生成するか、そのための方向性は深津さんのnoteが参考になった。特に、

真に覚えるべきノウハウは、「新しいブラックボックス技術に遭遇したとき、如何に短時間で挙動の仮説をたて、暫定的に制御下におくか?」だとおもおう。このテクニックの再現性こそが重要だ思う。

魔術として理解するお絵描きAI講座 より

については、ストンと入ってきた。この考え方を持って、今の若者が画像生成AIと親しむと、5年10年後のデザイナーには、絵を描くスキルはないけれど、AIに命令を与えるのに特化したデザイナーといったカテゴリーがでてくるに違いない。

魔術として理解するお絵描きAI講座|深津 貴之 (fladdict)

やればやるほど呪術化する、AI画像錬成について。 以下は、その道の専門家にはメッチャ怒られるかもしれない、雑なロジックと制御講座。 いちおうメジャーなサービスでは、共通して動作するノウハウ(DALL-E2, MidJourney, StableEiffusion, DiscoDiffusion, crayon, dall-e mini 他)。 雑に理解する画像AIのしくみ 対話型のAIにとって、呪文とは画像錬成の方向性を定めるものにすぎない。 たとえば、以下は「I love apple」で錬成された画像の例である。どうにも、ふわっとしたものが出てくる I Love A

それどころか、小学生とか中学生とかが、これらのAIにどのようなプロンプトを与えるとどのような画像が出てくるか、そういった夏休みの自由研究がでてくることも容易に考えられる。

https://res.cloudinary.com/dlhmnejhz/c_scale,f_auto,q_auto,w_1200/grid-0004_pipze6.png
landscape ,White Whale ,Purple Octopus by Hokusai and Vincent Willem van Gogh