Stable Diffusionでグラボのメモリ(VRAM)不足!エラーの対処方法とは?

画像作成AIツール「Stable Diffusion」は最も有名な画像生成AIツールです!

Stable Diffusionは無料かつ自分の環境のPCに環境構築できるので、広く使われています!

そStable Diffusionは非常に便利ですが、高性能なグラボを搭載したスペックのPCを要求されます。

もしグラボの性能が足りなかった場合はメモリ(VRAM)不足のエラーが発生して必要ができません。

本記事では、Stable Diffusionでメモリ不足が発生してしまった場合での対処方法について解説します!

Stable DiffusionでグラボなしのPCだと、どんなエラーが出るか?

ここでは敢えて、グラボなしの状態で、Stable Diffusionのローカル版(AUTOMATIC1111)がどのような動作するか実験します。

結論からいうと、グラボなしはStable Diffusionは下記エラーで起動しませんでした。
PythonスクリプトがGPUを使用できないために発生したエラーとなります。

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
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: 0.15s

Torch active/reserved: 2966/2990 MiB, Sys VRAM: 4040/6144 MiB (65.76%)

 

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)は最低限マザーボードとグラボの買い替えが必要だったため断念しました。

是非色々試してみてくださいね!