1. 概要
このラボでは、BigQuery ML でモデルをトレーニングし、そのモデルを Vertex AI にエクスポートしてデプロイします。これは、Google Cloud の最新の AI プロダクトです。
学習内容
次の方法を学習します。
- BigQuery ML(BQML)を使用してモデルをトレーニングする
- BQML モデルを Cloud Storage にエクスポートする
- トレーニング済みの BQML を Vertex AI にデプロイする
- デプロイしたモデルの予測を取得する
このラボを Google Cloud で実行するための総費用は約 $2 です。
2. Vertex AI の概要
このラボでは、Google Cloud で利用できる最新の AI プロダクトを使用します。Vertex AI は Google Cloud 全体の ML サービスを統合してシームレスな開発エクスペリエンスを提供します。以前は、AutoML でトレーニングしたモデルやカスタムモデルには、個別のサービスを介してアクセスする必要がありました。Vertex AI は、これらの個別のサービスを他の新しいプロダクトとともに 1 つの API へと結合します。既存のプロジェクトを Vertex AI に移行することもできます。ご意見やご質問がありましたら、サポートページからお寄せください。
Vertex AI には、エンドツーエンドの ML ワークフローをサポートするさまざまなプロダクトが含まれています。このラボでは、以下でハイライト表示されているプロダクト(Prediction、Notebooks)を取り上げます。
3. 環境を設定する
この Codelab を実行するには、課金が有効になっている Google Cloud Platform プロジェクトが必要です。プロジェクトを作成するには、こちらの手順を行ってください。
ステップ 1: Compute Engine API を有効にする
まだ有効になっていない場合は、[Compute Engine] に移動して [有効にする] を選択します。これはノートブック インスタンスを作成するために必要です。
ステップ 2: Vertex AI API を有効にする
Cloud コンソールの [Vertex AI] セクションに移動し、[Vertex AI API を有効にする] をクリックします。
ステップ 3: Notebooks インスタンスを作成する
モデルをデプロイした後、Notebooks を使用して予測を取得します。Cloud コンソールの [Vertex AI] セクションで、[Notebooks] をクリックします。
そこから、[新しいインスタンス] を選択します。次に、[TensorFlow Enterprise 2.3] インスタンス タイプに [GPU なし] を選択します。
デフォルトのオプションを使用して、[作成] をクリックします。インスタンスが作成されたら、[JupyterLab を開く] を選択します。
4. BigQuery ML モデルをトレーニングする
BigQuery ML では、BigQuery に保存されたデータを使用してカスタム ML モデルをトレーニングできます。すべての SQL でモデルをトレーニングし、モデルから予測を取得できます。このラボでは、BigQuery の一般公開されているデータセットを使用して、クレジット カードによる支払いで債務不履行が発生する可能性を予測します。
ステップ 1: プロジェクトに BigQuery データセットを作成する
BigQuery ML でモデルをトレーニングするには、プロジェクト内にこのモデルを格納するデータセットを作成する必要があります。左側のメニューバーでプロジェクトをクリックし、[データセットを作成] を選択します。
[データセット ID] フィールドに「cc_default
」と入力します。残りのフィールドはそのままにして、[データセットを作成] をクリックします。
ステップ 2: CREATE MODEL クエリを実行する
BigQuery のクエリエディタで次の CREATE MODEL
クエリを実行し、使用する一般公開データセットで BigQuery ML モデルを作成してトレーニングします。your-project
は、Cloud プロジェクトの名前に置き換えてください。
CREATE OR REPLACE MODEL
`your-project.cc_default.logistic_model` OPTIONS(model_type='LOGISTIC_REG',
input_label_cols=['default_payment_next_month']) AS
SELECT
limit_balance,
sex,
education_level,
marital_status,
age,
pay_0,
pay_2,
pay_3,
pay_4,
pay_5,
pay_6,
bill_amt_1,
bill_amt_2,
bill_amt_3,
bill_amt_4,
bill_amt_5,
bill_amt_6,
pay_amt_1,
pay_amt_2,
pay_amt_3,
pay_amt_4,
pay_amt_5,
pay_amt_6,
default_payment_next_month
FROM
`bigquery-public-data.ml_datasets.credit_card_default`
これにより、0 ~ 1 の範囲の数値を出力するロジスティック回帰モデルが作成されます。これは、実行に約 1 分かかることを示します。完了すると、データセットの下にモデルが表示されます。
モデルをクリックすると、トレーニング指標と評価指標を確認できます。
5. BigQuery ML モデルをエクスポートする
トレーニング済みの BQML モデルでは、BQML SQL 構文を使用して予測を取得することも、モデルをエクスポートして別の場所にデプロイすることもできます。ここでは、モデルをエクスポートして Vertex AI にデプロイし、モデルをスケーラブルにサービングして予測を取得できるようにします。
ステップ 1: モデルの Cloud Storage バケットを作成する
モデルの詳細で、[モデルをエクスポート] をクリックします。
モデルのアセットをエクスポートする Google Cloud Storage(GCS)のロケーションの入力を求められます。GCS バケットがまだない場合は、作成しようとしています。まず、[参照] をクリックします。
次に、+ アイコンをクリックして新しいバケットを作成します。
一意の名前を付けます(ストレージ バケット名はグローバルに一意である必要があります)。[続行] をクリックします。次のステップでは、[ロケーション タイプ] で [リージョン] を選択し、プルダウンからいずれかのリージョンを選択します。
デフォルトのストレージ クラスを使用し、アクセス制御の下で [均一] が選択されていることを確認します。
[続行] をクリックし、残りの項目はデフォルトのままにします。次に [作成] をクリックします。
ステップ 2: BQML モデルをエクスポートする
新しいバケットを作成したら、[名前] フィールドに「model-assets
」など任意の名前を入力し、[選択] をクリックします。
[エクスポート] をクリックします。これにより、指定した新しく作成された GCS バケットに TensorFlow の SavedModel 形式でモデルをエクスポートするジョブが BigQuery に作成されます。エクスポートには 1 分ほどかかります。
モデルのエクスポート中に、Cloud コンソールの [ストレージ] セクションに移動します。ジョブが完了すると、モデルアセットが、model-assets
サブディレクトリに作成したバケットにエクスポートされます。
6. モデルを Vertex AI にインポートする
このステップでは、モデルアセットをエクスポートしたばかりの GCS ストレージ ロケーションを参照して、モデルを作成して Vertex AI にインポートします。
ステップ 1: モデルをインポートする
Cloud コンソールで、Vertex AI の [モデル] セクションに移動します。そこから、[インポート] を選択します。
最初のステップでは、モデルに predict_default
という名前を付けます。バケットを作成したリージョン(us-central1、europe-west4、または asia-east1)を選択します。[続行] をクリックします。[モデル設定] で、[新しいビルド済みコンテナにモデル アーティファクトをインポートする] を選択したままにします。選択済みです。
[モデル フレームワーク] プルダウンで、[TensorFlow] を選択します。フレームワーク バージョンとして [2.3] を選択します。
[モデル アーティファクトの場所] フィールドで [参照] をクリックし、作成した GCS バケットをクリックして、model-assets ディレクトリをクリックします。
[インポート] をクリックします。モデルのインポートには数分かかります。作成されたモデルは、Cloud コンソールの [モデル] セクションに表示されます。
7. モデルをエンドポイントにデプロイする
モデルのアップロードが完了したので、次に Vertex でエンドポイントを作成します。Vertex の Model リソースには複数のエンドポイントを関連付けることができ、エンドポイント間でトラフィックを分割できます。
ステップ 1: エンドポイントを作成する
モデルページで [デプロイとテスト] タブに移動し、[エンドポイントにデプロイ] をクリックします。
エンドポイントに default_pred_v1
などの名前を付けます。トラフィック分割の設定はそのままにして、モデルのデプロイに使用するマシンタイプを選択します。ここでは n1-highcpu-2
を使用しましたが、どちらのマシンタイプも選択できます。
[完了] を選択し、[続行] をクリックします。選択したロケーションの設定はそのままにして、[デプロイ] をクリックします。エンドポイントのデプロイには数分かかります。完了すると、その横に緑色のチェックマークが表示されます。
もう少しで完了です。これで、デプロイしたモデルの予測を取得する準備が整いました。
8. デプロイしたモデルで予測を取得する
モデルの予測を取得するにあたっては、いくつかの選択肢があります。
- Vertex AI UI
- Vertex AI API
ここでは、API を使用して予測を取得する方法を示します。
ステップ 1: Vertex AI API を使用してモデル予測を取得する
ここでモデルの予測を取得する方法を説明するために、このラボの最初に作成した Vertex ノートブック インスタンスを使用します。
次に、作成したノートブック インスタンスを開き、Launcher から Python 3 ノートブックを開きます。
ノートブックのセル内で次のように実行し、default-pred.json
という名前の JSON ファイルにテスト例を書き込みます。この例をモデルに送信して予測を行います。
%%writefile default-pred.json
{
"instances": [
{"age": 39,
"bill_amt_1": 47174,
"bill_amt_2": 47974,
"bill_amt_3": 48630,
"bill_amt_4": 50803,
"bill_amt_5": 30789,
"bill_amt_6": 15874,
"education_level": "1",
"limit_balance": 50000,
"marital_status": "2",
"pay_0": 0,
"pay_2":0,
"pay_3": 0,
"pay_4": 0,
"pay_5": "0",
"pay_6": "0",
"pay_amt_1": 1800,
"pay_amt_2": 2000,
"pay_amt_3": 3000,
"pay_amt_4": 2000,
"pay_amt_5": 2000,
"pay_amt_6": 2000,
"sex": "1"}
]
}
次に、Vertex UI で、デプロイしたエンドポイントの [Sample Request] をクリックします。
[REST] タブの ステップ 4 のコードをノートブックにコピーし、セルを実行します。
次に、バケットとモデルを作成したリージョンの変数を追加します。以下の文字列の your-region
を置き換えます。
REGION="your-region" # either us-central1, europe-west4, or asia-east1
最後に、次のコードをノートブックにコピーして、curl
を使用してエンドポイントに予測リクエストを行います。
!curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://us-central1-prediction-aiplatform.googleapis.com/v1alpha1/projects/$PROJECT_ID/locations/$REGION/endpoints/$ENDPOINT_ID:predict \
-d "@default-pred.json"
次のように表示されます(正確な予測値は若干異なります)。
{
"predictions": [
{
"default_payment_next_month_values": [
"1",
"0"
],
"default_payment_next_month_probs": [
0.180815295299778,
0.819184704700222
],
"predicted_default_payment_next_month": [
"0"
]
}
],
"deployedModelId": "your-model-id"
}
default_payment_next_month_probs
の値は各クラスの確率を示します。この例では、この人が次回の支払いで債務不履行をしない確率は 81% であると予測しています。.819
値は 0
クラスに対応します(デフォルトではありません)。
お疲れさまでした
ここでは、以下の方法を学びました。
- BQML でモデルをトレーニングする
- BQML モデルを Cloud Storage にエクスポートする
- 予測のために BQML モデルを Vertex AI にインポートする
- Vertex AI モデルを作成してエンドポイントにデプロイする
- Vertex Notebooks と curl を使用して、デプロイしたエンドポイントで予測を取得する
Vertex AI のさまざまな部分について詳しくは、ドキュメントをご覧ください。
9. クリーンアップ
このラボで作成したノートブックを引き続き使用する場合は、未使用時にオフにすることをおすすめします。Cloud コンソールの Notebooks UI で、ノートブックを選択して [停止] を選択します。
ノートブックを完全に削除する場合は、右上にある [削除] ボタンをクリックします。
デプロイしたエンドポイントを削除するには、Vertex AI コンソールの [エンドポイント] セクションに移動し、削除アイコンをクリックします。
ストレージ バケットを削除するには、Cloud コンソールのナビゲーション メニューで [ストレージ] に移動してバケットを選択し、[削除] をクリックします。