もうアプリ化とかしなくてよくない? BigQueryとVertexAIのノートブックでサクサク開発

こんにちは。自前PCはMacbookAirですが、ビッグデータを解析するコードを書いている私です。PCのスペックが足りなくて JupyterLab とか JupyterNotebook では動かないんじゃないの? って思う方もいるかもしませんが、そこは平気なんです。
なぜなら、VertexAIのワークベンチ内で開発しているからです。後述しますが、普通の JupyterLab と見た目も操作感も同じです。

BigQueryとの相性が最高で、こんな感じでJupyter Magicの「%%bigquery」コマンドを使えば、BigQueryに直クエリできてデータ取得できます。
取得したデータはDataFrameに格納されます。すごく便利。大好き。


VertexAIのノートブックとは?

一言でいうと、GCP上に作れる JupyterLab の開発空間です。

VertexAI(GCPコンソール)

ここから「JUPYTERLAB を開く」をクリックすると、下記が別タブで開きます。

見た目はこんな感じで、ローカルの頃とほぼ同じですね。GCP上のGCE(AWSでいうところのEC2)で動くので、マイPCに高スペックは不要。ネットに繋がりさえすればいいのです。パソコン買い換える必要がないし、動かさない時は停止しておけば課金もされません。使い方次第ですが、ほとんどの場合は自分で高スペPCを揃えるよりもお財布にもやさしいと思います。

元々はAI PlatformというGCPの別サービス上でノートブックを作成していたんですが、2021年にVertexAIが公開されて、久しぶりに覗いてみたら自動的に移管されてました。(マネージドとユーザー管理のノートブックの2種類があるんですが、古いものはユーザー管理の方に移されたようです)

今も、AI Platformはメニュー上に表示されるんですが、ノートブックを開いてみるとVertexAIの方に自動で遷移します。

VertexAIのノートブックのメリット/デメリット

<メリット>

  • GCPのVertexワークベンチ上で動作するため、しょぼいPCでも関係なく開発できる
  • ノートブックを停止していれば課金されない
  • JupyterLabなので新しく使い方を覚える必要がない
  • BigQueryにもノートブック内から直クエリでアクセスできる(Jupyter Magicの「%%bigquery」コマンド)
  • 実質GCEなのでスペックを自由に変えられる
  • 「Resource Utilization」でCPUやメモリの使用状況がリアルタイムで目視できる※
  • データラベリング、AutoMLやAIトレーニングなど、機械学習系のサービスもVertexAIに含まれている
  • VertexAI内でモデルやデータセットを共有できる

※マネージドノートブックのみ。ユーザー管理のノートブックでは表示できませんでした。

<デメリット>

  • マシンタイプを高スペックに変えても、フル活用されていないことがある
  • ゾーンによっては使えない、変更できないマシンタイプもある(TokyoではGPUは使用不可)
  • マネージドノートブックでは東京リージョンが選べない(現時点ではアイオワ、オレゴン、モントリオール、ベルリンのみ)
  • 停止するの忘れがち(完全に自分のせいだけどw)
  • 一度作成してしまうとノートブック名やゾーンを変えられない

スペックと料金

公式の料金ページで確認すると、Tokyoリージョンだと
一番安いのは
e2-highmem-2(Efficient Instance, 2 vCPUs, 16 GB RAM):$0.13/時 →$94(12,810円)/月

一番高いのは
m1-ultramem-160(160 vCPUs, 3844 GB RAM):$35/時 →$25,200(3,434,193円)/月

ってなってます。高いマシンタイプを選択した場合、1ヶ月起動したままにしておくと大変ですね。300万円て。「停止するの忘れてましたテヘペロ」では済まされないですね。

ちなみに、公式の料金ページには載ってなかったのですが、コンソールではm2-ultramem-416(416 vCPUs, 11.50 TB RAM)というのも選択肢に出てきました。11.5TBて……震えます。

リージョンによる料金の違いに注意

ちなみに、マシンタイプの頭文字のe2とかm1とかっていうのはマシンファミリーのことで、以下のような分類になっています。

E2シリーズ:コスト最適化
N2 シリーズ:汎用マシン(Webサービス、アプリ配信など)
M2 シリーズ:メモリ最適化(インメモリのデータ分析に最適)
A2シリーズ:アクセラレータ最適化(MLトレーニング、HPCなどに最適。GPU搭載)

TokyoとIowaで見比べてみると、Tokyoは割高でした。
ちなみに、BigQueryテーブルのリージョンがTokyo(asia-northeast1-a)にあり、ノートブックはIowa(us-central1-c)で作成したのでどうかな〜? と思ったのですが、問題なくデータ取得できました。

BigQueryへのアクセスもリージョン違いで問題なかったので、他のGCPサービスもリージョン跨ぎできそうですね。
その場合、あえてTokyoリージョンでノートブック作る必要ない気がしますね。TokyoだとGPUのマシンタイプも選択できないし。

開発小ネタ①BigQueryクエリへのパラメータ渡し

ちょっと突っ込んだ話になりますが、ひとつ残念なのはBigQueryクエリへのパラメータ渡しでテーブル名を埋め込めないこと。Twitterでもつぶやいたのですが、値やカラム名は渡せます。

OKパターン(値渡し)

OKパターン(カラム名渡し)

NGパターン(テーブル名渡し)

ERROR:
400 Query parameters cannot be used in place of table names at [2:6]
とのことです。うーむ、惜しい。

開発小ネタ②GPUを使ったら処理速度が上がるか?

マネージドノートブックだとアイオワリージョンですがGPUが使えるので、
a2-highgpu-1g (Accelerator Optimized: 1 NVIDIA Tesla A100 GPU, 12 vCPUs, 85GB RAM)
で動かしてみましたが、ずっとこんな感じでした。

CPUは10%、メモリは8%、GPUは20%くらいしか使われずじまい(ずっと)。で、3日間動かし続けたのですが、処理の1/3も終わっていませんでした。その時点で請求が約20万円…無料枠(※)の範囲内ですが、このペースでは超えてしまうので違う方法を考えることにしました。※会社がGoogleパートナー登録しているので60万円ほどのGCPの無料枠があります。

ちなみに、同じ処理を n1-highmem-32(32 vCPUs, 208 GB RAM)で行ってみたものの、やはり終わらず。条件を変えて回してみたら、20時間以上かかってなんとか完了しました。

こちらはユーザー管理の方なのでリソース使用状況が見れないので全力を出せたかどうかは不明ですが、おそらくGPUの時と同じくらいなんじゃないかと。

マシンが全力を出せていないのは、たぶん私の書いたソースコードが悪いです(白目)

複雑な計算をしているわけではないのでそれほどCPU(GPU)は必要なさそう、と言うのと、メモリもループを細かく切りすぎたせいで使いきれていない模様。もうちょっと効率よくループさせる方法を考えないと、マシンスペックをあげても意味なさそうです。

でもまぁ、ワンクリックでマシンスペックを変更できるので、ソースコードと合わせて両面から検証、最適化していけるのはVertexAIはじめPaaS、IaaSの良いところだなと思います。

まとめ

  • しょぼい自前PCでもウェブにさえ繋がれば、VertexAIのワークベンチでビッグデータ分析・開発ができる
  • 開発案件やデータによってマシンタイプ(スペック)もワンクリックで変えられる
  • スペックの高いマシンタイプを選んでも、全力で動いてくれるとは限らない
  • 選択肢には出てくるが、リージョンによっては使用不可のマシンタイプもある
  • Jupyter Magicの「%%bigquery」コマンドを使えばノートブックからBigQueryに直クエリできるので開発効率がとても良い