LyCORIS : 概要 (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 05/08/2023
* 本ページは、LyCORIS の以下のドキュメントを翻訳した上で適宜、補足説明したものです:
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
- 人工知能研究開発支援
- 人工知能研修サービス(経営者層向けオンサイト研修)
- テクニカルコンサルティングサービス
- 実証実験(プロトタイプ構築)
- アプリケーションへの実装
- 人工知能研修サービス
- PoC(概念実証)を失敗させないための支援
- お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
◆ お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。
- 株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
- sales-info@classcat.com ; Website: www.classcat.com ; ClassCatJP
LyCORIS : 概要
stable diffusion 等の上でパラメータ効率的な再調整を行なう様々なアルゴリズムを実装するプロジェクトです。
このプロジェクトは LoCon (アーカイブ・ブランチ参照) から開始しています。
What we have now
詳細なサンプルと說明については Algo.md or Demo.md をご覧ください。
Conventional LoRA
- LoCon の Conv 層実装を含む。
- 推奨設定
- dim <= 64
- alpha = 1 (or lower, like 0.3)
アダマール積表現による LoRA (LoHa)
- Ref: FedPara: Low-Rank Hadamard Product For Communication-Efficient Federated Learning (FedPara: 通信効率的な連合学習のための低ランク・アダマール積)
- 連合学習用に設計されましたが、rank<=dim^2 のようなクールな特性を持つので、パラメータ効率的な再調整に対して良いはずです。
- Conventional LoRA is rank<=dim
- 推奨設定
- dim <= 32
- alpha = 1 (or lower)
Warning : LoHa で dim>64 を使用するするべきではありません、これは SD の殆どすべての層に対して sqrt(original_dim) を超えます。
LoHa での高い dim の使用は不安定な損失を引き起こしたり、単に NaN になるかもしれません。high dim LoHa を使用したい場合は、低い lr を使用してください。
Warning-Again : パラメータ効率的なアルゴリズムをパラメータ効率が良くない方法で使用することは良い考えではありません。
(IA)^3
- Ref: Few-Shot Parameter-Efficient Fine-Tuning is Better and Cheaper than In-Context Learning (Few-Shot パラメータ効率的な再調整はコンテキスト内学習よりも良く安価である)
- dev 版パッケージ (or ソースコードからインストール) の使用と algo=ia3 の設定によりこの algo を試すことができます。
- このアルゴリズムは遙かに高い lr (およそ 5e-3 ~ 1e-2) を必要とします。
- このアルゴリズムは学習スタイルについては良いですが、転移させるのは困難です (その上で訓練したモデル上でだけ妥当な結果を得られます)。
- このアルゴリズムは非常に小さいファイル (約 200 ~ 300KB) を生成します。
- 実験的 (Experimental)
LoKR
- 基本的には LoHA と同じアイデアですが、クロネッカー積を使用しています。
- このアルゴリズムは非常にセンシティブで lr を調整する必要があるかもしれません。
- このアルゴリズムはキャラクターとスタイルの両方を学習できますが、それは小さいので (自動 factor, full ランク, 2.5 MB)、転移させるのはやはり困難です。
- このアルゴリズムは比較的小さいファイルを生成します (自動 factor: 900 ~ 2500 KB)。
- 小さい因子の使用は大きいファイルを生成しますので、2.5 MB full ランクが十分でないと考える場合はそれを調整できます。
DyLoRA
- Ref DyLoRA: Parameter Efficient Tuning of Pre-trained Models using Dynamic Search-Free Low Rank Adaptation (動的 Search-Free 低ランク Adaptation を使用した事前訓練済みモデルのパラメータ効率的な調整)
- 基本的には lora の訓練トリックです。
- ステップ毎に、LoRA 重みの 1 行/列 (one row/col) だけを更新します。
- k row/col を更新したいときには、重みを再構築するために 0 ~ k row/col (0<= k <=dim) だけを使用します。
- ターゲットに合わせて DyLoRA を簡単にリサイズして、ターゲット dim で訓練した LoRA と同様か、より良い結果を得ることができます。(そして異なる dim で多くの lora を訓練してどれが良いか確認する必要はありません)
- alpha=dim/4 ~ dim で大きな dim を使用する必要があります (1 or dim はお勧めできません)。
- Example: dim=128, alpha=64
- 各ステップで 1 row/col だけを更新しますので、妥当な結果を得るためにはより多くのステップを必要とします。少ないステップでそれを訓練したい場合には、block_size を高い値 (default=0) に設定する必要があるかもしれません (毎ステップ複数の row/col を更新します)。
使用方法
これらの訓練スクリプトを使用するだけです。
- derrian-distro/LoRA_Easy_Training_Scripts
- Linaqruf/kohya-trainer
- bmaltais/kohya_ss
- hollowstrawberry/kohya-colab
For kohya script
sd-scripts の venv をアクティベートしてからこのパッケージをインストールします :
source PATH_TO_SDSCRIPTS_VENV/Scripts/activate
or
PATH_TO_SDSCRIPTS_VENV\Scripts\Activate.ps1 # or .bat for cmd
そしてこのパッケージをインストールできます :
- through pip
pip install lycoris_lora
- from source
git clone https://github.com/KohakuBlueleaf/LyCORIS cd LyCORIS pip install .
最後に、SD モデル用の lycoris モジュールを訓練するように kohya の訓練スクリプトを実行するため、パッケージの kohya モジュールを使用できます :
python3 sd-scripts/train_network.py \
--network_module lycoris.kohya \
--network_dim "DIM_FOR_LINEAR" --network_alpha "ALPHA_FOR_LINEAR"\
--network_args "conv_dim=DIM_FOR_CONV" "conv_alpha=ALPHA_FOR_CONV" \
"dropout=DROPOUT_RATE" "algo=locon" \
algo リスト :
- locon: Conventional 手法
- loha: FedPara により導入されたアダマール積表現
- lokr: クロネッカー積表現
- ia3 : (IA)^3
Tips :
- linear/conv 層を無効にするには network_dim=0 or conv_dim=0 を使用します。
- LoHa/LoKr/(IA)^3 はまだドロップアウトをサポートしていません。
For a1111 の sd-webui
Extension を sd-webui 内にダウンロードしてから、extra netowrks タブで LyCORIS モデルを使用します。
Not For Kohya-ss’ Additional Network
LoCon の抽出
dreambooth モデルのベースモデルから LoCon を抽出することができます。
python3 extract_locon.py <settings> <base_model> <db_model>
<output>
Use –help to get more info
$ python3 extract_locon.py --help
usage: extract_locon.py [-h] [--is_v2] [--device DEVICE] [--mode MODE] [--safetensors] [--linear_dim LINEAR_DIM] [--conv_dim CONV_DIM]
[--linear_threshold LINEAR_THRESHOLD] [--conv_threshold CONV_THRESHOLD] [--linear_ratio LINEAR_RATIO] [--conv_ratio CONV_RATIO]
[--linear_percentile LINEAR_PERCENTILE] [--conv_percentile CONV_PERCENTILE]
base_model db_model output_name
サンプルと異なるアルゴリズムの比較
Citation
(訳注: 原文 参照)
以上