Windows10のGPU（GTX1080Ti）でKerasを使う（デュアルブートUbuntu16.04）

 nVidia製のGPUが搭載されたWindows10機　[STYLE-M037-i5-XNR [Windows 10 Home]](https://www.pc-koubou.jp/products/detail.php?product_id=609966)　でディープラーニングライブラリを動作させるまでの覚え書きです。構成は以下の通りです。

- OS: Windows 10 Home 64ビット
- プロセッサー: Core i5-8400
- メインメモリ: 8GB×2
- SSD: 240GB Serial-ATA SSD
- HDD: 1TB Serial-ATA HDD
- グラフィックボード: GeForce GTX 1080 Ti 11GB GDDR5X

今回設定するソフトの構成は以下の通りになります。

- Ubuntu GNOME 16.04.3 LTS
- cuda-9.0
- cuDNN v7.0.5 
- Python 3.5.2 
- tensorflow-gpu 1.5.0
- keras 2.1.4

## Windows10でデュアルブートUbuntu16.04

Windows10にUbuntu16.04デュアルブートする際、グラフィックボードを認識させるところがつまずきやすいポイントになります。以下の２記事を参考に環境構築ができましたので紹介します。

[Windows 10でUEFI (BIOS) 画面を起動する手順 - ぼくんちのTV別館](https://freesoft.tvbok.com/win10/access_uefi_bios_setup.html)

WindowsでBIOS画面を開くというと「F2連打」のイメージがあったのですが、最近ではUEFIというシステムを使ってファームウェアの設定を行います。

[Ubuntu16.04をWindows10とデュアルブート in UEFI - 極楽とんぼのロボット製作記](http://www.g104robo.com/entry/ubuntu-dualboot-win10-uefi)

OSイメージはこちらのブログ記事と同様にUbuntuGNOME16.04.3LTSのイメージをダウンロードしました。

Ubuntuをマウントする際、Windows10側でいくつか設定が必要です。具体的には「高速スタートアップの無効化」「パーティション作成」「Secure Boot無効化」「Fast Boot無効化」が必要になります。

USBからUbuntuを起動させる際、グラフィックボードが認識されず、エラーになります。上記ブログ記事より対応方法を引用します。

>これはUbuntuがGPUをうまく認識できないために発生する不具合なようです。
Try Ubuntu にカーソルを合わせてeキーを押すと起動設定画面が出てきます。カーソルキーで移動して"quiet splash"のところを、"nomodeset"に変更してください。変更したらF10キーを押してBootします。

Ubuntuをインストールした段階では画面がうまく表示されませんが、nVidiaのグラフィックボード用のドライバをインストール後正常に表示されるようになります。

最後に再びUEFIよりハードディスクの起動をUbuntuで行うように指定変更します。

![IMAG0028.jpg](https://qiita-image-store.s3.amazonaws.com/0/47128/1e76f255-91cd-eda8-d8e8-b19e47aed508.jpeg)

電源を入れるとGRUBが立ち上がり、OSを選択できるようになりました。

![Screenshot from 2018-02-25 17-53-28.png](https://qiita-image-store.s3.amazonaws.com/0/47128/63cb21ff-f116-54b9-0e06-cc8bb9e848cf.png)

GNOMEはシンプルで良いのですが少し見た目が寂しいので、テーマを[Paper](https://snwh.org/paper)、壁紙は[Sylvain Sarrailh](https://www.artstation.com/tohad)さんのイラストを使ってみました。

## CUDAインストール

CUDAのインストールに関して、Tensorflowのバージョンに合わせ公式ページより対応するものを確認する必要があります。

[Installing TensorFlow on Ubuntu - TensorFlow](https://www.tensorflow.org/install/install_linux)

「CUDA Toolkit 9.0.」と「cuDNN v7.0.」が必要と記載してありますのでそれに合わせてインストールします。 （2018年2月現在）※最新版の「CUDA Toolkit 9.1.」を最初入れたのですが動作しませんでした。

![CUDA Toolkit 9 0 Downloads   NVIDIA Developer.png](https://qiita-image-store.s3.amazonaws.com/0/47128/dadbe638-dc26-5229-20b0-efc868042fa2.png)

[CUDA Toolkit 9 0 Downloads - NVIDIA Developer](https://developer.nvidia.com/cuda-90-download-archive)

「Linux > x86_64」「Ubuntu」「16.04」「deb[network]」を選択しダウンロードし、ドキュメントに沿って展開、インストールします。

```bash:terminal
$ 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
$ sudo apt-get install cuda-libraries-9-0
```
ドキュメントの最後に書いてあるのですが、`install cuda`する際にバージョン指定をしないと最新版をインストールするように指定してしまいエラーになります。ここでは `cuda-libraries-9-0` を指定します。

## cuDNN 7.0 のインストール

nVidiaのアカウントを使いログイン後、「CUDA Toolkit 9.0.」に対応した「cuDNN v7.0.」をダウンロードします。

![cuDNN Download   NVIDIA Developer.png](https://qiita-image-store.s3.amazonaws.com/0/47128/095469b0-8e78-381f-2259-99a257bc19ae.png)

[cuDNN Download - NVIDIA Developer](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)」をダウンロードします。

![Image 2018-02-25 13-13-25.png](https://qiita-image-store.s3.amazonaws.com/0/47128/34e3bb84-bcf9-8533-e932-331cc496e3de.png)

[以前](https://qiita.com/PonDad/items/ae27364ce2e4734c7588) パスを通せずはまったのですが、現在ではdebパッケージを展開すれば自動的にインストールされるようになりました。

```bash:terminal
$ sudo dpkg -i libcudnn7_7.0.5.15-1+cuda9.0_amd64.deb
$ sudo dpkg -i libcudnn7-dev_7.0.5.15-1+cuda9.0_amd64.deb
$ sudo dpkg -i libcudnn7-doc_7.0.5.15-1+cuda9.0_amd64.deb
```

## PythonとTensorflowのインストール

Python3系のインストールは、今回は`pnev`や`anaconda`などを使わず`sudo apt-get`を使いそのまま入れました。

Tensorflowの公式ページに沿ってインストールします。

```bash
$ sudo apt-get install python3-pip python3-dev
$ pip3 install tensorflow-gpu
```

`HelloWorld`を試してみます。

![Screenshot from 2018-02-25 17-43-33.png](https://qiita-image-store.s3.amazonaws.com/0/47128/bdbabc78-3328-0d59-1720-c930ea76cbce.png)



## Kerasのインストール

TensorFlow1.4以降kerasのメソッドがTensorFlowから利用できるようになりましたが、今まで通り使用するためライブラリをインストールします。

```bash
$ pip3 install keras
```

サンプルのCNNを利用したMNISTを実行してみます。

![Screenshot from 2018-02-25 17-45-32.png](https://qiita-image-store.s3.amazonaws.com/0/47128/01fa3240-d507-f96b-21ed-80865f72cb3e.png)

## まとめ

iMac2013に入れていたGPUはGT750Mだったのですが、それと比較すると体感速度で10倍くらい速くなったと感じました。GPUメモリも11GBあるので今まで出来なかったようなモデルも試してみようと思います。では。