こんにちは。自前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に直クエリできるので開発効率がとても良い
API ARIMA AutoML Bard BigQuery Bing ChatGPT Cloud Endpoints Cloud Storage DWH EBPM GAS Generative AI Google Apps Script Google Cloud Google Form Google Workspace IT組織 Outlook PaLM PDF Python ReportLab selenium Statsmodels STL VertexAI Vertex Forecast スクラッチ セミナー ソトミル トレンド分析 トレーニング バッチ予測 世界は女性とデジタルが救う 女性活躍 技術 時系列データ分析 業務効率化 機械学習 特徴量エンジニアリング 生成AI 自動化 評価指標 需要予測