【diffusers0.10.0】M1/M2 MacのローカルにStableDiffusion環境を構築する
はじめに
この記事ではstableDiffusionの環境をDiffusersを使ってMacのローカルに構築する方法と、waifu-diffusionなどの学習済みモデルを切り替えながら画像を出力する方法を解説します。
対象読者
・M1/M2シリーズのMacユーザ
・stable-diffusionとその発展型のモデルを気軽に試せる環境がほしい人
・stable-diffusion環境メンテと最新化に稼働を割く暇がない人
使用するツール
- diffusers(0.10.0)
- homebrew
- pythonの仮想環境(miniforge or miniconda)
- jupyter notebook
Diffusersとは?
推論・学習に必要なツールが機械学習周りの機能一式が揃ったツールボックス。
huggingFaceが提供しており、huggingFaceで配布しているモデルのダウンロードや管理が楽にできる点がポイントです。モデルを変える際に必要なダウンロードとstable diffusionへのリンクを自動で行ってくれるため、モデル切り替えや設定変更が楽にできる点が利点です。
今までWindows他でしか使えませんでしたが、ver0.3.0からmacも対象に入りました。
環境構築方法
M1/M2ユーザが再現性高く構築できるように、最初のhomebrewのインストールから解説します。
すでにpythonの仮想環境をお持ちの場合は、「仮想環境の設定」まで読み飛ばしてください。
Homebrewのインストール
使用するツールインストールするため、macで必須のアプリケーション管理ソフトを予めインストールしておきます。公式リンクのコマンドをそのままコマンドラインに貼り付けて実行してください。
この後brew ~
というコマンドが多数出てきますが、それらは"Homebrewを使ってソフトを最新化やインストールを行う際"に使用します。
huggingFaceにログインする
huggingFaceを利用するためにアカウントを作成し、コマンドライン上でトークンを使ってログインします。ログインにあたって、huggingFaceのアカウントや初期設定が必要になるため以下の手順に従って環境をセットアップしてください。
huggingFaceのトークンを取得する
huggingFaceのアカウントを作成し、トークンの発行ページでトークンを発行します。
トークンに持たせる権限を聞かれたら、一番最小限のread
を選んでおきましょう。
使いたいモデルの利用許諾に同意する
使いたいモデルのページにログインし、利用許諾に同意してください。
特にモデルにこだわりが無ければ、オリジナルのstable-diffusionがおすすめです。
コマンドライン上にhuggingFaceの環境を作る
コマンドラインに以下を入力してください。
git config --global credential.helper
credentialの設定が終わったら以下を入力し、ログインしてください。
途中でトークンを聞かれるので、前項で取得したトークンをコピペすればOKです。
huggingface-cli login
ここまででhuggingFace周りの設定は完了です
python環境の構築
python本体のインストール
コマンドラインに以下を入力してください。
brew update && brew install python3
python仮想環境のインストール
pythonの仮想環境とは、本体にインストールされている環境とは分けてpython環境を構築する際に使用するツールです。慣れていない時は煩わしく思うときもあるかもしれませんが、なにか間違った作業をしてしまっても丸ごと消して最初からやり直すことができる便利な環境なので必ず入れておきましょう。
仮想環境には複数種類がありますが、今回はminiforgeを利用します。以下のコマンドをコマンドラインに入力してください。
brew install miniforge
pythonの仮想環境作る
miniforgeが用意できたら仮想環境を実際に作っていきましょう。
以下のコマンドをコマンドラインに入力してpython3.10が使える環境を作ってください。
※"sdf"の部分は自分で名付けられる仮想環境の名前なので自由に変えて構いません。
conda create --name sdf python=3.10
作成したpythonの仮想環境を起動する
仮想環境が作れたら仮想環境を起動してpythonの環境を整えていきましょう。
前項のコマンドでは仮想環境を作っただけで起動せず放置されている状態なので、仮想環境に入る必要があります。
以下をコマンドラインに入力してください。
※仮想環境の名前をsdfから変えている場合は適宜読み替える
conda activate sdf
起動中の仮想環境の確認方法
minifogeをインストールしたあたりからコマンドラインの先頭に(base)
などの文字列が表示されているかと思います。この先頭についている文字は”コマンドラインが今いる環境”を示しています。
(base)
は仮想環境の外 == 本体の環境 にいることを示しています。
conda activate
で仮想環境に入ると先頭の名前が自分で名付けた仮想環境の名前に変わります。
以降の章で仮想環境の操作をする際は必ず先頭が仮想環境名になっていることを確認するようにしましょう。
仮想環境の設定
PyTorch関連ライブラリのインストール
仮想環境に入った上で以下のコマンドを実行してください。
※従来のβ版インストールは不要になりました!
pip install torch
PyTorchのバージョン確認方法
仮想に入った状態でpip list
と入力すると、仮想環境にインストール済みのライブラリ一覧が表示されます。
リストの中のtorchの横に書いてある数字が今インストールされているPyTorchのバージョンです。
関連ライブラリのインストール
以下のコマンドを実行してください。
pip install transformers
pip install accelerate
pip install scipy
diffusers本体のインストール
以下のコマンドを実行してください。
pip install diffusers
jupyterNotebookのインストール(任意
pythonの実行環境としてjupyter環境をインストールします。
pythonが実行できる環境であれば他のものでも構いませんが、筆者としては読み書きや実験的な操作がしやすいjupyter環境をオススメします。
インストールは以下のコマンドを実行してください。
pip install jupyter
仮想環境の再ログイン
必要性が曖昧ですが、Twitter上では初期設定後に仮想環境に入り直すまでライブラリエラーが発生していたという報告が複数目撃されています。
筆者も同様の状態でハマったため、おまじないとして以下を実施しておくことを推奨します
仮想環境からのログアウト
conda deactivate
仮想環境へのログイン
conda activate sdf
StableDiffusionの実行
仮想環境のセットアップが終わったら実際にstable diffusionを動かしてみましょう。
実行に必要なコマンドは公式のコマンドそのままで問題ありませんが、わからない方は以下のステップで実行しましょう。
jupyter notebookの起動
仮想環境で以下を実行してください。
jupyter notebook
実行後、ブラウザが立ち上がり、ファイルビューアが表示されると思います。
任意のフォルダに移動後、右上メニューの「新規」から「python3」を選んでください。
jupyter notebookでの実行
現れたエディタの最初のセルに以下のコードをそのまま入力し、実行して下さい。
※コードの中身は追って解説するので、まずはそのまま実行でOKです。
初回実行時はモデルのダウンロードを行うため実行に時間がかかるかと思いますが待っていればOKです。二回目以降はすでにダウンロード済みのモデルを使うため、ダウンロードはスキップされます。
from diffusers import StableDiffusionPipeline
# モデルの指定
pipe = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5")
# デバイスの指定。mpsはM1/M2 Macを指す。
pipe = pipe.to("mps")
pipe.enable_attention_slicing()
prompt = "a photo of an astronaut riding a horse on mars"
# modelのウォームアップ。Macの場合は必要
_ = pipe(prompt, num_inference_steps=1)
# 処理の実行
image = pipe(prompt).images[0]
image
コードの補足
モデルの指定
コード内の"runwayml/stable-diffusion-v1-5"
の部分は利用するモデルを選択する項目です。
デフォルトではstable-diffusionのv1.5が入っていますが、利用したいモデルに書き換えることで対象のモデルが変化します。
※利用するモデル毎に許諾が必要なのでhuggingFaceのwebページにアクセスし該当のモデルの許諾をしておいてください。
プロンプト
prompt = "a photo of an astronaut riding a horse on mars"
の部分がAIにどんなイラストを書いてほしいかを入力する部分(いわゆる呪文)です。
描画済みデータ
描画済みのデータはimage
に出力されています。
サンプルのコードでは単にimage
と表示させるだけにしていますが、PC内に保存したい場合は以下のように書き換えることで保存が可能です。
image.save('output.jpg')
img2imgの実行方法
stableDiffusionの醍醐味であるimg2imgの方法は少し複雑なのでこちらにまとめました。
まとめ
この記事ではdiffusersを使ってMac内にstable-diffusion環境を構築する方法をイチから解説しました。
ご利用のPCの環境によっては必要なライブラリがなくエラーを吐く可能性はありますが、基本的にはエラーの指示に従って必要なライブラリをインストールしていただくことで解決するかと思います。
不明な点や間違いがありましたら、是非コメント欄で教えていただけると幸いです。
Discussion