Keras
Floydhub

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

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

floyd2.png

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

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

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

4.png

Get Started

Floydhubからメールが届いていますので、メールのリンクを押して認証します。
スクリーンショット 2017-10-03 22.51.14.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

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

では、実際に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

参考記事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アカウントが必要です。