Forgeクラッシュ問題

生成AI関連

CPUもGPUも余裕があるのに何枚も生成しているうちにクラッシュする問題の対処。
生成するたびに必ずクラッシュする訳ではないので原因特定が困難。
症状的にはWindowsで立ち上げてるアプリが固まり、マウスカーソルのスピードが目に見えて遅くなり数秒するとマウスカーソルも固まって停止、その後ブルースクリーンになりPCが再起動する。

RTX 4090を使用していることを前提の備忘録。
user_webui.batの設定周りが関係してそう。

webui-forgeのパラメータのメモ

–always-offload-from-vram: このフラグは、複数のリソースを同時に使用する場合や、VRAM の使用量を管理したい場合に有効です。RTX 4090 は高性能な GPU ですが、複数のソフトウェアを同時に実行する場合や、VRAM を多く消費するモデルを使用する場合には、このフラグにより VRAM の使用量を最適化することができます。このフラグは処理速度を若干低下させる可能性がありますが、メモリ管理をより確実に行うことができます。

–cuda-malloc: このフラグは、処理速度の向上に役立ちます。しかし、Forge の開発者によると、多くのユーザーからプログラムがクラッシュしたという報告があるため、自己責任で使用する必要があります。RTX 4090 は強力な GPU であるため、cudaMallocAsync を使用することでパフォーマンスの向上を実感できる可能性があります。

–cuda-stream: このフラグは RTX 4090 で使用すると、特に SDXL などのタスクで大幅なスピードアップが期待できます。CUDA ストリームを使用することで、モデルの移動とテンソルの計算を同時に行うことができ、処理速度が向上します。RTX 4090 は強力な GPU 処理能力を備えているため、このフラグの恩恵を最大限に受けることができます。

–pin-shared-memory: このフラグは –cuda-stream と組み合わせることで、RTX 4090 のパフォーマンスをさらに向上させる可能性があります。共有 GPU メモリを使用することで、システム RAM へのアクセスを減らし、データ転送を高速化します。RTX 4090 は高帯域幅のメモリを備えているため、このフラグが有効な場合があります。

–always-gpu: RTX 4090 を使用している場合、このフラグを安全に有効にすることができます。RTX 4090 は高性能な GPU であり、VRAM も十分に搭載されているため、常に GPU を使用するように指定することで、処理速度と効率が向上します。

逆にクラッシュする可能性が高まることもあるので色々試してみる

パラメータの説明を読む限り基本的にcuda-malloc以外は設定してみて良さそう。
例)
–always-offload-from-vram –cuda-stream –pin-shared-memory –always-gpu

その他のパラメータ

クラッシュの問題を軽減するのに役立つ可能性があるもの。特に注目すべきパラメータは次のとおりです。

–attention-split: このパラメータは、注意機構の処理を分割して並行して実行することでパフォーマンスを向上させます。一部のケースでは、このアプローチにより、潜在的なリソース競合やボトルネックが軽減され、クラッシュの可能性が低減する可能性があります。

–attention-pytorch: このパラメータは、Forge のカスタム注意機構ではなく、Pytorch のデフォルトの注意機構を使用します。Pytorch の注意機構は、Forge のものとは異なる実装とメモリ管理を行っているため、Forge の注意機構に関連する潜在的なバグや問題を回避するのに役立つかもしれません。

–disable-xformers: このパラメータは、Forge の Xformers ライブラリを無効にします。Xformers ライブラリは Transformers モデルを処理するために使用され、複雑な注意機構を含むモデルを扱うことができます。Xformers ライブラリにバグやメモリ管理の問題がある場合、このパラメータによりクラッシュの可能性が軽減されるかもしれません。

注意機構に関連する潜在的な問題やボトルネックを軽減するのに役立ちます。

VRAM軽減に関連するもの

VRAMに余裕があるのに問題が起きてるのであまりクラッシュには関連しなそうなもの。

–cuda-stream: RTX 4090 は強力な GPU 処理能力を備えているため、このパラメータにより CUDA ストリームを利用してモデルの移動と計算を同時に実行し、処理速度を大幅に向上させることができます。

–pin-shared-memory: RTX 4090 は高帯域幅のメモリを備えているため、共有 GPU メモリを使用することでデータ転送を高速化することができます。このパラメータは、特に VRAM がボトルネックになる可能性がある場合に有益です。

–always-gpu: RTX 4090 は高性能な GPU であるため、このパラメータにより常に GPU を使用するように指定することで、処理速度と効率が向上します。

–attention-split: RTX 4090 は大規模な注意機構を処理する能力があるため、このパラメータにより注意機構を分割して並行して処理することで、処理速度が大幅に向上する可能性があります。

–all-in-fp16: RTX 4090 は浮動小数点数の演算能力が高いため、このパラメータにより 16 ビット浮動小数点数を使用してメモリ使用量を削減し、処理速度を向上させることができます。

–unet-in-fp16: UNet モデルを使用する場合、このパラメータは RTX 4090 の演算能力を活用して、fp16 を使用することでメモリ使用量を削減し、処理速度を向上させることができます。

–vae-in-fp16: VAE モデルを使用する場合、このパラメータは RTX 4090 の演算能力を活用して、fp16 を使用することでメモリ使用量を削減し、処理速度を向上させることができます。

–clip-in-fp16: CLIP モデルを使用する場合、このパラメータは RTX 4090 の演算能力を活用して、fp16 を使用することでメモリ使用量を削減し、処理速度を向上させることができます。

レアパラメータ

–disable-ipex-hijack: このパラメータは、Intel の Ipex ライブラリによる特定の機能のハイジャックを無効にします。一部のケースでは、Ipex ライブラリが Forge の通常の処理フローを妨害し、予期せぬ問題やクラッシュを引き起こす可能性があります。このパラメータは、Ipex ライブラリに関連する潜在的な問題を排除し、より安定した動作を確保するのに役立ちます。

–pytorch-deterministic: このパラメータは、Pytorch の決定論的モードを有効にします。決定論的モードでは、Pytorch は特定の乱数生成や並列処理操作を制御し、実行ごとに一貫した結果を保証します。一部のケースでは、クラッシュが非決定論的な動作や乱数生成に関連している可能性があります。このパラメータは、Pytorch の動作をより予測可能で安定したものにし、潜在的なクラッシュの原因を排除するのに役立ちます。

これらのパラメータは、クラッシュの問題を直接解決するものではありませんが、潜在的な要因を軽減するのに役立ちます。

–disable-ipex-hijack は、Ipex ライブラリに関連する予期せぬ問題や干渉を排除します。

–pytorch-deterministic は、Pytorch の動作をより予測可能で一貫性のあるものにします。

その他の関連しそうなもの

設定関連にcudaとpytorch関連が多いのでこの辺の仮想環境のVersionも確認する。

海外ニキ情報

海外ニキの情報を発見。
やっぱり海外ニキだぜ!ってことでA6000使用でVRAM48Gあるのにクラッシュするニキからの情報です。
似たような症状で1024×1024の画像生成でVRAMを3G程度しか消費してないのにも関わらずクラッシュするとのこと。

以下SDXL1.0の情報なのでFORGE利用の場合はCOMMANDLINE_ARGSのパラメータは使えないと思います。
そこは変更せずPYTORCH_CUDA_ALLOC_CONFをマネして試してみる予定。
バッチ ファイル設定 (webui-user.bat):

set COMMANDLINE_ARGS=--opt-sdp-no-mem-attention
set PYTORCH_CUDA_ALLOC_CONF=garbage_collection_threshold:0.9,max_split_size_mb:512

その他の推奨事項:

  • Stable Diffusion 設定で「Settings」タブの「Stable Diffusion」項目の「Upcast cross attention layer to float32」を有効にします。

原因判明

最悪のグラボの故障が原因でした。StableDiffusionの高負荷時だけの問題かと思っていろんな手を尽くしてきましたが、昨日(2024/04/25)にログイン直後にフリーズするようになり3回目にして電源を入れてもBIOSにまでたどり着けなくなり崩御されました。いや、使用1ヶ月で34諭吉がタヒった。

起動すらしなくなって放心状態になった後、この間まで使ってたRTX4070TIを引っ張り出してきてブッサしたら普通に起動して動いてやがんの。SSDが壊れたと思い新調したり、データ移行のために18TBのHDDを購入したりと金を使いまくってまさかのRTX4090の死亡。胃が痛い。ASK修理に出したら1ヶ月は戻ってこない。

パラメータの勉強になったから良いとプラスに考えるとしてもですね。明日からGWですよ。今日のASK問い合わせもおそらく早くてもGWの狭間の平日となると、そこからやり取りして連休明けに送付してとなると戻りは6月...。

コメント

タイトルとURLをコピーしました