Ubuntu18.04 でTensorFlow-GPU のセットアップ

#実施環境
Ubuntu 18.04 LTS 日本語 Remix
NVIDIA Geforce GTX 1080

# 参考にしたサイト
基本的にこれにそってセットアップしました。
https://qiita.com/sho8e69/items/66c1662c49ac89a024be
https://medium.com/intro-to-artificial-intelligence/install-tensorflow-gpu-on-ubuntu18-04-ff311a8bd4d6

1. セキュアブートの無効化
元からセキュアブートが無効になっていたので割愛

2. nouveauの停止
3. Nvidia driverのインストール
サイトの通りに実行したら出来たので割愛

# CUDAとcuDNNのインストール
https://www.tensorflow.org/install/gpu
>Software requirements
>The following NVIDIA® software must be installed on your system:
>1. NVIDIA® GPU drivers — CUDA 9.0 requires 384.x or higher.
>2. CUDA® Toolkit — TensorFlow supports CUDA 9.0.
>3. (CUPTI ships with the CUDA Toolkit.)
>4. cuDNN SDK (>= 7.2)

11/28現在最新版のTensorflow 1.12.0は、CUDA9.0にしか対応してないので、CUDA9.0をインストールしました。cuDNNは最新版をインストールしました。

### CUDA 9.0 のインストール
[CUDA Toolkit 9.0 Downloads](https://developer.nvidia.com/cuda-90-download-archive?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=1704&target_type=runfilelocal)

上記のファイルをダウンロードしたら、以下のコマンドでインストールします。

```bash
cd Downloads
sudo chmod +x cuda_9.0.176_384.81_linux.run
sudo chmod +x cuda_9.0.176.1_linux.run
sudo chmod +x cuda_9.0.176.2_linux.run
sudo chmod +x cuda_9.0.176.3_linux.run
sudo chmod +x cuda_9.0.176.4_linux.run

./cuda_9.0.176_384.81_linux.run
./cuda_9.0.176.1_linux.run
./cuda_9.0.176.2_linux.run
./cuda_9.0.176.3_linux.run
./cuda_9.0.176.4_linux.run
```

### cuDNN のインストール
[cuDNN 7.4.1[Nov 8, 2018] for CUDA 9.0](https://developer.nvidia.com/rdp/cudnn-download)

会員登録してダウンロードし、以下のコマンドでインストールします。


```bash
tar xzvf cudnn-9.0-linux-x64-v7.4.1.5.tgz
sudo cp cuda/include/cudnn.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn.h
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*
```

### PATHの設定

```bash
cd
nano ~/.bashrc
```

.bashrcにライブラリのPATHを書き込みます。

```bash:.bashrc
## CUDA and cuDNN paths
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64"
export CUDA_HOME=/usr/local/cuda
export PATH="$PATH:/usr/local/cuda/bin"
```

PATHの更新を行います。

```bash
source ~/.bashrc
```

# pipenvのインストール

### python3-pip のインストール
[How to install Pip on Ubuntu 18.04](https://linuxize.com/post/how-to-install-pip-on-ubuntu-18.04/)

```bash
sudo apt update
sudo apt install python3-pip
```

### ***pipをアップデートしてしまいエラーが出た場合***
[pip3コマンド自体のインストール](https://python.open-code.club/%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA/pip3%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E8%87%AA%E4%BD%93%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB.html)
間違えて、~~pip3 install --upgrade pip~~を実行してしまいエラーで使えなくなってしまったので、備忘録として書いておきます。

```console
# pip3コマンドがエラーで使えなくなったら
$ pip3 --version
Traceback (most recent call last):
  File "/usr/bin/pip3", line 9, in <module>
    from pip import main
ImportError: cannot import name 'main'

# 再インストール
sudo python3 -m pip uninstall pip
sudo apt install python3-pip --reinstall
```

### pipenv のインストール

```bash
cd
sudo pip3 install pipenv
```

### pipenvの仮想環境の作成先の変更
[Pipenvで仮想環境をプロジェクトディレクトリの下に作る](https://dackdive.hateblo.jp/entry/2018/05/16/100000)
.bashrcに以下を追記。

```bash:.bashrc
export PIPENV_VENV_IN_PROJECT=true
```


### 新規のpython環境の構築とtensorflow-gpuの導入

```bash
cd Documents
mkdir tensorflow; cd $_
pipenv --python 3.6 # 3.6.7をインストール
pipenv install tensorflow-gpu
```

### テスト

```bash
touch test.py
nano $_
```

下記のテスト用コードを test.py に書き込みます。

```python:test.py
import tensorflow as tf
hello = tf.constant('Hello there!')
print(sess.run(hello))
```
実行してみます。

```bash
pipenv run python test.py
```
```bash
'/device:GPU:0'
```
エラーが表示されず、このように表示されればOKです。