transformers ライブラリを使用してBERTで文章生成させる際に起きたエラー修正記録
BERT のサンプルコードでエラーが出たので修正したログ
※作業履歴を記載した自分用メモです(散らかり注意)
- Tensorflow周りでエラー(libnvinfer.so.7 が無い)が出てそうなので記録
- エラーメッセージは↓
- tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer.so.7'; dlerror: libnvinfer.so.7: cannot open shared object file: No such file or directory;
- Tensorflowのバージョン確認
- python -c 'import tensorflow as tf; print(tf.__version__)'
- 2.11.0
- CUDAのバージョン確認
- nvidia-smi
- 11.7
- CUDA11用にCUDNNをダウンロード
- インストール
sudo dpkg -i sudo dpkg -i ./cudnn-local-repo-ubuntu2004-8.7.0.84_1.0-1_amd64.deb
- libnvinfer7のインストール
-
sudo apt-get install libnvinfer7=7.0.0-1+cuda10.2 libnvonnxparsers7=7.0.0-1+cuda10.2 libnvparsers7=7.0.0-1+cuda10.2 libnvinfer-plugin7=7.0.0-1+cuda10.2 libnvinfer-dev=7.0.0-1+cuda10.2 libnvonnxparsers-dev=7.0.0-1+cuda10.2 libnvparsers-dev=7.0.0-1+cuda10.2 libnvinfer-plugin-dev=7.0.0-1+cuda10.2 python3-libnvinfer=7.0.0-1+cuda10.2
↑はうまくいかない
- E: Unable to locate package libnvinfer7
- E: Unable to locate package libnvonnxparsers7
- E: Unable to locate package libnvparsers7
- E: Unable to locate package libnvinfer-plugin7
- E: Version '7.0.0-1+cuda10.2' for 'libnvinfer-dev' was not found
- E: Version '7.0.0-1+cuda10.2' for 'libnvonnxparsers-dev' was not found
- E: Version '7.0.0-1+cuda10.2' for 'libnvparsers-dev' was not found
- E: Version '7.0.0-1+cuda10.2' for 'libnvinfer-plugin-dev' was not found
- E: Version '7.0.0-1+cuda10.2' for 'python3-libnvinfer' was not found
- エラーメッセージは↓
-
-
とのこと。
tensorflow upgrade
- pip install --upgrade tensorflow
- 2.11.0で変わらず(すでに最新)
tensorrt を入れればlibnvinfer が入りそうなので試してみる
- sudo apt install tensorrt
Unable to locate package tensorrt とのこと
直接入れるか
インストール方法
-
ダウンロードページ
-
とりあえずlibnvinfer7が無いとのエラーなので7系をダウンロード
ダウンロードする際にいろいろとアンケートあり、開発するのに何がボトルネックなっとるか的な質問があった。管理大変すぎるにいれておいた。というかバージョンごとに動く動かないとか大変すぎる。
7系だけでこれだけあるんだけど
- んでバージョン毎に他ライブラリとの相性検討必要なら、環境構築だけで時間とられて開発開始できんやろと思います笑
- 7系にはCUDA11.7用のものは無し、と、あと自環境がubuntu 20.04 なのでこちらも無し。8系にしたほうがいいのかも。
- こちらにしよう。んで libnvinfer8が入るようなら 8 を必要とするtensorflow(があるのかわからないが)に切り替える作戦。あるいはlibnvinfer7にリンク貼る
- [1] sudo dpkg -i nv-tensorrt-local-repo-ubuntu2004-8.5.1-cuda-11.8_1.0-1_amd64.deb
- The public nv-tensorrt-local-repo-ubuntu2004-8.5.1-cuda-11.8 GPG key does not appear to be installed.To install the key, run this command:
sudo cp /var/nv-tensorrt-local-repo-ubuntu2004-8.5.1-cuda-11.8/nv-tensorrt-local-3E18D84E-keyring.gpg /usr/share/keyrings/といわれる - 言われたままに実行し、再度 [1] のコマンドを実行。うまくいったらしい。
- ls -al /home/tkoma2015/.local/lib/python3.8/site-packages/tensorrt/
total 898800
drwxr-xr-x 3 tkoma2015 tkoma2015 4096 Jan 5 23:31 .
drwx------ 353 tkoma2015 tkoma2015 20480 Jan 5 23:32 ..
-rw-r--r-- 1 tkoma2015 tkoma2015 5118 Jan 5 23:31 __init__.py
drwxr-xr-x 2 tkoma2015 tkoma2015 4096 Jan 5 23:31 __pycache__
-rw-r--r-- 1 tkoma2015 tkoma2015 487611688 Jan 5 23:31 libnvinfer.so.8
-rw-r--r-- 1 tkoma2015 tkoma2015 373749200 Jan 5 23:31 libnvinfer_builder_resource.so.8.5.2
-rw-r--r-- 1 tkoma2015 tkoma2015 48845176 Jan 5 23:31 libnvinfer_plugin.so.8
-rw-r--r-- 1 tkoma2015 tkoma2015 2860280 Jan 5 23:31 libnvonnxparser.so.8
-rw-r--r-- 1 tkoma2015 tkoma2015 3442680 Jan 5 23:31 libnvparsers.so.8
-rwxr-xr-x 1 tkoma2015 tkoma2015 3804080 Jan 5 23:31 tensorrt.so
- libnvinfer.so.8 なら入ったが、tensorflow が見に行こうとしていいるのはlibnvinfer.so.7 だ
- NVDIAのForumに似た状況の内容が記載されていた
- 参考になるかわからんが読んでみる
- Tensorflow 2.4.x から 2.5.x に upgradeしろと。すでに2.11.0いれてしまってるので、2.5.xにダウングレードすればうまくいくかも。動作確認取れているバージョンは以下の場所で確認できる模様
-
- pip install tensorflow-gpu==2.5.0
- でいいかな。問題なくインストール完了。
- バージョン確認
- python -c 'import tensorflow as tf; print(tf.__version__)'
- 2.5.0
- libnvinfer.so.7 がないとのエラーはなくなるOK
- NVDIAのForumに似た状況の内容が記載されていた
- 次は、 RuntimeError: Expected all tensors to be on the same device, but found at least two devices と言われる(エラー)
- import torch
torch.set_default_tensor_type('torch.cuda.FloatTensor') - とすれば良いらしい。実施し、エラーはなくなった
- import torch
- 次は、IndexError: Dimension out of range らしい
- が、ここからは元のソースを直せばいける気がするのでそれで対応
- 結果、無事BERTで文章生成に成功
- 動作確認できた簡単なサンプルコード( by chatGPT )
- 日本語でBERTやるなら、bert-base-japanese-whole-word-masking というのが良いらしいので、一応対応してみる。
- fugashi と ipadic は必要そうだったのでインストール
- pip install fugashi
- pip install ipadic
- 若干エラーでつつも動作はできた
- が、しかし良い感じに文章生成できるかというとそうでもなかった。
- モデルの選択や実際の実装依存でかなり変わってきそう
-
良い実装については別途調査してみる