Stable Diffusionでエラーになっちゃった😰
簡単なメモリ不足対策で改善できる可能性があります💡
Stable Diffusion WebUIで画像生成を楽しんでいたら、突然こんなエラーになってしまったことはありませんか?
OutOfMemoryError: CUDA out of memory. …
これは、「画像生成に必要なGPUのメモリ(VRAM)が不足している」ことが原因です。
大きなサイズの画像を生成しようとしたり、一度に複数枚の画像を生成しようとしたりするときに起こるケースがほとんどです。
こちらの記事で、GPUは「絵を描く職人」、メモリ(VRAM)は「作業机」と例えました。その例で言うと、メモリ不足のエラーは「作業机の上にバカでかい紙を広げようとして怒られた状態」と考えるとわかりやすいです。
対策の方向性は大きく2つあります。
- 大きな作業机を買う(=大きなVRAMのGPUに買い替える)
- 作業机を整理してうまくやり繰りする(=メモリ使用を効率化する)
GPUを買い替えるのはちょっとお金が…
GPUは安い買い物ではないので、気軽に買い替えるのは難しいですよね。
まずは、この記事で解説する「メモリ使用を効率化する」方法を試してみましょう。それだけでエラーが改善できる可能性があります。
また、メモリ不足エラーが起きていない人でも対策しておくと、より効率的に画像生成することができるようになる可能性もあります。
メモリ不足対策のメリット
まず、メモリ不足の対策を行うことで得られるメリットについて知っておきましょう。
もちろんメモリ不足のエラーが解消される可能性が高くなるということなのですが、それによって次のようなメリットを得ることができます。
- 大きな画像を生成できるようになる
- 一度にたくさんの画像を生成できるようになる
- 画像の生成速度が早くなる
大きな画像を生成できるようになる
大きなサイズの画像を生成するほど、メモリの消費量は大きくなります。そして、限界値を超えると、エラーになってしまいます。
よって、対策によってメモリ消費を抑えることができれば、より大きなサイズの画像を生成できるようになります。
一度にたくさんの画像を生成できるようになる
Stable Diffusionでは「Batch size」や「Batch count」の指定によって、一度に生成する画像の枚数を増やすことができます。しかし、数を増やすとその分メモリの消費量が増えます。
対策によって、メモリの消費量を抑えられれば、一度に生成できる画像の枚数を増やすことができます。よって、より効率的にStable Diffusionで画像生成できるようになります。
画像の生成速度が早くなる
本記事で紹介するメモリ不足対策には、生成速度が向上する対策も含まれます。よって、メモリ不足対策の副次的効果として、画像生成が早くなる可能性があります。
メモリ不足の対策
Stable Diffusion WebUI(AUTOMATIC1111)で発生するメモリ不足の対策については、公式ページで情報があります。
この記事では実際に私が対策して効果が確認できたものについて、おすすめ順に解説します。
上から順番に対策してみてくださいね
対策の概要
ここで解説する対策では、Stable Diffusionを起動するときに実行する「webui-user.bat」というファイルの中身を修正します。
ちょっと不安だなぁ…難しくない?
「メモ帳」で中身を少し書き足すだけなので大丈夫です😊
まず、「webui-user.bat」というファイルが一体何なのかを少し説明します。
「webui-user.bat」のように「.bat」という拡張子のファイルは、一般に「バッチファイル」と呼ばれています。これはWindowsに実行させたい命令(=コマンド)を列挙したファイルのことで、このファイルを実行すると中に書かれている命令が順番に実行されています。
このバッチファイルの中身は単なるテキストファイルです。なので、メモ帳などのテキストエディタで編集することができます。
「webui-user.bat」の中身はこんな風になっています。
この中を書き足すことでStable Diffusionを実行するときの「オプション」を設定できます。
今回の対策は、「Stable Diffusionを起動するときにメモリを効率的に使うためのオプションをwebui-user.batに設定する」という対策になります。
バッチファイルの編集方法は後ほどきちんと解説します✨
それでは、実際の対策について順番に見ていきましょう。
対策1:【NVIDIA社GPUの場合】–xformers オプション
PCのGPUが「NVIDIA社」製の場合には、まずこの「–xformers 」オプションをオススメします。
公式ページにも説明があるように、メモリ消費量も生成速度も大きく改善します。
…私のPCのGPUってNVIDIAだっけ…?
まずは下記の方法でPCのGPUを確認してみましょう
タスクバーの「検索」で「dxdiag」と入力します。すると、dxdiagが検索結果として表示されるので、これをクリックします。
DirectX診断ツールが起動するので、「ディスプレイ」タブをクリックします。
すると、GPUの種類が確認できます。
製造元や名前を見れば「NVIDIA」製かわかります。また、この画面で「VRAM容量」も確認できるので、一応確認しておきましょう。
では、webui-user.batを編集して「–xformers 」オプションを設定しましょう。
作業を行う前に、いまStable Diffusion WebUIを実行している場合は一旦終了させてください。
1. webui-user.batのバックアップ
「webui-user.bat」はStable Diffusionのフォルダ直下にあります。
このファイルを編集する前に、念のためバックアップを取っておきましょう。
webui-user.batをコピー&ペーストで複製します。
「webui-user – コピー.bat」のようなファイルができると思うので、好きな名前を付きておきましょう。たとえば「webui-user_バックアップ.bat」のような感じです。
こうしておけば、もしこの後にwebui-user.batの編集を間違えてStable Diffusionが起動できなくなってしまっても、バックアップしたファイルの名前を「webui-user.bat」に戻せば元に戻せます😊
こうしておけば安心✨
2. webui-user.batの編集
さて、webui-user.batのバックアップを取ったら、いよいよwebui-user.batの中身を編集していきます。
テキストエディタなら何でも構いませんが、たとえば「メモ帳」を開いて、そこに「webui-user.bat」をドラッグ&ドロップしてみましょう。中身を開くことができます。
これが、「webui-user.bat」の中身です。
この中の「set COMMANDLINE_ARGS=」の後に続けて「オプション」を書き込めばOKです。
「–xformers」と書き込みましょう。
set COMMANDLINE_ARGS=--xformers
これで「ファイルを上書き保存」すればOKです。
対策の効果
あとは、今まで通り「webui-user.bat」を実行して、Stable Diffusion WebUIを起動すればOKです。本対策により、「メモリの使用量」と「画像の生成時間」が改善されるはずです。
ご参考までに、私の環境で比較した結果をお見せします。
私の場合、img2imgで大きな画像を生成しようとするとメモリ不足エラーになることが多かったので、「1024×1024の画像をimg2imgで生成」するときのパフォーマンスを比較します。
大幅に改善されてるね!
対策1’:【NVIDIA社以外のGPUの場合】–opt-sub-quad-attentionオプション
NVIDIAでないGPU(AMDやIntel)の場合は、前述の「–xformers」オプションは使えません。
その代わりに、「–opt-sub-quad-attention」というオプションを付けると、メモリ消費量を削減できる可能性があります。ただし、生成速度が低下する可能性が高いので、その点は留意してください。
webui-user.batの編集
webui-user.batは初めて編集する前に、前述したように念のためバックアップを取っておいてください。
テキストエディタ(「メモ帳」など)でwebui-user.batを開いて、中身を編集していきます。
この中の「set COMMANDLINE_ARGS=」の後に続けて「–opt-sub-quad-attention」と書き込めばOKです。
set COMMANDLINE_ARGS=--opt-sub-quad-attention
ファイルを上書き保存して閉じましょう。
対策の効果
今まで通り「webui-user.bat」を実行して、Stable Diffusion WebUIを起動すればOKです。
ご参考までに、私の環境で比較した結果をお見せします。
メモリ使用量は削減されていますが、生成時間はかなり伸びてしまっていますね。
「生成時間」を犠牲にしたくないなら、この対策はしなくていいと思います。
対策2:–medvram オプション
次の対策はwebui-user.batに「–medvram」オプションをつける方法です。Stable Diffusionの処理を分割することで、メモリの消費量を削減します。
なお、処理を分割したことによってメモリの消費量は削減できるのですが、生成速度が低下する傾向にあります。
webui-user.batの編集
webui-user.batをテキストエディタで編集していきます。
「set COMMANDLINE_ARGS=」の後に続けて「–medvram」と書き込みます。
set COMMANDLINE_ARGS=--medvram
オプションは複数個を「半角スペース」で区切ることで指定できます。
たとえば、「–xformers」オプションを付けている場合には、–xformers の後に半角スペースを打って、そのあとに–medvramと書きます。
set COMMANDLINE_ARGS=--xformers --medvram
編集したらファイルを上書き保存して閉じましょう。
対策の効果
「xformersオプションのみ」と「xformersとmedvramを併用」したときの結果です。
「xformersとmedvramを併用」すると、「xformersオプションのみ」よりもメモリの消費量は減りますが、生成時間は若干伸びます。
メモリ使用量と生成時間のバランスを見て、medvramオプションをつけるかどうか判断してください。
ちなみに私は「xformersとmedvramの併用派」です
メモリ不足の対策(その他)
その他のアプリケーションを閉じる
アプリケーションをたくさん起動していると、それだけでメモリをかなり消費している可能性もあります。余計なアプリケーションを閉じると、エラーが改善される可能性もあります。
「タスクマネージャー」を開くとメモリをどれくらい消費しているかわかるので参考にしてみてください。
画面下のスタートボタンを右クリックして「タスクマネージャー」をクリックします。もしくは、キーボードの【Ctrl】+【Alt】+【Delete】を同時に押して、「タスクマネージャー」を選択します。
まとめ
次の対策でメモリ不足エラーを改善できる可能性があります。
ただし、メモリ消費が削減できる分、生成時間が伸びる可能性があるので、注意してください。生成時間を犠牲にしたくないなら、多少のメモリ不足に目をつむるという選択もアリです。
どうしてもメモリ不足エラーが解決しないなら…
ここで解説した対策を行ってもメモリ不足エラーが解決しない場合、GPUのVRAMが小さすぎるのかもしれません。
Stable Diffusion WebUIは最低4GBのVRAMがあれば動作する仕様らしいのですが、少なくとも8GB、できれば12GBのVRAMは欲しいところです。
もし予算があるようであれば、この機会にグラフィックボートを買い替えるという選択も良いのかもしれません。
私のオススメは「NVIDIA GeForce RTX3060 12G」です。VRAMは安心の12GBで、しかもコストパフォマンスに優れた逸品です。
私も使ってます✨
Stable Diffusionのためのパソコンやグラフィックボード選びについては、こちらの記事で詳しく解説していますのでよければ参考にしてみてください。
コメント