Stable Diffusionで画像生成していて、メモリーが足りないとき発生するのがGPUメモリ不足(RuntimeError: CUDA out of memory)です。
知人の少し古いWindowsマシンで大きめな画像生成にチャレンジ中に発生しました。
エンジニアさんのマターなので正直対策はプロにまかせるのが正解ですが、解決した際のメモを残します。
メモリ不足が発生する原因とは
GPUメモリ不足(RuntimeError: CUDA out of memory)とはこのようなエラーです。
RuntimeError: CUDA out of memory. Tried to allocate 20.00 MiB (GPU 0; 4.00 GiB total capacity; 3.42 GiB already allocated; 0 bytes free; 3.48 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_CONF
画像生成AIStable Diffusionを使いこなす時必要なのが、高速なグラフィックボードと大容量のVRAMです。
メモリーはあればあるだけよく、実用的に動かすためには8GBは最低必要なので注意しましょう。
生成する画像サイズが大きすぎたり、プロンプトが長すぎたり、搭載しているGPUが非力すぎたりすると発生しやすくなります。
解決策
解決策のヒントは次の通り
- システムを再起動する
- 軽量版のbasujindal/stable-diffusionを使う
- Nvidia CUDA Toolkit と一緒に Anaconda をインストールする
- Stable Diffusion の最適化されたバージョンを使用する
- Stable Diffusion フォルダー内の webui.bat ファイルをテキストで開き、冒頭に以下を追記した上でアプリをコマンドで立ち上げ直す
- Stable Diffusion の最適化されたバージョンを使用する
- Stable Diffusion フォルダー内の webui.bat ファイルをテキストで開き、冒頭に以下を追記した上でアプリをコマンドで立ち上げ直す
以上の対応策を見つけました。
set PYTORCH_CUDA_ALLOC_CONF=garbage_collection_threshold:0.6, max_split_size_mb:128
※webui-user.batと混同しないように注意。
Optimizations · AUTOMATIC1111/stable-diffusion-webui Wiki · GitHub
そのほかの対処法
1. 解像度を下げる
• 画像生成時の解像度が高いほどメモリ使用量が増加します。
• 解像度を低く設定(例: 512×512に変更)して試してみてください。
2. バッチサイズを減らす
• 一度に生成する画像の数(バッチサイズ)を減らすことで、必要なメモリ量を削減できます。
• コマンドラインやGUIの設定でバッチサイズを1に設定してください。
3. Precisionを「fp16」に変更
• モデルの計算精度を「float16(fp16)」に変更すると、メモリ使用量を削減できます。
• この設定は通常、Stable Diffusionの構成ファイルか起動スクリプトで行えます。
4. VRAM節約モードを有効にする
• Stable Diffusionの実行時に「低VRAMモード」や「–medvram」オプションを使用します。
• 極限までメモリを削減したい場合は「–lowvram」オプションも有効です。
5. 不要なプログラムを終了
• GPUメモリを消費している他のアプリケーション(例: Chrome、ゲームなど)を終了させると、使用可能なVRAMが増えます。
6. Swap領域の活用(代替案)
• CPUのRAMや仮想メモリを使用してGPUメモリ不足を補う方法です。
• 遅くなりますが、「xformers」や「DeepSpeed」ライブラリを利用することで効率化できます。
7. GPUメモリを解放
• 実行中にメモリが解放されない場合、以下を試してください:
1. Pythonスクリプトを終了し再起動。
2. 「nvidia-smi」コマンドでメモリ使用量を確認し、不要なプロセスを終了。
8. 高VRAMのGPUを使用する
• 使用しているGPUのVRAM容量が4GB未満の場合、特に高解像度や複雑なモデルで問題が発生しやすいです。可能ならVRAM容量が8GB以上のGPUに切り替えを検討してください。
9. モデルの圧縮または最適化
• モデルを最適化する方法として「xformers」を導入すると計算効率が改善されます。
• また、軽量化したモデル(例: pruned weights)を使用すると、メモリ消費が抑えられます。
10. ハードウェアを確認
• 安定性が必要な場合、ドライバやCUDA Toolkitのバージョンが適切か確認してください。古いバージョンや互換性のないものはエラーの原因になります。
Stable Diffusion runtime error – how to fix CUDA out of memory error
まとめ
初心者がStable Diffusionを使っていて CUDA out of memoryの発生を予防するには
- なるべく最新のPCを使う
- Stable Diffusionも最新のものを使う
- グラボのメモリーは最低8GBは用意する
などの対策を取りましょう。
こんにちは、フルタニです。放送局で番組作りをしてました。CUDA out of memory を書きます。