LoRA学習における概要~環境構築までの紹介です。
- 概要
- 環境構築
- 教師画像の準備
- 学習実施
LoRAってなんなのさ
Microsoftが開発したAIの追加学習方式(Low-Rank Adaptation of Large Language Models)のこと。stable diffusionユーザーの間では追加学習したデータ方式として知られている。
ざっくり言うと
モデルの他に追加の学習データを自分で作り、画像生成に利用できる夢の仕組み。
例えるならゲームのDLCみたいなもの。(厳密には従来とは違う学習システムの事を指すが、イラスト生成において用語が出てくる場合、LoRA=モデルに影響を与えるファイルの事だと思っていい)
作ったLoRAのファイルは比較的軽量なので、配布したり、他の人が配布しているLoRAを自分の画像生成に利用することもできます。
例えば「このモデルすごくキレイなイラスト出せるけど、あのポーズやあの絵柄は出せないんだよな…」みたいな悩みを解決できます。
導入はStable Diffusion web UIよりちょっとだけ難しいかもしれないが、よーく読めば誰でもできるはず。レッツチャレンジ。
配布されてるLoRAを使うだけならもっと簡単です。
誘導→学習ファイルの使い方#学習データの使用方法
もっと詳しく言うと、
この辺を読むといいかも。
英語版解説
もう少しわかりやすく説明して、
LoRAの特徴
LoRAのメリット・デメリット
メリット
- DBと比べて、低VRAMでも学習できる。
VRAM 8GB以下でも普通に学習できる。 - DBと比べて、学習結果のデータ容量が小さい。
比較的公開するのに向いている。 - 正則化(ランダム3文字のトークンなど)といった手間や知識が不要。
- 扱う情報が少ない為、直接モデルをファインチューニングするより調整が上手く行きやすい。
デメリット
- LoRAの作成、LoRAの適用は必ずしも上手くいくわけではない。
- LoRA学習の最大の問題は手間と時間である。
- 対応する画像を用意しなければならず、時には加工も必要。
- 画像の枚数分だけ特徴をタグ付けしたテキストファイルも準備する必要がある。(自動化も出来るが、自動化は精度に問題があったりする)
- 完成したLoRAが失敗作'であれば学習はやり直し。設定、素材を見直して再学習となる。
- グラボの性能が低いと学習にかかる時間は更に増加する。
- まだ2人以上のキャラを同時出すのは難しいが、技術の向上により改善されつつある。
- 互換性の問題
- SD1.5で作ったLoRAはSD3、FLUX、XLでは使えず逆も他の組み合わせも同様。
- LoRAを製作したモデルとLoRAを使用するモデルが違う場合も互換性を損ないやすい。
- しかし、モデルが違っていてもLoRA元になったモデルに近いほどLoRAもそのまま使える可能性が高い。
Ponyで作ったLoRAならPony系、Animagineで作ったLoRAならAnimagine系、Illustriousで作ったLoRAならIllustrious系で使うのが一般的。
- しかし、モデルが違っていてもLoRA元になったモデルに近いほどLoRAもそのまま使える可能性が高い。
拾ったLoRAを適用するだけなら簡単なので、ぜひ使ってみよう!
LoRAを作るメリットは大きいので興味があれば学習もチャレンジしてみて欲しい。
技術的にくわしく!
各学習方法が拡散モデルにどう寄与するかの図。
出典:https://www.reddit.com/r/StableDiffusion/comments/10cgxrx/wellresearched_comparison_of_training_techniques/
- Dream Booth
新しいコンセプトを理解できるまで、拡散モデル自体を微調整する。
モデルを直接学習対象に含めるため、再現性という点では最も優れる。
しかし、ストレージは非効率(新しいモデルを扱う必要がある) - Textual Inversion
新しい概念を理解するための特別な単語を作成する。
出力は小さな埋め込み - LoRA
拡散モデルにわずかな重みを追加し、変更されたモデルが概念を理解するまでそれらを訓練する
拡散モデルではなく、それに対する重みを学習する。 - Hyper Network
二次的なネットワークを使って、元のネットワークの新しい重みを予測する。
LoRAの特徴として短い所要時間とDream Boothほどの時間が不要。
Dream Boothより再現性は一歩劣るものの、データ容量&VRAM消費というメリットが上回る。
特に2023年時点の市場ニーズにマッチしていて、導入しやすい。
主流GPUのVRAM量(約6~12GBが主流)や回線速度の事情(学習モデル配布における)。
前提条件
スペック要件
LoRAで学習する場合
- Gitがインストールされていること
- Python 3.10.xがインストールされていて、Pathが通っていること
- GPUのVRAMがあればあるほど良い。VRAM6GBでも学習可能ではあるが、互換性の問題からNvidiaのRTX30シリーズ以上が望ましい。
- 学習速度の観点からGPU性能も高い方が良い。AI学習はVRAMが全てというのは間違い。
(補足)すでにStable Diffusion web UIを導入済みなら、ほぼ要件を満たしているはずです。
- wikiの記載内容は項目編集時のものであり、アップデートによって方法が変わる可能性が非常に大きいことに留意してください
他の方のLoRAを使う場合
- Stable Diffusion web UIが使えれば、準備OKです。
使い方はこちら→学習ファイルの使い方
NVIDIA GTX16xx系のグラボ人向け
※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を使用します。
sd-scripts公式のインストール方法
この方法が一番確実です。
「Windows環境でのインストール」を参照してください。
公式の日本語readme
Python 3.10.11 のインストール
以下の手順は Python 3.10 系で行う必要があるため、インタプリタをインストールします。
以下のリンクからインストーラをダウンロードし、インストールしてください。
Python 3.10.11 の Windows installer (64-bit)
それ以外の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 (任意の他バージョン)
「sd-scripts」の親フォルダを作成
フォルダ作成例
Cドライブ
└ AI_illust
├ stable diffusion
└ LoRA_train ←名称は任意。ここを作業フォルダとする。
├sd-scripts ←このフォルダが作成される予定。
└(ここはLoRA関係のデータ保存スペースとする)
- 場所はどこでも良い。
- パス名に日本語を含まないこと。
sd-scriptsのインストール実行
- 上記の作業フォルダで(Shift +)右クリック
「Powershell ウィンドウをここで開く」または「ターミナルで開く」等を選択*2
- Readmeを参考に、コマンドを1行ずつ順に実行していく。
公式の日本語readme
※コマンドは1行づつ丸コピーで実行しよう 下手に手入力やアレンジするとインストールがうまくいかない可能性が高まる。
【参考】コマンド解説
PowerShell版を元に説明します。
No. | コマンド(参考) | 効果 |
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を手動で設定する。学習のパフォーマンスに直結する重要項目 |
インストールがうまくいかないときは
①前提条件を満たしているか今一度確認する
②一度sd-scriptsフォルダごと全削除して最初から再度やりなおす
[Tips]楽したいなら下記でもOK
手順1:上記Readmeのコマンドプロンプト版をtxtファイルにコピペ
手順2:拡張子をbatに変更。
手順3:batファイルを実行。
derrian-distro氏製のinstallers v5を利用する場合
- 下記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版)を利用する場合
下記URL記載の通りにインストールを実施する
https://github.com/derrian-distro/LoRA_Easy_Training_Scripts#installation
使用方法や設定保存がjson→tomlと以前の物から変わっており
互換性が無くなっています
以前から使っていた人はアップデートではなく新規インストールをおススメします
インストール、使い方については下記も参考に
LoRA_Easy_Training_Scripts(2023-05-22以降のGUI版)の使い方
kohya_ss GUIを利用する場合
Stable Diffusion web UIで入出力ディレクトリや学習パラメータを設定し、学習コマンドの生成&実行ができるツール。
機械学習のWebAPIに特化した「Gradio」というライブラリを利用して開発されている。
フォルダや学習パラメータのプリセットを保存/読込する機能が便利。
導入方法 (2023/04/24更新)
引用: https://github.com/bmaltais/kohya_ss
GUI開発者Bernard Maltais氏のチュートリアル動画: リンク
- インストール
※更新によって導入方法が変わる可能性があるので、実行する前に上記のリンクの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環境で動かす場合
下記の通りです。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==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がそもそも存在しない為上記の手順では動作しなかった)
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
bmaltais/kohya_ssを使って学習する場合
Start from ScratchでNotebooks作成
Advanced optionsにチェックを入れてContainer Nameに以下のカスタムコンテナ名を入力して開始する
cyberes/gradient-base-py3.10:latest
https://github.com/bmaltais/kohya_ss
リンクのあるGoogle colab用ipynbに若干修正
同一のipynb内でセルを区切って実行
!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系の場合はオプティマイザにもよるがやらなくても動く
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をして実行
%cd /notebooks/kohya_ss
!python kohya_gui.py --share --headless
としあきbat(超初心者向けLoRA導入セット)を利用する場合
現在、本wikiにおけるとしあきbat紹介は停止しています。
学習の実行方法
LoRA/学習方法ページへ続く。
コメント・指摘・助言
(Tips)
- 質問をするならここを見て!
- 既存コメントの先頭にあるラジオボタンをONにすると、そのコメントの下にぶら下げ返信する形になる(ツリー構造)。
- コメントの文中で↵ボタン(下の画像参照)を押すと「&br;」の文字列が挿入される。これは送信後に改行として機能するので、文章の整形に役立つ。
内容が長いので要所だけ抜き出したのですが、AttributeError: _ARRAY_API not foundとImportError: numpy.core.multiarray failed to importというエラーと過去の投稿者と似たraise subprocess.CalledProcessError(returncode=process.returncode, cmd=cmd)subprocess.CalledProcessError: Command '['D:\\lora\\sd-scripts\\venv\\Scripts\\python.exe', 'train_network.py', '--network_module=networks.lora', '--pretrained_model_name_or_path=D:\\stable-diffusion-webui\\models\\Stable-diffusion\\nai.ckpt', '--train_data_dir=D:\\lora\\lora_train_data\\train_dir', '--output_dir=D:\\stable-diffusion-webui\\models', '--caption_extension=.txt', '--shuffle_caption', '--prior_loss_weight=1', '--resolution=512,512', '--enable_bucket', '--bucket_no_upscale', '--min_bucket_reso=320', '--max_bucket_reso=960', '--train_batch_size=1', '--learning_rate=1e-3', '--lr_warmup_steps=0', '--text_encoder_lr=1.5e-4', '--unet_lr=1.5e-3', '--max_train_epochs=2', '--mixed_precision=fp16', '--save_precision=fp16', '--xformers', '--max_data_loader_n_workers=4', '--save_every_n_epochs=1', '--save_model_as=safetensors', '--output_name=kazuto', '--clip_skip=2', '--seed=23', '--network_dim=20', '--network_alpha=1', '--max_token_length=150', '--cache_latents', '--lr_scheduler=cosine_with_restarts', '--lr_scheduler_num_cycles=1']' returned non-zero exit status 1.というエラーが出てきて、フルパスは再度確認して記述したので間違いないと思うのですが、AttributeError: _ARRAY_API not foundとImportError: numpy.core.multiarray failed to importを解決しないと駄目のなのでしょうか? -- 2024-07-03 (水) 01:55:26
特に複数のLoraを併用している場合は相性の問題も発生するので慣れないうちは併用しないようにする。 -- 2024-10-13 (日) 20:35:14
ウェイトをさげたら使えるけど学習内容はほぼなくなるといった感じで困ってます。
解決したみたいなのでお聞きしたいんですがcheckpoint のデータを入れてみたというのはどういう意味なんでしょうか手順を教えていただけませんか…よろしくお願いします -- aaa 2025-01-02 (木) 03:54:47
「誘導→」とか(誘導)とかを使い始めたのは俺のはずなので、大部分は俺だ!
ただ俺以外にも少しはいそう。
ここのリンクが機能していない理由は「ページ構成の改編により、一部の内容が別ページに移動されたから」みたいだね。 -- 2025-01-29 (水) 07:06:01