🦊Extract and Save Loraノード
https://gyazo.com/ee64e9d494b06cfe6ebd65f24b77adaf
2つのモデルの差分などからLoraを作れるノード
↑の画像は🦊Chroma(等の拡散モデルとテキストエンコーダーが一体化されてない最近のモデルで)Loraを作る例 まず(最近のDiTモデル等は)clip(テキストエンコーダー)は基本的にLora学習していないため、使うモデルのテキストエンコーダーの同じモデルで差分を取るなど適当に空っぽな奴を作って(自分の重み-自分の重みなので0になるはず…?)渡しておきます
当然、SDXL等、CLIPも学習しているモデルの場合その差分を設定する必要があります。
おそらくSDXL以前のテキストエンコーダーも一緒にLoraに含めるモデルを前提とした作りなのが少し面倒ですが
テキストエンコーダー部分は繋がなくてよかった。(折を見てWorkflowやスクショなどの修正予定)morisoba65536.icon
モデル1に「学習後の(Loraを取り出したい)モデル」を指定します。
モデル2には「学習元のベースモデル(Loraの元となる方)」を指定します。
ノードの最後に「Loraを抽出して保存ノード(ここのページの本題)」にモデルと(適当に処理した)clipを繋ぎます。
保存したいランクを指定(原則2のべき乗(2,4,8,16,32,64,128,256のいずれかと思っておけば良い)である必要がある)します。
ランクが大きくなるほどLoraサイズも倍々に大きくなるため、ものによりますが8〜32程度が大半の用途で必要十分でしょう。
あとは普段通り生成ボタンを押せばLoraが画像出力されるImageフォルダ以下に出力されます。
ノードデフォルトではImageフォルダ以下にLoraフォルダが新たに作られてそこに出力されます。
変換作業にかなり時間がかかります。マシンスペック次第ですが10分〜遅いマシン&重たいモデルだと1時間以上かかる可能性も。(食事なりお風呂なり済ませて来ると良い感じ程度に思っておくと良いです)
🦊Chroma位までならfp16/bf16のlora(dim64)をRTX 3090のVRAM24GBで作れたものの、Wan2.1ではメモリ不足で失敗。morisoba65536.icon FP8なら作れた
ただし出力されるlora自体はfp16…
多分dimを減らすなどすればもう少し余裕を持てると思う。
ComfyUIを--cpuオプションで起動して全ウェイトをDRAM処理なら動く(ただしこれでも96GBがパンパンになるので64GBなどよりメモリが少ない環境ではdimを減らす必要があると思われる。) 約7時間かけて(dim64にて)処理成功、CPU処理なら(時間はとってもかかるが)かなり巨大モデルでもこのノードでLoraを作れるmorisoba65536.icon
現状のノードの問題として使用しないclip分のloraも生成されている
特に機能してなさそうなので問題はなさそうだが容量は無駄に食うmorisoba65536.icon
蒸留モデルがでた時に手っ取り早く蒸留Lora化して他のモデルに適用したりするのが割とお手軽で便利な使い方morisoba65536.icon