画像作成AIツール「Stable Diffusion」は最も有名な画像生成AIツールです!
Stable Diffusionは無料かつ自分の環境のPCに環境構築できるので、広く使われています!
そStable Diffusionは非常に便利ですが、高性能なグラボを搭載したスペックのPCを要求されます。
もしグラボの性能が足りなかった場合はメモリ(VRAM)不足のエラーが発生して必要ができません。
本記事では、Stable Diffusionでメモリ不足が発生してしまった場合での対処方法について解説します!
Stable DiffusionでグラボなしのPCだと、どんなエラーが出るか?
ここでは敢えて、グラボなしの状態で、Stable Diffusionのローカル版(AUTOMATIC1111)がどのような動作するか実験します。
結論からいうと、グラボなしはStable Diffusionは下記エラーで起動しませんでした。
PythonスクリプトがGPUを使用できないために発生したエラーとなります。
Python 3.10.6 (tags/v3.10.6:9c7b4bd, Aug 1 2022, 21:53:49) [MSC v.1932 64 bit (AMD64)] Version: v1.2.1
Commit hash: 89f9faa63388756314e8a1d96cf86bf5e0663045
Traceback (most recent call last):
File “D:\StableDiffusion20230527\stable-diffusion-webui\launch.py”, line 369, in <module>
prepare_environment()
File “D:\StableDiffusion20230527\stable-diffusion-webui\launch.py”, line 274, in prepare_environment
run_python(“import torch; assert torch.cuda.is_available(), ‘Torch is not able to use GPU; add –skip-torch-cuda-test to COMMANDLINE_ARGS variable to disable this check'”)
File “D:\StableDiffusion20230527\stable-diffusion-webui\launch.py”, line 135, in run_python
return run(f'”{python}” -c “{code}”‘, desc, errdesc)
File “D:\StableDiffusion20230527\stable-diffusion-webui\launch.py”, line 111, in run
raise RuntimeError(message)
RuntimeError: Error running command.
Command: “D:\StableDiffusion20230527\stable-diffusion-webui\venv\Scripts\python.exe” -c “import torch; assert torch.cuda.is_available(), ‘Torch is not able to use GPU; add –skip-torch-cuda-test to COMMANDLINE_ARGS variable to disable this check'”
Error code: 1
stdout: <empty>
stderr: Traceback (most recent call last):
File “<string>”, line 1, in <module>
AssertionError: Torch is not able to use GPU; add –skip-torch-cuda-test to COMMANDLINE_ARGS variable to disable this check
グラボを追加して、Stable Diffusionでエラー回避できるか確かめてみる
今回は「NVIDIA GeForce GTX 1060」というVRAM6GBのメモリを搭載しているグラボでエラー回避できるか確かめてみます。
「NVIDIA GeForce GTX 1060」は低~中程度のスペックのグラボです。
「NVIDIA GeForce GTX 1060」を付けたら、Stable Diffusionの起動時にエラーは発生せず起動できました。
venv “D:\StableDiffusion20230527\stable-diffusion-webui\venv\Scripts\Python.exe”
Python 3.10.6 (tags/v3.10.6:9c7b4bd, Aug 1 2022, 21:53:49) [MSC v.1932 64 bit (AMD64)]
Version: v1.2.1
Commit hash: 89f9faa63388756314e8a1d96cf86bf5e0663045
Installing requirements
Launching Web UI with arguments:
No module ‘xformers’. Proceeding without it.
Loading weights [812cd9f9d9] from D:\StableDiffusion20230527\stable-diffusion-webui\models\Stable-diffusion\anythingV3_fp16.ckpt
Running on local URL: http://127.0.0.1:7860
To create a public link, set `share=True` in `launch()`.
Startup time: 31.1s (import torch: 9.0s, import gradio: 6.2s, import ldm: 2.7s, other imports: 10.3s, setup codeformer: 0.2s, load scripts: 1.3s, create ui: 0.8s, gradio launch: 0.4s).
Creating model from config: D:\StableDiffusion20230527\stable-diffusion-webui\configs\v1-inference.yaml
LatentDiffusion: Running in eps-prediction mode
DiffusionWrapper has 859.52 M params.
Applying cross attention optimization (Doggettx).
Textual inversion embeddings loaded(0):
Model loaded in 27.2s (load weights from disk: 13.7s, create model: 0.8s, apply weights to model: 0.6s, apply half(): 0.7s, move model to device: 0.8s, load textual inversion embeddings: 10.5s).
下記のようなイラストも作成できました。
低性能なグラボだと高解像度のイラスト作成時にメモリエラーが発生する
上記の作成した画像は512px×512pxでしたが、高解像度のイラスト2048PX×2048PXのイラストを要求すると下記のようなエラーが発生しました。
RuntimeError: Not enough memory, use lower resolution (max approx. 1280×1280). Need: 6.0GB free, Have:1.8GB free
Time taken:
Torch active/reserved: 2966/2990 MiB,
6.0GBの空きメモリが必要ですが、利用可能なメモリは1.8GBがなく、1280×1280の低解像度を使用で使用するようにという内容です。
指示通り、1280×1280の解像度に変更したところ、画像生成に成功しました。
高スペックのグラボでないと、高解像度の画像は作成できないので注意してください。
Stable Diffusionの拡張機能を利用するとエラーが発生する
Layerdividerという拡張機能を追加したところ、下記エラーが発生しました。
torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 1024.00 MiB (GPU 0; 6.00 GiB total capacity; 4.61 GiB already allocated; 0 bytes free; 4.68 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF1024.00 MiBのメモリを割り当てようとした際に、利用可能なメモリが不足しているため、割り当てに失敗しました。
CUDAメモリが不足しているエラーです。
エラーメッセージによれば、GPUの総容量は6.00 GiBであり、既に4.61 GiBが割り当てられており、利用可能なメモリは0バイトしかありません。PyTorchによって合計で4.68 GiBのメモリが予約されています。
こうなると基本的にはグラボを高スペックなグラボに変更するしか対処方法はありません。
グラボを交換してStable Diffusionでエラー回避する
VRAMメモリが不足している場合は基本的にはグラボ交換するしかありません。
今回はVRAM12GBの搭載の「GeForce RTX 3060」の下記グラボに交換しました。
Palit(パリット) GeForce RTX 3060 Dual OC 12GB LHR版 / NE63060T19K9-190AD / グラフィックボード
グラボを交換したところ、エラーは出ずに成功しました。
今回交換したグラボのVRAMは12GBで、高解像度の画像作成時にメモリ不足が発生することがあるので、予算に余裕がある方はVRAM24GB搭載のGeForce RTX 3090以上のグラボをオススメします!
MSI GeForce RTX 3090 VENTUS 3X 24G OC グラフィックスボード VD7357
Stable Diffusionでグラボのメモリ(VRAM)不足の対処方法まとめ
結論からいうというと、グラボでメモリ不足のエラーが出た場合はグラボの交換しましょう。
グラボを交換することでエラーを回避することができます。
他のサイトではコードを追加する、グラボの2枚刺し(SLI)するなどの対処方法が載っているところもありますが、使用できる条件が限られていたり、はっきりとした効果が出ない場合も多いです。
ご自身の搭載しているグラボの型番が分からない方はCtrl + ALT + Deleteを押して、タスクマネージャーを起動し、GPUを選択することで簡単に調べることが可能です!
最後に著者のPC環境のスペックを貼りますので是非参考にしてみてください!
筆者のPC環境スペック | |
---|---|
CPU | Core i7 8700K |
マザーボード | H370-A |
メモリ | 32GB (DDR- 2666 4組) |
SSD | NVMe SSD 500GB |
O2S | Windows 10 HOME |
電源ユニット | 600W (BRONZE) |
その他 | 2GB HDD付属(Dドライブ) |
グラボ | GeForce RTX 3060(VRAM12GB) |
※筆者はグラボの2枚刺し(SLI)は最低限マザーボードとグラボの買い替えが必要だったため断念しました。
是非色々試してみてくださいね!