
How to fix Tiled Diffusion by Cursor
先日、私はKakudai V1でKSamplerがエラーを起こす原因がComfyUI標準装備のnodes_sag.py(※self-attention-guidance)にある事を突き止め、Cursorによる修正を行った訳ですが、その後のComfyUI更新後はその対策すら効かなくなりました。
(※無効化したので、記事自体削除しています)
更には、そのエラーはsagを使用していない筈の「32K Ultra Upscale XL with ollama」でも起こることを発見しました。更に言えば、エラーを起こしているノードはTiled Diffusionであることもわかりました。
再び、Cursor先生の出番ですが、ここで新しいデバッグの方法を思いつきました。

今までは、エラーの対象になっているpyファイルをCursor先生に診てもらっていましたが、考えてみればワークフローのjsonファイルそのものを診てもらえば、より効果的な対処方法がわかるのではと思いました。
その結果、現状のComfyUIでは、まずsagとTiled Diffusionが基本的に排他的な競合を起こしている事(※以前は問題なく両立していた)、更にはTiled Diffuionの設定がよりシビアになり、今までのように初期設定のまま、フレキシブルに使用できる機能ではなくなっていた事、
この二点が判明しました。
更にもう一つ、Tiled Diffusionはsagを使用していないワークフローにおいてもnode_sag.pyにアクセスしてしまい、その制約下でしか動作しえない事もわかりました。
(だから、sagを使用していないワークフローでも設定次第でコケる)
当初は、Cursorでnode_sag.pyを修正してもらい、Tiled Diffusionとの競合状態そのものを解消させる方向で考えてみましたが、何処をどうコードを弄っても全く解決しないので、この線は諦めました。
で、次善の策としてTiled Diffusionの設定を見直すことにして、エラーを吐き出す度にそれを全てCursorに報告し、Tiled Diffusionの設定をどう変えればいいか、を質問することに専念しました。
その結果、まず「32K Ultra Upscale XL with ollama」については解決し、日本向けと海外向けとアップしている二つのjsonは修正しました。上のリンク先には既に修正版を反映させてしています。
特に、これは最大で32Kサイズまでの拡大を可能にするワークフローである為、Tiled Diffusionがないと余裕でVRAM消費が12GBを越えてしまう為、修正は死活問題だった訳です。

問題はkakudai V1で、こっちはもうsagとTiled Dffusionを並べている作りですから、もうどうにもならない。
あらゆる設定を試して悉く弾かれたので、もうsagを捨てるかTiled Diffusionを捨てるかの二択です。

で、当たり前ですがsagは捨てられんですよ。思いっきり絵そのものに影響する機能なんで。Kakudai V1の原型を設計されたマーベリックの各位も、必要だと思ったから入れてる訳でして。
一方、Tiled Diffusionは要するにVRAM削減の為の機能ですから、絵自体には影響しない。「32K Ultra Upscale SDXL with ollama」はTiled Diffusion自体が必須でしたが、Kakudai V1はSD1.5ベースなので、Tiled Diffusionがなくとも少なくとも自分は困らない…という事で、
身も蓋もない対策ですが、Tiled Diffusionを捨てました。とりあえずこうするしかありませんがな。
…とか言っていた訳ですが、2024年10月、新たな対策情報を得られました。非常に有益な情報を提供くださった事に心から感謝いたします。
前述したように、Tiled Diffusionのエラーに対して、コード修正によって何とか対処したい...は私も試行錯誤していた訳ですが、どうしても成功しませんでした。
しかし世界は広い…世界のどこかには誰かしら、同じことを考えている方がおられるものです。
私は、cursorを介してclaude 3.5-sonnetを使用していましたが、どうしても動作するコードは作れなかったのです。
AIを介してコードを生成する場合、プロンプトエンジニアリングの精度が非常に重要なので、要するにこちら側の「聞き方の問題」なのです。
ただ現状、テストした限りではKakudai V1においては、一定条件下で動作するものの、やはり完全な動作には至りません。
そこで、現状の打開策として、Tiled Diffusionの有効・無効を切り替えることができるスイッチを追加したバージョンを作成しました。上記事リンク先のjsonファイルは既に更新してあります。

現状、自分がテストした範囲では元画像が1024×1024pixelの場合はTiled Diffusion付でも完走しますが、それ以外のサイズでは悉くエラーを起こします。
さて、今日のBGMは…ウチの一族も皆大好き、台湾の国民的バンド「五月天」が歌う中華時代劇「蘭陵王」の主題歌「入陣曲」と、挿入歌やエンディンクもついでに。
台湾人は、日本人が五月天が好きだと聞くと非常に喜びます。少なくともウチの一族はそうです。
どういう訳か、音楽陣は全員台湾人でした、このドラマ。ドラマ自体も面白かったです。蘭陵王と北周の武帝が恋のライバルとかトンデモ設定なのにちやんと史実に沿ってます、大筋は。
In final…I say again&again, "Welcome back LinkinPark!!!"