sd-scriptsで次のエポックの処理が始まるまでに時間がかかる

sd-scriptsでsd-scriptsで次のエポックの処理が始まるまでに時間がかかる現象の対処法を紹介します。

現象の確認

sd-scriptsで学習を実行する際に、エポックの切り替えの際に時間がかかり、その間GPUが稼働しない時間があります。
学習処理を高速で実行するために、なるべくGPUが稼働しない時間は減らし、GPUをフル稼働させて学習処理の実行時間を短くしたいです。

sd-scriptsで次のエポックの処理が始まるまでに時間がかかる:画像1

エポックの切り替え時に時間がかかることで、GPUが休み休み稼働している状態が確認できます。
sd-scriptsで次のエポックの処理が始まるまでに時間がかかる:画像2

対処法

sd-scriptsの起動コマンドに --persistent_data_loader_workers を追加します。

--persistent_data_loader_workers



tomlファイルで設定する場合は、persistent_data_loader_workers パラメータに true を設定します。

persistent_data_loader_workers = true

オプション追加後の実行状況です。GPUがフル稼働している状態が確認できます。
sd-scriptsで次のエポックの処理が始まるまでに時間がかかる:画像3

どの程度早くなるのか

学習ステップ 400、23エポックの場合

実行時間
--persistent_data_loader_workers あり 5分12秒
--persistent_data_loader_workers なし 19分58秒


エポック数が多い場合に差が出ますが上記の条件では、4倍程度の速度向上となります。

AuthorPortraitAlt
著者
iPentecのメインデザイナー
Webページ、Webクリエイティブのデザインを担当。PhotoshopやIllustratorの作業もする。 最近は生成AIの画像生成の沼に沈んでいる。
作成日: 2023-07-17
Copyright © 1995–2025 iPentec all rights reserverd.