最終更新:ID:DqSiI5hXpw 2023年02月15日(水) 20:31:44履歴
あかちゃんLoRAノートブック
ユーザー名はあとで使うのでメモっておきましょう。
既に取得済みのを使いまわすなら名前とかメールアドレスとかが見られてもいいものか要チェック。
追加したトークンはあとで使うのでメモっておきましょう。
(必要になった時にこのページを開いてコピペするほうが安全だけど)
25枚くらいを目標に頑張って用意しましょう。
長方形でも良いですが、縦横の差が2倍を超えないようにしましょう。
解像度は平均768くらいはあったほうがいいです。(512x1024とかでも可)
大きいのは勝手に縮小されるので大丈夫です。
ファイル名はなんでもいいけど長いと読み取れなくなるので、
長い名前や日本語などがあったら全選択してF2を押して短く改名しましょう。
画像は品質ごとの3種類にフォルダ分けすることができます。
(分けなくてもいいです)
a. 高品質、とても良い画像、特に学習したい画像
b. 中品質
c. 低品質、ちょっとだけ学習してくれればいい画像
a. b. cをそれぞれzipで圧縮します。
右クリックで「送る」「圧縮(zip)フォルダー」
名前はなんでもいいのでわかりやすくしましょう。
たとえば zunko_a.zip zunko_b.zip zunko_c.zip
いままでの手順で用意した内容を入力します
🤗の自分のモデルページを開きます。
モデル名が zunko なら、
https://huggingface.co/ユーザー名/nva-zunko/tree/main
が出来ているはずです。
↓を押して zunko.safetensors をダウンロードします。
ノートブック作成において工夫した点など。
カスタマイズの参考にしてや。Colabのページも参考になるかも。
このノートブック自体のカスタマイズ性を上げる予定はありません。
これはあくまで入門用だから。
一応コードにコメント書くようにはしているつもり。
正則化画像とキャプションテキストへの対応は古いノートブックが参考になるかも。
古いのでそのまま実行しても動きません(そっちはもう直さない)
kohya_sd-scripts_intro
20230215
- 学習画像が一つもない場合にエラーで停止するようにした(calc_repeatが無限ループを起こすので)
- 以下のコメントに対応して動作を確認。Thanks!
/bin/bash: accelerate: command not found が発生するようになったので、お困りの方は環境構築の上あたりで !pip install --upgrade nni --ignore-installed とやってみて下さい。当方環境ではこれでOKでした。
20230210
- pip先の更新によって壊れてたみたいなのでkohyaを更新しました
- 今後も同様の問題は発生するものと思われ
- requirements.txtを一行ずつpip installすれば部分的には動くかも知れない
20230206
- 繰り返し回数が被る時のリネームをファイル単位の移動にしました
- 3つのzipの中にある画像ファイルはみんな別々の名前にしといてや
- 同じRuntimeで2回実行する時は古い画像を消すようにしました
20230205
しなくていいこと
- kohyaのバージョンは20230204版に固定しました
- requirements.txtはNotebook上のsedで修正します
- aptやpipが壊れない限り動くはず
- コマンドラインオプションは勝手に決めます(メイキングを見てね)
- 正則化画像は使いません
- キャプションテキストは使いません
- 背景処理(Katanuki等)はしません
- LoRAを作る以外の機能はありません
- 要メールアドレス(さっき作ったGoogleので良い)
- https://huggingface.co/
ユーザー名はあとで使うのでメモっておきましょう。
既に取得済みのを使いまわすなら名前とかメールアドレスとかが見られてもいいものか要チェック。
- https://huggingface.co/settings/tokens
- 「New Token」を押す
- Name: 任意
- Role: write
追加したトークンはあとで使うのでメモっておきましょう。
(必要になった時にこのページを開いてコピペするほうが安全だけど)
25枚くらいを目標に頑張って用意しましょう。
長方形でも良いですが、縦横の差が2倍を超えないようにしましょう。
解像度は平均768くらいはあったほうがいいです。(512x1024とかでも可)
大きいのは勝手に縮小されるので大丈夫です。
ファイル名はなんでもいいけど長いと読み取れなくなるので、
長い名前や日本語などがあったら全選択してF2を押して短く改名しましょう。
画像は品質ごとの3種類にフォルダ分けすることができます。
(分けなくてもいいです)
a. 高品質、とても良い画像、特に学習したい画像
b. 中品質
c. 低品質、ちょっとだけ学習してくれればいい画像
a. b. cをそれぞれzipで圧縮します。
右クリックで「送る」「圧縮(zip)フォルダー」
名前はなんでもいいのでわかりやすくしましょう。
たとえば zunko_a.zip zunko_b.zip zunko_c.zip
- https://huggingface.co/new-dataset
- Dataset name: nva-Zunko (決めた名前の頭にnva-をつける)
- 他はいじらない
- 「Create dataset」を押す
9. zipを🤗にアップロードする
- https://colab.research.google.com/drive/1XBDdsczuD...
- File
- Save a copy in Drive
いままでの手順で用意した内容を入力します
- Huggingfaceのユーザー名 手順2
- Huggingfaceのwriteトークン 手順3
- モデルにつける名前 手順4
- 学習画像zip(品質A~C)のURL 手順6~9
🤗の自分のモデルページを開きます。
モデル名が zunko なら、
https://huggingface.co/ユーザー名/nva-zunko/tree/main
が出来ているはずです。
↓を押して zunko.safetensors をダウンロードします。
手元の1111で動作確認しましょう。
1111起動後ColabのNotebookに戻り、左端の📁を押して
stable-diffusion-webui\models\Lora を右クリックしてアップロードを押す
手順13.でダウンロードした zunko.safetensors を選択
1111のsettingタブ→stable diffusion→
Clip Skipを2にしといてね
txt2imgタブから🎴を押してLoRAを選択後Refreshを押して
ダウンロードしたモデル zunko を選択するとプロンプトに <lora:zunko:1> が追加される。(もう一度押すと解除)
好きなモデルで試すことが出来ますが、学習元のモデルは ACertainty です。
https://huggingface.co/aka7774/fp16_safetensors/re...
ぐちゃぐちゃな絵が出てきたら、おそらく過学習です。
モデルページにあった -000009 から -000001 までのファイルを試してみましょう。
(数字はepochで、数字の無いモデルはepoch 10です)
あるいは、プロンプトにある
全然似てない絵が出てくる場合は、学習不足か強度不足です。
うまくいったら naked などのキーワードを追加して学習の度合いが適切か確認しましょう。


1111起動後ColabのNotebookに戻り、左端の📁を押して
stable-diffusion-webui\models\Lora を右クリックしてアップロードを押す
手順13.でダウンロードした zunko.safetensors を選択
1111のsettingタブ→stable diffusion→
Clip Skipを2にしといてね
txt2imgタブから🎴を押してLoRAを選択後Refreshを押して
ダウンロードしたモデル zunko を選択するとプロンプトに <lora:zunko:1> が追加される。(もう一度押すと解除)
好きなモデルで試すことが出来ますが、学習元のモデルは ACertainty です。
https://huggingface.co/aka7774/fp16_safetensors/re...
ぐちゃぐちゃな絵が出てきたら、おそらく過学習です。
モデルページにあった -000009 から -000001 までのファイルを試してみましょう。
(数字はepochで、数字の無いモデルはepoch 10です)
あるいは、プロンプトにある
<lora:zunko:1>の数字を0.1ずつ下げてみましょう。
全然似てない絵が出てくる場合は、学習不足か強度不足です。
(zunko:1.1)の数字を0.1ずつ上げてみましょう。
うまくいったら naked などのキーワードを追加して学習の度合いが適切か確認しましょう。
masterpiece, best quality, 1girl, zunko <lora:zunko:1>
masterpiece, best quality, 1girl, zunko, naked <lora:zunko:1>
ノートブック作成において工夫した点など。
カスタマイズの参考にしてや。Colabのページも参考になるかも。
このノートブック自体のカスタマイズ性を上げる予定はありません。
これはあくまで入門用だから。
一応コードにコメント書くようにはしているつもり。
正則化画像とキャプションテキストへの対応は古いノートブックが参考になるかも。
古いのでそのまま実行しても動きません(そっちはもう直さない)
kohya_sd-scripts_intro
- Huggingfaceに最初にログインする
- get-pipとhuggingface-hubの相性が悪くて、先にログインしないとエラーになる(というバグが最近増えた。いずれ直るかも)
- 環境の情報表示
- たぶん要らないけどメンテのために残している
- T4よりしょぼいGPUが割り当たる可能性を気にしてたけど数か月で当たったことがない
- 「最初に Rumtime - Change runtime type で GPU を選ぶ。」は最近不要になった(昔はNoneに戻されていた)
- !sudo apt-get -y install python3.10
- リポジトリを追加してるノートブックが多いけど無くても動いた(違いは不明)
- !sudo cp `which python3.10` /usr/local/bin/python
- 行儀が悪いけど後のコードが読みやすくなるので・・・
- python 3.8と併用したい時にはこういうことをしないようにしましょう
- !sudo python get-pip.py
- aptで更新すると古いpipが入ってうまくいかないことがあった
- torchのインストールは時短のため割愛
- torch==1.13.1+cu116 が最初から入ってる
- どうせT4はcu112なのでどっちでも実質変わらんはず
- xformersはこのバージョンでいける
- 一時期うまくいかん報告が上がってたけどなんかうまく動くようになった
- kohyaは動くバージョン(20230204)で固定
- 自分のリポジトリに1個だけfork出来るので動作確認できたバージョンに更新していくつもり
- 絶対にこのバージョンじゃないと嫌なら自分のとこにforkしておくと安心かもね
- !sed -i "s/fairscale==0.4.4//g" requirements.txt
- kohya氏はColabでテストしてないかColabに対応する気がないので毎回いじる必要がある
- modelは固定
- URLを変えるときは、下のほうの pretrained_model_name_or_path も変える必要がある
- 出来るだけ無垢なモデルに教え込むといいのが出来るらしい
- ベストはNAIっぽいけど赤ちゃんにリーク品をダウンロードさせる訳にはいかないので・・・
- pruned, fp16, safetensorsのモデルにしないとメモリが足りなくなる
- だいたい2GBくらいのだと良さそう 詳しくはModels
- でかいほうが良い学習が出来るかも知れないけど個人的には気にしなくていい差なんじゃないのって思う
- trainは一旦ディレクトリ構造を無視してunzip
- kohyaで一番ややこしいのが「画像がありません」エラーだと思っている
- 繰り返し回数は後で決めたいからzipで固定しないほうがいいよね
- 100stepsに出来るだけ近づけるよう繰り返し回数を計算する
- キャラによって集められる画像枚数が違うのを吸収する仕組み
- 24枚の画像を8枚3組に分けて6,4,2回繰り返す(96steps)のがデフォルトってイメージ
- 100枚超でやると学習時間は増えます(別に支障はない)
- 繰り返し回数を適用するためリネームする
- 雑にコピペしてしまったけど4種類以上に増やすなら書き直したほうが綺麗かも
- トレーニング
- resolutionは1024に出来るけど高解像度の打率はあんま変わらない印象
- 768で学習して768x768か512x768で出すのが最も安定した
- 変えるならmin_bucket_reso, max_bucket_resoも忘れずに揃えましょう
- enable_bucketによって長方形の画像うまいこと対応してくれる
- jpgでもいけるので画像は適当に放り込んで良さそう
- batch_sizeには余裕があるので4とかに上げても動くかも
- VRAM 16GBなので将来対応も余裕
- mixed_precisionはfp16。生成時もfp16モデルと合わせて使う想定
- learning_rateはちょっと高めにしといてダメなら低epochのを使おう作戦
- 1e-2だとさすがに破綻した
- 結局10epochのが一番出来がいい気がする
- num_cpu_threads_per_processは1がいいらしいとkohya氏が言ってた気がする
- max_data_loader_n_workersはColabのCPUが2スレッドだし増やすとメインメモリを食うので2
- メインメモリは12.6GBしかないのでけちけち使う必要がある
- color_augを外してcache_latentsにすることも出来るが効果は実感できなかった
- seedはなんでも良さそうだけど今回は114514は勘弁しておいた
- clip_skipはSD2系で2がデフォルトらしいので・・・
- lr_schedulerは一番最後に実装されたやつが一番いいのではないかと思っている
- network_dim は 4chan で流行った128にしてある
- あとから変換ツールで下げることは出来るらしいので高めで良いかなと
- resolutionは1024に出来るけど高解像度の打率はあんま変わらない印象
- アップロード
- ほんとは1epochごとにアップロードしたかったけど全体が速くなったんでまあいいかって感じ
このページへのコメント
このエラーが出てくるんですけど何でですかね……?
raise subprocess.CalledProcessError(returncode=process.returncode, cmd=cmd)
subprocess.CalledProcessError: Command '['/usr/local/bin/python', 'train_network.py', '--pretrained_model_name_or_path=/content/models/ACertainty-fp16.safetensors', '--train_data_dir=/content/train', '--output_dir=/content/output', '--output_name=Aston_Machan_v1', '--prior_loss_weight=1.0', '--resolution=768', '--train_batch_size=2', '--learning_rate=2e-3', '--persistent_data_loader_workers', '--max_data_loader_n_workers=2', '--max_train_epochs=10', '--gradient_checkpointing', '--use_8bit_adam', '--xformers', '--mixed_precision=fp16', '--save_precision=fp16', '--logging_dir=/content/logs', '--save_every_n_epochs=1', '--enable_bucket', '--min_bucket_reso=512', '--max_bucket_reso=1024', '--save_model_as=safetensors', '--clip_skip=2', '--seed=1', '--lr_scheduler=cosine_with_restarts', '--lr_scheduler_num_cycles=5', '--color_aug', '--network_dim=128', '--network_module=networks.lora']' returned non-zero exit status 1.
accelerateが使えてなさそう。
ノートブックのコピーを最新版にしてもダメなら、
!accelerate launch \
の行を
!python \
に変えて、次の行が
train_network.py \
になるように5行削除すると真のエラーが見れるかも知れない。
前のエラーの段階で、学習素材を変更したら最後まで学習できた時があったので素材のそろえ方が悪いんでしょうか?
エラーが出た素材でノートブックを最新にしてもエラーが出てしまったので、コードを変えてみたのですが……。
ZeroDivisionError: division by zero
このエラーが出てきてしまいました。
どこで出たんだろ?
loading image sizes.
100% 147/147 [00:00<00:00, 9306.47it/s]
make buckets
number of images (including repeats) / 各bucketの画像枚数(繰り返し回数を含む)
bucket 0: resolution (512, 1024), count: 1
bucket 1: resolution (576, 960), count: 9
bucket 2: resolution (576, 1024), count: 6
bucket 3: resolution (640, 896), count: 13
mean ar error (without repeats): 0.01659187941191258
Traceback (most recent call last):
File "/content/sd-scripts/train_network.py", line 548, in <module>
train(args)
File "/content/sd-scripts/train_network.py", line 139, in train
train_dataset.make_buckets()
File "/content/sd-scripts/library/train_util.py", line 436, in make_buckets
batch_count = int(math.ceil(len(bucket) / bucket_batch_size))
ZeroDivisionError: division by zero
とりあえずエラー文周辺がこんな感じですね……。
/bin/bash: accelerate: command not found が発生するようになったので、お困りの方は環境構築の上あたりで
!pip install --upgrade nni --ignore-installed
とやってみて下さい。当方環境ではこれでOKでした。
この手順で学習思考した人はいいね押してあげて
13でsafetensorsファイルが見当たらなくて詰んでしまう。
12で特にエラー出てないように見えるけど、どうすればいいんでしょう。
間違えてデータセットの方見てるのでは、出来上がりはmodelの方だよ
Pythonに何かあったのか
/bin/bash: accelerate: command not found
で止まるようになりました
自分も同じエラー確認しました