MarkdownとBullet Journal

いわゆるプログラマーのつぶやき

【初心者向け】M1/M2 MacでStable/waifu/Trinart Diffusionを動かす手順

MacのStable / Waifu / Trinart Diffusionで作成したAI画像

最初に

今回の記事は、下記URLの優れた導入記事を参考に、初心者でもM1 MacにStable Diffusionをインストールできる様に、自分自身で行った手順を全て解説している。よって説明は未経験者用に色々補足や追記で量が多く、くどい所もあるため経験者の方は元記事の方がオススメ。

zenn.dev

想定する読者

  • 今までMac上でAI環境を試した事がないが、一度やってみたい
  • Stable,Waifu,Trinart等を簡単な手順で切り替えて使いたい
  • シェルの簡単な操作ならできる
  • 英文のエラーメッセージの解決方法をネットで探せる

ローカル環境でStable Diffusionを実行

AI画像生成を行う場合、以下の様な選択肢がある。

  1. webサービス利用、ログイン不要、無料、お試しサイト
  2. webサービス利用、ログイン必要、有料(初期は無料)、MidJourney, DreamStudio, DALL-E2など
  3. クラウドで実行、Google colab + Stable Diffusionなど
  4. ローカルで実行、WindowsMacで動作

記載の順に利用方法が難しくなる。ただ3の「クラウド実行」は意外に簡単で、トラブっても簡単に破棄して一からやり直せるのでお勧めだ。

それに対して4の「ローカル実行」は、自分のPCにインストールする関係で、環境の違い、バージョンの違い、手順の違いなどでエラーが出やすく、そのエラーの解決方法を探すのも中々骨が折れるだろう。M1 Macでの画像生成時間も5分程度かかる。

そんなデメリットがあってもローカルにインストールしたいモチベーションは以下になるだろう。

ローカルPCで実行したいモチベーション

  1. 純粋な技術的興味
  2. webでの提供やネットが停止してもPC版なら使い続けられる
  3. 制限フィルターを外したい
  4. Stable Diffusionと連携するアプリを使いたい(PhotoshopCLIP STUDIO PAINT:クリスタ)

私の場合は、1と4が理由で、Stable / Waifu / Trinart などをPhotoshopやクリスタのプラグインで使いたいと考えている。とは言ってもいずれPhotoshopやクリスタ側に追加実装される気もするが。。。

初心者の方は先にGoogle colabの体験を推奨

可能なら上記3のクラウド版を先に試された方が良いと思う。こちらで十分な用途もあるし、簡単・無料・高速に実行できて後腐れもない。このクラウド版で行った経験も活かされる。

programmingforever.hatenablog.com

Macへの導入手順

では未経験の方でも導入できる様に詳細に手順を記載していく。実行する項目は大きく分けて以下の通り。

0.準備

1.Homebrewのインストール

2.HuggingFaceの設定

3.python環境の構築

4.仮想環境の設定

5.Stable Diffusionの実行

色々とエラーも出ると思うので、ポイントを記載していく。但しローカルPCへのインストールはどんなトラブルが生じるか分からないこともあり、導入は自己責任とし、当サイトは導入責任に関与しない。

第0ステップ: Mac およびOSの準備

さて、それでは作業を進める。最後までやり通すにはおそらく1時間はかかるだろう。

最初にMacの環境などを整備する。

  • 機種がM1 Mac以上であること(M1, M2など)
  • Mac OSのバージョンが最新か確認して異なる場合はバージョンアップすること
  • いずれも問題ない場合も、念のため導入前に再起動を行うことを勧める

次に、ターミナル環境を確認する。MacのLaunchPadのアプリ一覧の中から、「その他」ー「ターミナル」を起動。すると下記の様な黒い色の画面が現れる。この後のコマンドはここで入力する

ターミナル画面の例

私はbashを使用するがzshでも問題ない。なおタイトルやプロンプトから名前などの情報を非表示にしている。真似をされたい方は下記を実行すればよい。興味が無ければ次にスキップ。

Macのルートフォルダー表示、隠しファイル表示
  • ファインダー上で、command+shift+G でフォルダ指定できるので「/」を入力&リターンするとルートフォルダー表示
  • ファインダー上で、command+shitf+. で隠しファイル表示(オルタネイティブ動作)

.bash_profileや.bashrc はユーザーのHOMEディレクトリに存在するが、隠しファイルなので上記をしないと表示されない事に注意。

② .bash_profile、.bashrc ファイルの最後に下記を追記

各fileが無い場合は新規作成する。ファイルの先頭に「 . 」が付くと隠しファイルにな流。

.bash_profile

# .bash_profileへの追記

if [ -f ~/.bashrc ]; then
  . ~/.bashrc
fi

.bashrc

# .bashrc

PS1="\W $ "
③ターミナルの設定変更

メニューの「ターミナル」ー「環境設定」ー「プロファイル」ー「ウインドウ」を選び、「作業ディレクトリまたは書類」に付いているチェックを外す。

以上

第0ステップ:ツールの理解

作業で使用する各ツールを解説する。先に進みたい方はスキップ。

パッケージ管理ツール:Homebrew

Mac OS Xオペレーティングシステム上でソフトウェアの導入を単純化するパッケージ管理システムのひとつ。実行ファイルや設定ファイル、ライブラリetcを一つのファイルとしてまとめているものをパッケージと呼ぶ。パッケージ管理システムとはこのパッケージのインストール(アンインストール)作業を一元的管理するもので、パッケージやライブラリの依存関係などが管理できる。

ライブラリ提供:Hugging Face

Hugging Faceは、主に自然言語処理に関連したライブラリの開発や人工知能のコミュニティを運営しているアメリカの企業。Hugging Faceのサイトでは、学習済みの機械学習モデルやデータセットなどを公開している。今回はこれを使う。

Python仮想環境:miniforge

M1 Mac機械学習用のPython仮想環境構築によく使われるパッケージマネージャ.複数のConda環境(仮想環境)を作成できる.pythonの仮想環境とは、本体にインストールされている環境とは分けてpython環境を構築する際に使用するツール。

よくありがちなインストールによる不可解な現象が出て解決方法が分からない場合、やり直しや削除も色々と大変だ。そこで、仮想環境を用意してそこで作業することにより、問題などあれば丸ごと消して最初からやり直すことができる、初心者にとっては誠に便利な環境だ。仮想環境用ツールは参考記事で使っているminiforgeを利用する。

パッケージ管理:conda

Anacondaではパッケージを Anaconda Cloud の独自のリポジトリで公開し、pip コマンドではなく conda コマンドでインストールする。よってAnacondaの環境を利用する場合には conda を使い、Anacondaを使わない場合には pip を使う。conda は、Anaconda以外の環境では使えない。今回もPython仮想環境に入ったらcondaを使用する。

コンパイラ:Rust

Rust(ラスト)はプログラミング言語コンパイラが提供されている。最初の安定版(バージョン1)は2015年に登場。今回の作業でTransformerのインストール時にRustコンパイラが無いとエラーになるためインストールする。

Python機械学習ライブラリ:PyTorch(ベータ版)

PyTorchは、Pythonオープンソース機械学習ライブラリ(Deep Learningライブラリ)の名称。2022/9現在ベータ版の1.13.0.dev20220830以降のPyTorchが必要なため作業の中でβ版へのバージョンアップを行う。

深層学習モデル:Transformer

Transformerとは、自然言語処理を得意とする深層学習モデル。エンコーダとデコーダをAttentionというモデルのみで結んだネットワークアーキテクチャ。それによって、機械翻訳タスクにおいて速いのに精度が高いという特徴を持ち、非常に使い勝手が良い。以下の記事が詳しい。

Transformerとは?解説

機械学習ツールボックス:Diffusers

標準のStable Diffusion以外にも、WaifuやTrinartなど優れたモデルが次々と発表されており、必要に応じてStable Diffusionと、Waifuなど発展型モデルを切り替えて使える環境が望ましく、それを可能にするのがDiffusersだ。Diffusersは機械学習の機能一式が揃ったツールボックスの名称でhuggingFaceが提供しているもので、huggingFaceで配布している各モデルのダウンロードや管理ができる。モデル変更時にダウンロードとStable Diffusionへのリンクを自動で行う。Ver0.3.0からmacも利用できる様になった。img2img、textual inversionにも対応。以下の記事が詳しい。

HuggingFace Diffusers v0.3.0の新機能|npaka|note

Python実行環境:Jupyter Notebook

Jupyter Notebookは、PythonなどをWebブラウザ上で記述・実行できる統合開発環境pythonが実行できる環境であれば他のものでも良いが、参考記事では読み書きや実験的な操作がしやすいとあり、Jupyter Notebookを利用する。Google colabの編集画面とよく似た構成なので、colabの経験があれば分かりやすい。

第1ステップ: Homebrewのインストール

1-1: 公式のURL先でコマンドをコピー

brew.sh

下の様に、日本語、Mac用の画面が現れる。画面に出てくるターミナル用コマンドをコピーする(白い四角のアイコンをクリック)

Homebrewの初期画面

1-2: ターミナルでHomebrewインストールを実行

次に Macのターミナルを起動する。起動方法はLaunchPadのアプリ一覧の中から、「その他」ー「ターミナル」を起動。

起動したら先ほどコピーしたコマンドをコピペして、Homebrewをインストールするためのコマンドを実行する

コマンド実行、passwordを聞かれる

パスワードが聞かれるのでMacへのログインパスワード(管理者)を入力してリターン。するとインストールされるリストがずらずらと表示された後に、

Press RETURN/ENTER to continue or any other key to abort:

が出るのでリターン。5分ぐらいかけてインストールが実行される。

1-3:パスを設定

実行完了画面をよく見ると、

Warning: /opt/homebrew/bin is not in your PATH.
  Instructions on how to configure your shell for Homebrew
  can be found in the 'Next steps' section below.

とパスが通っていないとのメッセージが出てくるので、下記を実行して.bash_profileにパスを追加する。下記の「あなたのユーザー名」はそのまま入るので問題ない

$ echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/あなたのユーザー名/.bash_profile

.bash_profileのファイルに下記が追加されていることを確認(無ければ自分で追記しても良い)

eval "$(/opt/homebrew/bin/brew shellenv)"

設定されたパスを通すべく、シェルの再起動コマンドを実行

exec $SHELL -l

1-4:Pythonをインストール

HomebrewからインストールできるPythonのバージョンを検索。”@”がついているものがインストール可能なバージョン

$ brew search python

app-engine-python          python-build               python@3.7
boost-python3              python-launcher            python@3.8
bpython                    python-markdown            python@3.9
gst-python                 python-tabulate            reorder-python-imports
ipython                    python-tk@3.10             wxpython
libpython-tabulate         python-tk@3.9              pythran
micropython                python-yq                  jython
ptpython                   python@3.10                cython

3.10をインストール

$ brew update
$ brew install python@3.10

Python@3.10をインストール

1-5:Rustをインストール

$ curl https://sh.rustup.rs -sSf | sh

Rustコンパイラをインストールしないと後の工程のTransformersのインストールでエラーになるため、ここでインストールする。インストール後、パスを有効にするためにターミナルを一旦終了して、再度ターミナルを起動すること。

1-6:Homebrewのbinのパスを通す

/etc/pathsのファイルの1行目に/opt/homebrew/binを追記

# 追加したイメージ
/opt/homebrew/bin
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin

これでHomebrewのインストールは終了。

第2ステップ: HuggingFaceの設定

2-1:Hugging Faceアカウント登録

Stable Diffusionを利用するにはHugging Faceのアカウントを取得し、アクセストークンを発行する。Hugging Faceのアカウントがあればスキップ。

1.Hugging FaceのURLにアクセス

huggingface.co

2.画面のsing upをクリック

Hugging Faceの初期画面

3.入力したeメールに届いた承認リンクをクリックし、ユーザー名などの情報を入力。ユーザー名はユニークなので先に使われている場合は使えない。全て完了すると完了画面が表示される。

アカウント登録完了画面

2-2:Hugging Faceのトークン発行

  1. 画面右上の黄色い丸をクリック
  2. 出てきたリストの中のSettingsをクリック
  3. さらにリストの中のAccess Tokenをクリックすると下記の画面が出るので「New Token」をクリック

ACCESS TOKENの画面

4.出てきた下の画面でトークンの名前(適当でOK)、「read」を選択した上で「Generate Token」をクリック

TOKENの設定

5.出てきた下の画面の右側にある四角いアイコンをクリックするとトークンがコピーされる

トークン作成完了、コピー

どこかメモにコピーしてもよいし、いつでもコピーは行える。

2-3: 使いたいモデルの利用許諾に同意する

使いたいモデルのページにログインし、利用許諾に同意する。下記は本家のstable Diffusionのサイト。

CompVis/stable-diffusion-v1-4 · Hugging Face

Waifuは利用許諾は無いようだ。

2-4: ターミナル上でhuggingFaceの環境を作る

1.ターミナルのコマンドラインに以下を入力

$ git config --global credential.helper

2.huggingface_hubをインストール

既にインストール済みの場合はスキップして次の3のログインに進む

$ pip3 install huggingface_hub

インストールメッセージの画面

huggingface_hubのインストール

3.huggingfase-cliにログイン

途中でトークンを聞かれるので、前項で取得したトークンをコピペすればOK

$ huggingface-cli login

ログイン画面

ログイン完了画面

これでHuggingFaceの設定は完了

第3ステップ: Python環境の構築

3-1: Python仮想環境のインストール

miniforgeを使用してPythonの仮想環境をインストール。以下のコマンドを入力。

$ brew install miniforge

3-3: Pythonの仮想環境作る

  • miniforgeが用意できたら仮想環境を実際に作る。
  • 以下のコマンドを入力してpython3.10が使える環境を作る
  • sd14は仮想環境の名前で、自分が分かりやすい名前を自由に付けられる
$ conda create --name sd14 python=3.10

下記のようにインストールリストが出るので、Proceedが聞かれたら「y」を選ぶ。

インストールリスト

y入力後の成功画面

3-4: 作成したPythonの仮想環境を起動する

  • 仮想環境が構築できたので、その仮想環境を起動してcondaを使ってpythonの環境を整える。

1.condaの初期化。以下を入力

※下記の様に使用しているシェル名を記載する。私の場合はbashなのでbashと記載、zshの場合はzshと記載

$ conda init bash

2.上記の変更を有効にすべく、ここでターミナルを一旦終了して、再度ターミナルを起動する。起動したら下記を入力。

$ conda activate sd14

すると下の様にプロンプトが変化する。

(baes)が(SD14)に変更された

3-5: 起動中の仮想環境の確認方法

minifogeをインストールしたら、コマンドラインの先頭に(base)などの文字列が表示される様になる。この先頭についている文字は”コマンドラインが今いる環境”を示すもの。

  • (base)は仮想環境の外 == Mac本体の本来の環境 にいることを示す
  • (sd14)は仮想環境の中 == conda activateで仮想環境に入ると先頭の名前が自分で名付けた仮想環境の名前に変わる

以降は、仮想環境の操作をする際は必ず先頭が仮想環境名になっていることを確認するようする。

これでPython環境の構築は完了

第4ステップ: 仮想環境の設定

4-1: PyTorchのベータ版インストール

仮想環境に入ったままで以下のコマンドを実行。

※2022/9現在、ベータ版の1.13.0.dev20220830以降のPyTorchが必要なためβ版へのバージョンアップを行う。

$ pip install --pre torch torchvision --extra-index-url https://download.pytorch.org/whl/nightly/cpu

4-2: PyTorchのバージョン確認方法

仮想に入った状態でpip listと入力すると、仮想環境にインストール済みのライブラリ一覧が表示される。リストの中のtorchの横に書いてある数字がインストールされたPyTorchのバージョン。

pip listの出力例

4-3: Transformersのインストール

以下のコマンドを実行する、なおRustがインストールされていないとエラーになるので注意。

$ pip install transformers

4-4: diffusers本体のインストール

以下のコマンドを実行する。

$ pip install --upgrade diffusers

新しいバージョンのdiffusersがリリースされたときも上記のコマンドを実行すればよい。最新の環境に自動でバージョンアップされる。

4-5: Jupyter Notebookのインストール

pythonの実行環境としてjupyter環境をインストールする。Google colabとよく似た構成の画面で、読み書きや実験的な操作がしやすい環境。

以下のコマンドを実行する。

$ pip install jupyter

4-6: 仮想環境の再ログイン

参考にした記事の筆者曰く、必要性が曖昧なものの、おまじないとして以下を実施しておくことを推奨されており、実行する。

※コマンドの#以下はコメントなので入力の必要はない

$ conda deactivate           # 仮想環境からのログアウト
$ conda activate sd14      # 仮想環境へのログイン

これで仮想環境の設定は完了、全ての設定が完了した。

第5ステップ: Stable Diffusionの実行

仮想環境の全セットアップが完了し、後はStable Diffusionの実行という所までたどり着いた。ここからの手順はGoogle colabで画像生成する方法に近い。

5-1: StableDiffusionの実行

  • stable diffusionをJupyter Notebookで動かす
  • 実行に必要なコマンドは公式のコマンドなど参照
  • 例として以下のサンプルコードを実行してみる

5-2: Jupyter Notebookの起動

仮想環境で以下を実行する。

$ jupyter notebook

実行後にブラウザが立ち上がり、ファイルビューアでMacのフォルダが表示される。例えばダウンロードなど、作業しやすい任意のフォルダに移動した後、右上のメニューの「新規」から「python3」を選ぶ。するとGoogle coblab同様のPython用エディター画面が表示される。

5-3: jupyter notebookでの実行

  • エディタの最初のセルに以下のコードを入力
  • 入力後、上にあるアイコンの「Run」ボタンを押して実行
  • 初回実行時はモデルのダウンロードを行うため実行に時間がかかるが二回目以降はダウンロードはスキップされる
from diffusers import StableDiffusionPipeline

pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", use_auth_token=True)
pipe = pipe.to("mps")

prompt = "Kitten surrounded by flowers in a poster style garden with mountains in the distance"

_ = pipe(prompt, num_inference_steps=1)

image = pipe(prompt).images[0]

image.save('./output.jpg')

下はPythonコードを入力した状態

Jupyter NotebookにPythonコードを入力

Runで実行した状態。画像生成メッセージが現れたらJupyterで選んだ作業フォルダの中に絵が生成されている。

実行画面。画像が生成されたメッセージ

Stable Diffusionで生成された絵:

プロンプト:Kitten surrounded by flowers in a poster style garden with mountains in the distance

Waifu Diffusionのモデルを使った事例

こちらはモデルをWaifuに変更してプロンプトも変更した例(後述の補足参照)

モデルとプロンプトを変更して実行

Waifu Diffusionで生成された絵:

プロンプト:cute cat ear maid

Trinart Diffusionのモデルを使った事例

同様にモデルをTrinartに変更した例(後述の補足参照)

Trinart Diffusionのコード

Trinart Diffusionで生成された絵:

プロンプト:cute cat ear maid

補足

生成時間

Mi Macでの生成時間は約5分程度。残念ながら?Google colab(無料)の方が約20倍速い。

モデルの指定

サンプルコード内の"CompVis/stable-diffusion-v1-4"の部分がモデルを選択する項目なので、そこを書き換えるだけで利用したいモデルに変更できる。

例:

  • Stable Diffusion ver.1.4は、"CompVis/stable-diffusion-v1-4"
  • Waifu Diffusionは、"hakurei/waifu-diffusion”
  • Trinart Diffusionは、"ayan4m1/trinart_diffusers_v2”

※Trinart Diffusion の最新バージョンのV2が数日前にDiffuser(モデルを切り替えるツール)に対応した。9/26にはWaifuの新バージョンが出る見込み。

※許諾が必要なモデルの場合、Hugging Faceにアクセスして使用したいモデルの許諾が必要(許諾ボタンがないページは許諾不要)

※その他多数あるモデルの紹介記事

programmingforever.hatenablog.com

作成画像

描画済みのデータはJupyter Notebookで選んだフォルダにファイル出力される。単に表示させるだけなら最終行は以下で良い。

image