オンライン予測の BigQuery ML モデルをエクスポートする

このチュートリアルでは、Vertex AI またはローカルマシンに BigQuery ML モデルをエクスポートし、続いてそのモデルをデプロイする方法について説明します。BigQuery 一般公開データセットの iris テーブルを使用して、次のエンドツーエンドのシナリオを実施します。

  • ロジスティック回帰モデルのトレーニングとデプロイ。DNN 分類器、DNN リグレッサー、K 平均法、線形回帰、行列分解モデルにも適用されます。
  • ブーストツリー分類モデルのトレーニングとデプロイ。ブーストツリー リグレッサー モデルにも適用されます。
  • AutoML 分類モデルのトレーニングとデプロイ。AutoML リグレッサー モデルにも適用されます。

データセットの作成

ML モデルを保存する BigQuery データセットを作成します。

コンソール

  1. Google Cloud コンソールで、[BigQuery] ページに移動します。

    [BigQuery] ページに移動

  2. [エクスプローラ] ペインで、プロジェクト名をクリックします。

  3. [アクションを表示] > [データセットを作成] をクリックします。

  4. [データセットを作成する] ページで、次の操作を行います。

    • [データセット ID] に「bqml_tutorial」と入力します。

    • [ロケーション タイプ] で [マルチリージョン] を選択してから、[US(米国の複数のリージョン)] を選択します。

    • 残りのデフォルトの設定は変更せず、[データセットを作成] をクリックします。

bq

新しいデータセットを作成するには、--location フラグを指定した bq mk コマンドを使用します。使用可能なパラメータの一覧については、bq mk --dataset コマンドのリファレンスをご覧ください。

  1. データの場所が US に設定され、BigQuery ML tutorial dataset という説明の付いた、bqml_tutorial という名前のデータセットを作成します。

    bq --location=US mk -d \
     --description "BigQuery ML tutorial dataset." \
     bqml_tutorial

    このコマンドでは、--dataset フラグの代わりに -d ショートカットを使用しています。-d--dataset を省略した場合、このコマンドはデフォルトでデータセットを作成します。

  2. データセットが作成されたことを確認します。

    bq ls

API

定義済みのデータセット リソースを使用して datasets.insert メソッドを呼び出します。

{
  "datasetReference": {
     "datasetId": "bqml_tutorial"
  }
}

BigQuery DataFrames

このサンプルを試す前に、BigQuery DataFrames を使用した BigQuery クイックスタートの手順に沿って BigQuery DataFrames を設定してください。詳細については、BigQuery DataFrames のリファレンス ドキュメントをご覧ください。

BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の ADC の設定をご覧ください。

import google.cloud.bigquery

bqclient = google.cloud.bigquery.Client()
bqclient.create_dataset("bqml_tutorial", exists_ok=True)

ロジスティック回帰モデルのトレーニングとデプロイ

以降のセクションでは、ロジスティック回帰モデルをトレーニングしてデプロイする方法について説明します。

モデルのトレーニング

BigQuery ML の CREATE MODEL ステートメントを使用して、アヤメの種類を予測するロジスティック回帰モデルをトレーニングします。このトレーニング ジョブは約 1 分で完了します。

bq query --use_legacy_sql=false \
  'CREATE MODEL `bqml_tutorial.iris_model`
  OPTIONS (model_type="logistic_reg",
      max_iterations=10, input_label_cols=["species"])
  AS SELECT
    *
  FROM
    `bigquery-public-data.ml_datasets.iris`;'

モデルをエクスポートする

bq コマンドライン ツールを使用して、モデルを Cloud Storage バケットにエクスポートします。モデルをエクスポートするその他の方法については、BigQuery ML モデルのエクスポートをご覧ください。この抽出ジョブは 1 分以内に完了します。

bq extract -m bqml_tutorial.iris_model gs://some/gcs/path/iris_model

ローカルでのデプロイと提供

エクスポートした TensorFlow モデルは、TensorFlow Serving Docker コンテナを使用してデプロイできます。次のステップでは、Docker をインストールする必要があります。

エクスポートしたモデルファイルを一時ディレクトリにダウンロードする

mkdir tmp_dir
gcloud storage cp gs://some/gcs/path/iris_model tmp_dir --recursive

バージョン サブディレクトリを作成する

このステップでは、モデルのバージョン番号(この場合は 1)を設定します。

mkdir -p serving_dir/iris_model/1
cp -r tmp_dir/iris_model/* serving_dir/iris_model/1
rm -r tmp_dir

Docker イメージを pull する

docker pull tensorflow/serving

Docker コンテナを実行する

docker run -p 8500:8500 --network="host" --mount type=bind,source=`pwd`/serving_dir/iris_model,target=/models/iris_model -e MODEL_NAME=iris_model -t tensorflow/serving &

予測を実行する

curl -d '{"instances": [{"sepal_length":5.0, "sepal_width":2.0, "petal_length":3.5, "petal_width":1.0}]}' -X POST http://localhost:8501/v1/models/iris_model:predict

オンラインでのデプロイと提供

このセクションでは、Google Cloud CLI を使用して、エクスポートされたモデルに対して予測をデプロイおよび実施します。

オンライン予測またはバッチ予測のためにモデルを Vertex AI にデプロイする方法については、エンドポイントにモデルをデプロイするをご覧ください。

モデルリソースの作成

MODEL_NAME="IRIS_MODEL"
gcloud ai-platform models create $MODEL_NAME

モデル バージョンの作成

1)環境変数を設定する。

MODEL_DIR="gs://some/gcs/path/iris_model"
// Select a suitable version for this model
VERSION_NAME="v1"
FRAMEWORK="TENSORFLOW"

2)バージョンを作成する。

gcloud ai-platform versions create $VERSION_NAME --model=$MODEL_NAME --origin=$MODEL_DIR --runtime-version=1.15 --framework=$FRAMEWORK

このステップが完了するまで数分かかることがあります。Creating version (this might take a few minutes)...... というメッセージが表示されます。

3)(省略可)新しいバージョンに関する情報を取得する。

gcloud ai-platform versions describe $VERSION_NAME --model $MODEL_NAME

次のような出力が表示されます。

createTime: '2020-02-28T16:30:45Z'
deploymentUri: gs://your_bucket_name
framework: TENSORFLOW
machineType: mls1-c1-m2
name: projects/[YOUR-PROJECT-ID]/models/IRIS_MODEL/versions/v1
pythonVersion: '2.7'
runtimeVersion: '1.15'
state: READY

オンライン予測

デプロイされたモデルに対してオンライン予測を実行する方法については、カスタム トレーニング モデルからオンライン予測を取得するをご覧ください。

1)入力用の改行区切りの JSON ファイルを作成する(例: 次の内容の instances.json ファイル)

{"sepal_length":5.0, "sepal_width":2.0, "petal_length":3.5, "petal_width":1.0}
{"sepal_length":5.3, "sepal_width":3.7, "petal_length":1.5, "petal_width":0.2}

2)予測用の環境変数を設定する。

INPUT_DATA_FILE="instances.json"

3)予測を実行する。

gcloud ai-platform predict --model $MODEL_NAME --version $VERSION_NAME --json-instances $INPUT_DATA_FILE

ブーストツリー分類モデルのトレーニングとデプロイ

ブーストツリー分類モデルをトレーニングしてデプロイする方法については、以降のセクションをご覧ください。

モデルのトレーニング

CREATE MODEL ステートメントを使用して、アヤメの種類を予測するブーストツリー分類モデルをトレーニングします。このトレーニング ジョブが完了するまでに 7 分ほどかかります。

bq query --use_legacy_sql=false \
  'CREATE MODEL `bqml_tutorial.boosted_tree_iris_model`
  OPTIONS (model_type="boosted_tree_classifier",
      max_iterations=10, input_label_cols=["species"])
  AS SELECT
    *
  FROM
    `bigquery-public-data.ml_datasets.iris`;'

モデルをエクスポートする

bq コマンドライン ツールを使用して、モデルを Cloud Storage バケットにエクスポートします。モデルをエクスポートするその他の方法については、BigQuery ML モデルのエクスポートをご覧ください。

bq extract --destination_format ML_XGBOOST_BOOSTER -m bqml_tutorial.boosted_tree_iris_model gs://some/gcs/path/boosted_tree_iris_model

ローカルでのデプロイと提供

エクスポートされたファイルには、ローカル実行用の main.py ファイルが含まれています。

エクスポートしたモデルファイルをローカル ディレクトリにダウンロードする

mkdir serving_dir
gcloud storage cp gs://some/gcs/path/boosted_tree_iris_model serving_dir --recursive

予測因子を抽出する

tar -xvf serving_dir/boosted_tree_iris_model/xgboost_predictor-0.1.tar.gz -C serving_dir/boosted_tree_iris_model/

XGBoost ライブラリをインストールする

XGBoost ライブラリのバージョン 0.82 以降をインストールします。

予測を実行する

cd serving_dir/boosted_tree_iris_model/
python main.py '[{"sepal_length":5.0, "sepal_width":2.0, "petal_length":3.5, "petal_width":1.0}]'

オンラインでのデプロイと提供

このセクションでは、Google Cloud CLI を使用して、エクスポートされたモデルに対して予測をデプロイおよび実施します。詳細については、カスタム トレーニング モデルからオンライン予測を取得するをご覧ください。

カスタム ルーチンを使用してオンライン予測またはバッチ予測用のモデルを Vertex AI にデプロイする方法については、エンドポイントにモデルをデプロイするをご覧ください。

モデルリソースの作成

MODEL_NAME="BOOSTED_TREE_IRIS_MODEL"
gcloud ai-platform models create $MODEL_NAME

モデル バージョンの作成

1)環境変数を設定する。

MODEL_DIR="gs://some/gcs/path/boosted_tree_iris_model"
VERSION_NAME="v1"

2)バージョンを作成する。

gcloud beta ai-platform versions create $VERSION_NAME --model=$MODEL_NAME --origin=$MODEL_DIR --package-uris=${MODEL_DIR}/xgboost_predictor-0.1.tar.gz --prediction-class=predictor.Predictor --runtime-version=1.15

このステップが完了するまで数分かかることがあります。Creating version (this might take a few minutes)...... というメッセージが表示されます。

3)(省略可)新しいバージョンに関する情報を取得する。

gcloud ai-platform versions describe $VERSION_NAME --model $MODEL_NAME

次のような出力が表示されます。

createTime: '2020-02-07T00:35:42Z'
deploymentUri: gs://some/gcs/path/boosted_tree_iris_model
etag: rp090ebEnQk=
machineType: mls1-c1-m2
name: projects/[YOUR-PROJECT-ID]/models/BOOSTED_TREE_IRIS_MODEL/versions/v1
packageUris:
- gs://some/gcs/path/boosted_tree_iris_model/xgboost_predictor-0.1.tar.gz
predictionClass: predictor.Predictor
pythonVersion: '2.7'
runtimeVersion: '1.15'
state: READY

オンライン予測

デプロイされたモデルに対してオンライン予測を実行する方法については、カスタム トレーニング モデルからオンライン予測を取得するをご覧ください。

1)入力用の改行区切りの JSON ファイルを作成する。たとえば、次の内容を含む instances.json ファイルを作成します。

{"sepal_length":5.0, "sepal_width":2.0, "petal_length":3.5, "petal_width":1.0}
{"sepal_length":5.3, "sepal_width":3.7, "petal_length":1.5, "petal_width":0.2}

2)予測用の環境変数を設定する。

INPUT_DATA_FILE="instances.json"

3)予測を実行する。

gcloud ai-platform predict --model $MODEL_NAME --version $VERSION_NAME --json-instances $INPUT_DATA_FILE

AutoML 分類モデルのトレーニングとデプロイ

以降のセクションでは、AutoML 分類モデルをトレーニングしてデプロイする方法について説明します。

モデルのトレーニング

CREATE MODEL ステートメントを使用して、アヤメの種類を予測する AutoML 分類モデルをトレーニングします。AutoML モデルには、少なくとも 1,000 行の入力データが必要です。ml_datasets.iris には 150 行しかないため、このデータを 10 回複製します。このトレーニング ジョブが完了するまでに 2 時間ほどかかります。

bq query --use_legacy_sql=false \
  'CREATE MODEL `bqml_tutorial.automl_iris_model`
  OPTIONS (model_type="automl_classifier",
      budget_hours=1, input_label_cols=["species"])
  AS SELECT
    * EXCEPT(multiplier)
  FROM
    `bigquery-public-data.ml_datasets.iris`, unnest(GENERATE_ARRAY(1, 10)) as multiplier;'

モデルをエクスポートする

bq コマンドライン ツールを使用して、モデルを Cloud Storage バケットにエクスポートします。モデルをエクスポートするその他の方法については、BigQuery ML モデルのエクスポートをご覧ください。

bq extract -m bqml_tutorial.automl_iris_model gs://some/gcs/path/automl_iris_model

ローカルでのデプロイと提供

AutoML コンテナの構築方法については、モデルのエクスポートをご覧ください。次のステップでは、Docker をインストールする必要があります。

エクスポートされたモデルファイルをローカル ディレクトリにコピーする

mkdir automl_serving_dir
gcloud storage cp gs://some/gcs/path/automl_iris_model/* automl_serving_dir/ --recursive

AutoML Docker イメージを pull する

docker pull gcr.io/cloud-automl-tables-public/model_server

Docker コンテナを起動する

docker run -v `pwd`/automl_serving_dir:/models/default/0000001 -p 8080:8080 -it gcr.io/cloud-automl-tables-public/model_server

予測を実行する

1)入力用の改行区切りの JSON ファイルを作成する。たとえば、次の内容を含む input.json ファイルを作成します。

{"instances": [{"sepal_length":5.0, "sepal_width":2.0, "petal_length":3.5, "petal_width":1.0},
{"sepal_length":5.3, "sepal_width":3.7, "petal_length":1.5, "petal_width":0.2}]}

2)予測呼び出しを行う。

curl -X POST --data @input.json http://localhost:8080/predict

オンラインでのデプロイと提供

Vertex AI では、AutoML リグレッサーと AutoML 分類モデルのオンライン予測はサポートされていません。