2024年6月4日火曜日

M2 mac mini 上で sd-scripts を動かして LoRA 学習させる方法

M2 mac mini 上で sd-scripts を動かして LoRA 学習させる方法

概要

前回 kohya_ss webui を使って sd-scripts が実行できる環境を用意しました
今回は kohya_ss webui を使って LoRA 学習してみたいと思います

環境

  • macOS 14.5
  • kohya_ss (24.1.4 5ed5623)
  • Python 3.10.13

画像の準備

今回は 512x512 画像を 4 枚用意しました
枚数は多ければ多いほど良いですが画像が多いとそれだけ学習時間もかかります
また M2 mac mini のスペックにも影響しており画像が多いとメモリを多大に消費するため可能な限り少なく効率の良い画像を学習させるのが良いかなと思います

作成した画像は今回は ~/Downloads/data/5_hawksnowlog というディレクトリ配下に配置します
ポイントはディレクトリ名で 学習回数_識別名 という感じで指定しないと sd-scripts が画像を発見できません

学習回数は学習させる枚数をかけた分影響するので学習回数が多いと学習にかかる時間も線形的に増えるので注意しましょう

タグ情報の準備

なくても OK ですがあったほうがいいと思います
こちらを参考に抽出/付与しましょう

また何か独自のタグをいれるとより LoRA で学習させたモデルを強調することができます

パラメータの設定

まずは LoRA タブに移動します
そして各種パラメータを設定していきます

WebUI 上でも OK です
M2 上で動作させるには以下の設定が必須です

  • Image folder (containing training images subfolders) -> ~/Downloads/data
  • Trained Model output name -> 5_hawksnowlog
  • Output directory for trained model -> model
  • Mixed precision -> no
  • Optimizer -> AdamW
  • CrossAttention -> none
  • Save precision -> float
  • Max train steps -> 200 (ここも学習時間に影響するので適宜変更

デフォルトでは見えない設定もあるのですべての項目を一度開いて設定項目名で研削すれば見つかるはずです

sd-scripts の実行には設定ファイルが必要ですが kohya_ss は webui で設定した値から自動で toml 設定ファイルを作成してくれます

最終的には実行後に以下の設定ファイルが model 配下にあれば OK です

bucket_no_upscale = true
bucket_reso_steps = 64
cache_latents = true
caption_extension = ".txt"
clip_skip = 1
dynamo_backend = "no"
enable_bucket = true
epoch = 1
gradient_accumulation_steps = 1
huber_c = 0.1
huber_schedule = "snr"
learning_rate = 0.0001
logging_dir = "log"
loss_type = "l2"
lr_scheduler = "cosine"
lr_scheduler_args = []
lr_scheduler_num_cycles = 1
lr_scheduler_power = 1
lr_warmup_steps = 160
max_bucket_reso = 2048
max_data_loader_n_workers = 0
max_grad_norm = 1
max_timestep = 1000
max_token_length = 75
max_train_steps = 200
min_bucket_reso = 256
mixed_precision = "no"
multires_noise_discount = 0.3
network_alpha = 1
network_args = []
network_dim = 8
network_module = "networks.lora"
noise_offset_type = "Original"
optimizer_args = []
optimizer_type = "AdamW"
output_dir = "model"
output_name = "5_hawksnowlog"
pretrained_model_name_or_path = "runwayml/stable-diffusion-v1-5"
prior_loss_weight = 1
resolution = "512,512"
sample_prompts = "model/prompt.txt"
sample_sampler = "euler_a"
save_every_n_epochs = 1
save_model_as = "safetensors"
save_precision = "float"
text_encoder_lr = 0.0001
train_batch_size = 1
train_data_dir = "/Users/hawksnowlog/Downloads/data"
unet_lr = 0.0001
xformers = false

実行

WebUI で実行する場合は「Start training」で OK です

安定しない場合はコマンドでも OK です
toml ファイルは webui が生成したもので大丈夫ですが値が間違っている場合は手動で toml ファイルを変更して学習を開始しましょう

  • cd kohya_ss
  • /Users/username/Documents/work/kohya_ss_3_10_13/venv/bin/python /Users/username/Documents/work/kohya_ss_3_10_13/sd-scripts/train_network.py --config_file model/config_lora-20240530-131543.toml

動作確認

4 ファイルで 5 回の学習回数でステップ数 200 にしてだいたい 30 分ほどで完了しました
かなり少なめで学習させたのでもう少し画像を増やしたり学習回数を増やしてもいいかもしれません

学習が完了すると model/5_hawksnowlog.safetensors ができています

最後に

M2 mac mini 上で Stable Diffusion のモデルを LoRA で Fine-Tuning してみました
内部的には sd-scripts という学習ツールを webui で叩いているだけなので直接 sd-scripts を触ってしまっても OK です

次回は作成した LoRA を使って sd-webui 上で LoRA の動作確認をしてみたいと思います

トラブルシューティング

libc++abi: terminating due to uncaught exception of type NSException

なぜか webui から学習が開始できなくなってしまう状況が発生しました
バックグラウンドで何か動いてしまっているのでマシンを再起動してあげれば解消しました

output_name で指定したモデルがすでにあると発生するようです、名前を変更してあげましょう

AttributeError: module 'torch' has no attribute 'compiler'

なぜか xformers ディレクトリが作成されており参照してしまっているので削除しましょう

  • rm -rf ./venv/lib/python3.10/site-packages/xformers*

参考サイト

0 件のコメント:

コメントを投稿