LoRA

Last-modified: 2023-08-27 (日) 23:28:06

LoRA学習における概要~環境構築までの紹介です。

  1. 概要
  2. 環境構築
  3. 教師画像の準備
  4. 学習実施

Microsoftが開発したAIの追加学習方式(Low-Rank Adaptation of Large Language Models)のこと。stable diffusionユーザーの間では追加学習したデータ方式として知られている。

ざっくり言うと、

モデルの他に追加の学習データを自分で作り、画像生成に利用できる夢の仕組み。
例えるならゲームのDLCみたいなもの。
作ったLoRAのファイルは比較的軽量なので、配布したり、他の人が配布しているLoRAを自分の画像生成に利用することもできます。

 

例えば「このモデルすごくキレイなイラスト出せるけど、あのポーズやあの絵柄は出せないんだよな…」みたいな悩みを解決できます。

導入はStable Diffusion web UIよりちょっとだけ難しいかもしれないが、よーく読めば誰でもできるはず。レッツチャレンジ。

 

配布されてるLoRAを使うだけならもっと簡単です。
 誘導→学習が終わったLoRAの使用方法

もっと詳しく言うと、

この辺を読むといいかも。
https://arxiv.org/abs/2106.09685
https://github.com/microsoft/LoRA

英語版解説
https://rentry.org/lora_train

メリット

  • DBと比べて、低VRAMでも学習できる。
    VRAM 8GB以下でも普通に学習できる。
  • DBと比べて、学習結果のデータ容量が小さい。
    比較的公開するのに向いている。
  • 正則化(ランダム3文字のトークンなど)といった手間や知識が不要。

デメリット

  • 一度に1つのキャラ・ポーズ・小物しかうまく出せない。
    • 2つ以上のキャラを同時出すと絵全体が崩壊しやすい・似てない。
    • 2つ以上のLoRAの同時使用も然り
    • 2人以上のキャラを1つのLoRAに同時学習させるのも可能だが、その時は各キャラのリピート数×教師画像数を揃えなければならない。揃わないとどちらのキャラが過学習・学習不足になったりする。
    • 2つ以上のLoRAをマージすることは仕組み上は可能だが、たとえば1つの作品の2人のキャラの2つLoRAを「コレクションパック」にすることは今のところ無理。

メリットが大きく上回るので、気にせず使ってみよう!

各学習方法が拡散モデルにどう寄与するかの図。
vl01e5grs6ca1.png
出典:https://www.reddit.com/r/StableDiffusion/comments/10cgxrx/wellresearched_comparison_of_training_techniques/

 
  • Dream Booth
    新しいコンセプトを理解できるまで、拡散モデル自体を微調整する。
    モデルを直接学習対象に含めるため、再現性という点では最も優れる。
    しかし、ストレージは非効率(新しいモデルを扱う必要がある)
  • Textual Inversion
    新しい概念を理解するための特別な単語を作成する。
    出力は小さな埋め込み
  • LoRA
    拡散モデルにわずかな重みを追加し、変更されたモデルが概念を理解するまでそれらを訓練する
    拡散モデルではなく、それに対する重みを学習する。
  • Hyper Network
    二次的なネットワークを使って、元のネットワークの新しい重みを予測する。

LoRAの特徴として短い所要時間とDreamBoothほどの時間が不要。
DBより再現性は一歩劣るものの、データ容量&VRAM消費というメリットが上回る。
特に2023年時点の市場ニーズにマッチしていて、導入しやすい。
主流GPUのVRAM量(約6~12GBが主流)や回線速度の事情(学習モデル配布における)。

LoRAで学習する場合

  • Gitがインストールされていること
  • Python 3.10.xがインストールされていて、Pathが通っていること
  • GPUのVRAMが目安6GB以上、推奨8GB以上*1

(補足)すでにStable Diffusion web UIを導入済みなら、ほぼ要件を満たしているはずです。

  • wikiの記載内容は項目編集時のものであり、アップデートによって方法が変わる可能性が非常に大きいことに留意してください

他の方のLoRAを使う場合

※GTX16xxではfp16での学習がうまく動作しないため注意が必要です
参考→LoRA/学習方法#d49585eaを参照

kohya-ss氏のsd-scriptsを任意のフォルダにインストールし、環境を構築します。
配布ページ:https://github.com/kohya-ss/sd-scripts

インストール手段は色々あります。
下記を参照してください。

 
余談

■余談
LoRA学習はkohya-ss氏のsd-scriptsがおそらく最も利用者人口が多いのですが、Stable Diffusion web UIでもLoRAの学習は可能です。拡張機能sd_dreambooth_extensionを使用します。

この方法が一番確実です。
「Windows環境でのインストール」を参照してください。
公式の日本語readme

sd-scripts」の親フォルダを作成

フォルダ作成例


Cドライブ
└ AI_illust
 ├ stable diffusion
 └ LoRA_train  ←名称は任意。ここを作業フォルダとする。
   ├sd-scripts ←このフォルダが作成される予定。
   └(ここはLoRA関係のデータ保存スペースとする)

  • 場所はどこでも良い。
    • パス名に日本語を含まないこと。

sd-scriptsのインストール実行

  1. 上記の作業フォルダで(Shift +)右クリック
    「Powershell ウィンドウをここで開く」または「ターミナルで開く」等を選択*2
    sd-scripts_ターミナル.png
  2. Readmeを参考に、コマンドを1行ずつ順に実行していく。
    公式の日本語readme
    sd-scripts_コマンド貼付.png
    ※コマンドは1行づつ丸コピーで実行しよう 下手に手入力やアレンジするとインストールがうまくいかない可能性が高まる。


【参考】コマンド解説

【参考】コマンド解説
PowerShell版を元に説明します。

No.コマンド(参考)効果
1git clone https://github.com/kohya-ss/sd-scripts.git今開いているフォルダに、GitHubからsd-scriptsコードをダウンロード
2cd sd-scriptssd-scriptsフォルダへ移動し、作業フォルダとする。
3python -m venv venv作業フォルダ内に名称「venv」の仮想環境を作成する
4.\venv\Scripts\activatevenv仮想環境を有効化する
5pip install torch==1.12.1+cu116 torchvision==0.13.1+cu116 --extra-index-url https://download.pytorch.org/whl/cu116venv環境へtorch,torchvisionをインストール
6pip install --upgrade -r requirements.txt「requirements.txt」に記載のライブラリをインストール
7pip install -U -I --no-deps https://github.com/C43H66N12O12S2/stable-diffusion-webui/releases/download/f/xformers-0.0.14.dev0-cp310-cp310-win_amd64.whlxformers ver.0.0.14をインストール。依存環境を含まず単独で導入する
8cp .\bitsandbytes_windows\*.dll .\venv\Lib\site-packages\bitsandbytes\bitsandbytes作業フォルダからvenvフォルダ内へコピー(インストール)
9cp .\bitsandbytes_windows\cextension.py .\venv\Lib\site-packages\bitsandbytes\cextension.py同様にcextension.pyをコピー。
10cp .\bitsandbytes_windows\main.py .\venv\Lib\site-packages\bitsandbytes\cuda_setup\main.py同様にmain.pyをコピー。
11accelerate config(画面表示とreadmeに従い)accelerateを手動で設定する。設定内容はreadme参照。
accelerate config解説 ※ただし、公式readmeの方がわかりやすい

accelerate config解説

初回のコンフィグ設定が始まるので、次のように答えていく。

In which compute enviroment are you runnning?
Please select achoice using the arrow or number keys, and selecting with enter
 * This machine

Which type of machine are you using?
Please select a choice using the arrow or number keys, and selecting with enter
 * No distributed training

ここまでは一番上の選択肢をそのまま選ぶのでエンターを押すだけでいい。

Do you want to run your training on CPU only (even if a GPU is available)? [yes/NO]:NO
Do you wish to optimize your script with torch dynamo? [yes/NO]:NO
Dou you want to use DeepSpeed? [yes/NO]:NO
What GPU(s) (by id) should be used for training on this machine as a comma-seperated list? [all]:all

これらの質問には、それぞれ該当する答えを入力してエンターを押す。つまり、順番に「NO」「NO」「NO」「all」で答える。

Dou you wish to use FP16 or BF16 (mixed precision)?
Please select a choice using the arrow or number keys, and selecting with enter
 no
 *fp16
 bf16

注意:ここで選択する際に、矢印キーで選択しようとするとプログラムが落ちる不具合があるので、数字キーで選択する。それぞれ0,1,2が該当するので、1を押せば「fp16」にカーソルが合うのでエンター。「fp166」みたいに表示されてるかもしれないが気にしない。
}}
インストールがうまくいかないときは
①前提条件を満たしているか今一度確認する
②一度sd-scriptsフォルダごと全削除して最初から再度やりなおす
③それでもダメならこちらの手順とほぼ同じだが 下記リンクの公式の手順を試してみる
https://github.com/kohya-ss/sd-scripts/blob/main/README-ja.md →Windows環境でのインストール

[Tips]楽したいなら下記でもOK
手順1:上記Readmeのコマンドプロンプト版をtxtファイルにコピペ
手順2:拡張子をbatに変更。
手順3:batファイルを実行。
※ちなみに、後述のとしあきbatはこれとほぼ同じ。

※直リンク対策のため、一時的に公開を停止しています。(2023/05/05)
 お求めの方はスレまでご相談ください。
 ファイルの再配布は自由とのことなので、誰かしらアップしてくれるかも…しれない
f73639.zipをDLして解凍する fu2248601
同梱の「りーどみー.txt」をよく読む

出典

25 無念 Name としあき 23/03/25(土)19:46:41 ID:xnEfCY0I No.1080097531 del そうだねx35
たておつkemono
f73639.zip
超初心者向けLoRA導入セット更新しました
・Lycoris対応(インストールバッチ、更新バッチ)
・locon,loha用実行バッチ追加
・LoRA_Easy_Training_Scripts用は削除しました
・以前に導入済みの人は超初心者以外の方.txtを読んで下さい
あと再配布はご自由にどうぞ
今まで通りこのスレ内でしかサポートは出来ないけど

インストール手順

インストール手順
まず f73639.zip をダウンロードし、学習環境を構築したい場所に解凍します。
※直リンク対策のため、一時的に公開を停止しています。(2023/05/05)

りーどみーに従って親フォルダのフォルダ名に日本語やスペースを含まないフォルダに解凍します
Stable Diffusion web UIが設置してあるフォルダとは無関係です
できるだけ空き容量に余裕があるドライブが良いでしょう

説明を再開します。今お手元のフォルダは
lora_traning_step0_1.png
このようになっているものと思います。
さっそく画像で赤枠に囲まれたバッチファイルを実行して Sd-Scripts をインストールしていきましょう。
lora_traning_step0_2.png
キー入力を待つ画面に移るのでキーボードのキーを何でもいいのでひとつ押します。
lora_traning_step0_3.png
粛々とインストールの処理が始まりました。
回線状況にもよりますが、おおよそ5~10分ほどの時間ファイルのダウンロードとインストールが行われます。
そしてそれが終了するとコンフィグ設定の画面へと遷移します。
lora_traning_step0_4.png
画像の中でも注意喚起されていますが次のように設定を進めていって下さい。
まずはThis machineに*(アスタリスク)を付けた状態でエンターです。最初から付いているのでそのままエンターで構いません。
lora_traning_step0_5.png
No distributed traningでエンター。選択して次の設定に進みます。
lora_traning_step0_6.png
Do you want to run your traning on CPU only?(トレーニングにはCPUのみを使うか?)と聞かれますので
NOとキーボードで打ち込みます。
lora_traning_step0_7.png
そしてエンター。
lora_traning_step0_8.png
これもキーボードで直接NOと打ち込みます。そしてエンターキー。
lora_traning_step0_9.png
これにもNO。そしてエンター。
lora_traning_step0_10.png
トレーニングに使うGPUをIDごとに指定せよ(意訳)と聞かれるのでこれにはallと打ち込んでエンター。

次の画像に移る前に最大級の注意喚起をしておきます。
1を押して下さい。
とにかく絶対にカーソルキーを押さないように!!!いいですね!!!!!!!!!!!!
1を押せ!!!
lora_traning_step0_11.png
1を押すのに成功すれば下のようなバグのような表示になりますがこれが成功の形です。
lora_traning_step0_12.png
もう大丈夫です。エンターを押して下さい。ただし決してカーソルキーに触れないように。
lora_traning_step0_13.png
そして初期設定のコンフィグが完了し、キー待ちの状態となるので何かひとつキーを押して下さい。
もうカーソルキーに触れても大丈夫です。

※操作を間違った場合は再度"install_sd_scripts.bat"を実行してやり直せば問題ありません

lora_traning_step0_14.png
フォルダの中に sd-scripts が加わり学習環境が整いました。

  1. 下記URLを開く
    https://github.com/derrian-distro/LoRA_Easy_Training_Scripts/releases/tag/installers-v5
  2. ここから「install_sd_scripts_~.bat」ファイルをダウンロード
  3. インストールしたいフォルダに入れる。
    Stable Diffusion web UIとは独立したプログラムなので、同じフォルダである必要はない
    ・迷ったら、「C:\stable diffusion\webui\models\Lora」
     ※ドライブレターは各々の環境によって変えること。Loraフォルダは自作する。
  4. 「install_sd_scripts_~.bat」を実行する。
      すると、必要なデータが自動でダウンロードされる。
  5. 正しく導入できれば
     「LoRA_Easy_Training_Scripts」フォルダに「run_popup.bat」ができるので、これを使うことになります。

下記URL記載の通りにインストールを実施する
https://github.com/derrian-distro/LoRA_Easy_Training_Scripts#installation

使用方法や設定保存がjson→tomlと以前の物から変わっており
互換性が無くなっています
以前から使っていた人はアップデートではなく新規インストールをおススメします

インストール、使い方については下記も参考に
LoRA_Easy_Training_Scripts(2023-05-22以降のGUI版)の使い方

Stable Diffusion web UIで入出力ディレクトリや学習パラメータを設定し、学習コマンドの生成&実行ができるツール。
機械学習のWebAPIに特化した「Gradio」というライブラリを利用して開発されている。
フォルダや学習パラメータのプリセットを保存/読込する機能が便利。

導入方法 (2023/04/24更新) 

導入方法 (2023/04/24更新)
引用: https://github.com/bmaltais/kohya_ss
GUI開発者Bernard Maltais氏のチュートリアル動画: リンク

  1. インストール
    ※更新によって導入方法が変わる可能性があるので、実行する前に上記のリンクのreadme.mdを見て最新の手順を確認しよう。
    インストールしたいフォルダでコマンドプロンプトを開いて以下のコマンドを実行。
    最初に導入するライブラリ(torch)のverを回答する。(分からない人は"recommanded"の方を選択する)
    最後の行( accelerate config)が実行されると質問が出てくるので以下のように回答。
    「This machine」「No distributed training」「NO」「NO」「NO」「all」「fp16」
    ※ 選択式の問は、日本語キーボードだと十字キーは使えないので数字キー(1,2,3...)で選択する
    git clone https://github.com/bmaltais/kohya_ss.git
    cd kohya_ss
    .\setup.bat
    コマンドプロンプトを閉じる
  2. GUI起動
    インストールしたフォルダに「gui.bat」が出来ているので実行。
    ブラウザで以下にアクセス
    http://127.0.0.1:7860 (デフォルトの場合)

Finetuneする時最初からUse latent filesにチェックが入っているが、用意が無ければオフにしないとファイルが見つからないと駄々をこねて動かない
公式でも別にいらないって言ってるしオフにしよう
メタデータなどはとしあき製のjson作る奴が共通で使えるので便利に使うと良い

下記の通りです。Paperspaceで一応の動作を確認いたしました。
なお仮想環境の構築は上手く行っておらず、クラウドだからということで無理やり進めています。

もっと見る
LoRA @ Paperspace

 ##初回のみ
mkdir LoRA

git clone https://github.com/kohya-ss/sd-scripts.git LoRA/sd-scripts
git clone https://github.com/derrian-distro/LoRA_Easy_Training_Scripts.git LoRA/LoRA_Easy_Training_Scripts

cp LoRA/LoRA_Easy_Training_Scripts/lora_train_command_line.py LoRA/sd-scripts
 ##

apt update -y
apt upgrade -y
cd LoRA/sd-scripts

 ## 確実に動かしたい人(xformersを使わない場合)
pip install torch==1.12.1+cu116 torchvision==0.13.1+cu116 --extra-index-url https://download.pytorch.org/whl/cu116
pip install -U -r requirements.txt

 ## 不安定でも高速化を目指す場合(xformersを使う場合)
pip install torch==1.13.1+cu117 torchvision==0.14.1+cu117 --extra-index-url https://download.pytorch.org/whl/cu117
pip install -U -r requirements.txt
pip install -U xformers==0.0.17.dev441

accelerate config

20230318版(もし動かないときは「PaperSpaceでkohya版LoRAを動かす方法」のlora_train_command_line.py絡み以外のとこを実行してからやると動くかも)
(現在LoRA_Easy_Training_Scripts/lora_train_command_line.pyがそもそも存在しない為上記の手順では動作しなかった)

LoRA @ Paperspace

 ##初回のみ
mkdir LoRA

git clone https://github.com/kohya-ss/sd-scripts.git LoRA/sd-scripts
git clone https://github.com/derrian-distro/LoRA_Easy_Training_Scripts.git LoRA/LoRA_Easy_Training_Scripts

 ##

apt update -y
apt upgrade -y
cd LoRA/sd-scripts

python -m venv venv
source ./venv/bin/activate
pip install torch==1.12.1+cu116 torchvision==0.13.1+cu116 --extra-index-url https://download.pytorch.org/whl/cu116
pip install --upgrade -r requirements.txt
 ## requirements.txtにtoriton居たかも
pip install -U --pre triton
 ## ここまでは頭に ! を付けてJupyterで実行してもいい

 ## 以下Terminalで実行
accelerate config

 ## 最初の実行前に以下Terminalで実行(Terminalを破棄して新しいTerminal起動したときはまた実行)
cd /notebooks/LoRA/sd-scripts
./venv/bin/activate
 ## 実行コマンドをTerminalで実行(全角で説明してる箇所は適宜書き換え。train_batch_sizeは最初1でちゃんと動いたらもっと大きい値にしてもいい)
accelerate launch --num_cpu_threads_per_process 12 train_network.py --pretrained_model_name_or_path=ベースにするモデルのパス(永続ストレージに入れたなら/storage/以下のどこかにある) --train_data_dir=/notebooks/LoRA/Training --reg_data_dir=/notebooks/LoRA/reg --output_dir=学習済みLoRAモデルの保存先DIRパス --resolution=320,960 --train_batch_size=1 --learning_rate=8e-5 --max_train_epochs=10 --save_every_n_epochs=1 --save_model_as=safetensors --clip_skip=2 --seed=36 --color_aug --network_module=networks.lora --keep_tokens=7 --enable_bucket --network_dim=64

あとは学習開始フェーズです
好きなオプションを付けましょう

accelerate launch --num_cpu_threads_per_process 12 train_network.py --pretrained_model_name_or_path=/notebooks/stable-diffusion-webui/models/Stable-diffusion/ACertainty.ckpt --train_data_dir=/notebooks/LoRA/Training --reg_data_dir=/notebooks/LoRA/reg --output_dir=/notebooks/LoRA/testLoRA --resolution=320,960 --train_batch_size=8 --learning_rate=8e-5 --max_train_epochs=10 --save_every_n_epochs=1 --save_model_as=safetensors --clip_skip=2 --seed=36 --color_aug --network_module=networks.lora --keep_tokens=7 --enable_bucket --network_dim=64

学習をモデルから再開する場合

--network_weights
 

LoRA/学習方法ページへ続く。

 

最新の5件を表示しています。コメントページを参照

  • 教師画像数多くなってきたのでリピート数減らしたいんですが、10から減らすときはファインチューニングも無効にしないとだめでしょうか。 -- 2023-07-21 (金) 11:04:32
    • リピート数にファインチューニングは関係ないよ。 -- 2023-07-21 (金) 12:31:43
      • ありがとうございます。単純にリピート減らしてフォルダ名の数字変更します -- 2023-07-22 (土) 21:45:45
  • すみません。cp .\bitsandbytes_windows\cextension.py .\venv\Lib\site-packages\bitsandbytes\cextension.pyのコマンドを入力すると、「cp : パス 'C:\Users\shun0\bitsandbytes_windows\cextension.py' が存在しないため検出できません。発生場所 行:1 文字:1+ cp .\bitsandbytes_windows\cextension.py .\venv\Lib\site-packages\bits ...+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (C:\Users\shun0\...s\cextension.py:String) [Copy-Item], ItemNotFoundExce ption + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.CopyItemCommand」というエラーが出てしまい、途方に暮れています。何が原因なのでしょうか。 -- 2023-07-30 (日) 01:04:09
    • 何が原因と言われてもファイルが無いからとして言えないよ
      コマンドの実行場所は間違えていないかい? -- 2023-07-31 (月) 11:06:06
  • ページ行数制限1600行に近いので、ページの一部を別ページに移管しますね。 -- 2023-08-11 (金) 17:18:25
    • LoRA/学習方法」ページを新設して移植完了。
      既存のコメントは量が多いので、両ページに置きっぱなしにしています。ページの趣旨と関係ないコメントが表示されていますが、ご容赦ください。 -- 2023-08-11 (金) 17:58:09
  • コメント欄が長いので、ページの閲覧性の都合により、最新表示件数を10→5件に変更しました -- 2023-08-11 (金) 18:01:04
  • 「'accelerate' は、内部コマンドまたは外部コマンド、~~」これが出る人はsd-scriptsのセットアップ後にフォルダーを移動している可能性がある。venvだから移動してもいいんじゃねーの?って思ったけどそうではないみたい。 -- 2023-08-15 (火) 18:30:17

(Tips)

  • 質問をするならここを見て!
     
  • 既存コメントの先頭にあるラジオボタンをONにすると、そのコメントの下にぶら下げ返信する形になる(ツリー構造)。
  • コメントの文中で↵ボタン(下の画像参照)を押すと「&br;」の文字列が挿入される。これは送信後に改行として機能するので、文章の整形に役立つ。
    br.png

*1 4GBでも動くらしいが、実用上(そこそこの学習精度を求める場合の学習速度)はかなり厳しい(Automatic1111氏の'23/5月情報)。
*2 OSにより開き方が異なる