【Vertex AI】Workbench は革命児


:::note info
この記事は ZOZO Advent Calendar 2021 #4 3日目の記事になります
:::

こんにちは [Sato Yu](https://twitter.com/rayuron) です
少し前の話ですが、GCP から Vertex AI がローンチされました
普段は GCP の AI Platform Notebook を使ってコードを書くことが多いのですが、Vertex AI Workbench という 新たな Jupyter Lab のマネージドサービスを発見し興味を持っていました
GCS や BigQuery との連携で少し話題になっていたのですが、関連記事が少なかったので、今回は実際に使用して、その使用感(+使用方法)をレビューしてみようと思います

:::note warn
Vertex AI Workbench は現在(2021-12-02時点) プレビュー版 なので、本記事の投稿時から情報が変更される可能性がありますので、ご注意下さい
:::

# 使用方法
*AI Platform Notebook 同様、簡単にインスタンスを立てることができます

1. GCP > Vertex AI > ワークベンチ > マネージドノートブック を選択
2. インスタンスを立てる
    - GCR から Dockerコンテナのイメージのパス を指定をすることで カスタムJupyterカーネル へのアクセスも可能なようです(未検証)
    - シングルユーザーにのみアクセス権限が与えられるので他のユーザーのアクセスは現在(2021-12-03)出来なさそうでした <br>
      (*権限については従来の AI Platform Notebook ではサービスアカウントモードがサポートされていたので、今後サポートされそうではありますが、、)
3. インスタンスが立ち上がったら `JUPYTERLABを開く` をクリック

*API割り当て上限のリクエストに引っかる場合は[こちら]((https://developers.google.com/analytics/devguides/config/mgmt/v3/limits-quotas?hl=ja))をご参照ください

# 使用感について
## UI
<img width=600 alt="スクリーンショット 2021-12-02 11.39.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/518616/6ebde748-a703-dafe-04b6-c5df10abbf96.png">

- 左のタブには新しく GCS, BigQuery, Executor の欄が追加されています
- 左下の Simple をオンにするとUIが少し Simple になります
- 右上からは Machine Resource を簡単に確認、変更できます
- 右の 歯車 のマークをクリックすると Executor で使える `Cell Tag` などを設定することができます (後述します)
- 右の Debug のマークをクリックすると使用中の変数などを確認することができます
- Notebook の新規作成の際の環境で Pytorch、TensorFlow などが選択できます

上記が AI Platform Notebook からの大きな変更点かと思います
個人的には Workbench の方が UI が好みです
次に、それぞれの機能の使い方に関して触れていこうと思います

## GCS との連携
**嬉しいこと**
1. Workbench の UI から GCS のファイルパスの確認ができます
2. ローカルから GUI 経由で GCS にファイルを Upload できます

GCS との連携で特に嬉しいのは、GUI から GCS のパスやファイルの確認や操作ができるという点だと思います
これでGCSとJupyterの画面をわざわざ行き来する必要がなくなりました

## BigQuery との連携
**嬉しいこと**
1. 左のBQタブに表示されるテーブルをダブルクリックすると、そのテーブルのメタ情報とプレビューを確認することができます


<img width=400 alt="スクリーンショット 2021-12-02 19.51.11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/518616/daf834af-a895-1471-7733-d0b3f2d7f31c.png">


2. データ分析の為の諸操作が簡単に
上の UI から `Query table` をクリックすると、クエリエディタが展開し、BigQueryと同じようにクエリを実行できます
<img width=500 alt="スクリーンショット 2021-12-02 13.51.22.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/518616/bc518651-bc2d-7fc1-cb91-d56eca532df7.png">

さらに出力結果から
- `Copy code for DataFrame` のクリックで出力結果を DataFrame に落とすためのコードがコピーされセルにペーストできます
- `Explore in Data Studio` のクリックで Data Studio にそのデータ持っていきデータの可視化などができます

上の UIから `Generate Statistics` をクリックすると 

```
%bigquery_stats <table_id>
```

が書かれたセルが自動で挿入され、セルの実行で pandas_profiling 的な集計をしてくれます
`%bigquery_stats` このマジックコマンドは今回初めて見たのですが、かなり便利なコマンドだと思います
<img width=500 alt="スクリーンショット 2021-12-01 17.20.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/518616/320a5975-a24c-c041-62b2-909f37b0b1a3.png">

# Executor
個人的には今回の目玉機能だと思っています
Notebook 内のセルを自動で実行するジョブを作成することができます
Notebook 上部 Executor の表示をクリックすると下画像のようなタブが出現します
そこから出力を保存する GCS バケット、 Machine Resource 、一回の実行なのか定期実行なのか、 Input parameters(後述) などを指定することができます
<img width=400 alt="スクリーンショット 2021-12-02 17.52.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/518616/29e060d4-7db9-1956-d980-2f52fc17ee27.png">

- 生み出されたジョブは Vertex Training の Custom Jobs に格納されます
- ジョブの結果は Vertex AI > ワークベンチ > 実行数タブ から確認することができます(Notebookの出力形式で)
- 実行された Notebook はジョブ作成時に指定した GCS に保存されます

Notebook をジョブとして自動実行できるのはとてもありがたい話です
Input parameters を指定できるので実験の際に重宝しそうです
また、定期実行ができるので 実験だけではなく、何か定期的に回したいコードなどを動かすなど、汎用的に使用することもできます

**補足: ジョブに Input parameters を渡す方法が少し複雑だったので備忘録**
1. 変数を定義しているセルの `Cell Tag` (先述) に対して `parameters` という Tag を追加 & クリックでチェックマークを付けます( params などの他の文字列はダメ)
<img width=400 alt="スクリーンショット 2021-12-02 18.43.30.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/518616/e3fd8b7d-95a3-a819-c7fd-8555d1418798.png">
2. Notebook 上部 Executor の表示をクリックし、GUI から Input parameters に`x=fuga`の様な形で Input parameter として代入したい変数を記します
<img width=400 alt="スクリーンショット 2021-12-02 18.50.47.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/518616/796cf3ee-c427-5623-acb7-483c3835c6dd.png">
3.この状態でジョブを作成します

すると実行時にそのセルの1つ下に Input parameters で指定した変数を定義したセルが挿入されます
つまり変数が上書きされた状態になります(x="hoge"のセルの下に x="fuga"のセルが挿入される)

**Input parameters で試行錯誤してわかったこと**

- x=1,y=hogeの様に形式的に記す必要があります(複数指定する場合は`,`で分ける)
- `" . /` などの記号は使えない(x="hoge" はダメで、x=hogeで通る)
- 変数の間のスペースも使えない
- GUI から x=1 としてパラメーターを設定してもセル上では x="1" となり文字列型で代入される

# まとめ
これまで Vertex AI Workbench おおよその機能とその使用感について述べてきました
まだ説明しきれていない機能がありますが、それについてはドキュメントや他の記事を参考にされてください

## 参考
- [Vertex AI Workbench 公式ドキュメント](https://cloud.google.com/vertex-ai/docs/workbench)
- [Vertex AI Workbench Executor チュートリアル](https://codelabs.developers.google.com/vertex_notebook_executor)