どうも音又です。
最近またAIイラスト熱が出てきたのでStable Diffusion WebUIを使用して学習させようと思っていたのですが、拡張機能のDreamBoothを使って学習をさせている際にエラーが出て頭を抱えてしまったので今回はその際に対処したことを備忘録として記事にしていきたいと思います。
使用していた環境
Stable Diffusion WebUI (AUTOMATIC1111):v1.7.0
GPU:RTX4090
OS:Windows10 64bit
Python:3.10.11
DreamBoothで学習中に出たエラー
まず最初に出たエラーがこちら
PermissionError: [WinError 5] アクセスが拒否されました。: 'C:\\stable-diffusion-webui\\models\\Lora\\xxxx.safetensors'
初めてみたエラーだったので対処方法がわからずとりあえずググってみました。
調べて出てきた対処方法
- Pythonやbatファイルを管理者権限で使用する
- フォルダのアクセス許可をフルコントロールにする
- Stable Diffusionのあるディレクトリを移動する
こんな感じです。
ただ全部試してみましたがダメでした。
あとついでに
- Pythonのダウングレード(3.10.11→3.10.6)や再インストール
- Stable Diffusionの再インストール
- 拡張機能のDreamBoothの再インストール
も行ってみましたがダメでした。
仕方がないので横着せずにエラーの細かい原因と発生するタイミングを観察してみました。
そうするとどうやらエポックごとにモデルを保存する際にエラーが出始めていることがわかりました。
確かに上記のエラーでもモデルへのアクセスが拒否されてるのでなるほどなぁといった感じでしたが、エラー上で指しているモデル自体はディレクトリにしっかり存在しており、アクセス権限も普通に読み込み出来る状態になっていたのでいまいちよくわかりません。
諦めて拡張機能のDreamBoothをダウングレードした
いろいろ試したり、調べたりしましたが全く解決しそうな雰囲気がなかったので今インストールされているDreamBooth自体に問題があるのでは…?とか思って拡張機能のDreamBoothをダウングレードしてみることにしました。
※ここからする作業はガッツリ環境を弄るので不安な方はしっかりバックアップを取ってから行ってください。
まず最初にStable Diffusionのフォルダ内の『extensions』フォルダを開き、その中にある『sd_dreambooth_extension』を消します。
次にGithubから拡張機能のデータを落としてきます。
この際にうっかり最新のバージョンを持ってきてしまうと二の舞いになりかねないので、ちゃんと古いバージョンをダウンロードします。
今回は記事作成時(2023/12/21)の最新のバージョンが『1.1.0』っぽかったので前バージョンの『1.0.14』をダウンロードしました。
ちなみにバージョンを変えるとUIや仕様が変わることがある(今回は変わった)のでその辺は注意してください。
あとはダウンロードしたzipファイルを解凍し、出てきた『sd_dreambooth_extension』を先程同名のフォルダを消した『extensions』フォルダにぶち込みます。
そしてStable Diffusion WebUIを起動するのですが、このまま起動するとPython周りの依存関係がごっちゃになって挙動に問題が起こるかもしれないので、一度仮想環境も消してあげます。
普通に環境構築をしていればStable Diffusionのフォルダ内に『venv』というフォルダがあるのでそれを消します。
あとは『webui-user.bat』からStable Diffusionを起動すれば新しく仮想環境も構築されて必要なパッケージ等もインストールされるはずです。
起動中にモジュールがない的なことを言われたらバッチファイル内に
set REQS_FILE=.\extensions\sd_dreambooth_extension\requirements.txt
と記述してから起動してみてください。
これでWebUI内にDreamboothタブがあり、学習が出来る状態になっていればとりあえず導入は終了です。
ここで新しいエラー発生
さてこれで問題解決かと思い、学習を開始したら今度は新しいエラーが出てきました()
Please make sure to pass `low_cpu_mem_usage=False` and `device_map=None` if you want to randomly initialize those weights or else make sure your checkpoint file is correct.
ムムッとなりましたが今回は割りと直球なエラーなので助かりました。
対処方法としてはStable Diffusionのフォルダ内から
『venv\Lib\site-packages\diffusers\models』フォルダへと進み、その中にある『modeling_utils.py』を開き
if is_torch_version(">=", "1.9.0"):
_LOW_CPU_MEM_USAGE_DEFAULT = True
else:
_LOW_CPU_MEM_USAGE_DEFAULT = False
という部分を探して以下のように変更します。(上の方の_LOW_CPU_MEM_USAGE_DEFAULTの値をTrueからFalseへ)
if is_torch_version(">=", "1.9.0"):
_LOW_CPU_MEM_USAGE_DEFAULT = False
else:
_LOW_CPU_MEM_USAGE_DEFAULT = False
変更したら保存し、Stable Diffusionを再起動します。
これで学習を開始して無事に学習が進行、終了できれば問題解決です。
最新バージョンでちゃんと動いてないのと、ここまで修正しないと動かないことに関しては「なにか根本的なところが解決できてないのでは…?」とモヤモヤしてますが、今のところこれで動いているので良しとしました。
おわり
ということで今回はStable Diffusion WebUIのDreamBoothを使用した学習でエラーが起きた際のトラブル対処についてでした。
あまりにも情報が少ない症状だったのでもし同じ症状の方がいれば参考にしてもらえると良いなと思います。
では今回はこの辺で、さいなら
コメント