Ubuntu18.04, GeForceRTX2080でtensorflow2.8.0を使えるようにする


はじめに

きっかけはtensorflow2.8のtf.keras.applications.efficientnet_v2を使ってみたかったから。

最新のtensorflowなので、Nvidia Driver、CUDA Toolkit、cudnnの再インストールが必要になった。
前回のインストール時も色々試行錯誤した記憶があるので、今回のインストールまでの流れを備忘録として残す。
*CUDA Toolkitのインストールの途中でエラーあり

  • 構成
    OS: Ubuntu18.04LTS
    CPU: Intel® Core™ i7-8700 CPU @ 3.20GHz × 12
    GPU: GeForce RTX2080
    Python: Python3.7.9(Anacondaで作成した仮想環境)

下記の記事を大いに参考にしました。
https://qiita.com/Ihmon/items/b6950495c29ee1bfbe99
https://marmooo.blogspot.com/2020/01/apt.html

Nvidia Driverのインストール

nvidia-smiで確認すると、参考記事①と同様に470と表示されるが次に進む。

sudo apt-get purge nvidia-*
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
sudo apt install nvidia-driver-460
sudo reboot
nvidia-smi

CUDA Toolkitのインストール

  • 11.2.2をインストールする。
  • nvidiaのサイトから自分の環境を選択して、出てきた↓のコマンドをコピペする。
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.2.2/local_installers/cuda-repo-ubuntu1804-11-2-local_11.2.2-460.32.03-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1804-11-2-local_11.2.2-460.32.03-1_amd64.deb
sudo apt-key add /var/cuda-repo-ubuntu1804-11-2-local/7fa2af80.pub
sudo apt-get update
sudo apt-get -y install cuda

最後のsudo apt-get -y install cudaでエラー発生。

$ sudo apt-get -y install cuda
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
インストールすることができないパッケージがありました。おそらく、あり得
ない状況を要求したか、(不安定版ディストリビューションを使用しているの
であれば) 必要なパッケージがまだ作成されていなかったり Incoming から移
動されていないことが考えられます。
以下の情報がこの問題を解決するために役立つかもしれません:

以下のパッケージには満たせない依存関係があります:
 cuda : 依存: cuda-11-2 (>= 11.2.2) しかし、インストールされようとしていません
E: 問題を解決することができません。壊れた変更禁止パッケージがあります。

参考記事②によると、このエラーの時は依存ライブラリを順に入れていくと良いらしい。

  • cuda-11-2を入れてみる。
$ sudo apt-get install cuda-11-2
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
インストールすることができないパッケージがありました。おそらく、あり得
ない状況を要求したか、(不安定版ディストリビューションを使用しているの
であれば) 必要なパッケージがまだ作成されていなかったり Incoming から移
動されていないことが考えられます。
以下の情報がこの問題を解決するために役立つかもしれません:

以下のパッケージには満たせない依存関係があります:
 cuda-11-2 : 依存: cuda-runtime-11-2 (>= 11.2.2) しかし、インストールされようとしていません
             依存: cuda-demo-suite-11-2 (>= 11.2.152) しかし、インストールされようとしていません
E: 問題を解決することができません。壊れた変更禁止パッケージがあります。

  • cuda-runtime-11-2を入れてみる。(cuda-demo-suite-11-2はcuda-runtime-11-2と依存関係のため入れれなかったらしい)
$ sudo apt-get install cuda-runtime-11-2
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
インストールすることができないパッケージがありました。おそらく、あり得
ない状況を要求したか、(不安定版ディストリビューションを使用しているの
であれば) 必要なパッケージがまだ作成されていなかったり Incoming から移
動されていないことが考えられます。
以下の情報がこの問題を解決するために役立つかもしれません:

以下のパッケージには満たせない依存関係があります:
 cuda-runtime-11-2 : 依存: cuda-drivers (>= 460.32.03) しかし、インストールされようとしていません
E: 問題を解決することができません。壊れた変更禁止パッケージがあります。

  • 同様に、cuda-driversを入れてみる。
$ sudo apt-get install cuda-drivers
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
インストールすることができないパッケージがありました。おそらく、あり得
ない状況を要求したか、(不安定版ディストリビューションを使用しているの
であれば) 必要なパッケージがまだ作成されていなかったり Incoming から移
動されていないことが考えられます。
以下の情報がこの問題を解決するために役立つかもしれません:

以下のパッケージには満たせない依存関係があります:
 cuda-drivers : 依存: cuda-drivers-460 (= 460.32.03-1) しかし、インストールされようとしていません
E: 問題を解決することができません。壊れた変更禁止パッケージがあります。

  • cuda-driver-460を入れてみる。
$ sudo apt-get install cuda-drivers-460
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
インストールすることができないパッケージがありました。おそらく、あり得
ない状況を要求したか、(不安定版ディストリビューションを使用しているの
であれば) 必要なパッケージがまだ作成されていなかったり Incoming から移
動されていないことが考えられます。
以下の情報がこの問題を解決するために役立つかもしれません:

以下のパッケージには満たせない依存関係があります:
 cuda-drivers-460 : 依存: libnvidia-compute-460 (>= 460.32.03) しかし、インストールされようとしていません
                    依存: libnvidia-decode-460 (>= 460.32.03) しかし、インストールされようとしていません
                    依存: libnvidia-encode-460 (>= 460.32.03) しかし、インストールされようとしていません
                    依存: libnvidia-fbc1-460 (>= 460.32.03) しかし、インストールされようとしていません
                    依存: libnvidia-gl-460 (>= 460.32.03) しかし、インストールされようとしていません
                    依存: libnvidia-ifr1-460 (>= 460.32.03) しかし、インストールされようとしていません
                    依存: nvidia-compute-utils-460 (>= 460.32.03) しかし、インストールされようとしていません
                    依存: nvidia-dkms-460 (>= 460.32.03) しかし、インストールされようとしていません
                    依存: nvidia-driver-460 (>= 460.32.03) しかし、インストールされようとしていません
                    依存: nvidia-kernel-common-460 (>= 460.32.03) しかし、インストールされようとしていません
                    依存: nvidia-kernel-source-460 (>= 460.32.03) しかし、インストールされようとしていません
                    依存: nvidia-utils-460 (>= 460.32.03) しかし、インストールされようとしていません
                    依存: xserver-xorg-video-nvidia-460 (>= 460.32.03) しかし、インストールされようとしていません
E: 問題を解決することができません。壊れた変更禁止パッケージがあります。

  • libnvidia-compute-460を入れてみると、インストール成功。
  • 遡って、cuda-drivers-460、cudaの順で入れる。
  • 確認のため、nvidia-smiをすると失敗。
Failed to initialize NVML: Driver/library version mismatch

バージョンがあってないらしい。Nvidia Driverの表示が470だったからか?

  • Nvidia Driverのインストールやり直す(コマンドの内容は同じ)。
  • 再起動後、nvidia-smi成功。表示がちゃんと460になっている。

CudNNのインストール

  • Download cuDNN v8.1.0 (January 26th, 2021), for CUDA 11.0,11.1 and 11.2
     cuDNN Library for Linux (x86_64)をダウンロードする。
  • 解凍し、includeとlib64の中身を/usr/local/cudaのそれぞれのフォルダにコピーする。
cd cudnn-11.2-linux-x64-v8.1.0.77/cuda
sudo cp include/cudnn*.h /usr/local/cuda/include
sudo cp -P lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*
sudo apt-get update

仮想環境構築&tensorflowインストール

  • Anacondaで仮想環境を構築し、tensorflow2.8.0をpip installで入れる。
conda create -n tf28 python==3.7.9
activate tf28
pip install tensorflow=2.8.0
  • tensorflowがgpuを認識できるか確認する。
from tensorflow.python.client import device_lib
device_lib.list_local_devices()

出力結果

2022-03-23 23:46:12.290377: I tensorflow/core/platform/cpu_feature_guard.cc:151] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX2 FMA
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
2022-03-23 23:46:12.700162: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1525] Created device /device:GPU:0 with 6418 MB memory:  -> device: 0, name: GeForce RTX 2080, pci bus id: 0000:01:00.0, compute capability: 7.5
[name: "/device:CPU:0"
device_type: "CPU"
memory_limit: 268435456
locality {
}
incarnation: 12041040034942007924
xla_global_id: -1
, name: "/device:GPU:0"
device_type: "GPU"
memory_limit: 6730481664
locality {
  bus_id: 1
  links {
  }
}
incarnation: 2528322641246949854
physical_device_desc: "device: 0, name: GeForce RTX 2080, pci bus id: 0000:01:00.0, compute capability: 7.5"
xla_global_id: 416903419
]

インストール完了。