「喰う・書く・逃げる」に棲む処

 動物に関するデータ分析者のブログです

Ubuntu 18.04にTensorFlowのインストール

こんにちは

今回はUbuntu18.04+GeForce RTX 2080TiのパソコンにTensorFlowをインストールする方法をまとめました。以前にDeepLabCutのインストールの方法をまとめましたが、諸事情からもう一度インストールし直すことになってしまい、その記事に従ってやってみましたが、TensorFlowのところでつまづいてしまいました。そこでTensorFlowのインストール方法をまとめなおしました。なお、今回は失敗した部分も含め試行錯誤の過程を全て公開します。

krhb.hatenablog.com

失敗編:CUDA Toolkitのインストール→TensorFlowのインストール

docs.nvidia.com

TensorFlowを動かすのに必要なもの

こちらのTensorFlowのページいわく以下のものが必要なようです

www.tensorflow.org

  • GPUドライバー 410.x以上

  • CUDA 10.0

  • CUDA Toolkit (CUDA 10.0用)

  • CUPTI (CUDA Toolkitに付属)

  • cuDNN SDK (7.4.1以上)

  • Linuxのkernel 4.15.0(Ubuntuの場合)

GPUドライバーとCUDAのバージョンを確認

予めこちら記事に従ってRTX2080Tiのドライバーをインストールしました。

krhb.hatenablog.com

GPUドライバーとCUDAのバージョンを確認するために以下のコマンドを実行します。

$ nvidia-smi

結果がこちら

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 410.93       Driver Version: 410.93       CUDA Version: 10.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce RTX 208...  Off  | 00000000:01:00.0  On |                  N/A |
| 27%   33C    P8    26W / 250W |    324MiB / 10989MiB |     15%      Default |
+-------------------------------+----------------------+----------------------+

ドライバーもCUDAもバージョンは大丈夫そうです。

CUDA Toolkitのインストール

NVIDIAのページに従ってCUDA Toolkitをインストールします。

docs.nvidia.com

まずはGPUを確認。

$ lspci | grep -i nvidia

これを実行すると以下のように表示されます。

01:00.0 VGA compatible controller: NVIDIA Corporation Device 1e04 (rev a1)
01:00.1 Audio device: NVIDIA Corporation Device 10f7 (rev a1)
01:00.2 USB controller: NVIDIA Corporation Device 1ad6 (rev a1)
01:00.3 Serial bus controller [0c80]: NVIDIA Corporation Device 1ad7 (rev a1)

一行目にNVIDIA Corporation Deviceと書いてあったら次にこちらのページから自分のGPUがリストに含まれているか探します。リストに含まれていたらOKです。

次にLinuxのバージョンとgccがインストールされているかを確認

$ uname -m && cat /etc/*release

実行結果の1行目にx86_64が含まれているか確認します。

$ gcc --version

これを実行してエラーが出なければ大丈夫です。

次にLinuxカーネルを確認します。

$ uname -r

これを実行すると私の場合以下のように表示されました。

4.15.0-50-generic

Ubuntuの場合はカーネルが4.15.0のバージョンである必要があるようです。

カーネルのアップデートが必要ならこれを実行を実行します。

$ sudo apt-get install linux-headers-$(uname -r)

次にCUDA Toolkitのダウンロードします。以下のコマンドでUbuntu 18.04+CUDA10用のdebファイルをダウロードします。

$ wget https://developer.nvidia.com/compute/cuda/10.0/Prod/local_installers/cuda-repo-ubuntu1804-10-0-local-10.0.130-410.48_1.0-1_amd64

続いてダウンロードしたdebファイルをインストールします。

$ sudo dpkg -i cuda-repo-ubuntu1804-10-0-local-10.0.130-410.48_1.0-1_amd64

CUDA public GPC keyをインストールします。

$ sudo apt-key add /var/cuda-repo-10-0-local-10.0.130-410.48/7fa2af80.pub

レポジトリのアップデートをします。

$ sudo apt-get update

CUDAをインストールします(すでにインストールしているけどなぜ?)。

$ sudo apt-get install cuda

パスを通します。

$ export PATH=/usr/local/cuda-10.0/bin${PATH:+:${PATH}}

以下のコマンドでPower9が動くか確認します。

$ systemctl status nvidia-persistenced

エラーや無反応ならこっちを実行。

$ sudo systemctl enable nvidia-persistenced

再起動します

reboot

cuDNNのインストール

まずはドライバーとCUDAが大丈夫か確認します。

$ nvidia-smi

結果がこちら

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 418.67       Driver Version: 418.67       CUDA Version: 10.1     |
|-------------------------------+----------------------+----------------------+

悲しいことにCUDAが10.1になっていました。仕方がないのでCUDA10.1用のファイルでインストールします。

Download cuDNN v7.5.1 (April 22, 2019), for CUDA 10.1にここからアクセスします。アクセスするときにNVIDIAのアカウントの作成とログインが必要です。

次にcuDNN Runtime Library for Ubuntu18.04 (Deb)と書いてあるリンクを押してダウンロードします。

cuDNN Developer Library for Ubuntu18.04 (Deb)の方を押してインストールしようとすると以下のようなエラーに悩まされます。意外と皆さんこの罠にかかっているようです。

dpkg: dependency problems prevent configuration of libcudnn7-dev:
libcudnn7-dev depends on libcudnn7 (= 7.1.1.5-1+cuda8.0); however:
Package libcudnn7 is not installed.

dpkg: error processing package libcudnn7-dev (--install):
dependency problems - leaving unconfigured
Errors were encountered while processing:
libcudnn7-dev

github.com

次にインストールします。

$ sudo dpkg -i libcudnn7_7.5.1.10-1+cuda10.1_amd64.deb

CUPTI

CUPTIはCUDA Toolkitについてくるのでパスを通すだけで完了です。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/extras/CUPTI/lib64

tensorflowのインストール

以下のコードでインストールします

pip install --user tensorflow-gpu

まさかのエラー

TensorFlowが動くか確認するために以下のコードを実行します。

$ python -c "import tensorflow as tf; tf.enable_eager_execution(); print(tf.reduce_sum(tf.random_normal([1000, 1000])))"

結果がこちら

Traceback (most recent call last):
(省略)

Failed to load the native TensorFlow runtime.

See https://www.tensorflow.org/install/errors

for some common reasons and solutions.  Include the entire stack trace
above this error message when asking for help.

残念ながら動きません。

成功編:全てTnesorFlowのページに従ってインストール

気を取り直して別の方法を探ります。とりあえずTensroFlowのページLinux setupの部分をそのまま実行してみることにしました。

www.tensorflow.org

CUDAのアンインストール

まずはCUDAとその周辺を以下のコマンドでキレイにアンインストールします。

$ sudo apt-get --purge remove cuda
$ sudo apt autoremove

RTX2080Tiのドライバーもアンインストールされました。

CUDAその他諸々のインストール

以下のコマンドを順番に実行します

まずはパスを通します。

$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/extras/CUPTI/lib64

NVIDIAパッケージレポジトリーを追加します(cudaのインストール?)。

$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-repo-ubuntu1804_10.0.130-1_amd64.deb
$ sudo dpkg -i cuda-repo-ubuntu1804_10.0.130-1_amd64.deb
$ sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
$ sudo apt-get update
$ wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb
$ sudo apt install ./nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb
$ sudo apt-get update

NVIDIAドライバー(GPUドライバー?)をインストールします。

$ sudo apt-get install --no-install-recommends nvidia-driver-410

再起動します。

$ reboot

GPUドライバーとCUDAを確認します

$ nvidia-smi

結果

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 410.79       Driver Version: 410.79       CUDA Version: 10.0     |
|-------------------------------+----------------------+----------------------+

いい感じです。

次にdevelopment and runtime librariesをインストールします(cuDNNかな?)。

sudo apt-get install --no-install-recommends \
    cuda-10-0 \
    libcudnn7=7.4.1.5-1+cuda10.0  \
    libcudnn7-dev=7.4.1.5-1+cuda10.0

再起動します。

$ reboot

GPUドライバーとCUDAを確認します。

$ nvidia-smi

結果

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 418.67       Driver Version: 418.67       CUDA Version: 10.1     |
|-------------------------------+----------------------+----------------------+

GPUドライバーとCUDAのバージョンが上がってしまいました。

TensorFlowのインストール


以下の手順でうまく行かないときは以下のページの手順を忠実に守るとうまく行きます。少なくともこちらの記事(DeepLabCutのインストールについての備忘録)で最初にconda createで作成した仮想環境内でTensorFlowをインストールすることをおすすめします。

www.tensorflow.org



とりあえずダメ元でTensorFlowをインストールします。

$ pip install tensorflow-gpu

もしくは

$ pip install --upgrade tensorflow-gpu

動作確認をします。

$ python -c "import tensorflow as tf; tf.enable_eager_execution(); print(tf.reduce_sum(tf.random_normal([1000, 1000])))"

結果がこちら

2019-05-23 11:45:35.040712: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
2019-05-23 11:45:35.067663: I tensorflow/core/platform/profile_utils/cpu_utils.cc:94] CPU Frequency: 3600000000 Hz
2019-05-23 11:45:35.068474: I tensorflow/compiler/xla/service/service.cc:150] XLA service 0x5608f91d1a60 executing computations on platform Host. Devices:
2019-05-23 11:45:35.068502: I tensorflow/compiler/xla/service/service.cc:158]   StreamExecutor device (0): <undefined>, <undefined>
2019-05-23 11:45:35.157040: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:998] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2019-05-23 11:45:35.157632: I tensorflow/compiler/xla/service/service.cc:150] XLA service 0x5608f9282c90 executing computations on platform CUDA. Devices:
2019-05-23 11:45:35.157647: I tensorflow/compiler/xla/service/service.cc:158]   StreamExecutor device (0): GeForce RTX 2080 Ti, Compute Capability 7.5
2019-05-23 11:45:35.157768: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1433] Found device 0 with properties: 
name: GeForce RTX 2080 Ti major: 7 minor: 5 memoryClockRate(GHz): 1.545
pciBusID: 0000:01:00.0
totalMemory: 10.73GiB freeMemory: 10.25GiB
2019-05-23 11:45:35.157778: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1512] Adding visible gpu devices: 0
2019-05-23 11:45:35.158442: I tensorflow/core/common_runtime/gpu/gpu_device.cc:984] Device interconnect StreamExecutor with strength 1 edge matrix:
2019-05-23 11:45:35.158450: I tensorflow/core/common_runtime/gpu/gpu_device.cc:990]      0 
2019-05-23 11:45:35.158471: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1003] 0:   N 
2019-05-23 11:45:35.158546: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1115] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 9974 MB memory) -> physical GPU (device: 0, name: GeForce RTX 2080 Ti, pci bus id: 0000:01:00.0, compute capability: 7.5)
tf.Tensor(-505.3744, shape=(), dtype=float32)

動いています。成功です。

まとめ

TensorFlowのインストール成功の秘訣は小難しいことは考えずに黙ってTensroFlowのページのコマンドに従うことにあるようです。それに、はじめからGPUドライバーを入れる必要はなさそうです。