hako-mikan / sd-webui-supermerger

model merge extention for stable diffusion web ui
GNU Affero General Public License v3.0
735 stars 109 forks source link

About LoRA related functions #372

Open vekitan55 opened 5 months ago

vekitan55 commented 5 months ago

Thank you for your response regarding ckptdir and item names.I shared ckptdir and loradir on multiple PCs, so it was easier to handle them. I got a little carried away and put together some requests, focusing on LoRA-related areas, which are relatively weak points in SuperMerger. The following text is long, so it will only be in Japanese.

get from promptは非常に便利な機能ですが,そのままでは使えないことがあります。 取得の際にフォルダ名まで引っ張ってきますが,フォルダ名が付いているとマージに失敗します。A1111で一覧からLoRAを持ってきたときに,フォルダ名をつけることと付けないことがあって,フォルダ名が付いてくるLoRAで問題になります。A1111かSuperMergerのアップデート前にあったものではフォルダ名は付けず,新しいLoRAではフォルダ名を付けるような気配です。私は最近までSuperMergerのアップデートをしていなかったのですが,昔SuperMergerで作ったLoRAにはOutput name自体がありませんでした。現在はOutput nameにフォルダ名が含まれていますが,Output nameにフォルダ名はいらないのでは? おそらくオプションのfilenameで指定された文字列をそのままOutput nameに入れているのだと思われますが,ここはローカル環境のフォルダが指定される可能性がある場所です。うちだとLoRAが1800個くらいありました。フォルダなしでは管理できません。 aaaというフォルダ内に作成したbbb.safetesorsというLoRAのOutput nameはaaa\bbb.safetesorsと内部に記載されていますが,このファイルをcccというフォルダにコピーした場合でもOutput nameは,aaa\bbb.safetesorsのままです(最近公開したLoRAとかよそで動いているのか心配になってきた。ちなみにSuperMergerかTrainTrainのどちらかで作ったLoRAです)。 また,ファイル名とLoRA名(Output nameじゃないLoRAの名前?)などが異なる場合なども使用できません。LoRA on diskのLoRAのボタン一覧を作るときにそのあたりは変換して取得していると思うのですが,プロンプトからの名前からマージで使う名前で持ってくることはできませんか。AgeSlider v20でいうと,ファイル名がage_slider_v20.safetensorsで,プロンプトでは0が消えたage_slider_v2を使い,Output nameはage_slider_v6で,SuperMergerの一覧に出る名前がage_slider_v20と,いろいろ複雑すぎます。プロンプトから持ってきたLoRA群のマージ時にファイル名がおかしいみたいなエラーが出たら,どれがおかしいかわからないので総当たりで探すことになります。一覧に出る奴は「-000005」みたいなのが付きがちですので,いちいち確認しないと判断できません。エラー時にどのファイル名がおかしいのかって出せないんですかね?  また,大量のLoRA(数というより容量)を一度にマージしようとすると,コンソールではVRAM足りないぞというエラーが出てはいるものの,マージ作業自体はそのまま進行して,コンソールを見なければ正常終了したかのように振舞います。マージしたckptの動作がどうにも意味不明にちょっとだけおかしくなって,それでも一応動くという状態になります。発見がかなり困難なのでエラーを出してもらえると助かります。

LoRA関係で一番の不満点はdefault LoRA multiplierという意味不明な機能です。これはなぜ設置されているのでしょうか? LoRA on diskの一覧からLoRAを選択したときのデフォルト値というのはよいのですが,なぜ,記述されているすべてのLoRAの値を書き換えるのでしょうか? 非常に迷惑です。プロンプトからLoRAの情報を取得して,もう1つ足そうかとどれかのLoRA名のボタンを押すと,取得されていたLoRAすべてが新たなデフォルト値に書き換えられます。基本的にLoRA on doskのボタンを押したりすることはないのですが,前述のマージで使用されるLoRA名の確認で見ているうちに間違えて押してしまうことはあります。先日は78個ほどのLoRAをckptにマージする作業をしていましたが,これがあると発狂しそうになります。もちろん,メモにコピーしてはいるのですが,細かい調整はその場でやってしまうので,巻き戻りはかなり打撃が大きいです。なんで追加したLoRAだけに適用しないんですかね? わざわざ全部書き換える理由がわかりません。これがあるので,LoRA on diskのボタンがまったくの死に機能になっています(名前確認には有効ですが)。

話変わって,ckptマージ時のエレメンタルマージとAdjustの項目がONになっているのかどうかをもう少しわかりやすくできませんか。ちょっとおかしいなと思いつつ作業していると,ずっとエレメンタル入ってたよとか,adjust残ってて色がだんだんおかしくなっていくとか,閉じていると気づきにくい現象が発生します。で全部やり直し。use MBWみたいなチェックボックスがMerge!ボタン付近にまとまっているとわかりやすいのですが。

あまり使わないほうがいいとのことでしたが,same to strengthは非常に便利な機能です。ただ,LoRAをマージした場合に,プロンプトで使ったときと同じ比率で効いてくるわけではないようです。なんとなくdimentionで割ってやらねばならないとか,そんな感じの効き方になります。詳細は不明ですが。

最後にSuperMergerにもっとも望まれる機能についてですが,LoRA作業でのログを残すことはできませんか。ckptのHistoryは非常に役立っているのですが,LoRAをマージした記録は手動で残さなければなりません。もちろんメモは取っていますが,それでも完全ではありませんので,もはや再現できないモデルもかなり存在します。文化庁のガイドライン試案などを見ても,AIモデル作成者はその制作過程などを記録しておくことが義務化されることが検討されています。記録を示せない場合,訴訟などがあると不利になることが予想されます。マージのログを残すことは今後必須の機能になるでしょう。というか,ないと使用環境としても実際のところ不便です。 ついでにckptのHistoryも直近100までしかSuperMerger上では見えないのも少し不便です。100個とかブロックマージしていると数日で終わりかねない量です。ページングまでしなくても,500とか1000が追加されるだけでも実用度は大きく上がります。

以上,細かいのはいくらでもありますが,せっかくなので重要なものと簡単そうなものを一気に書いてみました。機能改善などの参考になれば幸いです。