Ubuntu 18.04にTensorFlowのインストール
こんにちは
今回はUbuntu18.04+GeForce RTX 2080TiのパソコンにTensorFlowをインストールする方法をまとめました。以前にDeepLabCutのインストールの方法をまとめましたが、諸事情からもう一度インストールし直すことになってしまい、その記事に従ってやってみましたが、TensorFlowのところでつまづいてしまいました。そこでTensorFlowのインストール方法をまとめなおしました。なお、今回は失敗した部分も含め試行錯誤の過程を全て公開します。
失敗編:CUDA Toolkitのインストール→TensorFlowのインストール
TensorFlowを動かすのに必要なもの
こちらのTensorFlowのページいわく以下のものが必要なようです
GPUドライバーとCUDAのバージョンを確認
予めこちら記事に従ってRTX2080Tiのドライバーをインストールしました。
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をインストールします。
まずは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
これを実行してエラーが出なければ大丈夫です。
$ 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
次にインストールします。
$ 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の部分をそのまま実行してみることにしました。
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をインストールすることをおすすめします。
とりあえずダメ元で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ドライバーを入れる必要はなさそうです。