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


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

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

費用

このチュートリアルでは、Google Cloud の課金対象となる以下のコンポーネントを使用します。

  • BigQuery ML
  • Cloud Storage
  • AI Platform(オプション。オンライン予測に使用)

BigQuery ML の費用の詳細については、BigQuery ML の料金をご覧ください。

Cloud Storage の費用の詳細については、Cloud Storage の料金ページをご覧ください。

AI Platform の費用の詳細については、予測ノードとリソース割り当てページをご覧ください。

始める前に

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. 新しいプロジェクトでは、BigQuery が自動的に有効になります。既存のプロジェクトで BigQuery を有効にするには、

    Enable the BigQuery API.

    Enable the API

    に移動します。
  7. Enable the AI Platform Training and Prediction API and Compute Engine APIs.

    Enable the APIs

  8. Google Cloud CLIGoogle Cloud CLI をインストールします。

データセットを作成する

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

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

    [BigQuery] ページに移動

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

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

    データセットを作成する。

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

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

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

      一般公開データセットは US マルチリージョンに保存されています。わかりやすくするため、データセットを同じロケーションに保存します。

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

      データセットの作成ページ。

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

モデルをトレーニングする

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 を使用して、エクスポートされたモデルに対して予測をデプロイおよび実施します。

オンライン / バッチ予測のためにモデルを AI Platform にデプロイする方法の詳細については、モデルのデプロイをご覧ください。

モデルリソースを作成する

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 を使用して、AI Platform オンライン予測でエクスポートされたモデルに対して予測をデプロイおよび実施します。

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

モデルリソースを作成する

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 分類モデルのトレーニングとデプロイ

モデルをトレーニングする

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

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

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

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。

  • 作成したプロジェクトを削除する。
  • または、プロジェクトを保持し、データセットと Cloud Storage バケットを削除する。

Docker コンテナを停止する

1)実行中のすべての Docker コンテナを一覧表示する。

docker ps

2)コンテナリストから該当するコンテナ ID のコンテナを停止する。

docker stop container_id

AI Platform リソースを削除する

1)モデル バージョンを削除する。

gcloud ai-platform versions delete $VERSION_NAME --model=$MODEL_NAME

2)モデルを削除する。

gcloud ai-platform models delete $MODEL_NAME

データセットを削除する

プロジェクトを削除すると、プロジェクト内のデータセットとテーブルがすべて削除されます。プロジェクトを再利用する場合は、このチュートリアルで作成したデータセットを削除できます。

  1. 必要に応じて、Google Cloud コンソールで [BigQuery] ページを開きます。

    [BigQuery] ページに移動

  2. ナビゲーションで、作成した bqml_tutorial データセットをクリックします。

  3. ウィンドウの右側にある [データセットを削除] をクリックします。この操作を行うと、データセット、テーブル、すべてのデータが削除されます。

  4. [データセットの削除] ダイアログ ボックスでデータセットの名前(bqml_tutorial)を入力して、[削除] をクリックします。

Cloud Storage バケットの削除

プロジェクトを削除すると、プロジェクト内のすべての Cloud Storage バケットが削除されます。プロジェクトを再利用する場合は、このチュートリアルで作成したバケットを削除できます。

  1. Google Cloud コンソールで、Cloud Storage の [バケット] ページに移動します。

    [バケット] に移動

  2. 削除するバケットのチェックボックスをオンにします。

  3. [削除] をクリックします。

  4. 上に重なったウィンドウで、[削除] をクリックして、バケットとそのコンテンツを削除することを確認します。

プロジェクトを削除する

プロジェクトを削除するには:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

次のステップ