Posted at

TensorFlow-GPU 環境構築 2018年3月

More than 1 year has passed since last update.


はじめに

機械学習系の環境を定期的に一から作りなおすことにしている

そこで得たノウハウを記録に残しておきたい

クリーンインストールした Linux でやっていく

ローカルマシンとして利用する想定

Linux Mint 18.3 Cinnamon 64-bit

Ubuntu 16.04 でもたぶん同じ方法でいけるはず

ただしデスクトップ環境としては、 Mint のほうがより安定していると感じた

MacでUbuntu 16.04ブータブルUSBの作成

http://blog-sk.com/mac/ubuntu_bootusb/


  • i5-2500K

  • GTX980


CUDA 関係

NVIDIA CUDA Installation Guide for Linux

http://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html

インストールには


  • deb (apt-get)

  • run

の2種類あるが、いろいろと楽な deb を使う


準備

TensorFlow はビルド済みのを導入するので、CUDA 系のバージョンをあらかじめ確認しておかなければいけない

トラブルの大半はバージョン関係の問題なので、ここが地味に大事

https://www.tensorflow.org/install/install_sources#tested_source_configurations

tf-cuda-version.png

tensorflow-1.6/1.5 の両方に対応している CUDA 9, cuDNN 7 にする

CUDA Toolkit のページから Legacy Releases

https://developer.nvidia.com/cuda-toolkit-archive

cudainstall.png

ダウンロードして3行目までを実行

$ sudo dpkg -i cuda-repo-ubuntu1604_9.0.176-1_amd64.deb

$ sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
$ sudo apt-get update


Driver (nvidia-390) をインストール

このタイミングでインストールしておかないと依存関係が解決されなかった(なぜだかよくわからないが)

再起動が必要

driver.png


CUDA 9.0 をインストール

ちゃんとバージョンを指定する

指定しておかないと、最新版 9.1 が入ってややこしいことになる(とは言っても PATH の指定でどうとでもなるが)

$ sudo apt-get install cuda-9-0


CUDA インストール後

PATH 追加のとき、直接ファイルを編集せずに echo を使うなら、 $ をエスケープしないといけない

PATH 追加先は .profile(私の場合)


  • ubuntu 系

  • ローカルで使用

  • .bash_login, .bash_profile がないことを確認

$ echo "export PATH=/usr/local/cuda-9.0/bin\${PATH:+:\${PATH}}" >> ~/.profile

$ source ~/.profile
$ sudo /usr/bin/nvidia-persistenced --verbose
$ sudo apt-get install g++ freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libglu1-mesa libglu1-mesa-dev


cuDNN 7.0 をインストール

アカウント作成とログインが必要

https://developer.nvidia.com/rdp/cudnn-download


  • cuDNN v7.0.5 Runtime Library for Ubuntu16.04 (Deb)

  • cuDNN v7.0.5 Developer Library for Ubuntu16.04 (Deb)

  • cuDNN v7.0.5 Code Samples and User Guide for Ubuntu16.04 (Deb)

$ sudo dpkg -i *.deb


Python 一式 (Anaconda) インストール


  • NumPy や Jupyter などをいちいちインストールするのが面倒

  • 必要なら新たに仮想環境をつくれる

  • トラブったらインストールフォルダごと消し去ればOK

Anaconda3 ダウンロード

https://www.anaconda.com/download/#linux

最近だと PATH は追加しないで、 conda activate/deactivate を使うのが標準的

下の設定だと、 zsh を立ち上げたら自動的にデフォルトの仮想環境 (base) に入る

$ sh ./Anaconda3-5.1.0-Linux-x86_64.sh

$ echo ". /home/<username>/anaconda3/etc/profile.d/conda.sh" >> ~/.bashrc
$ echo ". /home/<username>/anaconda3/etc/profile.d/conda.sh" >> ~/.zshrc
$ echo "conda activate" >> ~/.zshrc


TensorFlow 1.6 インストール

Installing Tensorflow on Ubuntu

https://www.tensorflow.org/install/install_linux

面倒なのでデフォルトの仮想環境にインストールする

$ sudo apt-get install cuda-command-line-tools

$ echo "export LD_LIBRARY_PATH=\${LD_LIBRARY_PATH}\${LD_LIBRARY_PATH:+:}/usr/local/cuda/extras/CUPTI/lib64" >> ~/.profile
$ conda activate
(base)$ pip install --ignore-installed --upgrade https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.6.0-cp36-cp36m-linux_x86_64.whl


動作チェック

Using GPUs | TensorFlow Programmer's Guide

https://www.tensorflow.org/programmers_guide/using_gpu

$ conda activate

(base)$ jupyter notebook


  1. Jupyter notebook を起動

  2. New → Python 3 から新しくノートブックを作成

  3. 下の内容をセルに入力し、 Shift+Enter で実行


Jupyter_notebook

import tensorflow as tf

hello = tf.constant('Hello, TensorFlow!')
with tf.Session(config=tf.ConfigProto(log_device_placement=True)) as sess:
print(sess.run(hello))


tf-test2.png

import 時の Warning は気にしなくてよさそう

Jupyter を起動したターミナルを確認し、 GPU が認識されていて、エラーが出ていなければ OK


ログ

2018-03-04 11:16:58.334216: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:898] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero

2018-03-04 11:16:58.334554: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1212] Found device 0 with properties:
name: GeForce GTX 980 major: 5 minor: 2 memoryClockRate(GHz): 1.291
pciBusID: 0000:01:00.0
totalMemory: 3.95GiB freeMemory: 3.45GiB
2018-03-04 11:16:58.334583: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1312] Adding visible gpu devices: 0
2018-03-04 11:16:58.557392: I tensorflow/core/common_runtime/gpu/gpu_device.cc:993] Creating TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 3178 MB memory) -> physical GPU (device: 0, name: GeForce GTX 980, pci bus id: 0000:01:00.0, compute capability: 5.2)
Device mapping:
/job:localhost/replica:0/task:0/device:GPU:0 -> device: 0, name: GeForce GTX 980, pci bus id: 0000:01:00.0, compute capability: 5.2
2018-03-04 11:16:58.585013: I tensorflow/core/common_runtime/direct_session.cc:297] Device mapping:
/job:localhost/replica:0/task:0/device:GPU:0 -> device: 0, name: GeForce GTX 980, pci bus id: 0000:01:00.0, compute capability: 5.2

Const: (Const): /job:localhost/replica:0/task:0/device:CPU:0
2018-03-04 11:16:58.595781: I tensorflow/core/common_runtime/placer.cc:875] Const: (Const)/job:localhost/replica:0/task:0/device:CPU:0