2019/08/27

新しくなった Google AIプラットホームはクラウド分析環境の決定版か?(実施編)




先の記事「新しくなった Google AIプラットホームはクラウド分析環境の決定版か?(前置き編)」に引き続き、具体的にR×BigQueryの環境をGCPに立ち上げてみます。また、その使い勝手について感想を書きます。

まずはGCPのコンソール画面から、「AIプラットホーム」「AI Hub」を選びます。AIプラットホームは人工知能のカテゴリにあります。

 AI Hubはカタログなので、この中から好みの分析環境を選べばよいのですが、今回は私の好きなRの環境を選びます。AI Hubにはたくさんの環境があるので、ここから探し出すのは結構大変なのですが、まずは AI Hub のトップページから Scope の Public を選ぶと探す画面になるので、一番下の Labels の中から R を探してセットします。

 すると、「Exploratory Data Analysis with R and BigQuery By Google」というそのまんまなエントリが出てくるので、これを選んで、[Open in GCP]しましょう。

「AI Hub からノートブックを開く」のページで、インスタンス名(任意)やインスタンスの地域、ゾーンの設定をして、フレームワークで「R 3.5.3」(現状)を選び、マシンタイプやブートディスクを設定してから[作成]します。地域はまだTokyoは選べないみたいです。

1分程度で「Jupyter Lab」が立ち上がります。すると、「Exploratory Data Analysis with R and BigQuery」というサンプルが立ち上がるので(というより、このサンプルを立ち上げるためのパッケージらしい)、この真似をすればRとBigQueryが使えます。

例えば、隣のタブに「Launcher」があり(もしくは左上の「+」を押す)、その中にR Notebookがあるので、それをクリックすると新しいnotebookが立ち上がります。Rなので、例えばこんな感じ。


BigQueryと繋ぐには、先ほどのサンプル(最初のタブ)の「0.Setup」にある、


を実行すれば、OKです。最初の、installには数分程度かかります。しばらく返ってこなくて不安になるのですが、左上の「+」からConsoleを立ち上げて top などで見てみると、cc1plus がずっと動いているので、インストールに頑張っている様子が見られました。



その後、BigQueryからRへデータを持ってくるには、

data <- bq_table_download(
    bq_project_query("my-project", query="SELECT x,y,z FROM `
my-project.test_aihub.reg_sample`")
)

などでOK。なお、my-project がこのインスタンスを立ち上げているGCPのプロジェクト名(ダミー)で、test_aihub が事前に仕込んだBigQueryのデータセット名、reg_sampleがテーブル名、x,y,zがテーブルのカラム三つです。BigQueryではこんな感じ。



引っ張ってきたデータを観察すると、



このように BigQueryからRへクエリ結果をダウンロードできました。Rらしく例えば回帰分析をしてみると、



あとは普段の R notebookです。個人的には、Intellisenseッぽい動きをしてくれるR Studioの方が使いやすいのですが、Jupyterも慣れていけば使いやすくなるはず。

さて、このAI Hubから立ち上げた分析環境、これをJupyterLabと呼ぶようですが、この画面はセーブ(notebook左上のフロッピーのマーク「Save The notebook contents and create checkpoint」を押す)しておけば変数も含めて保存されています。つまり、JupyterLabでセーブして、ブラウザを切断しても、計算過程は残り続けます。





そして、例えば外出する前にセーブし、ブラウザとPCを閉じて、オフィスに戻って再度JupyterLabに接続すると、先ほどの作業過程がそのまま残っています。これは実は地味に大切な機能で、分析の途中で他のことをしなければならなくなる、その時に、今の散らかした状態をそのままにしておけるというのは、ローカルマシンでは当たり前にできることなのですが、クラウド環境ではこれまであまり重要視されていませんで、例えばJupyterLabの前身のdataLabでも、教育用collaboratoryでも、セッションが切れたり、時間が経過したりすると、計算の途中経過ごとカーネルが脱落していて、せっかくの計算をまた最初からやり直すことになってしまいます。計算が一瞬でおわるものならそれでもまだ我慢できるのですが(notebook自体はセーブできたので)、一回の計算に数時間がかかるようなものでは、カーネルの脱落はため息しか出ませんので、この、checkpointごとセーブする機能はすごくありがたいです。

ちなみに、一旦ブラウザを落としてから、再度notebookに接続するには、GCP Console から AIプラットホーム → ノートブックでノートブックインスタンスの一覧画面になるので、そこから[JUPYTERLABを開く]で開きます。いままで[SSH]ボタンでSSHを開いていたのと同じ感覚で、JupyterLabを開くことができます。超便利です。

さらに、ここまでできるのならばやはり期待するのは、「数時間かかる計算を投げた後、ブラウザを落としてセッションを切り、次の日に回収したい」ですよね。データ分析では計算に数時間かかるのはよくあることで、その間に他の仕事をしたり、夕方に計算を投げて明日朝回収したり、複数の計算を同時に投げて順番に回収したりというのはよくあることなのですが、ローカルマシンだとずっと立ち上げっぱなしで熱くなってしまうし、なにより電車移動などができなくなってしまうし、かといってクラウドではセッションが切れると計算が落ちてしまうし・・・。昔、consoleで計算をしていた時代は、nohupをつけてバックグラウンドで計算させたり、screenを使ったりしましたが、JupyterLabはその分析環境版たりえるのか。

そもそも、AI Labの中には機械学習など、処理に大量の時間がかかるものが多いので、そういう環境でない方がおかしい。そこで、ちょっと時間のかかる砂漠の壺埋め的なコードを書いて実行し、そのあと「Save Checkpoint」した後にブラウザを切って、また繋いでみたところ・・・





このような微妙な結果に。上のfor文で素数を300000まで数え上げて、その個数をlengthで表示する計算ですが、このセルを実行して、すぐSave Checkpoint、ブラウザ切断、しばらく経って(終わった頃に)再接続してみたところ、[]の中に数字がなく、計算が終わった形跡がありません。また、length(a)の結果も出ていません。しかし、そのあと[14]でtail(a)を見てみたところ、ちゃんと299993まで計算が終わっています。これはよく読めばどこかに説明があるのだろうとは思いますが、計算は完了するが(実際、ブラウザを落とした後にSSHでインスタンスに接続してプロセスを見ると、Rは動いています) notebookへの出力はされなかった、と言うことなのかなと。これ、もし知っている人がいらっしゃったらぜひ教えて下さい。

最後にもうひとつだけ。このJupyterLabで作成したnotebookは、実は当該プロジェクトの参加者全員が閲覧、編集できます。(どこまでプロジェクトの権限に依存するんじゃないかと思いますが、未検証。)と言うことは、誰かが作ったnotebookを、別の人が確認、計算したり、書き加えたり、修正したりできます。GCPのプロジェクトの参加者に加えれば共同編集ができるということになります(但し、リアルタイムには反映されず、セーブを通じての共有になります)。同じnoteを共有することになるので、誰がいつどんな編集をしたかが分からなくなったりする可能性も多少は気になりますが、それよりも、notebookをそのまま共有できるのはありがたい。これはつまり、分析の指示者と実施者が同じnotebookを見ながら議論ができるということです。

将来的には、例えばデータ分析の発注者が自社のGCPプロジェクトのBigQueryにデータを用意し、そのプロジェクトにデータサイエンティストを招待して、JupyterLabで分析をしてもらってnotebookに結果を残してもらう。そして分析が終了したら、このプロジェクトから分析者を外せば、分析プロジェクトのプロセスと結果が残り、セキュリティが保たれ、分析者も後のデータの処理に困ることが無い、という理想的なプロジェクトの終わり方ができます。(そしてまた、もし分析者に再度入ってもらうには、もう一度プロジェクトに招待すれば、以前のデータと環境がそのまま残っているわけです。)あるべきところにのみデータがあるのがよいセキュリティに繋がりますから、これは将来の理想的な分析環境です。実際には、まだデータをローカルにダウンロードする方法がいくらでもあるので、まだ完全とは言えませんが、意図的にダウンロードしない限りローカルにデータが無いというのはかなり嬉しいことです。

ということで、二回に分けて、Google AIプラットホーム、JupyterLabで実現されたクラウドデータ分析環境について書いてみました。もちろん、まだまだローカルマシンの方がかゆいところに手が届くのですが、その差が俄然縮まってきましたので、ターニングポイントはもう目の前だと思います。


0 件のコメント: