Extensions/u5 FreeVRAM - Memory Management
ComfyUI Extension

u5 FreeVRAM - Memory Management

ComfyUI Memory Management and VRAM Optimization Custom Node - Free VRAM with sequential model loading support

By u5dev·Created 10 months ago·Updated 10 months ago· 7
u5dev/comfyUI_u5_VramFREE
Nodes5
On cloudLocal install
Categoryu5
Stars7
Updated10 months ago
Readme

u5_FreeVRAM - ComfyUI Memory Management Node

ComfyUI向けの高度なメモリ管理・VRAM最適化カスタムノードです。 既存のメモリ開放系のカスタムノードがどうにもうまく動かないので、改めて作りました。

English | 中文

📋 目次


概要

u5_FreeVRAMは、ComfyUIワークフローにおけるメモリ管理を最適化し、限られたVRAMで複雑なワークフローを実現するためのカスタムノードパッケージです。

要するに、ワークフローの途中で任意にVRAMを開放したり、読み替えたりできるようにします。


主な用途

  • 複雑なワークフロー: 1ワークフロー内で複数種のモデルを順次実行(線画化→着色等)
  • バッチ処理: メモリリークの防止
  • SaaS環境: 共有GPU環境でのキャッシュクリア

機能

このcustom nodeには、主に2種類の機能があります。

1. FREE VRAM ノード

VRAMメモリのクリーンアップを提供します。

クリーンアップ処理:

  • モデルアンロード: ロード済みモデルをメモリから解放
  • GPUキャッシュクリア: CUDAキャッシュを空にしてVRAMを回復
  • 実行キャッシュクリア: ComfyUIの実行キャッシュをクリア
  • ガベージコレクション: Pythonの未使用オブジェクトを回収

スマート実行:

  • 閾値スキップ: 指定した空きVRAMがある場合は処理をスキップ
  • 非同期待機: 最適なメモリ解放タイミングを自動検出

2. Sequential Loaders

モデルの順次ロードを実現し、VRAM使用量を最適化します。

通常、モデル等のローダーは入力ソケットを持たず、ワークフローのど頭で並列実行されますが、 ワークフローの途中で差し込めるようにしました。

利用可能なローダー:

  • Sequential Checkpoint Loader: チェックポイントファイルの順次ロード
  • Sequential LoRA Loader: LoRAファイルの順次ロード
  • Sequential CLIP Loader: CLIPモデルの順次ロード(safetensors、全CLIPタイプ対応)
  • Sequential VAE Loader: VAEモデルの順次ロード(safetensors、TAESD対応) ※GGUF形式には対応していません(無理でした)

特徴:

  • ComfyUI標準機能のみ使用(外部依存なし)
  • trigger入力による実行順序の制御

インストール

  1. gitをcustom_nodeフォルダにCloneしてください。
git clone "https://github.com/u5dev/comfyUI_u5_VramFREE.git"
  1. ComfyUIを再起動してください。

基本的な使い方

ノードメニューのu5カテゴリにノードが表示されます。

FREE VRAM ノード

ワークフローの任意の位置に挿入してメモリをクリアします。

使用方法: alt text

# 中継ノードとして
[任意のノード] → [FREE VRAM] → [次のノード]

パラメータ:

  • Any (入力・オプション): 任意のデータ型を受け取るパススルー入力
    • 未接続でも動作: ワークフローの開始ノードとして配置可能
    • 接続時: 入力データをそのまま出力に中継
  • MinFreeVRAMGB (オプション): この値以上の空きVRAMがある場合はスキップ(デフォルト: 0.0) ※メモリの開放状況は非同期のラグがあるため、厳密ではありません。

出力:

  • Bypass(Relay): 入力データを中継(入力がない場合はNone)

Sequential Loaders

Sequential Loadersはtrigger入力を持ち、前のノードの完了を待ってからロードを開始します。 triggerに来たものは、そのままBypass(Relay)出力ソケットに渡されます。

使い方は、下記のワークフロー例を参考にしてください。


ベストプラクティス

1. SaaS環境でのキャッシュクリア

ユースケース: 共有GPU環境で、前のユーザーのキャッシュを確実にクリアする

alt text

[Start Workflow]
    ↓
[FREE VRAM (MinFreeVRAMGB=0.0)] ← 強制的にクリーンアップ
    ↓ trigger
[Sequential Checkpoint Loader] ← 解放後に読み込み
    ↓ (MODEL, CLIP, VAE)
[CLIP Text Encode (Prompt)]
    ↓ (CONDITIONING)
[KSampler]
    ↓ (LATENT)
[VAE Decode]
    ↓ (IMAGE)
[Save Image]

ポイント:

  • ワークフロー開始直後にFreeVRAMを配置
  • MinFreeVRAMGB=0.0で常にクリーンアップを強制
  • Sequential Loaderを使用して順序を保証

2. 低VRAM環境での複数モデル実行(8GB以下)

ユースケース: image2imageを2PassのSDXLで実行

alt text

1st Pass は下絵(img2imgの下地)を軽設定で生成してプレビュー。
2nd Pass は FreeVRAM のゲートを通してメモリを確保してから、
Checkpoint → LoRA → VAE を順次読み込み、本番設定で生成・保存。

ポイント: 共通:positive/negativeテキスト→CLIPエンコードし、両パスのサンプラーへ。

1st Pass:i2i用画像→1024x1024化→VAEエンコード→Kサンプラー(下絵生成)   ↓ 2nd Pass:latent(潜在)をFreeVRAM以降のトリガーに繋いで引き回す   ↓ Sequential Checkpoint Loader(清書用)   ↓ Sequential LoRA Loader(複数LoRA適用)   ↓ Kサンプラー(※latentをバイパスしてきて、Kサンプラーまで引き込む)   ↓ Sequential VAE Loader(清書用VAE)   ↓ VAEデコード   ↓ 画像を保存

※1stは当たり出し、2ndでLoRAと別VAEを順次ロードして仕上げ、メモリ圧をFree VRAMで制御します。


パラメータリファレンス

FREE VRAM ノード

| パラメータ | 型 | 必須 | デフォルト | 説明 | |-----------|-----|------|-----------|------| | Any | ANY | ✗ (オプション) | None | パススルー入力(任意のデータ型)、未接続でも動作 | | MinFreeVRAMGB | FLOAT | ✗ (オプション) | 0.0 | この値以上の空きVRAMがある場合はスキップ(GB) |

出力:

  • Bypass(Relay): 入力データをそのまま出力(入力なしの場合はNone)

v1.1での変更点:

  • Any入力がオプションになり、開始ノードとして使用可能

Sequential Checkpoint Loader

| パラメータ | 型 | デフォルト | 説明 | |-----------|-----|-----------|------| | ckpt_name | COMBO | - | チェックポイントファイル名 | | trigger | ANY | None | 実行順序制御用入力(オプション) |

出力:

  • MODEL, CLIP, VAE, Bypass(Relay)

Sequential CLIP Loader

| パラメータ | 型 | デフォルト | 説明 | |-----------|-----|-----------|------| | clip_name | COMBO | - | CLIPファイル名(.safetensors) | | type | COMBO | stable_diffusion | CLIPタイプ(stable_diffusion, qwen_image, etc.) | | trigger | ANY | None | 実行順序制御用入力(オプション) |

出力:

  • CLIP, Bypass(Relay)

対応CLIPタイプ:

  • stable_diffusion (SD 1.x/2.x)
  • stable_cascade (Stable Cascade)
  • sdxl (SDXL)
  • sd3 (SD3)
  • flux (Flux)
  • qwen_image (Qwen2-VL)
  • など

Sequential VAE Loader

| パラメータ | 型 | デフォルト | 説明 | |-----------|-----|-----------|------| | vae_name | COMBO | - | VAEファイル名(.safetensors/.pt)またはTAESD variant | | trigger | ANY | None | 実行順序制御用入力(オプション) |

出力:

  • VAE, Bypass(Relay)

対応VAE:

  • safetensors形式の標準VAE
  • TAESD variants: taesd, taesdxl, taesd3, taef1

Sequential LoRA Loader

| パラメータ | 型 | デフォルト | 説明 | |-----------|-----|-----------|------| | model | MODEL | - | 入力モデル | | clip | CLIP | - | 入力CLIP | | lora_name | COMBO | - | LoRAファイル名 | | strength_model | FLOAT | 1.0 | モデルへの適用強度 | | strength_clip | FLOAT | 1.0 | CLIPへの適用強度 | | trigger | ANY | None | 実行順序制御用入力(オプション) |

出力:

  • MODEL, CLIP, Bypass(Relay)

動作環境

必須要件

  • ComfyUI: 最新版推奨
  • Python: 3.8以上
  • PyTorch: ComfyUIに含まれるバージョン
  • GPU: CUDA対応推奨(CPU版でも動作)

オプション

  • psutil 5.8.0以上: システムメモリ情報の詳細表示
    pip install psutil
    

推奨環境

  • VRAM: ComfyUIでとりあえずKサンプラーが動かせるぐらい
  • RAM: 同上
  • OS: ComfyUIが動く環境

トラブルシューティング

メモリが解放されない

原因と対策:

  1. MinFreeVRAMGBが高すぎる

    • 現在の空きVRAMを確認: nvidia-smi
    • MinFreeVRAMGB=0.0で強制実行をテスト
  2. 他のプロセスがGPUを使用

    • 他のComfyUIインスタンスを確認
    • ブラウザのハードウェアアクセラレーションを無効化
    • GPU使用アプリケーションを終了
  3. ComfyUIの実行キャッシュ

    • ComfyUI Managerの"Free model and cache"と併用
    • ComfyUIを再起動

Sequential Loadersが動作しない

原因と対策:

  1. trigger接続忘れ

    • 全てのtrigger入力/出力が正しく接続されているか確認
    • 接続が1つでも欠けると順序保証されない
  2. import エラー

    • コンソールログを確認
    • ComfyUIを再起動
    • カスタムノードの再インストール
  3. ファイルが見つからない

    • モデルファイルが正しいフォルダに配置されているか確認

重要なログメッセージ(ComfyUI コンソール):

  • [FreeVRAM] Sequential Loaders loaded successfully - 正常ロード
  • VRAM FREE (u5): Cleared: Models, Cache, GC | Freed: X.XX GB - クリーンアップ成功

ライセンス

詳細はLICENSEファイルを参照してください。


謝辞

このプロジェクトは以下の技術を使用しています:

  • ComfyUI - 強力なノードベースUIフレームワーク
  • PyTorch - ディープラーニングフレームワーク

バージョン: 1.1.0 最終更新: 2025-10-02 開発: u5dev