デベロッパー

Vertex AI モデル レジストリを活用した BigQuery ML での機械学習オペレーション

※この投稿は米国時間 2022 年 4 月 9 日に、Google Cloud blog に投稿されたものの抄訳です。

機械学習(ML)モデルの運用責任者がトレーニングしたモデルやデータの全体的な状況を把握するためには、モデルを一元管理する場所が必要です。一元管理できる場所がないと、モデルのレビューや本番環境へのリリース プロセスに影響が生じ、多くの関係者とのオフライン レビューが必要になることも少なくありません。

先般、Google Cloud は、Vertex AI モデル レジストリを発表しました。これは、お客様の ML モデルのライフサイクルを管理し、統制するための中央リポジトリです。モデル レジストリでは、モデルのアーティファクトをバージョンごとに整理できるので、データ サイエンティストによるモデルの共有やアプリケーション開発者によるモデルのデプロイが容易になります。モデル レジストリは、BigQuery、Vertex AI、GCP 上のカスタム デプロイメント、あるいはクラウド外など、あらゆるタイプのモデルやデプロイ ターゲットに対応するよう設計されています。

このブログでは、モデル レジストリと BigQuery ML との連携について掘り下げ、BigQuery ML モデルの登録、バージョン管理、Vertex AI への容易なデプロイを可能にする機能を紹介します。

BigQuery ML モデルを Vertex AI モデル レジストリに登録する

1. Vertex AI モデル レジストリでは、すべての ML モデル(AutoML、カスタム トレーニング済み、BigQuery ML)を同じ場所で確認し、管理することが可能

2. SQL を使用してモデルを作成する際、BigQuery ML モデルを Vertex AI モデル レジストリに登録することが可能

Vertex AI モデル レジストリによるモデルのバージョン管理

3. Vertex AI モデル レジストリでモデル(BigQuery ML モデルを含む)のバージョン管理が可能

Vertex AI エンドポイントへの BigQuery ML モデルのデプロイが容易

4. BigQuery ML モデルを、Vertex AI モデル レジストリから Vertex のエンドポイントに直接デプロイすることが可能 

ここでは、これらの新機能について詳しく紹介します。

Vertex AI モデル レジストリへのモデル登録

すべての ML モデルの表示と管理を一元化

Vertex AI モデル レジストリ内ですべての ML モデルを確認できるようになり、組織のモデル管理とデプロイが容易になりました。モデルには、BigQuery ML、AutoML で構築されたモデル、カスタム トレーニング済みモデルなどが含まれます。

Model Registry

Vertex AI モデル レジストリのドキュメントの全文はこちらです。Vertex AI モデル レジストリ | Google Cloud(クリックして拡大)

BigQuery ML モデルを Vertex AI モデル レジストリに登録する

よくある質問について説明します。

Vertex AI モデル レジストリに BigQuery ML を登録する方法

CREATE MODEL 構文を使うことにより、オプションでmodel_registry="vertex_ai" 項目を追加し、モデルのトレーニングが完了した時点でモデルをモデル レジストリに登録できるようになりました。また、登録先として Vertex AI のモデル ID を指定でき、指定しない場合は BigQuery ML のモデル ID を使ってモデル レジストリに新規モデルとして登録されます。また、「staging」、「production」などのカスタムタグを指定して、モデルにラベル付けすることも可能です。

model_registry='vertex_ai'を含めた CREATE MODEL の使用例:

  CREATE OR REPLACE MODEL `bqml_tutorial.my_penguins_model`
OPTIONS
  (model_type='linear_reg',
  input_label_cols=['body_mass_g'],
  model_registry='vertex_ai',
  vertex_ai_model_version_aliases=['linear_reg', 'experimental']
  ) AS
SELECT
  *
FROM
  `bigquery-public-data.ml_datasets.penguins`
WHERE
  body_mass_g IS NOT NULL

ドキュメント全文はこちら: Vertex AI によるモデルの管理 | BigQuery ML | Google Cloud

注: Access Denied: BigQuery BigQuery: Permission 'aiplatform.models.upload' denied on resource というエラーが表示された場合、まずここの手順に沿って正しいアクセス許可を設定する必要がある場合があります。これは一時的なものです。将来のリリースでは、BigQuery ML モデルを Vertex AI モデル レジストリに登録する前に、これらのアクセス許可を明示的に設定する必要はなくなります。

トレーニングが完了すると、Vertex AI モデル レジストリに BigQuery ML モデル (my_penguins_model)が表示されます。

My Models

クリックして拡大

モデルをクリックすると、モデルのバージョンやエイリアスなど、より詳細な情報を確認できます。

Inspect Models

クリックして拡大

この時点でいくつか質問があるかもしれません。

BigQuery ML モデルはすべて自動的に Vertex AI モデル レジストリに登録されるのですか? 

いいえ。ユーザーが設定しない限り、BigQuery ML モデルは自動的にはモデル レジストリに登録されません。データ サイエンティストがさまざまなモデルを反復して実験し、一部のモデルだけをモデル レジストリに登録しようとするケースが考えられます。BigQuery ML のユーザーは、CREATE MODEL クエリで model_registry="vertex_ai" を使用して、明示的に Vertex AI モデル レジストリに登録したいモデルを選択することができます。Vertex AI モデル レジストリへの登録の有無にかかわらず、BigQuery ML で作成されたモデルは BigQuery 内で確認することができます。

どのような BigQuery ML モデルでも Vertex AI モデル レジストリに登録することが可能ですか?

今のところ、すべてが登録可能ではありません。BigQuery ML には多くの 対応モデルタイプがあり、組み込みモデルはもちろん、インポートした TensorFlow モデルも Vertex AI モデル レジストリに登録可能です(ドキュメント全文)。

Vertex AI モデル レジストリから BigQuery ML モデルを直接削除することは可能ですか?

現在はできません。BigQuery ML のモデルの削除は、BigQuery ML からのみ削除できます。BigQuery ML からモデルを削除すると、自動的に Vertex AI モデル レジストリから削除されます。BigQuery ML モデルの削除に関する詳しい情報は、ドキュメントをご覧ください。

Vertex AI モデル レジストリによるモデルのバージョン管理

Vertex AI モデル レジストリでモデル(BigQuery ML モデルを含む)のバージョン管理が可能

Vertex AI モデル レジストリのモデル バージョン(BigQuery ML モデルを含む)をユーザーが把握できるようになりました。モデルのバージョンを管理することで、同じモデルで複数のバージョンを作成できます。それにより、モデルを整理して、どの変更がモデルにどのような影響を与えたかをモデルを見ながら把握することができます。Vertex AI モデル レジストリを使用すると、モデルとその全バージョンを一度に見ることができます。

BigQuery ML の最初のモデルをモデル レジストリに登録した後、同じ model_id に 2 番目のバージョンを登録すると、モデル レジストリには 2 つのバージョンが表示されます。

例えば、最初のモデル my_penguins_model をトレーニングした後、別のバージョンのモデルをトレーニングして、同じ vertex_ai_model_id で Vertex AI モデル レジストリに登録し、任意のエイリアスを追加することが可能です。

  CREATE MODEL `bqml_tutorial.my_penguins_model_2`
OPTIONS
  (model_type='linear_reg',
  input_label_cols=['body_mass_g'],
  model_registry='vertex_ai',
  vertex_ai_model_id='my_penguins_model',
  vertex_ai_model_version_aliases=['ready_for_staging']
  ) AS
SELECT
  *
FROM
  `bigquery-public-data.ml_datasets.penguins`
WHERE
  body_mass_g IS NOT NULL

Vertex AI モデル レジストリの [モデルの詳細] で、新しいバージョンのモデルを見ることができます。

model_versions_penguins

モデルのバージョン管理に関するドキュメント全文はこちらです。Vertex AI モデル レジストリを使用したモデルのバージョン管理 | Google Cloud(クリックして拡大)

Vertex AI エンドポイントへの BigQuery ML モデルのデプロイが容易

BigQuery ML モデルを Vertex AI エンドポイントにデプロイすることを検討すべき理由はなんでしょうか。BigQuery ML は大規模データセットのバッチ予測に最適ですが、一般的に低レイテンシかつ高い秒間クエリ数の推論を伴うオンライン予測を必要とする状況には不向きです。また、データ サイエンティストや ML エンジニアは、モデルの推論に SQL クエリを使用するよりも、REST エンドポイントを使用して予測を提供することを好む場合があります。今回、より簡単に BigQuery ML モデルを Vertex AI エンドポイントにデプロイできるようになったことで、どちらのシナリオにも対応できるようになりました。

BigQuery ML モデルを Vertex AI モデル レジストリから直接 Vertex エンドポイントにデプロイ

BigQuery ML モデルを Vertex AI モデル レジストリに登録することで、モデル レジストリのインターフェースから数回のクリックするだけで、簡単にモデルをエンドポイントにデプロイできるようになります。

[エンドポイントにデプロイ] を選択します。

deploy_endpoint

クリックして拡大

Vertex のエンドポイントにオンライン予測リクエストを行う

BQML モデルがエンドポイントに正常にデプロイされると、オンライン予測リクエストができるようになります。予測リクエストが正しい入力形式に従っていることを確認してください。以下は、JSON ファイルとしての予測リクエスト(新しいテストデータ付き)の例です。

  prediction_request.json
 {"instances": [{"species": "Adelie Penguin (Pygoscelis adeliae)", 
                "island": "Dream", 
                "culmen_length_mm": 36.6, 
                "culmen_depth_mm": 18.4, 
                "flipper_length_mm": 184.0, 
                "sex": "FEMALE"}]}

その後、オンラインで予測リクエスト(ドキュメント)を行います。

  ENDPOINT_ID="MY-ENDPOINT-ID"
PROJECT_ID="MY-PROJECT-ID"
INPUT_DATA_FILE="prediction_request.json"
curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://us-central1-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/us-central1/endpoints/${ENDPOINT_ID}:predict \
-d "@${INPUT_DATA_FILE}"
Pred Response
注: BigQuery ML からインポートした TensorFlow モデルを使用している場合、未加工の予測リクエストを使用する必要があります。

結論

今回の BigQuery ML と Vertex AI モデル レジストリの統合により、モデルの追跡、モデルのバージョン管理、デプロイがこれまで以上に簡単に行えるようになります。モデルの作成にぜひご活用ください。

詳細を確認する

このブログの執筆にあたっては、Abhinav Khushraj 氏、Henry Tappen 氏、Ivan Nardini 氏、Shana Matthews 氏、Sarah Dugan 氏、Katie O'Leary 氏にご協力いただきました。


- デベロッパー アドボケイト、Polong Lin
- ソフトウェア エンジニア、Bo Yang