画像生成AIStable Diffusionで CUDA out of memory メモリ不足が発生した際の対策メモ

フルタニ

こんにちは、フルタニです。放送局で番組作りをしてました。CUDA out of memory を書きます。

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 の最適化されたバージョンを使用する
  • 解像度を下げて画像を生成する(512 x 512 または 256 x 256 を使用してみる)
  • 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

そのほかの対処法

Stable Diffusion runtime error – how to fix CUDA out of memory error

まとめ

初心者がStable Diffusionを使っていて CUDA out of memoryの発生を予防するには

  • なるべく最新のPCを使う
  • Stable Diffusionも最新のものを使う
  • グラボのメモリーは最低8GBは用意する

などの対策を取りましょう。