-
Notifications
You must be signed in to change notification settings - Fork 876
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support : OFT merge to base model #1580
Conversation
LoRAの部分は変わっていませんが、 |
有用なpull requestをいただき、ありがとうございます。コメントした件についてご確認いただければ幸いです。 |
間違えてクローズしてしまいました。再オープンします。 |
Pull requestに不慣れで、コメントがどこにあるか見つけることができませんでした。 |
私も不慣れでレビューが送信されていませんでした。大変失礼いたしました。 |
修正終わりました。 |
手元でOFTをマージして試しているのですが、どうも思ったような結果が得られません。元の |
ありがとうございます。諸々動作確認等が取れましたのでマージいたしました。時間がかかり申し訳ありませんでした。 |
what is OFT i used translate but not much info |
Please see HF's doc: https://huggingface.co/docs/peft/package_reference/oft |
I read it and It looks like fine tuning / training method do we have it? I see pull request is about merge |
OFT trains additional modules, just like LoRA, but it is a completely different algorithm. It hasn't been studied in the community, so we don't yet know what effects it has. There is a bug in the current OFT implementation in sd-scripts, which I will fix soon. |
awesome i would like to test it. does it train all layers? or optimized like LoRA? |
Now the bug is fixed. OFT doesn't support FLUX.1 yet. I will work on it tomorrow. However, even if we were able to train it, we wouldn't have an inference environment😅
It trains some layers (Linear and Conv2d if specified) like LoRA. See 'COFT with kohya-ss networks.oft' on #983 . I will add a further document later. |
既存のsdxl_merge_lora.pyに対して、
OFTをベースモデルへマージできるように機能追加しました。
Additional Changes
1.OFT学習結果のベースモデルへのマージ対応
複数のOFTのマージは非対応。
2.並列処理による高速化
import concurrent.futuresを用いることで、並列処理化。
OFTはLoRAと比べて、CPUでのマージが長いので並列処理を追加しました(※1)
3. CUDA対応
torch.device('cuda' ・・・行の追加により、CUDAでマージ処理できます(※2)
No.2,3はOFTのみ対応しています。LoRAには非対応です。
理由は、校閲が難しくならないよう情報を小出しにしただけです。変更自体は簡単です(数行書き換えるだけ?)
補足
・ 設計当初、sdxl_merge_lora.pyと独立したスクリプトとして作成を検討しましたが、
OFTは従来sdxl向けの学習方式なので同じ用途ですし、また共有できるライブラリが多いので、
統合する方が使いまわしやすいと考えました。
皆様のご意見を踏まえて対応します。
・ FLUX.1の期待が高まる現在、今さらOFTのマージの提案ではありますが、
VRAM10GB~16GBクラスにおいて、実用面を考慮すると、SDXLとOFTは最高クラスの組み合わせです(※3)。OFT普及のためにぜひ承認をお願いします。
動作確認結果
Lora @ extension for Stable Diffusion web UI と同等画風で、ほぼ同じ構図が出ることを確認済み。
※1:CPU利用の場合、私の環境ではCPU占有率が上がらず1hr以上かかりましたが、並列化によってマージ時間を25%に短縮できました。
※2:変数Rを適用する処理が30min→1secに短縮されました。
※3:VRAM14GB以下だとSDXL Fine tuning は利用困難。LoConや学習層削減するとクオリティ低下が顕著です。
一方、OFTは直行性を考慮した計算効率の高さゆえに、Fine tuningと同等の忠実さ、LoConと同程度のVRAMコストというメリットがあります。
しかしながら、ベースモデルにマージする手段がないため、繰り返しの学習が難しいです。OFTのマージが重要だと判断しました。