休職を始めてそろそろ3週間が経とうとしていて、時の流れとは速いものだと感じています。原因となった頭痛は消えていませんが、まだ3週間ならしょうがないかな。
さて、今回はUbuntuのカスタマイズ編の2回目ということでTensorflow-GPUのインストールまでを解説します。というより、これをインストールするためにUbuntu22.04をUbuntu20.04にダウングレードしたりするなど多いに格闘したので、備忘録として残しておきます。

Chrome, VSCode, Anacondaのインストール

北陸先端科学技術大学院大学、通称JAISTさんは、Ubuntuを日本語化したイメージを配布しております。このUbuntuをクリーンインストールしたら最初にやるべきことはChrome, VSCodeのインストールと個人的に思っています。また、このイメージにはデフォルトでcurlとgitが入っていないので、それらも最初に入れてしまえば良いです。主な流れは下記の通りです。

  1. Chromeのダウンロード(リンク)
  2. Chromeのインストール
    • sudo dpkg -i chrome....
  3. VScodeのダウンロード(リンク)
  4. VSCodeのインストール
    • VSCodeはsudo apt installすると古いバージョンが入ってしまうので、こちらを推奨する
    • sudo dpkg -i code....
  5. GitのインストールとGithubへのSSH設定
    • sudo apt install gitでgitをインストールする
    • ssh-keygenで鍵を作成する
      • ~/.ssh/(key_name)に配置される
    • githubへの鍵登録
      • ~/.ssh/(key_name).pubの方を配置すること
  6. Anacondaのダウンロード(リンク)
    • sudo sh anaconda(hogehoge).runでインストールできたはず

ここまでやれば、一通りの環境構築が完了します。ちなみに、私はAnacondaではなくnativeにPythonを配置する方が好きなので、今回の構築はTensorflow-GPUのためにやむ無しという感じで実施しました。

Tensorflow-GPUのインストール

今回、最初はAnacondaを使用せずにTensorflow-GPUを導入することを検討していました。上述の通り、私はAnacondaに苦手意識を持っていたというか、condaコマンドを覚えることが何故かできなくて毎回調べなければいけないことが苦痛でした。しかし、nvidiaの公開しているGPUドライバ、CUDAなどのインストールを手動でやってもなかなか上手く行かなく苦しみました。したがって、皆様には最初からAnacondaを使って環境構築をしてしまうことをおすすめします。(それでも終盤で手動設定が必要な場所があって苦労したのですが)

Tensorflow-gpuを動作させる環境の作成

tensorflowでGPUを使う設定(Anacondaを使用)さんが参考になります。ただし、内容が少し古くなってしまっているので、こちらで補足します。
まず、condaコマンドでtensorflow-gpuが動作可能な環境を構築します。

conda create -n tf2110 tensorflow=2.11.0=gpu_py39h6d58c08_0

ここで重要なのは最新版のtensorflowを指定した点になります。最新かどうかはconda search tensorflowでの出力から確認できます。この中でgpu_py**となっているものがGPU対応のtensorflowになります。今回の目的はTensorflow-gpuの環境構築なのでこちらを選択しております。

補足: なぜ最新版を選択するのか

optunaでweight_decayをパラメータに設定している場合、weight_decayが2.11からしか設定されていないために古いtensorflowでは動作しないというパターンにぶつかりました。そのため、可能な限り最新版を選択してこのような苦しみを避けることが大切だと思います。この問題についてはQA等はみつかりませんでしたが、公式ページからweight_decayが追加された時期を確認できます。

libdevice not found at ./libdevice.10.bcへの対策

さて、tensorflow-gpuも無事にインストールできたし、基本的なプログラムなら上手く動作しているから安心安心。。と思っていたら表題のようなエラーメッセージが出てきてしまった。これについて調べて見ると同じようなGithubのIssueがあることが判明した。提案されている解決法の殆どは上手く行かないのだが、最後の方にあるSolutions so Farのみ上手く作用したので、ここでも載せておく。まずは提案されている生コードを下記に示す。

mkdir -p $CONDA_PREFIX/lib/nvvm/libdevice/
cp -p $CONDA_PREFIX/lib/libdevice.10.bc $CONDA_PREFIX/lib/nvvm/libdevice/
export XLA_FLAGS=--xla_gpu_cuda_data_dir=$CONDA_PREFIX/lib

このコードにおいて重要なのは$CONDA_PREFIXの場所とその先にあるlibdevice.10.bcである。まずはecho $CONDA_PREFIXなどで$CONDA_PREFIXのパスを確認し、pushdなどで移動した後にlibdevice.10.bcを確認しておくこと。私の場合は~/anaconda3/envs/tf282/pkgs/cuda-toolkitにlibdevice.10.bcが存在していたので、ここにダイレクトに$XLA_FLAGSを割り当てることによって修復した。

export XLA_FLAGS=--xla_gpu_cuda_data_dir=~/anaconda3/envs/tf2110/pkgs/cuda-toolkit/

一旦のまとめ

今回はUbuntuのカスタマイズ2回目ということでTensorflow-GPUのインストールまでをまとめました。今後Anacondaを使わずに環境構築できるパターンが見つかったら更新しようと思います。
ここまで見てくださってありがとうございました。このあとはトラブルシューティングになります。

トラブルシューティング

既存のGPUドライバとの依存が指摘された場合

(参考:Nvidia-Driver インストール 完全マニュアル(2020年9月11日時点 Ubuntu 18.04対応))

既存のGPUドライバとの依存が存在する場合、condaやpipでのパッケージインストールに失敗することがあります。その場合はGPU-driverを更新することから始めます。
※注意: GPU driverの更新は最悪マザーボードの破損に繋がります。GPUドライバの更新を行ってLinuxが起動しなくなったら、マザーボードのCSMを無効化し、非UEFIモードで起動すれば治ります。これにはセキュアブートという機能が関係しているのですが今回は割愛します。
まず、下記コマンドでGPUドライバを全部削除します。

sudo apt remove --purge "nvidia-" -y && sudo apt autoremove
sudo apt remove --purge "cuda-" -y && sudo apt autoremove
sudo apt remove --purge "libcudnn" -y && sudo apt autoremove
sudo apt remove --purge "libnvidia-" -y && sudo apt autoremove

その後、GPUドライバを再インストールします。私の場合、最新のドライバが530でしたのでこれをインストールしておりますが、sudo ubuntu-drivers devicesで事前に最新版(recommended版)を調べておくと良いでしょう。

sudo apt install nvidia-driver-530

もしGPU-driverのインストールに失敗してしまった場合

上記コマンドの最中に英語でポップが出るが、内容については下記の通りである。

Third party applicationであるNVIDIAドライバをインストールするためには、Securebootの設定が必要だよ。パスワードを設定したら、次回起動時にEnrollMOKを選択し、パスワードを入力して再起動してね。

なので、再びデバドラ削除→インストールを実施し、ポップが出てきたらパスワードを設定する。その後再起動し、その際にEnroll MOKからパスワード入力に進んで更新すれば、なんとかなります。それもだめだったらCSM無効化からの非UEFIで起動するしか無いはず。

その他参考にさせていただいたサイト一覧

NVIDIA GPU搭載PCにUbuntu 22.04LTSをインストールしてLinux機械学習環境を構築する(Tensorflow/PyTorch)竹のしんのテック日記さん

https://tecsingularity.com/cuda/version-2/(CUDAとのバージョン表。これによってUbuntu20.04にデグレすることを決意したが、AnacondaであればUbuntu22.04のまま行けたかもと思っている)

Nvcc: command not found after installing nvidia-jetpack(NativeにCUDAを設定した際にnvccコマンドが見つからなくて困った際に助けられました。Anacondaではパスが違うので注意)

GPU with cuda 11.8 not detected, could not find cuda drivers(CUDAのバージョン違いによってTensorflowと相性があることが分かった瞬間)

Nvidia-Driver インストール 完全マニュアル(2020年9月11日時点 Ubuntu 18.04対応)

tensorflowでGPUを使う設定(Anacondaを使用)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です