Floydhubのセットアップから基本的な使い方まで

前回の投稿で、FloydHubというクラウドサービスへたどり着き、GPUを試すようになるまでの過程を綴ってみた。

nami3373.hatenablog.com

今回は、FloydHubの利用方法について、簡単にまとめてみた。

セットアップの流れ

まずは以下のサイトへアクセスし、アカウント設定をおこなう。
Floyd Zero Setup Deep Learning

アカウントが取れたら、pipを使ってCLIをインストールする。

$ pip install -U floyd-cli

その後、以下のコマンドでログインを入力するとWebブラウザでマイページへ移動する。
表示されたトークンをコピペすることでログインが完了。

$ floyd login

ローカル上でのプロジェクトソースコードの準備

使いたいソースコードがある場合は、cdで該当フォルダへ移動、
特にない場合は、チュートリアルにあるRNNなんかをgitからローカルへレポジトリする。
※以下、例としてチュートリアルから抜粋。

$ git clone https://github.com/floydhub/tensorflow-examples.git
$ cd tensorflow-examples/3_NeuralNetworks

新しいプロジェクト開始時はinitコマンドを使って定義する必要があり、以下のように入力する。

$ floyd init <プロジェクト名>

FloydHubでJupyter Notebookを使う

初期設定が終わったら、floyd runを使っていよいよ実行。
Pythonファイルをそのままサーバー上で走らせることも可能だが、
インタラクティブに作業が進められるJupyter Notebookの使い勝手が良いため、
個人的には--mode jupyterを加えてJupyterを立ち上げるのがオススメ。

具体的には、以下のようにコマンドを入力する。

$ floyd run \
   --mode jupyter \
   --env theano:py2 \
   --gpu

モードの次に--envを加えているが、これによりディープラーニングフレームワークPythonのバージョンを指定することができる。
上記の例の場合、TheanoとKeras 1.2.2をPython2環境で用意してくれる。

その他、詳しくは以下をご参照のこと。
Environments - FloydHub

また、runコマンドの最後に--gpuを加えているが、これによりGPUサーバーを使えるようになる。
GPUを必要としない作業を低コストで実行したい場合は、これを--cpuへ変更することで、CPUサーバーが利用可能。

ちなみに17年7月1日現在、GPUのコストは1時間あたり$0.4で、CPUはその10分の1の$0.04。

データセットのアップロード

データを新たにアップロードしたいときは、プロジェクトのときと同様に、initを使って初期設定をする必要がある。

$ floyd data init <ファイル名>

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

$ floyd data upload

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

アップロードしたデータがzipファイルであるとき、
以下のコマンドを使うとJupyterを立ち上げることなく、CPUサーバー上で解凍してくれる。

$ floyd run --cpu --data <ID名> "unzip /input/<ファイル名>.zip -d /output"

なお、ローカルからアップロードするのではなく、どこかweb上のサーバーから直接Floydサーバーへダウンロードすることもできる。
この場合、floydでJupyter Notebookを立ち上げたあとTerminalを起動し、
wgetコマンドなどを使って指定したURLからデータをダウンロードすればよい。

アップロードしたデータの呼び出し

既にアップロードをし、IDを取得したデータを別のプロジェクトで使いたい場合は、
次のようにrunコマンドの中でデータのIDを指定すればよい。

$ floyd run \
  --mode jupyter \
  --data  <ID名>\
  --env tensorflow-1.0:py2 \
  --gpu

なお、プロジェクトファイルはoutputディレクトリにあるが、読み込んだデータはinputにある点に注意する必要がある。
そのため、ファイルパスを../inpu/で指定する必要がある。

プロジェクトおよびデータセットの消去について

同じプロジェクトでも立ち上げる度に新しいバージョンが作成され、
モジュール及びアウトプットの数が不必要に増えてしまうことがある。

そのため、ストレージの容量を減らしたいときは、少々面倒だが以下のようなコマンドを実行することになる。
なお、消去したい対象が複数あるときは、IDを続けて足していけば、一行でまとめて処理することが可能。

・プロジェクトを消去するとき

$ floyd delete <ID名>

・データセットを消去するとき

$ floyd data delete <ID名>

まとめ

プロジェクトの数が増えてくると管理が煩雑になることもあるが、
コマンドがシンプルだったり、ポータルサイトが使いやすかったり、
なにより100時間分の無料利用がついてきたりするので、手を動かしながらDeep Learningを学ぶ場として重宝しています。