MacでStable Diffusion(2)
AppleからリリースされたCore ML Stable Diffusionも試してみました。
テスト環境 | |
---|---|
Model | Macbook Pro 14 2021 |
Chip | Apple M1 MaxCPU(高性能コア×8 + 高効率コア×2) GPU(32コア) |
Memory | 64GB |
Storage | 4TB |
OS | macOS Ventura 13.1 |
インストール
rustを使うらしいのでインストールの確認
% source "$HOME/.cargo/env"
% rustup toolchain list
stable-aarch64-apple-darwin (default)
既にインストールされた環境でしたが、もしrustがインストールされていない場合は
% brew install rust
一応、専用のPython環境を作成しておきます。
% conda create -n coreml_stable_diffusion
% conda activate coreml_stable_diffusion
(coreml_stable_diffusion) % git clone https://github.com/apple/ml-stable-diffusion.git
(coreml_stable_diffusion) % cd ml-stable-diffusion
(coreml_stable_diffusion) % pip install -r requirements.txt
(coreml_stable_diffusion) % pip install -e .
Hugging Faceでユーザー登録を行いトークンを発行してからhuggingface-cliでloginしておきます。
(coreml_stable_diffusion) % pip install huggingface_hub
(coreml_stable_diffusion) % huggingface-cli login
_| _| _| _| _|_|_| _|_|_| _|_|_| _| _| _|_|_| _|_|_|_| _|_| _|_|_| _|_|_|_|
_| _| _| _| _| _| _| _|_| _| _| _| _| _| _| _|
_|_|_|_| _| _| _| _|_| _| _|_| _| _| _| _| _| _|_| _|_|_| _|_|_|_| _| _|_|_|
_| _| _| _| _| _| _| _| _| _| _|_| _| _| _| _| _| _| _|
_| _| _|_| _|_|_| _|_|_| _|_|_| _| _| _|_|_| _| _| _| _|_|_| _|_|_|_|
To login, `huggingface_hub` now requires a token generated from https://huggingface.co/settings/tokens .
Token:
Add token as git credential? (Y/n) Y
Token is valid.
Your token has been saved in your configured git credential helpers (osxkeychain).
Your token has been saved to /Users/satoy11/.huggingface/token
Login successful
Tokenのところで発行されたトークンを入力します。
モデル
学習モデルはCoreML形式に変換する必要がありました。
(coreml_stable_diffusion) % python -m python_coreml_stable_diffusion.torch2coreml --convert-unet --convert-text-encoder --convert-vae-decoder --convert-safety-checker -o <output-mlpackages-directory> --bundle-resources-for-swift-cli --chunk-unet
これが一番のデメリットな気がしますが、変換するのにそれほど時間はかかりませんでした。
そのかわり複数のフォルダーとファイルに分割されていて、ファイルサイズがかなり増えてしまいました。
Appleが事前に変換済みの学習モデルの場合だと元素材の5倍ほど容量が増えています。
- coreml-stable-diffusion-v1-4 21.28GB
- coreml-stable-diffusion-v1-5 26.46GB
- coreml-stable-diffusion-2-base 25.56GB
iOSやSwiftで利用しないでpythonで利用するだけであれば、次の2つのオプションを外すことでファイルサイズは削減できるみたいです。
--bundle-resources-for-swift-cli
--chunk-unet
Appleが事前に変換済みのモデルはこちらで提供されています。
今のところ2.1は用意されてない模様CoreML用に変換された学習モデルは用途別にフォルダーが分かれていますが、split_einsumを使用するとMacの計算能力を最大限に引き出せるという事らしい
- packages Pythonでの利用
- compiled Swiftからの利用
- original CPUとGPUに対応
- split_einsum CPUとGPUに加えてNeural Engineに対応
動作確認
(coreml_stable_diffusion) % python -m python_coreml_stable_diffusion.pipeline --prompt "beautiful night sky, a lot of stars, beautiful, fantancy, vivid, colorful, meteor" -i ./models/coreml-stable-diffusion-v1-4/split_einsum/packages -o ./output --compute-unit ALL --seed 93 --model-version CompVis/stable-diffusion-v1-4
--compute-unit {ALL,CPU_AND_GPU,CPU_ONLY,CPU_AND_NE}
このオプションで計算に使用するリソースをオプションで選べたのでベンチマークしてみました。
--compute-unit ALLだとCPUとGPUだけでなくANE(Apple Neural Engine)も使用されていることがわかりましたが、残念ながら計算速度はCPUとGPUで計算するのが一番早いみたいです。
専用チップなんだからもっと凄い高速に処理できると期待していたので残念… 😅
参考情報
YouTubeのvideoIDが不正です
Discussion