このページでは、画像分類モデルから予測を行い、その結果をウェブアプリで表示する手順について説明します。
このチュートリアルには複数のページが含まれます。カスタム画像分類モデルから取得した予測情報の提供
各ページは、前のページのチュートリアルの手順をすでに実施していることを前提としています。
このドキュメントの以降の内容は、このチュートリアルの最初のページの手順を実施したときに作成したものと同じ Cloud Shell 環境を使用していることを前提としています。元の Cloud Shell セッションが開かれていない場合は、次の手順を行ってその環境に戻ることができます。-
In the Google Cloud console, activate Cloud Shell.
-
Cloud Shell セッションで次のコマンドを実行します。
cd hello-custom-sample
エンドポイントを作成する
このチュートリアルの前のページでトレーニングした ML モデルからオンライン予測を取得するため、Vertex AI エンドポイントを作成します。エンドポイントは 1 つ以上のモデルからオンライン予測を提供します。
Google Cloud コンソールの [Vertex AI] セクションで、[モデル] ページに移動します。
このチュートリアルの前のステップでトレーニングしたモデル(
hello_custom
) を探し、モデル名をクリックしてモデルの詳細ページを開きます。[デプロイとテスト] タブで、[エンドポイントへのデプロイ] をクリックして、[エンドポイントへのデプロイ] ペインを開きます。
[エンドポイントの定義] で、エンドポイントの基本情報を追加します。
[新しいエンドポイントを作成する] を選択します。
[エンドポイント名] フィールドに「
hello_custom
」と入力します。[モデル設定] セクションに、モデルの名前(
hello_custom
)が表示されていることを確認します。次のモデル設定を指定します。[トラフィック分割] フィールドに「
100
」と入力します。Vertex AI では、エンドポイントの複数のモデルへのトラフィックの分割がサポートされていますが、このチュートリアルではこの機能は使用しません。[コンピューティング ノードの最小数] フィールドに「
1
」と入力します。[Machine type] プルダウン リストで、[標準] セクションから [n1-standard-2] を選択します。
[完了] をクリックします。
[ロギング] セクションで、両方のタイプの予測ロギングが有効になっていることを確認します。
[続行] をクリックします。
[エンドポイントの詳細] で、エンドポイントが
us-central1 (Iowa)
にデプロイされていることを確認します。[顧客管理の暗号鍵(CMEK)を使用する] チェックボックスはオンにしないでください。このチュートリアルでは、CMEK は使用しません。
[デプロイ] をクリックしてエンドポイントを作成し、モデルをエンドポイントにデプロイします。
数分後、[エンドポイント] テーブルの新しいエンドポイントの横に
が表示されます。エンドポイントの作成が完了し、モデルがエンドポイントにデプロイされたことを知らせるメールが届きます。Cloud Run 関数をデプロイする
作成した Vertex AI エンドポイントから予測を取得するには、Vertex AI API の REST インターフェースにリクエストを送信します。ただし、オンライン予測リクエストを送信できるのは、aiplatform.endpoints.predict
権限を持つプリンシパルのみです。ウェブアプリなどからリクエストを送信するためにエンドポイントを公開することはできません。
このセクションでは、Cloud Run 関数 にコードをデプロイして、未認証のリクエストを処理します。このチュートリアルの最初のページでダウンロードしたサンプルコードには、この Cloud Run 関数が含まれています(function/
ディレクトリにあります)。必要に応じて、次のコマンドを実行して Cloud Run 関数のコードを確認します。
less function/main.py
この関数をデプロイする目的は次のとおりです。
認証されていないリクエストを受信するように Cloud Run 関数を構成できます。また、デフォルトでは、編集者のロールを持つサービス アカウントを使用して関数を実行します。このロールには、Vertex AI エンドポイントから予測を取得するために必要な
aiplatform.endpoints.predict
権限が含まれています。この関数は、リクエストに対する便利な前処理も実行します。Vertex AI エンドポイントは、トレーニング済みの TensorFlow Keras グラフの最初のレイヤ(固定サイズの正規化された浮動小数点のテンソル)で予測リクエストを想定しています。この関数は、画像の URL を入力として受け取り、イメージをこの形式に前処理し、Vertex AI エンドポイントから予測をリクエストします。
Cloud Run 関数をデプロイするには、次の操作を行います。
Google Cloud コンソールの Vertex AI セクションで、[エンドポイント] ページに移動します。
前のセクションで作成したエンドポイントの
hello_custom
行を探します。この行で、[リクエストの例] をクリックして [リクエストの例] ペインを開きます。[リクエストの例] ペインで、次のパターンに一致するシェルコードの行を見つけます。
ENDPOINT_ID="ENDPOINT_ID"
ENDPOINT_ID は、この特定のエンドポイントを識別する番号です。
このコードをコピーして Cloud Shell セッションで実行し、
ENDPOINT_ID
変数を設定します。Cloud Shell セッションで次のコマンドを実行して、Cloud Run 関数をデプロイします。
gcloud functions deploy classify_flower \ --region=us-central1 \ --source=function \ --runtime=python37 \ --memory=2048MB \ --trigger-http \ --allow-unauthenticated \ --set-env-vars=ENDPOINT_ID=${ENDPOINT_ID}
ウェブアプリをデプロイして予測リクエストを送信する
最後に、Cloud Storage で静的ウェブアプリをホストして、トレーニング済み ML モデルから予測を取得します。ウェブアプリは Cloud Run 関数にリクエストを送信します。この関数は、リクエストを前処理し、Vertex AI エンドポイントから予測を取得します。
ダウンロードしたサンプルコードの webapp
ディレクトリには、サンプル ウェブアプリが含まれています。Cloud Shell セッションで次のコマンドを実行し、ウェブアプリを準備してデプロイします。
以下では、コマンドで使用するいくつかのシェル変数を設定します。
PROJECT_ID=PROJECT_ID BUCKET_NAME=BUCKET_NAME
次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクト ID。
- BUCKET_NAME: このチュートリアルの最初のページで作成した Cloud Storage バケットの名前。
アプリを編集して、Cloud Run 関数のトリガー URL を入力します。
echo "export const CLOUD_FUNCTION_URL = 'https://us-central1-${PROJECT_ID}.cloudfunctions.net/classify_flower';" \ > webapp/function-url.js
webapp
ディレクトリを Cloud Storage バケットにアップロードします。gcloud storage cp webapp gs://${BUCKET_NAME}/ --recursive
アップロードしたウェブアプリ ファイルを公開読み取り可能にします。
gcloud storage objects update gs://${BUCKET_NAME}/webapp/** --add-acl-grant=entity=allUsers,role=READER
次の URL に移動して、ウェブアプリを開き、予測を取得します。
https://storage.googleapis.com/BUCKET_NAME/webapp/index.html
ウェブアプリを開き、花の画像をクリックすると、ML モデルの花の種類の分類が表示されます。このウェブアプリは、予測を花の種類のリストとして提示し、画像に各種の花が含まれている可能性を示します。
次のステップ
チュートリアルの最後のページで、作成したリソースをクリーンアップする。