2020/09/03

AI Platform / GCP で最強の分析環境を手に入れた話

日頃から Google Cloud Platform (GCP)がデータ分析基盤の決定版になると言い続けて・・・たぶん5年ほど経ちましたが、このたびやっと、具体的に使える基盤になってきた感じがするので、まとめておきます。

その前に。

まえおき ~ 分析仕事とデータのセキュリティ

データ分析の仕事とデータセキュリティとの関係を、ここ20年くらいの流れを思い出しながらまったり書いていたら長くなったので、お急ぎの方は次の章へ。

 

さて、データ分析の仕事で普段からやっていることをざっくりまとめると、次の通り。

  1. データの入手、整理、加工
  2. 仮説の検討と検証、試行錯誤
  3. レポーティング、プロトタイピング

さて、これらの作業をどこでやっているかというと、主に1はクラウド、2はローカルマシン、3のレポーティングはローカルですが、プロトタイピングはクラウドが多くなりました。というより、クラウドでプロトタイピングが容易にできるようになったので、そのアウトプットの形が現実的になった、と言う方が正しいです。

なぜ、「どこでやっているか」が大事かというと、それがデータのセキュリティと直結するからです。データ分析は、クライアントの大切なデータを預かることが多いので、そのセキュリティと無縁ではいられません。 誤送信したり、どこかにメディアやPCを置き忘れたり、泥棒に入られて持って行かれたり、そういうことがあるとアウト、退場です。ですので、めちゃめちゃ気を遣います。データが満載のHDDを新幹線で運ぶときなど、緊張してウトウトもできません。そして、ローカルPCにダウンロードし、バックアップのために社内のファイルサーバーにコピーして、どこにコピーしたかを台帳に記入します。メディアは施錠管理。PCもワイヤーで固定し、持ち出す際にはこれも持ち出し台帳に記入。これら、本当に実際にあることです。

データ分析の仕事は、こういう「データを守ること」がちゃんと出来ないと、任せられません。それぞれのデータの深刻度や、実施内容の程度、掛けられるコストや体力、それらをちゃんと全部ひっくるめて運用しないといけない。これは、分析のための知識や能力とは全然違う知識、経験が必要になります。例えば、データを一時的に保管したHDDからデータを削除し、その他の目的のために使っていいか、というと答えはNOですよね。他にも、メモリのキャッシュとか、ハイバネーションとか、ファイルサーバーとの通信経路とか、いわゆるコンピューターやネットワークのことをある程度の深さで知ってないと、データを守ることって本当はできないんです。

もっと言うと、昔よくあった、社内のファイルサーバー。社内だから安心、と思いきや、あまりそうでもないです。情シスや警備会社が頑張ってくれていれば、盗まれる心配は低いかもしれません。しかし、ローカルマシンは常に故障や破損と隣り合わせ。ローカルに置いてある機器は、それなりの確率で故障したり、破損したりします。意図せぬ停電とか、だれかがケーブルに足を引っかけたとか、水をこぼしたとか。例えば、NASのHDDが壊れることはそれなりにありましたので、必ずRAIDを組んでいましたが、二本いっぺんにいってしまう、もしくは、一本が破損して、入れ替え用のHDDがなくて、注文している間にもう一本が破損するとか。急ごしらえのサーバー室のエアコンから水が落ちでサーバーにかかっていた、などという笑えない話も聞いたことがあります。ローカルではそういうひやりとする事態が、全くないわけではありません。

なので、クラウドサービスが本格化してきた2015年頃からはもう、データはクラウドが一番安全です。だって、Google, AWS, MS っていう、世界でも最高峰の優秀なエンジニア達が、めちゃめちゃお金を掛けて運用しているんです。エンジニアリングによほどの自信が無い限りは、それらのサービスを使う方がいい。特に、データ分析者はエンジニアではないので、最高の技術に乗るのが賢明です。

ということで、データはクラウドに載りました。

残るは、分析環境です。 


分析環境のクラウド化はなぜ必要か

データはクラウド化されました。 巨大なデータを扱う場合はもちろんのこと、そうでなくても、今はデータの準備にクラウドサービスを使わないという選択肢はほぼありません。

しかし、分析環境はそうでもなかったんです。

一つは商用分析ツールのライセンスの問題で、ローカルマシンにインストールして使うことしか想定されていないライセンスが多かったこと。

もう一つはGUIで、データの分析は気づきと仮説検証のいったりきたりですから、特に可視化の部分、データをグラフや表で観察したり、ズームイン、ズームアウトしたり、そういうのが重要なのですが、分析ツールのGUIは基本的にはネイティブアプリですし、web UIは最初ほとんど無く、あとはSSH経由でCUIでやるくらい。よって、クラウドでデータ分析をするときはGUI無しを覚悟しなければなりませんでした。

すると、せっかくデータがクラウドになったのに、分析のためにそれらをローカルにダウンロードしなければならない。もちろん、ツールから直接クラウドのDBに接続しに行くことも出来るようになってきたので、ダウンロードに要する時間はかかるものの、そんなに不便ではない。

しかし一方で、セキュリティ的にはあまり喜ばしくなくて、ローカルにデータがあるということは、物理的に気をつけなければならないポイントがふえるということで、それしか選択肢がなければ仕方がないのですが、クラウドのセキュリティをみていると、なんでローカルにこんなに手間を掛けなければならないのか、と思ってしまいます。

つまり、ローカルにデータを持ちたくないんです。

分析者は分析で価値を出すことに集中したい。しかし現状は、それと同じか、それ以上に、セキュリティに気を遣わなければならない。当然のこととは言えど、これがもっと楽になったらいいなとずっと思っていました。

ですから、もし分析ツールもクラウドにおければ、そしてそれをGUIで操作できれば、 ローカルにはブラウザの画面しか残りません。クラウドへのアクセスだけ気をつければ、データセキュリティへの気遣いはかなり減ります。ノートPC一つ持って、どこでも仕事が出来て、ログアウトすれば、もしくはシャットダウンすれば、PCには何も残っていない。それを置き忘れようが盗まれようが売ろうが破壊しようが(実際にはそんなことしませんけれど)、データのセキュリティは保たれます。

分析環境のクラウド化は、分析者をデータセキュリティから解放し、本来の価値に集中させる大きな手段なんです。

 

分析環境のクラウド化に必要なツール、その経緯

GUIを持った分析ツールを、ネットワーク越しに使うこと。いつか来た道だな、と思った人はwindows95以前の人ですよね。昔はX-Windowでサーバーの画面をローカルに持ってきて使っていました。マウスを追いかける目がデスクトップに鎮座していました。

でも、そのあとローカルマシン全盛期になったのは、当時数百万、数千万したサーバーと同じ性能の民生品のPCがどんどん出てきたから。サーバーである必要が無くなったんですよね。

そしてご存じの通り、クラウド時代になって、リソースはまたネットワークの向こう側に行きます。向こう側の計算機パワーが巨大になって、リソース調達が柔軟になりました。まずはデータがクラウドに戻っていったのが2010年頃。Bigqueryの登場が、データのクラウド化を決定づけました。

それを追いかけて分析ツールがクラウド化していくにあたり、昔のX-Windowにかわって使われるようになったのが、webブラウザです。ローカル環境に大きく依存するネイティブアプリから、ローカルの上に一枚ブラウザをかぶせて使う、ブラウザベースのアプリがどんどん出てきていましたので、当然分析ツールもその流れに乗って、iPython Notebook や、RStudio ら、ブラウザGUIを使ったデータ分析ができるようになってきました。

しかし、ここで大きな問題が。セキュリティです。

 iPython Notebookも、RStudioも、LAN内、つまり、社内で使われることが前提で、httpのポートが全世界にむけてクチを開けてしまうクラウドでの利用が当初は想定されていなかったか、もしくはちゃんとセキュアな設定ができるエンジニアがいる前提でした。流れるデータが暗号化されておらず経路にダダ漏れになっているのはLANならともかく、インターネットでは論外ですし、SSLを仕込んだとしても、認証部分を自分で作らなければならなかったり。ブラウザでアクセスして、大切なデータが全部見られて加工できるツールの入り口がID/PWだけとか、怖すぎます。そして、世界中からアクセスできればクラッカーさんなどもいらっしゃるでしょうし、それに対抗できるだけのシステムエンジニアリング的知見を、我々分析者は持ち合わせていません。

そこで、いろいろ試行錯誤していたのですが(例えば「googleクラウドにたてたWeb Serverをセキュアに使う(2017/9/10)」など)、2017年頃サービスが始まった Google DataLab がそれを乗り越えました。これは、Google Accountで接続しているブラウザにむけて、GCPにたてたインスタンスの分析ツールの画面を飛ばしてくれます。利用者はhttpの穴を開ける必要なく、また、google account で守られたブラウザの中で画面を動かすことで、認証はgoogleに任せることができる。解決です。(もちろん、テクがあれば同じことをとっくの昔にできたのですが、テクがない分析者が使えるように、と言う視点で。)

もちろん、当時は本当に本当に使いにくくて(笑)。立ち上げるのもCloud Shellから、分析者にはなかなか理解しづらい言葉が並んでいましたし、決定的だったのが、notebook に繋いで、何らかの都合でブラウザを閉じて、再度繋ぐと何も残っていなかったところ。途中までの分析がすべて無くなってしまう。これはダメだ、と思ってそれからしばらく静観します。でも、これを推していくらしいという噂は聞いていたので、いくつかリクエストをあげつつ、この方法は絶対に主流になるから、使い物になるまで待ちましょうと思って三年。

ついに出てきたのが AI Platform です。その一瞬前は JupyterLab って名前でしたでしょうか。その名称から、機械学習、AIのプラットホームというイメージの方が強いですが、中身はPythonとRが使えるJupyter Notebookですので、わざわざGPUを繋がなくても、機械学習などやらなくてもOK。そして、インスタンスを起動すれば、リンク一つでノートが立ち上がりますし、ブラウザを閉じて再度繋いだら、元の画面が戻ってきて、もちろん計算の途中経過もそのまま残っています。

これで念願の、クラウドで分析をする環境が整いました。

 

 

GCPを選ぶ理由

さて、ではこれらをどこでやるか。GCPだけでなく、AWSにもAzureにも、大体同じサービスがあります。私は正直なところ普段からGCPを使っているので、ここはもし「いやAWSが」とか、「Azureも」とかあったら教えていただきたいですが、全く触ったことがないわけではないので、その経験値を含めて。

なにをおいても bigquery!

これはもう、bigqueryの一人勝ちです。使いやすさ、使えるようになるまでのハードルの低さ、簡単さ、そしてスピードと、安さ。データをbqのテーブルとしてアップしておいてくれればあと何でもできます。bqのテーブルのエンティティの形でデータを受け渡ししたいですし、もしくは外部にあってもbqのテーブルだと思えるサービスも始まりましたので、怖いものなしです。

プロジェクトという概念

これは、データ分析者の視点なのですが、GCPの「プロジェクト」は、分析プロジェクトにつき一つ作って、終わったらプロジェクトごと捨てる、もしくは凍結します。使い回しません。そうすると、メンバーはそのプロジェクトに関わる人だけに限定できますし、データをプロジェクト内にとどめることができますから、意図せず外部に出ることもありません。外部の協力者などもプロジェクトには様々な権限を持って追加できるので、協力会社だったり、意思決定者だったり、外部データエンジニアだったりをプロジェクト毎にアサインして、使うことができます。

そして、これが大切なところですが、プロジェクトが終わったら、プロジェクトごと消します。そうすれば、もともとデータを閉じ込めてあるので、「全消し」できます。残したいものは意図的に外部に持ち出せばいいです。持ち出しは意図的に。意図せず出るのを防ぎ、残らず消すことで、セキュリティが上がります。本当は意図的でも出せない仕組みにできればもっといいのですが、それは今後の発展を待ちましょう。

コンソールのハードルの低さ

GCPは、各種のコンソールが分析者視点で非常に使いやすいです。逆におそらく、システムエンジニアからみたら、融通の利かない、お仕着せの、と思えるのではないでしょうか。しかし、分析者はエンジニアリングのことはよくわかりませんから、「よしなに」やっておいてくれるのが本当に助かります。AWSのように、様々な設定項目がずらっと並んでいると、自分の設定が本当に正しいのかどうかわからなくなりますし、ちょっとミスればたちまちデータが全世界にダダ漏れになってしまいます。お仕着せでいいし、最新バッチも勝手に当てておいてほしいし、そのためにたまにUIが変わるとか、立ち上がらなくなるとかは我慢するので、勝手にセキュアに保っておいてください。

同じような感じで、プロジェクトの中だったら全部接続済み、インストール済み、というのも楽なところです。例えば JupyterLabからBigqueryは、インスタンスを立ち上げただけですぐ繋がります。何の認証もいりません。source repository(プライベートのgit)も、何の設定もなく git pull で引っ張ってこられます。サービスアカウントが張り巡らされて、勝手にアクセス権を入れておいてくれるので、プロジェクトの中のリソースはプロジェクトの中でなにも気にせず使えます。

逆に、GCPにないところ

と、GCPを大絶賛してきましたが、足りないところもやはりありまして、それらは追々、ニーズがあれば手が届くでしょうし、無ければ自分のやり方を変えるか。

例えば、ドキュメンテーションは苦手です。GCPで作るのは結構難しく、どうしてもGSuiteを使ったり、ローカルでwordやExcelを使ってしまいますが、それではデータが外に出てしまうので、あまりやりたくありません。でも、今は他に選択肢がないので仕方がないです。

将来、Jupyter Notebookの形でドキュメントを作成して納品できたら、いいかもしれませんね。MS Officeをクラウドで使えたらとも思うのですが、実はMSのOffice製品ってすごく細かいところまでよく作り込んであって、あれをブラウザでできる気がしません。実際、WOrdやExcelのブラウザ版もMSにあるのですが、欲しい機能が無かったり、レスポンスが遅かったりして全然使いにくいです。でも、簡単なドキュメントならばGSuiteがおよそ使えるので、まずはそこから。

ドキュメンテーションではもう一つ、データだったりクエリだったり、そういう作業の記録をしておくところもちょっと薄いです。が、最近、data catalog ができてちょっと良くなりました。Lookerなんかがもし統合されてくるようになるとすごいかもしれません。Issue Trackingや、コミュニケーションツール、例えばslackやredmineみたいな、そういう機能もまだありません。外部にあってもいいのかもしれませんが、厳密な意味で、コミュニケーションの内容もセキュアに、プロジェクトの中に閉じ込めたいと思うと、今はまだそこまでは届いていません。

おわりに

ということで、AI Platformすごい!という記事でした。これで本格的に、分析ツールはクラウドに移行するでしょう。データをクラウド、プロジェクトから出さないことで、非常にセキュアな環境を作ることができますし、しかもそれを、優秀なシステムエンジニアの支援がなくてもできるようになります。

ぜひ、AI Platformを使ってみてください。


 

(2020/9/4 追記)

 話題にした、AI Platform でクラウドデータ分析の話、最近なにか劇的に変わったというわけではなくて、三年前のDataLab登場から徐々に、じわじわと改良が重ねられて今日に至ります。ので、実は1年前にもほぼ同じような記事を投稿しています。忘れていました。「新しくなった Google AIプラットホームはクラウド分析環境の決定版か?(実施編)」じわじわと改善されているというのがミソで、ローカルからクラウドへの移行は、セキュリティコストと手間と必要だけど余計なトレーニングの三つをそれぞれ天秤に載せて、トータルどちらが重いかで決まります。AI Platformはそれを三年掛けて、ついでに沢山の便利なツール群を引き連れて、ようやく追い抜いていったなぁと。三年前は、使える人しか使えなかったツールでしたが、今はおそらく誰もが使えます。そこまでハードルが下がってきました。という状況です。