見出し画像

StableDiffusionのHyperNetで機械学習をするときの注意点

はじめに

StableDiffusionのHyperNetで機械学習をするときの注意点をまとめる

マシンスペック

Windows

CPU 12th Gen i5-12450H 2GHZ 8core 12thread メモリ16GB
GPU NVIDIA GeForce RTX 3050 Ti  Lapptop GPU メモリ4GB

Mac

M2 Mac Air

Macでの実行

Macで機械学習を行う場合はcpuで行う必要があるため、StableDiffusionを起動するときに以下のコマンドライン引数が必要になる
--skip-torch-cuda-test --no-half --use-cpu all
なお、CPUで演算を行うため学習スピードは極めて遅い。1000step実行に約8時間程度かかる

Windows

WindowsそのものにStableDiffusionの環境を構築した場合

Macと同じように
--skip-torch-cuda-test --no-half --use-cpu all
で起動すると
AttributeError : 'None Type object has no attribute get'
と言うエラーが出る
ログにはhypernetwork.pyのLine252辺りでエラーが出ていると書いてあるので、ソースを読んでみると
torch.load(filename,map_location='cpu')
のメソッド呼び出しでNoneが返却されているために発生しているようだ

をみるとmap_locationにはNoneを設定することが推奨されているようだけど、データをあえてCPU上にロードしている理由はちょっとよくわからない。もう少しPythonのコードを読む必要がありそう
あれこれコマンドを打ってもうまくいかないし、別のモジュールを導入したときにC++のビルドがエラーになる事象も起こっているので、仮想環境上のLinux環境上にStableDiffusionを構築することにする

仮想環境のLinux上にStableDiffusionの環境を構築した場合

色々、頑張ってWSLを使ってLinux環境にStableDiffusionの環境を構築する
いや、素のLinux環境にStableDiffusionが動作するPtyhonを導入が面倒臭すぎる
ネット上の情報を色々調べたけど、書いていることがそのページごとで違っていたり矛盾しているから本当に面倒くさかったよ。この辺りはblewで全てが解決するMacの楽さとは雲泥の差があるな。
で、環境構築後にMacと同じように
--skip-torch-cuda-test --no-half --use-cpu all
を実行すると/torch/cuda/amp/grad_scaler.py の Line181の
assert outputs.is_coda or output.divce.type =='xla'
でアサーションで引っかかている
エラーの内容からstable diffusionの起動時のパラメタにcpuを使う設定をしてはいけないことがわかる
そこで、起動コマンドのパラメタに
--disable-safe-unpickle --skip-torch-cuda-test
を指定すると、Macと同じようにHyperNetの機械学習処理が起動しました
GPUを使うのでMacの時より4倍くらい早いな

終わりに

StableDiffusionの環境構築ですが、Windowsで構築するときはWindowsそのものに構築するのではなく、ちょっとハードルは高いですが、仮想環境のLinuxに校区することをお勧めします。Windows11からはWSLを使ったLinuxの仮想環境設定が10に比べて大幅に簡単になったので、機械学習をローカルマシンで行いという人は11へのアップグレードをお勧めします

おまけ

自分が描いた線画からStable Diffusionで色塗りしたイラストをアップしてみます

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