MacでAI画像オフライン生成ガイド② LoRA学習kohya_ss・顔キャラ固定編

この記事は有償です。また、前回記事を実行した前提で記述してあります。免責や前提条件・記事ルール等は前回記事と同じです。

前回はLoRAとは何か?を確認し既存のLoRAを適用する方法を試しましたが、既存のLoRAで必要なものが見つからない場合は、自分で学習元の画像を集めてきてLoRAを自作することが出来ます。

AIで簡単に美しい画像を作れても、成果が毎回ランダムだと使い道があまりありません。眺めて終わりです。しかし例えば人物を生成する時、顔などキャラクターを固定することができれば、オリジナルの漫画やキャラを作りやすくなるでしょう。

学習元画像の収集とキャプションファイルの作成に関する説明はネットに沢山あるので、割愛します。ネット上にあるウインドウズ用の記事であっても条件は同じなのでそのまま使えます。

この記事では、ウインドウズと異なりMacで必要になるインストール情報をサポートし、Macにありがちな問題をクリアして学習完了まで完走させることに筆者自身が2023.7月時点で成功した設定方法を付録しています。

要点
  • 有償記事。M1Mac GPU7コア VRAM8GB 最安モデルで完走できる
  • 全作業1時間で終わる(学習元画像収集・キャプション作成・ダウンロード・インストール・学習待ち時間除く)
  • インストール後はインターネット接続なしのローカルオフライン環境でLoRA学習できる。テスト生成は約5分で終わる。

Ventula13.4以降のOS必須 GPU使用設定自動

前回記事でも案内していますが、Ventula13.4以降のOSにバージョンアップしないと、生成が非常に遅くなります。

MacはVentulaでStableDiffusionに最適化されました。OSをバージョンアップするだけで、M1以降のAppleSiliconに搭載されたGPUを使ってLoRA生成が行なえます。すべて自動的になされます。なので、GPU使用に関する特別な設定操作は不要です。

なおCoreMLに関しては記事後半にある灰色の文で解説します。今回は使用しません。

ad

LoRAを自作生成する準備

いったん環境を整えるため、前回記事で案内した通りターミナルを閉じる前にキーボードでControl+Cを押してプログラムを停止してから、Macを再起動して、dummyアカウントに入り直してください。

kohya_ssインストール

以降、ここに記述されたような灰色の文章を読む必要はありません。飛ばしてください。問題が起きた時や成功後に応用したい時、読むと役立つ場合があります。

kohya_ssとは

kohya_ssとは、LoRAを自作生成するのに現在最も一般的なツールです。厳密にはkohya_ssという作者によるsd-scriptsというプログラムが最初ですが、ここではbmaltais版という、Safariブラウザで操作できるタイプのkohya_ssを用います。Safariを使いますが、インストール設定完了後はオフラインで完走できます。

kohya_ssはLoRAの学習を自作生成するのに必要なプログラムですが、ターミナルから直接インストールできるのでリンク先からのダウンロード等は不要です。

cd

インストール先を他のアプリと揃えるため、いったん念のためターミナルに上記コードを入力エンターしてください。

git clone https://github.com/bmaltais/kohya_ss.git

上記コードをコピペエンターし、kohya_ssを直接ダウンロードします。ネット環境によりますが数秒で終わります。

上記画像のように止まったら次行程に進みます。

LoRA学習元画像とキャプションの格納

ここでいったん学習元画像とキャプション、学習後の完成LoRAファイルを格納するフォルダを作ります。下記のコードを一つずつ順番にコピペエンターしてください。

このプロセスは特に重要なため確実に実行してください。入力する文字列を、たとえ半角スペース1文字でも間違えると失敗します。すべてコピペで行ってください。

cd
cd kohya_ss
mkdir train
cd train
mkdir output images
cd images
mkdir "10_sls test"

mkdirとは

mkdir/メイクディレクトリ とは、フォルダを作る命令です。mkdir train なら、今いるフォルダに「train」という名前のフォルダを新たに作ったことになります。

なのでそういう目で上記のコード群をみると、何をしているのか理解できると思います。なお、他のコマンドについては前回記事の灰色の文を参照してください。

この操作は、コピペエンターしてもターミナル上は何の反応もありません。作っているのは単なるフォルダですから、うまくいっているかどうかはFinderで確認できます。

続いて、Finderを使って下記のフォルダに、学習元にする画像をじぶんで用意しテスト用に20枚入れてください。ファイル形式は.pngまたは.jpgとしてください。

意味のある学習成果を出した前例にはみな元画像が20枚使用されていますから、その枚数が必要十分条件です。

Machintosh HD/users(ユーザ)/dummy(ダミーアカウントを作らなかった場合はあなたのアカウント名)/kohya_ss/train/images/10_sls test

また、同じフォルダに各画像と同名のキャプションファイルも入れてください。ファイル形式は.txtとしてください。通常、大抵のツールやネット上の案内に従うと.txtで作成されるはずです。

kohya_ssの学習元教師画像フォルダ構成ルール

kohya_ssの学習元画像(教師画像)を保存するフォルダの構成は、まず親フォルダを適当な名称で作り、その中に教師画像の保存用フォルダを正しい命名規則で作る必要があります。今回だと親フォルダが「images」になります。

教師画像の保存用フォルダは、その名称の頭に数字を入れ、アンダーバーを介して何らかのキーワードを、半角スペースで挟んでふたつ付ける必要があります。今回だと「10_sls test」としています。

数字は学習を繰り返す回数の命令です。多いほどよく学習できますが、LoRA生成に時間がかかります。20以上が一般的ですが、テストするだけなら減らすと時短できます。なので今回10にしています。

2つのキーワードは、今回のようにキャプションファイルを用いる場合、特に意味は無いので自由な名前で構いません。後で生成したLoRAを適用するときの呼び出しキーワードは、キャプションファイル内の先頭に共通記述されたキーワードをプロンプトに入力することで実行します。

キャプションファイルを用いない場合は、入力したフォルダの名称が呼び出しキーワードの代わりになります。呪文プロンプト欄に、スペースを介して両方ともキーワードを入れると発動します。

呼び出しに用いるスペースを介した2つのキーワードについてですが、1つ目のキーワードは一般的な単語や呪文と重複しないような造語が望ましく、2つ目のキーワードはそのLoRAを作る目的に近いものが望ましいです。

例えば生成画像を自分が選んだ蛙の画像に近くなるよう蛙化するLoRAを作るなら、聞いたこともないような語slsやcpcなどに、蛙を意味する英語frogを半角スペースでつなげる、などです。

こうすると呼び出しキーワードの意味がプロンプトに与える影響を避けつつ、それが何のLoRAであるか人間が単語の意味を識別できるままに、LoRAを適用できるというわけです。

kohya_ssの起動

cd
cd kohya_ss

続いて、上記コードを順次コピペエンターしてください。

./setup.sh

上記コードをコピペエンターし、kohya_ssをインストールします。しばらく待ってください。

pyenv,python,Anaconda,miniconda,miniforge,仮想環境不要

前回記事で専用のダミーアカウントを作ったので実質これが仮想環境の上位互換として役立ちます。なので他のサイトでkohya_ss使用時に必ず案内される仮想環境の構築は不要であり、構築のために必要なpyenvあるいはAnacondaも手動インストール不要になります。

pythonはkohya_ssを走らせるのにバージョン3.10.6が指定で必要になりますが、これは前回記事でhomebrewをきちんとインストールさえしていれば、あとは記事通りkohya_ssをインストールしていくだけで自動的に適切なバージョンのpythonがインストールされ、完了します。

ちなみに前回記事でインストールしたAUTOMATIC1111は、必要なpythonは手順で事前インストールしており、仮想環境もAUTOMATIC1111インストール時にvenvで自動構築されていますので、競合しません。kohya_ssも同様に、別のvenvで仮想環境が自動構築され、kohya_ssのフォルダ内に別個のvenvフォルダとして格納されます。

「Setup finished! Run ./gui.sh to start.」と表示されて止まったら、次行程に進みます。

./gui.sh

上記コードをコピペエンターしてください。

上記のように止まったら、赤い部分のURL文字列をコピーし、Safariの検索窓にコピペエンターしてください。これで終了です。

kohya_ssの設定

Safariに表示されたkohya_ss画面で設定を進行します。

⑤beautifulRealistic_v60→beautifulRealistic_v7

上記画像の通り、まず上部①のLoRAタブをクリックしてください。Dreamboothではありません。「LoRA」です。

/Users/dummy/kohya_ss/train/settings

次に②プルダウンメニューを開き、③欄に上記をコピペし、★マークで示したSave as…ボタンをクリックしてください。今後設定を変更したらこまめにこのボタンで保存しておいてください。

ダミーアカウントを作らなかった人はdummyの部分を適切な自身のアカウント名に変える必要があります。以下同。

/Users/dummy/stable-diffusion-webui/models/Stable-diffusion/beautifulRealistic_v7.safeten
sors

次に④欄で Custom を選択し、⑤欄に上記をコピペしてください。

2023.10.7model bra バージョン更新

前回記事で扱ったモデル BRAが2023年10月7日にバージョン6から7に更新されたため、前回記事とともにここでも上記コードを修正してあります。

学習元モデルの選択と変更

上記のコードでは、LoRA学習の元となるmodelに、前回記事で用いたBRAをそのまま使用しています。

学習元がなんであっても、生成後のLoRAは他のどういったモデルに対しても適用できます。

しかし学習元のモデルがBRAのように偏った特性のものである場合、生成できる画像の傾向にも向き不向きが生じます。

BRAは写実的で女性的な美しい人物の描写に特化しています。もしも望むLoRAが2次元のアニメ絵であるならば、現在はanyLoraというモデルのほうがLoRA生成にも、適用後の画像生成においても、2次元イラスト作成においては適します。anyLoraは3次元には適しません。

他の目的に対しては、適切なモデルを同civitaiサイトで探し出してください。できるだけいろんなモデルに適用できる汎用性を重視したい場合、単にstable-diffusionが初期装備しているモデルが最善の選択ですが、望むレベルの質を引き出すのはかなり難しいと思います。

よって基本的にはLoRAを作って作りたい画像のタイプに最も近く、かつ、質と評判の高いモデルを最初に探し出し、それ専用にするつもりでLoRAを作るのがベターなアプローチになります。

続いて同じDreambooth LoRAタブ内で上記画像①Foldersタブを選択し、

/Users/dummy/kohya_ss/train/images

②Image folder欄に上記をコピペしてください。

/Users/dummy/kohya_ss/train/output

続いて③Output folder欄に上記をコピペしてください。

続いて同じLoRAタブ内で上記画像①Parametersタブを選択し、②Caption Extensionの欄に.txtと記入してください。今開いているSafariの画面サイズによっては、この欄の位置は若干異なる場合がありますが、同タブ内にあります。

また、③Mixed precisionを「no」④Save precisionを「float」、⑤Number of CPU threads per coreを「1」と設定してください。

キャプションファイルのファイル形式エラー

キャプションファイルは.txtでも.captionでも出来ることになっていますが、kohya_ssでの初期設定は.captionです。

ところが、キャプションファイル生成ツールの初期設定や、ネットの案内通りにキャプションファイルを作ると、生まれるのは.txt形式のファイルです。

LoRA生成はキャプションファイルがなくても出来てしまうので、.txt読み込みへ設定を変えることなく生成している例がネット上に沢山見受けられます。

そういう人はプログラム動作中に流れる文字列の中で、キャプションファイルが見つからないといった趣旨の警告文が出ているはずなのですが、そのまま流れてしまってLoRAファイル自体は生成できてしまうので、気づいていません。

せっかく準備したキャプションファイルを活かすには、記事の説明通りにCaption Extensionの設定を変える必要があります。そうすれば前記の警告文は出なくなり、正常に反映されます。

Number of CPU threads per core のMac用最適設定

この設定はCPUないしGPUコア1個につき、何本のマルチスレッドを建てられるかの設定で、M1以降のMacは全て「1」が最適設定です。

スレッドとは計算の仕事のことです。各CPUコア1個ごとに複数のスレッドを並行計算させると、計算終了が早くなる場合があるため、この設定が存在します。

しかしマルチスレッド、ハイパースレッディングテクノロジーはインテルCPUの専売特許です。また、人間がそうであるようにCPUにも無理に仕事を並行で掛け持ちさせるとかえって時間のかかる結果に終わる場合もあります。

256,256

そのまま画面を下の方までスクロールし、⑥Max resolusion欄を上記の256,256に上書きして変えてください。

データセット解像度 Max resolutionのM1Macテスト用設定

Max resolurionは学習画像の読み込み最大解像度を決める設定で、通常は初期設定の512,512から変える必要はありません。

ただしM1Macの性能によってはここの値が初期設定のままだとLoRA生成に8時間などと多大な時間を要してしまいます。

最初はまずLoRAを最後まで生成できるかどうか、自分のマシンで成功できる設定に辿り着く必要があります。そのためにはここの設定を下げておくと、1回の生成にかかる時間が5分程度に減少するので迅速にテストを終了できます。なので256,256に変更しています。なお、値が低すぎてもエラーが出て停止します。

最後に⑦Adcvanced Configuration欄のプルダウンメニューを開き、

⑧Use Xforemersのチェックボックスをオフにしてください。Xformersについて詳しくは前回記事の灰色の文を参照してください。

ここまでで、先程の★マークで表示したタブのSaveAsを押し、設定を保存してください。これで終了です。

終了後に再開する方法

cd kohya_ss
./gui.sh

kohya_ssを終了してターミナルやMacを閉じた後再開するには、初回起動時同様に上記のコードを順番にターミナルで再度コピペエンターし、Safariで開いてください。

⑤beautifulRealistic_v60→beautifulRealistic_v7

続いて再度上記画像の③に、下記をコピペした後、横にある「Load」ボタンを押せば以前の設定を復元し再開できます。

/Users/dummy/kohya_ss/train/settings

LoRA学習生成テスト

上記画面のようにkohya_ssの下部にある Train model ボタンを押して学習を開始します。

動作中は上記のように進捗メーターと推定必要時間が表示されます。今回の設定の場合、約20分要します。

生成が終了すると上記のような画面になって止まります。次にFinderで/Users/dummy/kohya_ss/train/outputフォルダを開き、その中に生成されているlast.safetensorsというファイルをコピーし、前回記事のLoRA適用フォルダに保存してください。model保存用のフォルダでなくlora保存用のフォルダです。以降の使用法は前回記事と同じです。

今回の設定はあくまでテスト用なので学習強度が足りません。テスト生成に成功したら、学習設定を変えて一晩かけるなどして挑戦してみてください。また、この記事の灰色の文を読み返し、トリガーワードを正確に適用してください。

なお、ここまでの設定でLoRA学習もローカル環境で行えるようになっています。ネットを切断して試してみてください。

テスト生成自体に失敗した場合は読者の環境に起因する設定等に問題があります。エラーメッセージがターミナルに表示されているはずなので、その指示に従うと解決できる場合があります。CalledProcessErrorが出た場合は原因特定が容易でないため、手っ取り早く解決したい方は以降の記事利用をご検討ください。

CUDAおよびpip installに関するNotice,Warning

CUDAやpipのインストールや更新を促すエラーや警告は、無視して完走できます。CUDAはnVIDIAのGPUに関するマルチスレッドのプログラムなのでMacではどうしようもありません。pipはpythonに関連するインストール用のツールですが更新は必須条件ではありません。

そもそもM1以降のMacの場合、Ventula13.4以降の最新OSになっていれば自動的に搭載AppleSiliconのGPUに最適化されています。

厳密にはMacのGPUの能力をStableDiffusionによるAI画像生成に最適化させるには、モデルをCoreMLという形式に変える必要があり、90秒かかる画像生成が30秒程度で済むなど約3倍速になります。

ですが、いま主流のモデル形式である.safetensorを変換させる必要があることと、CoreMLを扱えるアプリが立ち遅れておりMochiDiffusionくらいしかありません。これはAUTOMATIC1111に比べやれることが大幅に少なくなります。

進歩の早い分野においては最も参加者の多いフィールドに居たほうが、得られる利益も回避できるエラー情報も多く手に入ります。

よって当記事では3倍遅くともCoreMLを用いず、それなりにAppleSiliconの能力と快適なMac端末を活かしながら現在主流の画像AI技術を追跡する道を選択しています。

ベンチマーク報告

ちなみに今回の記事でLoRA生成したときのアクティビティログによると、kohya_ssを走らせているプロセス「python」においてCPU使用率70%、スレッド数7、GPU使用率93%、VRAM使用率97%でした。フル稼働です。

スレッド数とは、同時並行でさせる計算の仕事の数です。条件が揃えば、値が大きいほど仕事が速くなります。スレッド数は、今回の場合GPUコア数と同じになります。筆者の場合7コアGPUなのでスレッド数は7です。購入時に8コアを選択した人は当然、8になります。

VRAM使用率はパンク寸前でした。筆者のマシンは最弱の8GBです。Mac購入時にVRAM16GBなどと増強を選択していた人は、今が最も報われる瞬間です。

subprocess.CalledProcessError,Abort trap :6 の対処法

このエラーは主に設定不適切で落ちた時、総括的に出ます。各種生成設定を調整することで解決できますが、読者によって最適値は異なりますからじぶんで試すか設定例を探す必要があります。

筆者は所持するMacBookAir2020M1 GPU7コア VRAM8MBという、M1Macの中では最も低いグレードの最安モデルでCalledProcessErrorとAbort trap :6を回避し完走しました。

その際の詳細設定等は別途エントリーページに格納してあります。現在のコンテンツは以下のとおりで、最新情報を随時更新中です。

エントリーページ更新履歴

  • 2023.7.8初版:Macでkohya_ss sd-script を使いCalledProcessErrorを解決する方法
  • 7.8追記:Abort trap 6の解決法
  • 7.8追記:付録Tipsの追記
  • 7.24追記:顔キャラ固定する方法
  • 7.25追記:拡張機能別 生成時間ベンチマーク
  • 7.25追記:キャラ固定しつつポーズ指定する方法
  • 8.7追記:Macで DPM++2M SDE Karras を使う方法
  • 8.7追記:キャラ固定して細部のみ変える高速な方法
  • 8.7編集:部分的エントリー記事からエントリーページに移転
  • 8.11追記:AI画像生成に最適なMacはどれか
  • 8.11追記:Macで全機能不足なく超高速画像生成する方法【Winリモート】
  • 8.11追記:クラウドGPU特化自作してパソコン代を下げる方法
  • 8.19追記:Torch not compiled with CUDA enabled 解決法 GPU使用可【Win】
  • 8.18追記:ComfyUIとSDXLの検討
  • 8.25追記:安全無料簡単 MacでWindowsリモート操作
  • 8.28追記:公式準拠・無料最短 Stable Diffusion/AUTOMATIC1111インストール【Windows版】
  • 8.30追記:公式準拠・無料最短 kohya_ss/bmaltais インストール【Windows版】
  • 9.14補足:insightfaceのインストール最新版対応
  • 10.8更新:MACsettings内部model BRA v6→v7
  • 10.25追記:1枚のアップ画像から理想の全身像を着実に生成する手順

エントリーページ注意事項

閲覧には有償のKindle版記事またはnote版記事末尾に付録されているエントリーキーが必要です。Kindle端末はなくても、普段のスマホやPCで閲覧できます。キーは一定期間ごとに更新されます。一度購入すると更新後も閲覧できます。なお、Kindle版の内容自体はこの記事の一部と同じです。

エントリーページの内容は予告なく変更、削除、公開されます。記事の内容は成功を保証するものではありません。また、内容を実施した場合等に生じたいかなる結果も自己責任です。

エントリーキーを入力する時は、エントリーページに移動し入力してください。記事コンテンツ内容が膨大になってきたため、リンク先ページにスピンオフしました。

Kindle版より割安のエントリーキーをnote版に用意しました。内容は同じです。すでにnoteアカウントをお持ちの方は、note版をご利用ください。

読者コメント

  1. けーわ より:

    著者様

    初めまして。
    素晴らしくご丁寧な記事を書いてくださり,ありがとうございます。
    苦戦していた環境構築を嘘みたいにスムーズに進められて感激しております。

    お手隙の際1点エラーの質問にお答えいただければ幸いです。

    環境
    所持するMacBookAir:2020M1 メモリ8MB
    著者様と同じ環境でdummyを作成し試みました。

    この手順に沿ったところ「Train model」の手順のあとで
    ・kohya_ss GUI上でのエラー
    Error:Connection errored out.
    ・terminalでのエラー
    ./gui.sh: line 71: 10066 Abort trap: 6 python “$SCRIPT_DIR/kohya_gui.py” “$@”
    が発生いたしました。
    解決策をご存じであればお教え頂きたいです。
    よろしくお願いいたします。

    • デフラグライフ より:

      初めまして。
      安全かつ迅速な環境の構築に役立てていだだけ幸いです。
      恐れ入りますが Abort trap:6 エラーについては、その解決策をエントリー記事内に記載しています。
      このエラーはこの記事の方法によらずとも誰にでも起こりえます。
      エントリー記事は必ずしも解決を保証するものではありませんが、理論上解決すると思われます。
      きっと、貴重なあなたの時間を無駄にしない結果になるでしょう。
      この賭けに勝算が立ったならば、ぜひご検討ください

  2. シュヴァルツ より:

    230711MACsettingsをダウンロードしてtrainディレクトリに配置したのですが、エラーになってロードできません。自分で作ったsettingsファイルはセーブ/ロードできるのですが、Train modelを実行するとCalledProcessErrorになってしまいます。

    • デフラグライフ より:

      恐れ入りますがエントリー記事内でロード先ファイル名指定を230716と誤って記載していたため、ロードエラーが生じていました。
      正しくは230711MACsettingsであるため、修正しました。
      改めて記事の手順通りロード先フォルダ名指定をコピペし直していただければ、他の設定を変えていなければ正常に動作します。

      筆者が新バージョンと新機能追記記事の編集過程で誤って保存したのが原因です。ご迷惑をお掛けし大変申し訳ありません。また、お知らせいただき誠に有難うございます。

  3. ますりん より:

    Kindle版を購入したのですが、キーを入れてもエントリー記事が出てきません。
    どうしたら良いでしょうか。

    • デフラグライフ より:

      同じトラブルをこちらでも確認し、修正しました。
      お手数ですが再度記事注記通り、目次ジャンプを使わず(目次ジャンプを使うとアドレスバー末尾にtocという文字列が付いてしまい、キーが通らなくなります。念のためアドレスバーを確認ください)手動で記事末尾へスクロールし、同じキー入力をお試しください。

      キーシステム自体の潜在バージョンアップに伴う更新遅れが原因でした。
      大変お手数おかけし、申し訳ありません。またお知らせいただき誠にありがとうございます。