見出し画像

StableDiffusionのLoRAのOptimizerの速度比較

どのOptimizerが学習が最も速いか比較。
簡易的な比較である上、人によって理想の成果が異なるため参考程度にとどめてください。


Lossの降下で比較(SD1.5)

Optimizerの種類については画像左下の凡例を確認してください。
wd●●はweight_decayの値を示します。

設定など

512x512(SD1.5),画像6枚,Batch size3
AdamW,LionのLRは0.0001、DAdaptLion(betas=0.9,0.999,eps=1e-06,d0=1e-06)とProgidy(betas=0.9,0.99,eps=1e-08,d0=1e-06)のLRは1、AdaFactorのLR(initial_lr)は0.001

DAdaptLionとProdigyは計算が遅いがlossの降下は早い(過学習も早い)。手動系はLionが早い。なお、SGDNesterov(LR=10)はLionとAdamWの中間の速度だった。
AdaFactorが(lossの降下と学習時間の双方が)最も遅い。

lossの降下速度

Prodigy>>DAdaptLion>>>Lion>SGDNesterov>AdamW>AdaFactor

計算速度

SGDNesterov=>AdamW=Lion>>>Prodigy>DAdaptLion>>AdaFactor

総評

総合的に見てProdigyが優勝。計算が遅い代わりに収束がかなり早いので、計算の早い手動系より短時間で終わらせることができます。
AdaFactorは…LoRAのような小規模学習じゃいらない子かなw

Lion vs Prodigy(SDXL)

データセットが大きい分Lossの変化が小さいためtensorboardの画像は省略。実際の出力で確認します。
共通設定:cosine_with_restarts,batch_size=2

Lion(LR=0.0001)

noneがLoRA未使用、数字が学習ステップ数(batch1換算)

2328ステップ以上で十分な結果になった。

Lion(LR=0.0002)

776ステップから再現している。LRが高いためか少し粗い。

Prodigy

eps=1e-08,d0=1e-06,weight_decay=0,betas=0.9,0.99

1552ステップで十分な結果になった。粗さもない。

総評

実際の出力もProdigyが速く見えます。プロ爺優勝!
ただ癖のある結果になる場合がある気がします。そのときはLionでよいと思います。


この記事が気に入ったらサポートをしてみませんか?