上記では、 データセット設定ファイル(.toml) の設定についてまとめましたが、
この記事では コマンドライン引数 についてまとめます。
README に記載のあるオプションを書き出すことで、全体像を把握します。
- オプション
- 学習に使うモデル指定
- 学習に関する設定
- --output_dir
- --output_name
- --dataset_config
- --max_train_steps / --max_train_epochs
- --mixed_precision
- --gradient_checkpointing
- --xformers / --mem_eff_attn
- --clip_skip
- --max_token_length
- --weighted_captions
- --persistent_data_loader_workers
- --max_data_loader_n_workers
- --logging_dir / --log_prefix
- --log_with / --log_tracker_name
- --noise_offset
- --adaptive_noise_scale (実験的オプション)
- --multires_noise_iterations / --multires_noise_discount
- --debug_dataset
- --vae
- --cache_latents / --cache_latents_to_disk
- --min_snr_gamma
- モデルの保存に関する設定
- オプティマイザ関係
- その他 LoRA 学習ページに記載のあったオプション
- まとめ
オプション
学習に使うモデル指定
オプション名 |
---|
--v2 |
--v_parameterization |
--v2 / --v_parameterization
- 学習対象モデルとして Stable Diffusion 2.0 系を使用する場合に指定する
らしい...
--pretrained_model_name_or_path
- 追加学習を行う元となるモデルを指定する
これは先日の学習でも意識していたものなので理解した!
なお、Hugging Face のモデルIDも指定できる模様
なお、Hugging Face のモデルIDも指定できる模様
学習に関する設定
オプション名 |
---|
--output_dir |
--output_name |
--dataset_config |
--max_train_steps |
--max_train_epochs |
--mixed_precision |
--gradient_checkpointing |
--xformers |
--mem_eff_attn |
--clip_skip |
--max_token_length |
--weighted_captions |
--persistent_data_loader_workers |
--max_data_loader_n_workers |
--logging_dir |
--log_prefix |
--log_with |
--log_tracker_name |
--noise_offset |
--adaptive_noise_scale (実験的オプション) |
--multires_noise_iterations |
--multires_noise_discount |
--debug_dataset |
--vae |
--cache_latents |
--cache_latents_to_disk |
--min_snr_gamma |
--output_dir
- 学習後のモデルを保存するディレクトリを指定する
これも先日の学習で意識していたものなので理解した!
--output_name
- 保存されるファイル名を拡張子を除いて指定する
これも先日の学習で意識していたものなので理解した!
--dataset_config
- 設定ファイル(.toml)を指定する
これも先日の学習で意識していたものなので理解した!
--max_train_steps / --max_train_epochs
- 学習する ステップ数 や エポック数 を指定する
- 両方していすると エポック数 が優先される
--mixed_precision
- 省メモリ化のため mixed precision (混合精度) で学習する
- --mixed_precision="fp16" のように指定する
--gradient_checkpointing
- 学習時の重みの計算をまとめて行うのではなく少しずつ行うことで学習に必要な GPU メモリ量を減らす
これも省メモリ化オプションってことだな?
--xformers / --mem_eff_attn
--xformers
オプションを指定すると xformers の CrossAttention を使用する- 代わりに
--mem-eff-attn
を指定すると 省メモリ版 の CrossAttention を使用する
--clip_skip
2
を指定すると Text Encoder (CLIP) の後ろから二番目の層の出力を使用する1
またはオプション省略時は最後の層を使用する
よくわかってないけどみんな clip_skip は 2 なんだよなぁ
--max_token_length
- デフォルトは
75
150
また225
を指定することでトークン長を拡張して学習できる- 必要なければ
75
での学習がおすすめとのこと
--weighted_captions
- 指定すると 重み付きキャプション が有効になるとのこと
--persistent_data_loader_workers
- 指定すると Windows 環境でのエポック間待ち時間が短縮されるとのこと
--max_data_loader_n_workers
- データ読み込みのプロセス数を指定する
- プロセス数が多いとデータ読み込みが早くなり GPU を効率的に利用できる
- 但し、メインメモリを消費する
- デフォルト は「8 または CPU同時実行スレッド数-1 の小さい方」
--logging_dir / --log_prefix
- ログ保存先のディレクトリを指定する
- TensorBoard 形式のログが保存されるとのこと
tensorboard とやらは pip module っぽい
--log_with / --log_tracker_name
tensorboard
だけでなくwandb
への保存が可能らしい- 詳細は PR#428 を見ろとのこと
--noise_offset
- この記事 の実装とのこと
- 全体的に暗い、明るい画像の生成結果が良くなる可能性があるとのこと
- LoRA 学習でも有効で
0.1
程度の値を指定すると良いらしい
README 的にも推量の表現だったなぁ
--adaptive_noise_scale (実験的オプション)
--noise_offset
の値を自動調整するオプションらしい- latents の各チャネルの平均値の絶対値に応じて変化するらしい
--multires_noise_iterations / --multires_noise_discount
- Multi resolution noise (pyramid noise) の設定
- 詳細は PR#471 を見ろとのこと
--debug_dataset
- 指定すると学習を行う前に事前にどのような画像データ、キャプションで学習されるかを確認できるとのこと
- ECSキーで終了、Sキーで次のステップ(バッチ)、Eキーで次のエポックに進む
--vae
- VAE を指定すると、その VAE を使って学習するとのこと
- DreamBooth 及び Fine-tuning では、保存されるモデルはこの VAE を組み込んだものになる
--cache_latents / --cache_latents_to_disk
- 使用 VRAM を減らすために VAE の出力をメインメモリにキャッシュする
flip_aug
以外の augmentation は使えなくなる--cache_latents_to_disk
を指定するとキャッシュをディスクに保存するようになる
--min_snr_gamma
モデルの保存に関する設定
オプション名 |
---|
--save_precision |
--save_every_n_epochs |
--save_state |
--resume |
--save_every_n_steps |
--save_model_as |
--huggingface_repo_id |
--save_precision
- 保存時のデータ精度を指定する
--save_every_n_epochs / --save_state / --resume
--save_every_n_epochs
を使用すると、そのエポック毎に学習途中のモデルを保存する--save_state
を同時に指定すると optimizer 等の状態も含めた学習状態を併せて保存する- 保存された学習状態から学習を再開する場合には
--resume
を使う
--save_every_n_steps
--save_every_n_epochs
のステップ版ぽい
--save_model_as
- モデルの保存形式を以下から選べる
- ckpt
- safetensors
- diffusers
- diffusers_safetensors
--huggingface_repo_id
--huggingface_repo_id
が指定されているとモデル保存時に同時に HuggingFace にアップロードされる- アクセストークンの取り扱いに注意
オプティマイザ関係
オプション名 |
---|
--optimizer_type |
--learning_rate |
--lr_scheduler |
--lr_warmup_steps |
--lr_scheduler_num_cycles |
--lr_scheduler_power |
--optimizer_type
- オプティマイザの種類を以下の中から指定できる
- AdamW : torch.optim.AdamW
- 過去のバージョンのオプション未指定時と同じ
- AdamW8bit : 引数は同上
- PagedAdamW8bit : 引数は同上
- 過去のバージョンの--use_8bit_adam指定時と同じ
- Lion : https://github.com/lucidrains/lion-pytorch
- 過去のバージョンの--use_lion_optimizer指定時と同じ
- Lion8bit : 引数は同上
- PagedLion8bit : 引数は同上
- SGDNesterov : torch.optim.SGD, nesterov=True
- SGDNesterov8bit : 引数は同上
- DAdaptation(DAdaptAdamPreprint) : https://github.com/facebookresearch/dadaptation
- DAdaptAdam : 引数は同上
- DAdaptAdaGrad : 引数は同上
- DAdaptAdan : 引数は同上
- DAdaptAdanIP : 引数は同上
- DAdaptLion : 引数は同上
- DAdaptSGD : 引数は同上
- Prodigy : https://github.com/konstmish/prodigy
- AdaFactor : Transformers AdaFactor
- 任意のオプティマイザ
- AdamW : torch.optim.AdamW
--learning_rate
- 学習率を指定する
- 適切な学習率はスクリプトによって異なる
LoRA 学習では
1e-4
~1e-3
が良いとされていた
--lr_scheduler / --lr_warmup_steps / --lr_scheduler_num_cycles / --lr_scheduler_power
- 学習率のスケジューラ関連の設定
--lr_scheduler
で学習率のスケジューラを以下から指定できる (デフォルト:constant)--lr_warmup_steps
でスケジューラのウォームアップステップ数を指定できる- ウォームアップ:だんだん学習率を変えていく
--lr_scheduler_num_cycles
はcosine_with_restarts
スケジューラでのリスタート回数--lr_scheduler_power
はpolynomial
スケジューラでの polynomial power
その他 LoRA 学習ページに記載のあったオプション
オプション名 | 備考 |
---|---|
--network_dim | |
--network_alpha | |
--persistent_data_loader_workers | 「学習に関する設定」 の項で記載有り |
--max_data_loader_n_workers | 「学習に関する設定」 の項で記載有り |
--network_weights | |
--network_train_unet_only | |
--network_train_text_encoder_only | |
--unet_lr | |
--text_encoder_lr | |
--network_args |
--network_dim
- LoRA の RANK を指定する
- デフォルトは
4
- 数値が高いほど表現力が増すが、学習に必要なリソースは増える
- 闇雲に増えやしても良くないらしい
--network_alpha
- アンダーフローを防ぎ安定して学習するための
alpha
値とやらを指定する - デフォルトは
1
--network_dim
と同じ値を指定すると過去の学習方式と同じ動作になるらしい
--network_weights
- 学習前に学習済みの LoRA の重みを読み込み、そこから追加で学習する
指定例がないからわからないけどベースモデルの他にベースLoRA的なものを指定できるとか?
--network_train_unet_only
- U-Net に関連する LoRA モジュールのみ有効とする
--network_train_text_encoder_only
- Text Encoder に関連する LoRA モジュールのみ有効とする
--unet_lr
- U-Net に関連する LoRA モジュールに、通常の学習率(--learning_rate)とは異なる学習率を使う時に指定する
--text_encoder_lr
- Text Encoder に関連する LoRA モジュールに、通常の学習率(--learning_rate)とは異なる学習率を使う時に指定する
--network_args
- 複数の引数を指定できる
--network_args "key1=value1" "key2=value2"
みたいな感じで指定できるみたい
まとめ
初心者は使わなそうなオプションがいっぱいだ!
という感想でした
という感想でした