見出し画像

ComfyUI-Tiled diffusionの直近のエラー対策ついて@2024/10/30

<追記(2024/11/5)>
上記案件ですが、本家の方がスクリプトを修正されています。
そのため、紹介している方法を使用しなくてもエラーは出なくなっています。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

この3日ほどですが、ComfyUIをアップデートされた方はTiled diffusionを使用するとエラーを起こして使用出来なくなっています。
対策としては、その前のComfyUIがアップデートされる前のコミットに戻る方法がもっとも簡単なようです。

しかし、半日ほど前ですが、リンクにあるISSUEの所で、その対策などについて議論されている中で、GPTやClaudeに聞いて修正スクリプトを公開してくれている方がおられました!!!

このスクリプトがどの様に対応されたのかよくわからなかったので、その部分をGPTに聞いてみました。

<修正前後のスクリプトとエラーログを提示して修正点について検討してもらったGPTの解説>

エラーの原因と修正スクリプトの内容について以下に説明します。

エラーの原因

エラーメッセージの主要な問題は、「'ControlNetAdvanced' object has no attribute 'device'」という部分です。これは、スクリプトがControlNetAdvancedオブジェクトのdevice属性にアクセスしようとしているが、deviceが定義されていないため発生しています。deviceは通常、データを特定のGPUまたはCPUに送るために使われますが、元々のスクリプトでは、この属性がControlNetAdvancedクラスで適切に設定されていなかったため、エラーが発生しています​(元々のtiled_diffusion)。

修正スクリプトの変更点と改善点

修正スクリプトでは、以下のような改善が行われています​(修正されたtiled_diffusion)。

  1. deviceの指定の統一: 修正スクリプトでは、device属性が存在しない場合の代替としてtarget_deviceという変数が導入され、使用されるデバイスを確実に設定しています。これにより、コードがデバイス関連のエラーで停止することを防ぎます。

  2. メモリ管理の強化: 修正スクリプトにはdelやtorch.cuda.empty_cache()が追加されており、不要なテンソルを削除し、メモリキャッシュをクリアすることで、GPUメモリの効率的な利用が図られています。これにより、長時間処理が行われる際のメモリ不足によるエラーが軽減されます。

  3. control.cnsの更新: control.cnsという中間テンソルを保持し、roll処理を用いて効率的にシフト操作を行っています。特に、タイル化された画像生成時のシフト処理が改善されており、必要なシフトが存在する場合にのみ実行するようになっています。この処理により、画像タイルの適切な位置調整が実現され、より正確な出力が期待できます。

修正スクリプトの主な目的

以上の変更点から、修正スクリプトの主な目的は次のとおりです。

  • デバイス属性の欠如に対する対策:ControlNetAdvancedオブジェクトが特定のデバイス上で適切に動作するように、device設定を統一してエラーを回避します。

  • メモリ効率の向上:メモリ管理の改善により、特にGPU環境での大規模な画像処理を円滑に行うことを目指しています。

  • 画像タイル処理の精度向上:シフトやスケーリング操作がより正確に行われるように改善し、出力画像の品質を高めます。

これらの修正により、元のスクリプトで発生していたデバイス関連のエラーを解消し、メモリ効率の向上と画像生成の安定性が期待できるようになっています。

<LocalとPaperspaceでの対応方法>

Local PCの方は、Tiled diffusionのカスタムノードにある同じ名前のスクリプトと入れ替えるだけです。

Paperspaceの場合も同様です。
上に添付された「tiled_diffusion.py」をnotebookにアップロードします。
そして、コピーコマンドを用いて、もともとインストールされているtiled diffusionの所にあるスクリプトをこれに置換します。

/notebooks/ComfyUI/custom_nodes/ComfyUI-TiledDiffusion/tiled_diffusion.py
もしくは
/tmp/ComfyUI/custom_nodes/ComfyUI-TiledDiffusion/tiled_diffusion.py

例えば一時ディレクトリにある場合は以下のような感じのコマンドを実行すると改善します。

# 修正したtiled_diffusion.pyで上書き
!cp /notebooks/tiled_diffusion.py /tmp/ComfyUI/custom_nodes/ComfyUI-TiledDiffusion/tiled_diffusion.py

この作業で、問題なくTiled diffusionが再稼働しました!!!!

Tiled diffusionのカスタムノードに修正が入るまではこの方法を試してみるのも良いと思います。



いいなと思ったら応援しよう!