💭

Flash Attention をインストールする際に、build済whlファイルを利用することでbuildの時間をなくす方法

に公開

はじめに

Flash Attention を利用する際に、インストールに少し躓き、色々やって解決したので、その備忘録を残します。

結論

  • Python のバージョン、torch のバージョンを変更可能な状態なら、Flash Attention の whl ファイルが存在するバージョンに変更しましょう。
  • Python のバージョン、torch のバージョンが変更不可能なら、build 完了を数時間待ち、以降はビルドされた whl ファイルを利用するようにしましょう。

今回困ったこと

Flash Attention のインストールが数十分経っても終わりません。以下のコマンドでインストールをしています。公式より参照。

pip install flash-attn --no-build-isolation

以下の画像の箇所(Building wheel for flash-attn (setup.py) ..)で止まります。

ただ、他の環境だと30s程度でインストールが終わることもあります。

なぜ?となったので、その解決策の備忘録を残します。

前提知識

whl ファイルとは、Python のパッケージを配布・インストールするためのバイナリ形式のアーカイブファイルのことです。

pip installuv addを行う場合、自身の環境に適した whl ファイルがある場合は、それを利用します。ない場合は、ローカル環境でソースコードから build を行い、whl ファイルを作成します。

ビルドに時間がかかる環境

CUDA は 12.6、torch は2.7.1、Python は3.10.12,

$ root@C.20802695:~$ python --version
Python 3.10.12

$ root@C.20802695:~$ pip list | grep torch
torch                     2.7.1

$ root@C.20802695:~$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2024 NVIDIA Corporation
Built on Thu_Sep_12_02:18:05_PDT_2024
Cuda compilation tools, release 12.6, V12.6.77
Build cuda_12.6.r12.6/compiler.34841621_0

GPU の環境は Vast.ai の A40 1枚。

その後、以下を実施すると、Flash Attention のインストールが終わらない状況を再現できると思います。

pip install flash-attn --no-build-isolation

原因

前提知識に書いてあるのですが、自身の環境に適した whl ファイルがなかったため、Flash Attention のビルドがローカルで行われてしまうのが原因でした。このビルドには数時間かかるらしいです。

他の Python ライブラリだと、ビルドに数時間かかることはほぼ無い(もしくは、whl ファイルが存在する)ため、気づくのに時間がかかってしまいました。

実際の今回の設定である、「Python は3.10.12, torch は 2.7.1, CUDA は 12.6」のwhlが存在するか見に行っていみましょう。

本日時点(2025/06/06)時点での Flash Attention の最新バージョンである v2.7.4.post1 の whl は、以下のリリースページに存在します。
https://github.com/Dao-AILab/flash-attention/releases/tag/v2.7.4.post1

本ページの whl ファイル、ファイルの中に対応バージョンの名前が書いてあります。例えば「flash_attn-2.7.4.post1+cu12torch2.2cxx11abiFALSE-cp310-cp310-linux_x86_64.whl」は、CUDA は 12 系、torch は 2.2、Python は 3.10 用の whl ファイルであることが分かります。

リリースページを見ると、torch2.7 に対応している whl が存在しないことが分かります。

解決策1

既存環境のバージョンを変更します。今回は、torch を 2.7.1 -> 2.6.0 に変更します。

pip install torch==2.6

そして、再び Flash Attention をインストールします。(-vvv はログを詳細に見るために追加しています。)

pip install flash-attn -vvv --no-build-isolation

今度は10s程度でインストールが終わりました。ログを見ると以下のような記載があり、wheel URLを見つけられていることが分かります。

  Guessing wheel URL:  https://github.com/Dao-AILab/flash-attention/releases/download/v2.7.4.post1/flash_attn-2.7.4.post1+cu12torch2.6cxx11abiFALSE-cp310-cp310-linux_x86_64.whl
  Raw wheel path /tmp/pip-wheel-z8x4dk26/flash_attn-2.7.4.post1-cp310-cp310-linux_x86_64.whl
done
  Created wheel for flash-attn: filename=flash_attn-2.7.4.post1-cp310-cp310-linux_x86_64.whl size=187815087 sha256=ffe17686fa1a0f288de9eae7c32af209d32a27b037ef28614f042b377af5b15a
  Stored in directory: /root/.cache/pip/wheels/59/ce/d5/08ea07bfc16ba218dc65a3a7ef9b6a270530bcbd2cea2ee1ca
Successfully built flash-attn

解決策2

ビルドが終わるのを待ちましょう。数時間かかるらしいです。
https://x.com/mjun0812/status/1850706663982137615

終わったら、 whl を保存し、使いまわすことで再びビルドに時間を取られないようにしましょう。

終わりに

自身がちょっとハマってしまったので、備忘録として残します。参考になる方がいれば。

Discussion