近年は大容量のSSDも安価になり、増設するのも簡単になりました。
しかしStableDiffusionの容量は大きく、モデルや出力した絵が増えていくとストレージを圧迫してしまいます。
「StableDiffusion」ではグラフィックボードのVRAMを使用するから、速度の遅いHDDに移動しても問題ないのでは?と考える人もいると思います。
内臓HDDなら、1TB以上の大容量でも安く購入することが出来ますからね。
ですが実際に購入してから、遅くて使い物にならないのは嫌ですよね?
そこで今回は、実際にHDDに移動すると、起動速度や絵の出力速度がどうなるかの検証と、遅くなる場合はどのファイルならば移動しても速度に影響でないかを確認していきます。
また実際の検証には2.5インチのSSDも比較対象としています。
結果
・使用モデルだけSSDに移すだけで、他はHDDで十分な速度と快適性が得ることが可能
・出力はControlnetやHires.flxの影響はほぼなく、ストレージによる差が生じないためHDDで十分
この記事を読むと
StableDiffusionのどのファイルなら、HDDに移動しても問題ないか理解できます。
※記事内に広告が含まれています。
結果
・使用モデルだけSSDに移すだけで、他はHDDで十分な速度と快適性が得られる。
・出力はControlnetやHires.flxの影響はほぼなく、ストレージによる差が生じないためHDDで十分。
筆者のPC環境
まず初めに私のPCのスペックと現在StableDiffusionでインストールされている場所です。
元々ここまでがっつりStable Diffusionを使う予定ではなかったので、StableDiffusionをそれなりに快適に動かせるスペックのPCになります。
現在はCドライブを分割してSドライブ(100GB)を作成し、StableDiffusionWebUIはSドライブにインストールしてあります。
ただしPythonやGitなどは別でも使用するためCドライブに保存してあり、今回の検証の対象外としてしています。
2.5インチのSSDはWドライブ、3.5インチのHDDはDドライブの名前になっています。
DドライブのHDDが古いのは、10年ぐらい前に使ってたPCから持ってきたからです。
あの時はSSDなんて高い&容量USB並みで買えなかったからなぁ…
対象 | スペック |
OS | Windows10 64bit |
CPU | Core i7-11700 |
RAM | 16GB |
グラフィックボード | GeForce RTX 3060 12GB |
ストレージ | NVMe M.2 SSD 512GB |
SSD Transcend 512GB | |
HDD 東芝 DT01ACA050 |
対象 | インストール/保存先 |
Python | Cドライブ |
Git | Cドライブ |
StableDiffusion | |
┗Outputs | Sドライブ |
┗Model | Sドライブ |
┗VAE | Sドライブ |
┗Control.net | Sドライブ |
確認内容
目的、手順、方法についてそれぞれを下記に示します。
確認目的
速度の速い「NVMe M.2 SSD」から速度の遅い2.5インチの「SSD」と3.5インチの「HDD」にStableDiffusionを移動させて、速度を確認します。
最終的に起動速度、出力速度、モデル変更速度など通常の動作速度が変わらない状態を見つける
確認手順
1.StableDiffusionWebUIをフォルダ事コピーしてSSD&HDDに移動して、起動確認&各速度の確認
2.1で速度の低下が著しいものに対して、関連する項目を「NVMe M.2 SSD」から読み込むようにして起動確認&各速度の確認
ドライブ事の比較
単純に各ドライブにStableDiffusionのフォルダ中身をコピーして起動、出力した時の結果です。
起動、モデル変更
初めは基本的な確認として、各ドライブに移動したStableDiffusionを単純に起動させます。
初回の起動を含めて3回行っています。
また計測は画面を録画して、時間の差から算出しています。
起動時間
初めは単純に「webui-user.bat」で起動した場合の時間を確認します。
結果:初回起動の時間を見るとHDDが圧倒的に遅いです。
2回目以降の起動時間も5秒程度ですが、HDDが遅いです。
ただし一回消して起動しなおすことは稀なため、この初回起動の差はフラストレーションに直結しそうです。
NVMe M.2 SSD | SSD | HDD | |
1回目 | 1分3秒 | 1分9秒 | 3分12秒 |
2回目 | 45秒 | 46秒 | 51秒 |
3回目 | 46秒 | 47秒 | 50秒 |
モデル変更
下記のようにモデルを変更した時の時間を計測してみます。
今回は「Anything-v5(2GB)」「Anything-v3(7GB)」の2つのモデルを選択した場合の比較を行っていきます。
結果:HDDは初回変更時は起動同様に、時間が顕著にかかっています。
しかし2回目以降も明らかにHDDが遅いです。
また2.5インチのSSDに関してもNVMe M.2 SSDに対して1~2秒程度遅くなっています。
頻繁に切り替えるものではありませんが、外側からStableDiffusionを操作しようとした場合は、待機時間に注意が必要かもしれません。
Anything-v5 ⇒ Anything-v3
NVMe M.2 SSD | SSD | HDD | |
1回目 | 12.8秒 | 14秒 | 2分59秒 |
2回目 | 6.2秒 | 7.5秒 | 21.3秒 |
3回目 | 6.1秒 | 8.3秒 | 21.9秒 |
Anything-v3 ⇒ Anything-v5
NVMe M.2 SSD | SSD | HDD | |
1回目 | 5.8秒 | 9秒 | 46.7秒 |
2回目 | 6秒 | 8.6秒 | 33.1秒 |
3回目 | 5.8秒 | 7.3秒 | 35.2秒 |
出力
「起動、モデル変更」同様の方法で行い、出力も初回の起動を含めて3回行っています。
また計測は画面を録画して、時間の差から算出しています。
今回は各パラメータは起動状態のまま、出力枚数を4枚にして計測を行います。
ただし出力サイズはHires.flxでのアップスケールを考えて768×768として行いました。
また使用したモデルは「Anything-v5」を使用しています。
プロンプトは「A girl」、ネガティブプロンプトはなしで出力しています。
パラメータ | 値 |
モデル | Anything-v5 |
Sampling method | DPM++ 2M Karras |
Sampling steps | 20 |
Width | 768 |
Height | 768 |
Batch count | 2 |
Batch size | 2 |
CFG Scale | 7 |
txt2img
基本的な出力結果の確認です。
結果:実際に出力された絵には若干の違いがありますが時間に差はほとんどありませんでした。
HDDでは1~2秒程度遅いので、枚数やサイズを上げるとより遅くなりそうですが、1024×1024を20枚程度であれば20~30秒の誤差の範囲で済むため、個人で使用する分にはあまり影響はないでしょう。
NVMe M.2 SSD | SSD | HDD | |
1回目 | 27秒 | 28秒 | 29秒 |
2回目 | 27秒 | 27秒 | 27秒 |
3回目 | 27秒 | 27秒 | 28秒 |
txt2img (Hires.flx Upscale 1.5)
次にHires.flxでUpscale 1.5にした場合の出力結果の確認です。
パラメータ | 値 |
Width | 512 |
Height | 512 |
Upscale by | 1.5 |
Hires steps | 0 |
Denoising strength | 0.7 |
結果:実際に出力された絵には若干の違いがありますが時間に差はほとんどありませんでした。
NVMe M.2 SSD | SSD | HDD | |
1回目 | 40秒 | 40秒 | 41秒 |
2回目 | 40秒 | 40秒 | 41秒 |
3回目 | 41秒 | 40秒 | 40秒 |
img2img
img2imgで出力した出力結果の確認です。
元となる画像は、先ほどのtxt2imgで作成した画像を使用しています。
パラメータ | 値 |
Denoising strength | 0.75 |
結果:txt2img同様に、出力された絵には若干の違いがありますが時間に差はほとんどありませんでした。
NVMe M.2 SSD | SSD | HDD | |
1回目 | 23秒 | 23秒 | 23秒 |
2回目 | 23秒 | 23秒 | 23秒 |
3回目 | 23秒 | 23秒 | 24秒 |
Controlnetを使用した時
Controlnetを使用するときはControlnetのモデルをダウンロードします。
つまりControlnet用のモデルを使用する場合も、描画時間が遅くなる可能性があるので、確認してみます。
txt2imgを使用して、「Lineart」と「Openpose」を使用した場合について確認していきます。
使用する絵はimg2imgでも使用した下記画像を読み込ませています。
Lineart
元絵を一度線画に変換して、その後彩色を行う機能です。
結果:通常の出力と同じで時間に差はほとんどありませんでした。
NVMe M.2 SSD | SSD | HDD | |
1回目 | 36秒 | 37秒 | 36秒 |
2回目 | 36秒 | 36秒 | 37秒 |
3回目 | 37秒 | 36秒 | 36秒 |
Openpose
元絵から人の骨格情報を推定して、その骨格情報に合うように画像を描く機能です。
結果:通常の出力と同じで時間に差はほとんどありませんでした。
NVMe M.2 SSD | SSD | HDD | |
1回目 | 37秒 | 37秒 | 37秒 |
2回目 | 38秒 | 37秒 | 37秒 |
3回目 | 37秒 | 37秒 | 38秒 |
ここまでの結果
起動、モデル変更…ともに差有り、NVMe M.2 SSD⇒SSD⇒HDDの順番で遅くなっている。
出力…Controlnetの使用有無にかかわらず、差無し
モデルのみ「NVMe M.2 SSD」から読み込み
起動時の遅延もモデル読み込みによる影響が大きい可能性があるため、モデルのみ「NVMe M.2 SSD」から読み込んだ場合の確認を行います。
期待値は、起動、モデル変更ともにドライブ事移した時よりも時間が短くなっていることです。
出力に関しては、Controlnetに関わらず時間がほぼ変わらなかったため、txt2img(Hires.flx Upscale 1.5)のみ確認しています。
期待値は出力時間は変わらないことです。
起動時間
結果:SSD、HDDともに初回起動時間が短くなりました。
特にHDDの初回起動はSSDと遜色ないレベルの速さなので、モデルをSSDにするだけでも起動時のフラストレーションが緩和されそうです。
NVMe M.2 SSD | SSD | SSD(Model移動) | HDD | HDD(Model移動) | |
1回目 | 1分3秒 | 1分9秒 | 46秒 | 3分12秒 | 53秒 |
2回目 | 45秒 | 46秒 | 49秒 | 51秒 | 54秒 |
3回目 | 46秒 | 47秒 | 47秒 | 50秒 | 46秒 |
Model変更
結果:SSD、HDDともにモデルの変更時間が短くなりました。
SSD同士では若干の差ですがHDDでは時間が半分近くなっているので、快適性は間違いなく上がっています。
Anything-v5 ⇒ Anything-v3
NVMe M.2 SSD | SSD | SSD(Model移動) | HDD | HDD(Model移動) | |
1回目 | 12.8秒 | 14.0秒 | 13.6秒 | 2分59秒 | 22.3秒 |
2回目 | 6.2秒 | 7.5秒 | 7.2秒 | 21.3秒 | 11.4秒 |
3回目 | 6.1秒 | 8.3秒 | 6.8秒 | 21.9秒 | 10.6秒 |
Anything-v3 ⇒ Anything-v5
NVMe M.2 SSD | SSD | SSD(Model移動) | HDD | HDD(Model移動) | |
1回目 | 5.8秒 | 9.0秒 | 7.4秒 | 46.7秒 | 12.4秒 |
2回目 | 6.0秒 | 8.6秒 | 7.0秒 | 33.1秒 | 10.8秒 |
3回目 | 5.8秒 | 7.3秒 | 6.7秒 | 35.2秒 | 10.3秒 |
txt2img (Hires.flx Upscale 1.5)
結果:SSD、HDDともに出力結果に差はありませんでした。
NVMe M.2 SSD | SSD | SSD(Model移動) | HDD | HDD(Model移動) | |
1回目 | 40秒 | 40秒 | 40秒 | 41秒 | 43秒 |
2回目 | 40秒 | 40秒 | 40秒 | 41秒 | 41秒 |
3回目 | 41秒 | 40秒 | 40秒 | 40秒 | 40秒 |
ここまでの結果
起動、モデル変更…ともに改善有り、特にHDDの起動速度は約72%短縮を確認
出力…Controlnetの使用有無にかかわらず、差無し
蛇足
アイキャッチ用の画像を作るために思いつきでStable Diffusionのプロンプトに「HDD」とだけ入力した結果がこちらです。
HDDだけでなんでこうなるんでしょうね~、次は身の回りの物の名前だけ入れてどうなるかとか検証してみようかな。。。
まとめ
StableDiffusionの快適性を損なわず、HDDにファイル移行する方法について紹介しました。
改めて2行でまとめると…
・使用モデルだけSSDに移すだけで、他はHDDで十分な速度と快適性が得ることが可能
・出力はControlnetやHires.flxの影響はほぼなく、ストレージによる差が生じないためHDDで十分
Stable Diffusionを使用していると、どんどん絵を作成するためにストレージの容量がいっぱいになってしまいます。
ですが今回のモデルだけをSSDに残しておくことで、HDDに本体や出力先を移動しても快適に作業することが可能であるとわかりました。
また万が一物理破損してしまった時も、復旧難易度はSSDの方が高いためHDDと並列で活用すると良いです。
安いHDDでも快適に使えることが分かったので、是非容量を気にせずたくさんの画像を作ってみてください!
StableDiffusionにお勧めのグラボ
ここまでの記事を読んでStableDiffusionを始めてみたいと思ったけど、どれを買ったか良いか分からない人向けに私の使っているグラボを紹介します。
私が使用しているグラボはNVIDIA GeForce RTX3060 搭載 グラフィックボード GDDR6 12GBになります。
StableDiffusionで絵を生成するときは、PCのCPUやメモリよりもグラボの性能が重要です。
StableDiffusionではVRAMが12GB以上であることが推奨されていますが、普通のゲーム用のグラボでは8GBのものが多いです。
経験上、一回のプロンプトで一発で望みの絵が出ることは少なく、10枚ぐらい出力してそこから近づけていく作業をします。
しかしVRAMが低いと1枚を生成する時間が長くなってしまいます(完全にVRAM依存ではないですが)
1枚の生成する時間が長いと、最終的なゴールまでの時間も多くかかってしまうので、推奨要領である12GBのグラボを買うことをお勧めします。
VRAMが低い=一度に計算できる数が少ない=生成速度が遅い
そのため解像度の高い絵を生成するのに時間がかかるだけでなく、生成できない可能性もあります(2GBや4GBなど)
Controlnet等、拡張機能を複数使用する場合やLora等の学習を行う場合は、より顕著にVRAMの差が出ます。
そのため単純にAIで出力してみたい。というだけでなく、その一歩先で色々やってみたい方は是非12GB以上を購入してみてください。
ちょっと試すだけなら、下記のような無料AI画像生成サービスを使うのも良いです。
コメント