オンライン予測の 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. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトに対して課金が有効になっていることを確認する方法を学習する

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

    API を有効にする

    にアクセスします。
  5. AI Platform Training and Prediction API and Compute Engine API を有効にします。

    API を有効にする

  6. Google Cloud SDKgcloud コマンドライン ツールをインストールします。

データセットの作成

まず、ML モデルを格納する BigQuery データセットを作成します。データセットを作成するには、次の操作を行います。

  1. Google Cloud Console で [BigQuery] ページに移動します。

    [BigQuery] ページに移動

  2. ナビゲーション パネルの [リソース] セクションで、プロジェクト名をクリックします。

  3. 右側の詳細パネルで、[データセットを作成] をクリックします。

    データセットを作成する

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

    • [データセット ID] に bqml_tutorial を入力します。
    • [データのロケーション] で [米国(US)] を選択します。現在、一般公開データセットは US マルチ リージョン ロケーションに保存されています。わかりやすくするため、データセットを同じロケーションに配置します。

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

  5. その他のデフォルト設定はすべてそのままにし、[データセットを作成] をクリックします。

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

モデルのトレーニング

BigQuery ML の CREATE MODEL ステートメントを使用して Iris タイプを予測するロジスティック回帰モデルをトレーニングします。このトレーニング ジョブは約 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
gsutil cp -r gs://some/gcs/path/iris_model tmp_dir

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

このステップでは、モデルのバージョン番号(この場合は 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

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

このセクションでは、gcloud コマンドライン ツールを使用して、エクスポートしたモデルに対してデプロイと予測を実行します。

オンライン / バッチ予測のためにモデルを 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

オンライン予測

デプロイされたモデルに対してオンライン予測を実行する方法についての詳細は、https://cloud.google.com/ai-platform/prediction/docs/online-predict#requesting_predictions をご覧ください。

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

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

モデルのトレーニング

BigQuery ML の CREATE MODEL ステートメントを使用して、Iris タイプを予測するブーストツリー分類モデルをトレーニングします。このトレーニング ジョブが完了するまでに 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
gsutil cp -r gs://some/gcs/path/boosted_tree_iris_model serving_dir

predictor.py を抽出する

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}]'

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

このセクションでは、gcloud コマンドライン ツールを使用して、エクスポートしたモデルに対してデプロイと予測を実行します。

カスタム ルーティンを使用してオンライン / バッチ予測用のモデルを 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 分類モデルのトレーニングとデプロイ

モデルのトレーニング

BigQuery ML の CREATE MODEL ステートメントを使用して、Iris タイプを予測する 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
gsutil cp -r gs://some/gcs/path/automl_iris_model/* automl_serving_dir/

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. 必要に応じて、Cloud Console で [BigQuery] ページを開きます。

    [BigQuery] ページに移動

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

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

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

Cloud Storage バケットを削除する

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

  1. Cloud Console で、Cloud Storage ブラウザページに移動します。

    [ブラウザ] に移動

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

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

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

プロジェクトの削除

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

  1. Cloud Console で [リソースの管理] ページに移動します。

    [リソースの管理] に移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

次のステップ