2時間のGPU無料枠があるFloydhubでディープラーニング | AI Academy


# Floydhubとは
Floydhub とはDeepLearningのためのHerokuのようなサービスです。
TensorFlowやKerasを使ったプログラムをCloud上で動かすことができるサービスです。
Floydhubの最大の特徴として、2時間のGPU無料枠があるということです。
また、Cloud9のように、アカウントの作成にクレジットカードは必要ないので簡単にGPU環境を使うことが出来ます。
そして、コストもAWSの約50%で課金は秒単位でリーズナブルです。
また、TensorFlowやKeras意外にも、ChainerやPyTorchやtheano等も使えます。

# アカウント作成

https://www.floydhub.com にアクセスすると下記ページに飛びます。

![floyd1.png](https://qiita-image-store.s3.amazonaws.com/0/171715/b4d51776-1298-273e-4808-9536deb8bd58.png)

真ん中の青いボタン(Sign Up Free)から無料でアカウントを作製できます。

![floyd2.png](https://qiita-image-store.s3.amazonaws.com/0/171715/ab6b6af2-9438-8515-d9a0-652763f5fb07.png)

登録に必要なのは、5つです。

1. Email
2. username
3. password
4. Full Name
5. Company or School

以上入力して、SIGN UPを押すと下記ページに飛びます。

![4.png](https://qiita-image-store.s3.amazonaws.com/0/171715/fc81cef2-7c51-eb03-9096-565ef100becc.png)

# Get Started

Floydhubからメールが届いていますので、メールのリンクを押して認証します。
![スクリーンショット 2017-10-03 22.51.14.png](https://qiita-image-store.s3.amazonaws.com/0/171715/ed772724-5e2a-a2b2-6f9f-664648635d6b.png)

ターミナル上で、適当な作業ディレクトリに移動してからfloyd-cliをインストールします。

```
pip install -U floyd-cli
```

次に下記を入力しエンターすることでログインします。

```
floyd login
```

すると、

```
Authentication token page will now open in your browser. Continue? [Y/n]:
```

と聞かれますので、__y__を入力し進めるとブラウザが立ち上がり、Welcome pageが開きます。

ターミナルに、Welcome PageのCにtokenがありますので、コピーを行い、

```
This is an invisible field. Paste token and press ENTER: 
```

と表示されているターミナルに貼り付けて、Enterキーを押すことで、__Login Successful__と表示されます。


# Quick Start

https://docs.floydhub.com/getstarted/quick_start/
を参考に、TensorFlowの環境を作って見ましょう。

```
$ git clone https://github.com/floydhub/quick-start.git
Cloning into 'quick-start'...
...
$ cd quick-start
$ ls
eval.py  LICENSE  mnist_cnn.ipynb  README.md  train_and_eval.py  train.py
```

```
$ floyd init quick-start
Project "quick-start" initialized in the current directory
```

下記コマンドで実行した場合は、CPUインスタンスでの実行になります。

```
$ floyd run "python train.py"
```

GPUインスタンスで実行したい場合は、__--gpu__オプションをつけることで実行できます。

```
$ floyd run \
--gpu \
--data mckay/datasets/mnist/1:/mnist \
--env tensorflow-1.3 \
"python train.py"
```

```
$ floyd status
JOB NAME                          CREATED         STATUS      DURATION(s)  INSTANCE    DESCRIPTION
--------------------------------  --------------  --------  -------------  ----------  -------------
aiacademy/projects/quick-start/1  38 seconds ago  success 
```

# データセットをアップロードする

```
$ floyd data init <ファイル名>
```

続けて以下を入力するとアップロードが開始されます。

```
$ floyd data upload
```

アップロードが完了するとID名が発行されますので、以降呼び出すときはそのID名を使用します。


# 新規プロジェクト
下記URLから新しくプロジェクトを作成できます。
https://www.floydhub.com/projects/create


![スクリーンショット 2017-10-03 23.31.56.png](https://qiita-image-store.s3.amazonaws.com/0/171715/afff12b4-2eab-5911-aed5-fb43c3e61d4f.png)

Project nameは適当に、「my-first-project」とし、
Visibility LevelはPrivateにします。
そしてCreate projectボタンを押します。

それでは、ターミナルで下記を実行してください。 

```
$ mkdir my-first-project
$ cd my-first-project
$ floyd init my-first-project 
Project "my-first-project" initialized in current directory
```

```
$ floyd data init quick-start
$ floyd data upload 
```

エラーが出る場合は、再度

```
$ floyd init my-first-project 
Project "my-first-project" initialized in current directory
```

そして、最後に下記コマンドを実行することで、Jupyter Notebookが立ち上がります。

```
floyd run --env keras --mode jupyter --gpu
```

![スクリーンショット 2017-10-04 0.09.43.png](https://qiita-image-store.s3.amazonaws.com/0/171715/c3436e40-d22a-0279-5010-4dfe75318716.png)

では、実際にKerasのコードを実行してみましょう。

右上のNew タブから、Python3を選択し、セルに下記コードを貼り付けてください。

```sample.py
from keras.models import Sequential
from keras.layers.convolutional import Conv2D
from keras.layers.pooling import MaxPool2D
from keras.optimizers import Adam

from keras.layers.core import Dense, Activation, Dropout, Flatten
from keras.utils import plot_model
from keras.callbacks import TensorBoard

from keras.datasets import cifar10
from keras.utils import np_utils

(X_train, y_train),(X_test, y_test) = cifar10.load_data()

# floatに型変換
X_train = X_train.astype('float32')
X_test = X_test.astype('float32')
# 各画素値を正規化
X_train /= 255.0
X_test /= 255.0
nb_classes = 10
batch_size=256
nb_epoch=10

Y_train = np_utils.to_categorical(y_train, nb_classes)
Y_test = np_utils.to_categorical(y_test, nb_classes)

# モデルの定義
model = Sequential()

model.add(Conv2D(32,3,input_shape=(32,32,3)))
model.add(Activation('relu'))
model.add(Conv2D(32,3))
model.add(Activation('relu'))
model.add(MaxPool2D(pool_size=(2,2)))

model.add(Conv2D(64,3))
model.add(Activation('relu'))
model.add(MaxPool2D(pool_size=(2,2)))

model.add(Flatten())
model.add(Dense(1024))
model.add(Activation('relu'))
model.add(Dropout(1.0))

model.add(Dense(nb_classes, activation='softmax'))

adam = Adam(lr=1e-4)

model.compile(optimizer=adam, loss='categorical_crossentropy', metrics=["accuracy"])

history = model.fit(X_train, Y_train, batch_size=batch_size, nb_epoch=nb_epoch, verbose=1, validation_split=0.1)

```
実行すると、下記のように学習が進めば環境構築完成です。

![スクリーンショット 2017-10-04 0.19.01.png](https://qiita-image-store.s3.amazonaws.com/0/171715/1e5715f8-fb00-696e-5325-1a01e16348ad.png)

参考記事1
http://sanshonoki.hatenablog.com/entry/2017/06/17/222515

参考記事2
http://nami3373.hatenablog.com/entry/2017/07/01/123847

参考動画1
https://www.youtube.com/watch?v=OJsirsSBX-A

参考動画2
https://www.youtube.com/watch?v=ScoHw0i33rM

# まとめ
100時間分のGPU無料利用できるDeepLearningのためのHerokuのようなサービスFloydhubの
簡単な使い方を見てきました。
これからDeep Learningを学ぶ場として一旦、無料枠を通じてDeep Learningの学習を進めて頂けたらと思います。

# AI Academy
オンラインによるマンツーマンレッスンでAIプログラミングが学べるスクール。
AI Academy 「AI(人工知能)技術をかつてないほどに多くの人々にとって身近にし、AI時代にAIを活用できる人材を創出する」 ことを掲げ、AIエンジニア育成をしている。
http://aiacademy.jp/

# AI Academy 1day BootCamp
Python文法速習以外にも、色々なイベントを開催しています。
是非他のイベントも見てみてください！
https://connpass.com/user/AI_Academy/open/

# AI Academy Community
AI Academy CommunityはオープンなFacebookグループです。 
メンバー数は現在約350名で、毎日AIに関する情報を5件〜10件ほどお届けします。
定期的にAIに関する情報を知りたい方は、是非参加してください！ お待ちしております！ https://www.facebook.com/groups/1892746874314837/

※参加するには、Facebookアカウントが必要です。