はちみつブログ

趣味や生活の話を好きなタイミングで書いていきたいと思います。

自作LoRA(1) MacでのKohya’s GUI

先日の記事でStable DiffuisionのWeb UIを動かしてみたが、いろいろ触ってみると画風だったりキャラクターを固定したくなってくると思う。その際に欲しくなってくるのが、自作LoRAだ。LoRAは”Low-Rank Adaptation”の略で、必ずしも画像生成の話だけではない。とはいえ、LLM用のLoRAなどは勉強中でわからないので笑、まずはStable Diffuision向けに自作LoRAをやってみましたよ、という記事を書こうと思う。

LoRAを作るには、必要な画像を集めた後、大きく(1)タグをつける、(2)学習させる、といういう2行程が必要だ。かつ、どこで動作させるかでいろいろと方法がある。まあ手元にあるPCがMacということもあり、Macで動作させる方法とGoogle Colabで動作させる方法について紹介しようと思う。(1)のタグをつける方はGUIのアプリケーションにはなるので、今のところMacでの動作のみ紹介したいと思う。実は大丈夫なのかもだが、、、一応Google Colabの無料版でWeb UIは動かすな、ということと認識しているので。

結構やることが多いので、何回かに記事を分けたいと思う。

はじめに

すでにリード文やタイトルで書いてはいるのだが、今回はMacKohya’s GUIを動作させる方法を紹介する。まあ、Githubリポジトリ名はkohya_ssだが。。。

Stable Diffusion向けにLoRAを学習させる方法自体はいろいろあると思うのだが、自作LoRAのデファクトスタンダードとなっているのが、kohya-ssのsd-scriptsだ。おそらく日本人の方で、日本語のReadmeも用意してくれていたりする。一応、別のリポジトリをもとに作ったらしいことが書いてある。動作させる際も、ログ的なものが日本語で表示される点が誇らしい笑

このデファクトスタンダードkohya-ssのsd-scriptsをGradio GUI等で覆って、ブラウザで動作させやすくしたのが、Kohya’s GUIだ。Windows環境で動作させる場合は、そもそもStability Matrixで利用できたりと環境が整っているものの、macOSだと微妙な動作(というか、設定で利用できないものがある)のため、結構苦労した。自分のためにも2025年1月の動作記録として残しておき、後々に、、、と思っている。

実行環境

先日のStable Diffusion Web UIの時と同じだが、Pythonのバージョンなどは、次にインストールした手順で出てくるので一旦置いておく。

学習データ

別の記事でタグをつける様子は紹介しようと思うのだが、今回はまずKohya’s GUIということで、画像とタグのセットは用意されているものを利用しようと思う。こういった内容で有名だと思う東北ずん子・ずんだもんPJのデータを使うこととした。

東北ずん子・ずんだもんPJより

上の画像はPJのイラストのページの中ごろの画像。画像学習用のデータをダウンロードをクリックするとGoogle Driveのページへ行き、ダウンロードできる。今回はずんだもんのものを利用することとした。

Kohya’s GUIのところで紹介すべきかもしれないが、 親ディレクトリ->{回数}_子ディレクトリ->画像というディレクトリ構造とする必要がある。ダウンロード後に適当な場所で良いので、このようなフォルダ構成を作っておく。

Kohya’s GUI

Kohya’s GUIではpython3.10系が推奨されている。今回は 3.10.15を利用した。

$ pyenv local 3.10.15

git cloneしてくる

$ git clone --recursive https://github.com/bmaltais/kohya_ss.git

ログの内容を見るに、元々の sd-scriptsも一緒にcloneするのに --recursiveオプションが必要なようだ。

cloneしたディレクトリへ移動

$ cd kohya_ss

この後 setup.shを実行していくが、なんとなく先に venvを実行。

$ python -m venv venv
$ source venv/bin/activate

setup.sh内で本来作成し、呼び出すvenv環境名が venvなため合わせた。

$ ./setup.sh

結構時間がかかるはず。途中、ちゃんと tensorflow-macosなどMac向けのライブラリがインストールされている様子が確認できる。

次に一応、 accelerate 設定をしておく

$ accelerate config
----------------------------------------------------------------------------------------------------In which compute environment are you running?
This machine                                                                                        
----------------------------------------------------------------------------------------------------Which type of machine are you using?                                                                
No distributed training                                                                             
Do you want to run your training on CPU only (even if a GPU / Apple Silicon / Ascend NPU device is available)? [yes/NO]:NO                                                                              
Do you wish to optimize your script with torch dynamo?[yes/NO]:NO                                   
----------------------------------------------------------------------------------------------------Do you wish to use FP16 or BF16 (mixed precision)?                                                  
no                                                                                                  
accelerate configuration saved at {あなたの保存場所}/default_config.yaml

特に重要なのが、 FP16 or BF16を使うか?という質問だと思う。 noを選んだことをよく覚えておく。

$ ./gui.sh

これで起動されるはず。最後に Running on local URL: http://127.0.0.1:7860 と出ると思うので、そちらにアクセスしてみる。

シークレットタブでアクセスしたがこんな感じ。

まず、最も重要な設定がLoRAタブを選ぶこと。これを忘れて設定をしだすと後でとても悲しい気持ちになる。

その他の設定で、とりあえず参考に。

確実に注意しないとMacでは止まるのはfp16とかダメだよ系で。

項目 選択肢
Mixed precision no
Save precision float
LR Scheduler cosine
Optimizer AdamW (AdamW8bitはNG)
CrossAttention none (xformersはNG, sdpaはOKかも)

というところかと思う。あとは、画像ディレクトリとして、先ほどの親ディレクトリを指定するところか。

あとは Start trainingを実行すればいい。

あとまあ、あまりGPUでの高速化は見込めないので、学習させる画像は512x512くらいがいいかもしれない。今回は元々のPJからダウンロードしたままの763x1024で学習してしまったので、10時間ほどかかったようだ。(記録をスクショし忘れた)

学習に終了すると、出力に指定したディレクトリに、 {Trained Model output nameでつけた名前}.safetensorsというファイルが生成される。自分の場合は、 zundamon_v1.safetensorsというファイルが出力された。

学習で利用した anyloraCheckpoint_bakedvaeBlessedFp16をcheckpointとして指定し、作成したLoRAを読み込んで実行。LoRAの威力が知りたいので、プロンプトは a girl <lora:zundamon_v1:1>のみ( <lora:zundamon_v1:1>はトリガーワードというもの)、ネガティブプロンプトもEasyNegativeのみ指定した。EasyNegativeについては本題ではないので、ここでは省略する。できた画像がこちら。

手が両方右手かもしれない笑 でも、ものすごいLoRA力ではないだろうか笑

まとめ

今回は自作LoRAを作成するツールとして、学習用ファイルが用意できた後にLoRAファイルを作成するためのツールであるKohya’s GUIMacで動作させる方法を紹介した。今後書こうと思っているGoogle Colabを利用する方法ではNVIDIAGPUを利用できるので、無料プランのT4でさえMacで学習するより速い。そしてfp16をつかえるからか、たまたまか分からないが、性能も良かった笑

まあ、Google ColabはGoogle側の使用でPythonのバージョンが上げられてしまったり、環境を固定することがとても難しいので、そういう意味でローカルでも動かす手段を確保できたというのは自分にとっては安心になった。なかなかmacOSでKohya’s GUIを動作させる記事が見つからず苦労したところもあったので、他の方の役に立ってくれると嬉しい。