週末記録

自分メモのため散らかりまくり

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のバージョン確認
    • CUDA11用にCUDNNをダウンロード
      • https://developer.nvidia.com/rdp/cudnn-download

      • インストール
      • 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 とのこと
      • 直接入れるか
      • インストール方法
      • docs.nvidia.com

      •  

        ダウンロードページ
      • developer.nvidia.com

      •  

        とりあえず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に似た状況の内容が記載されていた
        • forums.developer.nvidia.com

        • 参考になるかわからんが読んでみる
        • Tensorflow 2.4.x から 2.5.x に upgradeしろと。すでに2.11.0いれてしまってるので、2.5.xにダウングレードすればうまくいくかも。動作確認取れているバージョンは以下の場所で確認できる模様
      • www.tensorflow.org

      •  

        Forumで記載されていたようにTensorflowの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
    • 次は、 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')
      • とすれば良いらしい。実施し、エラーはなくなった
    • 次は、IndexError: Dimension out of range らしい
      • が、ここからは元のソースを直せばいける気がするのでそれで対応
    • 結果、無事BERTで文章生成に成功
    • 動作確認できた簡単なサンプルコード( by chatGPT )
    • 日本語でBERTやるなら、bert-base-japanese-whole-word-masking というのが良いらしいので、一応対応してみる。
    • fugashi と ipadic は必要そうだったのでインストール
      • pip install fugashi
      • pip install ipadic
    • 若干エラーでつつも動作はできた
    • が、しかし良い感じに文章生成できるかというとそうでもなかった。
    • モデルの選択や実際の実装依存でかなり変わってきそう


    良い実装については別途調査してみる