見出し画像

xformers beats Cross Attention


On ComfyUI

この記事の趣旨は、高速化といえば高速化…ですが、恐らく大半のComfyUIユーザーには影響しません。

ただ、私の以下記事を見てComfyUIをインストールしていた方には影響します。端的に言えば、恐らく相当以前に常識が書き換わっていたものに私が気づかなかったのです。修正前の以下記事の通りに、pytorch-cross-attentionを指定する形でインストールしていた方には申し訳ありませんが。

結論から端的に言えば、現時点のPytorch環境においては、恐らくComfyUI上のほぼ全ての状況においてxformersがpytorch-cross-attentionより高速に動作し、特にFlux1と動画生成では大きな差が出ます。

昨年の前半期辺りまではCross-Attentionの方が高速で、特に当時主流のプラットフォームだったA1111では確実にそうだった(Pytorchやxformersの更新毎にベンチマークで計測していた)のですが、この世界では1年前のセオリーなど化石です。

…迂闊にも今日になって、ComfyUIにおける速度差に気づきました。

放置出来る事ではないので、上記事もxformersを前提に記述を変更しています。他にも関連記事で「Cross-Attentionの方が速い」的な事は書いた記憶があるので、発見次第改稿していきます。

修正方法としては単純で、下図のように「use-pytorch-cross-attention」という記述を消せば良いだけです。ComfyUIは、xformersがインストールされた状態で何も指定しなければ、自動的にxformersを適用します。

結果ですが、私のいつものFlux1ベンチマーク(Flux1.dev+Multi ControlNetでVRAM消費量が12GBを超える形でのテスト)では、

xformers使用によって特に初回動作が2倍ほど高速化しました。修正前は、初回生成時に200秒前後かかっていました。

WaveSpeedやtorch.compile、MultiGPUが効果を発揮する2回目以降は、そこまでの差は出ませんが、それでも10秒程度は高速になっています。

On A1111

以前、A1111でも以下のような記事を書いていたんですがね..…何で、ComfyUI側でこれに今日迄気づかなかったかな、て話です。

A1111に関しては、以下記事の時点では、速度よりもOutOfMemoryの問題に気を取られていたから…という事もあります。A1111に関しては、速度よりもUpscale時のOutOfMemoryを避ける観点から、xformersの方が安定はしますね…というのが下記事の趣旨でした。

On Forge&reForge

ただ、以下記事で解説しているreForge及びForgeについては、改めて比較テストをした結果、ほとんど差が発生せず、更にForge及びreForgeに関してはxformers使用の為にはtritonが必須になるので、

インストールの手間が増える訳ですから、結果にほぼ差がないのであれば、以下記事はそのままCross-Attentionを使用する形で残しておきます。

reForgeでのベンチマークテストです。テスト画像はSDXL1.0での1024×1024です。ほとんど誤差の範囲差しかありませんでした。

xformers 0.0.29.post3+triton 3.2.0.post13

Cross-Attention on Pytorch 2.6.0+cu126 (Fixed to CUDA12.8&CuDNN9.8)

以下は、ForgeでのCross-Attention環境でのテストですが、やはり同系のreForgeとほぼ差はありません。

尚、下記事で解説している問題により、Forgeにおけるxformers環境でのテストは現時点では不可能になっています。


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