こんにちは。自前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に直クエリできるので開発効率がとても良い