Floydhubのセットアップから基本的な使い方まで
前回の投稿で、FloydHubというクラウドサービスへたどり着き、GPUを試すようになるまでの過程を綴ってみた。
今回は、FloydHubの利用方法について、簡単にまとめてみた。
- セットアップの流れ
- ローカル上でのプロジェクトソースコードの準備
- FloydHubでJupyter Notebookを使う
- データセットのアップロード
- アップロードしたデータの呼び出し
- プロジェクトおよびデータセットの消去について
- まとめ
セットアップの流れ
まずは以下のサイトへアクセスし、アカウント設定をおこなう。
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を学ぶ場として重宝しています。