見出し画像

FineTuningモデル錬成記(2024/04)

 Stable Diffusion 2.1 / XL の機械学習用の覚え書きです。
 OneTrainerを使っている日本語の記事、また Full fine-tuningを行っている記事が少ないことから誰かが役に立つ可能性と、自分自身へのメモ書きとして書き出しております。
 適宜、最新の情報に更新していきます。
 もしこの記事を読んだ上で気になった方は、適切なご指摘はいただけるとありがたく、また、よりよい記事が書けると思ったら書くといいと思います!

過去のあらすじ

 去年6月頃、Stable Diffusion 2.1の時期にLoraを複数作り、ミックスモデルに組み合わせて作っていた時期がありました。
 当時はミックスモデルに、独自Lora加えてLECOなどいろいろ入れて黒魔術寄りながら、試行錯誤して当時作成したモデルがBerryArtifyです。

 その際にFull fine-tuningの話を聞き、手元にあるグラフィックボードで出来るものなので、Loraでの学習できる概念の上限限界もあることがあると聞き、
実装したい概念が数十を超えてストックまである始末だったので、一度実装した姿を見てみたいといろいろと試しましたが、kohya-ssのライブラリでは起動学習はある程度まではLoraの作成、モデルと複数Loraのマージまでは行えておりましたが、FineTuningになると実際に正しく動いているのかどうかわからなくなり、学習させる度にデータが溶ける現象が発生。captionやtextを出力し、バッチでtomlファイルにまとめるところまで行っていたが、不明なことが多いこともありこのまま数ヶ月放置してしまいました。
 わかる人間にはわからない人間がどうして詰まるかわからない(当たり前のように解決できるから)という命題があるらしいが、どうも最先端の界隈に追いつけない場所があるなあと思わされるのが、調査力とライブラリを自作してまで追いつくような界隈と比べての差ですね。

現時点での利用ツール達について(2024/04)

  •  機械学習は、放置して、ツールやライブラリ達が動かなくなるのが数ヶ月、下手すれば1週間の界隈。新しい動きが出てきたことを聞き、再度調べはじめました。記事文末にある日付は、当時はこのような物を使っていたという記録にも鳴るので記しております

  • 過去使っていたツールは、LoRA_Easy_Training_Scripts ( https://github.com/derrian-distro/LoRA_Easy_Training_Scripts ) で、できが悪いというわけではなく適用できる範囲がLora学習のみというところが大きいです。kohya_ssはGUI ( https://github.com/bmaltais/kohya_ss )を使わずにコマンドラインで使っておりました、どうも使える機能が違う感触があり、そして実現していたことが、LoRA_Easy_Training_Scripts で追加したLoraの概念や調整をkohya_ss scripts ( https://github.com/kohya-ss/sd-scripts )でマージといったやり方でした。  

  •  今まで諦めていた中にSDXLの新しいモデルのAnimagine XL( https://civitai.com/models/260267/animagine-xl-v31 )や、Pony Diffusion V6 XL(https://civitai.com/models/257749?modelVersionId=290640 )が出て、(世界のテクニカルな先達に敬意を表しつつ)おおよそやりたい表現が出来るモデルが登場し、乗ってみようと思うようになり、マージモデルと追加学習の再復帰をすることにしました。

  • 今時ではインストーラー経由でのインストールが便利でして、StabillityMatrix( https://lykos.ai/ )を最初に導入して、StableDiffusionWebUIForgeの上でのいくつかのextensionの導入を行い、OneTrainer( https://github.com/Nerogar/OneTrainer )が今、マージモデル制作の際に主に使っているツールです。

  • LECOについては、iLECOで高速に作成できるのと効果を実感できることもあり、現在は、TrainTrain (https://github.com/hako-mikan/sd-webui-traintrain) がおすすめです。TrainTrainにて Loraも作成してみましたが、昔は作れなかった表現のLoraもPonyDiffusionXLだと作れるのだなあと隔世の感がありました。

  • SuperMerger (https://github.com/hako-mikan/sd-webui-supermerger )も1年前から今も健在です。階層マージについては、SD 1.5/21. と SDXLは少し違うらしいのですが、以前のバージョンから推測して感覚値で扱っていますが、だれか詳しい方、図を出してほしいと思いました。

  • sd-webui-ar (https://github.com/alemelis/sd-webui-ar) 解像度設定をボタン一つで行える単純化、皆使ってないのか気になるが私には一番役立っています。

OneTrainerでの FineTuning 設定

恐らく本題のOneTrainerでの作業メモです。
インストールは直接行うより、StabillityMatrix経由で入れることをおすすめします。
以下の記事を参考にして追加しました。

さらに元記事になるものはこちららしいです。
https://civitai.com/articles/3105/essential-to-advanced-guide-to-training-a-lora

上記と異なり相違点、工夫した点と注意点について記していきます。
右上はFinetuneを選択。これでFull fine-tuningのはず。
[general]
Continue from last backup -> オンにすると前回の続きからはじめられるのでレジュームの時にonにする
他は上記記事通り。

[Model]
Base Model のパスはエクスプローラーから入力が適切そうです…
Output Data Type はbfloat16 / float16
他は上記記事通り。

[concepts]
OneTrainerツールを使うキモと思われる箇所で、ツールとして”GUIで楽を出来る”のが一歩抜きん出ています。当たり前のように聞こえるかもしれないことですがとてもすごいです。他は上記記事通り。

[元データについて]
ひとまず宝箱の品質にとても不満があり、問題のなさそうなものをAIにいくつか生成させて、閉じた宝箱、木以外の宝箱、金貨以外が入った宝箱とひとまず揃えました。

宝箱とタグを延々と並べた

タグ付けについては当時、kohya-ssのライブラリでcaption/tagをつける方法など試行錯誤したりしていましたが、ひとまずついているので、お試しなのでとりあえずこのまま.txtで渡す。

simple background, white background, no humans, still life, treasure chest

fune-tuningが動いているかお試しで行っているので、まずは伝わるだろう、的な文面が出力されているぐらいで進めることにしました。
captionとtagの渡し方についてOnetrainerで適切なやり方について誰か詳しい方教えていただきたいです。


[training]
元記事ではOptimizerはProgidy で設定されていることもあり、だいたいが自動になります。
Epochが20 でも学習成果は出せております(学習元データ20枚程度/2h程度 )。
TrainTextEncoder 1/2 がそれぞれcaptionやtagの学習部のはずです
PonyDiffusion(マージモデル含む) に追加学習させるなら、clip skip:2 という点は設定で必ず行ってください。
Text Encoder x Learning Rateは空白でOK、そうでないとエラーになった覚え。
RMAについては、モデルが複雑なので、ON、余裕があるならGPUに回します。

[sampling]
プレビューが段階的に行えるので、初期設定の時間経過よりはepoch数で出す方をおすすめします。

[backup]
バックアップを行わせる設定については設定次第で異常にキャッシュを吐き出すことになるので、トレーニング後に消すなど保存先に注意。メンテナンスは自前でどうぞという方針のようです。

[tools]
Dataset Tools でタグ付けを行えるようだが、先にLora等でタグを作成していたこともあり、既存の物お使うことでひとまず済ませました。captionとmask がツールの中で設定できるのでありがたいですね。blipのキャプションとwd1.4のタグ付けが行えるので、単体でも使って試してみる予定があります。

画面右下の[start training]を押すと、トレーニングの開始・中断、TensorBoardをクリックすると学習成果の確認、プレビューが行えます。

学習結果例

ひとまず成果が出たのでヨシ!(2024/4/25)

学習前はバリエーションが角度以外ない
宝石入り宝箱
閉じた宝箱

統括 (2024/04 時点では未完)

まだ2024/4時点では完成には至れておりませんが、今まで出来なかったことに手が届く感触が数多くあります。
 完成に至るまでの構想はあっても、実際に実装するまでの課題が多く、いまだSDXLでのカスタムモデル完成までに至れていないのですが、モデル作成に必要な要素が現時点でもそろいつつあり、現時点でも技術面で困ることはそう多くはなさそうです。

この記事が気に入ったらサポートをしてみませんか?