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で実現されたクラウドデータ分析環境について書いてみました。もちろん、まだまだローカルマシンの方がかゆいところに手が届くのですが、その差が俄然縮まってきましたので、ターニングポイントはもう目の前だと思います。


2019/08/26

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

しばらく前にベータ版がリリースされていた、Google Cloud Platform (GCP) の AI Hub が、求めていた分析環境に非常に近かったので、共有します。

その前に。ここで言うところの「データ分析」は、EDA(Exploratory Data Analysis)のことで、データと対話しながら様々な検討を行い、仮説設定と検証を繰り返すプロセスのことを指すことにします。既に何かモデルがあって、それにデータを通せば答えが出てくるフェーズはこの後工程になります。

さて、データ分析におけるクラウド分析環境のメリットとして私が重点だと思っていることは、
  • 巨大なデータをローカルにダウンロードしなくて済む
  • データをクラウドの中に閉じ込めることで、分析者がデータのセキュリティを気にしなくて済む
  • ブラウザだけで分析ができるので、ローカル環境を選ばない
 です。そもそも、昨今はデータがどんどん巨大化してきているので、昔のように一旦ローカルにデータをダウンロードしてきて、それから始めるという方法が取れることが少なくなってきました。分析対象データ自体は数MB程度でも、そのデータソースは数TBということがザラです。よって、データ自体は既にクラウド環境にあることが前提です。さらに、じゃあデータがクラウドにあるのならば、それをわざわざダウンロードすることはセキュリティ上よくないよね?ってのが二番目で、どうせクラウドにあるデータは、そのままクラウドの中で分析すれば、データが外に出ないので、分析者がデータセキュリティに余計な気を遣わなくて済みます。三番目は昨今の働き方事情によるもので、GSuiteやOffice365のように、世界中どこにいてもアウトプットできる環境が整ってきた今、データ分析仕事もその例外ではなく、クラウドに全てが揃っていれば、あとはブラウザだけでどこでも仕事ができるというのは、これからの働き方において大きな魅力になり、その結果として優秀な人材確保に繋がります。PCとネットワークさえあればどこでも仕事ができることと、データを持ち歩いていないことが、我々データサイエンティストをデータ分析そのものに集中させてくれます。

では、新しくなった(と言ってもニュースをキャッチし損ねていたのでしばらく前ですが)Google AI プラットホームは、一体何が新しくなったのか。
過去記事:
クラウドでのデータ分析を推奨する理由 (2017/9/8)
googleクラウドにたてた Web Server をセキュアに使う (2017/9/10)

この二本の過去記事では、まずクラウドでデータ分析をすることの優位性を示し、そのあと、当時の道具を使ってどうしたらそういうことができるのか(但し、私の好みの分析環境で)を書きました。具体的には、二本目ではRStudioをGCPで動かし、それをGoogle Accountの認証を通してローカルへ画面だけ持ってくる方法を示しています。ポイントは、「Google Accountの認証をとおして」という部分で、その前提が「データ分析者はセキュリティの専門家ではない」です。セキュリティに詳しいシステムエンジニアならば同じ仕組みをパパッと作ることができるのですが、データサイエンティストはシステムやセキュリティの専門家ではないので難しい。だから、あるそういうところはGoogleさんにお任せしたいんです。

で、今回の新しいサービス「Google AIプラットホーム」は、これがもっと簡単になりました。上記事で書いた方法は、どうしても自分で考えて接続しなければならなかった。Cloud Consoleを立ち上げておくとか、ポート番号を気にしなきゃならないとか、そういう「システム」「ネットワーク」のことを考えなければならなかった。その時点で、データサイエンティストには重荷でした。しかし、新しいサービスはこれを克服し、分析環境を選択するだけで分析環境が立ち上がるようになりました。もちろん、前記事で書いたような、GCPのその他のソリューション(最強DBである BigQuery や、クラウドストレージのGCSほか)ともプロジェクトの中で(つまり、データをプロジェクトに閉じ込めて)利用できるようになっています。

次記事では具体的にJupyter notebook と R と bigquery の環境を作ります。

2019/07/18

働き方改革のためのツール

ちょっと古い話題ですが、google の jamboard アプリが素晴らしかったという話です。


場所に依存しない働き方ができれば、もっと生活が豊かになると思ってはや何十年。インターネットの時代になってからは、そろそろ実現するか、もう実現するかと思っていましたが、ようやくツールが出揃ってきたように思います。

一つはクラウド。メールとファイルがすべてクラウド化されたことで、「社内LANのファイルサーバー」が無くなり、その結果物理的に社内LANに繋がっている必然性が無くなりました。今、まだ僅かにクラウドが許されないお客さんのデータはローカルなのですが、それ以外の全てがクラウド化されています。

自分達が日々利用する端末にはもう巨大なストレージを持つ必要が無く、クラウドストレージは部分的にミラーリングされ、暗号化された状態でローカルに置かれています。クラウドアカウントが繋がってはじめてそれらを使って作業ができます。このことは、物理的にローカルストレージに置かれたファイル群よりもよほど高いセキュリティに守られていて、しかも、クラウド事業者は世界最高水準のプロなわけですから、私達は私達のプロフェッショナルな領域に集中することができます。

もう一つは遠隔コミュニケーション。主にビジネスコミュニケーションにおいて重要な共有は、①音声共有、②表情、しぐさの共有、③ドキュメント共有ではないでしょうか。①は電話が長らくビジネスコミュニケーションのメインツールでしたが、②と③が重要な場合は対面である必要があります。これをどのように乗り越えたかが、遠隔コミュニケーションの進化の軌跡になります。
今から思うと、Skypeが②のブレイクのきっかけでした。それまでもテレビ会議システムということでカメラ映像と音声とを同時に共有する仕組みはありましたが、それは既に設備が配置してある拠点間でしか利用できなかった。Skypeはこれを、だれでも持っているPCで実現したんですよね。PCがインターネットに繋がってさえいれば、誰とでも対面通話ができる。これで遠隔のコミュニケーションが一気に楽になりました。今ではZoomなどの専用サービスもたくさんあって、それぞれが使いやすさを追求しています。多拠点間通信もできるようになりました。もう、わざわざ物理的距離を超えて行く必然性は少なくなってきています。

③のドキュメント共有には二種類あって、一つは静的ドキュメントの共有、これは、事前に資料を配布したり、それをみながら解説したりというところで、パワポの画面を移しながら一方的に話すような会議ならばこれで十分。SkypeやHangoutなども画面共有の機能は持っているので、画面を見ながら講義や解説をすることは、数年前から十分できる用になっていました。

ただ、最後まで残っていたのが、動的ドキュメントの共有でした。これは簡単に言えばホワイトボード共有のことです。技術的にはさほど難しくはないのに最後まで残った理由は、おそらくニーズがあまり顕在化していなかったからでしょう。多くの会議は対面での会話のみ、もしくはドキュメントを解説するだけでほぼ完結するようなものなのではないでしょうか。それに対して、動的ドキュメント共有では、これを中心にして参加者全員がコラボレーションするような場面が思い浮かびます。

そこに登場したのが、Google の jam board と、Microsoft Office 365 の Whiteboard です。MS Whiteboard は何年か前に使ってレポートした気がします。そこそこ使えましたが、Office 365 が必須という点が厳しかった。一方で、jam board は、数十万円~100万円ほどもする巨大な「jam board」が必須で、これも辛い。と思っていたら、実は ipad jamboardアプリがあって、これを使えばいつでも ipad が jamboard になることを発見。しかも、複数の ipad 等で共有でき、持っていなくても google account があれば(個人向けでもOK)ブラウザで閲覧編集できる。操作性は ipad + apple pencil が最も使いやすいのですが、我慢すればPCのブラウザ+マウスでもなんとか使える。

ということで、③もクリアし、遠隔コミュニケーションに必要な道具は一通り揃いました。あとは人が慣れるだけです。

ちなみに、jamboard アプリ、更新履歴をみるともう二年ほど前から出ているんですね。全く知りませんでした。jamboard はあの高価なディスプレイがないと使えないと思っていた。代理店さんとも何度も話したことがあるのに、一切教えてくれなかったのは、これが見つかると jamboard が売れなくなるからなのだろうか、と穿ってみてしまうくらいに、ipad のjamboard アプリはよくできています。ipad + apple pencil を持っている人は今すぐ試してみてください。

もう一つ、ちなみに。今から20年ほど前、私がまだ大学院生だった頃、この jamboard と全く同じ事を考えてたことがありまして。当時は数学科の学生だったので、議論のベースは黒板なんですよね。何人かで黒板をみながら、それぞれ書き込みながら、あーだこーだと議論するのが日常でした。そんなとき、よく議論をしていた先輩が遠方の大学に行くことになって、電話で議論しても数式が書けないとなかなか辛いですね、と話ながら、ちょうどwindows 95がでてしばらくでしたので、パソコン通信上で黒板を共有できたらいいんじゃない?って話をしていました。某企業に作ってくれと電話したところ、軽くあしらわれましたが。それがやっと、20年越しにまともに使えるツールが出現してきたわけで、今の数学科生はこれを使って、いつでも、どこにいても、誰とでも、数式を使ったリアルタイムコミュニケーションができるわけです。すばらしい時代になったと思う反面、ここまで来るのに20年もかかったのだなとも思います。


2019/05/15

Excelでデータ分析をする話

Excelを分析ツールとして使う話をずっと書こうと思っていて、やっと書きました。

データサイエンティストのExcelテクニック

私がよく使っている、「動くExcel」を題材にしています。これでデータの可視化が楽になります。ご参考まで。



データサイエンティストのExcelテ
データサイエンティストのExcelテクニック
データサイエンティストのExcel