Google Cloud Plathome上にTensorflowを展開する
Tensorflowを使いはじめて、はや4ヶ月。そろそろ手元のMacbookではマシンパワーがおぼつかないケースが出てきました。
既存のAWSのDebianに入れようかとも考えましたが、せっかくなので、Google Cloud Plathomeを使うことにしました。
申し込みからコードの実行まで1.5時間ぐらいでした。以下、その記録です。
1. 申し込む
cloud.google.comから申し込みます。
既存のGoogleアカウントでログインしましたが、再度住所等の情報を入力しました。60日、$300分の無料クレジットがついてきます。クレジットカードの入力が必要です。
2. 利用する
チュートリアルが表示されます。ゲーミフィケーションのような流れです。pythonによるHello, Worldチュートリアルがあったので、それに従ってみたところ、Webアプリケーションができてしまいました。App Engineというアプリケーション用のクラウドプラットホームを使っていたようです。Herokuに似ています。Webアプリケーションを構築するのであれば魅力的ですが、今回は違うようです。
少し調べるとGoogle Prediction APIというものがありましたが、Tensorflowではないようです。また、Cloud Machine LearningというJupyter Notebookが利用できるものもありましたが、Limited Previewでした。GoogleのサイトでJupyter Notebookを用いたデモを見たことがあり、こちらも興味深いのですが、今回は対話形式は特に必要としておらず、cronなどによるスケジュールなどをしたかったので、こちらの利用も見送りました。
結局、AWSのEC2のような、VMを作るタイプのCompute Engineというものを使うことにしました。 割とスタンダードなクラウド環境です。CPUとメモリのサイズをカスタマイズできるので、CPU=8コア , メモリ=7.2GBを選択しました。メモリはこんなに必要ないのですが、どうやらこれが最小サイズのようです。時代ですね。
3. ログイン
Compute Engine上で作成したインスタンスへのアクセスはブラウザベースで行えます。SSHのアイコンをクリックすると、ブラウザ上にエミュレートされたターミナルが立ち上がります。AWSのkey pairと比べると簡単にアクセスできる一方で、益々googleアカウントの重要性が増すなと思いました。
Chromeを使っている場合(私がそうだったのですが)、ターミナル・プラグインのインストールを勧められます。これを利用することで、ほぼターミナルと遜色のない環境になります。
4.Tensorflowをインストールする
ここから先は、おなじみの作業です。私はanacondaを使っているので、
Anacondaをダウンロードし、インストールします。
user$ wget http://repo.continuum.io/archive/Anaconda3-4.1.1-Linux-x86_64.sh user$ chmod u+x Anaconda3-4.1.1-Linux-x86_64.sh user$ ./Anaconda3-4.1.1-Linux-x86_64.sh
Cloud Plathomeで用意されたdebianはコンパクトなものでしたので、インストール途中でbzip2がないと警告を受けました。apt-get update、apt-get install bzip2したのち、再度anacondaを入れました。
root# apt-get update root# apt-get install bzip2
その後、tensorflowを以下を参考に入れます。
といっても今回は環境切り分けを特にしないので、pip install --upgrade でおしまいです。
user$ touch~/anaconda3/lib/python3.5/site-packages/easy-install.pth
user$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.9.0-cp35-cp35m-linux_x86_64.whl
user$ pip install --upgrade $TF_BINARY_URL
5. 実行
まずは単純にpythonのコードを実行するだけをしました。実行中にCPUの使用率を見ると、該当するプロセスの利用率がおおよそ230%と3コアしか利用できていませんでした。この辺りの指定の仕方は、もう少し調べようと思います。今回は、学習パラメータを複数持たせた結果を知りたかったので、4つのプロセスを同時に走らせました。
6. その他
ずうっとマシンリソースを使い続けるわけではないので、動的に仮想マシンを制御することになります。少し調べたところ、gcloudというツールで制御できるようです。
更に、プリエンプティブル VMという仮想マシンを利用することで、よりリーズナブルに利用できそうです。