問題の概要:FLUXモデル使用時のメモリ不足エラー
ComfyUIで次世代の高品質画像生成モデルとして注目を集めているFLUX.1-devやFLUX.1-schnellを使用する際、多くのユーザーがメモリ不足(Out of Memory, OOM)エラーに遭遇します。特に、8GBや12GB VRAMの一般的なGPU環境では、高解像度の画像生成やバッチ処理が困難です。
具体的には、以下のようなエラーメッセージがComfyUIのターミナルやUI上に表示されます。
RuntimeError: CUDA out of memory. Tried to allocate 2.34 GiB (GPU 0; 11.00 GiB total capacity; 7.21 GiB already allocated; 1.45 GiB free; 9.12 GiB reserved in total by PyTorch)
OutOfMemoryError: CUDA error: out of memory
このエラーが発生すると、画像生成プロセスが強制終了し、「Queue Prompt」が実行されなくなります。FLUXモデルはその高い表現力の代償として、Stable Diffusion XL(SDXL)などと比較しても多くのVRAMを消費するため、適切な最適化が必須となります。
原因の解説:なぜFLUXモデルはメモリを大量消費するのか?
FLUXモデルが大量のVRAMを必要とする主な原因は、そのアーキテクチャと高精度な推論にあります。
1. 大規模なモデルパラメータ
FLUX.1-devは約12B(120億)パラメータを持つ大規模モデルです。これはSDXL(約6.6Bパラメータ)の約2倍、SD 1.5(約0.86Bパラメータ)の約14倍に相当します。モデルをGPUメモリにロードするだけで、膨大なVRAMを消費します。
2. 高解像度推論のための中間特徴量
FLUXはデフォルトで1024×1024ピクセルなどの高解像度画像を生成することを前提としています。推論プロセス中、中間層で生成される特徴量マップ(feature maps)のサイズが非常に大きくなり、これがVRAM使用量を急増させます。
3. アテンション機構のメモリ使用量
Transformerベースのアーキテクチャを採用するFLUXモデルは、自己注意機構(Self-Attention)の計算において、シーケンス長の二乗に比例するメモリを必要とします。高解像度画像は長いシーケンスとして扱われるため、メモリ消費が指数的に増加します。
4. ComfyUIのノード実行によるオーバーヘッド
ComfyUIはノードベースのワークフローを逐次実行するため、複数のノードが同時にメモリ上にデータを保持することがあります。最適化されていないワークフローでは、不要な中間データがメモリを圧迫します。
解決方法:ステップバイステップでのメモリ最適化
以下に、ハードウェアをアップグレードすることなく、ソフトウェア的な設定とワークフロー最適化でVRAM使用量を削減する方法を紹介します。
ステップ1:ComfyUIマネージャーによる最適化ノードの導入
まず、ComfyUIの拡張機能「ComfyUI Manager」から、メモリ最適化に役立つカスタムノードをインストールします。
# ComfyUIのルートディレクトリで実行
cd custom_nodes
git clone https://github.com/pythongosssss/ComfyUI-Custom-Scripts.git
インストール後、ComfyUIを再起動すると、「efficiency」や「memory」関連のノードが利用可能になります。
ステップ2:VRAMセーバーモードの有効化(–lowvramオプション)
ComfyUIの起動オプションでVRAMセーバーモードを指定します。これは最も簡単で効果的な方法の一つです。
# Windows (run_cpu.bat または run_nvidia_gpu.bat を編集)
python main.py --lowvram
# Linux/macOS
python3 main.py --lowvram
このオプションは、モデルのレイヤーを逐次GPUにロード/アンロードするようにし、ピークメモリ使用量を大幅に削減します。ただし、推論速度が低下するトレードオフがあります。
ステップ3:FLUX専用の軽量版モデルを使用する
Black-forest-Labsからは、メモリ使用量を抑えた軽量版モデルが提供されています。
- FLUX.1-schnell: 推論速度を優先したバージョン(VRAM使用量もやや低減)
- FLUX.1-dev 8bit: 8ビット量子化されたバージョン(VRAM使用量が大幅削減)
これらのモデルは、Hugging FaceやCivitaiからダウンロードし、`ComfyUI/models/flux/`ディレクトリに配置します。
ステップ4:ワークフロー内でのメモリ最適化設定
ComfyUIのワークフロー(JSON)内で、特定のノードにメモリ最適化の設定を追加します。
// KSampler (FLUX) ノードの設定例
{
"inputs": {
"model": ["4", 0],
"seed": 123456,
"steps": 30,
"cfg": 7.5,
"sampler_name": "dpmpp_2m",
"scheduler": "karras",
// メモリ最適化のための追加設定
"denoise": 1,
"use_tiled_vae": true, // タイルドVAEデコードを有効化(高解像度時)
"tile_size": 512 // タイルサイズを指定
},
"class_type": "KSampler"
}
「Use tiled VAE decode」オプションを有効にすると、高解像度画像のデコードを小さなタイルに分割して行うため、VRAMのピーク使用量を抑えられます。
ステップ5:バッチサイズと解像度の調整
FLUXモデルを使用する際の推奨設定は以下の通りです。
- 初期設定: 解像度 1024×1024、バッチサイズ 1
- VRAM 8GB環境: 解像度 768×768 または 896×896 にダウンスケール
- VRAM 12GB環境: 解像度 1024×1024は可能だが、バッチサイズは1に固定
- バッチ生成: 複数枚生成する場合は「Empty Latent Image」のバッチサイズではなく、複数回のキュー実行を推奨
ステップ6:WindowsのGPUメモリ設定(Windowsユーザー向け)
Windowsでは、GPUメモリの予約方法がLinuxと異なります。以下の設定を調整することで、利用可能なVRAMを増やせます。
# 環境変数の設定(コマンドプロンプトで実行、またはシステムプロパティで設定)
set PYTORCH_CUDA_ALLOC_CONF=garbage_collection_threshold:0.6,max_split_size_mb:128
set XFORMERS_FORCE_DISABLE_TRITON=1
また、NVIDIAコントロールパネルで「テクスチャフィルタリング – 品質」を「高性能」に設定すると、VRAMの一部を解放できる場合があります。
コード例・コマンド例
最適化された起動スクリプトの例(run_flux_optimized.bat)
@echo off
cd /d "C:ComfyUI_windows_portableComfyUI"
set PYTHON=
set VENV_DIR=
set PYTORCH_CUDA_ALLOC_CONF=garbage_collection_threshold:0.6,max_split_size_mb:128
set XFORMERS_FORCE_DISABLE_TRITON=1
python main.py --lowvram --auto-launch --listen 0.0.0.0 --port 8188
pause
メモリ使用量を監視するための簡単なPythonスクリプト
import torch
import pynvml
def print_gpu_memory():
pynvml.nvmlInit()
handle = pynvml.nvmlDeviceGetHandleByIndex(0)
info = pynvml.nvmlDeviceGetMemoryInfo(handle)
print(f"GPU Memory Total: {info.total / 1024**3:.2f} GB")
print(f"GPU Memory Used: {info.used / 1024**3:.2f} GB")
print(f"GPU Memory Free: {info.free / 1024**3:.2f} GB")
# PyTorchのキャッシュメモリも表示
print(f"PyTorch Allocated: {torch.cuda.memory_allocated() / 1024**3:.2f} GB")
print(f"PyTorch Cached: {torch.cuda.memory_reserved() / 1024**3:.2f} GB")
# ワークフローの実行前後にこの関数を呼び出してメモリ使用量を比較
print_gpu_memory()
まとめ・補足情報
ComfyUIでFLUXモデルを安定して使用するためには、単一の解決策ではなく、多層的なメモリ最適化アプローチが効果的です。重要なポイントを以下にまとめます。
- 最初に「–lowvram」オプションを試す: 最も手軽で効果が高い方法です。
- モデル選択を見直す: タスクに応じてFLUX.1-schnellや8bit量子化版の使用を検討します。
- 解像度を現実的に設定する: GPU VRAM容量に合わせた解像度設定が基本です。
- ワークフローを最適化する:「タイルドVAE」や「メモリ効率の良いサンプラー」の利用を検討します。
- システム設定を調整する: 特にWindows環境では、環境変数による調整が有効です。
補足情報として、将来的なアップデートに期待できる点もあります。ComfyUIコミュニティでは、FLUXモデル専用のさらなる最適化ノードの開発が進んでいます。また、PyTorch 2.x以降の機能(`torch.compile`による最適化、より効率的なアテンション実装)を活用した高速化・省メモリ化も期待できます。
最後に、どうしてもVRAMが不足する場合は、Google Colab Pro(A100 GPU)や、クラウドGPUサービス(RunPod, Vast.aiなど)を利用する方法も現実的な選択肢となります。これらの環境では、大容量VRAMを比較的安価に利用できるため、高解像度・バッチ処理を必要とする本格的なFLUXモデルの使用に適しています。