【ComfyUI】画像生成が途中で停止する問題の原因と確実な解決法

どんな問題が発生するか?

ComfyUIを使用して画像生成ワークフローを実行している際に、プロセスが突然、予期せず途中で停止してしまう問題が発生します。生成プログレスバーが途中で止まり、最終的な画像が出力されない、またはエラーメッセージもなくUIが応答しなくなる状態です。具体的には以下のような症状が見られます。

  • ターミナルやコマンドプロンプトにエラーメッセージが表示されず、単に処理が止まる
  • 「Executing…」の状態から進まなくなる
  • プログレスバーが50%や75%など、特定のポイントで固まる
  • 場合によっては、以下のようなエラーメッセージが断片的に表示されることもあります:
    # メモリ関連のエラー例
    RuntimeError: CUDA out of memory.
    # または
    [WARN] ComfyUI execution stopped unexpectedly.
    
  • ブラウザのコンソールにネットワークエラーが表示される(WebSocket接続の切断など)

問題の技術的原因

ComfyUIの画像生成が途中で停止する主な原因は、リソース不足とワークフローの構成問題に大別されます。背後にある技術的な要因は以下の通りです。

  1. GPUメモリ不足: 複数の高解像度モデル、ControlNet、複数のLoRAを同時使用するなど、メモリ要求の高いノードを組み合わせると、GPUのVRAMが枯渇し、プロセスがクラッシュまたは停止します。エラーメッセージが表示されない場合でも、内部的にメモリ割り当てに失敗している可能性があります。
  2. システムRAM/VRAMの断片化: 長時間ComfyUIを実行し続けたり、大きなモデルを頻繁に読み込んだりすると、メモリが断片化され、大きな連続メモリブロックの確保に失敗することがあります。
  3. 特定のカスタムノードのバグや互換性問題: コミュニティで配布されているカスタムノードの中には、特定の条件下でデッドロックや無限ループを引き起こすものがあり、これがワークフローの実行停止を招きます。
  4. Pythonの再帰深度やスタックオーバーフロー: 非常に複雑でネストの深いワークフロー(特にループ構造を持つもの)を実行すると、Pythonの再帰制限に引っかかり、停止することがあります。
  5. WebSocket/通信タイムアウト

    フロントエンド(ブラウザ)とバックエンド(ComfyUIサーバー)間の通信が長時間の生成処理中にタイムアウトし、接続が切断されると、見かけ上処理が停止したように見えます。

具体的な解決手順

解決法1: GPUメモリ使用量の最適化と監視

まずは、最も一般的な原因であるGPUメモリ不足に対処します。以下のコマンドで現在のメモリ使用状況を確認し、設定を調整します。

# NVIDIA GPUの場合、メモリ使用量を監視
nvidia-smi -l 1  # 1秒ごとに更新されるメモリ使用状況を表示

ComfyUIの起動時に、メモリ関連の最適化オプションを追加します。

# ComfyUIの起動コマンドにオプションを追加
python main.py --lowvram --normalvram

# または、より積極的なメモリ節約には
python main.py --lowvram

# 8GB以下のGPUでは、--medvramを試す
python main.py --medvram

さらに、ワークフロー内で以下の対策を実施します:

  • 「KSampler」ノードの「steps」数を一時的に減らして試す(例: 20→15)
  • 高解像度生成を行う場合は、まず小さな解像度で生成し、「Latent Upscale」や「Image Upscale」ノードで段階的に拡大する
  • 複数のControlNetを使用している場合は、一つずつ無効化して原因を特定する

解決法2: 問題のあるノードの特定とワークフローの簡素化

カスタムノードが原因の場合、以下の手順で問題を切り分けます。

# カスタムノードを一時的に無効化して起動する方法
# custom_nodesフォルダ内の疑わしいノードフォルダをリネームまたは別場所に移動

# または、最小構成でComfyUIを起動
python main.py --disable-custom-nodes

ワークフロー側の対処法:

  1. 現在のワークフローをJSON形式でエクスポートし、バックアップ
  2. ノードを一つずつ削除またはバイパスしながら、最小限の構成で実行テストを行う
  3. 特に以下の種類のノードに注意:
    • 動画生成関連ノード(VDECoder, AnimateDiffなど)
    • 複雑なマスク処理や複数画像の合成ノード
    • ループ構造を持つカスタムノード
  4. 問題が再現しない最小構成を見つけたら、そこからノードを一つずつ追加して原因ノードを特定

解決法3: Python環境と依存関係の健全性確認

Python環境やライブラリの競合が原因で停止する場合があります。

# ComfyUIの依存関係を再インストール
cd ComfyUI
pip install -r requirements.txt --upgrade

# PyTorchとCUDAのバージョン互換性を確認
python -c "import torch; print(f'PyTorch: {torch.__version__}'); print(f'CUDA available: {torch.cuda.is_available()}'); print(f'CUDA version: {torch.version.cuda}')"

# キャッシュのクリア(モデルキャッシュなど)
# ComfyUIフォルダ内の以下のキャッシュを削除またはリネーム
# - `comfy` フォルダ内のキャッシュファイル
# - `temp` フォルダ(存在する場合)

仮想環境を使用している場合は、新規に環境を作り直すことも有効です。

# 仮想環境の再作成例(condaの場合)
conda create -n comfyui_new python=3.10
conda activate comfyui_new
cd /path/to/ComfyUI
pip install -r requirements.txt

解決法4: 実行設定とタイムアウト値の調整

長時間実行されるワークフローに対して、各種タイムアウト設定を調整します。

# extra_model_paths.yaml またはコマンドライン引数で設定を調整
# 例: タイムアウト値を延長(該当設定があれば)

# ComfyUIの起動オプションとして、以下のようなものを試す
python main.py --listen 0.0.0.0 --port 8188 --enable-cors-header

# あるいは、直接ソースコードを修正する場合
# ComfyUIの実行エンジンに関するタイムアウト設定を探して調整

ブラウザ側の対策:

  • ブラウザの開発者ツールを開き、ネットワークタブでWebSocket接続の状態を確認
  • ブラウザのキャッシュをクリアする
  • 別のブラウザ(Chrome, Firefox, Edge)で試す
  • ブラウザ拡張機能を一時的に無効化して試す

解決法5: システム全体のリソース管理とログの詳細確認

オペレーティングシステムレベルでのリソース制限が原因の場合があります。

# Linuxの場合、メモリとスワップの確認
free -h
# スワップ領域が不足している場合は追加
sudo fallocate -l 8G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

# Windowsの場合、ページファイルのサイズを自動管理に設定または増加
# (システムのプロパティ → 詳細設定 → パフォーマンス → 詳細設定 → 仮想メモリ)

# ComfyUIの詳細ログを有効化して起動
python main.py --verbose

詳細なログ出力を有効にし、停止直前のメッセージを確認します。

# カスタムのログ設定を追加する場合
# ComfyUIフォルダ内に以下の内容でdebug_log.pyを作成

import sys
import traceback
import logging

logging.basicConfig(
    level=logging.DEBUG,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
    handlers=[
        logging.FileHandler('comfyui_debug.log'),
        logging.StreamHandler(sys.stdout)
    ]
)

まとめ

ComfyUIの画像生成が途中で停止する問題は、多くの場合GPUメモリの不足または特定のカスタムノードの不具合に起因しています。確実な解決のためには、以下の手順で体系的にトラブルシューティングを行うことをお勧めします。

  1. リソース監視: nvidia-smiやタスクマネージャーでGPU/CPUメモリ使用率を確認
  2. 最小構成テスト: カスタムノードを無効化した状態で、シンプルなワークフローからテスト開始
  3. 段階的拡張: 問題が発生しない最小構成から、ノードを一つずつ追加して原因を特定
  4. 環境整備: Python環境、依存ライブラリ、キャッシュの健全性を確認
  5. ログ分析: 詳細ログを有効化し、停止直前のエラーメッセージを捕捉

これらの対策を行っても問題が解決しない場合は、ComfyUIのGitHubリポジトリのIssueで同様の問題を検索したり、使用しているカスタムノードのディスカッションページを確認したりすることをお勧めします。また、ワークフローの複雑さを軽減し、大きな画像生成は段階的に行うなど、根本的なワークフロー設計の見直しも有効な予防策となります。

関連するトピックとして、「ComfyUIでOut of Memoryエラーが発生する場合の対処法」「大規模画像生成のためのComfyUIワークフロー最適化」についても、リソース管理の観点から合わせて学習されることをお勧めします。

💡 この問題を根本的に解決するには

ローカル環境でGPUトラブルが頻発する場合、クラウドGPUサービスの利用も検討してみてください。環境構築の手間なく、すぐにAI開発を始められます。

  • RunPod — RTX 4090が$0.44/h〜、ワンクリックでJupyter環境が起動
  • Vast.ai — コミュニティGPUマーケットプレイス、最安値でGPUレンタル
この記事は役に立ちましたか?