シンギュラリティへの道：ディープラーニングしてみる：概要と準備編

# 概要
本エントリーは、早くシンギュラリティが実現して、生理食塩の水槽に脳ミソ一つでプカプカ浮かびながら、無限大の時間と空間を飛び回りたいと望んでいる筆者のポエムです。

#ディープラーニング
「シンギュラリティ　＝　超AI」ということで、まずは流行りのディープラーニングを実際に動かして体験してみようというのが本エントリの目的です。

#ガイド本
独学で新しい技術を学ぶ時、１冊はそのテーマの実装方法が詳細してある技術本を購入して、実際に動かして遊んでみるのが早道だというのが私の経験則です。

ディープラーニングについては、2年ぐらい前から、良い本がないかと本屋をチェックしていましたが、なかなか丁度良い感じのものがなかったのですが、昨年末にこちらの本を見つけ、今回はこの本で紹介されているサンプルをとにかく全部動かしてみることを目的にしました。

実装　ディープラーニング　オーム社　¥3,200-　税別
![download.jpg](https://qiita-image-store.s3.amazonaws.com/0/120330/ab3a4427-48cb-1a3e-f659-e27c2668d9d6.jpeg)



# 環境構築
## ハードウェア
ディープラーニングをやるために必要なものは何かと言えば「GPU」ですね。
当初はAWSのGPUインスタンスを使って構築しようと目論んでいましたが、7年ぐらい前に3Dオンラインゲーム用に構築したゲームマシンのパーツをリニューアルしてディープラーニーングマシンを構築してみました。

スペックは以下の通り
【リニューアル前】
* CPU： AMD PhenomⅡX4 980  BE
* メモリ：８GB
* ハードディスク：2TB
* GPU： Redion 6700
* 電源： 550W

【リニューアル後】
* CPU：AMD PhenomⅡX6 1090T BE 
* メモリ：16GB
* ハードディスク 2TB
* GPU：GTX 1080Ti
* 電源：850W

CPUは中古購入して４コアから６コアへ、メモリはもっと積みたいのですが、古いマザボのため最大搭載できる16GBとしています。
ガイド本では３2GBで構成されていましたが、各サンプルプログラムを動かす限りでは、TOPコマンドでメモリ使用量を見ていたかぎりではそこまで使うことはなく、スワップも発生していなかったと思います。
そして目玉のGPUは、一般向用途向けGPUとしては最高峰の1080Tiを奢っちゃいました。
ディープラーニング環境はubuntuですが、構築前にWidnowsで動かしましたが確かにすごいですね。
このマザボでは到底再生不可能だろうと思っていた、ベンチマーク動画を軽々と再生してくれました。
そして電源。こちらは当初換装は考えていなかったのですが、GPUのリクアイメントが600Wだったのに気づき、急遽、追加発注しました。

最近のPCのスペックからすると、GPU以外かなり弱々しいですが、筆者の環境ではガイド本の全てのサンプルを動かすことができました。
また、トレーニングや推論にかかる時間も、ほぼ、ガイド本で紹介されている時間と同じ程度でした。
ちなみに、ガイド本ではGTX 1070を利用です。

## OS
OSはubunt Server 16.04 LTS を本家からISOイメージを持ってきてDesktopが使えるようにインストールしました。
ガイド本でブラウザを使う項目のがあるので、Desktop版をインストールしようとしましたが、なぜか、このマシン構成ではインストール途中で落ちてしまうため、諦めてServer 版をインストールしています。
尚、ガイド本では14.04.5 LTSを使っています。

この辺の違いにより、サンプルプログラム実行中にワーニングが出たりしていましたが、動作自体は問題ありませんでした。

## ミドルウェア
Linux環境が整ったら、諸々のミドルウェアをインストールして行きます。

ディープラーニーグの要のCUDA、cuDNN、Anacondanaなどなど。
基本的にはブラウザで落としてきてインストールですが、ガイド本にかなり詳細に記載されていますので、その通りに進めれば問題なくインストールできると思います。
ただ、CUDAあたりは1.9GBあり、ダウンロードに30分ぐらいかかったりします。

あと、パスの追加などもありますが、ミスるとはまるので要注意です。
しっかり、ミスって、ほとんどのコマンドが使えなくなり、こちらのお世話になりました。

http://qiita.com/noraworld/items/4556f91bc31f641d187d

あとそれぞれ最新版を使おうとしましたが、依存関係があったりしますので、ガイド本にある組み合わせでないと、うまく動かないケースがありました。
cuDNNはV７が出ていたので使おうとしましたが、ダメでした。おとなしくV.5.1を使います。

一通り、インストールできたら、nvidia-smiコマンドを実行して、GPUを認識しているか確認します。


```
$ nvidia-smi
Fri Aug 25 14:31:47 2017       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 375.66                 Driver Version: 375.66                    |
|-------------------------------+----------------------+----------------------+
| 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 GTX 108...  Off  | 0000:01:00.0     Off |                  N/A |
|  0%   44C    P0    56W / 250W |      0MiB / 11171MiB |      3%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID  Type  Process name                               Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+
```

はい、しっかり認識してもらっています。

せっかくTi使っているのに、グラフィックボード名が108…になっているのがちょっと悔しいですね。はい。

ちなみに、以下のようにコマンドを叩くと1秒おきに更新してくれるので、トレーニング中の動作状況をほぼリアルタイムでモニタできます。

```
nvidia-smi -l 1
```

たまに、300W超えたりするのが、「ディープラーニーングゥーしてルゥー」という感じで素敵です。

以上がガイド本の１章「本書の概要と準備」にあたります。

長くなったので一旦ここまで。

続きはこちら：https://qiita.com/fs-shinji-tomiyama/items/5bf63f6f5b20a9fd9b5f