【RTX50シリーズ】 Stable Diffusionにxformersを導入する方法 【CUDA 12.8対応】
この記事では、RTX50シリーズ搭載PC上で動くStable Diffusionにxformersをすることができましたので、その情報共有をします。
RTX 50シリーズでStable Diffusionを動作させる方法は以下の記事で解説しています。
CUDA12.8, PyTorch 2.8 で動作するStable Diffusionの導入方法が知りたい方や環境を確認したい方はぜひご覧ください。

環境
PyTorchの開発は Linux 環境への対応の方が早いという噂を聞いたのでOSは Ubuntu を選択しました。
- OS = Ubuntu 24.04.2 LTS
CUDA 12.8
,cuDNN 9.8.0
導入済みPyTorch 2.8
で 動作するStable Diffusionを導入済み- WSL(Windows PC上で簡単にLinuxを動かすことができる機能)上で動作
- CPU = Intel Core Ultra 285k
- GPU = NVIDIA RTX 5070
この環境は冒頭でも紹介したこちらの記事でStable Diffusionをインストールした後と同じ環境です。
適宜ご参照ください。

注意点
早速問題点ですが、2025/03/17時点で xformers
は CUDA12.8
に対応していません。
ならどうやって導入するのかというと、
CUDA 12.8
環境のもと自力でビルドします。
自力でビルドして使うので自己責任でお願いします。
xformers
のビルドについては以下の記事で解説しています。
しかし、以下の記事で紹介した方法ではStable Diffusionでは動作しませんでした。

一部xformers
のソースコードを編集してからビルドすることで動作するようになりましたので、それを紹介したいと思います。
一つ注意点ですが、
です。おそらく修正内容は正しいものではないと思います。
実際、LoRA学習であれば先ほどの記事の内容だけで動きました。
完全に自己責任なのでご注意ください。
CUDA 12.8環境下での xformers の導入方法
xformersのビルド環境構築を作る
まず、Ubuntu に必要な開発ツールとライブラリをインストールします。
sudo apt update
sudo apt install python3-dev build-essential cmake
次に、CUDA 12.8
と cuDNN
の環境変数を確認します。
環境変数は以下の通りに設定します。
export PATH="/usr/local/cuda/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"
export CUDA_HOME=/usr/local/cuda-12.8
export CUDNN_INCLUDE_DIR=/usr/local/cuda/include
export CUDNN_LIB_DIR=/usr/local/cuda/lib64
環境変数設定は.bashrc
記載されているので、そのファイルの末尾に上記の内容を追加しました。
変更したので以下のコマンドで有効化。
source ./.bashrc
その後、PyTorch
が自分のGPUに適したCUDAバージョンを認識しているかを確認します。
Pythonを起動してtorch
をインポート。torch.cuda.is_available()
の出力結果で確認することができます。
以下のコマンドで確認します。
python -c "import torch; print(torch.__version__); print(torch.cuda.is_available()); print(torch.cuda.get_arch_list())"
出力例は以下のとおりです。
2.8.0
True
['sm_90']
RTX5070の場合はsm_90
が含まれていればよいそうです。
次に、xformersのGitHubリポジトリからソースコードを取得します。
git clone https://github.com/facebookresearch/xformers.git
main
ブランチを使用しました。
その後、Python 3.10.6
を有効化し、仮想環境を作成して有効化します。
pyenv local 3.10.6
python -m venv venv
source venv/bin/activate
次に必要なPythonパッケージをrequirement.txt
からインストールします。
requirement.txt
は先ほど取得したソースコード一式が入っているフォルダ(xformers)にあるので、
cd xformers
でディレクトリを移動しておきます。
その後、以下のコマンドでrequirement.txt
からパッケージをインストールします。
pip install -r requirements.txt
その後、以下のように追加でパッケージをインストールします。
pip install ninja packaging wheel
最後に以下のコマンドを実行します。(これはクローン直後でもよいかもしれない)
git submodule update --init --recursive
これでxformersのビルド環境ができました。
xformersの修正
ここまでの環境でビルドしたxformers
をStable Diffusionの仮想環境にインストールして起動すると以下のようなエラーがでます。
AttributeError: Cannot set attribute 'src' directly. Use '_unsafe_update_src()' and manually clear `.hash` of all callersinstead.
tritonというパッケージまわりのエラーみたいなのですが、tritonのGitHubリポジトリのコミュニティページに同じエラーに関する議論がありました。
議論を追っていくと、修正をすると動いたという報告がありました。
xformersディレクトリからみて、./xformers/triton/vararg_kernel.py
の以下の個所に編集を加えるみたいです。
jitted_fn.src = new_src
報告に従って、この部分をコメントアウトして以下のように変更しました。
# もとからあったものをコメントアウト
# jitted_fn.src = new_src
# 追加
jitted_fn._unsafe_update_src(new_src)
jitted_fn.hash = None
ビルドとインストール
一番上のxformersディレクトリにいることを確認して、試しに以下のコマンドでインストールをしてみます。
pip install .
無事成功しました。
ほかの仮想環境で利用するので、以下のコマンドでxformers
をビルドします。
python setup.py bdist_wheel
成功すると、dist/
ディレクトリ内に .whl
ファイルが生成されます。
このときファイル名を変えるとほかの仮想環境でインストール時にエラーが出ます。
Stable Diffusionがあるディレクトリに .whl
ファイルを移動させたあと、
Stable Diffusionの仮想環境を有効化した状態で、
pip install ビルドして生成されたファイル名.whl
を行うことでインストールできます。
Stable Diffusionでxformersを有効化
LinuxのStable Diffusionでxformersを有効化するにはwebui-user.sh
に以下の記述を追加します。
export COMMANDLINE_ARGS="--xformers"
export COMMANDLINE_ARGS
というのがwebui-user.sh
の最初のあたりにコメントアウトされているので、コメントアウトを外したのちに追記しました。
これでStable Diffusionを起動すると無事xformersが適用されて画像生成をすることができました。
コード修正が必要だった理由をちょっと考えてみる
あとあと確認すると、xformers
開発環境ではtriton 3.2.0
が使用されている一方、Stable Diffusionでは2.1.0
になっていました。
このバージョン差がコード修正が必要だった理由なきもしますが、正直よくわかりませんでした。
参考サイト
- tritonのGitHubリポジトリのコミュニティページ
https://github.com/triton-lang/triton/issues/6123