LoRA

Last-modified: 2024-04-16 (火) 16:34:52

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

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

LoRAってなんなのさ

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

ざっくり言うと、

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

 

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

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

 

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

もっと詳しく言うと、

この辺を読むといいかも。

英語版解説

もう少しわかりやすく説明して、

kohya*1が太鼓判を押したおすすめ解説

LoRAの特徴

LoRAのメリット・デメリット

メリット

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

前提条件

スペック要件

LoRAで学習する場合

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

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

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

他の方のLoRAを使う場合

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-scipts公式のインストール方法

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

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

フォルダ作成例


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

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

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

  1. 上記の作業フォルダで(Shift +)右クリック
    「Powershell ウィンドウをここで開く」または「ターミナルで開く」等を選択*3
    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 configaccelerateを手動で設定する。学習のパフォーマンスに直結する重要項目

accelerate config解説 →こちらを参照

インストールがうまくいかないときは
①前提条件を満たしているか今一度確認する
②一度sd-scriptsフォルダごと全削除して最初から再度やりなおす

[Tips]楽したいなら下記でもOK
手順1:上記Readmeのコマンドプロンプト版をtxtファイルにコピペ
手順2:拡張子をbatに変更。
手順3:batファイルを実行。

derrian-distro氏製のinstallers v5を利用する場合

  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」ができるので、これを使うことになります。

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更新) 

導入方法 (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作る奴が共通で使えるので便利に使うと良い

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/学習方法ページへ続く。

 

コメント・指摘・助言

  • としあきbatの件で、そのbatファイルを探す方が様々なスレに出没しては、スレ住人を困らせるケースが定期的に発生している様子です(1か月置きに過去3回見ました。文面を見る限りこのページからとしあきbatを知ったようです)。
    余所に迷惑を掛けないように、コメントアウトしてもよいでしょうか?
    それでも大丈夫なように、今日までsd-scipts公式のインストール方法を整理してきたつもりです。 -- 2023-08-30 (水) 00:27:41
  • たぶん今は代替があるので問題ないかと -- 2023-08-30 (水) 07:49:24
  • としあきbatの項目は、タイトルのみ残して削除しました。アーカイブとして「としあきbat」に残しています。 (紹介のみでツール添付は無し)-- 2023-09-09 (土) 13:58:07
  • kohya_ss を導入する際はPython 3.10.9 以上が必要なので注意(3.10.6とかだと無理) -- 2024-03-27 (水) 14:04:53
  • ツールのアプデでLoraじゃなくてベースのチェックポイントしか作れなくなったのね -- 2024-04-16 (火) 16:34:51

(Tips)

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

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