WindowsでのxFormersのインストール
xFormers の概要とインストールする目的
xFormers は Facebook 傘下の Meta Research がオープンソースで公開している、Transformers の研究を加速するためのツールボックスです。
Transformers は Hugging Face が公開している、事前トレーニング済みモデルを簡単にダウンロードしてトレーニングできる API とツールを提供するライブラリです。
ここでは詳しくは説明しませんが、ご興味がおありの方はそれぞれこちらなど御覧ください。
何にしろ xFormers を使うことで Stable Diffusion などにおいて使用するメモリを減らせると同時に、高速化も図れるという素晴らしいライブラリなのです。
ただし、Linux ではバイナリをダウンロードして簡単にインストールする事が出来ますが、Windows の場合は基本的に自分でソースコードからビルドしてバイナリを得る必要があります。
という事で、今回は Windows 上で xFormers をビルドしてインストールしていきます。
xFormers ビルドの為の事前準備
xFormers をビルドする為に必要な事前準備を行っていきます。
まずこちらの記事を参考に、Python 3.10.8 をインストールしてください。
次にこちらの記事を参考に、Visual Studio 2022 Community Edition をインストールします。
更にこちらの記事を参考に、CUDA Toolkit 11.6 をインストールしてください。
この記事の通りに進めるならば、それぞれ上記の通りのバージョンをインストールしてください。xFormers はビルドできる Python のバージョンが決まっており、xFormers が使用する PyTorch は CUDA Toolkit の特定バージョンに依存します。
バージョンの依存に関する情報などは、こちらのページなどを御参照ください。
この時点で『 python --version 』と『 nvcc -V 』でバージョンを表示させるとこちらのようになるかと思います。
最後にこちらの記事を参考に、git をインストールしておきます。
以上で事前準備は完了です。xFormers のビルド作業を始めましょう。
xFormers ビルドの為の環境準備
まず Python が使えるコマンドプロンプトから
python -m pip install --upgrade pip setuptools
と打って実行し、セットアップに関係するツールを最新化します。
次に Ninja をインストールします。
Ninja は スピードを重視した小さなビルドシステムです。詳しくはこちらをご覧ください。
コマンドラインから
python -m pip install ninja
と打って実行します。
こちらのインストールは一瞬で完了するはずです。
次に PyTorch 1.12.1 をインストールします。CUDA 11.6 を前提としたコマンドになっています。このコマンドは先のページで得ることが出来ます。コマンドラインから
python -m pip install torch==1.12.1+cu116 torchvision==0.13.1+cu116 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu116
と打って実行します。
少し時間がかかりますが、正常に終了するとこのようにコマンド待ちに戻ってきます。
PyTorch のプログラムの修正
現在の Visual Studio は既に xFormers が前提としている昔の開発環境と動作が変わってしまっている為、このままの状態で xFormers のインストールを進めるとビルド時に
fmha_api.obj : error LNK2001: 外部シンボル __imp___tls_offset_?init@?1??lazy_init_num_threads@internal@at@@YAXXZ@4_NA は未解決です fmha_api.obj : error LNK2001: 外部シンボル __imp___tls_index_?init@?1??lazy_init_num_threads@internal@at@@YAXXZ@4_NA は未解決です build\lib.win-amd64-cpython-310\xformers\_C_flashattention.pyd : fatal error LNK1120: 2 件の未解決の外部参照 error: command 'C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.34.31933\\bin\\HostX86\\x64\\link.exe' failed with exit code 1120
といったエラーを出力し、ビルドに失敗してしまいます。
このエラーを回避する為に、PyTorch のプログラムの一部を修正します。
フォルダ『 C:\Python\Python310\Lib\site-packages\torch\include\ATen\ 』にある『 Parallel.h 』を探し、
メモ帳で開きます。
デスクトップにメモ帳のショートカットを作っておくと、こういった作業の際に便利です。まだデスクトップにメモ帳のショートカットが無い方は
こちらの記事などを参考に、ぜひ作っておかれることをお勧めします。
下方にスクロールさせ『 inline TORCH_API void lazy_init_num_threads() { 』で始まる関数を探します。
次の画像のように、この部分の全ての行の頭に『 // 』を追加してコメントアウトします。
頭に『 // 』を付けていくだけですが、念のためにコピペ用の修正後のコードも貼っておきます。
// Initialise num_threads lazily at first parallel call
//inline TORCH_API void lazy_init_num_threads() {
// thread_local bool init = false;
// if (C10_UNLIKELY(!init)) {
// at::init_num_threads();
// init = true;
// }
//}
xFormers のダウンロード
xFormers の公式リポジトリはこちらです。
git コマンドを使って、こちらの最新版を clone します。
まず、コマンドラインから cd コマンド
cd \apps
で Cドライブ 直下の apps フォルダに移動し、そのまま
git clone https://github.com/facebookresearch/xformers.git
とやって、xFormers をクローンします。
クローンが完了すれば apps フォルダの中に xformers というフォルダが作成され、その中に xFormers のソースコードがダウンロードされているはずですので、更に cd コマンド
cd xformers
とやって、そのフォルダの中に入ります。
xFormers のビルド
いよいよ xFormers をビルドしていきます。
まずは、次のコマンドでサブモジュールを更新します。
git submodule update --init --recursive
続いて次のコマンドで xFormers が依存しているライブラリをインストールします。
python -m pip install -r requirements.txt
最後にコマンドラインより
python -m pip install -e .
とやって、xFormers をビルド・インストールします。
私の環境では 15 分ほどかかりました。気長に待ちましょう。
インストール状態の確認
エラーが出なければ、無事に xFormers のインストールが完了しているはずです。
状態を確認するにはコマンドラインから
pip list
と打って実行すれば、pip でインストールされているパッケージの一覧が出力され、その中に xFormers が存在していることが確認できます。