1. はじめに
この Codelab では、Vertex AI AutoML を使用して映画スコア予測モデルを作成し、デプロイされたモデル エンドポイントを Java Cloud Functions からトリガーします。モデルは BigQuery に保存されたデータでトレーニングされ、Vertex AI に登録されます。サービスのリストは、次の 2 つのセクションで構成されます。
- ML モデルの作成とデプロイ
- ML API を使用した予測のトリガー
ML モデルの作成:
- CSV から BigQuery に供給されるデータ
- AutoML モデル作成のために Vertex AI に統合された BigQuery データ
- Endpoint API を生成するために Vertex AI Model Registry にデプロイされたモデル
ML API を使用した予測のトリガー:
- デプロイされた AutoML モデルのエンドポイント呼び出しをトリガーする Java の Cloud Functions。UI からのリクエストとして映画の詳細を受け取り、予測された映画の SCORE を返します。
アプリケーションのアーキテクチャの概要は次のとおりです。
上記のアーキテクチャの適用は、この Codelab の範囲外ですが、クライアント アプリケーションも開発する場合は、ブログをご覧ください。
実装手順について詳しく見ていきましょう。
作成するアプリの概要
次のものを作成します。
- テーブルとモデル コンポーネントが格納された BigQuery データセット
- Vertex AI AutoML モデル(作成とデプロイ)
- ML API を使用した予測のトリガーを実行する Java Cloud Functions
2. 必要なもの
前提条件は次のとおりです。
プロジェクトを作成する
- Google Cloud コンソールのプロジェクト選択ページで、Google Cloud プロジェクトを選択または作成します。
- Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。
- BigQuery に移動して API を有効にします。ブラウザに次の URL を入力して、BigQuery ウェブ UI を直接開くこともできます。https://console.cloud.google.com/bigquery
Cloud Shell をアクティブにする
- Cloud Shell(Google Cloud で動作するコマンドライン環境)を使用します。この環境には bq がプリロードされています。Cloud コンソールで、右上の [Cloud Shell をアクティブにする] アイコン
をクリックします。
- Cloud Shell に接続すると、すでに認証は完了しており、プロジェクトに各自のプロジェクト ID が設定されていることがわかります。Cloud Shell で次のコマンドを実行して、認証されたことを確認します。
gcloud auth list
- Cloud Shell で次のコマンドを実行して、gcloud コマンドがプロジェクトを認識していることを確認します。
gcloud config list project
- プロジェクトが設定されていない場合は、次のコマンドを使用して設定します。
gcloud config set project <PROJECT_ID>
gcloud コマンドとその使用方法については、ドキュメントをご覧ください。
3. トレーニング データの準備
これは、すべてのデータ関連のプロジェクト、プロダクト、アプリにおいて重要なステップです。最適なデータセットを準備し、ML プロジェクトで使用できるようにするには、テクノロジーのほかに、多くのドメインの専門知識が必要です。この Codelab では、データがすでに準備されていることを前提とし、すでに処理済みのデータ ファイルを使用します。
4. データセットの作成と読み込み
BigQuery データセットはテーブルのコレクションです。データセット内のすべてのテーブルは、同じデータのロケーションに保存されます。また、アクセス制御をカスタマイズして、データセットとそのテーブルへのアクセスを制限することも可能です。
- Cloud Shell で bq mk コマンドを使用して、「movies」というデータセットを作成します。
bq mk --location=<<LOCATION>> movies
ロケーションをリージョン(asia-south1)に設定します。必ず VERTEX AI の手順のリージョンとしても設定してください(両方のインスタンスが同じリージョンにある必要があります)。
- データファイル(.csv)が用意できていることを確認します。Cloud Shell で次のコマンドを実行してリポジトリのクローンを作成し、プロジェクトに移動します。
git clone <<repository link>>
cd movie-score
- bq load コマンドを使用して、CSV ファイルを BigQuery テーブルに読み込みます(BigQuery UI から直接アップロードすることもできます)。
bq load --source_format=CSV --skip_leading_rows=1 movies.movies_score \
./movies_bq_src.csv \ Id:numeric,name:string,rating:string,genre:string,year:numeric,released:string,score:string,director:string,writer:string,star:string,country:string,budget:numeric,company:string,runtime:numeric,data_cat:string
- 次のいずれかの方法でクエリを実行します。
BigQuery を操作するには、次の 3 つの方法があります。ここでは、そのうちの 2 つを試します。BigQuery ウェブ UI b. bq コマンド c. API
SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;
BigQuery Web SQL ワークスペースを使用してクエリを実行しました。SQL ワークスペースは次のようになります。
bq コマンドを使用する:
bq query --use_legacy_sql=false \
SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;
5. Vertex AI AutoML で BigQuery データを使用する
BigQuery のデータを使って、Vertex AI で直接 AutoML モデルを作成します。BigQuery 自体から AutoML を実行し、モデルを VertexAI に登録してエンドポイントを公開することも可能です。BigQuery AutoML のドキュメントを参照してください。ただし、今回の例では、Vertex AI AutoML を使用してモデルを作成します。
Vertex AI データセットの作成
Google Cloud コンソールから Vertex AI に移動し、まだ Vertex AI API を有効にしていない場合は有効にします。データを展開して [データセット] を選択し、[作成] をクリックします。[表形式] データタイプと [回帰 / 分類] オプションを選択して、[作成] をクリックします。
データソースの選択
次のページで、データソースを選択します。[テーブルまたはビューを BigQuery から選択] オプションを選択し、[BigQuery のパス] の [参照] フィールドで BigQuery からテーブルを選択します。[続行] をクリックします。
注意: BigQuery テーブルを Vertex AI で表示するには、BigQuery インスタンスと Vertex AI データセットのリージョンが同じである必要があります。
参照リストからソーステーブル/ビューを選択する場合は、必ずラジオボタンをクリックして、以下の手順を続行してください。誤ってテーブル / ビューの名前をクリックすると、Dataplex に移動します。その場合は、Vertex AI に戻る必要があります。
モデルをトレーニングする
- データセットが作成されると、[分析] ページに新しいモデルをトレーニングするオプションが表示されます。クリックします。
- [目的] は [分類] のままにして、最初のページで [AutoML] オプションを選択し、[続行] をクリックします。
- モデルに名前を付け、[Target column] のプルダウンから [Score] を選択し、[続行] をクリックします。
- また、[Export test dataset to BigQuery] オプションをオンにすると、追加の統合レイヤやサービス間でのデータ移動の必要なしに、データベース内の結果を含むテストセットを効率的かつ簡単に確認できます。
- 次のページでは、必要に応じた高度なトレーニング オプションと、モデルに設定するトレーニング時間を選択できます。なお、トレーニングに使用するノード時間を増やす場合は、料金設定にご注意ください。
[トレーニングを開始] をクリックして、新しいモデルのトレーニングを開始します。
モデルの評価、デプロイ、テスト
トレーニングが完了すると、[トレーニング](左側のメニューの [MODEL DEVERPMENT] という見出しの下)をクリックして、[TRAINING PIPELINES] セクションに一覧表示されているトレーニングを確認できるようになります。該当するトレーニングをクリックすると、[モデル レジストリ] ページが表示され、次のことを行える必要があります。
- トレーニング結果を表示して評価する
- API エンドポイントでモデルをデプロイしてテストする
モデルをデプロイすると、アプリケーションで使用してリクエストを送信し、レスポンスでモデルの予測結果を取得できる API エンドポイントが作成されます。
このセクションから先に進む前に、Vertex AI エンドポイント セクションで、デプロイされたモデルのエンドポイント ID、ロケーションなどの詳細をメモしておいてください。
6. ML 呼び出しをトリガーする Java Cloud Functions
ML のデプロイ手順でエンドポイントやその他の詳細情報をメモしたことを覚えていますか?ここではそれを使用します。Java の Cloud Functions を使用しているため、依存関係の処理には pom.xml を使用します。google-cloud-aiplatform ライブラリを使用し、Vertex AI AutoML エンドポイント API を活用します。
- Google Cloud コンソールで Cloud Functions を検索し、[関数の作成] をクリックします。
- 環境、関数名、リージョン、トリガー(ここでは HTTPS)、任意の認証などの構成の詳細を入力して [HTTPS が必須] をオンにし、[保存]、[次へ] の順にクリックします。
- 次のページで、ランタイム(Java 11)、ソースコード(インラインまたはアップロード)を選択し、編集を開始します。
- リポジトリから java ファイルと pom.xml ファイルをコピーし、インライン エディタのそれぞれのファイルに貼り付けます。ローカル エディタを使用している場合は(推奨)、リポジトリからソースのクローンを作成します。
- この例の .java ソースファイルで、プロジェクト ID、エンドポイント ID、ロケーション、エンドポイントを変更します。ただし、認証情報を保存するには Secret Manager を使用することをおすすめします。
- この Codelab では、コピーしたソースコードの .java クラス内の MongoDB 部分をコメント化します。
すべての変更が完了したら、関数をデプロイします。クライアント アプリケーションでこの Cloud Functions の関数にリクエストを送信し、映画のスコアをレスポンスとして受け取るために使用できるエンドポイント URL が表示されます。
7. クリーンアップ
この投稿で使用したリソースについて、Google Cloud アカウントに課金されないようにするには、次の操作を行います。
- Google Cloud コンソールで、[リソースの管理] ページに移動します。
- プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
- ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。
8. 完了
これで、Vertex AI AutoML で映画スコア予測モデルを作成してデプロイし、デプロイされたモデルを Cloud Functions からトリガーしました。