LoRA学習における概要~環境構築までの紹介です。
+''概要''
+''環境構築''
+教師画像の準備
+学習実施
|#contents|
*LoRAってなんなのさ [#o040f513]
Microsoftが開発したAIの追加学習方式(''Lo''w-''R''ank ''A''daptation of Large Language Models)のこと。stable diffusionユーザーの間では追加学習したデータ方式として知られている。
#shadowheader(3,ざっくり言うと)
モデルの他に''追加の学習データを自分で作り、画像生成に利用できる''夢の仕組み。
例えるならゲームのDLCみたいなもの。(厳密には従来とは違う学習システムの事を指すが、イラスト生成において用語が出てくる場合、LoRA=モデルに影響を与えるファイルの事だと思っていい)
作ったLoRAのファイルは比較的軽量なので、配布したり、他の人が配布しているLoRAを自分の画像生成に利用することもできます。
#br
~例えば「このモデルすごくキレイなイラスト出せるけど、あのポーズやあの絵柄は出せないんだよな…」「あのキャラ使いたけどマイナーだからプロンプトでも作れないんだよなあ…」みたいな悩みを解決できます。
~導入は[[Stable Diffusion web UI]]よりちょっとだけ難しいかもしれないが、よーく読めば誰でもできるはず。レッツチャレンジ。
#br
配布されてるLoRAを使うだけならもっと簡単です。
誘導→[[学習ファイルの使い方#学習データの使用方法>学習ファイルの使用方法#ke159893]]
#shadowheader(3,もっと詳しく言うと、)
この辺を読むといいかも。
-https://arxiv.org/abs/2106.09685
-https://github.com/microsoft/LoRA
英語版解説
-https://rentry.org/lora_train
#shadowheader(3,もう少しわかりやすく説明して、)
kohya氏((後述するLoRA学習プログラムの制作の方です))が太鼓判を押したおすすめ解説
-https://twitter.com/kohya_tech/status/1678549493615321095
//※解説ページ(https://hoshikat.hatenablog.com/entry/2023/05/26/223229)への直リンクはあえて貼らないでおきますね。kohya氏がツイートを消したくなったら、当wikiのリンクを消滅できる構造にしておきたい。
//kohya氏のお墨付きがあることが大事だし、せっかくなのでkohya氏のことを知った上でsd-scriptsを使用していただきたい。
*LoRAの特徴 [#h133df53]
**LoRAのメリット・デメリット [#keac4e73]
~''メリット''
- [[DB]]と比べて、低VRAMでも学習できる。
VRAM 8GB以下でも普通に学習できる。
- [[DB]]と比べて、学習結果のデータ容量が小さい。
比較的公開するのに向いている。
-正則化(ランダム3文字のトークンなど)といった手間や知識が不要。
-扱う情報が少ない為、直接モデルをファインチューニングするより調整が上手く行きやすい。
~''デメリット''
-LoRAの作成、LoRAの適用は''必ずしも上手くいくわけではない''。
--LoRA学習の最大の問題は''手間と時間''である。
--対応する画像を用意しなければならず、時には加工も必要。
--画像の枚数分だけ特徴をタグ付けしたテキストファイルも準備する必要がある。(自動化も出来るが、自動化は精度に問題があったりする)
--完成したLoRAが''失敗作'''であれば学習はやり直し。設定、素材を見直して再学習となる。
--グラボの性能が低いと学習にかかる時間は更に''増加''する。
-まだ2人以上のキャラを同時出すのは難しいが、技術の向上により改善されつつある。
//--2つ以上のLoRAの同時使用も然り。Loraを混ぜる使い方もあるので
-- 2人以上のキャラを1つのLoRAに同時学習させるのも可能だが、リピート数×教師画像を揃えるなどの工夫が必要。
//-- 2つ以上のLoRAをマージすることは仕組み上は可能だが、たとえば1つの作品の2人のキャラの2つLoRAを「コレクションパック」にすることは今のところ無理。civitaiでコレクションパックを見たことがある。
-互換性の問題
--SD1.5で作ったLoRAはSD3、FLUX、XLでは使えず逆も他の組み合わせも同様。
--LoRAを製作したモデルとLoRAを使用するモデルが違う場合も互換性を損ないやすい。
---しかし、モデルが違っていてもLoRA元になったモデルに近いほどLoRAもそのまま使える可能性が高い。
Ponyで作ったLoRAならPony系、Animagineで作ったLoRAならAnimagine系、Illustriousで作ったLoRAならIllustrious系で使うのが一般的。
拾ったLoRAを適用するだけなら簡単なので、ぜひ使ってみよう!
LoRAを作るメリットは大きいので興味があれば学習もチャレンジしてみて欲しい。
**技術的にくわしく! [#o9bd5732]
各学習方法が拡散モデルにどう寄与するかの図。
&attachref(./vl01e5grs6ca1.png,50%);
出典:[[https://www.reddit.com/r/StableDiffusion/comments/10cgxrx/wellresearched_comparison_of_training_techniques/>https://www.reddit.com/r/StableDiffusion/comments/10cgxrx/wellresearched_comparison_of_training_techniques/]]
#br
-Dream Booth
新しいコンセプトを理解できるまで、拡散モデル自体を微調整する。
モデルを直接学習対象に含めるため、再現性という点では最も優れる。
しかし、ストレージは非効率(新しいモデルを扱う必要がある)
-Textual Inversion
新しい概念を理解するための特別な単語を作成する。
出力は小さな埋め込み
-''LoRA''
''拡散モデルにわずかな重みを追加し、変更されたモデルが概念を理解するまでそれらを訓練する''
拡散モデルではなく、それに対する重みを学習する。
-Hyper Network
二次的なネットワークを使って、元のネットワークの新しい重みを予測する。
~LoRAの特徴として短い所要時間とDream Boothほどの時間が不要。
Dream Boothより再現性は一歩劣るものの、データ容量&VRAM消費というメリットが上回る。
特に2023年時点の市場ニーズにマッチしていて、導入しやすい。
主流GPUのVRAM量(約6~12GBが主流)や回線速度の事情(学習モデル配布における)。
//ここにあった文章は、次項やtipsにより情報をケアできているのでカット。混乱防止。
*学習に必要な前提条件 [#m5f9eaae]
**スペック要件 [#t0fa8816]
#shadowheader(3,LoRAで学習する場合)
- [[Git]]がインストールされていること
- Python 3.10.xがインストールされていて、Pathが通っていること
- GPUのVRAMが''あればあるほど良い''。VRAM6GBでも学習可能ではあるが、互換性の問題からNvidiaのRTX30シリーズ以上が望ましい。
- 学習速度の観点からGPU性能も高い方が良い。AI学習はVRAMが全てというのは間違い。
>(補足)すでにStable Diffusion web UIを導入済みなら、ほぼ要件を満たしているはずです。
-&color(red){wikiの記載内容は項目編集時のものであり、アップデートによって方法が変わる可能性が非常に大きいことに留意してください};
***他の方のLoRAを使う方法 [#y3f75d7a]
-Stable Diffusion web UIが使えれば、準備OKです。
使い方はこちら→[[学習ファイルの使い方>学習ファイルの使用方法]]
画像LoRAなら使い方はこちら→[[よくある質問/LoRA(画像生成編)>よくある質問#LoRA_ig]]
***NVIDIA GTX16xx系のグラボ人向け [#r1b07cef]
//※%%GTX1660ではLoRA学習自体は完了するものの全く内容が反映されないという報告があります。GTX16xxでの成功例があれば報告してください。%%
※GTX16xxではfp16での学習がうまく動作しないため注意が必要です
参考→[[LoRA/学習方法#d49585ea]]を参照
*学習に必要な導入手順 [#a57a00f4]
kohya-ss氏のsd-scriptsを任意のフォルダにインストールし、環境を構築します。
配布ページ:https://github.com/kohya-ss/sd-scripts
インストール手段は色々あります。
下記を参照してください。
#br
#fold(余談){{
>■余談
LoRA学習はkohya-ss氏のsd-scriptsがおそらく最も利用者人口が多いのですが、[[Stable Diffusion web UI]]でもLoRAの学習は可能です。拡張機能sd_dreambooth_extensionを使用します。
}}
**sd-scripts公式のインストール方法 [#install_sdscripts]
この方法が一番確実です。
「Windows環境でのインストール」を参照してください。
[[公式の日本語readme>https://github.com/kohya-ss/sd-scripts/blob/main/README-ja.md]]
#shadowheader(3,Python 3.10.11 のインストール)
//20240727 Win11 のデフォが Python 3.12 系でインストールに詰まったため追記しました
以下の手順は Python 3.10 系で行う必要があるため、インタプリタをインストールします。
以下のリンクからインストーラをダウンロードし、インストールしてください。
[[Python 3.10.11 の Windows installer (64-bit)>https://www.python.org/ftp/python/3.10.10/python-3.10.10-amd64.exe]]
それ以外のOS・バージョンは https://www.python.org/downloads/ から探してください。
- インストール先はデフォルトでOK、venvで個別に指定するのでPathを通す必要はありません
- Python のインストール先 (デフォルトであれば C:\Users\<ユーザ名>\AppData\Local\Programs\Python) を確認し、以下のように ''Python310'' が作成されていればOK。デフォルトが違う場合適時読み替えてください。
> ''Python フォルダ構成例''
~
C:
└ \Users\<ユーザ名>\AppData\Local\Programs\Python
├ ''Python310''
├ ...
└ Python3xx (任意の他バージョン)
~
#shadowheader(3,「sd-scripts」の親フォルダを作成)
>''フォルダ作成例''
~
Cドライブ
└ AI_illust
├ &color(grey){stable diffusion};
└ ''&color(red){LoRA_train};'' ←名称は任意。ここを''作業フォルダ''とする。
├&color(grey){sd-scripts}; ←このフォルダが作成される予定。
└&color(grey){(ここはLoRA関係のデータ保存スペースとする)};
-場所はどこでも良い。
--パス名に日本語を含まないこと。
#shadowheader(3,sd-scriptsのインストール実行)
+上記の作業フォルダで(Shift +)右クリック
「Powershell ウィンドウをここで開く」または「ターミナルで開く」等を選択((OSにより開き方が異なる))
&attachref(./sd-scripts_ターミナル.png,50%);
+Readmeを参考に、コマンドを1行ずつ順に実行していく。
[[公式の日本語readme>https://github.com/kohya-ss/sd-scripts/blob/main/README-ja.md]]
&attachref(./sd-scripts_コマンド貼付.png,50%);
※コマンドは''1行づつ丸コピーで実行''しよう 下手に手入力やアレンジするとインストールがうまくいかない可能性が高まる。
~
#fold(【参考】コマンド解説){{
【参考】コマンド解説
PowerShell版を元に説明します。
|No.|コマンド(参考)|効果|h
|1|python -V|現在の Python バージョンを確認する|
|2|git clone https://github.com/kohya-ss/sd-scripts.git|今開いているフォルダに、GitHubからsd-scriptsコードをダウンロード|
|3|cd sd-scripts|sd-scriptsフォルダへ移動し、作業フォルダとする。|
|4|py -3.10 -m venv venv|インタプリタに Python 3.10.11 を指定して作業フォルダ内に名称「[[venv]]」の仮想環境を作成する|
|5|.\venv\Scripts\activate|[[venv]]仮想環境を有効化する|
|6|python -V|仮想環境の Python バージョンを確認し、Python3.10.11 となっていることを確認する|
|7|pip install torch==1.12.1+cu116 torchvision==0.13.1+cu116 --extra-index-url https://download.pytorch.org/whl/cu116|[[venv]]環境へtorch,torchvisionをインストール|
|8|pip install --upgrade -r requirements.txt|「requirements.txt」に記載のライブラリをインストール|
|9|pip install -U -I --no-deps https://github.com/C43H66N12O12S2/stable-diffusion-webui/releases/download/f/xformers-0.0.14.dev0-cp310-cp310-win_amd64.whl|xformers ver.0.0.14をインストール。依存環境を含まず単独で導入する|
|10|cp .\bitsandbytes_windows\*.dll .\venv\Lib\site-packages\bitsandbytes\|[[bitsandbytes]]を作業フォルダから[[venv]]フォルダ内へコピー(インストール)|
|11|cp .\bitsandbytes_windows\cextension.py .\venv\Lib\site-packages\bitsandbytes\cextension.py|同様に[[cextension.py]]をコピー。|
|12|cp .\bitsandbytes_windows\main.py .\venv\Lib\site-packages\bitsandbytes\cuda_setup\main.py|同様にmain.pyをコピー。|
|13|accelerate config|accelerateを手動で設定する。学習のパフォーマンスに直結する重要項目|
}}
accelerate config解説 →[[こちらを参照>accelerate#accelerate_config]]
>''インストールがうまくいかないときは''
①前提条件を満たしているか今一度確認する
②一度sd-scriptsフォルダごと全削除して最初から再度やりなおす
>[Tips]楽したいなら下記でもOK
手順1:上記Readmeのコマンドプロンプト版をtxtファイルにコピペ
手順2:拡張子をbatに変更。
手順3:batファイルを実行。
**derrian-distro氏製のinstallers v5を利用する場合 [#e191b17d]
+下記URLを開く
https://github.com/derrian-distro/LoRA_Easy_Training_Scripts/releases/tag/installers-v5
+ここから「install_sd_scripts_~.bat」ファイルをダウンロード
+インストールしたいフォルダに入れる。
・[[Stable Diffusion web UI]]とは独立したプログラムなので、同じフォルダである必要はない
・迷ったら、「C:\stable diffusion\webui\models\Lora」
※ドライブレターは各々の環境によって変えること。Loraフォルダは自作する。
+「install_sd_scripts_~.bat」を実行する。
すると、必要なデータが自動でダウンロードされる。
+正しく導入できれば
「LoRA_Easy_Training_Scripts」フォルダに「run_popup.bat」ができるので、これを使うことになります。
**derrian-distro氏製のLoRA Easy Training Scripts(GUI版)を利用する場合 [#d3d9219f]
下記URL記載の通りにインストールを実施する
https://github.com/derrian-distro/LoRA_Easy_Training_Scripts#installation
使用方法や設定保存がjson→tomlと以前の物から変わっており
互換性が無くなっています
以前から使っていた人はアップデートではなく新規インストールをおススメします
インストール、使い方については下記も参考に
[[LoRA_Easy_Training_Scripts(2023-05-22以降のGUI版)の使い方>https://scrapbox.io/r2u/LoRA_Easy_Training_Scripts%EF%BC%882023-05-22%E4%BB%A5%E9%99%8D%E3%81%AEGUI%E7%89%88%EF%BC%89%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9]]
** kohya_ss GUIを利用する場合 [#yd9b78e0]
[[Stable Diffusion web UI]]で入出力ディレクトリや学習パラメータを設定し、学習コマンドの生成&実行ができるツール。
機械学習のWebAPIに特化した「Gradio」というライブラリを利用して開発されている。
フォルダや学習パラメータのプリセットを保存/読込する機能が便利。
#fold(導入方法 (2023/04/24更新) ){{
導入方法 (2023/04/24更新)
引用: https://github.com/bmaltais/kohya_ss
GUI開発者[[Bernard Maltais氏>https://www.youtube.com/@BernardMaltais]]のチュートリアル動画: [[リンク>https://www.youtube.com/playlist?list=PLDbD_CRCTK9YZfXw1z0PWD3_G3aKnn6rE]]
+ ''インストール''
&color(red){ ※更新によって導入方法が変わる可能性があるので、実行する前に上記のリンクの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
コマンドプロンプトを閉じる
+ ''GUI起動''
インストールしたフォルダに「gui.bat」が出来ているので実行。
ブラウザで以下にアクセス
http://127.0.0.1:7860 (デフォルトの場合)
}}
Finetuneする時最初からUse latent filesにチェックが入っているが、用意が無ければオフにしないとファイルが見つからないと駄々をこねて動かない
公式でも別にいらないって言ってるしオフにしよう
メタデータなどはとしあき製のjson作る奴が共通で使えるので便利に使うと良い
**Linux環境で動かす場合 [#x5a23f01]
//%%※Paperspaceをはじめとしたクラウド環境での設定はこれで合ってるかわかりません。わかる方いましたら修正お願いいたします。%%
//更新し、Paperspaceで一応の動作を確認いたしました。
下記の通りです。Paperspaceで一応の動作を確認いたしました。
なお仮想環境の構築は上手く行っておらず、クラウドだからということで無理やり進めています。
#fold(もっと見る){{{
#pre{{
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==2.0.1+cu118 torchvision==0.15.2+cu118 --index-url https://download.pytorch.org/whl/cu118
pip install -U -r requirements.txt
pip install -U xformers==0.0.20
accelerate config
}}
20230318版(もし動かないときは「PaperSpaceでkohya版LoRAを動かす方法」のlora_train_command_line.py絡み以外のとこを実行してからやると動くかも)
(現在LoRA_Easy_Training_Scripts/lora_train_command_line.pyがそもそも存在しない為上記の手順では動作しなかった)
#pre{{
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
}}
あとは学習開始フェーズです
好きなオプションを付けましょう
#pre{{
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
}}
学習をモデルから再開する場合
#pre{{
--network_weights
}}
}}}
bmaltais/kohya_ssを使って学習する場合
#fold(もっと見る){{{
Start from ScratchでNotebooks作成
Advanced optionsにチェックを入れてContainer Nameに以下のカスタムコンテナ名を入力して開始する
#pre{{
cyberes/gradient-base-py3.10:latest
}}
https://github.com/bmaltais/kohya_ss
リンクのあるGoogle colab用ipynbに若干修正
同一のipynb内でセルを区切って実行
#pre{{
!pip install dadaptation==3.1 diffusers[torch]==0.17.1 easygui==0.98.3 einops==0.6.0 fairscale==0.4.13 ftfy==6.1.1 gradio==3.36.1 huggingface-hub==0.14.1
!pip install lion-pytorch==0.0.6 lycoris_lora==1.8.0.dev6 open-clip-torch==2.20.0 prodigyopt==1.0 pytorch-lightning==1.9.0 safetensors==0.3.1 timm==0.6.12
!pip install tk==0.1.0 transformers==4.30.2 voluptuous==0.13.1 wandb==0.15.0 xformers==0.0.20 omegaconf
%cd /notebooks
!git clone https://github.com/TimDettmers/bitsandbytes.git
%cd /notebooks/bitsandbytes
!make CUDA_VERSION=116 # 116 117 118, 環境に合わせる
!export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python3.10/dist-packages
!python setup.py install
%cd /notebooks
!git clone -b v1.0 https://github.com/camenduru/kohya_ss
!sudo apt-get update
!pip install -U albumentations
!sudo apt-get install -y python3.10-tk
!pip install toml
#accelerate
}}
以下の手順を踏まないとビルドされたbitsandbytesが使えないかでエラーになる
SDXLの学習時は必須、SD1.5系の場合はオプティマイザにもよるがやらなくても動く
#pre{{
import os
# 環境変数を設定
os.environ['BNB_CUDA_VERSION'] = '116'
os.environ['LD_LIBRARY_PATH'] = f"{os.environ.get('LD_LIBRARY_PATH', '')}:/usr/local/cuda-11.6/targets/x86_64-linux/lib/"
# ファイルを削除(注意: この操作は元に戻せません)
libcudart_path = "/usr/local/cuda-11.6/targets/x86_64-linux/lib/libcudart.so.11.0"
# ファイルが存在するかどうかを確認
if os.path.exists(libcudart_path):
os.remove(libcudart_path)
print(f"Removed {libcudart_path}")
else:
print(f"{libcudart_path} does not exist")
}}
以下のセルを実行
学習中断時はカーネルのRESTARTをして実行
#pre{{
%cd /notebooks/kohya_ss
!python kohya_gui.py --share --headless
}}
}}}
**%%としあきbat(超初心者向けLoRA導入セット)を利用する場合 %%[#ic476fa8]
現在、本wikiにおけるとしあきbat紹介は停止しています。
*学習の実行方法 [#q74d085e]
#br
&size(30){[[LoRA/学習方法]]ページへ続く。};
#br
*コメント・指摘・助言 [#b70e3f7c]
#pcomment(,5,reply)
>(Tips)
-[[質問をするならここを見て!>よくある質問#a8bb5a7e]]
#br
-既存コメントの先頭にあるラジオボタンをONにすると、そのコメントの下にぶら下げ返信する形になる(ツリー構造)。
-コメントの文中で↵ボタン(下の画像参照)を押すと「&br;」の文字列が挿入される。これは送信後に改行として機能するので、文章の整形に役立つ。
&ref(wikiwiki編集のコツ/br.png,around,50%);