【Python】Improve performance with large number of queued prompts の完全解決ガイド


はじめに

こんにちは!ComfyUIを使ってクリエイティブなプロジェクトをお楽しみいただいている方々へ。今日は、大量のプロンプト(指示)がキューに入れられて動作が重くなる問題についてお話しします。この問題を解決するためには、ちょっとした設定の変更が必要ですが、その手順をステップバイステップで説明しますので、ぜひご参考ください。

原因の解説

ComfyUIはプロンプトをキューに追加すると、それらが処理されるまでウェブアプリケーション上で待機状態になります。これが大量になると、アプリケーション自体が重くなったり、遅くなることがあります。特に、大量のプロンプトがキューに入ると、API(プログラム間で情報をやりとりするためのインターフェース)内の特定の呼び出し api.getQueue() で処理時間が長くなり、全体的に動作が遅くなります。

問題はバックエンドで発生し、「deepcopy」と呼ばれる処理が原因です。これはデータをコピーする際の一連の手順であり、大量のプロンプトがある場合に時間がかかります。この処理の時間を短縮することで、全体的な応答速度を向上させることが可能です。

解決ステップ (Step-by-Step)

Step 1: コードの変更

問題を解決するためには、ComfyUIの設定ファイル内の特定の部分を手動で修正する必要があります。以下の手順に従ってください:

  1. エディタを開く:

    • ComfyUIがインストールされている場所にある PromptQueue ファイルを見つけて開きます。
  2. コードを探す:

    • 以下の行を探します:
      return copy.deepcopy(self.queue)
    • この行のすぐ下に、新しい関数を追加します。
  3. 新しい関数を作成する:

    • 新しい関数は get_current_queue_volatile と名付け、「copy.copy」を使用して同じデータを取得します。つまり、次のようになります:
      def get_current_queue_volatile(self):
          return copy.copy(self.queue)
  4. 元の呼び出しを変更する:

    • エラーが発生している api.getQueue() の呼び出し部分に以下の修正を行います。
      api.getQueue = function() {
        return PromptQueue.get_current_queue_volatile();
      }
  5. 保存して再起動:

    • 変更を保存し、ComfyUIのサーバーを再起動します。

Step 2: 確認

修正が適切に適用されたか確認するために、大量のプロンプトをキューに入れて、ウェブアプリケーションのレスポンス速度や反応性が向上していることを確認してください。これは具体的な数値で評価する必要はありませんが、ユーザーインターフェースの滑らかさや応答速度の改善を感じることができます。

まとめ

ComfyUIはとても強力なツールですが、大量のプロンプトを処理する際に問題が出ることがあります。しかし、このガイドに従って簡単な設定変更を行うことで、その問題を解決することができます。もし難しい点や不明確な点があれば、フォーラムやコミュニティで助けを求めることもおすすめです。

今日から快適にComfyUIを使い続けてください!