初心者でも簡単 IBM Bluemix Infrastructure(旧Softlayer)でDeep Learning :) Part 2/2

本稿ではIBM Bluemix Infrastructure上で仮想サーバーを構築し、Deep Learning Frameworkの1つである
TensorFLowを用いてCifar10を実装するまでのHOW TOを解説していきます。初心者でも1時間ほどでできます！
Part 1/2　IBM Bluemix Infrastructureの注文方法
Part 2/2　TensorFlowをクラウドに導入する方法
クラウド運用上のセキュリティ注意点なども簡単にお伝えしますので、どうぞご参考にしてください！

#目次
1. 先ずはAnaconda?
2. Anacondaのインストール
3. TensorFlowのインストール
4. Jupyterのインストール
5. Jupyterの環境設定
6. TensorFlow で画像認識 (CNN 法)
7. 最後にクラウドのセキュリティについて


Part1/2でサーバー構築が完了後は、いよいよDeep Learning Frameworkのインストールです！


#1. まずはAnaconda?
![スクリーンショット 2017-03-01 15.20.57.png](https://qiita-image-store.s3.amazonaws.com/0/166032/8c962d12-e350-f437-4fd7-3d48a39928c6.png)
(https://www.continuum.io/Downloads より引用)
とあるように、Pythonによって提供されている優れたopen data science プラットフォームです。

それって何？

と思いますよね。要はデータ分析などに重きが置かれたPythonのディストリビューションの1つなんです！
TensorFlowはPyhtonがもともと開発言語となっているため、TensorFlowを扱うためにはPythonが必要なんです。Anacondaをインストールすることで、Pythonを使用するために必要なモジュールやPythonのバージョンが簡単にインストールでき、TensorFlowを簡単に使い始めることができます。

#2. Anacondaのインストール
では、実際に構築したサーバーにアクセスしAnacondaをインストールしましょう。

IBM Bluemix Infrastructureで構築したサーバー情報を管理画面から確認します。
[管理画面](https://control.softlayer.com/) >> Devices >> Device Listを選択、今回構築したサーバーをクリックします。
すると、構築したサーバーの様々な情報を参照できます。
(サーバーの電源がついているか、ネットワークと接続されているか etc. )

ここでご確認して頂きたいのはPublic IPアドレスとPASSWORDです！

Configuration・Tickets・Usage・Bandwidth・Monitoring・Security・Passwords・Strage等の
様々なタブがありますが、Public IPアドレスはそのタブ上にまたパスワードの確認はPasswordsタブをクリックしてください。セキュリティー上マウスでPASSWORDにカーソルを合わせないとパスワードが参照できないようになっていますので、ご注意ください。確認した後はお持ちのPCからアクセスします！(私はMacを使用しているので、Terminal.appから)

[サーバーにアクセス]
``$ssh root@xxx.xxx.xxx.xxx``　と入力すると、
(xxx.xxx.xxx.xxx.には先ほどの画面で確認したIPアドレスを入力してください)
``password:``とパスワードの入力を求められます。先ほど確認したパスワードを入力してください。
``Welcome to Ubuntu ``となればアクセス成功です。

ではAnacondaをインストールします。
``$wget https://repo.continuum.io/archive/Anaconda3-4.2.0-Linux-x86_64.sh``と入力します。

```
HTTP request sent, awaiting response... 200
Length: 478051940 (456M) [application/x-sh]
Saving to: ‘Anaconda3-4.2.0-Linux-x86_64.sh’
Anaconda3-4.2.0-Lin 100%[===================>] 455.91M   144MB/s    in 3.3s
```

とAnacondaがインストールできればオッケーです。ではAnacondaを展開します。

``$bash Anaconda3-4.2.0-Linux-x86_64.sh``と入力し、展開させてください。


```
Welcome to Anaconda3 4.2.0 (by Continuum Analytics, Inc.)

In order to continue the installation process, please review the license agreement.
Please, press ENTER to continue
>>> 
================
Anaconda License
================
..............
..............
..............

Do you approve the license terms? [yes|no]
>>> yes
```

ENTERやyesと入力する必要があるので、適宜行います。

``Thank you for installing Anaconda3!``となればAnacondaインストール完了です！！


#3. TensorFlowのインストール
では次に今回のDeep Learningで使用するTensorFlowをインストールします。
``$conda create -n tensorflow python=3.5``と入力すると、

```
Fetching package metadata .......
Solving package specifications: ..........

Package plan for installation in environment /root/anaconda3/envs/tensorflow:

The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    openssl-1.0.2k             |                0         3.2 MB
    xz-5.2.2                   |                1         669 KB
    python-3.5.3               |                0        15.9 MB
    pip-9.0.1                  |           py35_1         1.7 MB
    ------------------------------------------------------------
                                           Total:        21.4 MB

The following NEW packages will be INSTALLED:

    openssl:    1.0.2k-0     
    pip:        9.0.1-py35_1 
    python:     3.5.3-0      
    readline:   6.2-2        
    setuptools: 27.2.0-py35_0
    sqlite:     3.13.0-0     
    tk:         8.5.18-0     
    wheel:      0.29.0-py35_0
    xz:         5.2.2-1      
    zlib:       1.2.8-3      

Proceed ([y]/n)? y
```

となるので、ここではyesのyを入力し続行してください。

```
Fetching packages ...
openssl-1.0.2k 100% |################################################| Time: 0:00:00  53.65 MB/s
xz-5.2.2-1.tar 100% |################################################| Time: 0:00:00  37.46 MB/s
python-3.5.3-0 100% |################################################| Time: 0:00:00  39.73 MB/s
pip-9.0.1-py35 100% |################################################| Time: 0:00:00  39.75 MB/s
Extracting packages ...
[      COMPLETE      ]|###################################################################| 100%
Linking packages ...
[      COMPLETE      ]|###################################################################| 100%
#
# To activate this environment, use:
# > source activate tensorflow
#
# To deactivate this environment, use:
# > source deactivate tensorflow
#
```

上記のガイドにあるように、``$source activate tensorflow``と入力し、起動させます。
``$export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.9.0-cp35-cp35m-linux_x86_64.whl``、``$pip install --ignore-installed --upgrade $TF_BINARY_URL``と入力してください。

```
Collecting tensorflow==0.9.0 from https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.9.0-cp35-cp35m-linux_x86_64.whl
  Downloading https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.9.0-cp35-cp35m-linux_x86_64.whl (27.4MB)
    100% |████████████████████████████████| 27.4MB 33kB/s 
Collecting protobuf==3.0.0b2 (from tensorflow==0.9.0)
  Downloading protobuf-3.0.0b2-py2.py3-none-any.whl (326kB)
    100% |████████████████████████████████| 327kB 2.9MB/s 
Collecting wheel>=0.26 (from tensorflow==0.9.0)
  Downloading wheel-0.29.0-py2.py3-none-any.whl (66kB)
    100% |████████████████████████████████| 71kB 8.7MB/s 
Collecting six>=1.10.0 (from tensorflow==0.9.0)
  Downloading six-1.10.0-py2.py3-none-any.whl
Collecting numpy>=1.8.2 (from tensorflow==0.9.0)
  Downloading numpy-1.12.0-cp35-cp35m-manylinux1_x86_64.whl (16.8MB)
    100% |████████████████████████████████| 16.8MB 56kB/s 
Collecting setuptools (from protobuf==3.0.0b2->tensorflow==0.9.0)
  Downloading setuptools-34.3.0-py2.py3-none-any.whl (389kB)
    100% |████████████████████████████████| 399kB 2.3MB/s 
Collecting packaging>=16.8 (from setuptools->protobuf==3.0.0b2->tensorflow==0.9.0)
  Downloading packaging-16.8-py2.py3-none-any.whl
Collecting appdirs>=1.4.0 (from setuptools->protobuf==3.0.0b2->tensorflow==0.9.0)
  Downloading appdirs-1.4.2-py2.py3-none-any.whl
Collecting pyparsing (from packaging>=16.8->setuptools->protobuf==3.0.0b2->tensorflow==0.9.0)
  Downloading pyparsing-2.1.10-py2.py3-none-any.whl (56kB)
    100% |████████████████████████████████| 61kB 8.3MB/s 
Installing collected packages: six, pyparsing, packaging, appdirs, setuptools, protobuf, wheel, numpy, tensorflow
Successfully installed appdirs-1.4.2 numpy-1.12.0 packaging-16.8 protobuf-3.0.0b2 pyparsing-2.1.10 setuptools-34.3.0 six-1.10.0 tensorflow-0.9.0 wheel-0.29.0
```

とSuccessfully installedになれば準備完了です！！お疲れ様です。m(.o.)m
ここまでできればもうDeep Learningが始められます。

ですが！

もっと快適にDeep Learningを行うためにJupyter Notebookもインストールしちゃいましょう！

#4. Jupyterのインストール
Jupyter Notebookはブラウザ上でpythonコードの実行、保存ができるツールです。「Deep Learningの過程を保存しておきたい」、「複数人で情報をシェアしたい」などブラウザのパスワードを共有すれば結果の共有などができるため大変便利です！では、実際にインストールしてみます。

``$source activate tensorflow``とTensorFlowを起動させ、
``$conda install ipython-notebook``とJupyter Notebookをインストールします。

```
Fetching package metadata .......
Solving package specifications: ..........

Package plan for installation in environment /root/anaconda3/envs/tensorflow:

The following packages will be downloaded:....  

Proceed ([y]/n)? y
```
とここでもyを入力し、インストールを開始し``COMPLETE``となるまで見守ります。
COMPLETEが表示されれば、準備万端です。ローカル上でJupyterを使う場合は以上なのですが、サーバー上でJupyter Notebookを使用する場合は設定ファイルが追加で必要になります。

#5. Jupyterの環境設定
では最後にJupyterの設定ファイルを作成します。

まずは``$jupyter notebook --generate-config``と入力し、ファイルを作成します

【パスワードの生成】

```
$python -c "import IPython;print(IPython.lib.passwd())"
Enter password: 
Verify password: 
sha1:1234567890abcdefghijklmnopqrstulol
```
上記のようにコマンドを入力し、ブラウザ上で使用するパスワードの入力をしてください。``sha1:1234567890abcdefghijklmnopqrstulol``の部分はすぐに使うのでコピっておきましょう。
次に``vi ~/.jupyter/jupyter_notebook_config.py``と入力し、先ほど作成した設定ファイルを編集します。

```
c.NotebookApp.ip = '*'  # localhost以外からもアクセス可能にする。
c.NotebookApp.port = 9999  # ポートを指定。デフォルト8888(お好きなポートを！)。
c.NotebookApp.open_browser = False  # ブラウザが自動で開かないようにする。
c.NotebookApp.password = u'sha1:1234567890abcdefghijklmnopqrstulol' #先ほど作成し、暗号化されたパスワードを入力。
```
ここまでできればTerminal.appで``$jupyter notebook``と入力すれば、快適にブラウザからTensorFLowを使うことができます。では実際にやってみましょう！

#6. TensorFlow で画像認識 (CNN 法)
画像認識をやってみましょう。
[こちら](http://pythondatascience.plavox.info/tensorflow%E3%81%A7%E3%83%87%E3%82%A3%E3%83%BC%E3%83%97%E3%83%A9%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0/tensorflow%E3%81%A7%E7%94%BB%E5%83%8F%E8%AA%8D%E8%AD%98/)のサイトで学習方法、検証方法などを簡単に参照できますので、コピペして実際にやってみてください。


今回ご紹介したサイトでは学習に時間がかかり…とあるのですが、[part1/2](http://qiita.com/keITo-k60/items/4956d5de8f45af382950)で提案させて頂いた16Coresの構成で学習を行えば、10000回の学習がたった40分程で完了します。(4Cores構成では1000回学習させるのに約20分)
私の場合実際に学習後に検証させたところ80.4%の精度を得ることができました。
![スクリーンショット 2017-03-01 17.44.50.png](https://qiita-image-store.s3.amazonaws.com/0/166032/2231e78c-0c25-8e78-bcfa-1fa4e2d929b3.png)

IBM Bluemix Infrastructureでは今回利用したCPUの他にもGPUも使用することができます。GPUも時間単位で利用することができるので「ちょこっとGPUを試してみたい」、「GPUとCPUの比較をしたい」と言ったご要望にもすぐ対応できます。私もぜひ次回はGPUでトライしてみます！皆様もぜひチャレンジしてみてください！



##7. 最後にクラウドのセキュリティについて
皆様もご承知の通り、クラウドは「使いたい時に・使いたいだけ」使用することができるとても便利なサービスです。ですが、サーバーをご自身でご利用する場合は注意が必要です！
今回のようにサーバーを自身で導入した場合は全てがまっさらなベイビーな状態。何も纏っていないのです！
どんなウィルスにも簡単にかかってしまうし、自分では何もできません。

そんな状態で赤ちゃんを放置しておきますか？　
いや、しない。まもるの(ブルゾンちえみ風:lips:)

という冗談はさておき、サーバーが立ち上がった瞬間から
あなたのサーバーはありとあらゆる脅威に晒されています。
ということで最低限次の3点
- Port番号
- Rootログイン
- Firewall
は必ず念頭におき、変更を行なってください！

詳しくは[こちら](http://qiita.com/keITo-k60/items/9d48e1428e53f01cb033)でご確認ください。



Thank you for visiting :)