🎨

【diffusers0.10.0】M1/M2 MacのローカルにStableDiffusion環境を構築する

2022/09/12に公開

はじめに

この記事では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の方法は少し複雑なのでこちらにまとめました。
https://zenn.dev/michy/articles/064863f3703de6

まとめ

この記事ではdiffusersを使ってMac内にstable-diffusion環境を構築する方法をイチから解説しました。

ご利用のPCの環境によっては必要なライブラリがなくエラーを吐く可能性はありますが、基本的にはエラーの指示に従って必要なライブラリをインストールしていただくことで解決するかと思います。

不明な点や間違いがありましたら、是非コメント欄で教えていただけると幸いです。

Discussion