このエントリは、
の続きです。
Cloud Datalabの基本
こちらにも類似のことは書いていますが改めて書きますと、Cloud Datalabとは以下のようなものです。
- Jupyterをベースとしたインタラクティブな分析の環境
- GCPと統合された環境
- Jupyter及びPythonのライブラリをコンテナ化したパッケージ
- コンテナをdatalabコマンド経由でGCE上に簡単に立ち上げたり落としたりできる
Datalabの前提
DatalabはGCPのプロジェクトと密接に結びついて動作するように作られています。
デフォルトで特に何も指定しないと以下のようになります。
- project内のCloud Source Repositoryに
datalab-notebooks
というリポジトリが作られます - GCS上に
${PROJECT_ID}.appspot.com/datalab_backups
バケットが作られてその中にバックアップが作られます
起動
という前提で色々やってみます。何はともあれDatalabの起動です。
$ datalab create --disk-size-gb 10 --no-create-repository datalab-test
-
--disk-size-gb
でディスクサイズを指定します。- デフォルトでは200GBで作られるので、小さめサイズで10GBを指定しました
-
--no-create-repository
でリポジトリ作成を行いません- リポジトリ単独で消したりしていたら、
--no-create-repository
をつけないと起動しなくなってしまいました。。。何でだろう、これ。またちゃんと調査します。
- リポジトリ単独で消したりしていたら、
BigQueryとの連携
DatalabはBigQueryと連携できて大変素敵です。で、少し話は変わりますが、JupyterにはMagic Command という%%
から始まるコマンド機能がありまして、BigQueryやGCSの機能も提供されています。
Magic Commandとしてクエリの実行
サンプルどおりですが、これがセル内に書けるという素晴らしさは試してみるとよくわかります。
%%bq query
SELECT id, title, num_characters
FROM `publicdata.samples.wikipedia`
WHERE wp_namespace = 0
ORDER BY num_characters DESC
LIMIT 10
google.datalab.bigqueryを通じての実行
セルにBQのクエリかけるんだから、そのまま処理したいですねということでサンプルにあるものですが、クエリの結果をdataframeとしてPandasに渡すことができます。素敵です。
%%bq query -n requests
SELECT timestamp, latency, endpoint
FROM `cloud-datalab-samples.httplogs.logs_20140615`
WHERE endpoint = 'Popular' OR endpoint = 'Recent'
import google.datalab.bigquery as bq
import pandas as pd
df = requests.execute(output_options=bq.QueryOutput.dataframe()).result()
もうちょいAPI経由っぽくするとこんな感じでしょうか?
import google.datalab.bigquery as bq
import pandas as pd
# 発行するクエリ
query = """SELECT timestamp, latency, endpoint
FROM `cloud-datalab-samples.httplogs.logs_20140615`
WHERE endpoint = 'Popular' OR endpoint = 'Recent'"""
# クエリオブジェクトを作る
qobj = bq.Query(query)
# pandasのデータフレームとしてクエリの結果を取得
df2 = qobj.execute(output_options=bq.QueryOutput.dataframe()).result()
# 以下pandasの操作へ
df2.head()
よく考えると、こちらのAPIが提供されているから、Magic Commandが作られるって流れですね。実際、こちらを見るとMagic Commandとして%%bq
が定義されているのが分かります。
GCSとの連携
BigQueryと同じくサンプル通り、セル上からGCS上のオブジェクトを操作できます。ポイントとしては、ファイルの読み書きまでできることでしょうか。BigQueryの結果をデータソースとできるのも協力ですが、GCSのデータをそのままデータソースとして透過的に扱えるのは魅力的です。
CloudMLとの連携
これは、とりあえずAPI経由で何か動くことは確認できましたが、色々と挙動として分からないことも多いので今回はスキップします。
インスタンスタイプの変更
ここからがクラウドの真骨頂です。オンプレでは不可能な必要になったらスペックアップ、が実現できます。datalabコマンドのcreateでは--machine-type
オプションでインスタンスタイプを指定できます。デフォルトではn1-standard-1
が立ち上がるようになっています。
# deleteコマンドでインスタンスは削除
# この場合はアタッチされていたディスクはそのまま残る
$ datalab delete datalab-test
# 同一のマシン名で、インスタンスタイプを変えて起動
# マシン名+pd の命名規則でディスクが作られているため
# 同一のマシン名だと勝手にディスクをアタッチしてくれる
$ datalab create --no-create-repository \
--machine-type n1-standard-4 \
datalab-test
これで、必要に応じてマシンのスペックを上げ下げすることができます。
GPUの分析環境!
一応、今回のハイライトです。
これで!!!GPUインスタンスを指定したら!!!!お手軽にGPU機械学習環境が簡単に手に入るぞ!!!!
と思ったらそう簡単にいかないのが世の中でして、、、今のところ、GPUインスタンスはDatalabでは対応していません。
まとめ
ところどころ惜しかったりするDatalabですが、GPUインスタンスは何となくいずれ対応してくれるんではないかという淡い期待はあったりしまして、Cloud Source Repositoryのところや、Cloud ML Engineまわりがもやっとしているところを除いたりしても、データ分析環境を作るための重要なパーツではないかと思う今日このごろなのです。次回はこのあたりをもう少ししっかり見ていきたいと思います。
その他参考情報
- Datalab API
- Datalabに入っているPythonライブラリ
- OpenCV系のライブラリなどは入っていないっぽい
- が、追加でpythonモジュールをインストールすることは可能
- OS側のコマンドも
!
をつければ叩けるので、apt-get
とかで対応できるパッケージは入れられるはず