sd-scriptsを使用したLoRA学習の実行ファイルを作成する参考にしてください。
batファイル作成の初心者~他の方の設定項目を参考にしたい中級者向け(たぶん)。
パラメータは各環境に併せてアレンジしてください。
ページ作成の経緯
LoRA設定用batファイルの作成例が、各ページに散在していたため、
旧情報の氾濫予防を目的として、ここにまとめることにしました。
bat作成の基本
batファイルの作り方
1.空のテキストファイルを作成して、拡張子をbatに変更する。
2.下記のコードを参考にして、プログラムを作成して保存。
文字コードはSJIS(ANSI)で保存すること。
3.ファイル名を適当(training_command.batなど)に変更。
4.batファイルをダブルクリックで実行。
batファイルの保存場所はどこでも良い。
(ただし、後述のディレクトリを指定する際は、相対パスではなく絶対パスにすることが前提)
基本構成
興味なければ読み飛ばしてください。
batファイル内の文の意味
※下記のbat作成例に記載されたコードの解説です。
- XXXX.bat
ファイル名は何でもOK。
- setlocal enabledelayedexpansion
決まり文句。変数を保持しておく効果
- set XXXX=〇〇
各フォルダのディレクトリやパラメータを自作のXXXX関数に代入する。
この行読込時には一旦保持するだけ。
この行を使わず、下記引数の欄に直接代入してもOK
- set train_mode=""
DreamBooth形式かfine tuningモードかを指定する必要がありますが、
判定が面倒なので、正則化画像(reg)フォルダと教師画像フォルダ(train)、jsonデータ有無で自動判定させています。
- cd /d %sd_path%
sd-scriptsの保存フォルダに移動
- call venv\Scripts\activate.bat & call :main & pause & exit
venv環境下でsd-scriptsをアクティベート、同時に下記mainの処理を行う。
- :main
accelerate launch --num_cpu_threads_per_process %cpu_thread% train_network.py ^
--network_module= ^
--(オプション色々)=XXXX ^
--(最後の引数)=XXXX
main関数(このbatファイル内専用の呼称)を実行する。
内容は、CPUを〇〇スレッド使って、「train_network.py」を実行する。
続けてtrain_networkに引き渡す、各引数を指定する。一部のパラメータは上記setの行で指定した値を% %で囲って参照する。
" ^"は次の行に継続しますよ、それも含めて一行で認識してくださいね、というbatファイルの専用ルールです。
- exit /b
学習が完了したら、この行が読み込まれてbatファイルが完了。
この/bを消すと完了メッセージを表示せずに、自動終了する。
【TIPS】
スリープ抑止ソフトと併用し、powershell起動中はスリープ禁止にしておけば、学習完了一定時間後にスリープしてくれる。睡眠学習がはかどる。
一方、エラー発生のリスクがある場合は/bをつけることで、エラー特定ができる。
必要なインプット情報
上記main内で指定が必要なオプション(--で始まるもの)には必須な情報と、
個人の目的に合わせて記載するものがあります。
注. このページはbat作成指南のページであり、ユーザーによっては読む機会の無いページです。個別のオプションの効能に関する解説は追記しないでください。
パラメータ調整時の留意点
※以下は、LoRA/学習方法でも掲載していますが、リマインドです。
最適なbatファイルの内容は、各学習目標やPC環境によって千差万別です。
batファイルを実行しながらパラメータを最適化してください。
おおまかな指標
ステップ:
教師画像で1回計算すると1ステップ
「教師画像のキャプション(タグ)を学習元モデルに流してみて、出てくる画像を教師画像と比較し、教師画像に近づくようにLoRAをわずかに変更する」のが1ステップ
学習率:
1ステップごとにどのくらい変化させるかを表す
大きな値を指定すると速く学習が進むが、変化しすぎてLoRAが壊れたり、最適な状態にまで至れない場合がある
小さい値を指定すると学習速度は遅くなり、また最適な状態にやはり至れない場合がある
・U-Net LR(unet_lr):全体的な画風などに影響
・text_encoder_lr:タグと画像を紐付ける部分の学習率。プロンプトの合致性に影響
・learning_late:U-Net LR、Text Encoder LRの指定がなければ、同一の学習率で上記2つが学習される。
補足 1. 5e-4という様な表記をされている事がある。意味は1. 5 × 10^-4[マイナス4乗] = 0.00015と同じ意味
バッチサイズ:
1ステップで何件の教師画像をまとめて計算するかを指定する値
大きくすれば学習速度は速くなりますが、GPUメモリを消費します、また一般的には精度も高くなるといわれています。(なんで高くなるんだろう?)
総ステップ数:
バッチサイズ×ステップ数 が学習に使われる総件数
LoRA学習における目安Step数は5000~8000くらい
補足 「バッチサイズ1で1600ステップ」と「バッチサイズ4で400ステップ」は同じ結果にはならない
同じ学習率の場合、一般的には後者のほうが学習不足になる。学習率を大きくするかステップ数を増やす必要がある
エポック(epoch):
教師画像が一周学習されると1エポック
bat入力例
batに入力するコマンドの一例です。
編集作業はメモ帳ではなく、専用のテキストエディタを使用すると読みやすくなります。
アプリ紹介はしません。お好みのソフトをご使用ください。
- イメージ図:Notepad++の場合
LoRA学習起動batファイルの作成例
まずは、下記をコピペしてください。
それだけでは正しく動作しませんので、
文中の説明に従って、皆様の環境に併せて編集してください。
お願い:
- 今後、sd-scriptsが更新された際に
「絶対に必要な行」「絶対にいらない行」が発生した場合は、
適宜加筆・修正をお願いします。
判断に困る情報は一旦コメント欄へお願いします。- 任意オプションであっても
Xformersやgradient_checkpointingのような、
ほぼ全員がデメリット無しで体感できるオプションは追加していいです。
batファイルの作成例
「rem」はコメントアウト行、実行されない行です。
かなりの長文ですが、大半は解説文で、編集量は見た目ほど多くないです。
rem ----変更履歴-----------------------------------------------------
rem 2025/5/25
rem ベースモデルファイルの主流がSDXLになってるので変更
rem accelerate launch --num_cpu_threads_per_process %cpu_thread% train_network.py を accelerate launch --num_cpu_threads_per_process %cpu_thread% sdxl_train_network.py
rem 合わせてSDXLになった際に --clip_skip=2 ^ は使えなくなるので削除
rem ----LoRA学習起動バッチ-----------------------------------------------------
rem sd-scripts 2023/6/15版対応
rem 学習対象のフォルダ内に置いて使用する
rem 10_AAA, 5_BBBフォルダがある場所の一つ上
setlocal enabledelayedexpansion
rem ----ここから自分の環境に合わせて書き換える----------------------------------
rem ディレクトリ設定
rem sd-scriptsの場所
set sd_path="X:\stable-diffusion\sd-scripts"
rem 学習のベースモデルファイル
rem fp32よりもfp16の方が消費VRAMを抑えられるので推奨
set ckpt_file="X:\stable-diffusion\stable-diffusion-webui\models\Stable-diffusion\xxxx.ckpt"
rem 学習のベースVAE
rem VAEは必須ではなく、未使用時は--vae=%vae_file% ^の行を削除すること
set vae_file="X:\stable-diffusion\stable-diffusion-webui\models\VAE\xxxx.vae.pt"
rem 学習画像フォルダ このフォルダ内に10_AAAなどのフォルダが入っていること
set image_path="X:\data\traning"
rem 正則化画像フォルダ(必須ではないので使用しない場合は reg_path="" とすること)
set reg_path=""
rem 記入例:set reg_path="X:\data\reg"
rem 正則化画像のウェイト比率。正則化画像なしなら0。正則化画像を強めたいときは大きくする(0~1.0)。この値は、prior_loss_weightオプションに自動で代入される。reg_weightはこのbat内専用の呼称。
set reg_weight=0.1
rem メタデータjsonファイル(このファイルを指定するとfine tuning動作になり、json_file="" で従来のDBになる)
set json_file=""
rem 記入例:set json_file="X:\data\marge_clean.json"
rem fine tuningでのリピート数を指定 DBでのフォルダ名の数字は無視される
set ft_repeats=1
rem データセットファイル(json,toml形式)
rem(このファイルを指定するとデータセットモード動作になる。使用しない場合は""とすること)
set dataset_file=""
rem 学習結果の出力先
set output_path="X:\stable-diffusion\stable-diffusion-webui\extensions\sd-webui-additional-networks\models\lora"
rem 学習結果のファイル名。任意の名前を付けてください。
set file_prefix="last"
rem ------------------------------------------------------------------------------------------------
rem 学習パラメータ設定
rem 設定値の解説:https://wikiwiki.jp/sd_toshiaki/学習にまつわる各パラメータ
rem 学習率Learning rate
set learning_rate=1e-3
rem 学習開始時にlearning_rateが指定値に到達するまでのステップ数 デフォルトは0
set lr_warmup=0
rem 個別の学習パラメータ
set text_encoder_lr=1.5e-4
set unet_lr=1.5e-3
rem デフォルトにしたい場合は全て上のlearning_rateと同じ値にする
rem epoch数と何epochごとに保存するかの設定 1epoch=全フォルダの(画像数xループ数)の合計
set num_epochs=2
set save_every_n_epochs=1
set network_dim=8
rem 次元数 デフォルトは1 大きくすると学習能力が上がるが出力ファイルサイズが大きくなる
rem 推奨設定 LoRA:128程度 LoCon:64以下 LoHa:32以下
set network_alpha=1
rem アンダーフローを防ぐための値 デフォルトは1
rem これによって計算結果がnetwork_alpha/network_dimとなって学習量が小さくなるため
rem learning_rateの方を大きくすることでバランスを取るといい
rem 推奨設定 LoRA:network_dimの半分 LoCon:1かそれ以下0.3がお薦め LoHa:1かそれ以下
rem ------------------------------------------------------------------------------------------------
rem Lrスケジューラー
rem 設定値の解説:https://wikiwiki.jp/sd_toshiaki/学習にまつわる各パラメータ
set scheduler="cosine_with_restarts"
rem 次の文字列から選択
rem linear, cosine, cosine_with_restarts, polynomial, constant, constant_with_warmup
rem Lrスケジューラーのオプション
rem cosine_with_restartsのリスタート回数 デフォルトは1
set scheduler_option=1
rem ------------------------------------------------------------------------------------------------
rem LoRA学習アルゴリズム
rem 設定値の解説:https://wikiwiki.jp/sd_toshiaki/LoRAの種類
rem LoRA学習ネットワークモジュールの選択
set net_module=lycoris.kohya
rem 使いたいアルゴリズムに併せて、下記いずれかを指定すること。
rem kohya氏のLoRAなら networks.lora を、LyCORIS系なら lycoris.kohya を有効化、Dyloraの場合は解説サイトを参照。
rem LoRA-C3Lier、LyCORIS(LoCon,LoHa,LoKr,(IA)^3)用追加オプション
set dim_for_conv=8
set alpha_for_conv=1
set dropout_rate=0.2
rem 上記の network_dim, network_alpha と合わせて設定するよう注意
rem 公式推奨値は解説サイト参考。
rem DyLoRA用で追加されたオプション
set block_size_dylora=8
rem 下位ランクの複数同時学習の重みを1ステップごとに変える仕様のため低ステップ学習を行う場合は
rem 設定値を大きくして変化量を増やす必要がある…とのこと(よくわかってない)
rem デフォルト設定値は0
rem …のはずなのにそう設定するとエラーになるし、ソースを見ると1が初期値になっている
rem とりあえず今は block_size=8 ということにしておいて後々修正します
rem LoRAアルゴリズムと、そのパラメータ指定
rem 下記のうち、使用したいアルゴリズム(algo)に対応する行を有効化(remを除去)する。
rem network.lora でLoRA-LierLaを使う場合は、最下段の空白になっている行を有効化する
rem 下記候補に使いたい方式がない場合、解説サイトを元に編集してください。
rem
rem --以下1つのみコメントアウト--
set net_args= "algo=loha" "conv_dim=%dim_for_conv%" "conv_alpha=%alpha_for_conv%" "dropout=%dropout_rate%"
rem set net_args= "algo=locon" "conv_dim=%dim_for_conv%" "conv_alpha=%alpha_for_conv%" "dropout=%dropout_rate%"
rem set net_args= "algo=ia3" "conv_dim=%dim_for_conv%" "conv_alpha=%alpha_for_conv%" "dropout=%dropout_rate%"
rem set net_args= "algo=lokr" "conv_dim=%dim_for_conv%" "conv_alpha=%alpha_for_conv%" "dropout=%dropout_rate%"
rem set net_args= "algo=dylora" "conv_dim=%dim_for_conv%" "conv_alpha=%alpha_for_conv%" "dropout=%dropout_rate%" "block_size=%block_size_dylora%"
rem set net_args=
rem ------------------------------------------------------------------------------------------------
rem オプティマイザー
rem 設定値の解説:https://wikiwiki.jp/sd_toshiaki/学習にまつわる各パラメータ
rem オプティマイザーのタイプ変更
rem Adam,AdamW8bit,Lion,SGDNesterov,SGDNesterov8bit,DAdaptation,AdaFactor,prodigy
rem の中から指定できる
set opti_type="AdamW8bit"
rem 以下の設定は optimizer_args のオプション指定
rem いずれかのひとつだけremを外して有効化するよう注意
rem オプション無指定
rem Adam,AdamW8bitのように追加オプション指定が不要の場合に有効化
rem 不安になる表記だがこれであっている
set opti_args=
rem DAdaptation用のオプション
rem テキストエンコーダとU-Netの学習比率を0.0から1.0の範囲で変えられる
rem 下の記述はテキストエンコーダの学習レートをU-Netの半分の値にして学習するという意味
rem set opti_args= --text_encoder_lr=0.5 --unet_lr=1.0
rem AdaFactor用オプション
rem 上側は学習レートの自動調整を有効にしたオプション。下側は無効にしたオプション
rem set opti_args= "relative_step=True" "scale_parameter=True" "warmup_init=False"
rem set opti_args= "relative_step=False" --lr_scheduler="constant_with_warmup" --max_grad_norm=0.0
rem =========================================================================
rem VRAMなど環境に影響されるパラメーター 余裕があれば増やすと速度や精度が改善
rem CPUスレッド数 CPUのコア数がいいらしい
rem 増やすと生成速度が上がる代わりにメインメモリの消費が増えるので
rem メモリ32GBの人はCPUのコア数よりも減らした方が安定するかも
set cpu_thread=4
rem データローダーのワーカー数
rem デフォルトは8、減らすとメインメモリの使用量が減り、学習時間が増加
set workers=4
rem バッチサイズ: 増やすと計算が早く終わるがVRAM消費が増える
set train_batch_size=1
rem 学習素材の解像度: 大きくすると細部まで学習するが消費VRAMが増える
rem VRAM12GBなら768くらいまで増やせる
set resolution=512,512
rem 最小、最大バケットサイズ: 画像が正方形でなくてもresolutionの面積を超えない範囲で
rem 縦長、横長の画像も扱えるのでresolutionを増やしたらmax_bucketも合わせて増やすといい
set min_bucket=320
set max_bucket=1024
rem 学習の改善に有効?
rem 詳細はsd-scriptsのgithubを参照
rem 推奨値は5
set min_snr_gamma=5
rem =========================================================================
rem ----書き換えここまで--------------------------------------------------------
set train_mode=""
if %dataset_file%=="" (
rem データセットファイルの有無を確認。なければjsonファイルの存在チェック
if %json_file%=="" (
rem DBモード
if %reg_path%=="" (
set train_mode=--train_data_dir=%image_path%
) else (
set train_mode=--train_data_dir=%image_path% --reg_data_dir=%reg_path%
)
) else (
rem fine tuningモード
set train_mode=--train_data_dir=%image_path% --in_json=%json_file% --dataset_repeats=%ft_repeats%
)
) else (
rem データセットモード
set train_mode=--dataset_config=%dataset_file%
)
rem 学習実行
cd /d %sd_path%
call venv\Scripts\activate.bat & call :main & pause & exit
:main
accelerate launch --num_cpu_threads_per_process %cpu_thread% sdxl_train_network.py ^
--network_module=%net_module% ^
--pretrained_model_name_or_path=%ckpt_file% ^
%train_mode% ^
--output_dir=%output_path% ^
--caption_extension=".txt" ^
--shuffle_caption ^
--weighted_captions ^
--prior_loss_weight=%reg_weight% ^
--resolution=%resolution% ^
--enable_bucket ^
--bucket_no_upscale ^
--min_bucket_reso=%min_bucket% ^
--max_bucket_reso=%max_bucket% ^
--train_batch_size=%train_batch_size% ^
--learning_rate=%learning_rate% ^
--lr_warmup_steps=%lr_warmup% ^
--text_encoder_lr=%text_encoder_lr% ^
--unet_lr=%unet_lr% ^
--max_train_epochs=%num_epochs% ^
--mixed_precision="fp16" ^
--save_precision="fp16" ^
--xformers ^
--gradient_checkpointing ^
--persistent_data_loader_workers ^
--max_data_loader_n_workers=%workers% ^
--save_every_n_epochs=%save_every_n_epochs% ^
--save_model_as=safetensors ^
--output_name=%file_prefix% ^
--seed=21 ^
--network_dim=%network_dim% ^
--network_alpha=%network_alpha% ^
--network_args %net_args% ^
--max_token_length=150 ^
--cache_latents ^
--lr_scheduler=%scheduler% ^
--lr_scheduler_num_cycles=%scheduler_option% ^
--vae=%vae_file% ^
--optimizer_type=%opti_type% ^
--optimizer_args %opti_args% ^
--min_snr_gamma=%min_snr_gamma%
exit /b
rem 学習終了時にダイアログを閉じたいときは、この/bを外す。
rem ※オプションの追加、削除時は^記号に注意
rem 最後の行には^は付けずにそれ以外は ^(半角スペースと^)を付ける
rem ---------------------------------------------------------------------------
rem その他よく使いそうな追加オプション
rem --keep_tokens=数値
rem トークンのシャッフルを有効にした際にシャッフルから除外するトークン
rem 公式によればトークン数はカンマで区切られた1ワード単位(usada,hikaruなら2トークン)
rem webuiのトークンの概念とは異なるようなので注意(webuiではusadaはusa daと分けられて2トークン)
rem --no_metadata
rem メタデータを記録しない
rem --training_comment=""
rem コメントを埋め込む
rem --network_weights="X:\stable-diffusion\stable-diffusion-webui\models\lora\xxxx.safetensors"
rem 追加学習させる学習データをフルパスで指定する
rem 学習の途中結果のサンプル画像を出力する。(kohya氏曰く、実験的機能で更新優先度は低いとのことなので、今後の更新次第で使えない場合があるのに注意)
rem --sample_every_n_epochs=1 ^
rem --sample_prompts="(Test_prompt.txtのフルパス)" ^
rem --sample_sampler=euler_a ^
rem
更新履歴
- 2025/5/25
- ベースモデルファイルの主流がSDXLになってるので変更
accelerate launch --num_cpu_threads_per_process %cpu_thread% train_network.py を accelerate launch --num_cpu_threads_per_process %cpu_thread% sdxl_train_network.py
合わせてSDXLになった際に --clip_skip=2 ^ は使えなくなるので削除
- ベースモデルファイルの主流がSDXLになってるので変更
- 2023/9/28
- 下記のclip_skip変数とseed変数の行を消して、accelerate launch内に値を記入した。
set clip_skip=2 set seed=23
→上記2つの変数には解説文がなかったため、変数を使う必要がない。可読性向上のため直接代入する方式に変更した。
とくに解説文を追加せずとも、当wikiに説明がある。
- 下記のclip_skip変数とseed変数の行を消して、accelerate launch内に値を記入した。
- 2023/7/24
- 正則化画像のウェイト(--prior_loss_weight=0.05)を代入方式に変更。
正則化画像を知らない初心者の方への誤設定防止。初期値は0.1とした(ぎりぎり正則化画像の影響に気づくが、学習に悪影響を与えない程度の値)。 - 「weighted_captions」オプション追加。
未使用の場合でも入れておいて目立ったデメリットはなく、使用する場合は学習品質が改善するため、一応入れておきます。
使用するベースモデルによっては警告文が表示されるので注意とのこと。 - 非必須オプションとして、サンプル画像出力機能について説明追加、コメントアウト(rem)。気になる人だけ使うように考慮しました。途中経過が分からなくて困る方がいたため。
- その他、小変更。
- 正則化画像のウェイト(--prior_loss_weight=0.05)を代入方式に変更。
- 2023/7/17
- 2023/6/27
「rem dropoutに関しては "LoHa doesn't support dropout yet." とのこと」を削除。LyCORIS アップデート 0.1.7に伴う。
参考にしたデータ
このページは以前「LoRA」「LyCORIS」ページに投稿された下記データを参考にしています。ご提供いただきありがとうございました。
コメント・指摘・助言
- train_network.py は sdxl_train_network.py に書き換えた方が良いと思う それに合わせて --clip_skip=2 ^ は削除か if で入れるかどうかを作った方がいい -- 2025-05-25 (日) 22:24:06
- 順を追って説明するために他ページからも参照されるページです。参照元のページに必要な修正や、中途半端に修正を加えたために生じている本ページ内の情報の祖語なども修正してください -- 2025-05-28 (水) 02:41:39
- 可能な限り対応しますが時間がかかります。良ければあなたも修正に参加して頂けると嬉しいです。学習とは>LoRA学習の流れ>学習方法>学習実行batの作成例と紹介したいと考えています -- 2025-06-05 (木) 01:05:10
- 順を追って説明するために他ページからも参照されるページです。参照元のページに必要な修正や、中途半端に修正を加えたために生じている本ページ内の情報の祖語なども修正してください -- 2025-05-28 (水) 02:41:39
(Tips)
