見出し画像

xformersとFlashAttentionを救いたい(RTX 50ユーザー向け)

2026/7/15: FlashAttentionホイール配布先情報にwildminder氏のサイトを追加、sdbds氏とussoewwin氏のサイトは削除
2026/2/7: FlashAttentionホイール配布先情報に https://flashattn.dev/ とmjun0812氏のサイトを追加
https://flashattn.dev/  は閉鎖されたようなので削除


先日「RTX 50ユーザーはxformersを窓から投げ捨てろ(動作させる方法もあるよ)」という記事を書きました。

xformersは0.0.31以降で組み込みのFlashAttention(以降、FAと省略することあり)がFA2からBlackwellで動作しないFA3になり、また0.0.33以降でcutlassがBlackwell用 (cutlass-blackwell) とそれ以外に分離されました。
そのためGeforce RTX 50ユーザーは現状のA1111系WebUIやComfyUIでxformersを使う方法として、0.0.30のfa2Fを使うか、0.0.34のコードを改変してcutlassF-ptを使うという方法を説明しました。
FlashAttentionを個別にインストールすればxformers 0.0.34でもfa2Fを使えそうでしたが、FlashAttention公式からWindows用ホイール (whl) が提供されていないのでいったん諦めました。
それと少なくともxformers 0.0.30以降については、「xformersを使う」ということは「xformers経由でFlashAttentionを使う」ということとほぼ同義だと認識しました。

その後、FlashAttentionについて少し調べたのでFlashAttentionをインストールしてxformers経由で使う方法としてまとめることにしました。


FlashAttentionについて

FlashAttentionがどのようなものなのかChatGPTに教えてもらいましたが、正しいかどうか分からず確認するのも面倒なのでここには貼りません。詳細はご自身でChatGPTに聞くか調べてください。

一応SageAttention2のほうがFlashAttention2よりも性能が良いことは間違いなさそうです。Forge Neo / Classicでも両方がインストールされている場合は、SageAttention2を優先で使うようになっています

https://github.com/Haoming02/sd-webui-forge-classic/ より

ただSageAttention2もQwen-ImageやLTX-2で生成画像が黒画面になったりエラーになったりすることがあるので、そのような場合にFlashAttention2を試してみる価値はあるかもしれません(未確認)。

Windows用のFlashAttentionホイールについて

FlashAttention公式GitHubやPypiでは残念ながらLinux用のホイールやソースファイルしか配布されてません。そのためWindowsでFlashAttentionを使う方法は以下のいずれかになります。

  1. 自分でソースファイルからビルドする

  2. Windows用に個人がビルドして公開されているホイールを使う

  3. xformers組み込みのFlashAttentionを使う

少し調べたところ、1.についてはLinuxならコマンド一発でビルドできるようですが、Windowsではビルド環境の構築や設定がいろいろと面倒なようです。またビルドにもCPUをフルロードして最低でも2時間以上はかかるようです。
自分で使うかどうかも分からないものにそんな手間をかける気にならないため、2.についてBlackwellでも動作するCUDA 12.8以上でビルドされたホイールを探したところ以下を見つけました。

mjun0812氏の配布ホイール

wildminder氏の配布ホイール

動作検証

Forge Neo(Classicも)はPython 3.11が推奨で、直接FlashAttentionを使うこともできるため、最新のPyTorch 2.10.0+cu130, xformers 0.0.34に対応したsdbds氏の配布ホイールを使わせていただき動作検証しました。

インストールコマンド

pip install torch==2.10.0 torchvision --index-url https://download.pytorch.org/whl/cu130
pip install xformers==0.0.34 --index-url https://download.pytorch.org/whl/cu130
pip install triton-windows==3.6.0.post25
pip install -qq https://github.com/sdbds/flash-attention-for-windows/releases/download/2.8.3/flash_attn-2.8.3+cu130torch2.10.0cxx11abiFALSEfullbackward-cp311-cp311-win_amd64.whl

"python -m xformers.info" でfa2F@2.8.3がavailableになっていることを確認します。

xFormers 0.0.34
memory_efficient_attention.cutlassF-pt:            available
memory_efficient_attention.cutlassF-blackwell:     unavailable
memory_efficient_attention.fa2F@2.8.3:             available
memory_efficient_attention.fa3F@0.0.0:             unavailable

Forge Neoで起動オプションに "--disable-sage" を付けてsageattentionが使われないようにすると直接FA2が利用されます。

起動メッセージ(抜粋)

Using FlashAttention                                   attention.py :: INFO    

同様に "--disable-sage --disable-flash" を付けるとxformers経由でFA2が利用されます。

起動メッセージ(抜粋)

Using xformers Cross Attention                         attention.py :: INFO    

当たり前ですが、いずれの場合でも完全に同一の画像が生成されました。生成時間は、やはりSageAttention2の方が僅かに速いようです

まとめ

個人でWindows用にビルドして配布されているホイールを使ってFA2をインストールし、Forge Neoから直接およびxformers経由でFA2を利用して画像生成できることを確認しました。

いずれSageAttention2で生成画像が黒画面になったりエラーになったりした場合に、FlashAttention2を試してみようと思います。

このような感じで、あまり体系的に整理や理解されていない技術的な内容を分かりやすく無料で解説しています。「スキ」「フォロー」「チップ」で応援よろしくお願いします。

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