dskjal
広告
広告

ComfyUI で使える高速化・VRAM 技術

カテゴリ:deeplearning

ComfyUI は PyTorch attention = FlashAttention がデフォルトで使われるので、それは記載していない。昔は xformers(中身は FlashAttention)も使われていたが、最近では PyTorch attention を使うことが多い。

ComfyUI のオプションは comfy/cli_args.py を見るのが早い。

目次

ComfyUI のメモリ管理

モデルを VRAM に移動しても RAM 上のモデルは解放されないことに注意

ComfyUI のデフォルト挙動

ComfyUI はワークフローで使うモデルをすべて RAM にロードし、実行中はアンロードできない。Wan 2.2 を fp16 で実行する場合、最低 68.4 GB の RAM が必要になる。

モデルサイズ(GB)
umt5_xxl_fp89.0
wan2.2_vae1.4
high-fp1629.0
low-fp1629.0

モデルと VRAM

画像生成モデルの場合、モデルサイズ ≒ VRAM 使用量だが、動画生成モデルでは違う。

動画生成モデルは生成途中の動画データも数 GB の VRAM を使用するので、モデルサイズだけで VRAM が足りるかどうかを判定できない。

RTX 5090 は VRAM 32 GB で Wan 2.2 fp16 は 29 GB なので、モデルがすべて VRAM に乗ると考えがちだが、生成動画分の VRAM と OS 管理分とが必要なので足りない。

VRAM

GGUF

GGUF はモデル量子化技術。VRAM にモデルが乗らなくても RAM にブロックを退避して実行可能。

Block Swap

モデルの一部を RAM に退避して実行できる。

ComfyUI-MultiGPU DisTorch 2.0

複数 GPU の VRAM と RAM とに好きなようにブロックを割り付けできる

pinned-memory

RAM に確保したモデルがページングされなくなる。ページングとは RAM も VRAM も不足した場合、OS が SSD や HDD を使って処理を継続する機能。pinned-memory はこれを無効化する。

つまり pinned-memory が有効な状態で RAM も VRAM も不足すると OOM が発生する。

pinned-memory を無効にするには --disable-pinned-memory オプションをつけて ComfyUI を起動する。

python main.py --disable-pinned-memory

reserve-vram

OS が利用する VRAM 量を指定する。Kijai は --reserve-varm 2 を指定することを推奨している。

最新の ComfyUI は自動で VRAM と RAM とにモデルを割り振る。しかし、OS が VRAM を使用して VRAM が不足すると共有 VRAM が使用され、生成速度が劇的に低下する。reserve-vram はこれを回避できる。

当然 ComfyUI が使用できる VRAM 量が減少するため生成速度は低下する可能性が高い。

python main.py --reserve-varm 2

highvram

ComfyUI はノード実行後、モデルを RAM へ退避する。highvram を指定するとモデルを RAM へ退避しなくなる。

python main.py --highvram

量子化

量子化はモデルの表現ビット数を減らしてモデルサイズを減らす。VRAM 速度がボトルネックの場合は推論速度も上がる。LLM では量子化で推論速度も上がるが、画像・動画生成 AI では推論速度は上がらない傾向にある。

手法説明
GGUF拡張子が GGUF のモデル。VRAM にモデルが乗らなくても RAM にブロックを退避して実行可能
fp8RTX 4000 番台以降ではハードウェアで高速に実行できる
SVDQuantモデルを外れ値とそうでない部分とに分けて量子化する手法。nuncyaku という名前で呼ばれている
TensorRT量子化+生成解像度指定等の最適化で効率的に実行できるようにモデルを変換して高速化する

8 bit 量子化比較

fp8 はRTX 4000 番台以降での評価。fp8_scaled は高品質かつ高速なのでベストな選択。

手法品質推論速度
Q8_0fp16 に匹敵遅い
fp8_scaledQ8_0 に匹敵速い
fp8Q5_K_M や Q6_K_M 相当速い

蒸留

モデルファイル名に 4step や 8step が入っていると蒸留モデルの可能性が高い。最近は LoRA 形式で配布されることが多い。

torch.compile

モデルをネイティブコードに変換して高速化する。SageAttention と同時に使われることが多い。

triton

モデルのコードをカスタム GPU カーネルに変換するライブラリ。SageAttention と同時に使われることが多い。

Windows 用バイナリも増えてきて簡単にインストールできるようになった。

pip install -U 'triton-windows<3.3'

SageAttention

アテンションの計算に SageAttention を使うことで高速化する。SDXL は U-Net を使用しており、アテンションはプロンプトの取り込み部分にしか使われていないので、SDXL は SageAttention を使ってもほとんど高速化しない。

SDXL 以降の画像生成・動画生成 AI は拡散トランスフォーマーなので SageAttention で高速化できる。

TeaCache

「モデルに入力するノイズ画像 - デノイズ後の画像」の差分ベクトルはステップ中盤以降はほとんど変化しないことが多い。なのでこの差分ベクトルをキャッシュして使いまわしてデノイズすることで、推論を丸ごとスキップして高速化する。


広告
広告

カテゴリ