雑記

参考文献

  1. GitHub - lucidrains/performer-pytorch: An implementation of Performer, a linear attention-based transformer, in Pytorch(2022年4月30日参照).
  2. GitHub - idiap/fast-transformers: Pytorch library for fast transformer implementations(2022年4月30日参照).
  3. unable to import cuda code for auto-regressive Performer · Issue #15 · lucidrains/performer-pytorch · GitHub(2022年4月30日参照).
  4. causal_product_cuda.cu,Error compiling objects for extension · Issue #23 · idiap/fast-transformers · GitHub(2022年4月30日参照).
  5. WSL2 上の Ubuntu での NVIDIA CUDA ツールキット, NVIDIA cuDNN, PyTorch, TensorFlow 2.7 のインストールと動作確認(Windows 上)(2022年4月30日参照).

問題
昨日、performer_pytorch(v1.1.4)をインストールしてモデルにデータを流すと以下のメッセージがた。

unable to import cuda code for auto-regressive Performer. 
will default to the memory inefficient non-cuda version

試行1
ただ昨日は見落としていたのだが、performer_pytorch のリポジトリ [1] の README をみると、自己回帰モデルを学習する場合は requirements.txt もインストールするようにあった。requirements.txt の中身は pytorch-fast-transformers [2] だけである。ちゃんとこれをインストールする。v0.4.0 がインストールされたようにみえる。

$ pipenv install performer-pytorch
$ pipenv install pytorch-fast-transformers

これでもう一度昨日のコードを実行してみたが結果は変わらず先のメッセージが出た。

試行1.1
まず pytorch-fast-transformers がきちんとインストールできているのかとなるが、README の Quik-start のコードは問題なく実行できた。ただ、先のメッセージの出元では fast_transformers.causal_product.causal_product_cuda なるものを import していることがわかる。

https://github.com/lucidrains/performer-pytorch/blob/1.1.4/performer_pytorch/performer_pytorch.py#L243-L248

import fast_transformers.causal_product.causal_product_cuda
これが手元で import してみると実際 import できない。

ModuleNotFoundError: No module named 'fast_transformers.causal_product.causal_product_cuda'

この causal_product_cuda が、fast_transformers の昔の版ではあったが現在はないという恐れがあるが、リポジトリ [2] をみるに現在もある。となると、やはり fast_transformers のインストール方法が誤っていたか必要なパッケージがないと思われる。

そもそも performer_pytorch で件のメッセージが出る問題は Issues にあげられており [3]、解消したという最新のコメントをみると fast_transformers を GitHub からインストールしている。ので、それに倣うならこうなる。が、単にこうしても解消はしなかった。

pipenv install git+https://github.com/idiap/fast-transformers.git#egg=pytorch-fast-transformers