Python
GoogleCloudPlatform
datalab

Cloud Datalabのいい感じな部分と惜しい部分

More than 1 year has passed since last update.

このエントリは、

の続きです。


Cloud Datalabの基本

こちらにも類似のことは書いていますが改めて書きますと、Cloud Datalabとは以下のようなものです。


  • Jupyterをベースとしたインタラクティブな分析の環境

  • GCPと統合された環境

  • Jupyter及びPythonのライブラリをコンテナ化したパッケージ

  • コンテナをdatalabコマンド経由でGCE上に簡単に立ち上げたり落としたりできる


Datalabの前提

DatalabはGCPのプロジェクトと密接に結びついて動作するように作られています。

デフォルトで特に何も指定しないと以下のようになります。


起動

という前提で色々やってみます。何はともあれ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まわりがもやっとしているところを除いたりしても、データ分析環境を作るための重要なパーツではないかと思う今日このごろなのです。次回はこのあたりをもう少ししっかり見ていきたいと思います。


その他参考情報